mus_interpolate_linear_module Module

Linear Interpolation of flow quantities between different grid levels

Interpolation

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

Workflow

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


Uses

Used by

  • module~~mus_interpolate_linear_module~~UsedByGraph module~mus_interpolate_linear_module mus_interpolate_linear_module module~mus_interpolate_module mus_interpolate_module module~mus_interpolate_module->module~mus_interpolate_linear_module module~mus_aux_module mus_aux_module module~mus_aux_module->module~mus_interpolate_module module~mus_hvs_aux_module mus_hvs_aux_module module~mus_hvs_aux_module->module~mus_interpolate_module module~mus_construction_module mus_construction_module module~mus_construction_module->module~mus_interpolate_module module~mus_dynloadbal_module mus_dynLoadBal_module module~mus_dynloadbal_module->module~mus_interpolate_module module~mus_dynloadbal_module->module~mus_construction_module module~mus_control_module mus_control_module module~mus_control_module->module~mus_aux_module module~mus_hvs_construction_module mus_hvs_construction_module module~mus_hvs_construction_module->module~mus_construction_module module~mus_program_module mus_program_module module~mus_program_module->module~mus_aux_module module~mus_program_module->module~mus_construction_module module~mus_program_module->module~mus_dynloadbal_module module~mus_program_module->module~mus_control_module program~mus_harvesting mus_harvesting program~mus_harvesting->module~mus_hvs_aux_module program~mus_harvesting->module~mus_construction_module program~mus_harvesting->module~mus_hvs_construction_module program~musubi musubi program~musubi->module~mus_aux_module program~musubi->module~mus_control_module program~musubi->module~mus_program_module

Contents


Functions

private pure function mus_interpolate_linear2D_leastSq(srcMom, targetCoord, LSFmat, nSources, nVals) result(phi)

Bilinear interpolation for a vector quantity phi

Arguments

TypeIntentOptionalAttributesName
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

Return Value real(kind=rk)(nVals)

interpolated value

private pure function mus_interpolate_linear3D_leastSq(srcMom, targetCoord, LSFmat, nSources, nVals) result(phi)

Trilinear interpolation for a vector quantity phi Each phi corresponds to each moment

Arguments

TypeIntentOptionalAttributesName
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

Return Value real(kind=rk)(nVals)

interpolated value


Subroutines

public subroutine fillArbiFinerGhostsFromMe_linear(method, tLevelDesc, level, stencil, sVal, snSize, tVal, tnSize, nTargets, targetList, nScalars)

Interpolate auxiliary field from coarse source to fine target

Read more…

Arguments

TypeIntentOptionalAttributesName
class(mus_interpolation_method_type), intent(in) :: 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

integer, intent(in) :: snSize
real(kind=rk), intent(inout) :: tVal(:)

State vector of TARGET GHOST elements

integer, intent(in) :: tnSize
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

public subroutine fillArbiFinerGhostsFromMe_linear2D(method, tLevelDesc, level, stencil, sVal, snSize, tVal, tnSize, nTargets, targetList, nScalars)

Interpolate auxiliary field from coarse source to fine target

Read more…

Arguments

TypeIntentOptionalAttributesName
class(mus_interpolation_method_type), intent(in) :: 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

integer, intent(in) :: snSize
real(kind=rk), intent(inout) :: tVal(:)

State vector of TARGET GHOST elements

integer, intent(in) :: tnSize
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

public subroutine fillFinerGhostsFromMe_linear(method, fieldProp, tLevelDesc, level, sState, snSize, tState, tnSize, tAuxField, layout, nTargets, targetList, physics, time, varSys, derVarPos)

Fill fine ghost from coarse fluid by linear least square fit interpolation. 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 3D acoustic linear interpolation.

Read more…

Arguments

TypeIntentOptionalAttributesName
class(mus_interpolation_method_type), intent(in) :: 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) :: snSize
real(kind=rk), intent(inout) :: tState(:)

State vector of TARGET GHOST elements

integer, intent(in) :: tnSize
real(kind=rk), intent(inout) :: tAuxField(:)

AuxField variable to fill on target GHOST elements

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

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

public subroutine fillFinerGhostsFromMe_linearLES(method, fieldProp, tLevelDesc, level, sState, snSize, tState, tnSize, tAuxField, layout, nTargets, targetList, physics, time, varSys, derVarPos)

