abaqus_script.py
abaqus_script.py
py
def read_fractal_curve(filename):
try:
with open(filename, 'r') as file:
reader = csv.reader(file)
data = list(reader)
x = [float(row[0]) for row in data]
y = [float(row[1]) for row in data]
print("Read {} points from {}".format(len(x), filename))
return x, y
except Exception as e:
print("Error reading fractal curve from {}: {}".format(filename, e))
raise
def create_model(D):
try:
# 读取分形曲线
filename = 'fractal_curve_D_{:.2f}.csv'.format(D)
x, y = read_fractal_curve(filename)
# 创建模型数据库
myModel = mdb.Model(name='FractalSupport')
mySketch = myModel.ConstrainedSketch(name='__profile__', sheetSize=1.0)
print("Created model and sketch")
# 绘制分形曲线
points = list(zip(x, y))
mySketch.Spline(points=points)
print("Drawn spline")
# 创建零件
myPart = myModel.Part(name='FractalPart', dimensionality=TWO_D_PLANAR,
type=DEFORMABLE_BODY)
myPart.BaseWire(sketch=mySketch)
print("Created part")
# 创建装配体
myAssembly = myModel.rootAssembly
myAssembly.Instance(name='FractalInstance', part=myPart, dependent=ON)
print("Created assembly")
# 生成网格
myPart.seedPart(size=0.01, deviationFactor=0.1, minSizeFactor=0.1)
myPart.generateMesh()
print("Generated mesh")
# 创建材料和截面属性
myMaterial = myModel.Material(name='Material-1')
myMaterial.Elastic(table=((210000.0, 0.3),))
mySection = myModel.HomogeneousSolidSection(name='Section-1',
material='Material-1', thickness=None)
p = myAssembly.instances['FractalInstance']
c = p.cells
region = regionToolset.Region(cells=c)
p.SectionAssignment(region=region, sectionName='Section-1')
print("Assigned material and section")
# 创建分析步
myStep = myModel.StaticStep(name='LoadStep', previous='Initial')
print("Created step")
# 施加边界条件和载荷
myAssembly.Set(name='LeftEdge', vertices=p.vertices.getByBoundingBox(-1e9,
-1e9, -1e9, 0, 1e9, 1e9))
myAssembly.Set(name='RightEdge', vertices=p.vertices.getByBoundingBox(1e9,
-1e9, -1e9, 1e9, 1e9, 1e9))
myModel.DisplacementBC(name='FixedBC', createStepName='LoadStep',
region=myAssembly.sets['LeftEdge'], u1=0.0, u2=0.0, ur3=UNSET, amplitude=UNSET,
fixed=OFF, distributionType=UNIFORM, fieldName='', localCsys=None)
myModel.DisplacementBC(name='LoadBC', createStepName='LoadStep',
region=myAssembly.sets['RightEdge'], u1=0.1, u2=0.0, ur3=UNSET, amplitude=UNSET,
fixed=OFF, distributionType=UNIFORM, fieldName='', localCsys=None)
print("Applied boundary conditions and loads")
# 生成作业
myJob = mdb.Job(name='FractalSupportJob', model='FractalSupport',
type=ANALYSIS)
myJob.writeInput(consistencyChecking=OFF)
myJob.submit(consistencyChecking=OFF)
myJob.waitForCompletion()
print("Job completed")
# 提取结果
odb = session.openOdb(name='FractalSupportJob.odb')
frame = odb.steps['LoadStep'].frames[-1]
stress = frame.fieldOutputs['S']
strain = frame.fieldOutputs['E']
stress_data = stress.values[0].data[0] # 假设应力是第一个节点的第一个分量
strain_data = strain.values[0].data[0] # 假设应变是第一个节点的第一个分量
print("Extracted results")
if __name__ == "__main__":
import sys
if len(sys.argv) != 2:
print("Usage: abaqus cae noGUI=abaqus_script.py -- -D <D_value>")
sys.exit(1)
try:
D = float(sys.argv[1])
stress, strain = create_model(D)
print("Stress: {}, Strain: {}".format(stress, strain))
except Exception as e:
print("Error: {}".format(e))
sys.exit(1)