mus_gradData_module Module

This module contains data types, function and routines for gradient computation.

author: Kannan Masilamani


Uses

Used by

  • module~~mus_graddata_module~~UsedByGraph module~mus_graddata_module mus_gradData_module module~mus_d3q27_module mus_d3q27_module module~mus_d3q27_module->module~mus_graddata_module module~mus_d2q9_module mus_d2q9_module module~mus_d2q9_module->module~mus_graddata_module module~mus_vreman_module mus_Vreman_module module~mus_vreman_module->module~mus_graddata_module module~mus_scheme_type_module mus_scheme_type_module module~mus_scheme_type_module->module~mus_graddata_module module~mus_relaxationparam_module mus_relaxationParam_module module~mus_relaxationparam_module->module~mus_graddata_module module~mus_d3q19_module mus_d3q19_module module~mus_d3q19_module->module~mus_graddata_module module~mus_turb_viscosity_module mus_turb_viscosity_module module~mus_turb_viscosity_module->module~mus_graddata_module module~mus_hvs_aux_module mus_hvs_aux_module module~mus_hvs_aux_module->module~mus_graddata_module module~mus_interpolate_tools_module mus_interpolate_tools_module module~mus_interpolate_tools_module->module~mus_graddata_module module~mus_compute_cumulant_module mus_compute_cumulant_module module~mus_compute_cumulant_module->module~mus_graddata_module module~mus_auxfieldvar_module mus_auxFieldVar_module module~mus_auxfieldvar_module->module~mus_graddata_module module~mus_smagorinsky_module mus_Smagorinsky_module module~mus_smagorinsky_module->module~mus_graddata_module module~mus_dynloadbal_module mus_dynLoadBal_module module~mus_dynloadbal_module->module~mus_graddata_module module~mus_aux_module mus_aux_module module~mus_aux_module->module~mus_graddata_module module~mus_scheme_module mus_scheme_module module~mus_scheme_module->module~mus_graddata_module module~mus_turbulence_module mus_turbulence_module module~mus_turbulence_module->module~mus_graddata_module module~mus_wale_module mus_WALE_module module~mus_wale_module->module~mus_graddata_module

Contents


Abstract Interfaces

abstract interface

  • public pure function getGradU(auxField, gradData, velPos, nAuxScalars, nDims, nSolve, elemOffset) result(gradU)

    function pointers to obtain full gradient of U along all directions

    Arguments

    TypeIntentOptionalAttributesName
    real(kind=rk), intent(in) :: auxField(:)

    auxField

    type(mus_gradData_type), intent(in) :: gradData

    gradient data

    integer, intent(in) :: velPos(3)

    Position of velocity field in auxField

    integer, intent(in) :: nAuxScalars

    Number of scalars in auxField array

    integer, intent(in) :: nDims

    Dimensions

    integer, intent(in) :: nSolve

    Number of element to solve in this level

    integer, intent(in) :: elemOffset

    Offset for elements when computing chunkwise

    Return Value real(kind=rk)(nDims,nDims,nSolve)

    output: gradient of velocity

abstract interface

  • public pure function getGradXXU(auxField, gradData, velPos, nAuxScalars, nDims, nSolve, elemOffset) result(gradXXU)

    function pointers to obtain full gradient of U along main directions derived two times d^2U/dx^2

    Arguments

    TypeIntentOptionalAttributesName
    real(kind=rk), intent(in) :: auxField(:)

    auxField

    type(mus_gradData_type), intent(in) :: gradData

    gradient data

    integer, intent(in) :: velPos(3)

    Position of velocity field in auxField

    integer, intent(in) :: nAuxScalars

    Number of scalars in auxField array

    integer, intent(in) :: nDims

    Dimensions

    integer, intent(in) :: nSolve

    Number of element to solve in this level

    integer, intent(in) :: elemOffset

    Offset for elements when computing chunkwise

    Return Value real(kind=rk)(nDims,nSolve)

    output: gradient of velocity:

abstract interface

  • public pure function getGradRhoU3(auxField, gradData, velPos, densPos, nAuxScalars, nDims, nSolve, elemOffset) result(gradRhoU3)

    function pointers to obtain grad Rho * U^3 along main directions

    Arguments

    TypeIntentOptionalAttributesName
    real(kind=rk), intent(in) :: auxField(:)

    auxField

    type(mus_gradData_type), intent(in) :: gradData

    gradient data

    integer, intent(in) :: velPos(3)

    Position of velocity field in auxField

    integer, intent(in) :: densPos

    Position of velocity field in auxField

    integer, intent(in) :: nAuxScalars

    Number of scalars in auxField array

    integer, intent(in) :: nDims

    Dimensions

    integer, intent(in) :: nSolve

    Number of element to solve in this level

    integer, intent(in) :: elemOffset

    Offset for elements when computing chunkwise

    Return Value real(kind=rk)(nDims,nSolve)

    output: gradient of velocity

