ply_dynarray_project_module Module

Module providing datatypes and routines for a fast transformation of Legendre expansion to point values.


Uses

  • module~~ply_dynarray_project_module~~UsesGraph module~ply_dynarray_project_module ply_dynarray_project_module aotus_module aotus_module module~ply_dynarray_project_module->aotus_module env_module env_module module~ply_dynarray_project_module->env_module module~ply_prj_header_module ply_prj_header_module module~ply_dynarray_project_module->module~ply_prj_header_module tem_logging_module tem_logging_module module~ply_dynarray_project_module->tem_logging_module module~ply_prj_header_module->aotus_module module~ply_prj_header_module->env_module module~ply_prj_header_module->tem_logging_module aot_out_module aot_out_module module~ply_prj_header_module->aot_out_module module~fftw_wrap fftw_wrap module~ply_prj_header_module->module~fftw_wrap module~ply_fpt_header_module ply_fpt_header_module module~ply_prj_header_module->module~ply_fpt_header_module module~ply_fxt_header_module ply_fxt_header_module module~ply_prj_header_module->module~ply_fxt_header_module module~ply_l2p_header_module ply_l2p_header_module module~ply_prj_header_module->module~ply_l2p_header_module tem_aux_module tem_aux_module module~ply_prj_header_module->tem_aux_module tem_tools_module tem_tools_module module~ply_prj_header_module->tem_tools_module module~fftw_wrap->tem_logging_module module~fftw_wrap->tem_aux_module iso_c_binding iso_c_binding module~fftw_wrap->iso_c_binding module~ply_fpt_header_module->aotus_module module~ply_fpt_header_module->env_module module~ply_fpt_header_module->tem_logging_module module~ply_fpt_header_module->aot_out_module module~ply_fpt_header_module->tem_aux_module module~ply_fpt_header_module->tem_tools_module module~ply_nodes_header_module ply_nodes_header_module module~ply_fpt_header_module->module~ply_nodes_header_module tem_compileconf_module tem_compileconf_module module~ply_fpt_header_module->tem_compileconf_module tem_float_module tem_float_module module~ply_fpt_header_module->tem_float_module module~ply_fxt_header_module->aotus_module module~ply_fxt_header_module->env_module module~ply_fxt_header_module->tem_logging_module module~ply_fxt_header_module->aot_out_module module~ply_fxt_header_module->tem_aux_module module~ply_fxt_header_module->module~ply_nodes_header_module module~ply_fxt_header_module->tem_float_module module~ply_l2p_header_module->aotus_module module~ply_l2p_header_module->env_module module~ply_l2p_header_module->tem_logging_module module~ply_l2p_header_module->aot_out_module module~ply_l2p_header_module->tem_aux_module module~ply_l2p_header_module->tem_tools_module module~ply_l2p_header_module->module~ply_nodes_header_module module~ply_l2p_header_module->tem_float_module module~ply_nodes_header_module->env_module

