欢迎访问 生活随笔!

尊龙游戏旗舰厅官网

当前位置: 尊龙游戏旗舰厅官网 > 编程语言 > python >内容正文

python

《abaqus gui程序开发指南(python语言)》——第一章 概述1.1 简单插件实例——创建带孔板有限元模型... -尊龙游戏旗舰厅官网

发布时间:2025/1/21 python 38 豆豆
尊龙游戏旗舰厅官网 收集整理的这篇文章主要介绍了 《abaqus gui程序开发指南(python语言)》——第一章 概述1.1 简单插件实例——创建带孔板有限元模型... 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

本节书摘来自异步社区《abaqus gui程序开发指南(python语言)》一书中的第1章,第1.1节,作者: 贾利勇 , 富琛阳子 , 贺高 , 周正光 更多章节内容可以访问云栖社区“异步社区”公众号查看。

第一章 概述

abaqus gui程序开发指南(python语言)
工欲善其事,必先利其器。对于cae分析工程师而言,一个好的软件平台就是一把利器,基于软件平台的二次开发就是让工具更加丰富、便捷和高效。abaqus的二次开发一般分为子程序开发和用户图形界面程序(graphical user interface,gui)开发两类,有很多初学者经常把两者混淆,分不清两者的区别。abaqus子程序开发基于fortran语言,用户可以根据实际需求编写材料本构关系(umat/vumat)、自定义单元uel以及其他多种子程序(uvarm、dload、usdfld等等)。用户图形界面程序开发则是基于python语言,主要是根据需求对原有abaqus/cae功能组件进行扩展,开发专用的前后处理模块以及gui工具等。本书的内容仅针对基于python语言的gui程序开发。在本章中,将通过一个简单的插件实例介绍abaqus gui程序开发的概念、作用及意义。

1.1 简单插件实例——创建带孔板有限元模型

熟悉abaqus/cae的人应该知道,当点击plug-ins→toolboxes→examples菜单时,会弹出如图1.1所示工具条。



这是abaqus/cae内嵌的一个简单插件程序(plug-in),在上述窗口中输入零件名、零件宽度、高度以及圆孔半径之后,点击“ok”,则会自动在abaqus中生成带孔板的几何模型。

该程序仅能实现带孔板的几何创建,本节将以此为基础,在源程序的基础上稍加改进,使其可实现带孔板有限元分析模型的参数化建模。图1.3为改写之后的插件程序界面示意图。下面将对该插件程序的构成进行详细介绍。

该插件程序共由4个文件组成。

(1)注册文件createplatewithhole_plugin.py

(2)图形界面文件createplatewithholedb.py

(3)内核执行文件createplatemodul.py

(4)图标文件planewithhole.png

其中图标文件如图1.4所示,图标文件即为插件窗口中的示意图,abaqus支持bmp、 gif、 png、 xpm等多种格式的图片,本实例中采用的是png格式图片,其他3个组成文件将在后面分别介绍。


https://yqfile.alicdn.com/11fec8c93bd10991f708ce3d284550d22247cdbf.png" >

上述文件均存放在随书配套资源chapter 1createplatewithhole文件夹内。将文件夹createplatewithhole及内部文件复制到abaqus工作目录或者安装目录下的abaqus_plugins文件夹下(没有的话请自行创建该文件夹),例如:

安装目录d:simulia6.10abaqus_pluginscreateplatewithhole  

当前工作目录d:tempabaqus_plugins 

重新启动abaqus/cae主界面,在plug-ins菜单下会出现名为“创建带孔板”的功能子菜单,如图1.5所示。


https://yqfile.alicdn.com/0e26a5d47d48d12e3ac92e3837ae9de05fae97c8.png ">

将图1.3中所示的参数填写完整并执行程序,可自动生成带孔板拉伸的有限元模型,并可直接将其提交计算,模型如图1.6所示。



提交计算后,可以得到图1.7所示的应力云图。


https://yqfile.alicdn.com/9f90a4ab75405157c47e6dad0ade1ddb5670f7df.png" >

1.1.1 注册文件
本插件程序中的注册文件命名为createplatewithhole_plugin.py,其主要作用是注册插件程序以及其中的关键字等。其程序源代码如下。