abstract interface

  • public pure function getGradRhoUVZ(auxField, gradData, velPos, densPos, nDims, nAuxScalars, nSolve, elemOffset) result(gradRhoUVZ)

    function pointers to obtain grad Rho * u_x * u_y * u_z along main directions

    Arguments

    TypeIntentOptionalAttributesName
    real(kind=rk), intent(in) :: auxField(:)

    auxField

    type(mus_gradData_type), intent(in) :: gradData

    gradient data

    integer, intent(in) :: velPos(3)

    Position of velocity field in auxField

    integer, intent(in) :: densPos

    Position of velocity field in auxField

    integer, intent(in) :: nDims

    Dimensions

    integer, intent(in) :: nAuxScalars

    Number of scalars in auxField array

    integer, intent(in) :: nSolve

    Number of element to solve in this level

    integer, intent(in) :: elemOffset

    Offset for elements when computing chunkwise

    Return Value real(kind=rk)(nDims,nSolve)

    output: gradient of velocity


Derived Types

type, public :: mus_Grad_type

collection of properties of the Gradient type

Components

TypeVisibilityAttributesNameInitial
procedure(getGradU), private, nopass, pointer:: U_ptr=> null()

function pointer to get Gradient U

procedure(getGradXXU), private, nopass, pointer:: XXU_ptr=> null()

function pointer to get Gradient XX U

procedure(getGradRhoU3), private, nopass, pointer:: RhoU3_ptr=> null()

function pointer to get Gradient rho U^3

procedure(getGradRhoUVZ), private, nopass, pointer:: RhoUVZ_ptr=> null()

function pointer to get Gradient Rho u_x u_y u_z

type, public :: mus_gradData_type

Contains information required to compute gradient like position of six direct neigbors in the state array and coeff for the gradient operation

Components

TypeVisibilityAttributesNameInitial
integer, private, allocatable:: neighPos(:,:,:)

Stores position of 6 direct face neighbors in the state array for each element Size: nSize, stencil%nDims, 2 last index refers to left and right side 1 is left/negative side and 2 is right/positive side

real(kind=rk), private, allocatable:: FDcoeff(:,:)

coeff to calculate 1st order derivative use forward difference for element with boundary (coeff = 1.0) and central difference for inner fluid element (coeff=0.5) size: nSize, stencil%nDims


Functions

public function mus_assign_GradCalculation_ptr(label) result(Grad)

This function returns function pointer of nonEquilibrium scaling for interpolation according to scheme definition

Arguments

TypeIntentOptionalAttributesName
character(len=labelLen), intent(in) :: label

Scheme header information

Return Value type(mus_Grad_type)

GradRhoU3 function

private pure function getGradU_1D(auxField, gradData, velPos, nAuxScalars, nDims, nSolve, elemOffset) result(gradU)

This function computes gradient of velocity from gradient and veleocity data. Gradient is computed using central difference. if an element has an boundary then neighbor refers to current element then forward difference is used

Arguments

TypeIntentOptionalAttributesName
real(kind=rk), intent(in) :: auxField(:)

auxField

type(mus_gradData_type), intent(in) :: gradData

gradient data

integer, intent(in) :: velPos(3)

Position of velocity field in auxField

integer, intent(in) :: nAuxScalars

Number of scalars in auxField array

integer, intent(in) :: nDims

Dimensions

integer, intent(in) :: nSolve

Number of element to solve in this level

integer, intent(in) :: elemOffset

Offset for elements when computing chunkwise

Return Value real(kind=rk)(nDims,nDims,nSolve)

output: gradient of velocity

private pure function getGradU_2D(auxField, gradData, velPos, nAuxScalars, nDims, nSolve, elemOffset) result(gradU)

This function computes gradient of velocity from gradient and veleocity data. Gradient is computed using central difference. if an element has an boundary then neighbor refers to current element then forward difference is used

Arguments

TypeIntentOptionalAttributesName
real(kind=rk), intent(in) :: auxField(:)

auxField

type(mus_gradData_type), intent(in) :: gradData

gradient data

integer, intent(in) :: velPos(3)

