Radioss 材料本构的二次开发

上一期我们主要讲了:二次开发背景知识,安装Fortran编译器,设置环境变量,编译二次开发的程序,使用二次开发的程序。错过上一期的小伙伴,可以点击下方按钮查看文章:

Radioss二次开发 - 准备工作

No.1 二次开发介绍

二次开发的内容

我们先用一张图形象的说明一下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会以视频的形式对这一部分进行详细讲解,更方便大家学习~

No.2 材料二次开发介绍

二次开发本构卡片

例如,本讲我们要开发一个材料本构的卡片,在什么地方放上什么参数,放几行都可以自己定义。

需要注意的是,二次开发本构卡片必须名为:

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名称都不能更改,下图中用于实体单元和壳单元的参数名称也都不可更改

(用于实体单元)

(用于壳单元)

No.3 材料本构二次开发的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中。

文字表达可能有点复杂,建议大家看视频学习哈~

No.4 材料本构二次开发的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子程序中调特定用函数用于比如曲线读取等。

这一部分内容比较多而且相对复杂,视频讲解学起来可能更轻松哟~广州市智造软件科技有限公司是西门子&Altair双资质核心代理商,具备正版西门子Simcenter及Hyperworks的代理资质,提供正版产品、二次开发、产品培训及项目咨询等服务。

相关推荐
冰暮流星1 小时前
mysql索引失效的情形
数据库·笔记·sql·mysql
IvorySQL1 小时前
IvorySQL 校园行走进山东大学:从 PostgreSQL 到 AI,连接技术实践与职业成长
数据库·人工智能·postgresql
码上有光1 小时前
Linux:信号的认识、信号的产生、信号的保存、信号的处理
android·linux·运维·信号
郝学胜-神的一滴1 小时前
Python浏览器自动化:Selenium与Playwright实战对比,网页爬虫&自动操作一站式指南
开发语言·爬虫·python·selenium·程序人生·自动化
定栓1 小时前
Webpack迁到Vite第一节:模块系统迁移:require → import
运维·前端·webpack
小白的码BUG之路1 小时前
Jenkins -- 配置ssh
运维·ssh·jenkins
闲云自留地1 小时前
从零造一台 Ubuntu 24.04:虚拟机、装系统、配 IP 到 root 远程登录一篇通
数据库·tcp/ip·ubuntu
元岳数字人小元1 小时前
数字人私有化,如何搭建全链路内网推理体系
运维·人工智能·开源·人机交互·交互
Allen-Steven1 小时前
SQL查询专项:从完整书写到综合判断
运维·服务器·数据库