基于Python,由inp文档获取输入,实现自动化生成.wdf文件

 输入

模板

 

 

输出

 

 

代码:


import re
import sys
import os
#
ls_weldline = []
ls_welddomain = []
ls1 = []
ls2 = []
fa = open('project_1.inp', 'r')
fb = open("weldline_out.txt",'w')
fc = open("welddomain_out.txt",'w')


for line in fa:
    if "weldline_" in line:
        ls1.append(line)
    if "welddomain_" in line:
        ls2.append(line)
print(ls1)
print(ls2)


for i in range(0,len(ls1)):
    ls_weldline.append(ls1[i].strip('\n').split('=')[-1])
print(ls_weldline)
for j in range(0,len(ls2)):
    # print(ls_welddomain[j])
    ls_welddomain.append(ls2[j].strip('\n').split('=')[-1])
print(ls_welddomain)

fb.write(str(ls_weldline))
fc.write(str(ls_welddomain))
fa.close()
fb.close()
fc.close()

# f1 = open('weld-current - 副本1.txt', 'r')
# f1 = open('weld-current - 副本1.txt', 'w')
f2 = open('weld-current_modify.wdf', 'a')
f2.write('<weld_definition>\n')
# for line in f1:
# def Macro1(test_wdomain,test_wline):
with open('weld-current - 副本1.txt','r+',encoding='utf-8') as f1:
    # content = f1.read()
    # f1.seek(0,0)
    # f1.write('<weld_definition>\n'+content)
    for i in range(0,len(ls_welddomain)):

        lines = f1.read()
        f1.seek(0)

        # if '%welddomain' in line:

            # f1.write(line.replace('%welddomain','welddomain1234_4567'))
        #
        # lines = lines.replace('%Line_Weld','weld_line[i]')
        # print('weld_line[i]')

        lines = lines.replace('%New_Line',ls_weldline[i])

        lines = lines.replace('%plate_thickness', ls_weldline[i].strip('\n').split('_')[1])

        lines = lines.replace('%welddomain',ls_welddomain[i])
        lines = lines.replace('%start_element', ls_welddomain[i].strip('\n').split('_')[-1])
        # if '%weldline' in line:

            # f1.write(line.replace('%weldline', 'weldline1234_4567'))
        lines = lines.replace('%weldline', ls_weldline[i])
        lines = lines.replace('%start_node', ls_weldline[i].strip('\n').split('_')[-2])

        lines = lines.replace('%weld_type', ls_welddomain[i].strip('\n').split('_')[0])

        f2.write(lines)

    f2.write('</weld_definition>')
f1.close()
f2.close()
# f2.close()

 

可以使用Python脚本编写Abaqus的.inp文件,并在其中预加载残余应力。以下是一个示例脚本,该脚本创建了一个简单的模型并在其中预加载残余应力: ```python from abaqus import * from abaqusConstants import * import regionToolset # Create a new model myModel = mdb.Model(name='MyModel') # Create a new part myPart = myModel.Part(name='MyPart', dimensionality=THREE_D, type=DEFORMABLE_BODY) # Define the part geometry # ... # Create a new assembly myAssembly = myModel.rootAssembly myInstance = myAssembly.Instance(name='MyPart-1', part=myPart) # Define the residual stress field residualStressField = [0.0, 0.0, 0.0, 0.0, 0.0, 0.0] # Define the residual stress components # Create a new step myModel.StaticStep(name='Step-1', previous='Initial') # Define the residual stress field using an amplitude myModel.amplitude(name='ResidualStress', timeSpan=STEP, data=((0.0, 1.0), )) # Apply the residual stress field to the model myModel.FieldOutputRequest(name='ResidualStressField', createStepName='Initial', variables=('S',), region=regionToolset.Region(cells=myPart.cells)) # Apply the residual stress field to the model using boundary conditions myModel.DisplacementBC(name='ResidualStress', createStepName='Step-1', region=myInstance.sets['All'], u1=residualStressField[0], u2=residualStressField[1], u3=residualStressField[2], ur1=residualStressField[3], ur2=residualStressField[4], ur3=residualStressField[5], amplitude='ResidualStress') # Create the input file mdb.Job(name='MyJob', model=myModel).writeInput(consistencyChecking=OFF) ``` 在这个示例脚本中,首先创建了一个新的Abaqus模型和一个新的部件,然后定义了残余应力场。接下来,创建了一个新的步骤“Step-1”,并将残余应力场应用于所有单元。最后,使用DisplacementBC方法在模型中应用了残余应力场,并使用Job方法将模型写入输入文件中。 在实际应用中,需要根据具体情况修改和扩展这个示例脚本。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值