atl_project_physflux_module Module

dirVec(:,1) = [ 1,2,3 ] dirVec(:,2) = [ 2,1,3 ] dirVec(:,3) = [ 2,3,1 ]


Uses

Used by

  • module~~atl_project_physflux_module~~UsedByGraph module~atl_project_physflux_module atl_project_physflux_module proc~compute_rhs_cubes_modg compute_rhs_cubes_modg proc~compute_rhs_cubes_modg->module~atl_project_physflux_module proc~modg_2d_compute_project_physflux modg_2d_compute_project_physFlux proc~modg_2d_compute_project_physflux->module~atl_project_physflux_module proc~modg_compute_project_physflux modg_compute_project_physFlux proc~modg_compute_project_physflux->module~atl_project_physflux_module

Subroutines

public subroutine atl_modg_project_PhysFlux_testFunc(mesh, equation, kerneldata, scheme, iDir, dl_prod, dirVec, iElem, state_der)

Subroutine to project modal representations of physical flux, numerical flux and source terms onto test functions.

Arguments

Type IntentOptional Attributes Name
type(atl_cube_elem_type), intent(in) :: mesh

Descritption of the cubical elements in the mesh

type(atl_Equations_type), intent(in) :: equation

The equation description.

type(atl_kerneldata_type), intent(inout) :: kerneldata

The data of the kernel. Holds the physical fluxes.

type(atl_modg_scheme_type), intent(in) :: scheme

The parameters of the MODG scheme

integer, intent(in) :: iDir

The direction

real(kind=rk), intent(in) :: dl_prod(2,scheme%maxPolyDegree+1)

stored scalar products of the testfunction and ansatz function

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

vector for direction indicators

integer, intent(in) :: iElem
real(kind=rk), intent(in) :: state_der(kerneldata%nDofs,equation%varSys%nScalars)

public subroutine atl_modg_2d_project_physFlux_testFunc(mesh, equation, kerneldata, iElem, dl_prod, iDir, scheme, state_data, nDofs)

Subroutine to project modal representations of physical flux, numerical flux and source terms onto test functions.

Arguments

Type IntentOptional Attributes Name
type(atl_cube_elem_type), intent(in) :: mesh

Descritption of the cubical elements in the mesh

type(atl_Equations_type), intent(in) :: equation

The equation description.

type(atl_kerneldata_type), intent(inout) :: kerneldata

The data of the kernel. Holds the physical fluxes.

integer, intent(in) :: iElem

The element index

real(kind=rk), intent(in) :: dl_prod(2,scheme%maxPolyDegree+1)
integer, intent(in) :: iDir

The direction

type(atl_modg_2d_scheme_type), intent(in) :: scheme

The parameters of the MODG scheme

real(kind=rk), intent(in) :: state_data(nDofs,equation%varSys%nScalars)

The physical fluxes that needs to be projected

integer, intent(in) :: nDofs

The total degrees of freedom

private subroutine modg_project_physFlux_Q(nScalars, maxPolyDegree, length, state, dl_prod, dirVec, iElem, state_der)

Projection of the physical flux onto the testfunctions, with unrolled loops

Arguments

Type IntentOptional Attributes Name
integer, intent(in) :: nScalars

The number of scalar variables in your equation system.

integer, intent(in) :: maxPolyDegree

The maximal polynomial degree in each spatial direction.

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

The length of the cubes.

real(kind=rk), intent(inout) :: state(:,:,:)

The state to alter.

real(kind=rk), intent(in) :: dl_prod(2,maxPolyDegree+1)

Precomputed dual Legendre products:

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

ordering of xyz for current direction

integer, intent(in) :: iElem
real(kind=rk), intent(in) :: state_der(:,:)

The state to be used to project the physical fluxes

private subroutine modg_project_physFlux_P(nScalars, iElem, maxPolyDegree, length, state, dl_prod, dirVec, state_der)

Projection of the physical flux onto the testfunctions, with unrolled loops => fewer loop-overhead/instructions, but more "random" memory accesses MZ: perhaps this version is faster for low order (or always, depending on the machine?)

Arguments

