tem_box_module Module

routines related to them


Uses

  • module~~tem_box_module~2~~UsesGraph module~tem_box_module~2 tem_box_module module~env_module env_module module~tem_box_module~2->module~env_module module~tem_plane_module tem_plane_module module~tem_box_module~2->module~tem_plane_module module~tem_cube_module tem_cube_module module~tem_box_module~2->module~tem_cube_module module~flu_binding flu_binding module~env_module->module~flu_binding iso_fortran_env iso_fortran_env module~env_module->iso_fortran_env module~aotus_module aotus_module module~env_module->module~aotus_module mpi mpi module~env_module->mpi module~tem_plane_module->module~env_module module~tem_plane_module->module~tem_cube_module module~tem_math_module tem_math_module module~tem_plane_module->module~tem_math_module module~tem_triangle_module tem_triangle_module module~tem_plane_module->module~tem_triangle_module module~tem_cube_module->module~env_module module~tem_aux_module tem_aux_module module~tem_cube_module->module~tem_aux_module module~tem_logging_module tem_logging_module module~tem_cube_module->module~tem_logging_module module~tem_geometry_module tem_geometry_module module~tem_cube_module->module~tem_geometry_module module~tem_cube_module->module~aotus_module module~treelmesh_module treelmesh_module module~tem_cube_module->module~treelmesh_module module~aot_table_module aot_table_module module~tem_cube_module->module~aot_table_module module~tem_aux_module->module~env_module module~tem_aux_module->module~flu_binding module~tem_aux_module->module~tem_logging_module module~tem_aux_module->module~aotus_module module~tem_aux_module->mpi module~tem_aux_module->module~aot_table_module module~tem_lua_requires_module tem_lua_requires_module module~tem_aux_module->module~tem_lua_requires_module module~tem_tools_module tem_tools_module module~tem_aux_module->module~tem_tools_module module~soi_revision_module soi_revision_module module~tem_aux_module->module~soi_revision_module module~tem_comm_env_module tem_comm_env_module module~tem_aux_module->module~tem_comm_env_module module~tem_logging_module->module~env_module module~tem_logging_module->module~aotus_module module~tem_logging_module->module~aot_table_module module~tem_geometry_module->module~env_module module~tem_geometry_module->module~tem_logging_module module~tem_geometry_module->mpi module~tem_geometry_module->module~treelmesh_module module~tem_float_module tem_float_module module~tem_geometry_module->module~tem_float_module module~tem_topology_module tem_topology_module module~tem_geometry_module->module~tem_topology_module module~tem_param_module tem_param_module module~tem_geometry_module->module~tem_param_module module~tem_geometry_module->module~tem_tools_module module~tem_debug_module tem_debug_module module~tem_geometry_module->module~tem_debug_module module~tem_property_module tem_property_module module~tem_geometry_module->module~tem_property_module module~tem_subtree_type_module tem_subTree_type_module module~tem_geometry_module->module~tem_subtree_type_module module~tem_math_module->module~env_module module~tem_math_module->module~tem_aux_module module~tem_math_module->module~tem_logging_module module~tem_matrix_module tem_matrix_module module~tem_math_module->module~tem_matrix_module module~tem_triangle_module->module~env_module module~tem_triangle_module->module~tem_cube_module module~tem_triangle_module->module~tem_aux_module module~tem_triangle_module->module~tem_logging_module module~tem_triangle_module->module~aotus_module module~tem_triangle_module->module~tem_math_module module~tem_triangle_module->module~aot_table_module module~tem_transformation_module tem_transformation_module module~tem_triangle_module->module~tem_transformation_module module~aot_out_module aot_out_module module~tem_triangle_module->module~aot_out_module module~treelmesh_module->module~env_module module~treelmesh_module->module~tem_aux_module module~treelmesh_module->module~tem_logging_module module~treelmesh_module->module~aotus_module module~treelmesh_module->mpi module~treelmesh_module->module~aot_table_module module~treelmesh_module->module~tem_topology_module module~tem_sparta_module tem_Sparta_module module~treelmesh_module->module~tem_sparta_module module~treelmesh_module->module~tem_tools_module module~treelmesh_module->module~tem_property_module module~tem_global_module tem_global_module module~treelmesh_module->module~tem_global_module

Contents


Interfaces

public interface init

initialize the dynamic array

  • private subroutine init_ga_box(me, length)

    Arguments

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

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

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

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

    if the requested position is outside the current array bounds, the array will be resized accordingly. if it is inside the current array bounds, the element at the requested position will be replaced.

    Arguments

    Type IntentOptional Attributes Name
    type(grw_boxarray_type) :: me
    type(tem_box_type), intent(in) :: val
    integer, intent(in) :: pos
    integer, intent(in), optional :: length

    optional length to expand the array

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

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

    if the requested position is outside the current array bounds, the array will be resized accordingly. if it is inside the current array bounds, the elements starting from the requested position will be replaced up to the element at position pos + size(val) - 1.

    Arguments

    Type IntentOptional Attributes Name
    type(grw_boxarray_type) :: me
    type(tem_box_type), intent(in) :: val(:)
    integer, intent(in) :: pos
    integer, intent(in), optional :: length

    optional length to expand the array

