mus_interpolate_d2q9_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


Contents


Variables

TypeVisibilityAttributesNameInitial
integer, private, parameter:: QQ =9
real(kind=rk), private :: sourceP(QQ)
real(kind=rk), private :: sourceV(2,QQ)
real(kind=rk), private :: sourceS(3,QQ)
real(kind=rk), private :: weight(QQ)

Functions

public pure function mus_interpolate_Compact2d(vel, S, cx, cy) result(phi)

Given the velocity and strain rate (S) at four corner, interpolate the velocity at a given position (cx, cy) vel and S contain values at the following position: [0,0], [1,0], [0,1], [1,1] Checked!

Arguments

TypeIntentOptionalAttributesName
real(kind=rk), intent(in) :: vel(2,4)

velocity (Ux, Uy) of 4 source elements

real(kind=rk), intent(in) :: S(3,4)

Strain rate (Sxx,Syy,Sxy) of 4 source elements

real(kind=rk), intent(in) :: cx

interpolation location within the square it should be in the range of [0,1]

real(kind=rk), intent(in) :: cy

interpolation location within the square it should be in the range of [0,1]

Return Value real(kind=rk)(2)

interpolated velocity

private pure function getStrain(f, rho, vel, omega, cxDir) result(S)

Arguments

TypeIntentOptionalAttributesName
real(kind=rk), intent(in) :: f(QQ)

pdf array ( post-collision value )

real(kind=rk), intent(in) :: rho

pdf array ( post-collision value )

real(kind=rk), intent(in) :: vel(2)

pdf array ( post-collision value )

real(kind=rk), intent(in) :: omega

relaxation parameter

integer, intent(in) :: cxDir(3,QQ)

stencil layout

Return Value real(kind=rk)(2,2)

output array: strain rate tensor

private pure function getNEq(S, omega, cxDirRK, weight) result(nEq)

Arguments

TypeIntentOptionalAttributesName
real(kind=rk), intent(in) :: S(2,2)

Strain rate tensor. It is a symmetric 2x2 matrix

real(kind=rk), intent(in) :: omega
real(kind=rk), intent(in) :: cxDirRK(3,QQ)
real(kind=rk), intent(in) :: weight(QQ)

Return Value real(kind=rk)(QQ)


Subroutines

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

Fill Finer ghost from Coarser fluid by 2D 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 fillFiner_quadratic2D_diffusive(method, fieldProp, tLevelDesc, level, sState, snSize, tState, tnSize, tAuxField, layout, nTargets, targetList, physics, time, varSys, derVarPos)

Fill Finer ghost from Coarser fluid by 2D quadratic interpolation This routine serves as a HIGH order interpolation, which means every ghost should have 9 source elements. It only works for D2Q9.

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_quadraticD2Q9(method, fieldProp, tLevelDesc, level, sState, snSize, tState, tnSize, tAuxField, layout, nTargets, targetList, physics, time, varSys, derVarPos)

Fill fine ghost from coarse fluid by quadratic 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 quadratic 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_quadraticD2Q9Incomp(method, fieldProp, tLevelDesc, level, sState, snSize, tState, tnSize, tAuxField, layout, nTargets, targetList, physics, time, varSys, derVarPos)

Fill fine ghost from coarse fluid by quadratic 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 quadratic interpolation for incompressible.

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 fillCoarser_compact2DIncomp(method, fieldProp, tLevelDesc, level, sState, snSize, tState, tnSize, tAuxField, layout, nTargets, targetList, physics, time, varSys, derVarPos)

No comment yet!

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 fillFiner_compact2DIncomp(method, fieldProp, tLevelDesc, level, sState, snSize, tState, tnSize, tAuxField, layout, nTargets, targetList, physics, time, varSys, derVarPos)

Fill Finer ghost from Coarser fluid by 2D 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 fillFiner_compact2D(method, fieldProp, tLevelDesc, level, sState, snSize, tState, tnSize, tAuxField, layout, nTargets, targetList, physics, time, varSys, derVarPos)

Fill Finer ghost from Coarser fluid by 2D 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