Skip to content

adam_prism_pml_object ​

Source: src/app/prism/common/adam_prism_pml_object.F90

Dependencies

Contents ​

Variables ​

NameTypeAttributesDescription
INI_SECTION_NAMEcharacter(len=3)parameter
PML_TYPE_NONEcharacter(len=14)parameter
PML_TYPE_CLASSICcharacter(len=14)parameter
PML_TYPE_CLASSIC_DIRECTcharacter(len=14)parameter
PML_TYPE_CFScharacter(len=14)parameter
PML_TYPE_BERMUDEZcharacter(len=14)parameter
PML_VARS_PER_FACEinteger(kind=I4P)parameter
PML_FACE_X_Minteger(kind=I4P)parameter
PML_FACE_X_Pinteger(kind=I4P)parameter
PML_FACE_Y_Minteger(kind=I4P)parameter
PML_FACE_Y_Pinteger(kind=I4P)parameter
PML_FACE_Z_Minteger(kind=I4P)parameter
PML_FACE_Z_Pinteger(kind=I4P)parameter
CFS_PROFILE_EXPONENTinteger(kind=I4P)parameter
BERMUDEZ_EPSreal(kind=R8P)parameter
FACE_LABELcharacter(len=2)parameter
PML_X_VAR_NAMEcharacter(len=8)parameter
PML_Y_VAR_NAMEcharacter(len=8)parameter
PML_Z_VAR_NAMEcharacter(len=8)parameter

Derived Types ​

prism_pml_object ​

PRISM PML class definition. Each face-local state array stores four split variables in the order "electric first, magnetic second", e.g. q_pml_x_* = [psi_Ey_x, psi_Ez_x, psi_Hy_x, psi_Hz_x]. Storage is reduced to boundary blocks only and compacted face by face.

Components ​

NameTypeAttributesDescription
pml_typecharacter(len=99)
enabledlogical
layerlogical
widthreal(kind=R8P)
gamma_maxreal(kind=R8P)
gamma_eff_maxreal(kind=R8P)
C_gammareal(kind=R8P)
gamma_exponentreal(kind=R8P)
alpha_maxreal(kind=R8P)
k_maxreal(kind=R8P)
betareal(kind=R8P)
profile_spanreal(kind=R8P)Face-wise maximum center distance inside the PML.
ni_pmlinteger(kind=I4P)allocatableLocal i-range of active PML support [2,nb,6].
nj_pmlinteger(kind=I4P)allocatableLocal j-range of active PML support [2,nb,6].
nk_pmlinteger(kind=I4P)allocatableLocal k-range of active PML support [2,nb,6].
block_lidinteger(kind=I4P)allocatableGlobal-block to compact face-local slot [nb,6]; 0 if inactive.
max_cellsinteger(kind=I4P)Max local PML thickness on each face.
active_blocksinteger(kind=I4P)Boundary blocks carrying PML on each face.
blocks_x_minteger(kind=I4P)allocatableGlobal block ids carrying x-minus PML.
blocks_x_pinteger(kind=I4P)allocatableGlobal block ids carrying x-plus PML.
blocks_y_minteger(kind=I4P)allocatableGlobal block ids carrying y-minus PML.
blocks_y_pinteger(kind=I4P)allocatableGlobal block ids carrying y-plus PML.
blocks_z_minteger(kind=I4P)allocatableGlobal block ids carrying z-minus PML.
blocks_z_pinteger(kind=I4P)allocatableGlobal block ids carrying z-plus PML.
q_pml_x_mreal(kind=R8P)allocatable[4,Cmax_xm,nj,nk,nblocks_xm]
q_pml_x_preal(kind=R8P)allocatable[4,Cmax_xp,nj,nk,nblocks_xp]
q_pml_y_mreal(kind=R8P)allocatable[4,ni,Cmax_ym,nk,nblocks_ym]
q_pml_y_preal(kind=R8P)allocatable[4,ni,Cmax_yp,nk,nblocks_yp]
q_pml_z_mreal(kind=R8P)allocatable[4,ni,nj,Cmax_zm,nblocks_zm]
q_pml_z_preal(kind=R8P)allocatable[4,ni,nj,Cmax_zp,nblocks_zp]