#文件名createplatewithhole_plugin.py #中文编码 # -* - coding:utf-8 -*- from abaqusgui import * from abaqusconstants import all import osutils, os ##################################################################### # class definition                             ##################################################################### class createplatewithhole_plugin(afxform): #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ def __init__(self, owner):   # construct the base class. # afxform.__init__(self, owner) self.radiobuttongroups = {} self.cmd = afxguicommand(mode=self, method='createplatefunction', objectname='createplatemodul', registerquery=false) pickeddefault = '' self.partnamekw = afxstringkeyword(self.cmd, 'partname', true, 'part-1') self.widthkw = afxfloatkeyword(self.cmd, 'width', true,100) self.heightkw = afxfloatkeyword(self.cmd, 'height', true,100) self.radiuskw = afxfloatkeyword(self.cmd, 'radius', true,5) #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ def getfirstdialog(self): import createplatewithholedb return createplatewithholedb.createplatewithholedb(self) #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ def docustomchecks(self): # try to set the appropriate radio button on. if the user did # not specify any buttons to be on, do nothing. # for kw1,kw2,d in self.radiobuttongroups.values(): try: value = d[ kw1.getvalue() ] kw2.setvalue(value) except: pass #对输入数据格式进行检查,不满足要求时提示警告 if self.widthkw.getvalue()<=0: showafxerrordialog(getafxapp().getafxmainwindow(), '宽度必须为正数') return false elif self.heightkw.getvalue()<=0: showafxerrordialog(getafxapp().getafxmainwindow(), '高度必须为正数') return false elif self.radiuskw.getvalue()<=0: showafxerrordialog(getafxapp().getafxmainwindow(), '孔半径必须是正数.') return false else: return true  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ def oktocancel(self): # no need to close the dialog when a file operation (such # as new or open) or model change is executed. # return false #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ # register the plug-in # thispath = os.path.abspath(__file__)        #指定路径 thisdir = os.path.dirname(thispath) toolset = getafxapp().getafxmainwindow().getplugintoolset() toolset.registerguimenubutton( buttontext='创建带孔板', object=createplatewithhole_plugin(toolset), messageid=afxmode.id_activate, icon=none,               #指定图标为空 kernelinitstring='import createplatemodul' ,  #内核初始化指令 applicablemodules=all,  #指定使用模块,默认为全部 version='1.0',       #软件版本 author='jly',       #软件作者 description='n/a',     #软件描述 helpurl='n/a'      #帮助文档路径指定 )

提示

以上代码是本书中出现的第一段代码,需要提醒读者注意的是,在python语言中,代码的缩进是一种语法,python依靠每行代码的缩进位置来判断代码的分块、区分代码块之间的层次关系,错误的缩进位置将会导致程序执行错误,读者应对此予以特别注意,有关python编码规则的内容请参照本书2.3节内容。
编写代码时建议使用ultraedit或者notepad 等文本编辑软件,本书在编写过程中采用的是notepad 软件(免费),该软件支持python等多种语言的语法着色。

1.1.2 图形界面文件
图形界面文件的主要作用是定义各类窗体、控件,关联控件的执行命令及对象。通过定义文本框、单复选按钮、表格等各类控件,用户可以方便地将所需参数集成到统一的图形界面下,形成友好的输入输出界面。本插件程序中的图形界面文件命名为createplatewithholedb.py,其程序源代码如下。

# -* - coding:utf-8 -*- from abaqusconstants import * from abaqusgui import * from kernelaccess import mdb, session import os thispath = os.path.abspath(__file__)  #设置当前路径 thisdir = os.path.dirname(thispath) ##################################################################### # class definition ##################################################################### class createplatewithholedb(afxdatadialog): #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ def __init__(self, form): # construct the base class. # afxdatadialog.__init__(self, form, ' 带孔板参数化建模程序', self.ok|self.cancel, dialog_actions_separator)  #创建对话框,该对话框有ok、cancel按键   okbtn = self.getactionbutton(self.id_clicked_ok) okbtn.settext('ok') #定义ok按钮   groupbox_1 = fxgroupbox(p=self, text='参数', opts=frame_groove)  afxtextfield(p=groupbox_1, ncols=12, labeltext='零件名 :', tgt=form.partnamekw, sel=0) #定义文本框 afxtextfield(p=groupbox_1, ncols=12, labeltext='宽度(w):', tgt=form.widthkw, sel=0) afxtextfield(p=groupbox_1, ncols=12, labeltext='高度(h):', tgt=form.heightkw, sel=0) afxtextfield(p=groupbox_1, ncols=12, labeltext='半径(r):', tgt=form.radiuskw, sel=0) groupbox_3 = fxgroupbox(p=self, text='示意图', opts=frame_groove) filename = os.path.join(thisdir, r'planewithhole.png')   #指定示意图图标 icon = afxcreatepngicon(filename)#创建图标 fxlabel(p=groupbox_3, text='', ic=icon)       #定义示意图标签

1.1.3 内核执行文件
内核执行文件是插件程序的核心,其作用是驱动abaqus/cae执行内部命令,完成cae建模以及数据处理等功能。本插件程序中的内核执行文件命名为createplatemodul.py,其程序源代码如下。

