顶部banner
Logo 折叠
学习从这里开始
下载app
返回旧版
首页 成长助手 小邻学院 社区 发现
职业认证 企业服务 行业会议

登录解锁更多功能

还没有账号?立即注册

技术邻
技术引领职场价值
电话
0571-86682823
商务合作
service@jishulink.com
  • 全部  > 
  • CAE仿真

基于Python的结构优化? 50

浏览: 2099

abaqus二次开发,源程序由我提供,但是需要进行改变,将单材料的优化程序改为多材料的优化程序,基于Python语言,源代码写的很清楚,改动不会太大,但是会附带后处理的问题解决,详情细聊。

import math,customKernel
from abaqus import getInput,getInputs
from odbAccess import openOdb
## Function of formatting Abaqus model for stiffness optimisation
def fmtMdb(Mdb):
    mdl = Mdb.models['Model-1']
    part = mdl.parts['Part-1']
    # Build sections and assign solid section
    mdl.Material('Material01').Elastic(((1.0, 0.3), ))
    mdl.HomogeneousSolidSection('sldSec','Material01')
    mdl.Material('Material02').Elastic(((0.001**3, 0.3), ))
    mdl.HomogeneousSolidSection('voidSec','Material02')
    part.SectionAssignment(part.Set('ss',part.elements),'sldSec')
    # Define output request
    mdl.FieldOutputRequest('SEDensity','Step-1',variables=('ELEDEN', ))
    mdl.HistoryOutputRequest('ExtWork','Step-1',variables=('ALLWK', ))
## Function of running FEA for raw sensitivities and objective function
def FEA(Iter,Mdb,Xe,Ae):
    Mdb.Job('Design_Job'+str(Iter),'Model-1').submit()
    Mdb.jobs['Design_Job'+str(Iter)].waitForCompletion()
    opdb = openOdb('Design_Job'+str(Iter)+'.odb')
    seng = opdb.steps['Step-1'].frames[-1].fieldOutputs['ESEDEN'].values
    for en in seng: Ae[en.elementLabel]=en.data/Xe[en.elementLabel]
    obj=opdb.steps['Step-1'].historyRegions['Assembly ASSEMBLY'].historyOutputs['ALLWK'].data[-1][1]
    opdb.close()
    return obj
## Function of preparing filter map (Fm={elm1:[[el1,el2,...],[wf1,wf2,...]],...})
def preFlt(Rmin,Elmts,Nds,Fm):
    # Calculate element centre coordinates
    c0 = {}
    for el in Elmts:
        nds = el.connectivity
        c0[el.label]=[sum([Nds[nd].coordinates[i]/len(nds) for nd in nds]) for i in range(3)]
    # Weighting factors
    for el in Elmts:
        Fm[el.label] = [[],[]]
        for em in Elmts:
            dis=math.sqrt(sum([(c0[el.label][i]-c0[em.label][i])**2 for i in range(3)]))
            if dis<Rmin:
                Fm[el.label][0].append(em.label)
                Fm[el.label][1].append(Rmin - dis)
        sm = sum(Fm[el.label][1])
        for i in range(len(Fm[el.label][0])): Fm[el.label][1][i] /= sm
## Function of filtering sensitivities
def fltAe(Ae,Fm):
    raw = Ae.copy()
    for el in Fm.keys():
        Ae[el] = 0.0
        for i in range(len(Fm[el][0])): Ae[el]+=raw[Fm[el][0][i]]*Fm[el][1][i]
## Function of optimality update for design variables and Abaqus model
def BESO(Vf,Xe,Ae,Part,Elmts):
    lo, hi = min(Ae.values()), max(Ae.values())
    tv = Vf*len(Elmts)
    while (hi-lo)/hi > 1.0e-5:
        th = (lo+hi)/2.0
        for key in Xe.keys(): Xe[key] = 1.0 if Ae[key]>th else 0.001
        if sum(Xe.values())-tv>0: lo = th
        else: hi = th
    # Label elements as solid or void
    vlb, slb = [], []
    for el in Elmts:
        if Xe[el.label] == 1.0: slb.append(el.label)
        else: vlb.append(el.label)
    # Assign solid and void elements to each section
    Part.SectionAssignment(Part.SetFromElementLabels('ss',slb),'sldSec')
    Part.SectionAssignment(Part.SetFromElementLabels('vs',vlb),'voidSec')
