首页/文章/ 详情

什么是abaqus二次开发

1月前浏览712
   

概述

       

这个帖子文字多,但都是干货,一篇文章完全厘清abaqus二次开发的所有概念。

“abaqus二次开发”是一个笼统的概念,下面可以进行细分,如abaqus建模二次开发、后处理二次开发和子程序二次开发等,不同的二次开发涉及的目的不一样,采用的工具不一样,下面逐个解释。

abaqus建模二次开发

     

正式介绍建模二次开发之前,先介绍abaqus的模型组织方式,一共有两种。

一种是基于part的建模方式,即首先创建若干个part,然后通过assembly关键字进行组装,所有的部件、点、线和面都是基于part进行索引的。这种组织方式是现在使用最广泛的,其设计是依据python的面向对象编程思想。

另一种是直接组装,不涉及part、asselbly等关键词,这种组织方式在帮助文档里面经常看得到,帮助文档里面还会出现一些上古的关键字,如
















*heading test bergstrom-boyce, uniaxial loading strain rate=-0.01/s, material: Chloroprene Rubber (65 pph carbon black)*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.*end step**
 

上面inp文件来自:help.3ds.com/2017/English/DSSIMULIA_Established/SIMAINPRefResources/mbbcdo3mcy_un_1e_2_cl65.inp?contextscope=all

上面的模型组织方式就不涉及part,而是直接进行组装的,这种inp文件无法通过abaqus gui界面获得,只能通过自己手动编程序生成

下面正式介绍abaqus建模二次开发。

特别注意的是,不要将建模二次开发和子程序二次开发搞混淆,二者有本质不同。建模二次开发主要涉及到模型的创建,常常用于解决多次的繁琐操作,如混凝土细观尺度模拟、零厚度单元批量创建等等,建模二次开发不涉及有限元计算。

abaqus建模二次开发主要针对第一种模型组织方式,即直接在abaqus gui中进行编程操作。主要采用python进行编程,python处理大模型时候会出现速度慢的现象,为此,abaqus提供了C++二次开发工具,但C++二次开发对使用者有一定门槛,目前很少见到采用C++进行二次开发的,更多的是用python编程,然后优化程序提高计算速度。

abaqus提供了若干种建模二次开发方式,这里只介绍一种方式,即在外部完成python程序,然后在abaqus中通过“run script”按钮运行程序,如下面的程序














































"""modelAExample.py
A simple example: Creating a part."""
from abaqus import *from abaqusConstants import *backwardCompatibility.setValues(includeDeprecated=True,                                reportDeprecated=False)
import sketchimport part
myModel = mdb.Model(name='Model A')
mySketch = myModel.ConstrainedSketch(name='Sketch A',                                     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))
for i in range(len(xyCoordsInner)-1):    mySketch.Line(point1=xyCoordsInner[i],        point2=xyCoordsInner[i+1])
for i in range(len(xyCoordsOuter)-1):    mySketch.Line(point1=xyCoordsOuter[i],        point2=xyCoordsOuter[i+1])
myPart = myModel.Part(name='Part A', dimensionality=THREE_D,    type=DEFORMABLE_BODY)
myPart.BaseSolidExtrude(sketch=mySketch, depth=20.0)
myViewport = session.Viewport(name='Viewport for Model A',    origin=(10, 10), width=150, height=100)
myViewport.setValues(displayedObject=myPart)
myViewport.partDisplay.setValues(renderStyle=SHADED)
 

以上程序来源于abaqus官方文档。这里只讲解概念,不讲解程序细节。

可以在“start session”界面点击“run script”,然后选择已经编写好的py文件。

   

也可以在abaqus主界面的菜单栏依次选择file->run script

   

上面程序的运行后,abaqus会创建如下模型

   

以上是通过python在abaqus gui界面中进行模型二次开发。

abaqus还提供了inp文件二次开发方式,即完全通过自编程序生成inp计算文件,然后通过bat文件或者直接在作业界面进行计算。这种二次开发方式对学者能力有较高要求,需要非常的熟悉abaqus的inp文件,还需要非常熟悉有限元计算的各个流程。