Type IntentOptional Attributes Name
integer, intent(in) :: nScalars

The number of scalar variables in your equation system.

integer, intent(in) :: iElem

The element index

integer, intent(in) :: maxPolyDegree

The maximal polynomial degree in each spatial direction.

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

The length of the cubes.

real(kind=rk), intent(inout) :: state(:,:,:)

The state to alter.

real(kind=rk), intent(in) :: dl_prod(2,maxPolyDegree+1)

Precomputed dual Legendre products:

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

ordering of xyz for current direction

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

The state to be used to project the physical fluxes

private subroutine modg_2d_project_physFluxX_Q(nScalars, maxPolyDegree, length, dl_prod, state, iElem, state_der)

Projection of the physical flux in x direction onto the testfunctions.

Arguments

Type IntentOptional Attributes Name
integer, intent(in) :: nScalars

The number of scalar variables in your equation system.

integer, intent(in) :: maxPolyDegree

The maximal polynomial degree in each spatial direction.

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

The length of the cubes.

real(kind=rk), intent(in) :: dl_prod(2,maxPolyDegree+1)

Precomputed dual Legendre products:

real(kind=rk), intent(inout) :: state(:,:,:)

The state to alter.

integer, intent(in) :: iElem

The element index

real(kind=rk), intent(in) :: state_der((maxPolyDegree+1)**2,nScalars)

The state data for the element

private subroutine modg_2d_project_physFluxY_Q(nScalars, maxPolyDegree, length, dl_prod, state, iElem, state_der)

Projection of the physical flux in y direction onto the testfunctions.

Arguments

Type IntentOptional Attributes Name
integer, intent(in) :: nScalars

The number of scalar variables in your equation system.

integer, intent(in) :: maxPolyDegree

The maximal polynomial degree in each spatial direction.

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

The length of the cubes.

real(kind=rk), intent(in) :: dl_prod(2,maxPolyDegree+1)

Precomputed dual Legendre products:

real(kind=rk), intent(inout) :: state(:,:,:)

The state to alter.

integer, intent(in) :: iElem

The element index

real(kind=rk), intent(in) :: state_der((maxPolyDegree+1)**2,nScalars)

The state data for the element

private subroutine modg_2d_project_physFluxX_P(nScalars, maxPolyDegree, length, dl_prod, state, iElem, nDofs, state_der)

Projection of the physical flux in x direction onto the testfunctions.

Arguments

Type IntentOptional Attributes Name
integer, intent(in) :: nScalars

The number of scalar variables in your equation system.

integer, intent(in) :: maxPolyDegree

The maximal polynomial degree in each spatial direction.

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

The length of the cubes.

real(kind=rk), intent(in) :: dl_prod(2,maxPolyDegree+1)

Precomputed dual Legendre products:

real(kind=rk), intent(inout) :: state(:,:,:)

The state to alter.

integer, intent(in) :: iElem

The element index

integer, intent(in) :: nDofs

Number of degrees of freedom

real(kind=rk), intent(in) :: state_der(nDofs,nScalars)

The state data for the element

private subroutine modg_2d_project_physFluxY_P(nScalars, maxPolyDegree, length, dl_prod, state, iElem, nDofs, state_der)

Projection of the physical flux in y direction onto the testfunctions.

Arguments

Type IntentOptional Attributes Name
integer, intent(in) :: nScalars

The number of scalar variables in your equation system.

integer, intent(in) :: maxPolyDegree

The maximal polynomial degree in each spatial direction.

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

The length of the cubes.

real(kind=rk), intent(in) :: dl_prod(2,maxPolyDegree+1)

Precomputed dual Legendre products:

real(kind=rk), intent(inout) :: state(:,:,:)

The state to alter.

integer, intent(in) :: iElem

The element index

integer, intent(in) :: nDofs

Number of degrees of freedom

real(kind=rk), intent(in) :: state_der(nDofs,nScalars)

The state data for the element

private subroutine modg_prj_pflux1_q_6(maxpolydegree, length, state, dl_prod, ielem, state_der)

X direction for 6 scalars projection of the physical flux onto the testfunctions, with unrolled loops

Read more…

