User-Defined Heat Transfer Properties

The LOADLIB I/O Option Entry, can be used in combination with:
  1. The QVOL and QVOLLIB Bulk Data Entries for the definition of time-dependent and temperature-dependent volumetric heat generation through user-defined external functions, and/or,
  2. The PCONV and PCONVLIB Bulk Data Entries for the definition of time-dependent and temperature-dependent free-convection coefficient through user-defined external functions.
  3. The QBDY1 and QBDYLIB Bulk Data Entries for the definition of time-dependent and temperature-dependent uniform heat flux through user-defined external functions.
  4. The SPCD and SPCDLIB Bulk Data Entries for the definition of time-dependent and temperature-dependent uniform heat flux through user-defined external functions.

The external functions may be written in Fortran or C. The resulting libraries and files should be accessible by OptiStruct regardless of the coding language, provided that consistent function prototyping is respected, and adequate compiling and linking options are used.

Write External Functions

Two Fortran subroutines are available, one is to define user-defined volumetric heat addition and the second is to define user-defined free convection coefficient.

Volumetric Heat Addition Subroutine

subroutine USRQVOL(ldsid,elabl,elset,nsetl,nsets,max_elset_len,
temp,max_temp_len,time,dtime,tbllabel,tblxy,tbllen,max_table_len,
ntables,evol,ethick,ecentroid, qheat,itablest,jtablest,rtablest,idtablest,
itables1,rtables1,ntables1,ltables1,ntablest,ltablest,itablemd, 
rtablemd,nitablemd,ntablemd,ltablemd)
Table 1 briefly describes the arguments which are passed among OptiStruct and the external subroutines.
Table 1. Subroutine Arguments
Argument Type Input/Output Description
ldsid Integer Input This is the user-defined QVOL Load Set identification number (User ID).
elabl Character, vector Input elabl is the label of the elset (the identifier). It indicates the HyperMesh component name.
elset Integer, vector Input The element ID’s in elabl. Internal IDs and then user-defined IDs following them (only for debugging purpose).
nsetl Integer, vector Input Actual length of each elset
nsets Integer, vector Input Total number of elset
max_elset_len Integer, vector Input Maximum length of all the elset
temp Double, vector Input Temperature calculated at the element centroid. This is based on internal IDs.
time Double, scalar Input Current time
dtime Double, scalar Input Time step
tbllabel Character, vector Input Label of the TABLEG table
tblxy Double, vector Input Contains the TABLEG X-Y values
tbllen Integer, vector Input Actual length of each TABLEG table
max_table_len Integer, vector Input Maximum length of all the TABLEG tables
ntables Integer, vector Input Total number of TABLEG tables
evol Double, vector Input Element volumes
ethick Double, vector Input Element thicknesses
ecentroid Double, vector Input Element centroid XYZ coordinates
qheat Double, vector Output q calculated at the element centroid – the volume is calculated within the main source code of OptiStruct. qheat is vector, it will contain the q’s of all heated elements.
itablest Integer, vector Input TABLEST integer data
itablest(1) Integer Input Table identification number
itablest(3) Integer Input Starting index of jtablest
itablest(4) Integer Input Ending index of jtablest
jtablest Integer, vector Input Contains the indexes for the TABLEST temperature values and TABLES1 entries.
rtablest Double, vector Input TABLEST temperature values
idtablest Integer, vector Input TABLEST and TABLES1 entries
itables1 Integer, vector Input TABLES1 integer data
itables1(1) Integer Input Table identification number
itables1(3) Integer Input Starting index of rtables1
itables1(4) Integer Input Ending index of rtables1
rtables1 Double, vector Input TABLES1 X-Y values
ntablest Integer, vector Input Total number of TABLEST tables
ltablest Integer, vector Input Total length of each TABLEST table
ntables1 Integer, vector Input Total number of TABLES1 tables
ltables1 Integer, vector Input Total length of each TABLES1 table
itablemd Integer, vector Input TABLEMD Integer data
rtablemd Integer, vector Input TABLEMD X-Y values
nitablemd Integer, scalar Input Total length of each TABLEMD table
ntablemd Integer, scalar Input Total number of each TABLEMD table
ltablemd Integer, scalar Input Total length of each RTABLEMD table

Free-Convection Coefficient Subroutine

