本文摘要(由AI生成):
本文主要介绍了Radioss材料本构的二次开发,包括二次开发的内容、Starter和Engine两部分以及材料本构二次开发的starter和engine。Starter主要用于数据的读取,例如读取材料的参数等,而Engine主要用于计算,例如计算每个单元中的应力。在材料本构的二次开发中,需要编写两个子程序,分别是LECM和SIGEPS,其中LECM用于Starter,SIGEPS用于Engine。在Starter中,需要定义一些参数,例如IIN、IOUT、NUVAR、IFUNC、UPARAM等,而在Engine中,需要定义一些参数,例如NEL、UPARAM、NUVAR、IFUNC、NPF、TF、NPT、IPT、TIME、TIMESTEP、RHO0、RHO、VOLUME、AREA、EINT等。此外,还可以在engine子程序中调用特定函数,例如曲线读取等。
上期介绍了Radioss的二次开发的准备工作,本期我们将继续深入,为大家带来Radioss 材料本构的二次开发。本讲我们将主要围绕二次开发简介、材料二次开发介绍、材料本构二次开发的starter、材料本构二次开发的engine这四点展开~
上一期我们主要讲了:二次开发背景知识,安装Fortran编译器,设置环境变量,编译二次开发的程序,使用二次开发的程序。
二次开发介绍
二次开发的内容
我们先用一张图形象的说明一下Radioss的二次开发能开发哪一些内容:
Radioss支持单元属性、实体单元、壳单元、SPH、材料本构、失效模型及状态方程的二次开发,这些都需要和Radioss主程序协同工作。
Starter 和 Engine
Radioss的二次开发主要分为两块:Starter和Engine。
(点击图片可查看大图)
Starter主要用于数据的读取,例如读取材料的参数等。图中Starter Input file其实就是000.rad文件,Starter可以读取其中定义的一些参数之后,形成Restart file,传递给Engine。Starter和Engine是通过一些参数进行信息交换的。
Engine主要用于计算,Engine Input file就是0001.rad文件。Engine读取Engine中的一些设置以及Starter文件当中的Restart file信息进行计算,最后输出结果文件。
Starter读取用户输入然后通过UPARAM传递给Engine,Starter还可用于用户输入的打印,以便后期校验。
Engine对于材料本构的二次开发来说,实际上就是计算每个单元中的应力,所以每个单元都需要循环。
和上一期一样,Altair China Radioss 高级应用工程师 Lucy会以视频的形式对这一部分进行详细讲解,更方便大家学习~
材料二次开发介绍
二次开发本构卡片
例如,本讲我们要开发一个材料本构的卡片,在什么地方放上什么参数,放几行都可以自己定义。
需要注意的是,二次开发本构卡片必须名为:
USER1 或 LAW29
USER2 或 LAW30
USER3 或 LAW31
不能是其他名字,比如USER01,会出错。
编写两个子程序的名字必须为:
LECMnn 的starter子程序
SIGEPSnn的engine子程序
如下图所示:
如果是实体单元,子程序名字后直接接对应编号,如果是壳体的话,在编号后会有“c”。
LAW29-31做的材料本构开发可以用于2D或3D的单元,但是不可以用于弹簧(spring)或杆(Truss)单元。
SUBROUTINE
我们以 LAW29 为例,看一下材料本构的二次开发中的starter和engine分别有那些SUBROUTINE。
Starter(LECM29.f)
(点击图片可查看大图)
如上图所示,Starter中有LECMnn的SUBROUTINE,以LAW29为例,就是LECM29。
同样,Engine有SIGEPSnn的SUBROUTINE,以LAW29为例,就是SIGEPS29。Starter和engine中的LECM和SIGEPS名称都不能更改,下图中用于实体单元和壳单元的参数名称也都不可更改。
(用于实体单元)
(用于壳单元)
材料本构二次开发的starter
接下来我们来详细分析一下Starter的每一个参数分别起到什么作用。
首先,子程序中的参数名称不要改变,他们是用于和Radioss其他内部程序进行交流的。
IIN:读取数据的参数
例如:
IOUT:输出数据的参数
例如:
以1100处定义的格式输出E和NU这两个数据。
NUVAR
NUVAR:用于engine子程序的许多内部变量的存储。
IFUNC
IFUNC:用于存储材料模型中所用到的曲线(function)的数组。
曲线的数目必须储存在这个数组中,同样这个数组的维数是定义在NFUNC中,维数的上限是定义在MAXFUNC。
PARMAT
PARMAT:用于存储用于计算接触刚度的材料模量。比如E-模量,G-模量,这些也用于在Starter中计算时间步长。
UPARAM
UPARAM:用于存储材料参数的双精度数组,用于engine子程序。
例如存储读取的材料数据E-模量,泊松比,最大应变值,屈服应力,内部计算得到的G-模量等数据。数组的维数是定义在NUPARAM中,数组的维数的上限是定义在MAXUPARAM中。
材料本构二次开发的engine
在详细介绍engine之前,因为在材料本构中engine就是计算每个单元中的应力,所以我们以实体单元线弹性各向同性材料本构来讲一下算法:
公式
实体单元中的应力应变:
线弹性各向同性材料本构:
放大看一下:
ENGINE参数
Engine(SIGEPS29.f)
第1-3行参数:
Engine的前三行用于存储基本材料数据。
(用于实体单元)
NEL
NEL:需要计算的模型中的单元个数。
UPARAM
UPARAM:在Starter中读取并存储材料参数的双精度数组,数组的维数是定义在NUPARAM中。
NUVAR
NUVAR:用于engine子程序的许多内部变量的存储。
IFUNC
IFUNC:用于存储材料模型中所用到的曲线(function)的数组。曲线的数目必须储存在这个数组中,同样这个数组的维数是定义在NFUNC中。
NPF,TF
NPF,TF:用于FINTER的数组参数。FINTER是Radioss读取曲线以后用内插法再次表述。
NPT,IPT
NPT:积分点的数目,IPT是指当前的积分点。
TIME,TIMESTEP
TIME,TIMESTEP:当前时间和时间步长。
RHO0,RHO
RHO0,RHO:初始和当前的密度。
VOLUME,AREA
VOLUME,AREA:单元体积(用于实体单元solid),单元的面积(用于壳单元shell)。
EINT
EINT:总内能
第4-9行参数:
最后一行参数:
最后一行参数用于内部参数的计算存储。
SOUNDSP
SOUNDSP:声速,一般是可以在子程序中如下描述,实体单元solid:
VISCMAX
VISCMAX:最大阻尼,比如对viscous材料,他是用于稳定计算步长的
OFF
OFF:用于指示单元删除的参数,单元不删除为1,删除就位0
如果是壳单元还有如下参数:
THK
THK:单元的厚度
PLA
PLA:用于存储塑性应变的数组
函数
除了参数以外,还可以在engine子程序中调特定用函数用于比如曲线读取等。