sdr_node_module Module

This module implements the description of a node in the tree that is going to be created by Seeder.


Uses

Used by

  • module~~sdr_node_module~~UsedByGraph module~sdr_node_module sdr_node_module module~sdr_proto2treelm_module sdr_proto2treelm_module module~sdr_proto2treelm_module->module~sdr_node_module module~sdr_boundary_module sdr_boundary_module module~sdr_proto2treelm_module->module~sdr_boundary_module module~sdr_prototree_module sdr_protoTree_module module~sdr_proto2treelm_module->module~sdr_prototree_module module~sdr_refinept_module sdr_refinePT_module module~sdr_refinept_module->module~sdr_node_module module~sdr_refinept_module->module~sdr_prototree_module module~sdr_boundary_module->module~sdr_node_module module~sdr_boundary_module->module~sdr_prototree_module module~sdr_prototree_module->module~sdr_node_module module~sdr_flooding_module sdr_flooding_module module~sdr_flooding_module->module~sdr_node_module module~sdr_flooding_module->module~sdr_boundary_module module~sdr_flooding_module->module~sdr_prototree_module program~seeder seeder program~seeder->module~sdr_proto2treelm_module program~seeder->module~sdr_refinept_module program~seeder->module~sdr_prototree_module program~seeder->module~sdr_flooding_module

Contents


Variables

TypeVisibilityAttributesNameInitial
integer, public, parameter:: isLeaf_bit =1

This bit is set, if the node is a leaf, that is there are no further descendants.

integer, public, parameter:: IntersectsBoundary_bit =2

If this bit is set, the node intersects some computational domain boundary.

integer, public, parameter:: hasBoundary_bit =3

If any of 26 direct neighbor is intersected by boundary

integer, public, parameter:: isFluidifyable_bit =4

This bit is set, if the node is a fluidifyable that can be fluidify in solver

integer, public, parameter:: isFlooded_bit =5

If the node is flooded by any color, this bit is set. It is useful to identify elements, that belong to the computational domain.

integer, public, parameter:: isColored_bit =6

Indicating if the node is colored with an non-none color.

This is used to filter none colors when transferring the information from the prototree to the treelm data structure.

integer, public, parameter:: isTarget_bit =7

Indicates if this node is one that is to be included in the final mesh.

It is needed to distinguish such nodes, which are refined further for subelement resolution of boundaries, from ordinary virtual nodes.

integer, public, parameter:: isNoSolidification_bit =0

This bit is set, if solidification is not allowed for the node


Interfaces

public interface init

initialize the dynamic array

public interface truncate

truncate the array, meaning cut off the trailing empty entries

public interface empty

empty the entries without changing arrays

public interface destroy

destroy the dynamic array

public interface placeat

insert an element at a given position

public interface append

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

