ply_sampling_adaptive_module Module

Adaptive sampling of polynomial data.

This module implements the sampling of polynomials with data dependent refinement. Elements, where the polynomials vary above a certain threshold, will be split into their eight children and the polynomial data will be projected onto those. The polynomials in the children can be restricted in their order to limit the memory consumption. In the end only one degree of freedom will be returned for each (refined) element, these are always the mean of the solution in those (refined) elements.

The module provides a data type to describe the configuration of the adaptive sampling: ply_sampling_adaptive_type, one routine to load this configuration ply_sampling_adaptive_load and one routine to actually perform the adaptive sampling ply_sample_adaptive.


Uses

  • module~~ply_sampling_adaptive_module~~UsesGraph module~ply_sampling_adaptive_module ply_sampling_adaptive_module aotus_module aotus_module module~ply_sampling_adaptive_module->aotus_module env_module env_module module~ply_sampling_adaptive_module->env_module iso_c_binding iso_c_binding module~ply_sampling_adaptive_module->iso_c_binding module~ply_filter_element_module ply_filter_element_module module~ply_sampling_adaptive_module->module~ply_filter_element_module module~ply_sampling_varsys_module ply_sampling_varsys_module module~ply_sampling_adaptive_module->module~ply_sampling_varsys_module module~ply_split_element_module ply_split_element_module module~ply_sampling_adaptive_module->module~ply_split_element_module mpi mpi module~ply_sampling_adaptive_module->mpi tem_aux_module tem_aux_module module~ply_sampling_adaptive_module->tem_aux_module tem_bc_prop_module tem_bc_prop_module module~ply_sampling_adaptive_module->tem_bc_prop_module tem_logging_module tem_logging_module module~ply_sampling_adaptive_module->tem_logging_module tem_refining_module tem_refining_module module~ply_sampling_adaptive_module->tem_refining_module tem_subTree_module tem_subTree_module module~ply_sampling_adaptive_module->tem_subTree_module tem_subTree_type_module tem_subTree_type_module module~ply_sampling_adaptive_module->tem_subTree_type_module tem_time_module tem_time_module module~ply_sampling_adaptive_module->tem_time_module tem_tools_module tem_tools_module module~ply_sampling_adaptive_module->tem_tools_module tem_topology_module tem_topology_module module~ply_sampling_adaptive_module->tem_topology_module tem_tracking_module tem_tracking_module module~ply_sampling_adaptive_module->tem_tracking_module tem_varSys_module tem_varSys_module module~ply_sampling_adaptive_module->tem_varSys_module treelmesh_module treelmesh_module module~ply_sampling_adaptive_module->treelmesh_module module~ply_filter_element_module->aotus_module module~ply_filter_element_module->env_module module~ply_filter_element_module->tem_aux_module module~ply_filter_element_module->tem_logging_module module~ply_filter_element_module->tem_tools_module aot_err_module aot_err_module module~ply_filter_element_module->aot_err_module aot_table_module aot_table_module module~ply_filter_element_module->aot_table_module module~ply_sampling_varsys_module->env_module module~ply_sampling_varsys_module->tem_time_module module~ply_sampling_varsys_module->tem_topology_module module~ply_sampling_varsys_module->tem_tracking_module module~ply_sampling_varsys_module->tem_varSys_module module~ply_sampling_varsys_module->treelmesh_module module~ply_split_element_module->env_module module~ply_modg_basis_module ply_modg_basis_module module~ply_split_element_module->module~ply_modg_basis_module module~ply_split_legendre_module ply_split_legendre_module module~ply_split_element_module->module~ply_split_legendre_module module~ply_modg_basis_module->env_module module~ply_dof_module ply_dof_module module~ply_modg_basis_module->module~ply_dof_module module~ply_space_integration_module ply_space_integration_module module~ply_modg_basis_module->module~ply_space_integration_module module~ply_split_legendre_module->env_module module~ply_dof_module->env_module module~ply_space_integration_module->env_module tem_param_module tem_param_module module~ply_space_integration_module->tem_param_module

Used by

  • module~~ply_sampling_adaptive_module~~UsedByGraph module~ply_sampling_adaptive_module ply_sampling_adaptive_module module~ply_sampling_module ply_sampling_module module~ply_sampling_module->module~ply_sampling_adaptive_module module~ply_sampled_tracking_module ply_sampled_tracking_module module~ply_sampled_tracking_module->module~ply_sampling_module module~atl_initialize_module atl_initialize_module module~atl_initialize_module->module~ply_sampled_tracking_module module~atl_solver_param_module atl_solver_param_module module~atl_initialize_module->module~atl_solver_param_module module~atl_program_module atl_program_module module~atl_program_module->module~ply_sampled_tracking_module module~atl_program_module->module~atl_initialize_module module~atl_program_module->module~atl_solver_param_module module~atl_solver_param_module->module~ply_sampled_tracking_module program~atl_harvesting atl_harvesting program~atl_harvesting->module~ply_sampled_tracking_module program~atl_harvesting->module~atl_initialize_module program~atl_harvesting->module~atl_program_module program~atl_harvesting->module~atl_solver_param_module module~atl_precice_module atl_precice_module module~atl_precice_module->module~atl_solver_param_module program~ateles ateles program~ateles->module~atl_program_module program~ateles->module~atl_solver_param_module