一般来讲,不建议采用这种方式进行建模,更好的方法是将两种建模方式进行结合,即一部分通过python实现,然后导出inp计算文件,在导出的inp文件中手动修改少部分内容。

子程序二次开发

       

abaqus建模二次开发用于解决模型的问题,abaqus子程序二次开发则涉及到有限元核心计算的方方面面。

abaqus本身为学者提供了非常强大的功能,但是对于特定问题,如复杂的温度荷载、切削分析等等,abaqus自身功能无法解决,但是abaqus向学者提供了一系列的二次开发接口,即abaqus子程序,学者可以自己编程实现特定需求,然后以子程序的形式嵌入进abaqus主程序中。

子程序二次开发的大致流程为:按照自己的理论进行公式推导,离散为有限元格式,然后编程,编译运行。

如下面展示了uel二次开发接口


















      SUBROUTINE UEL(RHS,AMATRX,SVARS,ENERGY,NDOFEL,NRHS,NSVARS,     1 PROPS,NPROPS,COORDS,MCRD,NNODE,U,DU,V,A,JTYPE,TIME,DTIME,     2 KSTEP,KINC,JELEM,PARAMS,NDLOAD,JDLTYP,ADLMAG,PREDEF,NPREDF,     3 LFLAGS,MLVARX,DDLMAG,MDLOAD,PNEWDT,JPROPS,NJPROP,PERIOD)C      INCLUDE 'ABA_PARAM.INC'C      DIMENSION RHS(MLVARX,*),AMATRX(NDOFEL,NDOFEL),PROPS(*),     1 SVARS(*),ENERGY(8),COORDS(MCRD,NNODE),U(NDOFEL),     2 DU(MLVARX,*),V(NDOFEL),A(NDOFEL),TIME(2),PARAMS(*),     3 JDLTYP(MDLOAD,*),ADLMAG(MDLOAD,*),DDLMAG(MDLOAD,*),     4 PREDEF(2,NPREDF,NNODE),LFLAGS(*),JPROPS(*)            user coding to define RHS, AMATRX, SVARS, ENERGY, and PNEWDT
     RETURN      END
 

abaqus提供了两种编程语言用于子程序二次开发,分别为fortran和C++,最经常用的是fortran,一种古老的计算语言,但是在计算速度方面,有一种不让廉颇的气魄。

这里介绍两种调用子程序的方法。

一种为采用bat文件调用。将编写好的for文件和事先准备好的inp文件放到同一个文件夹中,然后再准备一个bat文件,下面给出一个例子



call abaqus job=jobname.inp user=user_subroutine.for cpus=10 interactivepause
 

上面的语句涉及到inp文件名称、子程序名称和cpu个数,然后直接双击准备好的bat文件就能运行子程序。

另一种调用方法是直接在abaqus gui中定义job然后调用子程序,具体的步骤为

在Module中进入job部分,点击create job,在source中选择input file,如

   

这便将inp文件导入了,然后点击continue,调用子程序

   

按照上面的步骤,选择事先准备的fortran子程序,然后点击提交计算即可。

abaqus子程序二次开发是一项非常有挑战性的工作,需要学者熟悉有限元计算的方方面面,还要懂商业有限元软件内部的运行机制等等,对使用者的数学功底、编程功底等等有着较高的要求

后处理二次开发

       

后处理在计算结果展示时候有着重要的作用,当abaqus自带的后处理功能不能满足使用要求时,常常将数据导出到第三方软件中进行可视化,如:tecplot、sufur和paraview等等软件,这是后处理二次开发的一个使用场景。

另外,当自己想要的结果中abaqus没有输出的时候,自己就需要依据abaqus输出的计算结果进行二次计算,这时候也需要将abaqus的计算结果导出,自己编程进行后续的计算。

当采用一些子程序的时候,会影响到abaqus的可视化,如采用uel子程序的时候,odb中的单元室无法显示的,只有一系列的“XXXX”显示在窗口中,如

   

这时候也需要将abaqus的计算结果用python或者C++提取出来,导入到三方软件中进行可视化。

     
     


       