public interface sdr_wetNeighborsFace

  • private subroutine sdr_wetNeighborsFace_single(node, iNode, col_int, col_bit)

    This routine will wet the neighbors sides of the neighbor node

    Read more…

    Arguments

    TypeIntentOptionalAttributesName
    type(sdr_node_type), intent(inout) :: node

    List of all nodes in the tree

    integer, intent(in) :: iNode

    Current node

    integer, intent(in) :: col_int
    integer, intent(in) :: col_bit
  • private subroutine sdr_wetNeighborsFace_all(node, iNode)

    This routine will wet the neighbors sides of the neighbor node in all colors, that are flooded.

    Read more…

    Arguments

    TypeIntentOptionalAttributesName
    type(sdr_node_type), intent(inout) :: node

    List of all nodes in the tree

    integer, intent(in) :: iNode

    Current node

  • private subroutine sdr_append_childIntersectedObjectAll(node, parent, testAll, intersected_object, grwObjPos, child_nodePos, child_nObjects, child_intersected_object, child_objPos, memLeft)

    This routine appends temporary child intersected object to actual growing array of intersected objects. To reduce memory usuage, the child with maximum number of intersected objects from parent is appended at same position as its parent. Rest of the childrens intersected objects are appended to the end of growing array

    Arguments

    TypeIntentOptionalAttributesName
    type(sdr_node_type), intent(in) :: node

    contains information about all nodes in protoTree

    integer, intent(in) :: parent

    Position of parent node

    logical, intent(in) :: testAll

    true for level 1 nodes

    type(grw_intarray_type), intent(inout) :: intersected_object

    Growing array of intersected objects. Could be user defined or distance refine spatial objects

    type(grw_intersectobjposarray_type), intent(inout) :: grwObjPos

    First and last position of intersected object of all nodes in intersected_object list

    integer, intent(in) :: child_nodePos(8)

    8 children node position in protoTree

    integer, intent(in) :: child_nObjects(8)

    number of intersected objets in 8 children

    type(grw_intarray_type), intent(inout) :: child_intersected_object

    Temporary array of intersected objects for 8 children

    type(sdr_intersectObjPos_type), intent(in) :: child_objPos(8)

    first and last index of intersected objects of 8 children in child_intersected_object list

    integer, intent(out) :: memLeft

    memory of parent intersected object unused by children

  • private subroutine sdr_append_childIntersectedObjectGTminLevel(geometry, node, parent, testAll, intersected_object, grwObjPos, child_nodePos, child_intersected_object, child_objPos, memLeft)

    This routine appends temporary child intersected object to actual growing array of intersected objects. To reduce memory usuage, the child with maximum number of intersected objects from parent is appended at same position as its parent. Rest of the childrens intersected objects are appended to the end of growing array.

    Read more…

    Arguments

    TypeIntentOptionalAttributesName
    type(sdr_geometry_type), intent(in) :: geometry

    type which contains all geometry object infos

    type(sdr_node_type), intent(in) :: node

    contains information about all nodes in protoTree

    integer, intent(in) :: parent

    Position of parent node

    logical, intent(in) :: testAll

    true for level 1 nodes

    type(grw_intarray_type), intent(inout) :: intersected_object

    Growing array of intersected objects. Could be user defined or distance refine spatial objects

    type(grw_intersectobjposarray_type), intent(inout) :: grwObjPos

    First and last position of intersected object of all nodes in intersected_object list

    integer, intent(in) :: child_nodePos(8)

    8 children node position in protoTree

    type(grw_intarray_type), intent(inout) :: child_intersected_object

    Temporary array of intersected objects for 8 children

    type(sdr_intersectObjPos_type), intent(in) :: child_objPos(8)

    first and last index of intersected objects of 8 children in child_intersected_object list

    integer, intent(out) :: memLeft

    memory of parent intersected object unused by children

private interface expand

increase the size of the container for the array.

private interface init

initialize the dynamic array

  • private subroutine init_ga_grwint(me, length)

    Arguments

    TypeIntentOptionalAttributesName
    type(grw_grwintarray_type), intent(out) :: me
    integer, intent(in), optional :: length

private interface truncate

truncate the array, meaning cut off the trailing empty entries

private interface empty

empty the entries without changing arrays

private interface destroy

destroy the dynamic array

private interface placeat

insert an element at a given position

  • private subroutine placeat_ga_grwint(me, val, pos, length)

    adds the value to a given position inside the growing array.

    Read more…

    Arguments

    TypeIntentOptionalAttributesName
    type(grw_grwintarray_type) :: me
    type(grw_intarray_type), intent(in) :: val
    integer, intent(in) :: pos
    integer, intent(in), optional :: length

    optional length to expand the array

  • private subroutine placeat_ga_grwint_vec(me, val, pos, length)

    adds the values starting from a given position inside the growing array.

    Read more…

    Arguments

    TypeIntentOptionalAttributesName
    type(grw_grwintarray_type) :: me
    type(grw_intarray_type), intent(in) :: val(:)
    integer, intent(in) :: pos
    integer, intent(in), optional :: length

    optional length to expand the array

private interface append

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

private interface expand

increase the size of the container for the array.

  • private subroutine expand_ga_grwint(me, pos, length)

    Arguments

    TypeIntentOptionalAttributesName
    type(grw_grwintarray_type) :: me
    integer, intent(in), optional :: pos
    integer, intent(in), optional :: length

    optional length to expand the array

private interface init

  • private subroutine init_node(me, nColors, none_color_id, distanceRefine, nSublevels, length)

    Initialize the node type.

    Arguments

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

    The nodelist to initialize.

    integer, intent(in) :: nColors

    Number of different colors that are to be used.

    integer, intent(in) :: none_color_id

    Id of the color with the 'none' label, this color will be ignored in the treelm color data. It has to be -1, if there is no none color.

    logical, intent(in) :: distanceRefine

    If any boundary attribute has distance refine

    integer, intent(in) :: nSublevels

    Number of levels to refine beyond target element levels for boundaries, that require this. Has to be 0, if there are no such boundaries.

    integer, intent(in), optional :: length

    Initial length for the list of nodes.

