A MatlFun object defines function pointers to the material subsystem. These function pointers are required by each element formulation object to compute quantities such as stress, heat flux, material stiffness and thermal conductivity matrices.
In addition to function pointers to the underlying material subsystem, each material model function object maintains an auxiliary object pointer which is passed as the first argument to each material function. This auxiliary object pointer may be assigned by a module or by the user. The user defined object may be used to hang any information required to implement the material functions for a particular material model. The MatlFun module contains the following functions.
*vfe_MatlFunBegin - create an instance of a MatlFun object vfe_MatlFunEnd - destroy an instance of a MatlFun object vfe_MatlFunError - return MatlFun object error flag vfe_MatlFunCopy - make a copy of a MatlFun object
vfe_MatlFunSet - set function pointers Get - get function pointers vfe_MatlFunSetObj - set auxiliary object GetObj - get auxiliary object vfe_MatlFunAPI - set built-in functions
vfe_MatlFunElemIntPnt - set element integration point information vfe_MatlFunNumHist - return number of material history variables vfe_MatlFunHistPtr - set pointers to material history vfe_MatlFunInitHist - initialize entries in material history
vfe_MatlFunDCond - set material matrix condensation rule vfe_MatlFunDInfo - get material matrix information vfe_MatlFunDMatrix - compute material stiffness matrix vfe_MatlFunStress - compute stress given strain or deformation vfe_MatlFunStressDMatrix - compute stress and material stiffness matrix vfe_MatlFunStressStrain - compute 3D stress and strain vfe_MatlFunModulus - compute characteristic elastic modulus vfe_MatlFunNumStressStrain - get number of section output points
vfe_MatlFundKMatrixdT - compute d(conductivity matrix)/dT vfe_MatlFunKInfo - compute matrix information vfe_MatlFunKMatrix - compute thermal conductivity matrix vfe_MatlFunHeatFlux - compute heat flux given temperature gradient vfe_MatlFunHeatFluxKMatrix - compute flux and conductivity matrix
vfe_MatlFunDensity - compute density vfe_MatlFunSpecHeat - compute specific heat
vfe_MatlFunProp - set value of interpolated element property
A continuum material formulation requires the evaluation of stress and material stiffness assuming a 3D stess tensor. The integration over the element volume is done entirely by the element formulation. A continuum material model is specialied to solid element types. The 3D stress components are ordered as (sxx,syy,szz,sxy,syz,szx).
By contrast a preintegrated material formulation requires the evaluation of stress and material stiffness assuming that the stress has been preintegrated through the thickness or over the cross section of the element yielding a so-called stress resultant. A preintegrated material formulation is specialized to a particular element type which dictates the number and type of stress resultant components. For shell elements the stress resultant components are ordered as (Nxx,Nyy,Nxy,Mxx,Myy,Mxy,Qxz,Qyz), for beam elements the stress resultants are ordered as (Nxx,Myy,Mzz,T,Qxy,Qzx).
If the material model includes inelastic or similar effects it may require that a history of computed material quantities be available. The user is responsible for allocating the memory for the history variables and passing pointers to the history variables at the previous and current solution steps. The function vfe_MatlFunNumHist is used to query for the number of history variables required at an integration point. The function vfe_MatlFunHistPtr is used to pass the pointers to the history variables to the material model. Linear elastic materials, for example, require no history variables, plastic materials will require several. Use vfe_MatlFunInitHist to initialize the material history parameters at the initial undeformed configuration.
The function vfe_MatlFunDCond is used to set stress condenstaion flags so the the material model can be configured to handle various plane stress conditions.
The computation functions vfe_MatlFunDMatrix, vfe_MatlFunStress, vfe_MatlFunStressDMatrix, vfe_MatlFunStressStrain, and vfe_MatlFunModulus are used to compute stress/resultants, three-dimensional stress and strain at section points, and material stiffness matrices given a small strain or large strain deformation matrix. Again, the function vfe_MatlFunDInfo is used to query for whether the material model requires small or large strain.
For continuum material formulations the small strain components are ordered (exx,eyy,ezz,gxy,gyz,gzx). and the deformation gradient matrix components are ordered as:
(1.-u,x, u,y, u,z, v,x, 1.-v,y, v,z, w,x, w,y, 1.-w,z).
For shell formulations the small strain is entered as reference surface strains and curvatures (exx,eyy,gxy,kxx,kyy,kxy,gxz,gyz).
For beam formulations the small strain is entered as reference axis strains, curvatures, a twist and shear strains. (exx,kyy,kzz,twist,gxy,gzx)
The computation functions vfe_MatlFunKMatrix, vfe_MatlFunHeatFlux and vfe_MatlFunHeatFluxKMatrix are used to compute heat flux and thermal conductivity matrices given a temperature gradient vector. The components of the temperature gradient vector are ordered (gtx,gty,gtz).
*vfe_MatlFunBegin - create an instance of a MatlFun object
vfe_MatlFun *vfe_MatlFunBegin ()
None
Destroy an instance of a MatlFun object using
void vfe_MatlFunEnd (vfe_MatlFun *matlfun)
Return the current value of a MatlFun object error flag using
Vint vfe_MatlFunError (vfe_MatlFun *matlfun)
Make a copy of a MatlFun object. The private data from the frommatlfun object is copied to the matlfun object. Any previous private data in matlfun is lost.
void vfe_MatlFunCopy (vfe_MatlFun *matlfun, vfe_MatlFun *frommatlfun)
vfe_MatlFunSet - set pointer to material model function
void vfe_MatlFunSet (vfe_MatlFun *matlfun, Vint type, void (*function)())
matlfun Pointer to MatlFun object. type Function type being set =MATLFUN_DINFO Set DInfo function =MATLFUN_DMATRIX Set DMatrix function =MATLFUN_STRESS Set Stress function =MATLFUN_STRESSDMATRIX Set StressDMatrix function =MATLFUN_STRESSSTRAIN Set StressStrain function =MATLFUN_DCOND Set DCond function =MATLFUN_MODULUS Set Modulus function =MATLFUN_NUMSTRESSSTRAIN Set NumStressStrain function =MATLFUN_DKMATRIXDT Set dKMatrixdT function =MATLFUN_KINFO Set KInfo function =MATLFUN_KMATRIX Set KMatrix function =MATLFUN_HEATFLUX Set HeatFlux function =MATLFUN_HEATFLUXKMATRIX Set HeatFluxKMatrix function =MATLFUN_DENSITY Set Density function =MATLFUN_SPECHEAT Set SpecHeat function =MATLFUN_ELEMINTPNT Set ElemIntPnt function =MATLFUN_NUMHIST Set NumHist function =MATLFUN_HISTPTR Set HistPtr function =MATLFUN_INITHIST Set InitHist function =MATLFUN_PROP Set Prop function function Pointer to material model function
None
vfe_MatlFunSet (matlfun,MATLFUN_GETSTRESS,(void(*)())My_GetStress);
Get function as an output argument using
void vfe_MatlFunGet (vfe_MatlFun *matlfun, Vint type, void (**function)())
vfe_MatlFunSetObj - set pointer to auxiliary object
void vfe_MatlFunSetObj (vfe_MatlFun *matlfun, Vobject *obj)
matlfun Pointer to MatlFun object. obj Pointer to auxiliary object
None
Get obj as an output argument using
void vfe_MatlFunGetObj (vfe_MatlFun *matlfun, Vobject **obj)
vfe_MatlFunAPI - set built-in functions
void vfe_MatlFunAPI (vfe_MatlFun *matlfun, Vint api)
matlfun Pointer to MatlFun object. api Type of built-in material function to return. =MATLFUN_APIRETURN Set return material functions
None
vfe_MatlFunElemIntPnt - specify element integration point
void vfe_MatlFunElemIntPnt (vfe_MatlFun *matlfun, Vint elemintpnt, Vdouble r[3], Vdouble w, Vdouble dj)
matlfun Pointer to MatlFun object. elemintpnt Element integration point number 1 <= elemintpnt r Natural coordinates of integration point w Weight of integration point dj Determinant of the Jacobian matrix at the integration point
None
vfe_MatlFunNumHist - return number of material history variables
void vfe_MatlFunNumHist (vfe_MatlFun *matlfun, Vint *numhist)
matlfun Pointer to MatlFun object.
numhist Number of material history variables.
vfe_MatlFunHistPtr - set pointers to material history
void vfe_MatlFunHistPtr (vfe_MatlFun *matlfun, Vdouble *oldhistptr, Vdouble *newhistptr)
matlfun Pointer to MatlFun object. oldhistptr Pointer to history at previous step newhistptr Pointer to history at current step
None
sizeof(Vdouble) * numhistwhere numhist is returned by vfe_MatlFunNumHist.
vfe_MatlFunInitHist - initialize entries in material history
void vfe_MatlFunInitHist (vfe_MatlFun *matlfun)
matlfun Pointer to MatlFun object.
None
vfe_MatlFunDInfo - get material stiffness matrix information
void vfe_MatlFunDInfo (vfe_MatlFun *matlfun, Vint type, Vint *info)
matlfun Pointer to MatlFun object. type Type of material stiffness matrix information to return =VFE_MATLELEM Specific element type supported =VFE_MATLFULL Zero fill of matrix =VFE_STRAINTYPE Strain capability
info Material stiffness matrix information =SYS_ON True =SYS_OFF False =SYS_ELEM_UNDEFINED Not element type specific =SYS_ELEM_SHELL Shell element material =SYS_ELEM_BEAM Beam element material =VFE_LARGESTRAIN Large strain capability =VFE_SMALLSTRAIN Small strain capability
VFE_MATLELEM queries the material model for specific support for an element type. If the underlying material model is a primitive material, then the element type will be SYS_ELEM_UNDEFINED. Element materials specific to shells or beams return SYS_ELEM_SHELL or SYS_ELEM_BEAM respectively.
VFE_MATLFULL queries the non-zero pattern of the material stiffness matrix. This value is used to avoid zero arithmetic by the element formulation modules. A return value of SYS_ON indicates that the matrix is full, ie. has all possible non-zero entries. A value of SYS_OFF indicates a certain degree of sparsity.
For 6 by 6 continuum material stiffnesses, full and sparse matrices have the following fill patterns:
Full Sparse x x x x x x x x x 0 0 0 x x x x x x x x x 0 0 0 x x x x x x x x x 0 0 0 x x x x x x 0 0 0 x 0 0 x x x x x x 0 0 0 0 x 0 x x x x x x 0 0 0 0 0 x
For 8 by 8 shell material stiffnesses, full and sparse matrices have the following fill patterns:
Full Sparse x x x x x x 0 0 x x x 0 0 0 0 0 x x x x x x 0 0 x x x 0 0 0 0 0 x x x x x x 0 0 x x x 0 0 0 0 0 x x x x x x 0 0 0 0 0 x x x 0 0 x x x x x x 0 0 0 0 0 x x x 0 0 x x x x x x 0 0 0 0 0 x x x 0 0 0 0 0 0 0 0 x x 0 0 0 0 0 0 x x 0 0 0 0 0 0 x x 0 0 0 0 0 0 x x
For 6 by 6 beam material stiffnesses, full and sparse matrices have the following fill patterns:
Full Sparse x x x 0 0 0 x 0 0 0 0 0 x x x 0 0 0 0 x 0 0 0 0 x x x 0 0 0 0 0 x 0 0 0 0 0 0 x x x 0 0 0 x 0 0 0 0 0 x x x 0 0 0 0 x 0 0 0 0 x x x 0 0 0 0 0 x
VFE_STRAINTYPE queries whether large strain, VFE_LARGESTRAIN, or small strain, VFE_SMALLSTRAIN, is supported. Large strains require a deformation gradient matrix to be passed to the vfe_MatlFunStress, vfe_MatlFunStressStrain, and vfe_MatlFunStressDMatrix functions. Small strains require a small strain tensor to be passed to the vfe_MatlFunStress, vfe_MatlFunStressStrain, and vfe_MatlFunStressDMatrix functions.
vfe_MatlFunDMatrix - compute material stiffness matrix
void vfe_MatlFunDMatrix (vfe_MatlFun *matlfun, Vdouble dm[])
matlfun Pointer to MatlFun object.
dm Lower triangle of material stiffness matrix
For beams and shells the resultant tangent matrix is returned by this function. Otherwise, the three dimensional tangent matrix is returned.
vfe_MatlFunStress - compute stress/resultant given strain/curvature
void vfe_MatlFunStress (vfe_MatlFun *matlfun, Vdouble dfrm[], Vdouble strs[])
matlfun Pointer to MatlFun object. dfrm Given small strain tensor or deformation gradient matrix
strs Computed Cauchy stresses
For shells and beams the resultant stresses are returned by this function. Otherwise, the 6 stress components are returned.
vfe_MatlFunStressDMatrix - compute stress and material stiffness matrix
void vfe_MatlFunStressDMatrix (vfe_MatlFun *matlfun, Vdouble dfrm[], Vint dflag, Vdouble strs[], Vdouble dm[])
matlfun Pointer to MatlFun object. dfrm Given small strain tensor or deformation gradient matrix dflag Optional computation of material stiffness matrix
strs Computed Cauchy stresses dm Lower triangle of material stiffness matrix
For shells and beams the resultant stresses and tangent matrix are returned by this function. Otherwise, the three dimensional stress components and the resulting tangent are returned.
vfe_MatlFunStressStrain - compute 3D stress and strain given strain/curvature
void vfe_MatlFunStressStrain (vfe_MatlFun *matlfun, Vdouble dfrm[], Vdouble strs[], Vdouble stress[], Vdouble strain[])
matlfun Pointer to MatlFun object. dfrm Given small strain tensor or deformation gradient matrix
strs Computed stress resultants stress Computed Cauchy stresses at section points strains Computed strains at section points
For shells and beams the resultant stresses are returned by this function. This function is not available for elements other than shells and beams. The order for stress and strain data is all element nodal stresses and strains for the first section point, followed by all element nodal data for the second section point, etc.
vfe_MatlFunDCond - set material matrix condensation rule
void vfe_MatlFunDCond (vfe_MatlFun *matlfun, Vint cond[])
matlfun Pointer to MatlFun object. cond Vector of condensation flags
None
vfe_MatlFunKInfo - get thermal conductivity matrix information
void vfe_MatlFunKInfo (vfe_MatlFun *matlfun, Vint type, Vint *info)
matlfun Pointer to MatlFun object. type Type of thermal conductivity matrix information to return =VFE_MATLELEM Specific element type supported =VFE_MATLFULL Zero fill of matrix =VFE_TEMPDEP Temperature-dependent conductivity
info Thermal conductivity matrix information =SYS_ON True =SYS_OFF False =SYS_ELEM_UNDEFINED Not element type specific
VFE_MATLELEM queries the material model for specific support for an element type. If the underlying material model is a primitive material, then the element type will be SYS_ELEM_UNDEFINED. This is currently the only option for thermal analysis.
VFE_MATLFULL queries the non-zero pattern of the thermal conductivity matrix. This value is used to avoid zero arithmetic by the element formulation modules. A return value of SYS_ON indicates that the matrix is full, ie. has all possible non-zero entries. A value of SYS_OFF indicates a certain degree of sparsity.
Full Sparse x x x x 0 0 x x x 0 x 0 x x x 0 0 x
VFE_TEMPDEP queries for temperature-dependent thermal conductivity. This value is used to determine whether vfe_MatlFundKMatrixdT should be called to add this dependency to a non-symmetric thermal conductivity matrix.
vfe_MatlFunKMatrix - compute thermal conductivity matrix
void vfe_MatlFunKMatrix (vfe_MatlFun *matlfun, Vdouble km[])
matlfun Pointer to MatlFun object.
km Lower triangle of thermal conductivity matrix
vfe_MatlFunHeatFlux - compute heat flux given temperature gradient
void vfe_MatlFunHeatFlux (vfe_MatlFun *matlfun, Vdouble grad[], Vdouble flux[])
matlfun Pointer to MatlFun object. grad Given temperature gradient vector
flux Computed heat flux vector
vfe_MatlFunHeatFluxKMatrix - compute flux and conductivity matrix
void vfe_MatlFunHeatFluxKMatrix (vfe_MatlFun *matlfun, Vdouble grad[], Vint kflag, Vdouble flux[], Vdouble km[])
matlfun Pointer to MatlFun object. grad Given temperature gradient vector kflag Optional computation of thermal conductivity matrix
flux Computed heat flux vector km Lower triangle of thermal conductivity matrix
vfe_MatlFundKMatrixdT - compute d(conductivity matrix)/dT
void vfe_MatlFundKMatrixdT (vfe_MatlFun *matlfun, Vdouble dkmdt[])
matlfun Pointer to MatlFun object.
dkmdt Computed derivative of Lower triangle of thermal conductivity matrix w.r.t. temperature
vfe_MatlFunDensity - compute density
void vfe_MatlFunDensity (vfe_MatlFun *matlfun, Vdouble density[])
matlfun Pointer to MatlFun object.
density Density
vfe_MatlFunModulus - compute characteristic elastic modulus
void vfe_MatlFunModulus (vfe_MatlFun *matlfun, Vdouble *modulus)
matlfun Pointer to MatlFun object.
modulus Elastic modulus
vfe_MatlFunNumStressStrain - get number of section output points
void vfe_MatlFunNumStressStrain (vfe_MatlFun *matlfun, Vint *numstressstrain)
matlfun Pointer to MatlFun object.
numstressstrain Number of section output points
vfe_MatlFunSpecHeat - compute specific heat
void vfe_MatlFunSpecHeat (vfe_MatlFun *matlfun, Vdouble *specheat)
matlfun Pointer to MatlFun object.
specheat Specific heat
vfe_MatlFunProp - set value of interpolated element property
void vfe_MatlFunProp (vfe_MatlFun *matlfun, Vint ptype, Vdouble prop)
matlfun Pointer to MatlFun object. ptype Property type to set =VFE_PROP_TEMPERATURE Temperature =VFE_PROP_THICKNESS Thickness =VFE_PROP_OFFSET Offset
prop Element property.