SELF_RefinementIndicator_3D Module


Uses

  • module~~self_refinementindicator_3d~~UsesGraph module~self_refinementindicator_3d SELF_RefinementIndicator_3D module~self_refinementindicator_3d_t SELF_RefinementIndicator_3D_t module~self_refinementindicator_3d->module~self_refinementindicator_3d_t module~self_constants SELF_Constants module~self_refinementindicator_3d->module~self_constants module~self_refinementindicator_3d_t->module~self_constants module~self_lagrange~2 SELF_Lagrange module~self_refinementindicator_3d_t->module~self_lagrange~2 mpi mpi module~self_refinementindicator_3d_t->mpi iso_c_binding iso_c_binding module~self_refinementindicator_3d_t->iso_c_binding module~self_scalar_3d~2 SELF_Scalar_3D module~self_refinementindicator_3d_t->module~self_scalar_3d~2 iso_fortran_env iso_fortran_env module~self_constants->iso_fortran_env module~self_constants->iso_c_binding module~self_lagrange~2->module~self_constants module~self_lagrange~2->iso_fortran_env module~self_lagrange~2->iso_c_binding module~self_lagrange_t SELF_Lagrange_t module~self_lagrange~2->module~self_lagrange_t module~self_scalar_3d~2->module~self_constants module~self_scalar_3d~2->iso_c_binding module~self_scalar_3d_t SELF_Scalar_3D_t module~self_scalar_3d~2->module~self_scalar_3d_t module~self_lagrange_t->module~self_constants module~self_lagrange_t->iso_fortran_env module~self_lagrange_t->iso_c_binding module~self_quadrature SELF_Quadrature module~self_lagrange_t->module~self_quadrature HDF5 HDF5 module~self_lagrange_t->HDF5 module~self_supportroutines SELF_SupportRoutines module~self_lagrange_t->module~self_supportroutines module~self_hdf5 SELF_HDF5 module~self_lagrange_t->module~self_hdf5 module~self_scalar_3d_t->module~self_constants module~self_scalar_3d_t->module~self_lagrange~2 module~self_scalar_3d_t->iso_c_binding module~self_scalar_3d_t->HDF5 module~self_datapool SELF_DataPool module~self_scalar_3d_t->module~self_datapool module~self_scalar_3d_t->module~self_hdf5 module~self_data SELF_Data module~self_scalar_3d_t->module~self_data FEQParse FEQParse module~self_scalar_3d_t->FEQParse module~self_metadata SELF_Metadata module~self_scalar_3d_t->module~self_metadata module~self_quadrature->module~self_constants module~self_quadrature->iso_fortran_env module~self_datapool->module~self_constants module~self_supportroutines->module~self_constants module~self_supportroutines->iso_fortran_env module~self_hdf5->module~self_constants module~self_hdf5->mpi module~self_hdf5->iso_fortran_env module~self_hdf5->HDF5 module~self_data->module~self_constants module~self_data->module~self_lagrange~2 module~self_data->iso_c_binding module~self_data->HDF5 module~self_data->module~self_hdf5 module~self_data->FEQParse module~self_data->module~self_metadata module~self_metadata->HDF5 module~self_metadata->module~self_hdf5

Used by

  • module~~self_refinementindicator_3d~~UsedByGraph module~self_refinementindicator_3d SELF_RefinementIndicator_3D module~self_amrcontroller_3d SELF_AMRController_3D module~self_amrcontroller_3d->module~self_refinementindicator_3d

Contents


Derived Types

Components

TypeVisibilityAttributesNameInitial
integer, public :: N =0

Polynomial degree of the interpolant the indicator is built for.

real(kind=prec), public, pointer, contiguous, dimension(:,:):: Pmodal=> null()

Nodal-to-modal transform. Pmodal(ii,p) is the (p,ii) entry of the inverse Legendre Vandermonde in the L2-normalized basis, so the 1-D modal coefficients are uhat(p) = sum_ii Pmodal(ii,p) * u(ii) (first index summed, SELF matrix convention).