Used by

  • module~~ply_dynarray_project_module~~UsedByGraph module~ply_dynarray_project_module ply_dynarray_project_module module~atl_initialize_module atl_initialize_module module~atl_initialize_module->module~ply_dynarray_project_module module~atl_load_project_module atl_load_project_module module~atl_load_project_module->module~ply_dynarray_project_module module~ply_poly_project_module ply_poly_project_module module~ply_poly_project_module->module~ply_dynarray_project_module proc~compute_rhs_cubes compute_rhs_cubes proc~compute_rhs_cubes->module~ply_dynarray_project_module proc~compute_rhs_cubes_modg compute_rhs_cubes_modg proc~compute_rhs_cubes_modg->module~ply_dynarray_project_module proc~compute_rhs_cubes_modg_1d compute_rhs_cubes_modg_1d proc~compute_rhs_cubes_modg_1d->module~ply_dynarray_project_module proc~compute_rhs_cubes_modg_2d compute_rhs_cubes_modg_2d proc~compute_rhs_cubes_modg_2d->module~ply_dynarray_project_module proc~modg_1d_compute_project_physflux modg_1d_compute_project_physFlux proc~modg_1d_compute_project_physflux->module~ply_dynarray_project_module proc~preprocess_rhs_cubes preprocess_rhs_cubes proc~preprocess_rhs_cubes->module~ply_dynarray_project_module proc~test_project_stabviscnumflux test_project_stabViscNumFlux proc~test_project_stabviscnumflux->module~ply_dynarray_project_module program~approximate_1d_jump approximate_1D_jump program~approximate_1d_jump->module~ply_dynarray_project_module program~ply_project_2d_fpt_lobattopoints_test ply_project_2d_fpt_lobattoPoints_test program~ply_project_2d_fpt_lobattopoints_test->module~ply_dynarray_project_module program~ply_project_2d_fpt_test ply_project_2d_fpt_test program~ply_project_2d_fpt_test->module~ply_dynarray_project_module program~ply_project_fpt_lobattopoints_test ply_project_fpt_lobattoPoints_test program~ply_project_fpt_lobattopoints_test->module~ply_dynarray_project_module program~ply_project_fpt_test ply_project_fpt_test program~ply_project_fpt_test->module~ply_dynarray_project_module program~test_fxtd_n2m2n test_fxtd_n2m2n program~test_fxtd_n2m2n->module~ply_dynarray_project_module

Interfaces

public interface operator(==)

  • private pure function isEqual(left, right) result(equality)

    This function provides the test for equality of two projections.

    Two projections are considered to be equal, if their kind, nodes_kind, maxPolyDegree and oversampling are equal.

    Arguments

    Type IntentOptional Attributes Name
    type(ply_prj_init_type), intent(in) :: left

    projection to compare

    type(ply_prj_init_type), intent(in) :: right

    projection to compare against

    Return Value logical

    is equal??

public interface operator(/=)

  • private pure function isUnequal(left, right) result(unequality)

    This function provides the test for unequality of two projections.

    Two projections are considered to be unequal, if their kind, nodes_kind, maxpolydegree or factor are not equal.

    Arguments

    Type IntentOptional Attributes Name
    type(ply_prj_init_type), intent(in) :: left

    projection to compare

    type(ply_prj_init_type), intent(in) :: right

    projection to compare against

    Return Value logical

    is unequal??

public interface operator(<)

  • private pure function isSmaller(left, right) result(small)

    This function provides a < comparison of two projections.

    Sorting of projections is given by maxPolyDegree, kind, nodes_kind and last by factor.

    Arguments

    Type IntentOptional Attributes Name
    type(ply_prj_init_type), intent(in) :: left

    projection to compare

    type(ply_prj_init_type), intent(in) :: right

    projection to compare against

    Return Value logical

    is smaller??

public interface operator(<=)

  • private pure function isSmallerOrEqual(left, right) result(small)

    This function provides a <= comparison of two projections.

    Sorting of projections is given by maxPolyDegree, kind, nodes_kind and last by factor.

    Arguments

    Type IntentOptional Attributes Name
    type(ply_prj_init_type), intent(in) :: left

    projection to compare

    type(ply_prj_init_type), intent(in) :: right

    projection to compare against

    Return Value logical

    is smaller??

public interface operator(>)

  • private pure function isGreater(left, right) result(great)

    This function provides a > comparison of two projections.

    Sorting of projections is given by maxPolyDegree, kind, nodes_kind and last by factor.

    Arguments

    Type IntentOptional Attributes Name
    type(ply_prj_init_type), intent(in) :: left

    projection to compare

    type(ply_prj_init_type), intent(in) :: right

    projection to compare against

    Return Value logical

    is greater??

public interface operator(>=)

  • private pure function isGreaterOrEqual(left, right) result(great)

    This function provides a >= comparison of two projections.

    Sorting of projections is given by maxPolyDegree, kind, nodes_kind and last by factor.

    Arguments

    Type IntentOptional Attributes Name
    type(ply_prj_init_type), intent(in) :: left

    projection to compare

    type(ply_prj_init_type), intent(in) :: right

    projection to compare against

    Return Value logical

    is greater??

public interface init

