概述
-
在包含用户定义输出变量规范的材料定义中,会在所有的元素材料计算点上调用该子程序;
-
因为Abaqus/Standard迭代到收敛解,可能会在每个增量中的每个材料点上多次调用;
-
会在每个步骤的每个增量中调用;
-
允许您定义作为任何可用积分点数量的函数的输出量,这些数量在“使用Abaqus/Standard输出变量标识符”表中列出;
-
允许您将材料方向定义为输出变量;
-
可以用于垫片元素;
-
可以调用实用程序GETVRM以访问材料点数据;
-
除了静态扰动过程外,不能与线性扰动程序一起使用;
-
在具有多个负载情况的静态扰动过程中,每个负载情况只会调用一次;并且
-
在零增量中不能更新。
子程序使用注意
-
在Abaqus/Standard分析中,可以通过实用程序GETVRM获得材料点数量的值。在非线性分析中,返回的值将对应于当前解的迭代,仅在每个增量的最后一次迭代时代表收敛解。在静态扰动过程中,只能访问计算扰动值的那些数量。材料点数据的值以浮点数、整数和字符数据分别恢复到数组ARRAY、JARRAY和FLGRAY中。浮点数数据以双精度数据恢复。
-
在Abaqus/Standard中,用户自定义输出量的输出标识符是UVARM。每个分量可以通过UVARMn进行访问,其中n的范围为1到NUVARM。对于给定的材料,您需要指定用户定义输出变量的数量NUVARM,以便在每个材料计算点为每个变量分配空间。这些用户定义的输出变量可用于打印输出和结果文件输出,并写入输出数据库和重启文件,以便在Abaqus/CAE中进行等值线、打印和X-Y绘图。您可以根据需要使用任意数量的用户定义输出变量。
-
这些数据以双精度提供,可用于向数据(.dat)和结果(.fil)文件输出,并以单精度形式写入输出数据库(.odb)文件中。由于用户提供的UVARM输出变量是双精度的,因此在将输出结果写入输出数据库文件时,即使没有在UVARM中发生溢出错误,也可能会出现与单精度表示容量不足相关的数值溢出错误。
子程序使用
调用界面
1. Material 模块设置
2. Step 模块设置
用户子程序接口
SUBROUTINE UVARM(UVAR,DIRECT,T,TIME,DTIME,CMNAME,ORNAME,
1 NUVARM,NOEL,NPT,LAYER,KSPT,KSTEP,KINC,NDI,NSHR,COORD,
2 JMAC,JMATYP,MATLAYO,LACCFLA)
INCLUDE 'ABA_PARAM.INC'
C
CHARACTER*80 CMNAME,ORNAME
CHARACTER*3 FLGRAY(15)
DIMENSION UVAR(NUVARM),DIRECT(3,3),T(3,3),TIME(2)
DIMENSION ARRAY(15),JARRAY(15),JMAC(*),JMATYP(*),COORD(*)
C The dimensions of the variables FLGRAY, ARRAY and JARRAY
C must be set equal to or greater than 15.
user coding to define UVAR
RETURN
END
子程序变量
1. 要定义的变量
UVAR(NUVARM)
一个包含用户定义输出变量的数组。这些值在增量开始时作为输入传入,并且必须在增量结束时作为输出返回
2. 传递信息的变量
DIRECT(3,3)
一个包含材料方向相对于全局基础方向的方向余弦的数组。DIRECT(1,1),DIRECT(2,1),DIRECT(3,1)给出了第一个材料方向的(1, 2, 3)分量;DIRECT(1,2),DIRECT(2,2),DIRECT(3,2)给出了第二个材料方向,依此类推。对于壳体和薄膜元素,前两个方向在元素的平面内,第三个方向是法线方向。这些信息对于梁和桁架元素不可用。
T(3,3)
一个包含相对于元素基准方向的材料取向分量方向余弦的数组。这个取向定义了材料方向(DIRECT)相对于元素基准方向的关系。对于连续介质元素,T和DIRECT是相同的。对于壳体和薄膜元素,T(1,1) = cosθ, T(1,2) = -sinθ, T(2,1) = sinθ, T(2,2) = cosθ, T(3,3) = 1.0,所有其他分量都为零。其中θ是绕法向量逆时针旋转来定义取向的角度。如果没有使用取向,T就是一个单位矩阵。梁和桁架元素不支持取向参数。
其他
TIME(1):当前增量结束时的步长时间值。
TIME(2):当前增量结束时的总时间值。
DTIME:时间增量。
CMNAME:用户指定的材料名称,左对齐。
ORNAME:用户指定的局部取向名称,左对齐。
NUVARM:用户指定的用户定义输出变量数量。
NOEL:单元编号。
NPT:积分点编号。
LAYER:层编号(用于复合壳体和分层固体)。
KSPT:当前层中的截面点编号。
KSTEP:步骤编号。
KINC:增量编号。
NDI:该点应力分量的个数。
NSHR:该点剪切应力分量的个数。
COORD:该材料点的坐标。
JMAC:必须传递给GETVRM实用程序以访问输出变量的变量。
JMATYP:必须传递给GETVRM实用程序以访问输出变量的变量。
MATLAYO:必须传递给GETVRM实用程序以访问输出变量的变量。
LACCFLA:必须传递给GETVRM实用程序以访问输出变量的变量。
案例介绍
下面是一个名为UVARM的用户子程序的示例。该子程序通过从应力张量σ中减去运动硬化塑性模型中的运动偏移张量α,计算当前状态应力相对于屈服面中心的位置。
SUBROUTINE UVARM(UVAR,DIRECT,T,TIME,DTIME,CMNAME,ORNAME,
1 NUVARM,NOEL,NPT,LAYER,KSPT,KSTEP,KINC,NDI,NSHR,COORD,
2 JMAC,JMATYP,MATLAYO,LACCFLA)
C
INCLUDE 'ABA_PARAM.INC'
C
CHARACTER*80 CMNAME,ORNAME
CHARACTER*3 FLGRAY(15)
DIMENSION UVAR(NUVARM),DIRECT(3,3),T(3,3),TIME(2)
DIMENSION ARRAY(15),JARRAY(15),JMAC(*),JMATYP(*),COORD(*)
C
C Error counter:
JERROR = 0
C Stress tensor:
CALL GETVRM('S',ARRAY,JARRAY,FLGRAY,JRCD,JMAC,JMATYP,
1 MATLAYO,LACCFLA)
JERROR = JERROR + JRCD
UVAR(1) = ARRAY(1)
UVAR(2) = ARRAY(2)
UVAR(3) = ARRAY(3)
UVAR(4) = ARRAY(4)
UVAR(5) = ARRAY(5)
UVAR(6) = ARRAY(6)
C Kinematic shift tensor:
CALL GETVRM('ALPHA',ARRAY,JARRAY,FLGRAY,JRCD,JMAC,JMATYP,
1 MATLAYO,LACCFLA)
JERROR = JERROR + JRCD
C Calculate the position relative to the center of the
C yield surface:
UVAR(1) = UVAR(1) - ARRAY(1)
UVAR(2) = UVAR(2) - ARRAY(2)
UVAR(3) = UVAR(3) - ARRAY(3)
UVAR(4) = UVAR(4) - ARRAY(4)
UVAR(5) = UVAR(5) - ARRAY(5)
UVAR(6) = UVAR(6) - ARRAY(6)
C If error, write comment to .DAT file:
IF(JERROR.NE.0)THEN
WRITE(6,*) 'REQUEST ERROR IN UVARM FOR ELEMENT NUMBER ',
1 NOEL,'INTEGRATION POINT NUMBER ',NPT
ENDIF
RETURN
END
结语
今天分享一个用于自定义场输出的子程序,例如自定义云图等,公众号冬生亦东生后台回复 Uvarm子程序
获取更多案例。如果觉得有用请分享让更多人看到,觉得有不当之处欢迎指正交流。好看的话,下次再看。