private interface append

  • private subroutine append_newNode(me, treeID, PropertyBits, sublevel, minLevel, pos, grwTreeID)

    Append a new node to the protoTree.

    Read more…

    Arguments

    TypeIntentOptionalAttributesName
    type(sdr_node_type), intent(inout) :: me

    The nodelist to which the node is to be appended.

    integer(kind=long_k), intent(in) :: treeID

    The treeID of the node to append.

    integer, intent(in) :: PropertyBits(:)

    The Bitmask of initial properties to set.

    integer, intent(in) :: sublevel

    Sublevel indication, counts down after the target node. Has to be negative if not a subelement. Only relevant if subelement_resolution > 0.

    Refinement will be stopped, when sublevel 0 is reached.

    integer, intent(in) :: minLevel

    Minlevel to refine this node

    integer, intent(out) :: pos

    Position in the list, where the node was appended.

    type(grw_longarray_type), intent(inout), optional :: grwTreeID

    growing array of treeID, append treeID to this list if present

private interface truncate

  • private subroutine truncate_node(me)

    Truncate the growing arrays in the node list to their actual size.

    Arguments

    TypeIntentOptionalAttributesName
    type(sdr_node_type), intent(inout) :: me

    The nodelist to initialize.


Derived Types

type, public :: sdr_intersectObjPos_type

This data type describes first and last intersected object of a node in growing array of intersected_objects.

Read more…

Components

TypeVisibilityAttributesNameInitial
integer, private :: first

First position of intersected object in 1st list

integer, private :: last

Last position of intersected object in 1st list

growing array type for type(sdr_intersectobjpos_type)

Components

TypeVisibilityAttributesNameInitial
integer, private :: nvals =0
integer, private :: containersize =0
type(sdr_intersectObjPos_type), private, allocatable:: val(:)

type, public :: sdr_node_type

This data type describes a node in the tree to be created.

Components

TypeVisibilityAttributesNameInitial
integer, private :: nNodes =0

Number of nodes in this list.

integer, private :: propLength =1

Number of integers to encode the properties. This depends on the number of colors and defines the size of the the first dimension (width) in the grw_int2dArray propertyBits.

integer, private :: bytes_per_int

Auxilary value to provide the number of bytes available per integer in the propertybits.

integer, private :: lastbyte_pos

Indicator for the starting bit of the last byte in the propertybits.

integer, private :: nColors

Counter for the number of colors in the mesh.

integer, private :: none_color_id

Id of the 'none' color, this color will not be considered in the final color information for treelm.

Read more…
integer, private :: nColorChars

Number of characters needed to hold all colors.

integer, private :: subelement_resolution

Number of levels, that need to be further refined for colors with subelement resolution.

Read more…
logical, private :: distanceRefine =.false.

True if distance refine objects are created for boundary attribute.

Read more…
type(dyn_longarray_type), private :: treeID

List of treeIDs for all the nodes in the built tree.

Read more…
type(grw_int2darray_type), private :: PropertyBits

The property bits can be used to attach various information to the element. They can span multiple integers (width of the 2d growing array) and all bytes except the very last one are used to encode colors (1 byte per color).

Read more…
type(grw_intarray_type), private :: hasBndBits

Store which of 26 directions of node has boundary. Uses first 26 bits of the integer with each bit corresponds to treelm direction given by qOffset in tem_param_module

type(grw_intarray_type), private :: minBCID

Minimum boundary ID intersect by the node

Read more…
type(grw_intarray_type), private :: intersected_object

List of all objects intersecting this node.

Read more…
type(grw_intersectobjposarray_type), private :: userObjPos

First and last position of this node's intersected objects in growing array of intersected_object

type(grw_intarray_type), private :: intersected_distance

List of all sphere_distance objects intersecting this node

type(grw_intersectobjposarray_type), private :: distObjPos

First and last position of this node's intersected distance refine objects in growing array of intersected_distance

integer, private :: memLeft_userObj

Memory unused by children from parent intersected object list

integer, private :: memLeft_distObj

Memory unused by children from parent intersected distance list

type(grw_intarray_type), private :: minLevel

minLevel for each node. Used in refineleaf and inherit distance refine object. If intersected object level is <= minLevel then that object is not added to intersected object list for children. This should reduce memory to inHerit lot of intersected objects to children

type(grw_intarray_type), private :: linkpos(6)

This is used to store the location of the 6 neighbors for leaf nodes and the first child for virtual nodes at linkpos(1).

Read more…
type(grw_intarray_type), private :: sublevel

