当前位置:首页>python>解锁ANSA极限潜能!Python二次开发驱动拓扑优化,让设计轻量化效率飙升!

解锁ANSA极限潜能!Python二次开发驱动拓扑优化,让设计轻量化效率飙升!

  • 2026-09-10 21:56:46
解锁ANSA极限潜能!Python二次开发驱动拓扑优化,让设计轻量化效率飙升!

🔥 点击关注,后台回复“拓扑优化”获取独家脚本示例!
👉 未来已来,用代码重塑设计效率,你准备好了吗?
import random

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

最新文章

随机文章