Variables

Type Visibility Attributes Name Initial
integer, private, parameter :: redux_factor = 1

Constant to indicate the factor reduction mode.

integer, private, parameter :: redux_decrement = 2

Constant to indicate the decrement reduction mode.


Derived Types

type, public ::  ply_sampling_adaptive_type

Configuration of the adaptive sampling.

Read more…

Components

Type Visibility Attributes Name Initial
integer, public :: max_nlevels = 0

Maximal number of levels by which any mesh element should be refined.

Read more…
real(kind=rk), public :: eps_osci

Maximum allowed oscillation of the solution. For adaptive subsampling only.

integer, public :: reduction_mode

Method to use for the reduction.

Read more…
logical, public :: ignore_highmodes = .false.

Indication whether to filter modes during refinement by ignoring all modes in the parent, that exceed the target polynomial degree of the child elements.

Read more…
integer, public :: dof_decrement = 1

Number of modes to cut off in each refinement.

Read more…
real(kind=rk), public :: dofReducFactor

Factor to Reduce dofs for every sampling level. Can be used to avoid too drastic increase of memory consumption. For adaptive subsampling only.

logical, public :: adaptiveDofReduction

Indicator for the limitation of memory consumption.

integer, public :: AbsUpperBoundLevel

Absolute upper bound level to refine to.

type(ply_filter_element_type), public :: filter_element

Filtering the poylnomial modes during adaptive refinement.

Read more…

type, private ::  realarray_type

Small helping type to allow arrays of arrays for the variable data.

Components

Type Visibility Attributes Name Initial
real(kind=rk), public, pointer :: dat(:) => NULL()

type, private ::  sampled_method_data_type

A container for the method data to hold the data in a scalar pointer for the C-pointer conversion.

Components

Type Visibility Attributes Name Initial
type(realarray_type), public, allocatable :: component(:)

Subroutines

public subroutine ply_sampling_adaptive_load(me, conf, parent)

Load the configuration for adaptive subsampling.

Arguments

Type IntentOptional Attributes Name
type(ply_sampling_adaptive_type), intent(out) :: me

Sampling definition to load.

type(flu_State), intent(in) :: conf

Configuration to read the sampling settings from.

integer, intent(in), optional :: parent

Parent table in which to look for the adaptive sampling settings.

public subroutine ply_sample_adaptive(me, ndims, orig_mesh, orig_bcs, varsys, var_degree, lvl_degree, trackInst, trackConfig, time, new_mesh, resvars)

Sample data described by varsys in orig_mesh according to the tracking object trackInst with adaptive refinements.

Read more…

Arguments

Type IntentOptional Attributes Name
type(ply_sampling_adaptive_type), intent(in) :: me

A ply_sampling_type to describe the sampling method.

integer, intent(in) :: ndims

Number of dimensions in the polynomial representation.

type(treelmesh_type), intent(in) :: orig_mesh

The original mesh to be refined.

type(tem_BC_prop_type), intent(in) :: orig_bcs

Boundary conditions for the original mesh.

type(tem_varSys_type), intent(in) :: varsys

Variable system of the original data to do the sampling on.

integer, intent(in) :: var_degree(:)

Maximal polynomial degree for each variable.

Read more…
integer, intent(in) :: lvl_degree(:)

Maximal polynomial degree for each level.

type(tem_tracking_instance_type), intent(in) :: trackInst

Tracking object describing what to sample.

type(tem_tracking_config_type), intent(in) :: trackConfig

Tracking configuration with the geometry to obtain from the overall mesh.

type(tem_time_type), intent(in) :: time

Point in time to get the data for.

type(treelmesh_type), intent(out) :: new_mesh

The new mesh with the refined elements.

type(tem_varSys_type), intent(out) :: resvars

Resulting system of variables describing the data in the arrays of subsampled elements.

private subroutine get_sampled_element(fun, varSys, elempos, time, tree, n, nDofs, res)

Get sampled data.

Read more…

Arguments

Type IntentOptional Attributes Name
class(tem_varSys_op_type), intent(in) :: fun

Description of the method to obtain the variables, here some preset values might be stored, like the space time function to use or the required variables.

type(tem_varSys_type), intent(in) :: varSys

The variable system to obtain the variable from.

integer, intent(in) :: elempos(:)

TreeID of the element to get the variable for.

type(tem_time_type), intent(in) :: time

Point in time at which to evaluate the variable.

type(treelmesh_type), intent(in) :: tree

global treelm mesh info

integer, intent(in) :: n

Number of elements to obtain for this variable (vectorized access).

integer, intent(in) :: nDofs

Number of degrees of freedom within an element.

real(kind=rk), intent(out) :: res(:)

Resulting values for the requested variable.

Read more…