ply_filter_element_module Module

This module provides methods to filter polynomial representation in elements based on their shape.

The main goal of this filtering is to smooth out Gibbs oscillations while maintaining the strong gradients at discontinuities.


Uses

  • module~~ply_filter_element_module~~UsesGraph module~ply_filter_element_module ply_filter_element_module module~tem_logging_module tem_logging_module module~ply_filter_element_module->module~tem_logging_module module~tem_tools_module tem_tools_module module~ply_filter_element_module->module~tem_tools_module module~aot_table_module aot_table_module module~ply_filter_element_module->module~aot_table_module module~env_module env_module module~ply_filter_element_module->module~env_module module~aot_err_module aot_err_module module~ply_filter_element_module->module~aot_err_module module~aotus_module aotus_module module~ply_filter_element_module->module~aotus_module module~tem_aux_module tem_aux_module module~ply_filter_element_module->module~tem_aux_module

Used by

  • module~~ply_filter_element_module~~UsedByGraph module~ply_filter_element_module ply_filter_element_module module~ply_sampling_adaptive_module ply_sampling_adaptive_module module~ply_sampling_adaptive_module->module~ply_filter_element_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 program~sdr_harvesting sdr_harvesting program~sdr_harvesting->module~ply_sampled_tracking_module module~sdr_hvs_config_module sdr_hvs_config_module module~sdr_hvs_config_module->module~ply_sampled_tracking_module

Contents


Variables

TypeVisibilityAttributesNameInitial
integer, private, parameter:: filter_strat_none =0
integer, private, parameter:: filter_strat_oddfract =1

Abstract Interfaces

abstract interface

  • public subroutine ply_filter_element(me, element_degree, element_data)

    Filter the polynomial data in a given element.

    Arguments

    TypeIntentOptionalAttributesName
    class(ply_filter_element_type), intent(in) :: me

    Parameters of the filter.

    integer, intent(in) :: element_degree

    Polynomial degree in the parent element.

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

    Polynomial data in element. The first index describes the degrees of freedom. The second index refers to the elements to filter.


Derived Types

type, public :: ply_filter_element_type

Paramaters describing the filtering to apply to elemental polynomial data.

Components

TypeVisibilityAttributesNameInitial
integer, private :: strategy =filter_strat_none

Filter strategy to use.

integer, private :: max_order

Maximal order for exponential spectral filtering to use where little filtering is to be done.

integer, private :: min_order

Minimal order for exponential spectral filtering to use.

integer, private :: fract_exponent

Exponent to use for the fraction.

procedure(ply_filter_element), private, pointer:: filter1D=> NULL()

Function pointer for 1D filtering

procedure(ply_filter_element), private, pointer:: filter2D=> NULL()

Function pointer for 2D filtering

procedure(ply_filter_element), private, pointer:: filter3D=> NULL()

Function pointer for 3D filtering


Subroutines

public subroutine ply_filter_element_load(me, conf, parent)

Loading parameters for the filtering from the configuration script. This needs to be performed before any call of the actual transformation ply_split_element_1D.

Read more…

Arguments

TypeIntentOptionalAttributesName
type(ply_filter_element_type), intent(out) :: me

Data structure that holds the filter parameters.

type(flu_state) :: conf

Lua script to get the filter parameters from.

integer, intent(in), optional :: parent

Table handle to a possible parent, that contains the filter table to load.

public subroutine ply_filter_element_oddfract(me, nDims, inLen, element_data, filtered_data)

Filter a polynomial representation in elements in one dimension according to its odd mode fraction.

Read more…

Arguments

TypeIntentOptionalAttributesName
class(ply_filter_element_type), intent(in) :: me

Filter parameters.

integer, intent(in) :: nDims

Number of dimensions of the polynomial data.

integer, intent(in) :: inLen(nDims)

Number degrees of freedom for each direction in element_data.

The first index of element_data needs to have a length equal to the product of all inLen components. The splitting operation will be done in the last dimension.

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

Polynomial representation in the elements.

The first index are the degrees of freedom in elements, the second index are the elements. In the first index the shape of data has to be in the form (inLen(1), inLen(2), ... , inLen(nDims)). The filtering operation is performed on the last dimension in that data.

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

The filtered polynomial modes.

The ordering is rotated, such, that the filtered dimension becomes the first one, and all others are shifted by one to the right. Thus, the new data has the layout (inLen(nDims), inLen(1), inLen(2), ...)

private subroutine ply_filter_oddfract_1D(me, element_degree, element_data)

Filter one-dimensional elements of degree element_degree.

Arguments

TypeIntentOptionalAttributesName
class(ply_filter_element_type), intent(in) :: me

Filter parameters.

integer, intent(in) :: element_degree

Polynomial degree in the parent element.

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

Polynomial data in the parent element. The first index describes the degrees of freedom. The second index refers to the elements to split.

private subroutine ply_filter_oddfract_2D(me, element_degree, element_data)

Filter two-dimensional elements of degree element_degree.

Arguments

TypeIntentOptionalAttributesName
class(ply_filter_element_type), intent(in) :: me

Filter parameters.

integer, intent(in) :: element_degree

Polynomial degree in the parent element.

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

Polynomial data in the parent element. The first index describes the degrees of freedom. The second index refers to the elements to split.

private subroutine ply_filter_oddfract_3D(me, element_degree, element_data)

Filter three-dimensional elements of degree element_degree.

Arguments

TypeIntentOptionalAttributesName
class(ply_filter_element_type), intent(in) :: me

Filter parameters.

integer, intent(in) :: element_degree

Polynomial degree in the parent element.

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

Polynomial data in the parent element. The first index describes the degrees of freedom. The second index refers to the elements to split.