subroutine 
USERHTC(pconvid,pconlabel,num_pconvlabels,cnvlabl,cnvset,cnvnsetl,
cnvnsets,max_cnvset_len,sidtemp,max_sidtemp_len,time,dtime,tbllabel,
tblxy,tbllen,max_table_len,ntables,xyzcoord,qvol_temperatures,
qvol_element_sets,qvol_element_sets_len,qvol_labels,num_qvol_labels,
max_qvol_sets_len,max_qvol_temp_len,htc,itablest,jtablest,rtablest,idtablest,
itables1,rtables1,ntables1,ltables1,ntablest,ltablest,itablemd,rtablemd,nitablemd,
ntablemd,ltablemd)
Table 2 briefly describes the arguments which are passed among OptiStruct and the external subroutines.
Table 2. Subroutine Arguments
Argument Type Input/Output Description
pconvid Integer Input Convection property identification number
pconlabel Character Input Convection property identification label. This is the HyperMath property name.
num_pconvlabels Integer, vector Input Number of pconlabels.
cnvlabl Character, vector Input Label of the cnvset (the identifier). This is the HyperMath component name.
cnvset Integer, vector Input Element ID’s and their side in cnvlabl. Internal element IDs defined on the CONV entry and then user element IDs to follow.
cnvnsetl Integer, vector Input Actual length of each cnvset
cnvnsets Integer, vector Input Total number of cnvset
max_cnvset_len Integer, vector Input Maximum length of all the cnvset
sidtemp Double, vector Input Temperature calculated at the element side centroid
time Double, scalar Input Current time
dtime Double, scalar Input Time step
tbllabel Character, vector Input Label of the TABLEG table
tblxy Double, vector Input Contains the TABLEG table X-Y values
tbllen Integer, vector Input Actual length of each TABLEG table
max_table_len Integer, vector Input Maximum length of all the TABLEG tables
ntables Integer, vector Input Total number of TABLEG tables
xyzcoord Double, vector Input Element’s side centroid nodal co-ordinates
qvol_temperatures Integer, vector Input Temperatures calculated at the element centroid associated with a QVOL Bulk Data Entry.
qvol_element_sets Integer, vector Input Element IDs in QVOL labels
qvol_element_sets_len Character, vector Input Actual length of each QVOL element set
qvol_labels Integer, vector Input Label of the QVOL element set
num_qvol_labels Character, vector Input Total number of QVOL labels
max_qvol_sets_len Integer, vector Input Maximum length of all QVOL element sets
max_qvol_temp_len Integer, vector Input Maximum length of all QVOL temperatures
htc Double, vector Output Convection Heat Transfer Coefficient calculated at the side centroid
itablest Integer, vector Input TABLEST integer data
itablest(1) Integer Input Table identification number
itablest(3) Integer Input Starting index of jtablest
itablest(4) Integer Input Ending index of jtablest
jtablest Integer, vector Input Contains the indexes for the TABLEST temperature values and TABLES1 entries.
rtablest Double, vector Input TABLEST temperature values
idtablest Integer, vector Input TABLEST and TABLES1 entries
itables1 Integer, vector Input TABLES1 integer data
itables1(1) Integer Input Table identification number
itables1(3) Integer Input Starting index of rtables1
itables1(4) Integer Input Ending index of rtables1
rtables1 Double, vector Input TABLES1 X-Y values
ntablest Integer, vector Input Total number of TABLEST tables
ltablest Integer, vector Input Total length of each TABLEST table
ntables1 Integer, vector Input Total number of TABLES1 tables
ltables1 Integer, vector Input Total length of each TABLES1 table

Heat Flux Subroutine

subroutine 
USERQBDY1(ldsid,elabl,elset,nsetl,nsets,max_elset_len,temp,max_temp_len,
time,dtime,tbllabel,tblxy,tbllen,max_table_len,ntables,areas,thicknesses,
xyzcoords,qbdy1,itablest,jtablest,rtablest,idtablest,itables1,rtables1,
ntables1,ltables1,ntablest,ltablest,itablemd,rtablemd,nitablemd,ntablemd,
ltablemd)
Table 3 briefly describes the arguments which are passed among OptiStruct and the external subroutines.
Table 3. Subroutine Arguments
Argument Type Input/Output Description
ldsid Integer Input This is the user-defined QBDY1 Load Set Identification number (User ID).
elabl Character, vector Input elabl is the label of the elset (the identifier). It indicates the HyperMesh component name.
elset Integer, vector Input The element ID’s in elabl. Internal IDs and then user-defined IDs following them (only for debugging purpose).
nsetl Integer, vector Input Actual length of each elset
nsets Integer, vector Input Total number of elset
max_elset_len Integer, vector Input Maximum length of all the elset
temp Double, vector Input Temperature calculated at the element centroid. This is based on internal IDs.
time Double, scalar Input Current time
dtime Double, scalar Input Time step
tbllabel Character, vector Input Label of the TABLEG table
tblxy Double, vector Input Contains the TABLEG table X-Y values
tbllen Integer, vector Input Actual length of each TABLEG table
max_table_len Integer, vector Input Maximum length of all the TABLEG tables
ntables Integer, vector Input Total number of TABLEG tables
areas Double, vector Input Element area
thicknesses Double, vector Input Element thicknesses
xyzcoords Double, vector Input Element centroid nodal coordinates.
qbdy1 Double, vector Output q calculated at the element centroid -qbdy1 is a vector, it will contain the q’s of all heated elements.
itablest Integer, vector Input TABLEST integer data
itablest(1) Integer Input Table identification number
itablest(3) Integer Input Starting index of jtablest
itablest(4) Integer Input Ending index of jtablest
jtablest Integer, vector Input Contains the indexes for the TABLEST temperature values and TABLES1 entries
rtablest Double, vector Input TABLEST temperature values
idtablest Integer, vector Input The TABLEST and TABLES1 entries
itables1 Integer, vector Input The TABLES1 integer data
itables1(1) Integer Input Table identification number
itables1(3) Integer Input Starting index of rtables1
itables1(4) Integer Input Ending index of rtables1
rtables1 Double, vector Input TABLES1 X-Y values
ntablest Integer, vector Input Total number of TABLEST tables
ltablest Integer, vector Input Total length of each TABLEST table
ntables1 Integer, vector Input Total number of TABLES1 tables
ltables1 Integer, vector Input Total length of each TABLES1 table
itablemd Integer, vector Input TABLEMD Integer data
rtablemd Double, vector Input TABLEMD X-Y values
nitablemd Integer, scalar Input Total length of each TABLEMD table
ntablemd Integer, scalar Input Total number of TABLEMD tables
ltablemd Integer, scalar Input Total length of each RTABLEMD table

