零概述这个帖子文字多,但都是干货,一篇文章完全厘清abaqus二次开发的所有概念。“abaqus二次开发”是一个笼统的概念,下面可以进行细分,如abaqus建模二次开发、后处理二次开发和子程序二次开发等,不同的二次开发涉及的目的不一样,采用的工具不一样,下面逐个解释。壹abaqus建模二次开发正式介绍建模二次开发之前,先介绍abaqus的模型组织方式,一共有两种。一种是基于part的建模方式,即首先创建若干个part,然后通过assembly关键字进行组装,所有的部件、点、线和面都是基于part进行索引的。这种组织方式是现在使用最广泛的,其设计是依据python的面向对象编程思想。另一种是直接组装,不涉及part、asselbly等关键词,这种组织方式在帮助文档里面经常看得到,帮助文档里面还会出现一些上古的关键字,如*headingtestbergstrom-boyce,uniaxialloadingstrainrate=-0.01/s,material:ChloropreneRubber(65pphcarbonblack)*node1,2,0.0143,0.014,0.0134,0.0,0.013*element,type=cax4,elset=eall...1,2,2,0.2,2,2,0.*endstep**上面inp文件来自:help.3ds.com/2017/English/DSSIMULIA_Established/SIMAINPRefResources/mbbcdo3mcy_un_1e_2_cl65.inp?contextscope=all上面的模型组织方式就不涉及part,而是直接进行组装的,这种inp文件无法通过abaqusgui界面获得,只能通过自己手动编程序生成。下面正式介绍abaqus建模二次开发。特别注意的是,不要将建模二次开发和子程序二次开发搞混淆,二者有本质不同。建模二次开发主要涉及到模型的创建,常常用于解决多次的繁琐操作,如混凝土细观尺度模拟、零厚度单元批量创建等等,建模二次开发不涉及有限元计算。abaqus建模二次开发主要针对第一种模型组织方式,即直接在abaqusgui中进行编程操作。主要采用python进行编程,python处理大模型时候会出现速度慢的现象,为此,abaqus提供了C++二次开发工具,但C++二次开发对使用者有一定门槛,目前很少见到采用C++进行二次开发的,更多的是用python编程,然后优化程序提高计算速度。abaqus提供了若干种建模二次开发方式,这里只介绍一种方式,即在外部完成python程序,然后在abaqus中通过“runscript”按钮运行程序,如下面的程序"""modelAExample.pyAsimpleexample:Creatingapart."""fromabaqusimport*fromabaqusConstantsimport*backwardCompatibility.setValues(includeDeprecated=True,reportDeprecated=False)importsketchimportpartmyModel=mdb.Model(name='ModelA')mySketch=myModel.ConstrainedSketch(name='SketchA',sheetSize=200.0)xyCoordsInner=((-5,20),(5,20),(15,0),(-15,0),(-5,20))xyCoordsOuter=((-10,30),(10,30),(40,-30),(30,-30),(20,-10),(-20,-10),(-30,-30),(-40,-30),(-10,30))foriinrange(len(xyCoordsInner)-1):mySketch.Line(point1=xyCoordsInner[i],point2=xyCoordsInner[i+1])foriinrange(len(xyCoordsOuter)-1):mySketch.Line(point1=xyCoordsOuter[i],point2=xyCoordsOuter[i+1])myPart=myModel.Part(name='PartA',dimensionality=THREE_D,type=DEFORMABLE_BODY)myPart.BaseSolidExtrude(sketch=mySketch,depth=20.0)myViewport=session.Viewport(name='ViewportforModelA',origin=(10,10),width=150,height=100)myViewport.setValues(displayedObject=myPart)myViewport.partDisplay.setValues(renderStyle=SHADED)以上程序来源于abaqus官方文档。这里只讲解概念,不讲解程序细节。可以在“startsession”界面点击“runscript”,然后选择已经编写好的py文件。也可以在abaqus主界面的菜单栏依次选择file->runscript上面程序的运行后,abaqus会创建如下模型以上是通过python在abaqusgui界面中进行模型二次开发。abaqus还提供了inp文件二次开发方式,即完全通过自编程序生成inp计算文件,然后通过bat文件或者直接在作业界面进行计算。这种二次开发方式对学者能力有较高要求,需要非常的熟悉abaqus的inp文件,还需要非常熟悉有限元计算的各个流程。一般来讲,不建议采用这种方式进行建模,更好的方法是将两种建模方式进行结合,即一部分通过python实现,然后导出inp计算文件,在导出的inp文件中手动修改少部分内容。贰子程序二次开发abaqus建模二次开发用于解决模型的问题,abaqus子程序二次开发则涉及到有限元核心计算的方方面面。abaqus本身为学者提供了非常强大的功能,但是对于特定问题,如复杂的温度荷载、切削分析等等,abaqus自身功能无法解决,但是abaqus向学者提供了一系列的二次开发接口,即abaqus子程序,学者可以自己编程实现特定需求,然后以子程序的形式嵌入进abaqus主程序中。子程序二次开发的大致流程为:按照自己的理论进行公式推导,离散为有限元格式,然后编程,编译运行。如下面展示了uel二次开发接口SUBROUTINEUEL(RHS,AMATRX,SVARS,ENERGY,NDOFEL,NRHS,NSVARS,1PROPS,NPROPS,COORDS,MCRD,NNODE,U,DU,V,A,JTYPE,TIME,DTIME,2KSTEP,KINC,JELEM,PARAMS,NDLOAD,JDLTYP,ADLMAG,PREDEF,NPREDF,3LFLAGS,MLVARX,DDLMAG,MDLOAD,PNEWDT,JPROPS,NJPROP,PERIOD)CINCLUDE'ABA_PARAM.INC'CDIMENSIONRHS(MLVARX,*),AMATRX(NDOFEL,NDOFEL),PROPS(*),1SVARS(*),ENERGY(8),COORDS(MCRD,NNODE),U(NDOFEL),2DU(MLVARX,*),V(NDOFEL),A(NDOFEL),TIME(2),PARAMS(*),3JDLTYP(MDLOAD,*),ADLMAG(MDLOAD,*),DDLMAG(MDLOAD,*),4PREDEF(2,NPREDF,NNODE),LFLAGS(*),JPROPS(*)usercodingtodefineRHS,AMATRX,SVARS,ENERGY,andPNEWDTRETURNENDabaqus提供了两种编程语言用于子程序二次开发,分别为fortran和C++,最经常用的是fortran,一种古老的计算语言,但是在计算速度方面,有一种不让廉颇的气魄。这里介绍两种调用子程序的方法。一种为采用bat文件调用。将编写好的for文件和事先准备好的inp文件放到同一个文件夹中,然后再准备一个bat文件,下面给出一个例子callabaqusjob=jobname.inpuser=user_subroutine.forcpus=10interactivepause上面的语句涉及到inp文件名称、子程序名称和cpu个数,然后直接双击准备好的bat文件就能运行子程序。另一种调用方法是直接在abaqusgui中定义job然后调用子程序,具体的步骤为在Module中进入job部分,点击createjob,在source中选择inputfile,如这便将inp文件导入了,然后点击continue,调用子程序按照上面的步骤,选择事先准备的fortran子程序,然后点击提交计算即可。abaqus子程序二次开发是一项非常有挑战性的工作,需要学者熟悉有限元计算的方方面面,还要懂商业有限元软件内部的运行机制等等,对使用者的数学功底、编程功底等等有着较高的要求。叁后处理二次开发后处理在计算结果展示时候有着重要的作用,当abaqus自带的后处理功能不能满足使用要求时,常常将数据导出到第三方软件中进行可视化,如:tecplot、sufur和paraview等等软件,这是后处理二次开发的一个使用场景。另外,当自己想要的结果中abaqus没有输出的时候,自己就需要依据abaqus输出的计算结果进行二次计算,这时候也需要将abaqus的计算结果导出,自己编程进行后续的计算。当采用一些子程序的时候,会影响到abaqus的可视化,如采用uel子程序的时候,odb中的单元室无法显示的,只有一系列的“XXXX”显示在窗口中,如这时候也需要将abaqus的计算结果用python或者C++提取出来,导入到三方软件中进行可视化。来源:有限元先生