Linear Interpolation of flow quantities between different grid levels
The routines defined here, fill up the ghost elements with valid data. Ghost elements are employed at grid level interfaces to provide valid pdf values to the neighboring fluid elements. This way, the solvers can act on elements of the same size only, treating the levels successively. Target elements are the ghost elements, which have to be filled with valid values. Source elements are the fluid elements from other levels, from where to take the input values for the interpolation. The target ghost elements on the target level have corresponding source fluid elements on the source level.
tem_topology_module For a detailed description of the grid
Each interpolation routine acts on a list of ghost elements. This list contains pointers to the position in the total list. For each of these ghost elements, the source elements are identified. Before that, the sourceLevel is identified. However, the code is restricted to work with a level jump of only one level, so the sourceLevel is:\n for fillMyGhostsFromFiner: sourceLevel = targetLevel + 1 for fillFinerGhostsFromMe: sourceLevel = targetLevel - 1
For an overview over implemented interpolation methods, see Interpolation methods
Bilinear interpolation for a vector quantity phi
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
real(kind=rk), | intent(in) | :: | srcMom(nVals,nSources) | source values of the momentum on the square corners |
||
real(kind=rk), | intent(in) | :: | targetCoord(3) | interpolation location within the square |
||
type(tem_matrix_type), | intent(in) | :: | LSFmat | matrix for least square fit |
||
integer, | intent(in) | :: | nSources | Number of source elements |
||
integer, | intent(in) | :: | nVals | number of quantities to interpolation |
interpolated value
Trilinear interpolation for a vector quantity phi Each phi corresponds to each moment
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
real(kind=rk), | intent(in) | :: | srcMom(nVals,nSources) | source values of the momentum on the square corners |
||
real(kind=rk), | intent(in) | :: | targetCoord(3) | interpolation location within the square |
||
type(tem_matrix_type), | intent(in) | :: | LSFmat | matrix for least square fit |
||
integer, | intent(in) | :: | nSources | Number of source elements |
||
integer, | intent(in) | :: | nVals | number of quantities to interpolation |
interpolated value
Interpolate auxiliary field from coarse source to fine target
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(mus_interpolation_method_type), | intent(inout) | :: | method | |||
type(tem_levelDesc_type), | intent(in) | :: | tLevelDesc | level descriptor on target level |
||
integer, | intent(in) | :: | level | my refinement level |
||
type(tem_stencilHeader_type), | intent(in) | :: | stencil | stencil header |
||
real(kind=rk), | intent(in) | :: | sVal(:) | State vector of SOURCE FLUID elements |
||
real(kind=rk), | intent(inout) | :: | tVal(:) | State vector of TARGET GHOST elements |
||
integer, | intent(in) | :: | nTargets | List of target elements ( their position in depSource list ) |
||
integer, | intent(in) | :: | targetList(nTargets) | |||
integer, | intent(in) | :: | nScalars | number of scalars to interpolate |
Interpolate auxiliary field from coarse source to fine target
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(mus_interpolation_method_type), | intent(inout) | :: | method | |||
type(tem_levelDesc_type), | intent(in) | :: | tLevelDesc | level descriptor on target level |
||
integer, | intent(in) | :: | level | my refinement level |
||
type(tem_stencilHeader_type), | intent(in) | :: | stencil | stencil header |
||
real(kind=rk), | intent(in) | :: | sVal(:) | State vector of SOURCE FLUID elements |
||
real(kind=rk), | intent(inout) | :: | tVal(:) | State vector of TARGET GHOST elements |
||
integer, | intent(in) | :: | nTargets | List of target elements ( their position in depSource list ) |
||
integer, | intent(in) | :: | targetList(nTargets) | |||
integer, | intent(in) | :: | nScalars | number of scalars to interpolate |
Fill fine ghost from coarse fluid by linear interpolation for D2Q9 stencil. 1. Compute moments for all source elements, save in momBuf 2. For each target, interpolate moments (den, vel, tau) (10 moments for 3D and 6 moments for 2D) 3. calculate fEq and use it to calculate high order moments 4. convert moments to PDF This routine is used by acoustic linear interpolation.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(mus_interpolation_method_type), | intent(inout) | :: | method | |||
type(mus_field_prop_type), | intent(in), | target | :: | fieldProp(:) | Array of field properties (fluid or species) |
|
type(tem_levelDesc_type), | intent(in) | :: | tLevelDesc | level descriptor on target level |
||
integer, | intent(in) | :: | level | my refinement level |
||
real(kind=rk), | intent(in) | :: | sState(:) | State vector of SOURCE FLUID elements |
||
integer, | intent(in) | :: | sNeigh(:) | |||
integer, | intent(in) | :: | snSize | |||
real(kind=rk), | intent(inout) | :: | sAuxField(:) | AuxField variable to read rho and vel from source elements |
||
real(kind=rk), | intent(inout) | :: | tState(:) | State vector of TARGET GHOST elements |
||
integer, | intent(in) | :: | tNeigh(:) | |||
integer, | intent(in) | :: | tnSize | |||
type(mus_scheme_layout_type), | intent(in) | :: | layout | the layout used |
||
integer, | intent(in) | :: | nTargets | List of target elements ( their position in depSource list ) |
||
integer, | intent(in) | :: | targetList(nTargets) | |||
type(mus_physics_type), | intent(in) | :: | physics | physics type to convert lattice to physics SI unit and vice versa Todo: This can be replaced by scale factor by level |
||
type(tem_time_type), | intent(in) | :: | time | time required to compute viscosity on target element barycenter |
||
type(tem_varSys_type), | intent(in) | :: | varSys | scheme variable system |
||
type(mus_derVarPos_type), | intent(in) | :: | derVarPos(:) | position of all derive variable in varSys for all fields |
Fill fine ghost from coarse fluid by linear interpolation for D2Q9 stencil. 1. Compute moments for all source elements, save in momBuf 2. For each target, interpolate moments (den, vel, tau) (10 moments for 3D and 6 moments for 2D) 3. calculate fEq and use it to calculate high order moments 4. convert moments to PDF This routine is used by acoustic linear interpolation.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(mus_interpolation_method_type), | intent(inout) | :: | method | |||
type(mus_field_prop_type), | intent(in), | target | :: | fieldProp(:) | Array of field properties (fluid or species) |
|
type(tem_levelDesc_type), | intent(in) | :: | tLevelDesc | level descriptor on target level |
||
integer, | intent(in) | :: | level | my refinement level |
||
real(kind=rk), | intent(in) | :: | sState(:) | State vector of SOURCE FLUID elements |
||
integer, | intent(in) | :: | sNeigh(:) | |||
integer, | intent(in) | :: | snSize | |||
real(kind=rk), | intent(inout) | :: | sAuxField(:) | AuxField variable to read rho and vel from source elements |
||
real(kind=rk), | intent(inout) | :: | tState(:) | State vector of TARGET GHOST elements |
||
integer, | intent(in) | :: | tNeigh(:) | |||
integer, | intent(in) | :: | tnSize | |||
type(mus_scheme_layout_type), | intent(in) | :: | layout | the layout used |
||
integer, | intent(in) | :: | nTargets | List of target elements ( their position in depSource list ) |
||
integer, | intent(in) | :: | targetList(nTargets) | |||
type(mus_physics_type), | intent(in) | :: | physics | physics type to convert lattice to physics SI unit and vice versa Todo: This can be replaced by scale factor by level |
||
type(tem_time_type), | intent(in) | :: | time | time required to compute viscosity on target element barycenter |
||
type(tem_varSys_type), | intent(in) | :: | varSys | scheme variable system |
||
type(mus_derVarPos_type), | intent(in) | :: | derVarPos(:) | position of all derive variable in varSys for all fields |
Fill fine ghost from coarse fluid by linear interpolation for D2Q9 stencil. 1. Compute moments for all source elements, save in momBuf 2. For each target, interpolate moments (den, vel, tau) (10 moments for 3D and 6 moments for 2D) 3. calculate fEq and use it to calculate high order moments 4. convert moments to PDF This routine is used by acoustic linear interpolation.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(mus_interpolation_method_type), | intent(inout) | :: | method | |||
type(mus_field_prop_type), | intent(in), | target | :: | fieldProp(:) | Array of field properties (fluid or species) |
|
type(tem_levelDesc_type), | intent(in) | :: | tLevelDesc | level descriptor on target level |
||
integer, | intent(in) | :: | level | my refinement level |
||
real(kind=rk), | intent(in) | :: | sState(:) | State vector of SOURCE FLUID elements |
||
integer, | intent(in) | :: | sNeigh(:) | |||
integer, | intent(in) | :: | snSize | |||
real(kind=rk), | intent(inout) | :: | sAuxField(:) | AuxField variable to read rho and vel from source elements |
||
real(kind=rk), | intent(inout) | :: | tState(:) | State vector of TARGET GHOST elements |
||
integer, | intent(in) | :: | tNeigh(:) | |||
integer, | intent(in) | :: | tnSize | |||
type(mus_scheme_layout_type), | intent(in) | :: | layout | the layout used |
||
integer, | intent(in) | :: | nTargets | List of target elements ( their position in depSource list ) |
||
integer, | intent(in) | :: | targetList(nTargets) | |||
type(mus_physics_type), | intent(in) | :: | physics | physics type to convert lattice to physics SI unit and vice versa Todo: This can be replaced by scale factor by level |
||
type(tem_time_type), | intent(in) | :: | time | time required to compute viscosity on target element barycenter |
||
type(tem_varSys_type), | intent(in) | :: | varSys | scheme variable system |
||
type(mus_derVarPos_type), | intent(in) | :: | derVarPos(:) | position of all derive variable in varSys for all fields |
Fill fine ghost from coarse fluid by linear interpolation for D2Q9 stencil. 1. Compute moments for all source elements, save in momBuf 2. For each target, interpolate moments (den, vel, tau) (10 moments for 3D and 6 moments for 2D) 3. calculate fEq and use it to calculate high order moments 4. convert moments to PDF This routine is used by acoustic linear interpolation.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(mus_interpolation_method_type), | intent(inout) | :: | method | |||
type(mus_field_prop_type), | intent(in), | target | :: | fieldProp(:) | Array of field properties (fluid or species) |
|
type(tem_levelDesc_type), | intent(in) | :: | tLevelDesc | level descriptor on target level |
||
integer, | intent(in) | :: | level | my refinement level |
||
real(kind=rk), | intent(in) | :: | sState(:) | State vector of SOURCE FLUID elements |
||
integer, | intent(in) | :: | sNeigh(:) | |||
integer, | intent(in) | :: | snSize | |||
real(kind=rk), | intent(inout) | :: | sAuxField(:) | AuxField variable to read rho and vel from source elements |
||
real(kind=rk), | intent(inout) | :: | tState(:) | State vector of TARGET GHOST elements |
||
integer, | intent(in) | :: | tNeigh(:) | |||
integer, | intent(in) | :: | tnSize | |||
type(mus_scheme_layout_type), | intent(in) | :: | layout | the layout used |
||
integer, | intent(in) | :: | nTargets | List of target elements ( their position in depSource list ) |
||
integer, | intent(in) | :: | targetList(nTargets) | |||
type(mus_physics_type), | intent(in) | :: | physics | physics type to convert lattice to physics SI unit and vice versa Todo: This can be replaced by scale factor by level |
||
type(tem_time_type), | intent(in) | :: | time | time required to compute viscosity on target element barycenter |
||
type(tem_varSys_type), | intent(in) | :: | varSys | scheme variable system |
||
type(mus_derVarPos_type), | intent(in) | :: | derVarPos(:) | position of all derive variable in varSys for all fields |
Fill fine ghost from coarse fluid by linear interpolation for D2Q9 stencil. 1. Compute moments for all source elements, save in momBuf 2. For each target, interpolate moments (den, vel, tau) (10 moments for 3D and 6 moments for 2D) 3. calculate fEq and use it to calculate high order moments 4. convert moments to PDF This routine is used by acoustic linear interpolation.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(mus_interpolation_method_type), | intent(inout) | :: | method | |||
type(mus_field_prop_type), | intent(in), | target | :: | fieldProp(:) | Array of field properties (fluid or species) |
|
type(tem_levelDesc_type), | intent(in) | :: | tLevelDesc | level descriptor on target level |
||
integer, | intent(in) | :: | level | my refinement level |
||
real(kind=rk), | intent(in) | :: | sState(:) | State vector of SOURCE FLUID elements |
||
integer, | intent(in) | :: | sNeigh(:) | |||
integer, | intent(in) | :: | snSize | |||
real(kind=rk), | intent(inout) | :: | sAuxField(:) | AuxField variable to read rho and vel from source elements |
||
real(kind=rk), | intent(inout) | :: | tState(:) | State vector of TARGET GHOST elements |
||
integer, | intent(in) | :: | tNeigh(:) | |||
integer, | intent(in) | :: | tnSize | |||
type(mus_scheme_layout_type), | intent(in) | :: | layout | the layout used |
||
integer, | intent(in) | :: | nTargets | List of target elements ( their position in depSource list ) |
||
integer, | intent(in) | :: | targetList(nTargets) | |||
type(mus_physics_type), | intent(in) | :: | physics | physics type to convert lattice to physics SI unit and vice versa Todo: This can be replaced by scale factor by level |
||
type(tem_time_type), | intent(in) | :: | time | time required to compute viscosity on target element barycenter |
||
type(tem_varSys_type), | intent(in) | :: | varSys | scheme variable system |
||
type(mus_derVarPos_type), | intent(in) | :: | derVarPos(:) | position of all derive variable in varSys for all fields |
Fill fine ghost from coarse fluid by linear interpolation for D2Q9 stencil. 1. Compute moments for all source elements, save in momBuf 2. For each target, interpolate moments (den, vel, tau) (10 moments for 3D and 6 moments for 2D) 3. calculate fEq and use it to calculate high order moments 4. convert moments to PDF This routine is used by acoustic linear interpolation.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(mus_interpolation_method_type), | intent(inout) | :: | method | |||
type(mus_field_prop_type), | intent(in), | target | :: | fieldProp(:) | Array of field properties (fluid or species) |
|
type(tem_levelDesc_type), | intent(in) | :: | tLevelDesc | level descriptor on target level |
||
integer, | intent(in) | :: | level | my refinement level |
||
real(kind=rk), | intent(in) | :: | sState(:) | State vector of SOURCE FLUID elements |
||
integer, | intent(in) | :: | sNeigh(:) | |||
integer, | intent(in) | :: | snSize | |||
real(kind=rk), | intent(inout) | :: | sAuxField(:) | AuxField variable to read rho and vel from source elements |
||
real(kind=rk), | intent(inout) | :: | tState(:) | State vector of TARGET GHOST elements |
||
integer, | intent(in) | :: | tNeigh(:) | |||
integer, | intent(in) | :: | tnSize | |||
type(mus_scheme_layout_type), | intent(in) | :: | layout | the layout used |
||
integer, | intent(in) | :: | nTargets | List of target elements ( their position in depSource list ) |
||
integer, | intent(in) | :: | targetList(nTargets) | |||
type(mus_physics_type), | intent(in) | :: | physics | physics type to convert lattice to physics SI unit and vice versa Todo: This can be replaced by scale factor by level |
||
type(tem_time_type), | intent(in) | :: | time | time required to compute viscosity on target element barycenter |
||
type(tem_varSys_type), | intent(in) | :: | varSys | scheme variable system |
||
type(mus_derVarPos_type), | intent(in) | :: | derVarPos(:) | position of all derive variable in varSys for all fields |