ScalES-PPM
Loading...
Searching...
No Matches
ppm_compact_mask_index Module Reference

ppm_compact_mask_index.f90 supposing you have a mask array and use it in something like a WHERE, then it can be beneficial to only visit those indices of the array expression with the condition evaluating to .TRUE., in case this is relatively sparse or the ensuing conditional is expensive in comparison to the WHERE/FORALL body More...

Data Types

interface  index_from_mask
 compute index from mask array More...
 
interface  index_from_mask_mt
 compute index from mask array, multi-threaded variant More...
 
type  range_compact_2d
 describe contiguous range in 2d mask More...
 
type  range_compact_3d
 

Functions/Subroutines

pure subroutine build_ranges_2d (mask, offsets, sseq, idx)
 
pure integer function count_ranges_2d (mask, sseq)
 
pure subroutine index_from_mask_2d (idx, mask, offsets, sseq)
 compute index from mask array
 
integer function build_ranges_3d (mask, sizes, strides, sseq, offsets, idx)
 
subroutine index_from_mask_3d (idx, mask, offsets, sseq)
 construct compact index from mask
 
integer function build_ranges_mt_3d (mask, sizes, strides, sseq, offsets, idx)
 
subroutine index_from_mask_mt_3d (idx, mask, offsets, sseq)
 construct compact index from mask
 

Detailed Description

ppm_compact_mask_index.f90 supposing you have a mask array and use it in something like a WHERE, then it can be beneficial to only visit those indices of the array expression with the condition evaluating to .TRUE., in case this is relatively sparse or the ensuing conditional is expensive in comparison to the WHERE/FORALL body

This index variation addresses the case where each range in the subscript varied most rapidly (ll) corresponds to a change in at least one slower (hl) subscript.

Function/Subroutine Documentation

◆ index_from_mask_2d()

pure subroutine ppm_compact_mask_index::index_from_mask_2d ( type(range_compact_2d), dimension(:), intent(out), allocatable idx,
logical, dimension(:, :), intent(in) mask,
integer, dimension(2), intent(in), optional offsets,
integer, dimension(2), intent(in), optional sseq )
private

compute index from mask array

Parameters
idxindex to construct
maskto be indexed
offsetslow bounds of mask (if not present assumed to be 1)
sseqsequence in which to travel indices, e.g. if mask is transposed, one would pass (/ 2, 1 /) to the routine

◆ index_from_mask_3d()

subroutine ppm_compact_mask_index::index_from_mask_3d ( type(range_compact_3d), dimension(:), intent(out), allocatable idx,
logical, dimension(:, :, :), intent(in) mask,
integer, dimension(3), intent(in), optional offsets,
integer, dimension(3), intent(in), optional sseq )
private

construct compact index from mask

Parameters
idxindex to construct
maskto be indexed
offsetslow bounds of mask (if not present assumed to be 1)
sseqsubscript sequence i.e. sequence by which to store ranges in index

◆ index_from_mask_mt_3d()

subroutine ppm_compact_mask_index::index_from_mask_mt_3d ( type(range_compact_3d), dimension(:), intent(out), allocatable idx,
logical, dimension(:, :, :), intent(in) mask,
integer, dimension(3), intent(in), optional offsets,
integer, dimension(3), intent(in), optional sseq )
private

construct compact index from mask

this version must be called from outside an OpenMP parallel region because it will open its own region

Parameters
idxindex to construct
maskto be indexed
offsetslow bounds of mask (if not present assumed to be 1)
sseqsubscript sequence i.e. sequence by which to store ranges in index

Das diesem Bericht zugrundeliegende Vorhaben wurde mit Mitteln des Bundesministeriums für Bildung, und Forschung unter dem Förderkennzeichen 01IH08004E gefördert. Die Verantwortung für den Inhalt dieser Veröffentlichung liegt beim Autor.