## ====== MAIN PROGRAM ======
if __name__ == '__main__':
    # Set parameters and inputs
    pars = (('VolFrac:','0.5'), ('Rmin:', '1'), ('ER:', '0.02'))
    vf,rmin,ert = [float(k) if k!=None else 0 for k in getInputs(pars,dialogTitle='Parameters')]
    if vf<=0 or rmin<0 or ert<=0: sys.exit()
    mddb = openMdb(getInput('Input CAE file:',default='Test.cae'))
    # Design initialization
    fmtMdb(mddb)
    part = mddb.models['Model-1'].parts['Part-1']
    elmts, nds = part.elements, part.nodes
    oh, vh = [], []
    xe, ae, oae, fm = {}, {}, {}, {}
    for el in elmts: xe[el.label] = 1.0
    if rmin>0: preFlt(rmin,elmts,nds,fm)
    # Optimisation iteration
    change, iter, obj = 1, -1, 0
    while change > 0.001:
        iter += 1
        # Run FEA
        oh.append(FEA(iter,mddb,xe,ae))
        # Process sensitivities
        if rmin>0: fltAe(ae,fm)
        if iter > 0: ae=dict([(k,(ae[k]+oae[k])/2.0) for k in ae.keys()])
        oae = ae.copy()
        # BESO optimisation
        vh.append(sum(xe.values())/len(xe))
        nv = max(vf,vh[-1]*(1.0-ert))
        BESO(nv,xe,ae,part,elmts)
        if iter>10: change=math.fabs((sum(oh[iter-4:iter+1])-sum(oh[iter-9:iter-4]))/sum(oh[iter-9:iter-4]))
    # Save results
    mddb.customData.History = {'vol':vh,'obj':oh}
    mddb.saveAs('Final_design.cae')


结构CAE ABAQUS

全部回答 (0)

默认 最新

相似问题

查看全部
  • 学习Abaqus/Python时,添加约束出现问题,如何解决? 5个回答

    问题描述: #* TypeError: referencePoint; found 'AbaqusMethod', expecting a recognized type filling string dict # -*- coding: mbcs -*- from abaqus import * from abaqusConstants import * from caeModules imp

  • 用python批量建立abaqus材料时遇到 AbaqusNameError: 无效的名称? 1个回答

    materials = [ ] path=r'D:\Abaqus\abaqus setup\jiaoben.txt' with open(path,'r') as file: line=file.readline() while line: materials.append(line.strip().split('\t')) line=file.readline() for i in range(

  • XFEM富集域的定义如何通过python代码实现? 暂无回答

    Data lines for TYPE=ENRICHMENT: First line: 1、Element number or element set label. 2 、Relative position of the node forming the element connectivity. 3、Name of the enriched feature specified on the *E

推荐阅读

转子旋转的周期性模型-水冷电机散热仿真

转子旋转的周期性模型-水冷电机散热仿真

技术邻小李 技术邻小李
¥100
vof案例-射流

vof案例-射流

CFD流 CFD流
免费
遗传算法解决(TSP)商旅问题matlab代码超详细解说(适用于新手)

遗传算法解决(TSP)商旅问题matlab代码超详细解说(适用于新手)

活泼可男_matlab教学 活泼可男_matlab教学
¥10
BOX-3D变宽斜钢箱梁绘图及功能更新演示

BOX-3D变宽斜钢箱梁绘图及功能更新演示

敦樸DUNPU 敦樸DUNPU
免费
abaqus埋地管道受力分析

abaqus埋地管道受力分析

冷月 冷月
¥25
探究实时仿真GPU求解器加速汽车行业设计创新

探究实时仿真GPU求解器加速汽车行业设计创新

Ansys中国 Ansys中国
免费
无网格划分软件midas MeshFree - 功能培训

无网格划分软件midas MeshFree - 功能培训

MIDAS官方 MIDAS官方
免费
船舶行进过程中的流场分布规律分析

船舶行进过程中的流场分布规律分析

龙樱 龙樱
免费
Hyperworks CFD v2022.1前后处理教程

Hyperworks CFD v2022.1前后处理教程

ALTAIR ALTAIR
免费
基于iSIGHT+Workbench的开孔平板性能优化

基于iSIGHT+Workbench的开孔平板性能优化

sjktzy sjktzy
¥5
品索设计-Creo自学练习集讲解(草绘部分)

品索设计-Creo自学练习集讲解(草绘部分)

深圳品索设计Creo培训 深圳品索设计Creo培训
免费
如何为您的应用选择合适的传声器

如何为您的应用选择合适的传声器

HBK声学与振动 HBK声学与振动
免费
Fluent中升力和阻力的计算

Fluent中升力和阻力的计算

宁博士CAE团队 宁博士CAE团队
免费
用EVOLVE对接INSPIRE,加速产品迭代优化

用EVOLVE对接INSPIRE,加速产品迭代优化

咸鱼氮泵 咸鱼氮泵
免费
【入门案例02】Abaqus——钢筋混凝土构件的碳纤维布+钢板加固模拟

【入门案例02】Abaqus——钢筋混凝土构件的碳纤维布+钢板加固模拟

臻元咨询
¥30
精品课程A30-考虑初始缺陷的栓焊连接组合节点滞回模拟

精品课程A30-考虑初始缺陷的栓焊连接组合节点滞回模拟

大平-结构工程 大平-结构工程
¥598
线控底盘市场趋势分析

线控底盘市场趋势分析

小木匠砍树 小木匠砍树
免费
张量计算课程合集

张量计算课程合集

引垂思汀 引垂思汀
¥50
后保险杠低速碰撞分析

后保险杠低速碰撞分析

Crisby_Vectory_TrHo Crisby_Vectory_TrHo
¥70
Altair FlowSimulator一维流体仿真分析软件介绍&模型搭建案例分享

Altair FlowSimulator一维流体仿真分析软件介绍&模型搭建案例分享

ALTAIR ALTAIR
免费