public interface append

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

  • private subroutine append_ga_box(me, val, length)

    Arguments

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

    optional length to expand the array

  • private subroutine append_ga_box_vec(me, val, length)

    Arguments

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

    optional length to expand the array

private interface expand

increase the size of the container for the array.

  • private subroutine expand_ga_box(me, pos, length)

    Arguments

    Type IntentOptional Attributes Name
    type(grw_boxarray_type) :: me
    integer, intent(in), optional :: pos
    integer, intent(in), optional :: length

    optional length to expand the array


Derived Types

type, public ::  tem_box_type

This type contains origin and vec of box in each direction

Components

Type Visibility Attributes Name Initial
real(kind=rk), public :: center(3)

center of the box

real(kind=rk), public :: halfvec(3,3)

vector which defines length of the box in x,y,z direction 1st dimension contains x,y,z coord and 2nd dimension defines three direction of vector. This vector is need to do transformation of box

real(kind=rk), public :: halfwidth(3)

halfwidth of the box from center in each direction. It is computed from halfvec during initialization since it is needed for boxboxoverlap

real(kind=rk), public :: normal(3,3)

unit normal vectors which defines the box orientation. It is computed from halfvec during initialization

logical, public :: only_surface

To choose what to do with intersection of box if only_surface = true than the only the surface of the object is intersected if only_surface = false then the whole object is intersected default is set to false

type(tem_plane_type), public :: plane(6)

For only_surface, box is converted into 6 planes and each plane is converted further into triangles

type, public ::  grw_boxarray_type

growing array type for type(tem_box_type)

Components

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

Functions

public function tem_boxCubeOverlap(box, cube) result(overlap)

This function checks for intersection of box and cube

Read more…

Arguments

Type IntentOptional Attributes Name
type(tem_box_type), intent(in) :: box
type(tem_cube_type), intent(in) :: cube

Return Value logical

private function boxBoxOverlap(center_a, dim_a, center_b, dim_b, norm_b) result(overlap)

This function checks for intersection of a axis aligned box and a parallelepiped.

Arguments

Type IntentOptional Attributes Name
real(kind=rk), intent(in) :: center_a(3)
real(kind=rk), intent(in) :: dim_a(3)
real(kind=rk), intent(in) :: center_b(3)
real(kind=rk), intent(in) :: dim_b(3)

Halflength of the parallelepiped in each direction.

Read more…
real(kind=rk), intent(in) :: norm_b(3,3)

Return Value logical


Subroutines

public subroutine tem_createBox(me, origin, vecA, vecB, vecC, only_surface)

This routine creates box from canoND definition i.en origin and three vectors. If only_surface is defined then box is converted further to plane and then to triangles. \verbatim vecB_vecC /\ - | | - | | - | | - | |- | |------------>| origin vecA \endverbatim

Arguments

Type IntentOptional Attributes Name
type(tem_box_type), intent(out) :: me
real(kind=rk), intent(in) :: origin(3)
real(kind=rk), intent(in) :: vecA(3)
real(kind=rk), intent(in) :: vecB(3)
real(kind=rk), intent(in) :: vecC(3)
logical, intent(in) :: only_surface

private subroutine init_ga_box(me, length)

Arguments

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

private subroutine destroy_ga_box(me)

Arguments

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

private subroutine truncate_ga_box(me)

Arguments

Type IntentOptional Attributes Name
type(grw_boxarray_type) :: me

private subroutine empty_ga_box(me)

Arguments

Type IntentOptional Attributes Name
type(grw_boxarray_type) :: me

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

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

Read more…

Arguments

Type IntentOptional Attributes Name
type(grw_boxarray_type) :: me
type(tem_box_type), intent(in) :: val
integer, intent(in) :: pos
integer, intent(in), optional :: length

optional length to expand the array

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

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

Read more…

Arguments

Type IntentOptional Attributes Name
type(grw_boxarray_type) :: me
type(tem_box_type), intent(in) :: val(:)
integer, intent(in) :: pos
integer, intent(in), optional :: length

optional length to expand the array

private subroutine append_ga_box(me, val, length)

Arguments

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

optional length to expand the array

private subroutine append_ga_box_vec(me, val, length)

Arguments

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

optional length to expand the array

private subroutine expand_ga_box(me, pos, length)

Arguments

Type IntentOptional Attributes Name
type(grw_boxarray_type) :: me
integer, intent(in), optional :: pos
integer, intent(in), optional :: length

optional length to expand the array