🔥 点击关注,后台回复“拓扑优化”获取独家脚本示例!
👉 未来已来,用代码重塑设计效率,你准备好了吗?
import os
from ansa import *
from pathlib import Path
session.New('discard')
deck=base.SetCurrentDeck(constants.ABAQUS)
base.InputAbaqus(filename=r'L:\abaqus_case_script\case02.inp')
all_prop=base.CollectEntities(deck,None,'__PROPERTIES__')
desig_ele=base.CollectEntities(deck,all_prop[1],'SHELL')
for ele in desig_ele:
p_id=ele._id
p_name='prop_'+str(p_id)
vas_prop={
'Name':p_name,
'PID':p_id,
'MID':2,
'T':1.5,
}
temp_p=base.CreateEntity(deck,'SHELL_SECTION',vas_prop)
vas_ele={'PID':p_id,}
base.SetEntityCardValues(deck,ele,vas_ele)
base.Compress('')
all_prop_current=base.CollectEntities(deck,None,'__PROPERTIES__')
temp_list=[]
for p in all_prop_current:
if 'prop' in p._name:
temp_list.append(p)
num_iter=5
for i in range(num_iter):
sample_prop=random.sample(temp_list,k=30)
base.DeleteEntity(sample_prop,True)
inp_file_name='case02_' + 'num_iter_%d' % i + '.inp'
inp_file_dir='L:/abaqus_case_script/'
base.OutputAbaqus(filename=inp_file_dir+inp_file_name,mode='all')
out_files_dir='L:/abaqus_case_script'
bat_file_name='Topological_opti.bat'
file=open(inp_file_dir+bat_file_name,'w')
cont01 = 'cd /d L: \n'
cont02 = 'cd L:/abaqus_case_script \n'
file.write(cont01)
file.write(cont02)
for ent in os.listdir(out_files_dir):
if ('num_iter' in ent) and ('inp' in ent) :
a=ent.split('.')[0]
cont03='call abq2016 job=%s input=%s cpus=4 int ask=no \n'%(a,a)
file.write(cont03)
file.close()
command=os.system(r'L:\abaqus_case_script\Topological_opti.bat')
max_disp=6
vs_file=open(r'L:\abaqus_case_script\vs_file.txt','w')
if command==0:
for ent in os.listdir(out_files_dir):
if ('num_iter' in ent) and ('sta' in ent) :
ents='L:/abaqus_case_script/'+ent
result=Path(ents)
result_cont=result.read_text()
lines=result_cont.splitlines()
a=lines[-3].split(' ')[-6]
b=float(a)
if max_disp >=b:
max_disp=max_disp
else:
max_disp=b
vs_file.write('the largest displacement is %f,the corresponding model file is %s \n'%(max_disp,ent))
vs_file.close()
num=0
for ent in os.listdir('L:/abaqus_case_script'):
if ('num_iter' in ent) and ('inp' in ent):
win_name = 'win_' + str(num)
base.CreateNewAnsaWindow(win_name)
base.SetCurrentAnsaWindow(win_name)
inp_file=r'L:\abaqus_case_script\%s'%ent
base.InputAbaqus(inp_file,model_action='new_model_in_active_window')
num+=1