If subelement resolution is required, the sublevel keeps track of how deep the subelement resolution is below the target element.

Read more…

type, private :: grw_grwintarray_type

growing array type for type(grw_intarray_type)

Components

TypeVisibilityAttributesNameInitial
integer, private :: nvals =0
integer, private :: containersize =0
type(grw_intarray_type), private, allocatable:: val(:)

Functions

public pure function sdr_nodeProp_btest(node, iNode, bit) result(isSet)

Set a bit in the last byte of the node properties in a given node.

Read more…

Arguments

TypeIntentOptionalAttributesName
type(sdr_node_type), intent(in) :: node
integer, intent(in) :: iNode
integer, intent(in) :: bit

Return Value logical

public pure function sdr_inHeritBnd_eligibleChildren(node, iNode) result(child_hasBnd)

If parent has hasBoundary_bit then this function will inherit this property to eligible childrens

Arguments

TypeIntentOptionalAttributesName
type(sdr_node_type), intent(in) :: node

Description of the nodes in the prototree.

integer, intent(in) :: iNode

Index of the node to evaluate.

Return Value logical(8)

result contains which child has boundary

public function sdr_nodeColors(node, iNode) result(colchar)

Return all colors of the given node encoded in an array of characters.

Read more…

Arguments

TypeIntentOptionalAttributesName
type(sdr_node_type), intent(in) :: node

Description of the nodes in the prototree.

integer, intent(in) :: iNode

Index of the node to evaluate.

Return Value character(node%nColorChars)

Gathered color information in an array of characters.

public function sdr_bitfieldColors(node, bitfield) result(colchar)

Return all colors of the given bitfield encoded in an array of characters.

Read more…

Arguments

TypeIntentOptionalAttributesName
type(sdr_node_type), intent(in) :: node

Description of the nodes in the prototree.

integer, intent(in) :: bitfield(:)

Index of the node to evaluate.

Return Value character(node%nColorChars)

Gathered color information in an array of characters.

public function sdr_color_log2char(node, logicals) result(colchar)

Return all colors encoded in an array of characters based on an array of logicals indicating for each color wether it should be set or not.

Read more…

Arguments

TypeIntentOptionalAttributesName
type(sdr_node_type), intent(in) :: node

Description of the nodes in the prototree.

logical, intent(in) :: logicals(:)

Flag for each color wether it should be set or not.

Return Value character(node%nColorChars)

Gathered color information in an array of characters.


Subroutines

public subroutine sdr_set_nodeProp_bit(node, iNode, bit)

Set a bit in the last byte of the node properties in a given node.

Read more…

Arguments

TypeIntentOptionalAttributesName
type(sdr_node_type), intent(inout) :: node
integer, intent(in) :: iNode
integer, intent(in) :: bit

public subroutine sdr_clear_nodeProp_bit(node, iNode, bit)

Clear a bit in the last byte of the node properties in a given node.

Read more…

Arguments

TypeIntentOptionalAttributesName
type(sdr_node_type), intent(inout) :: node
integer, intent(in) :: iNode
integer, intent(in) :: bit

public subroutine sdr_mark_floodNode(node, iNode, nFloodedLeaves, color)

This routine floods the node with the given color and increases nFloodedLeaves.

Arguments

TypeIntentOptionalAttributesName
type(sdr_node_type), intent(inout) :: node

Node object

integer, intent(in) :: iNode

Node to modify

integer, intent(inout) :: nFloodedLeaves

Number of flooded leaves to increase

integer, intent(in) :: color

Color to set in the given bitfield

private subroutine init_ga_intersectobjpos(me, length)

Arguments

TypeIntentOptionalAttributesName
type(grw_intersectobjposarray_type), intent(out) :: me
integer, intent(in), optional :: length

private subroutine destroy_ga_intersectobjpos(me)

Arguments

TypeIntentOptionalAttributesName
type(grw_intersectobjposarray_type), intent(inout) :: me

private subroutine truncate_ga_intersectobjpos(me)

Arguments

TypeIntentOptionalAttributesName
type(grw_intersectobjposarray_type) :: me

private subroutine empty_ga_intersectobjpos(me)

Arguments

TypeIntentOptionalAttributesName
type(grw_intersectobjposarray_type) :: me

private subroutine placeat_ga_intersectobjpos(me, val, pos, length)

adds the value to a given position inside the growing array.

Read more…

Arguments

TypeIntentOptionalAttributesName
type(grw_intersectobjposarray_type) :: me
type(sdr_intersectObjPos_type), intent(in) :: val
integer, intent(in) :: pos
integer, intent(in), optional :: length

