126 lines
4.1 KiB
Python
126 lines
4.1 KiB
Python
|
# Import Neccesary Abaqus Modules
|
||
|
from abaqusConstants import *
|
||
|
from abaqus import *
|
||
|
from odbAccess import *
|
||
|
import regionToolset
|
||
|
import sys
|
||
|
import os
|
||
|
import interaction
|
||
|
import mesh
|
||
|
#Read in Model Parameters
|
||
|
paramFile=sys.argv[-1]
|
||
|
jobName=paramFile.encode("hex")
|
||
|
os.system ("cp %s %s" % ('OptB.cae', jobName+'.cae'))
|
||
|
mdb=openMdb(jobName+'.cae')
|
||
|
inFile = open(paramFile,"r")
|
||
|
inFile.readline()
|
||
|
x1,name1=inFile.readline().split()
|
||
|
x2,name2=inFile.readline().split()
|
||
|
x3,name3=inFile.readline().split()
|
||
|
x4,name4=inFile.readline().split()
|
||
|
x5,name5=inFile.readline().split()
|
||
|
x6,name6=inFile.readline().split()
|
||
|
mname='Dream6'
|
||
|
#Generate New Model
|
||
|
aModel=mdb.models[mname]
|
||
|
aAss=aModel.rootAssembly
|
||
|
tol=0.0001
|
||
|
radius=0.75
|
||
|
numCrowns=6.
|
||
|
W=float(x1)
|
||
|
T=float(x2)
|
||
|
L1=float(x3)
|
||
|
L2=float(x4)*L1
|
||
|
L3=float(x5)
|
||
|
H2=float(x6)
|
||
|
H1=(pi*radius)/(2.*numCrowns)
|
||
|
# Modify Part
|
||
|
aPart=aModel.parts['Geom']
|
||
|
aSketch=aPart.features['Solid extrude-1'].sketch
|
||
|
aModel.ConstrainedSketch(name='__edit__', objectToCopy=aSketch)
|
||
|
bSketch=aModel.sketches['__edit__']
|
||
|
bSketch.parameters['w'].setValues(expression=str(W/2.))
|
||
|
bSketch.parameters['h1'].setValues(expression=str(H1))
|
||
|
bSketch.parameters['h2'].setValues(expression=str(H2))
|
||
|
bSketch.parameters['l1'].setValues(expression=str(L1))
|
||
|
bSketch.parameters['l2'].setValues(expression=str(L2))
|
||
|
bSketch.parameters['l3'].setValues(expression=str(L3))
|
||
|
aPart.features['Solid extrude-1'].setValues(sketch=bSketch)
|
||
|
del aModel.sketches['__edit__']
|
||
|
aPart.features['Solid extrude-1'].setValues(depth=T)
|
||
|
aPart.regenerate()
|
||
|
# Mesh Part
|
||
|
aPart.seedPart(size=W/6., deviationFactor=0.1)
|
||
|
aPart.generateMesh()
|
||
|
# Create Orphan Mesh
|
||
|
aPart.PartFromMesh(name='AMesh')
|
||
|
bPart=aModel.parts['AMesh']
|
||
|
# Create Sets,Sections,Surfaces
|
||
|
for nameSet,eachSet in aPart.sets.items():
|
||
|
bPart.Set(name=nameSet, nodes=eachSet.nodes)
|
||
|
bPart.Set(name='AllE', elements=aPart.sets['All'].elements)
|
||
|
bPart.Set(name='InnerE', elements=aPart.sets['Inner'].elements)
|
||
|
bPart.Set(name='OuterE', elements=aPart.sets['Outer'].elements)
|
||
|
region = regionToolset.Region(elements=bPart.elements)
|
||
|
bPart.SectionAssignment(region=region, sectionName='Magnesium')
|
||
|
aPart=aModel.parts['AMesh']
|
||
|
elemType1 = mesh.ElemType(elemCode=C3D8R, elemLibrary=STANDARD,
|
||
|
kinematicSplit=AVERAGE_STRAIN, secondOrderAccuracy=OFF,
|
||
|
hourglassControl=ENHANCED, distortionControl=DEFAULT)
|
||
|
pickedRegions =(aPart.elements, )
|
||
|
aPart.setElementType(regions=pickedRegions, elemTypes=(elemType1, ))
|
||
|
# Wrap Part
|
||
|
nlist=[]
|
||
|
clist=[]
|
||
|
for eachnode in aPart.nodes:
|
||
|
theta=eachnode.coordinates[1]/radius
|
||
|
newcoord1=eachnode.coordinates[0]
|
||
|
newcoord2=(radius-eachnode.coordinates[2])*cos(theta)
|
||
|
newcoord3=(radius-eachnode.coordinates[2])*sin(theta)
|
||
|
nlist.append(eachnode)
|
||
|
clist.append((newcoord1,newcoord2,newcoord3))
|
||
|
aPart.editNode(nodes=nlist,coordinates=clist)
|
||
|
aPart.regenerate()
|
||
|
aAss.regenerate()
|
||
|
aInst=aAss.instances['AMesh-1']
|
||
|
aModel.rootAssembly.Set(name='Set-1',nodes=aInst.nodes)
|
||
|
incFile=open('NodeData.inc','w')
|
||
|
numFaces=0
|
||
|
pstring=''
|
||
|
# Cycle through all element faces
|
||
|
for eachFace in aPart.elementFaces:
|
||
|
# Check if Face is on external Surface
|
||
|
if len(eachFace.getElements())==1:
|
||
|
numFaces=numFaces+1
|
||
|
faceNodes=eachFace.getNodes()
|
||
|
# Identify 'Fixed' Faces
|
||
|
fixed=1
|
||
|
try:
|
||
|
fSet=aPart.sets['Fixed']
|
||
|
for eachNode in faceNodes:
|
||
|
if eachNode not in fSet.nodes:
|
||
|
fixed=0
|
||
|
break
|
||
|
except:
|
||
|
fixed=0
|
||
|
pstring=pstring+str(fixed)+' '
|
||
|
# Write Element Nodes
|
||
|
eNodes=[]
|
||
|
for eachNode in eachFace.getElements()[0].getNodes():
|
||
|
pstring=pstring+str(eachNode.label)+' '
|
||
|
pstring=pstring+'\n'
|
||
|
# Write Each Face Nodes and Corresponding Connected Nodes
|
||
|
for eachNode in faceNodes:
|
||
|
pstring=pstring+str(eachNode.label)+' '
|
||
|
for eachEdge in eachNode.getElemEdges():
|
||
|
for eachENode in eachEdge.getNodes():
|
||
|
if eachENode.label != eachNode.label and eachENode in faceNodes:
|
||
|
pstring=pstring+str(eachENode.label)+' '
|
||
|
pstring=pstring+'\n'
|
||
|
incFile.write(str(numFaces)+'\n')
|
||
|
incFile.write(pstring)
|
||
|
incFile.close()
|
||
|
mdb.Job(name=jobName, model=mname)
|
||
|
mdb.jobs[jobName].writeInput(consistencyChecking=OFF)
|
||
|
mdb.close()
|
||
|
|