Type-Bound Procedures ​

NameAttributesDescription
descriptionpass(self)
initializepass(self)
load_from_filepass(self)

Subroutines ​

initialize ​

Initialize the PML support and allocate reduced face-local states.

fortran
subroutine initialize(self, field, grid, tree, file_parameters)

Arguments

NameTypeIntentAttributesDescription
selfclass(prism_pml_object)inout
fieldtype(field_object)in
gridtype(grid_object)in
treetype(tree_object)in
file_parameterstype(file_ini)in

Call graph

load_from_file ​

Load PML configuration from file.

fortran
subroutine load_from_file(self, file_parameters, go_on_fail)

Arguments

NameTypeIntentAttributesDescription
selfclass(prism_pml_object)inout
file_parameterstype(file_ini)in
go_on_faillogicalinoptional

Call graph

allocate_face_metadata ​

Allocate per-face block lists only where the local rank owns boundary blocks.

fortran
subroutine allocate_face_metadata(self)

Arguments

NameTypeIntentAttributesDescription
selfclass(prism_pml_object)inout

Call graph

allocate_face_storage ​

Allocate reduced face-local PML state arrays.

fortran
subroutine allocate_face_storage(self, grid)

Arguments

NameTypeIntentAttributesDescription
selfclass(prism_pml_object)inout
gridtype(grid_object)in

Call graph

reset_pml_configuration ​

Reset the input-driven configuration, leaving storage handling to reset_pml_object.

fortran
subroutine reset_pml_configuration(self)

Arguments

NameTypeIntentAttributesDescription
selfclass(prism_pml_object)inout

Call graph

reset_pml_object ​

Reset configuration and release all derived storage.

fortran
subroutine reset_pml_object(self)

Arguments

NameTypeIntentAttributesDescription
selfclass(prism_pml_object)inout

Call graph

Functions ​

description ​

Return a pretty-formatted object description.

Returns: character(len=:)

fortran
function description(self) result(desc)

Arguments

NameTypeIntentAttributesDescription
selfclass(prism_pml_object)in

Call graph

compute_gamma_eff_max ​

Return the maximum damping coefficient over the local PML profiles.

Attributes: pure

Returns: real(kind=r8p)

fortran
function compute_gamma_eff_max(self, field, grid) result(gamma_eff_max)

Arguments

NameTypeIntentAttributesDescription
selfclass(prism_pml_object)in
fieldtype(field_object)in
gridtype(grid_object)in

Call graph

compute_gamma_profile ​

Return the scalar damping profile value at one normal PML coordinate.

Attributes: pure

Returns: real(kind=r8p)

fortran
function compute_gamma_profile(self, center_distance, span) result(gamma)

Arguments

NameTypeIntentAttributesDescription
selfclass(prism_pml_object)in
center_distancereal(kind=R8P)in
spanreal(kind=R8P)in

Call graph

face_is_active ​

Return true if the given block carries PML support on the selected face.

Attributes: pure

Returns: logical

fortran
function face_is_active(self, block_id, face) result(is_active)

Arguments

NameTypeIntentAttributesDescription
selfclass(prism_pml_object)in
block_idinteger(kind=I4P)in
faceinteger(kind=I4P)in

Call graph

strip_control ​

Return string with control characters (CR, TAB, ...) replaced by blanks.

INI files authored on Windows carry a trailing CR that trim/adjustl do not remove, so a value would miss every case and hit the case default error path purely because of its line ending. Blank them first: the subsequent trim/adjustl then yields the intended token.

Attributes: pure

Returns: character(len=len)

fortran
function strip_control(string) result(cleaned)

Arguments

NameTypeIntentAttributesDescription
stringcharacter(len=*)inRaw value as read from the INI file.

Call graph