initialize the dynamic array

  • private subroutine init_da_projection(me, length)

    initialization of a dynamic array

    before a dynamic array can be used, it has to be initialized with this routine. the initial length provided here, can avoid reallocations and memory copying, if approximated correctly enough. if none is specified, the provided container initially will be of size 0.

    Arguments

    Type IntentOptional Attributes Name
    type(dyn_projectionarray_type), intent(out) :: me
    integer, intent(in), optional :: length

public interface append

append a value to the dynamic array and return its position.

  • private subroutine append_da_projection(me, val, length, pos, wasadded)

    appending a value to the dynamic array

    with this subroutine, a given value can be added to the dynamic array. the actual position of this value in the dynamic array will be returned, so it can be found again easily later. with the wasadded flag, it is indicated,\n wasadded = true, if this entry had to be added,\n wasadded = false, if this was already found in the array.

    Arguments

    Type IntentOptional Attributes Name
    type(dyn_projectionarray_type) :: me
    type(ply_prj_init_type), intent(in) :: val
    integer, intent(in), optional :: length

    optional length to expand the array

    integer, intent(out), optional :: pos

    position in the array, if the value is found

    logical, intent(out), optional :: wasadded

    flag to indicate, if val was newly added

  • private subroutine append_da_vecprojection(me, val, length, pos, wasadded)

    appending a sorted list of values to the dynamic array

    with this subroutine, a given list of sorted values can be added to the dynamic array. the actual positions of these values in the dynamic array will be returned, so it can be found again easily later. with the wasadded flag, it is indicated,\n wasadded = true, if this entry had to be added,\n wasadded = false, if this was already found in the array.

    Arguments

    Type IntentOptional Attributes Name
    type(dyn_projectionarray_type) :: me
    type(ply_prj_init_type), intent(in) :: val(:)
    integer, intent(in), optional :: length

    optional length to expand the array

    integer, intent(out), optional :: pos(:)

    position in the array, the values are found at.

    logical, intent(out), optional :: wasadded(:)

    flag to indicate, if val was newly added

public interface truncate

truncate the array, meaning cut off the trailing empty entries

public interface empty

empty the array, reset nvals to be 0

public interface sorttruncate

fix the dynamic array, meaning: store the array in the sorted order and cut off the trailing empty entries

  • private subroutine sorttruncate_da_projection(me)

    fixing the dynamic array

    truncate the array after the last valid entry and hence cut off the empty trailing empty entries store the array in the sorted order according to the sorted( ) array

    Arguments

    Type IntentOptional Attributes Name
    type(dyn_projectionarray_type) :: me

public interface positionofval

return the position of a given value in the array val, which is what you usually want to know. it is the index of a given value

  • private function posofval_projection(me, val, nextifnotfound, lower, upper) result(pos)

    the actual position of a given value in the dynamic array

    most likely this is what you need in codes, using this data structure, it first does the binary search on the sorted values with sortposofval_projection and then returns the looked up position in the original unsorted array, which corresponds to the position returned by the append routine.

    Arguments

    Type IntentOptional Attributes Name
    type(dyn_projectionarray_type), intent(in) :: me
    type(ply_prj_init_type), intent(in) :: val
    logical, intent(in), optional :: nextifnotfound

    flag to indicate, if the position of the next entry in the sorted list should be returned instead, if val is not found.

    integer, intent(in), optional :: lower
    integer, intent(in), optional :: upper

    Return Value integer

private interface assignment(=)

private interface destroy

destroy the dynamic array

  • private subroutine destroy_da_projection(me)

    destruction of a dynamic array

    this subroutine takes care of a proper destruction of a dynamic array, it frees the allocated memory and resets the internal counts to 0.

    Arguments

    Type IntentOptional Attributes Name
    type(dyn_projectionarray_type), intent(inout) :: me

private interface expand

increase the size of the container for the array.

  • private subroutine expand_da_projection(me, increment, length)

    expanding the dynamic array

    this is a helping subroutine, which doubles the container of the given dynamic array. as the container might be initially 0-sized, a module variable minlength has been introduced, which is used here, to at least create a container of this size.

    Arguments

    Type IntentOptional Attributes Name
    type(dyn_projectionarray_type) :: me
    integer, optional :: increment
    integer, intent(in), optional :: length

    optional length to expand the array