# -* - coding:utf-8 -*- from abaqus import * from abaqusconstants import * def createplatefunction(partname, width, height, radius): #参数调用 mdb.models['model-1'].constrainedsketch(name= ' __profile__' , sheetsize=200.0) mdb.models['model-1'].sketches[ '__profile__ ' ].rectangle(point1=(0.0, 0.0), point2=(width, height)) mdb.models['model-1'].sketches[ ' __profile__' ].circlebycenterperimeter(center=( width/2, height/2), point1=(width/2 radius, height/2)) mdb.models['model-1'].part(dimensionality=three_d, name=partname, type= deformable_body) mdb.models['model-1'].parts[partname].baseshell(sketch= mdb.models['model-1'].sketches['__profile__']) p = mdb.models['model-1'].parts[partname] session.viewports['viewport: 1'].setvalues(displayedobject=p) del mdb.models['model-1'].sketches['__profile__'] #创建几何 mdb.models['model-1'].material(name='al') mdb.models['model-1'].materials['al'].elastic(table=((70000.0, 0.3), )) mdb.models['model-1'].homogeneousshellsection(name='al', preintegrate=off, material='al', thicknesstype=uniform, thickness=1.0, thicknessfield='', idealization=no_idealization, poissondefinition=default, thicknessmodulus=none, temperature=gradient, usedensity=off, integrationrule=simpson, numintpts=5) f = p.faces faces = f.getsequencefrommask(mask=('[#1 ]', ), ) region = p.set(faces=faces, name='set-2') p.sectionassignment(region=region, sectionname='al', offset=0.0, offsettype=middle_surface, offsetfield='', thicknessassignment=from_section) #建立材料并赋予属性 session.viewports['viewport: 1'].partdisplay.setvalues(mesh=on) session.viewports['viewport: 1'].partdisplay.meshoptions.setvalues( meshtechnique=on) session.viewports['viewport: 1'].partdisplay.geometryoptions.setvalues( referencerepresentation=off) #切换到mesh模块 p = mdb.models['model-1'].parts[partname] p.seedpart(size=4.0, deviationfactor=0.1, minsizefactor=0.1)      f = p.faces                        pickedregions = f.findat(((width/2, 0.0, 0.0), )) p.setmeshcontrols(regions=pickedregions, elemshape=quad,algorithm=medial_axis) #设定网格划分格式 p.generatemesh()  #网格划分  a = mdb.models['model-1'].rootassembly                      session.viewports['viewport: 1'].setvalues(displayedobject=a) #切换到装配模块 a = mdb.models['model-1'].rootassembly  a.datumcsysbydefault(cartesian)      p = mdb.models['model-1'].parts[partname] a.instance(name=partname '-1', part=p, dependent=on) #创建装配实例 mdb.models['model-1'].staticstep(name='step-1', previous='initial', nlgeom=on) session.viewports['viewport: 1'].assemblydisplay.setvalues(step='step-1')  #创建分析步 session.viewports['viewport: 1'].view.setvalues(nearplane=335.564,       farplane=385.546, width=212.48, height=142.547, viewoffsetx=13.3712,  viewoffsety=-7.13345)                          a = mdb.models['model-1'].rootassembly                   e1 = a.instances[partname '-1'].edges                     edges1 = e1.findat(((0.0, height/2, 0.0), ))                  region = a.set(edges=edges1, name='set-1')                 mdb.models['model-1'].displacementbc(name='bc-1', createstepname='step-1', region=region, u1=0.0, u2=0.0, u3=0.0, ur1=0.0, ur2=0.0, ur3=0.0,    amplitude=unset, fixed=off, distributiontype=uniform, fieldname='',   localcsys=none)  #施加边界条件   edges1 = e1.findat(((width, height/2, 0.0), ))                    region = a.set(edges=edges1, name='set-2')                    mdb.models['model-1'].displacementbc(name='bc-2', createstepname='step-1',    region=region, u1=2.0, u2=unset, u3=unset, ur1=unset, ur2=unset, ur3=unset, amplitude=unset, fixed=off, distributiontype=uniform, fieldname='',     localcsys=none) #施加位移载荷 mdb.job(name='job-hole', model='model-1', description='', type=analysis,  attime=none, waitminutes=0, waithours=0, queue=none, memory=50,   memoryunits=percentage, getmemoryfromanalysis=true,       explicitprecision=single, nodaloutputprecision=single, echoprint=off,  modelprint=off, contactprint=off, historyprint=off, usersubroutine='', scratch='', multiprocessingmode=default, numcpus=1) #创建job 与50位技术专家面对面20年技术见证,附赠技术全景图

总结

以上是尊龙游戏旗舰厅官网为你收集整理的《abaqus gui程序开发指南(python语言)》——第一章 概述1.1 简单插件实例——创建带孔板有限元模型...的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得尊龙游戏旗舰厅官网网站内容还不错,欢迎将尊龙游戏旗舰厅官网推荐给好友。

网站地图