optional length to expand the array

private subroutine placeat_ga_intersectobjpos_vec(me, val, pos, length)

adds the values starting from a given position inside the growing array.

Read more…

Arguments

TypeIntentOptionalAttributesName
type(grw_intersectobjposarray_type) :: me
type(sdr_intersectObjPos_type), intent(in) :: val(:)
integer, intent(in) :: pos
integer, intent(in), optional :: length

optional length to expand the array

private subroutine append_ga_intersectobjpos(me, val, length)

Arguments

TypeIntentOptionalAttributesName
type(grw_intersectobjposarray_type) :: me
type(sdr_intersectObjPos_type), intent(in) :: val
integer, intent(in), optional :: length

optional length to expand the array

private subroutine append_ga_intersectobjpos_vec(me, val, length)

Arguments

TypeIntentOptionalAttributesName
type(grw_intersectobjposarray_type) :: me
type(sdr_intersectObjPos_type), intent(in) :: val(:)
integer, intent(in), optional :: length

optional length to expand the array

private subroutine expand_ga_intersectobjpos(me, pos, length)

Arguments

TypeIntentOptionalAttributesName
type(grw_intersectobjposarray_type) :: me
integer, intent(in), optional :: pos
integer, intent(in), optional :: length

optional length to expand the array

private subroutine init_ga_grwint(me, length)

Arguments

TypeIntentOptionalAttributesName
type(grw_grwintarray_type), intent(out) :: me
integer, intent(in), optional :: length

private subroutine destroy_ga_grwint(me)

Arguments

TypeIntentOptionalAttributesName
type(grw_grwintarray_type), intent(inout) :: me

private subroutine truncate_ga_grwint(me)

Arguments

TypeIntentOptionalAttributesName
type(grw_grwintarray_type) :: me

private subroutine empty_ga_grwint(me)

Arguments

TypeIntentOptionalAttributesName
type(grw_grwintarray_type) :: me

private subroutine placeat_ga_grwint(me, val, pos, length)

adds the value to a given position inside the growing array.

Read more…

Arguments

TypeIntentOptionalAttributesName
type(grw_grwintarray_type) :: me
type(grw_intarray_type), intent(in) :: val
integer, intent(in) :: pos
integer, intent(in), optional :: length

optional length to expand the array

private subroutine placeat_ga_grwint_vec(me, val, pos, length)

adds the values starting from a given position inside the growing array.

Read more…

Arguments

TypeIntentOptionalAttributesName
type(grw_grwintarray_type) :: me
type(grw_intarray_type), intent(in) :: val(:)
integer, intent(in) :: pos
integer, intent(in), optional :: length

optional length to expand the array

private subroutine append_ga_grwint(me, val, length)

Arguments

TypeIntentOptionalAttributesName
type(grw_grwintarray_type) :: me
type(grw_intarray_type), intent(in) :: val
integer, intent(in), optional :: length

optional length to expand the array

private subroutine append_ga_grwint_vec(me, val, length)

Arguments

TypeIntentOptionalAttributesName
type(grw_grwintarray_type) :: me
type(grw_intarray_type), intent(in) :: val(:)
integer, intent(in), optional :: length

optional length to expand the array

private subroutine expand_ga_grwint(me, pos, length)

Arguments

TypeIntentOptionalAttributesName
type(grw_grwintarray_type) :: me
integer, intent(in), optional :: pos
integer, intent(in), optional :: length

optional length to expand the array

private subroutine init_node(me, nColors, none_color_id, distanceRefine, nSublevels, length)

Initialize the node type.

Arguments

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

The nodelist to initialize.

integer, intent(in) :: nColors

Number of different colors that are to be used.

integer, intent(in) :: none_color_id

Id of the color with the 'none' label, this color will be ignored in the treelm color data. It has to be -1, if there is no none color.

logical, intent(in) :: distanceRefine

If any boundary attribute has distance refine

integer, intent(in) :: nSublevels

Number of levels to refine beyond target element levels for boundaries, that require this. Has to be 0, if there are no such boundaries.

integer, intent(in), optional :: length

Initial length for the list of nodes.

private subroutine truncate_node(me)

Truncate the growing arrays in the node list to their actual size.

Arguments

TypeIntentOptionalAttributesName
type(sdr_node_type), intent(inout) :: me

The nodelist to initialize.

private subroutine append_newNode(me, treeID, PropertyBits, sublevel, minLevel, pos, grwTreeID)