来源:有限元先生
ACTAbaqusDeform二次开发pythonTecplot理论
著作权归作者所有,欢迎分享,未经许可,不得转载
首次发布时间:2024-09-29
最近编辑:1月前
外太空土豆儿
硕士 我们穷极一生,究竟在追寻什么?
获赞 2粉丝 1文章 45课程 0
点赞
收藏
作者推荐

基于paraview的有限元模型可视化

零概述作为最早进入中国市场的商业有限元软件之一,abaqus以其强大的非线性方程组求解能力为广大的业界工程师、科研学者等广泛使用,该软件自带的前后处理功能也为有限元法的广泛使用提供了极大的方便。随着使用者对后处理的定制需求逐渐增多,abaqus自带的后处理功能逐渐不能完全满足,例如,abaqus自带的功能不能对用户自定义单元进行可视化,为了进一步提升有限元计算结果的可视化效果,便于展示计算成果,可以在abaqus计算结果的基础上,借用第三方软件对计算结果进行可视化。paraview是一款开源的图形处理软件,其在标量、矢量和高维张量的可视化方面具有极大的优势,该软件提供了串行和并行数据处理方式,可以采用大型机对百万级别的网格数据进行并行处理,也可采用小型机对数据进行串行处理,满足不同计算速度的需求。帖子探索了采用paraview对abaqus中的有限元计算模型进行可视化,其中包括abaqus内置的单元,以及abaqus无法进行可视化的用户自定义单元。壹二维有限元模型首先以一个椭圆形几何为例。采用任意多边形网格进行离散,其中任意多边形网格为用户自定义单元,而用户自定义单元无法在abaqus中进行可视化。下面是某混凝土重力坝几何图形。采用多边形网格对重力坝进行网格划分,共计多边形单元数目为:5944,共计节点数目为:117592,其中坝体单元数目为:737,坝基单元数目为:5207。共计五种多边形,边数为5~9。单独显示坝体。单独显示坝基。贰三维网格模型以东方明珠塔为例,首先采用六面体和四面体混合网格进行划分,共计单元数目:954029,共计节点数目:198089,其中,六面体单元数目为:228,四面体单元数目为:95380,paraview(左)与abaqus(右)的全局模型可视化对比为:paraview(左)与abaqus(右)的局部模型可视化对比为:然后采用任意多面体网格离散,任意多面体网格在abaqus中无法进行可视化,下面是paraview中的可视化效果:下面采用八叉树体网格离散,八叉树多面体网格同样无法在abaqus中可视化,八叉树网格在paraview中的可视化效果为:任意多面体网格,顾名思义,即为表面数目任意,表面多边形的边数任意,下面展示几个任意多面体单元:(下方数字为多面体单元的面数目)下面展示几个八叉树单元:(下方数字为多面体单元的面数目)下面以一个子弹为例,创建几何模型,并分别采用不同的网格离散。子弹的几何尺寸为:下面是不同单元离散的网格在paraview中的效果图,从左到右,从上到下依次为:四面体单元、六面体单元、任意多面体单元和八叉树单元。下面以实际地形为例。地形为小湾拱坝所在的位置,实地地形如:画网格之前先创建几何模型采用六面体网格对该几何模型进行离散,然后将abaqus(右)的模型处理成paraview(左)可识别的vtk文件,下面是效果图:下面采用任意多面体网格离散,abaqus无法对用户自定义单元进行可视化,因此,在paraview中的可视化效果为叁STL点云数据可视化点云数据是用于3D打印的一种数据格式,该数据采用扫描仪对模型实体表面进行扫描采集表面点云-坐标数据。该数据只记录了模型的表面数据,将模型表面离散为三角形面片数据。帖子以一个孙悟空的模型为例,将stl数据在paraview中显示,该模型表面共计三角形面片:680006个,点个数为:340200个,下面是显示的效果来源:有限元先生

未登录
还没有评论
课程
培训
服务
行家
VIP会员 学习 福利任务 兑换礼品
下载APP
联系我们
帮助与反馈