character(len=3), public :: backend ="cpu"
real(kind=prec), public :: coarsenThreshold =0.0_prec

Elements with sigma_e below this value are flagged SELF_AMR_COARSEN.

real(kind=prec), public :: energyScale =0.0_prec

Squared field scale the relative floor is measured against, in the units of the gate energy. Meaningful only when energyScaleIsSet is true; otherwise the scale is recomputed from the current field on every Estimate.

logical, public :: energyScaleIsSet =.false.

Whether energyScale was pinned by SetEnergyScale (true) or is computed automatically as the largest gate energy over the elements (false, the default).

real(kind=prec), public, pointer, contiguous, dimension(:):: energyWeight=> null()

Non-negative weights w_v of the gate energy g_e = sum_v w_v E_tot,e,v, indexed by solution variable. Resolved lazily, because the variable count is a property of the solution field and is not known at Init.

logical, public :: energyWeightsSet =.false.

Whether energyWeight was supplied by SetEnergyWeights (true) or is regenerated from the driving-variable index on every Estimate (false, the default).

integer, public, pointer, contiguous, dimension(:):: flag=> null()

Per-element refinement flag: SELF_AMR_REFINE / SELF_AMR_KEEP / SELF_AMR_COARSEN.

real(kind=prec), public, pointer, contiguous, dimension(:):: gate=> null()

Per-element gate energy g_e from the most recent Estimate. Retained as a diagnostic: it is the quantity the amplitude gate actually compared against the effective floor.

real(kind=prec), public, pointer, contiguous, dimension(:):: indicator=> null()

Per-element indicator value sigma_e = log10(S_e).

integer, public :: nElem =0

Number of (rank-local) elements the indicator arrays are sized for.

integer, public :: nVarWeights =0

Allocated length of energyWeight (the solution variable count it was resolved for).

real(kind=prec), public :: refineThreshold =0.0_prec

Elements with sigma_e above this value are flagged SELF_AMR_REFINE.

real(kind=prec), public :: relativeEnergyFloor =SELF_AMR_DEFAULT_RELFLOOR

Elements whose gate energy is at or below relativeEnergyFloorenergyScale are treated as quiescent (hence perfectly resolved) regardless of their modal shape. Energy goes as amplitude squared, so this is 10*(dB/10) in amplitude terms: 1e-8 gates amplitudes below 1e-4 (-80 dB) of the field scale. Set to 0 to recover the pure absolute (machine-epsilon) floor.

real(kind=prec), public :: significantEnergyFloor =SELF_AMR_DEFAULT_RELFLOOR

Upper edge of the hysteresis band on the energy axis. Elements between relativeEnergyFloor and this fraction of the energy scale are flagged SELF_AMR_KEEP whatever their spectrum: too weak to justify spending levels on, too strong to declare resolved. Equal to relativeEnergyFloor by default, which collapses the band to a single hard cut. See SetRelativeEnergyFloor.

Type-Bound Procedures

procedure, public :: ClearEnergyScale => ClearEnergyScale_RefinementIndicator3D_t
procedure, public :: CountFlagged => CountFlagged_RefinementIndicator3D_t
procedure, public :: Estimate => Estimate_RefinementIndicator3D_t
procedure, public :: Free => Free_RefinementIndicator3D_t
procedure, public :: Init => Init_RefinementIndicator3D_t
procedure, public :: SetEnergyScale => SetEnergyScale_RefinementIndicator3D_t
procedure, public :: SetEnergyWeights => SetEnergyWeights_RefinementIndicator3D_t
procedure, public :: SetRelativeEnergyFloor => SetRelativeEnergyFloor_RefinementIndicator3D_t
procedure, public :: SetThresholds => SetThresholds_RefinementIndicator3D_t
procedure, public :: UpdateDevice => UpdateDevice_RefinementIndicator3D_t
procedure, public :: UpdateHost => UpdateHost_RefinementIndicator3D_t