Position of velocity field in auxField

integer, intent(in) :: nAuxScalars

Number of scalars in auxField array

integer, intent(in) :: nDims

Dimensions

integer, intent(in) :: nSolve

Number of element to solve in this level

integer, intent(in) :: elemOffset

Offset for elements when computing chunkwise

Return Value real(kind=rk)(nDims,nDims,nSolve)

output: gradient of velocity

private pure function getGradU_3D(auxField, gradData, velPos, nAuxScalars, nDims, nSolve, elemOffset) result(gradU)

This function computes gradient of velocity from gradient and veleocity data. Gradient is computed using central difference. if an element has an boundary then neighbor refers to current element then forward difference is used

Arguments

TypeIntentOptionalAttributesName
real(kind=rk), intent(in) :: auxField(:)

auxField

type(mus_gradData_type), intent(in) :: gradData

gradient data

integer, intent(in) :: velPos(3)

Position of velocity field in auxField

integer, intent(in) :: nAuxScalars

Number of scalars in auxField array

integer, intent(in) :: nDims

Dimensions

integer, intent(in) :: nSolve

Number of element to solve in this level

integer, intent(in) :: elemOffset

Offset for elements when computing chunkwise

Return Value real(kind=rk)(nDims,nDims,nSolve)

output: gradient of velocity

private pure function getGradXXU_1D(auxField, gradData, velPos, nAuxScalars, nDims, nSolve, elemOffset) result(gradXXU)

This function computes gradient of velocity from gradient and veleocity data. Gradient is computed using central difference. if an element has an boundary then neighbor refers to current element then forward difference is used

Arguments

TypeIntentOptionalAttributesName
real(kind=rk), intent(in) :: auxField(:)

auxField

type(mus_gradData_type), intent(in) :: gradData

gradient data

integer, intent(in) :: velPos(3)

Position of velocity field in auxField

integer, intent(in) :: nAuxScalars

Number of scalars in auxField array

integer, intent(in) :: nDims

Dimensions

integer, intent(in) :: nSolve

Number of element to solve in this level

integer, intent(in) :: elemOffset

Offset for elements when computing chunkwise

Return Value real(kind=rk)(nDims,nSolve)

output: gradient of velocity:

private pure function getGradXXU_2D(auxField, gradData, velPos, nAuxScalars, nDims, nSolve, elemOffset) result(gradXXU)

This function computes gradient of velocity from gradient and veleocity data. Gradient is computed using central difference. if an element has an boundary then neighbor refers to current element then forward difference is used

Arguments

TypeIntentOptionalAttributesName
real(kind=rk), intent(in) :: auxField(:)

auxField

type(mus_gradData_type), intent(in) :: gradData

gradient data

integer, intent(in) :: velPos(3)

Position of velocity field in auxField

integer, intent(in) :: nAuxScalars

Number of scalars in auxField array

integer, intent(in) :: nDims

Dimensions

integer, intent(in) :: nSolve

Number of element to solve in this level

integer, intent(in) :: elemOffset

Offset for elements when computing chunkwise

Return Value real(kind=rk)(nDims,nSolve)

output: gradient of velocity:

private pure function getGradXXU_3D(auxField, gradData, velPos, nAuxScalars, nDims, nSolve, elemOffset) result(gradXXU)

This function computes gradient of velocity from gradient and veleocity data. Gradient is computed using central difference. if an element has an boundary then neighbor refers to current element then forward difference is used

Arguments

TypeIntentOptionalAttributesName
real(kind=rk), intent(in) :: auxField(:)

auxField

type(mus_gradData_type), intent(in) :: gradData

gradient data

integer, intent(in) :: velPos(3)

Position of velocity field in auxField

integer, intent(in) :: nAuxScalars

Number of scalars in auxField array

integer, intent(in) :: nDims

Dimensions

integer, intent(in) :: nSolve

Number of element to solve in this level

integer, intent(in) :: elemOffset

Offset for elements when computing chunkwise

Return Value real(kind=rk)(nDims,nSolve)

output: gradient of velocity:

private pure function getGradRhoU3_1D(auxField, gradData, velPos, densPos, nAuxScalars, nDims, nSolve, elemOffset) result(gradRhoU3)

This function computes gradient of rho * velocity^3 from gradient, density and veleocity data. Just derivatives u_x, v_y and w_z. Gradient is computed using central difference. if an element has an boundary then neighbor refers to current element then forward difference is used.

Arguments

TypeIntentOptionalAttributesName
real(kind=rk), intent(in) :: auxField(:)

