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.
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. |
Configuration of the adaptive sampling.
Type | Visibility | Attributes | Name | Initial | |||
---|---|---|---|---|---|---|---|
integer, | private | :: | max_nlevels | = | 0 | Maximal number of levels by which any mesh element should be refined. |
|
real(kind=rk), | private | :: | eps_osci | Maximum allowed oscillation of the solution. For adaptive subsampling only. |
|||
integer, | private | :: | reduction_mode | Method to use for the reduction. |
|||
logical, | private | :: | 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. |
|
integer, | private | :: | dof_decrement | = | 1 | Number of modes to cut off in each refinement. |
|
real(kind=rk), | private | :: | 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, | private | :: | adaptiveDofReduction | Indicator for the limitation of memory consumption. |
|||
integer, | private | :: | AbsUpperBoundLevel | Absolute upper bound level to refine to. |
|||
type(ply_filter_element_type), | private | :: | filter_element | Filtering the poylnomial modes during adaptive refinement. |
Small helping type to allow arrays of arrays for the variable data.
Type | Visibility | Attributes | Name | Initial | |||
---|---|---|---|---|---|---|---|
real(kind=rk), | private, | pointer | :: | dat(:) | => | NULL() |
A container for the method data to hold the data in a scalar pointer for the C-pointer conversion.
Type | Visibility | Attributes | Name | Initial | |||
---|---|---|---|---|---|---|---|
type(realarray_type), | private, | allocatable | :: | component(:) |
Load the configuration for adaptive subsampling.
Type | Intent | Optional | 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. |
Sample data described by varsys in orig_mesh according to the tracking object trackInst with adaptive refinements.
Type | Intent | Optional | 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. Needs to be matching the variable definition in the variable system. TodoNeeds to be changed to be an information per element per variable! Possibly by defining a variable in the varsys, providing the degree. |
||
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. |
Get sampled data.
Type | Intent | Optional | 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. Linearized array dimension: (nComponents of resulting variable) x (nDegrees of freedom) x (nElems) Access: (iElem-1)fun%nComponentsnDofs + (iDof-1)*fun%nComponents + iComp |