udfGetElmData()

Return the element data at the quadrature point.

Syntax

data = udfGetElmData( udfHd, dataName ) ;

Type

User Defined Element

Parameters

udfHd
The opaque handle (pointer) which was passed to the user function.
dataName (integer)
Symbolic name of the requested data.
UDF_ELM_VELOCITY
Velocity.
UDF_ELM_ACCELERATION
Acceleration.
UDF_ELM_PRESSURE
Pressure.
UDF_ELM_TEMPERATURE
Temperature.
UDF_ELM_DENSITY
Density.
UDF_ELM_SPECIES
Species.
UDF_ELM_VISCOSITY
Viscosity.
UDF_ELM_EDDY_VISCOSITY
Turbulence eddy viscosity.
UDF_ELM_KINETIC_ENERGY
Turbulence kinetic energy.
UDF_ELM_EDDY_FREQUENCY
Turbulence eddy frequency.
UDF_ELM_GRAD_VELOCITY
Gradient of velocity.
UDF_ELM_GRAD_PRESSURE
Gradient of pressure.
UDF_ELM_GRAD_TEMPERATURE
Gradient of temperature.
UDF_ELM_GRAD_SPECIES
Gradient of species.
UDF_ELM_MESH_DISPLACEMENT
Mesh displacement.
UDF_ELM_MESH_VELOCITY
Mesh velocity.
UDF_ELM_MESH_GRAD_DISPLACEMENT
Gradient of mesh displacement.
UDF_ELM_MESH_GRAD_VELOCITY
Gradient of mesh velocity.
UDF_ELM_TURBULENCE_Y
Distance to nearest turbulence wall.
UDF_ELM_TURBULENCE_YPLUS
Turbulence y+ based on distance to nearest turbulence wall and shear at that wall.
UDF_ELM_VISCOELASTIC
Viscoelastic.

Return Value

data (Real*)
Pointer to one, two, or three dimensional real array of the requested data. The dimensions of the array depend on dataName as follows. If the third (slowest) dimension of the array is equal to one, then the array may be treated as two dimensional. If the second dimension is likewise one, then the array is one dimensional. The x, y, z components of the gradient for gradient quantities are always contained in the last nontrivial dimension.
Table 1.
dataName First Dimension Second Dimension Third Dimension
UDF_ELM_VELOCITY nItems 3 1
UDF_ELM_ACCLERATION nItems 3 1
UDF_ELM_PRESSURE nItems 1 1
UDF_ELM_TEMPERATURE nItems 1 1
UDF_ELM_DENSITY nItems 1 1
UDF_ELM_SPECIES nItems udfGetNumSpecs() 1
UDF_ELM_VISCOSITY nItems 1 1
UDF_ELM_EDDY_VISCOSITY nItems 1 1
UDF_ELM_KINETIC_ENERGY nItems 1 1
UDF_ELM_EDDY_FREQUENCY nItems 1 1
UDF_ELM_GRAD_VELOCITY nItems 3 3
UDF_ELM_GRAD_PRESSURE nItems 3 1
UDF_ELM_GRAD_TEMPERATURE nItems 3 1
UDF_ELM_GRAD_SPECIES nItems udfGetNumSpecs() 3
UDF_ELM_MESH_DISPLACEMENT nItems 3 1
UDF_ELM_MESH_VELOCITY nItems 3 1
UDF_ELM_MESH_GRAD_DISPLACEMENT nItems 3 3
UDF_ELM_MESH_GRAD_VELOCITY nItems 3 3
UDF_ELM_TURBULENCE_Y nItems 1 1
UDF_ELM_TURBULENCE_YPLUS nItems 1 1
UDF_ELM_VISCOELASTIC nItems 6 1

Description

This routine returns the requested solution data. For example,
Real* data ;
Real* grad_x ;
Real* grad_y ;
Real* grad_z ;
Real* s_x ;
Real* s_y ;
Real* s_z ;
Real u, v, w ;
Real u_x, v_x, w_x, u_y, v_y, w_y, u_z, v_z, w_z ;
Real spec_x, spec_y, spec_z ;
Integer elem, nSpecs, specId ;
...
data = udfGetElmData( udfHd, UDF_ELM_VELOCITY ) ;
for ( elem = 0 ; elem < nItems ; elem++ ) {
  u = data[0*nItems+elem] ;
  v = data[1*nItems+elem] ;
  w = data[2*nItems+elem] ;
  ...
}
...
data = udfGetElmData( udfHd, UDF_ELM_GRAD_VELOCITY ) ;
for ( elem = 0 ; elem < nItems ; elem++ ) {
   u_x = data[0*nItems+elem] ;
   v_x = data[1*nItems+elem] ;
   w_x = data[2*nItems+elem] ;
   u_y = data[3*nItems+elem] ;
   v_y = data[4*nItems+elem] ;
   w_y = data[5*nItems+elem] ;
   u_z = data[6*nItems+elem] ;
   v_z = data[7*nItems+elem] ;
   w_z = data[8*nItems+elem] ;
   ...
}
...
data = udfGetElmData( udfHd, UDF_ELM_GRAD_SPECIES ) ;
nSpecs = udfGetNumSpecs( udfHd ) ;
for ( specId = 0 ; specId < nSpecs ; specId++ ) {
   for ( elem = 0 ; elem < nItems ; elem++ ) {
     /* 3 components of gradient of species */
     spec_x = data[nItems*(0*nSpecs+specId)+elem] ;
     spec_y = data[nItems*(1*nSpecs+specId)+elem] ;
     spec_z = data[nItems*(2*nSpecs+specId)+elem] ;
     ...
   }
}
/* Alternative coding of the above. */
/* grad_? are pointers to 2-D arrays, and */
/* s_? are pointers to 1-D arrays. */
data = udfGetElmData( udfHd, UDF_ELM_GRAD_SPECIES ) ;
nSpecs = udfGetNumSpecs( udfHd ) ;
grad_x = &data[0*nItems*nSpecs] ;
grad_y = &data[1*nItems*nSpecs] ;
grad_z = &data[2*nItems*nSpecs] ;
for ( specId = 0 ; specId < nSpecs ; specId++ ) {
   s_x = &grad_x[nItems*specId] ;
   s_y = &grad_y[nItems*specId] ;
   s_z = &grad_z[nItems*specId] ;
   for ( elem = 0 ; elem < nItems ; elem++ ) {
      /* 3 components of gradient of species */
      spec_x = s_x[elem] ;
      spec_y = s_y[elem] ;
      spec_z = s_z[elem] ;
      ...
   }
}

The quantities UDF_ELM_TURBULENCE_Y and UDF_ELM_TURBULENCE_YPLUS are based on the distance to the nearest turbulence wall. These are defined by TURBULENCE_WALL and SIMPLE_BOUNDARY_CONDITION type=wall commands. UDF_ELM_TURBULENCE_YPLUS also uses the shear at these walls. The data for these two quantities are current (computed at the end of each stagger) while the other quantities are computed only at the end of each time step.

Errors

  • This routine expects a valid udfHd.
  • This routine may only be called within a Body Force, Material Model or Component Model user function.
  • dataName must be one of the values given above.
  • The problem must contain the equation associated with the requested data.