SPCD Temperature Subroutine

subroutine 
USERSENSOR(ldsid,nlabl,ndset,ndsetl,cntrlset,cntrlsetl,ndsets,max_ndset_len,
max_cntrlset_len,tempn,max_tempn_len,max_tempinf_len,time,dtime,tbllabel,tblxy,
tbllen,max_table_len,ntables,tempinf,itablest,jtablest,rtablest,idtablest,itables1,
rtables1,ntables1,ltables1,ntablest,ltablest,itablemd,rtablemd,nitablemd,ntablemd,
ltablemd)
Table 4 briefly describes the arguments which are passed among OptiStruct and the external subroutines.
Table 4. Subroutine Arguments
Argument Type Input/Output Description
ldsid Integer Input SPCD load set ID (user-defined SPCD ID)
nlabl Character, Vector Input Label of the NDSET (identifier). This is the HyperMesh node SET label (for ambient node).
ndset Integer, vector Input Node ID’s in nlabl. It contains the internal IDs and then user-defined IDs follow.
ndsetl Integer, vector Input Actual length of each ndset
ndsets Integer, vector Input Total number of ndset
max_ndset_len Integer, vector Input Maximum length of all the ndset
cntrlset Integer, vector Input Control node IDs. These are internal IDs and then user-defined IDs to follow.
cntrlsetl Integer, vector Input Actual length of each cntrlset.
cntrlsets Integer, vector Input Total number of cntrlset.
max_cntrlset_len Integer, vector Input Maximum length of all the cntrlset
tempn Double, vector Input Calculated nodal temperature.
tempinf Double, vector Output Ambient Temperatures at the control nodes.
time Double, scalar Input Current time
dtime Double, scalar Input Time step
tbllabel Character, vector Input Label of the TABLEG table
tblxy Double, vector Input Contains the TABLEG table X-Y values
tbllen Integer, vector Input Actual length of each TABLEG table
max_table_len Integer, vector Input Maximum length of all the TABLEG tables
ntables Integer, vector Input Total number of TABLEG tables
itablest Integer, vector Input TABLEST Integer data
itablest(1) Integer Input Table identification number
itablest(3) Integer Input Starting index of jtablest
itablest(4) Integer Input Ending index of jtablest
jtablest Integer, vector Input Contains the indexes for the TABLEST temperature values and TABLES1 entries
rtablest Double, vector Input TABLEST temperature values
idtablest Integer, vector Input The TABLEST and TABLES1 entries
itables1 Integer, vector Input The TABLES1 integer data
itables1(1) Integer Input Table identification number
itables1(3) Integer Input Starting index of rtables1
itables1(4) Integer Input Ending index of rtables1
rtables1 Double, vector Input TABLES1 X-Y values
ntablest Integer, vector Input Total number of TABLEST tables
ltablest Integer, vector Input Total length of each TABLEST table
ntables1 Integer, vector Input Total number of TABLES1 tables
ltables1 Integer, vector Input Total length of each TABLES1 table
itablemd Integer, vector Input TABLEMD integer data.
rtablemd Double, vector Input TABLEMD X-Y values
nitablemd Integer, scalar Input Total length of each TABLEMD table.
ntablemd Integer, scalar Input Total number of TABLEMD tables.
ltablemd Integer, scalar Input Total length of each RTABLEMD table.

Build External Libraries for User-Defined Materials

You can build shared libraries on Windows or Linux. Refer to Build External Libraries for more information.