Neko  0.9.0
A portable framework for high-order spectral element flow simulations
aabb_tree Module Reference

Axis Aligned Bounding Box (aabb) Tree data structure. More...

Data Types

type  aabb_node_t
 Node type for the Axis Aligned Bounding Box (aabb) Tree. More...
 
type  aabb_tree_t
 Axis Aligned Bounding Box (aabb) Tree. More...
 

Functions/Subroutines

subroutine aabb_node_init (this)
 Initializes the AABB node. More...
 
pure type(aabb_t) function aabb_node_get_aabb (this)
 Returns the Axis Aligned Bounding Box (aabb) of the node. More...
 
pure integer function aabb_node_get_object_index (this)
 Returns the object index of the node. More...
 
pure integer function aabb_node_get_parent_index (this)
 Returns the parent index of the node. More...
 
pure integer function aabb_node_get_left_index (this)
 Returns the left index of the node. More...
 
pure integer function aabb_node_get_right_index (this)
 Returns the right index of the node. More...
 
real(kind=dp) function aabb_node_min_distance (this, p)
 Get the minimum possible distance from the aabb to a point. More...
 
pure logical function aabb_node_is_leaf (this)
 Returns true if the node is a leaf node. More...
 
pure logical function aabb_node_is_valid (this)
 Returns true if the node is a valid node. More...
 
pure logical function aabb_node_less (this, other)
 Returns true if the node is less than the other node. More...
 
pure logical function aabb_node_greater (this, other)
 Returns true if the node is greater than the other node. More...
 
subroutine aabb_tree_init (this, initial_capacity)
 Initializes the AABB tree. More...
 
subroutine aabb_tree_build_tree (this, objects)
 Builds the tree. More...
 
integer function, dimension(:), allocatable sort (array)
 
integer function aabb_tree_get_size (this)
 Returns the size of the tree, in number of leaves. More...
 
pure integer function aabb_tree_get_root_index (this)
 Returns the index of the root node. More...
 
pure integer function aabb_tree_get_parent_index (this, node_index)
 Returns the index of the parent node of the node at the given index. More...
 
pure integer function aabb_tree_get_left_index (this, node_index)
 Returns the index of the left node of the node at the given index. More...
 
pure integer function aabb_tree_get_right_index (this, node_index)
 Returns the index of the right node of the node at the given index. More...
 
pure type(aabb_node_t) function aabb_tree_get_node (this, node_index)
 Returns the node at the given index. More...
 
pure type(aabb_node_t) function aabb_tree_get_root_node (this)
 Returns the root node of the tree. More...
 
pure type(aabb_node_t) function aabb_tree_get_parent_node (this, node_index)
 Returns the parent node of the node at the given index. More...
 
pure type(aabb_node_t) function aabb_tree_get_left_node (this, node_index)
 Returns the left node of the node at the given index. More...
 
pure type(aabb_node_t) function aabb_tree_get_right_node (this, node_index)
 Returns the right node of the node at the given index. More...
 
pure type(aabb_t) function aabb_tree_get_aabb (this, node_index)
 
subroutine aabb_tree_insert_object (this, object, object_index)
 Inserts an object into the tree. More...
 
subroutine aabb_tree_query_overlaps (this, object, object_index, overlaps)
 Queries the tree for overlapping objects. More...
 
integer function aabb_tree_allocate_node (this)
 Allocates a new node in the tree. More...
 
subroutine aabb_tree_deallocate_node (this, node_index)
 Deallocates a node in the tree. More...
 
subroutine aabb_tree_insert_leaf (this, leaf_node_index)
 Inserts a leaf into the tree. More...
 
logical function aabb_tree_valid_tree (this)
 Validates the tree. More...
 
subroutine aabb_tree_fix_upwards_tree (this, tree_start_index)
 Fixes the tree upwards. More...
 
subroutine aabb_tree_print (this)
 Prints the tree. More...
 
subroutine aabb_tree_resize_node_pool (this, new_capacity)
 Resizes the node pool. More...
 

Variables

integer, parameter, public aabb_null_node = -1
 

Detailed Description

This is a Fortran implementation of an Axis Aligned Bounding Box Tree data structure. The purpose of this is to accelerate a Signed Distance Function and other spatial computations.

Function/Subroutine Documentation

◆ aabb_node_get_aabb()