private interface sortedposofval

return the position of a given value in the list 'sorted'. this is mainly for internal usage. the sorted list is only a pointer list to the actual values thus, in order to get the index of a given value, you need to look up the entry in the sorted list. this is done by the positionofval routine

  • private function sortposofval_projection(me, val, nextifnotfound, lower, upper) result(pos)

    return the sorted position of a value in the given dynamic array

    if the value was not found, - return 0 if nextifnotfound = .false. - return position at the end if nextifnotfound = .true.

    binary search on sorted list

    Arguments

    Type IntentOptional Attributes Name
    type(dyn_projectionarray_type), intent(in) :: me
    type(ply_prj_init_type), intent(in) :: val
    logical, intent(in), optional :: nextifnotfound

    flag to indicate, if the next entry in the list should be returned, if the searched one is not found.

    integer, intent(in), optional :: lower
    integer, intent(in), optional :: upper

    Return Value integer


Derived Types

type, public ::  ply_prj_init_type

Projection definition.

Components

Type Visibility Attributes Name Initial
integer, public :: basisType

Polynomial basis type.

Read more…
integer, public :: maxPolyDegree

The maximal polynomial degree per spatial direction.

type(ply_prj_header_type), public :: header

projection header consits of general information like which kind of projection is used

type, public ::  dyn_projectionarray_type

dynamic array (da) type for type(ply_prj_init_type)

Components

Type Visibility Attributes Name Initial
integer, public :: nvals = 0
integer, public :: containersize = 0
type(ply_prj_init_type), public, allocatable :: val(:)
integer, public, allocatable :: sorted(:)

Functions

private function sortposofval_projection(me, val, nextifnotfound, lower, upper) result(pos)

return the sorted position of a value in the given dynamic array

Read more…

Arguments

Type IntentOptional Attributes Name
type(dyn_projectionarray_type), intent(in) :: me
type(ply_prj_init_type), intent(in) :: val
logical, intent(in), optional :: nextifnotfound

flag to indicate, if the next entry in the list should be returned, if the searched one is not found.

integer, intent(in), optional :: lower
integer, intent(in), optional :: upper

Return Value integer

private function posofval_projection(me, val, nextifnotfound, lower, upper) result(pos)

the actual position of a given value in the dynamic array

Read more…

Arguments

Type IntentOptional Attributes Name
type(dyn_projectionarray_type), intent(in) :: me
type(ply_prj_init_type), intent(in) :: val
logical, intent(in), optional :: nextifnotfound

flag to indicate, if the position of the next entry in the sorted list should be returned instead, if val is not found.

integer, intent(in), optional :: lower
integer, intent(in), optional :: upper

Return Value integer

private pure function isEqual(left, right) result(equality)

This function provides the test for equality of two projections.

Read more…

Arguments

Type IntentOptional Attributes Name
type(ply_prj_init_type), intent(in) :: left

projection to compare

type(ply_prj_init_type), intent(in) :: right

projection to compare against

Return Value logical

is equal??

private pure function isUnequal(left, right) result(unequality)

This function provides the test for unequality of two projections.

Read more…

Arguments

Type IntentOptional Attributes Name
type(ply_prj_init_type), intent(in) :: left

projection to compare

type(ply_prj_init_type), intent(in) :: right

projection to compare against

Return Value logical

is unequal??

private pure function isSmaller(left, right) result(small)

This function provides a < comparison of two projections.

Read more…

Arguments

Type IntentOptional Attributes Name
type(ply_prj_init_type), intent(in) :: left

projection to compare

type(ply_prj_init_type), intent(in) :: right

projection to compare against

Return Value logical

is smaller??

private pure function isSmallerOrEqual(left, right) result(small)

This function provides a <= comparison of two projections.

Read more…

Arguments

Type IntentOptional Attributes Name
type(ply_prj_init_type), intent(in) :: left

projection to compare

type(ply_prj_init_type), intent(in) :: right