Arguments

Type IntentOptional Attributes Name
integer, intent(in) :: maxpolydegree

the maximal polynomial degree in each spatial direction.

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

the length of the cubes.

real(kind=rk), intent(inout) :: state(:,:,:)

the state to alter.

real(kind=rk), intent(in) :: dl_prod(2,maxpolydegree+1)

precomputed dual legendre products:

integer, intent(in) :: ielem
real(kind=rk), intent(in) :: state_der(:,:)

the state to be used to project the physical fluxes

private subroutine modg_prj_pflux2_q_6(maxpolydegree, length, state, dl_prod, ielem, state_der)

Y direction for 6 scalars projection of the physical flux onto the testfunctions, with unrolled loops

Read more…

Arguments

Type IntentOptional Attributes Name
integer, intent(in) :: maxpolydegree

the maximal polynomial degree in each spatial direction.

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

the length of the cubes.

real(kind=rk), intent(inout) :: state(:,:,:)

the state to alter.

real(kind=rk), intent(in) :: dl_prod(2,maxpolydegree+1)

precomputed dual legendre products:

integer, intent(in) :: ielem
real(kind=rk), intent(in) :: state_der(:,:)

the state to be used to project the physical fluxes

private subroutine modg_prj_pflux3_q_6(maxpolydegree, length, state, dl_prod, ielem, state_der)

Z direction for 6 scalars projection of the physical flux onto the testfunctions, with unrolled loops

Read more…

Arguments

Type IntentOptional Attributes Name
integer, intent(in) :: maxpolydegree

the maximal polynomial degree in each spatial direction.

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

the length of the cubes.

real(kind=rk), intent(inout) :: state(:,:,:)

the state to alter.

real(kind=rk), intent(in) :: dl_prod(2,maxpolydegree+1)

precomputed dual legendre products:

integer, intent(in) :: ielem
real(kind=rk), intent(in) :: state_der(:,:)

the state to be used to project the physical fluxes

private subroutine modg_prj_pflux1_q_5(maxpolydegree, length, state, dl_prod, ielem, state_der)

X direction for 5 scalars projection of the physical flux onto the testfunctions, with unrolled loops

Read more…

Arguments

Type IntentOptional Attributes Name
integer, intent(in) :: maxpolydegree

the maximal polynomial degree in each spatial direction.

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

the length of the cubes.

real(kind=rk), intent(inout) :: state(:,:,:)

the state to alter.

real(kind=rk), intent(in) :: dl_prod(2,maxpolydegree+1)

precomputed dual legendre products:

integer, intent(in) :: ielem
real(kind=rk), intent(in) :: state_der(:,:)

the state to be used to project the physical fluxes

private subroutine modg_prj_pflux2_q_5(maxpolydegree, length, state, dl_prod, ielem, state_der)

Y direction for 5 scalars projection of the physical flux onto the testfunctions, with unrolled loops

Read more…

Arguments

Type IntentOptional Attributes Name
integer, intent(in) :: maxpolydegree

the maximal polynomial degree in each spatial direction.

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

the length of the cubes.

real(kind=rk), intent(inout) :: state(:,:,:)

the state to alter.

real(kind=rk), intent(in) :: dl_prod(2,maxpolydegree+1)

precomputed dual legendre products:

integer, intent(in) :: ielem
real(kind=rk), intent(in) :: state_der(:,:)

the state to be used to project the physical fluxes

private subroutine modg_prj_pflux3_q_5(maxpolydegree, length, state, dl_prod, ielem, state_der)

Z direction for 5 scalars projection of the physical flux onto the testfunctions, with unrolled loops

Read more…

Arguments

Type IntentOptional Attributes Name
integer, intent(in) :: maxpolydegree

the maximal polynomial degree in each spatial direction.

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

the length of the cubes.

real(kind=rk), intent(inout) :: state(:,:,:)

the state to alter.

real(kind=rk), intent(in) :: dl_prod(2,maxpolydegree+1)

precomputed dual legendre products:

integer, intent(in) :: ielem
real(kind=rk), intent(in) :: state_der(:,:)

the state to be used to project the physical fluxes