【问题标题】:How to delete all the files expect the Input files by Abaqus python scripting?如何通过 Abaqus python 脚本删除除输入文件之外的所有文件?
【发布时间】:2026-02-13 23:40:01
【问题描述】:

我编写了一个 python 脚本来在 Abaqus 中制作一些模型。然后在不提交作业的情况下,我编写输入并运行输入文件以获取其他 python 脚本中的 odb。由于现在有超过 500 个模型并且需要减少计算时间或保护我的计算机免于被压坏,我想要在一个 python 脚本中应该做的......

  1. 提交一个作业写入输入并自动删除一个作业的所有文件..然后第二个...第三个...第四个... 为了清楚起见,例如::for model-1(i=1),create part,create mesh,write input,close ... model-100(i=100),创建零件,创建网格,关闭。因此,在从一种模型转换为其他模型之前,我没有任何运行。我是初学者,不太了解 abaqus 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') 
``

【问题讨论】:

标签: python abaqus


【解决方案1】:

基本上,您想删除模型和 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)

【讨论】:

  • 在新的子文件夹中创建新模型并删除文件夹不是更容易吗?或者,作为替代方案,您可以不列出“要删除”的文件扩展名,而是“要保留”的扩展名
  • 是的。为每个模型创建单独的文件夹会更好。但是删除整个文件夹是不可取的,因为我们需要 odb 和输入文件以供我们进一步使用。
  • 您好,谢谢两位的回答。有没有可能,在我的第一个脚本中,我的模型会一个一个地创建输入,并且每次模型都会一个一个地自动删除?我可以使用....正如@SatishThorat 建议的那样,mdb.jobs['Job-%s'%(i+1)].writeInput() del mdb.models['Model-%s'%(Beam_h[i])]。但这对我没有帮助,因为它最后会一起删除所有模型。我希望他们创建第一个输入并删除,然后创建第二个输入并删除。请给我一个指导。
  • 查看我在对原始帖子的评论中发送给您的线程:您需要等到上一个作业完成才能删除它。
  • 谢谢。它对我有帮助。