projection to compare against

Return Value logical

is smaller??

private pure function isGreater(left, right) result(great)

This function provides a > comparison of two projections.

Read more…

Arguments

Type IntentOptional Attributes Name
type(ply_prj_init_type), intent(in) :: left

projection to compare

type(ply_prj_init_type), intent(in) :: right

projection to compare against

Return Value logical

is greater??

private pure function isGreaterOrEqual(left, right) result(great)

This function provides a >= comparison of two projections.

Read more…

Arguments

Type IntentOptional Attributes Name
type(ply_prj_init_type), intent(in) :: left

projection to compare

type(ply_prj_init_type), intent(in) :: right

projection to compare against

Return Value logical

is greater??


Subroutines

public pure subroutine ply_prj_init_define(me, header, maxPolyDegree, basisType)

Define a projection, without filling its body.

Arguments

Type IntentOptional Attributes Name
type(ply_prj_init_type), intent(inout) :: me
type(ply_prj_header_type), intent(in) :: header
integer, intent(in) :: maxPolyDegree
integer, intent(in) :: basisType

public subroutine ply_fill_dynProjectArray(proj_pos, dyn_projectionArray, basisType, maxPolyDegree, conf, parent)

Load settings to describe a projection method from a Lua table.

Arguments

Type IntentOptional Attributes Name
integer, intent(inout) :: proj_pos
type(dyn_projectionarray_type), intent(inout) :: dyn_projectionArray
integer, intent(in) :: basisType
integer, intent(in) :: maxPolyDegree
type(flu_State), intent(in) :: conf
integer, intent(in) :: parent

private subroutine init_da_projection(me, length)

initialization of a dynamic array

Read more…

Arguments

Type IntentOptional Attributes Name
type(dyn_projectionarray_type), intent(out) :: me
integer, intent(in), optional :: length

private subroutine destroy_da_projection(me)

destruction of a dynamic array

Read more…

Arguments

Type IntentOptional Attributes Name
type(dyn_projectionarray_type), intent(inout) :: me

private subroutine append_da_projection(me, val, length, pos, wasadded)

appending a value to the dynamic array

Read more…

Arguments

Type IntentOptional Attributes Name
type(dyn_projectionarray_type) :: me
type(ply_prj_init_type), intent(in) :: val
integer, intent(in), optional :: length

optional length to expand the array

integer, intent(out), optional :: pos

position in the array, if the value is found

logical, intent(out), optional :: wasadded

flag to indicate, if val was newly added

private subroutine append_da_vecprojection(me, val, length, pos, wasadded)

appending a sorted list of values to the dynamic array

Read more…

Arguments

Type IntentOptional Attributes Name
type(dyn_projectionarray_type) :: me
type(ply_prj_init_type), intent(in) :: val(:)
integer, intent(in), optional :: length

optional length to expand the array

integer, intent(out), optional :: pos(:)

position in the array, the values are found at.

logical, intent(out), optional :: wasadded(:)

flag to indicate, if val was newly added

private subroutine truncate_da_projection(me)

truncate the array after the last valid entry and hence cut off the empty trailing empty entries

Arguments

Type IntentOptional Attributes Name
type(dyn_projectionarray_type) :: me

private subroutine empty_da_projection(me)

empty all contents of the array without changing the size or status of any array

Arguments

Type IntentOptional Attributes Name
type(dyn_projectionarray_type) :: me

private subroutine sorttruncate_da_projection(me)

fixing the dynamic array

Read more…

Arguments

Type IntentOptional Attributes Name
type(dyn_projectionarray_type) :: me

private subroutine expand_da_projection(me, increment, length)

expanding the dynamic array

Read more…

Arguments

Type IntentOptional Attributes Name
type(dyn_projectionarray_type) :: me
integer, optional :: increment
integer, intent(in), optional :: length

optional length to expand the array

private pure subroutine Copy_ply_prj_init(left, right)

Arguments

Type IntentOptional Attributes Name
type(ply_prj_init_type), intent(out) :: left

fpt to copy to

type(ply_prj_init_type), intent(in) :: right

fpt to copy from