auxField

type(mus_gradData_type), intent(in) :: gradData

gradient data

integer, intent(in) :: velPos(3)

Position of velocity field in auxField

integer, intent(in) :: densPos

Position of velocity field in auxField

integer, intent(in) :: nAuxScalars

Number of scalars in auxField array

integer, intent(in) :: nDims

Dimensions

integer, intent(in) :: nSolve

Number of element to solve in this level

integer, intent(in) :: elemOffset

Offset for elements when computing chunkwise

Return Value real(kind=rk)(nDims,nSolve)

output: gradient of velocity

private pure function getGradRhoU3_2D(auxField, gradData, velPos, densPos, nAuxScalars, nDims, nSolve, elemOffset) result(gradRhoU3)

This function computes gradient of rho * velocity^3 from gradient, density and veleocity data. Just derivatives u_x, v_y and w_z. Gradient is computed using central difference. if an element has an boundary then neighbor refers to current element then forward difference is used.

Arguments

TypeIntentOptionalAttributesName
real(kind=rk), intent(in) :: auxField(:)

auxField

type(mus_gradData_type), intent(in) :: gradData

gradient data

integer, intent(in) :: velPos(3)

Position of velocity field in auxField

integer, intent(in) :: densPos

Position of velocity field in auxField

integer, intent(in) :: nAuxScalars

Number of scalars in auxField array

integer, intent(in) :: nDims

Dimensions

integer, intent(in) :: nSolve

Number of element to solve in this level

integer, intent(in) :: elemOffset

Offset for elements when computing chunkwise

Return Value real(kind=rk)(nDims,nSolve)

output: gradient of velocity

private pure function getGradRhoU3_3D(auxField, gradData, velPos, densPos, nAuxScalars, nDims, nSolve, elemOffset) result(gradRhoU3)

This function computes gradient of rho * velocity^3 from gradient, density and veleocity data. Just derivatives u_x, v_y and w_z. Gradient is computed using central difference. if an element has an boundary then neighbor refers to current element then forward difference is used.

Arguments

TypeIntentOptionalAttributesName
real(kind=rk), intent(in) :: auxField(:)

auxField

type(mus_gradData_type), intent(in) :: gradData

gradient data

integer, intent(in) :: velPos(3)

Position of velocity field in auxField

integer, intent(in) :: densPos

Position of velocity field in auxField

integer, intent(in) :: nAuxScalars

Number of scalars in auxField array

integer, intent(in) :: nDims

Dimensions

integer, intent(in) :: nSolve

Number of element to solve in this level

integer, intent(in) :: elemOffset

Offset for elements when computing chunkwise

Return Value real(kind=rk)(nDims,nSolve)

output: gradient of velocity

private pure function getGradRhoUVZ_3D(auxField, gradData, velPos, densPos, nDims, nAuxScalars, nSolve, elemOffset) result(gradRhoUVZ)

This function computes gradient of rho * velocity^3 from gradient, density and veleocity data. Just derivatives u_x, v_y and w_z. Gradient is computed using central difference. if an element has an boundary then neighbor refers to current element then forward difference is used.

Arguments

TypeIntentOptionalAttributesName
real(kind=rk), intent(in) :: auxField(:)

auxField

type(mus_gradData_type), intent(in) :: gradData

gradient data

integer, intent(in) :: velPos(3)

Position of velocity field in auxField

integer, intent(in) :: densPos

Position of velocity field in auxField

integer, intent(in) :: nDims

Dimensions

integer, intent(in) :: nAuxScalars

Number of scalars in auxField array

integer, intent(in) :: nSolve

Number of element to solve in this level

integer, intent(in) :: elemOffset

Offset for elements when computing chunkwise

Return Value real(kind=rk)(nDims,nSolve)

output: gradient of velocity


Subroutines

public subroutine mus_init_gradData(me, neigh, stencil, nSize, nSolve, nScalars)

This routine initialize gradData with direct neighbors in state and finite difference coefficients.

Arguments

TypeIntentOptionalAttributesName
type(mus_gradData_type), intent(out) :: me

Gradient type

integer, intent(in) :: neigh(:)

neighbor connectivity array

levelDesc to access communication buffers of state array

type(tem_stencilHeader_type), intent(in) :: stencil

stencil header

integer, intent(in) :: nSize

Number of elements in state array

integer, intent(in) :: nSolve

Number of elements solved in compute kernel i.e. excluding halos

integer, intent(in) :: nScalars

number of scalars in state array