CalculiX中不可用的热行为可以由用户在子程序“umatht.f”中编写。这也适用于热等价模型的任何行为,如浅水理论等。例如,润滑中油膜的厚度是等价电导率系数的一部分。力学部分可以通过在热材料用户子程序中考虑力学部分运动对油膜厚度的影响,与油区域耦合。umatht子程序的头部和输入/输出变量如下:
subroutine umatht(u,dudt,dudg,flux,dfdt,dfdg,
& statev,temp,dtemp,dtemdx,time,dtime,predef,dpred,
& cmname,ntgrd,nstatv,props,nprops,coords,pnewdt,
& noel,npt,layer,kspt,kstep,kinc,vold,co,lakonl,konl,
& ipompc,nodempc,coefmpc,nmpc,ikmpc,ilmpc,mi)
!
! 热传递材料子程序
!
! 输入:
!
! statev(nstatv) 增量开始时的内部状态变量
! temp 增量开始时的温度
! dtemp 温度增量
! dtemdx(ntgrd) 温度空间梯度的当前值
! time(1) 增量开始时的步时间
! time(2) 增量开始时的总时间
! dtime 时间增量
! predef 未使用
! dpred 未使用
! cmname 材料名称
! ntgrd 温度空间梯度的数目
! nstatv 内部状态变量的数目,如*DEPVAR卡片上定义的
! props(nprops) 用户定义的常数,由关键词卡片
! *USER MATERIAL,TYPE=THERMAL定义
! nprops 用户定义常数的数目,如
! *USER MATERIAL,TYPE=THERMAL卡片上指定的
! coords 积分点的全局坐标
! pnewd 未使用
! noel 单元编号
! npt 积分点编号
! layer 未使用
! kspt 未使用
! kstep 未使用
! kinc 未使用
! vold(0..4,1..nk) 所有节点的解场
! 0: 温度
! 1: 全局x方向的位移
! 2: 全局y方向的位移
! 3: 全局z方向的位移
! 4: 静压力
! co(3,1..nk) 所有节点的坐标
! 1: 全局x方向的坐标
! 2: 全局y方向的坐标
! 3: 全局z方向的坐标
! lakonl 单元标签
! konl(1..20) 属于该单元的节点
! ipompc(1..nmpc)) ipompc(i)指向场nodempc中MPC i定义的第一个项
! nodempc(1,*) MPC项的节点编号
! nodempc(2,*) MPC项的坐标方向
! nodempc(3,*) 如果不为0:指向场nodempc中MPC的下一项
! 如果为0:MPC定义完成
! coefmpc(*) MPC项的系数
! nmpc MPC的数目
! ikmpc(1..nmpc) MPC的有序全局自由度
! 全局自由度为
! 8*(node-1)+MPC从属项的方向
! (方向=0: 温度;1-3: 位移;4: 静压力;5-7: 旋转)
! ilmpc(1..nmpc) ilmpc(i)是ikmpc(i)中参考编号对应的MPC编号
! mi(1) 每个单元的最大积分点数(所有单元的最大值)
! mi(2) 每个节点的最大自由度数(所有节点的最大值),
! 用于像v(0:mi(2))...
!
! 输出:
!
! u 未使用
! dudt 未使用
! dudg(ntgrd) 未使用
! flux(ntgrd) 增量结束时的热通量
! dfdt(ntgrd) 未使用
! dfdg(ntgrd,ntgrd) 热通量对温度空间梯度的变化率
! statev(nstatv) 增量结束时的内部状态变量
!