Append a new node to the protoTree.

Read more…

Arguments

TypeIntentOptionalAttributesName
type(sdr_node_type), intent(inout) :: me

The nodelist to which the node is to be appended.

integer(kind=long_k), intent(in) :: treeID

The treeID of the node to append.

integer, intent(in) :: PropertyBits(:)

The Bitmask of initial properties to set.

integer, intent(in) :: sublevel

Sublevel indication, counts down after the target node. Has to be negative if not a subelement. Only relevant if subelement_resolution > 0.

Refinement will be stopped, when sublevel 0 is reached.

integer, intent(in) :: minLevel

Minlevel to refine this node

integer, intent(out) :: pos

Position in the list, where the node was appended.

type(grw_longarray_type), intent(inout), optional :: grwTreeID

growing array of treeID, append treeID to this list if present

private subroutine sdr_wetNeighborsFace_single(node, iNode, col_int, col_bit)

This routine will wet the neighbors sides of the neighbor node

Read more…

Arguments

TypeIntentOptionalAttributesName
type(sdr_node_type), intent(inout) :: node

List of all nodes in the tree

integer, intent(in) :: iNode

Current node

integer, intent(in) :: col_int
integer, intent(in) :: col_bit

private subroutine sdr_wetNeighborsFace_all(node, iNode)

This routine will wet the neighbors sides of the neighbor node in all colors, that are flooded.

Read more…

Arguments

TypeIntentOptionalAttributesName
type(sdr_node_type), intent(inout) :: node

List of all nodes in the tree

integer, intent(in) :: iNode

Current node

private subroutine sdr_append_childIntersectedObjectAll(node, parent, testAll, intersected_object, grwObjPos, child_nodePos, child_nObjects, child_intersected_object, child_objPos, memLeft)

This routine appends temporary child intersected object to actual growing array of intersected objects. To reduce memory usuage, the child with maximum number of intersected objects from parent is appended at same position as its parent. Rest of the childrens intersected objects are appended to the end of growing array

Arguments

TypeIntentOptionalAttributesName
type(sdr_node_type), intent(in) :: node

contains information about all nodes in protoTree

integer, intent(in) :: parent

Position of parent node

logical, intent(in) :: testAll

true for level 1 nodes

type(grw_intarray_type), intent(inout) :: intersected_object

Growing array of intersected objects. Could be user defined or distance refine spatial objects

type(grw_intersectobjposarray_type), intent(inout) :: grwObjPos

First and last position of intersected object of all nodes in intersected_object list

integer, intent(in) :: child_nodePos(8)

8 children node position in protoTree

integer, intent(in) :: child_nObjects(8)

number of intersected objets in 8 children

type(grw_intarray_type), intent(inout) :: child_intersected_object

Temporary array of intersected objects for 8 children

type(sdr_intersectObjPos_type), intent(in) :: child_objPos(8)

first and last index of intersected objects of 8 children in child_intersected_object list

integer, intent(out) :: memLeft

memory of parent intersected object unused by children

private subroutine sdr_append_childIntersectedObjectGTminLevel(geometry, node, parent, testAll, intersected_object, grwObjPos, child_nodePos, child_intersected_object, child_objPos, memLeft)

This routine appends temporary child intersected object to actual growing array of intersected objects. To reduce memory usuage, the child with maximum number of intersected objects from parent is appended at same position as its parent. Rest of the childrens intersected objects are appended to the end of growing array.

Read more…

Arguments

TypeIntentOptionalAttributesName
type(sdr_geometry_type), intent(in) :: geometry

type which contains all geometry object infos

type(sdr_node_type), intent(in) :: node

contains information about all nodes in protoTree

integer, intent(in) :: parent

Position of parent node

logical, intent(in) :: testAll

true for level 1 nodes

type(grw_intarray_type), intent(inout) :: intersected_object

Growing array of intersected objects. Could be user defined or distance refine spatial objects

type(grw_intersectobjposarray_type), intent(inout) :: grwObjPos

First and last position of intersected object of all nodes in intersected_object list

integer, intent(in) :: child_nodePos(8)

8 children node position in protoTree

type(grw_intarray_type), intent(inout) :: child_intersected_object

Temporary array of intersected objects for 8 children

type(sdr_intersectObjPos_type), intent(in) :: child_objPos(8)

first and last index of intersected objects of 8 children in child_intersected_object list

integer, intent(out) :: memLeft

memory of parent intersected object unused by children