我已经编写了一个python脚本来在Abaqus中建立一些模型。然后,在不提交作业的情况下,我编写输入并运行输入文件,以获得其他python脚本中的odb。由于现在有500多个模型,需要减少计算时间或使我的计算机免于崩溃,所以在一个python脚本中我需要做的是.
from abaqus import *
from abaqusConstants import *
import __main__
import section
import regionToolset
import displayGroupMdbToolset as dgm
import part
import material
import assembly
import step
import interaction
import load
import mesh
import optimization
import job
import sketch
import visualization
import xyPlot
import displayGroupOdbToolset as dgo
import connectorBehavior
Beam_h = [20, 50,30] #Beam Height mm
Beam_w = [10, 10,10] #Beam width mm
mesh_size = 2.5 #mesh size mm
Beam_d = 400.0 #Beam length mm
Z1 = [50,385,350]
Z2 = [50,5,10]
Pressure = 50.0 # Applied Pressure [MPa]
Young_m = 190000 #Young's Modulus [MPa]
Poisson_r = 0.32 #Poisson's ratio
session.journalOptions.setValues(replayGeometry=COORDINATE,recoverGeometry=COORDINATE)
for i in range(len(Beam_h)):
mdb.Model(name='Model-%s'%(Beam_h[i]), modelType=STANDARD_EXPLICIT)
session.viewports['Viewport: 1'].setValues(displayedObject=None)
session.viewports['Viewport: 1'].partDisplay.setValues(sectionAssignments=OFF,
engineeringFeatures=OFF)
session.viewports['Viewport: 1'].partDisplay.geometryOptions.setValues(
referenceRepresentation=ON)
s = mdb.models['Model-%s'%(Beam_h[i])].ConstrainedSketch(name='__profile__',
sheetSize=200.0)
g, v, d, c = s.geometry, s.vertices, s.dimensions, s.constraints
s.setPrimaryObject(option=STANDALONE)
#Create a rectangle using two points
s.setPrimaryObject(option=STANDALONE)
s.Spot(point=(-Beam_w[i]*0.5, Beam_h[i]*0.5))
s.Spot(point=(-Beam_w[i]*0.5, -Beam_h[i]*0.5))
s.Spot(point=(Beam_w[i]*0.5, -Beam_h[i]*0.5))
s.Spot(point=(Beam_w[i]*0.5, Beam_h[i]*0.5))
s.Line(point1=(-Beam_w[i]*0.5, Beam_h[i]*0.5), point2=(-Beam_w[i]*0.5, -Beam_h[i]*0.5))
s.VerticalConstraint(entity=g[2], addUndoState=False)
s.Line(point1=(-Beam_w[i]*0.5, -Beam_h[i]*0.5), point2=(Beam_w[i]*0.5, -Beam_h[i]*0.5))
s.HorizontalConstraint(entity=g[3], addUndoState=False)
s.PerpendicularConstraint(entity1=g[2], entity2=g[3], addUndoState=False)
s.Line(point1=(Beam_w[i]*0.5, -Beam_h[i]*0.5), point2=(Beam_w[i]*0.5, Beam_h[i]*0.5))
s.VerticalConstraint(entity=g[4], addUndoState=False)
s.PerpendicularConstraint(entity1=g[3], entity2=g[4], addUndoState=False)
s.Line(point1=(Beam_w[i]*0.5, Beam_h[i]*0.5), point2=(-Beam_w[i]*0.5, Beam_h[i]*0.5))
s.HorizontalConstraint(entity=g[5], addUndoState=False)
s.PerpendicularConstraint(entity1=g[4], entity2=g[5], addUndoState=False)
p = mdb.models['Model-%s'%(Beam_h[i])].Part(name='Beam', dimensionality=THREE_D,
type=DEFORMABLE_BODY)
p = mdb.models['Model-%s'%(Beam_h[i])].parts['Beam']
#Extrude the sketch "s" over the depth "Beam_d"
p.BaseSolidExtrude(sketch=s, depth=Beam_d)
#Define elastic material
mdb.models['Model-%s'%(Beam_h[i])].Material(name='Steel')
mdb.models['Model-%s'%(Beam_h[i])].materials['Steel'].Elastic(table=((Young_m, Poisson_r), ))
#Define homogeneous solid section
mdb.models['Model-%s'%(Beam_h[i])].HomogeneousSolidSection(name='BeamSection',
material='Steel', thickness=None)
#Create a set into part level, used for section assignment
p = mdb.models['Model-%s'%(Beam_h[i])].parts['Beam']
c = p.cells
cells = c.getSequenceFromMask(mask=('[#1 ]', ), )
region = p.Set(cells=cells, name='Beam')
p = mdb.models['Model-%s'%(Beam_h[i])].parts['Beam']
#Assign the section to a defined "region"
p.SectionAssignment(region=region, sectionName='BeamSection', offset=0.0,
offsetType=MIDDLE_SURFACE, offsetField='',
thicknessAssignment=FROM_SECTION)
session.viewports['Viewport: 1'].partDisplay.setValues(sectionAssignments=OFF,
engineeringFeatures=OFF, mesh=ON)
session.viewports['Viewport: 1'].partDisplay.meshOptions.setValues(
meshTechnique=ON)
p = mdb.models['Model-%s'%(Beam_h[i])].parts['Beam']
p.DatumPlaneByPrincipalPlane(principalPlane=XYPLANE, offset=Z1[i])###first partition in xy plane
p = mdb.models['Model-%s'%(Beam_h[i])].parts['Beam']
p.DatumPlaneByPrincipalPlane(principalPlane=XYPLANE, offset=Beam_d-Z2[i])###2nd partition over xy plane which is total depth-z1
p = mdb.models['Model-%s'%(Beam_h[i])].parts['Beam']
c = p.cells
pickedCells = c.getSequenceFromMask(mask=('[#1 ]', ), )
d1 = p.datums
p.PartitionCellByDatumPlane(datumPlane=d1[3], cells=pickedCells)
p = mdb.models['Model-%s'%(Beam_h[i])].parts['Beam']
c = p.cells
pickedCells = c.getSequenceFromMask(mask=('[#1 ]', ), )
d2 = p.datums
p.PartitionCellByDatumPlane(datumPlane=d2[4], cells=pickedCells)
#Apply general mesh seed
p = mdb.models['Model-%s'%(Beam_h[i])].parts['Beam']
p.seedPart(size=mesh_size, deviationFactor=0.1, minSizeFactor=0.1)
#Generate Mesh
p = mdb.models['Model-%s'%(Beam_h[i])].parts['Beam']
p.generateMesh()
#Import part into the instance
a = mdb.models['Model-%s'%(Beam_h[i])].rootAssembly
session.viewports['Viewport: 1'].setValues(displayedObject=a)
session.viewports['Viewport: 1'].assemblyDisplay.setValues(
optimizationTasks=OFF, geometricRestrictions=OFF, stopConditions=OFF)
a = mdb.models['Model-%s'%(Beam_h[i])].rootAssembly
a.DatumCsysByDefault(CARTESIAN)
p = mdb.models['Model-%s'%(Beam_h[i])].parts['Beam']
a.Instance(name='Beam-1', part=p, dependent=ON)
# a = mdb.models['Model-%s'%(Beam_h[i])].rootAssembly
# f1 = a.instances['Beam-1'].faces
# faces1 = f1.getSequenceFromMask(mask=('[#20 ]', ), )
# a.Set(faces=faces1, name='BC_Set')
# Create a surface set
a = mdb.models['Model-%s'%(Beam_h[i])].rootAssembly
s1 = a.instances['Beam-1'].faces
#side1Faces1 = s1.findAt(((0.0,Beam_h[i]*0.5,(Beam_d-Z2[i]-Z1[i]), ))for pressure in the middle of the surface
side1Faces1 = s1.findAt(((0.0,Beam_h[i]*0.5,(Z1[i]+0.1)), )) #pressure in the left surface and +0.1 is just a number to flip on right side
a.Surface(side1Faces=side1Faces1, name='PressSurface')
session.viewports['Viewport: 1'].assemblyDisplay.setValues(
adaptiveMeshConstraints=ON)
#Create analysis
mdb.models['Model-%s'%(Beam_h[i])].StaticStep(name='Step-1', previous='Initial',
timePeriod=1.0, maxNumInc=100, initialInc=1.0, minInc=1e-05,
maxInc=1.0, nlgeom=OFF)
session.viewports['Viewport: 1'].assemblyDisplay.setValues(step='Step-1')
session.viewports['Viewport: 1'].assemblyDisplay.setValues(loads=ON, bcs=ON,
predefinedFields=ON, connectors=ON, adaptiveMeshConstraints=OFF)
#Define a region using a set
a = mdb.models['Model-%s'%(Beam_h[i])].rootAssembly
region = a.surfaces['PressSurface']
#Applied Load
mdb.models['Model-%s'%(Beam_h[i])].Pressure(name='Load-1', createStepName='Step-1',
region=region, distributionType=UNIFORM, field='', magnitude=Pressure,
amplitude=UNSET)
#Boundary conditions
a = mdb.models['Model-%s'%(Beam_h[i])].rootAssembly #access the root assembly
e1 = a.instances['Beam-1'].edges #access the edges,e1 contains all of the edges
edges1 = e1.findAt(((0.0,-Beam_h[i]*0.5,0.0), ))#but we need only one edge so edge1. findAt needs exact coordinates x,y,z.of the edge
region = a.Set(edges=edges1, name='Set-2')
mdb.models['Model-%s'%(Beam_h[i])].DisplacementBC(name='BC_Set1', createStepName='Step-1',
region=region, u1=0.0, u2=0.0, u3=0.0, ur2=0.0, ur3=0.0,
amplitude=UNSET, fixed=OFF, distributionType=UNIFORM, fieldName='',
localCsys=None)
a = mdb.models['Model-%s'%(Beam_h[i])].rootAssembly
e1 = a.instances['Beam-1'].edges
edges2 = e1.findAt(((0.0,-Beam_h[i]*0.5,Beam_d), ))
region = a.Set(edges=edges2, name='Set-3')
mdb.models['Model-%s'%(Beam_h[i])].DisplacementBC(name='BC_Set2', createStepName='Step-1',
region=region, u1=0.0, u2=0.0, ur2=0.0, ur3=0.0,
amplitude=UNSET, fixed=OFF, distributionType=UNIFORM, fieldName='',
localCsys=None)
mdb.Job(name='Model-Job-%s'%(Beam_h[i]), model='Model-%s'%(Beam_h[i]), contactPrint=OFF, description='', echoPrint=OFF,
explicitPrecision=SINGLE, historyPrint=OFF,
memory=50, memoryUnits=PERCENTAGE, modelPrint=OFF,
multiprocessingMode=DEFAULT, nodalOutputPrecision=SINGLE,
numCpus=1, numGPUs=0, scratch='', type=ANALYSIS,
userSubroutine='')
mdb.jobs['Model-Job-%s'%(Beam_h[i])].writeInput()
``
``
#Then I used script to run the inputs
import os
os.system('abaqus -j Model-Job-20')
``发布于 2021-07-02 07:06:52
基本上,您想要删除模型和Abaqus文件。
要删除Abaqus模型,可以使用:
del mdb.models['Model-1']
若要删除运行作业后由Abaqus创建的文件,可以使用以下命令:
import os
job_name = 'Model-Job-20'
files_ext = ['.jnl','.inp','.res','.lck','.dat','.msg','.sta','.fil','.sim',
'.stt','.mdl','.prt','.ipm','.log','.com','.odb_f','.odb',]
for file_ex in files_ext:
file_path = job_name + file_ex
if os.path.exists(file_path):
os.remove(file_path)https://stackoverflow.com/questions/68217004
复制相似问题