Umatht.f for transient thermal analysis

Hi all,

I need to define Conductivity and Specific Heat in user defined material Umatht.f. I recompiled the source codes of calculix with Umatht.f, but it doesn’t work (the solution procedure stops immediately). I used Calculix CAE. Here are my Umatht.f file and inp files:

The Umatht.f is simple, which is used for testing. I don’t know why the model doesn’t work. If I define the material properties directly in inp file, everything is fine. And, I also tested Umatht.f with ABAQUS and it works.

Does anybody have experiences with user defined Conductivity and Specific Heat properties for transient thermal analysis? Could anybody help me about this. Thanks in advance!

Best regards,
Xingxing

Hi @Xing, have you tried running ccx with a debugger to see where it stops? That would at least show something to diagnose the issue.

Hi @jbr , thanks! I tried it again with Calculix luncher, the debug information is shown in the screen-shot. In my future real model, I need to define a complex “Specific heat” property in umatht.f for phase transformation case. So, I need to use *USER MATERIAL card to define the “Conductivity” and “Specific heat”, which is also the way done in Abaqus. But here, the error message is missing definition of specific heat. So, what’s wrong in calculix inp or umatht.f file? I have no idea.

Hi @Xing , just based on the error shown on the screenshot I would use the keyword *SPECIFIC HEAT and retry. Maybe there is a bug in the umat?

@jbr Thanks for your reply. But still not working. If I define the property use the keyword *SPECIFIC HEAT, Calculix will just use this value, but not the value from ‘*User material’. If I define the keyword *SPECIFIC HEAT without giving values (i.e. it is empty), there will be the same error message saying no specific heat was defined.

Did anybody has a successful example with umatht.f for Calculix?

Can you check how the values are passed in the thermmodel.f subroutine? Also, could you take a look at the calinput.f subroutine lines 1456-1483? I think that is where the issue may be if any.

@jbr thanks for the information. I checked thermmodel.f, the umatht.f is called in thermmodel.f as:
call umatht(u,dudt,dudg,qflux,dfdt,dfdg,xstate(1,iint,iel),&
t1lold,dtemp,&
dtemdx,abqtime,dtime,predef,dpred,amat,ntgrd,nstate_,&
coconloc,ncoconst,pgauss,pnewdt,iel,iint,layer,kspt,&
kstep,kinc,vold,co,lakonl,konl,&
ipompc,nodempc,coefmpc,nmpc,ikmpc,ilmpc,mi)
!
cond(1)=dfdg(1,1)
cond(2)=dfdg(2,2)
cond(3)=dfdg(3,3)
cond(4)=dfdg(1,2)
cond(5)=dfdg(1,3)
cond(6)=dfdg(2,3)
So, umatht.f only passes dfdg(,) matrix to thermodel.f, while “specific heat” playing no role here.

I also checked calinput.f and specificheats.f, the “specific heat” values are only stored in “shcon” in specificheats.f, which has no connection to umatht.f.

You can probably edit the code and add that set of variables to be passed to umatht.f - I would try to use the same implementation structure as in the umat for mechanical analysis.

Hi, I’m also dealing with the umatht subroutine these days. umatht seems to be called only in thermmodel.f. As @Xing mentioned in the thermmodel.f file, only dfdg outputs seem to be used, but changing the value of the flux variable in umatht causes the analysis results to change. This means that the flux variable is used in the analysis, although it is not mentioned in thermmodel.f, but I could not find in which file this output is called. Do you have an opinion on this?