Fill fine ghost from coarse fluid by linear least square fit interpolation. 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 3D acoustic linear interpolation.

Read more…

Arguments

TypeIntentOptionalAttributesName
class(mus_interpolation_method_type), intent(in) :: 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) :: snSize
real(kind=rk), intent(inout) :: tState(:)

State vector of TARGET GHOST elements

integer, intent(in) :: tnSize
real(kind=rk), intent(inout) :: tAuxField(:)

AuxField variable to fill on target GHOST elements

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

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

public subroutine fillFinerGhostsFromMe_linearIncomp(method, fieldProp, tLevelDesc, level, sState, snSize, tState, tnSize, tAuxField, layout, nTargets, targetList, physics, time, varSys, derVarPos)

Fill fine ghost from coarse fluid by linear interpolation: 1. Compute moments for all source elements, save in momBuf 2. For each target, interpolate moments (10 moms for 3D; 6 moms for 2D) 3. Store target auxilary field 4. Get viscosity on target element and compute source and target omega 5. Get nonEq scaling factor depeding on scheme layout and relaxation 6. Convert moments to PDF 7. Calculate target: Eq + Scale * nonEquilibrium This routine is used by 3D acoustic linear interpolation for incompressible model.

Read more…

Arguments

TypeIntentOptionalAttributesName
class(mus_interpolation_method_type), intent(in) :: 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) :: snSize
real(kind=rk), intent(inout) :: tState(:)

State vector of TARGET GHOST elements

integer, intent(in) :: tnSize
real(kind=rk), intent(inout) :: tAuxField(:)

AuxField variable to fill on target GHOST elements

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

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

public subroutine fillFinerGhostsFromMe_linearIncompLES(method, fieldProp, tLevelDesc, level, sState, snSize, tState, tnSize, tAuxField, layout, nTargets, targetList, physics, time, varSys, derVarPos)

Fill fine ghost from coarse fluid by linear interpolation. 1. Compute moments for all source elements, save in momBuf 2. For each target, interpolate moments (10 moms for 3D; 6 moms for 2D) 3. Store target auxilary field 4. Compute viscosity on target element and compute source and target omega 5. Get nonEq scaling factor depeding on scheme layout and relaxation 6. Calculate Equilibrium and nonEquilibrium 7. calculate target: Eq + Scale * nonEquilibrium This routine is used by 3D acoustic linear interpolation for incompressible LES model.

Read more…

Arguments

TypeIntentOptionalAttributesName
class(mus_interpolation_method_type), intent(in) :: 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) :: snSize
real(kind=rk), intent(inout) :: tState(:)

State vector of TARGET GHOST elements

integer, intent(in) :: tnSize
real(kind=rk), intent(inout) :: tAuxField(:)

AuxField variable to fill on target GHOST elements

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

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

public subroutine fillFinerGhostsFromMe_linear2D(method, fieldProp, tLevelDesc, level, sState, snSize, tState, tnSize, tAuxField, layout, nTargets, targetList, physics, time, varSys, derVarPos)

Fill fine ghost from coarse fluid by linear interpolation. 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 3D acoustic linear interpolation.

Read more…

Arguments

TypeIntentOptionalAttributesName
class(mus_interpolation_method_type), intent(in) :: 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) :: snSize
real(kind=rk), intent(inout) :: tState(:)

State vector of TARGET GHOST elements

integer, intent(in) :: tnSize
real(kind=rk), intent(inout) :: tAuxField(:)

AuxField variable to fill on target GHOST elements

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

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

public subroutine fillFinerGhostsFromMe_linear2DIncomp(method, fieldProp, tLevelDesc, level, sState, snSize, tState, tnSize, tAuxField, layout, nTargets, targetList, physics, time, varSys, derVarPos)

Fill fine ghost from coarse fluid by linear interpolation. 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 3D acoustic linear interpolation for incompressible model.

Read more…

Arguments

TypeIntentOptionalAttributesName
class(mus_interpolation_method_type), intent(in) :: 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) :: snSize
real(kind=rk), intent(inout) :: tState(:)

State vector of TARGET GHOST elements

integer, intent(in) :: tnSize
real(kind=rk), intent(inout) :: tAuxField(:)

AuxField variable to fill on target GHOST elements

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

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