pure type(aabb_t) function aabb_tree::aabb_node_get_aabb ( class(aabb_node_t), intent(in)  this)
private

Definition at line 210 of file aabb_tree.f90.

◆ aabb_node_get_left_index()

pure integer function aabb_tree::aabb_node_get_left_index ( class(aabb_node_t), intent(in)  this)
private

Definition at line 234 of file aabb_tree.f90.

◆ aabb_node_get_object_index()

pure integer function aabb_tree::aabb_node_get_object_index ( class(aabb_node_t), intent(in)  this)
private

Definition at line 218 of file aabb_tree.f90.

◆ aabb_node_get_parent_index()

pure integer function aabb_tree::aabb_node_get_parent_index ( class(aabb_node_t), intent(in)  this)
private

Definition at line 226 of file aabb_tree.f90.

◆ aabb_node_get_right_index()

pure integer function aabb_tree::aabb_node_get_right_index ( class(aabb_node_t), intent(in)  this)
private

Definition at line 242 of file aabb_tree.f90.

◆ aabb_node_greater()

pure logical function aabb_tree::aabb_node_greater ( class(aabb_node_t), intent(in)  this,
class(aabb_node_t), intent(in)  other 
)
private

Definition at line 304 of file aabb_tree.f90.

◆ aabb_node_init()

subroutine aabb_tree::aabb_node_init ( class(aabb_node_t), intent(inout)  this)

Definition at line 196 of file aabb_tree.f90.

◆ aabb_node_is_leaf()

pure logical function aabb_tree::aabb_node_is_leaf ( class(aabb_node_t), intent(in)  this)
private

Definition at line 263 of file aabb_tree.f90.

◆ aabb_node_is_valid()

pure logical function aabb_tree::aabb_node_is_valid ( class(aabb_node_t), intent(in)  this)
private

Definition at line 272 of file aabb_tree.f90.

◆ aabb_node_less()

pure logical function aabb_tree::aabb_node_less ( class(aabb_node_t), intent(in)  this,
class(aabb_node_t), intent(in)  other 
)
private

Definition at line 294 of file aabb_tree.f90.

◆ aabb_node_min_distance()

real(kind=dp) function aabb_tree::aabb_node_min_distance ( class(aabb_node_t), intent(in)  this,
real(kind=dp), dimension(3), intent(in)  p 
)
private

Definition at line 250 of file aabb_tree.f90.

◆ aabb_tree_allocate_node()

integer function aabb_tree::aabb_tree_allocate_node ( class(aabb_tree_t), intent(inout)  this)

Definition at line 650 of file aabb_tree.f90.

◆ aabb_tree_build_tree()

subroutine aabb_tree::aabb_tree_build_tree ( class(aabb_tree_t), intent(inout)  this,
class(*), dimension(:), intent(in)  objects 
)
private

Definition at line 340 of file aabb_tree.f90.

Here is the call graph for this function:

◆ aabb_tree_deallocate_node()

subroutine aabb_tree::aabb_tree_deallocate_node ( class(aabb_tree_t), intent(inout)  this,
integer, intent(in)  node_index 
)
private

Definition at line 674 of file aabb_tree.f90.

◆ aabb_tree_fix_upwards_tree()

subroutine aabb_tree::aabb_tree_fix_upwards_tree ( class(aabb_tree_t), intent(inout)  this,
integer, intent(in)  tree_start_index 
)

This method is used to fix the tree upwards after an insertion. It is used to expand the nodes of the tree to fit the new leaf node.

Definition at line 877 of file aabb_tree.f90.

◆ aabb_tree_get_aabb()

pure type(aabb_t) function aabb_tree::aabb_tree_get_aabb ( class(aabb_tree_t), intent(in)  this,
integer, intent(in)  node_index 
)
private

Definition at line 578 of file aabb_tree.f90.

◆ aabb_tree_get_left_index()

pure integer function aabb_tree::aabb_tree_get_left_index ( class(aabb_tree_t), intent(in)  this,
integer, intent(in)  node_index 
)
private

Definition at line 510 of file aabb_tree.f90.

◆ aabb_tree_get_left_node()

pure type(aabb_node_t) function aabb_tree::aabb_tree_get_left_node ( class(aabb_tree_t), intent(in)  this,
integer, intent(in)  node_index 
)
private

Definition at line 560 of file aabb_tree.f90.

◆ aabb_tree_get_node()

pure type(aabb_node_t) function aabb_tree::aabb_tree_get_node ( class(aabb_tree_t), intent(in)  this,
integer, intent(in)  node_index 
)
private

Definition at line 533 of file aabb_tree.f90.

◆ aabb_tree_get_parent_index()

pure integer function aabb_tree::aabb_tree_get_parent_index ( class(aabb_tree_t), intent(in)  this,
integer, intent(in)  node_index 
)
private

Definition at line 500 of file aabb_tree.f90.

◆ aabb_tree_get_parent_node()

pure type(aabb_node_t) function aabb_tree::aabb_tree_get_parent_node ( class(aabb_tree_t), intent(in)  this,
integer, intent(in)  node_index 
)
private

Definition at line 550 of file aabb_tree.f90.

◆ aabb_tree_get_right_index()

pure integer function aabb_tree::aabb_tree_get_right_index ( class(aabb_tree_t), intent(in)  this,
integer, intent(in)  node_index 
)
private

Definition at line 520 of file aabb_tree.f90.

◆ aabb_tree_get_right_node()

pure type(aabb_node_t) function aabb_tree::aabb_tree_get_right_node ( class(aabb_tree_t), intent(in)  this,
integer, intent(in)  node_index 
)
private

Definition at line 569 of file aabb_tree.f90.

◆ aabb_tree_get_root_index()

pure integer function aabb_tree::aabb_tree_get_root_index ( class(aabb_tree_t), intent(in)  this)

Definition at line 492 of file aabb_tree.f90.

◆ aabb_tree_get_root_node()

pure type(aabb_node_t) function aabb_tree::aabb_tree_get_root_node ( class(aabb_tree_t), intent(in)  this)
private

Definition at line 542 of file aabb_tree.f90.

◆ aabb_tree_get_size()

integer function aabb_tree::aabb_tree_get_size ( class(aabb_tree_t), intent(in)  this)
private

Definition at line 456 of file aabb_tree.f90.

◆ aabb_tree_init()

subroutine aabb_tree::aabb_tree_init ( class(aabb_tree_t), intent(inout)  this,
integer, intent(in)  initial_capacity 
)
private

Definition at line 318 of file aabb_tree.f90.

◆ aabb_tree_insert_leaf()

subroutine aabb_tree::aabb_tree_insert_leaf ( class(aabb_tree_t), intent(inout)  this,
integer, intent(in)  leaf_node_index 
)
private

Definition at line 684 of file aabb_tree.f90.

◆ aabb_tree_insert_object()

subroutine aabb_tree::aabb_tree_insert_object ( class(aabb_tree_t), intent(inout)  this,
class(*), intent(in)  object,
integer, intent(in)  object_index 
)
private

Definition at line 589 of file aabb_tree.f90.

Here is the call graph for this function:

◆ aabb_tree_print()

subroutine aabb_tree::aabb_tree_print ( class(aabb_tree_t), intent(inout)  this)
private

Definition at line 897 of file aabb_tree.f90.

◆ aabb_tree_query_overlaps()

subroutine aabb_tree::aabb_tree_query_overlaps ( class(aabb_tree_t), intent(in)  this,
class(*), intent(in)  object,
integer, intent(in)  object_index,
integer, dimension(:), intent(out)  overlaps 
)
private

Definition at line 604 of file aabb_tree.f90.

Here is the call graph for this function:

◆ aabb_tree_resize_node_pool()

subroutine aabb_tree::aabb_tree_resize_node_pool ( class(aabb_tree_t), intent(inout)  this,
integer, intent(in)  new_capacity 
)

Definition at line 930 of file aabb_tree.f90.

◆ aabb_tree_valid_tree()

logical function aabb_tree::aabb_tree_valid_tree ( class(aabb_tree_t), intent(in)  this)
private

Definition at line 837 of file aabb_tree.f90.

◆ sort()

integer function, dimension(:), allocatable aabb_tree::sort ( type(aabb_t), dimension(:), intent(in)  array)

Definition at line 425 of file aabb_tree.f90.

Here is the caller graph for this function:

Variable Documentation

◆ aabb_null_node

integer, parameter, public aabb_tree::aabb_null_node = -1

Definition at line 78 of file aabb_tree.f90.