tem_triangle_module Module

\brief Module to describe triangles. Contains triangle type with vertices of the triangle


Uses

  • module~~tem_triangle_module~2~~UsesGraph module~tem_triangle_module~2 tem_triangle_module module~tem_transformation_module tem_transformation_module module~tem_triangle_module~2->module~tem_transformation_module module~tem_aux_module tem_aux_module module~tem_triangle_module~2->module~tem_aux_module module~env_module env_module module~tem_triangle_module~2->module~env_module module~tem_logging_module tem_logging_module module~tem_triangle_module~2->module~tem_logging_module module~aotus_module aotus_module module~tem_triangle_module~2->module~aotus_module module~tem_math_module tem_math_module module~tem_triangle_module~2->module~tem_math_module module~aot_table_module aot_table_module module~tem_triangle_module~2->module~aot_table_module module~tem_cube_module tem_cube_module module~tem_triangle_module~2->module~tem_cube_module module~aot_out_module aot_out_module module~tem_triangle_module~2->module~aot_out_module module~tem_transformation_module->module~tem_aux_module module~tem_transformation_module->module~env_module module~tem_transformation_module->module~tem_logging_module module~tem_transformation_module->module~aotus_module module~tem_transformation_module->module~aot_table_module module~flu_binding flu_binding module~tem_transformation_module->module~flu_binding module~tem_tools_module tem_tools_module module~tem_transformation_module->module~tem_tools_module module~tem_aux_module->module~env_module module~tem_aux_module->module~tem_logging_module module~tem_aux_module->module~aotus_module module~tem_aux_module->module~aot_table_module module~tem_aux_module->module~flu_binding module~tem_lua_requires_module tem_lua_requires_module module~tem_aux_module->module~tem_lua_requires_module module~tem_aux_module->module~tem_tools_module module~soi_revision_module soi_revision_module module~tem_aux_module->module~soi_revision_module mpi mpi module~tem_aux_module->mpi module~tem_comm_env_module tem_comm_env_module module~tem_aux_module->module~tem_comm_env_module module~env_module->module~aotus_module module~env_module->module~flu_binding iso_fortran_env iso_fortran_env module~env_module->iso_fortran_env module~env_module->mpi module~tem_logging_module->module~env_module module~tem_logging_module->module~aotus_module module~tem_logging_module->module~aot_table_module module~tem_math_module->module~tem_aux_module module~tem_math_module->module~env_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_cube_module->module~tem_aux_module module~tem_cube_module->module~env_module module~tem_cube_module->module~tem_logging_module module~tem_cube_module->module~aotus_module module~tem_cube_module->module~aot_table_module module~tem_geometry_module tem_geometry_module module~tem_cube_module->module~tem_geometry_module module~treelmesh_module treelmesh_module module~tem_cube_module->module~treelmesh_module module~tem_lua_requires_module->module~env_module module~tem_lua_requires_module->module~aotus_module module~tem_lua_requires_module->module~aot_table_module module~tem_lua_requires_module->module~flu_binding iso_c_binding iso_c_binding module~tem_lua_requires_module->iso_c_binding module~tem_matrix_module->module~tem_aux_module module~tem_matrix_module->module~env_module module~tem_matrix_module->module~tem_logging_module module~tem_param_module tem_param_module module~tem_matrix_module->module~tem_param_module module~tem_float_module tem_float_module module~tem_matrix_module->module~tem_float_module module~tem_grow_array_module tem_grow_array_module module~tem_matrix_module->module~tem_grow_array_module module~tem_dyn_array_module tem_dyn_array_module module~tem_matrix_module->module~tem_dyn_array_module module~tem_debug_module tem_debug_module module~tem_matrix_module->module~tem_debug_module module~tem_geometry_module->module~env_module module~tem_geometry_module->module~tem_logging_module module~tem_geometry_module->module~tem_tools_module module~tem_geometry_module->mpi module~tem_geometry_module->module~treelmesh_module module~tem_geometry_module->module~tem_param_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_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_tools_module->module~env_module module~tem_comm_env_module->mpi module~treelmesh_module->module~tem_aux_module module~treelmesh_module->module~env_module module~treelmesh_module->module~tem_logging_module module~treelmesh_module->module~aotus_module module~treelmesh_module->module~aot_table_module module~treelmesh_module->module~tem_tools_module module~treelmesh_module->mpi 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_property_module module~tem_global_module tem_global_module module~treelmesh_module->module~tem_global_module module~tem_param_module->module~env_module module~tem_float_module->module~env_module module~tem_grow_array_module->module~env_module module~tem_dyn_array_module->module~env_module module~tem_topology_module->module~env_module module~tem_sparta_module->module~tem_aux_module module~tem_sparta_module->module~env_module module~tem_sparta_module->module~tem_logging_module module~tem_sparta_module->mpi module~tem_sparta_module->module~tem_float_module module~tem_debug_module->module~env_module module~tem_debug_module->module~tem_logging_module module~tem_debug_module->module~aot_table_module module~tem_debug_module->module~flu_binding module~tem_debug_module->module~tem_tools_module module~tem_property_module->module~env_module module~tem_property_module->mpi module~tem_prophead_module tem_prophead_module module~tem_property_module->module~tem_prophead_module module~tem_subtree_type_module->module~tem_aux_module module~tem_subtree_type_module->module~env_module module~tem_subtree_type_module->module~tem_logging_module module~tem_subtree_type_module->mpi module~tem_subtree_type_module->module~treelmesh_module module~tem_subtree_type_module->module~tem_property_module module~tem_subtree_type_module->module~tem_global_module module~tem_global_module->module~tem_aux_module module~tem_global_module->module~env_module module~tem_global_module->module~tem_logging_module module~tem_global_module->module~aotus_module module~tem_global_module->module~aot_table_module module~tem_global_module->module~aot_out_module module~tem_global_module->mpi module~tem_global_module->module~tem_prophead_module

Contents


Variables

Type Visibility Attributes Name Initial
integer, public, parameter :: tem_triangle_close_invalid = 0

Indicating that the proximity evaluation for this triangle is invalid

integer, public, parameter :: tem_triangle_close_face = 1

Indicating that the closest point in the proximity test resides within the triangle

integer, public, parameter :: tem_triangle_close_edge = 2

Indicating that the closest point in the proximity test resides on an edge of the triangle

integer, public, parameter :: tem_triangle_close_vertex = 3

Indicating that the closest point in the proximity test resides on a vertex of the triangle


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

  • private subroutine placeat_ga_triangle(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_trianglearray_type) :: me
    type(tem_triangle_type), intent(in) :: val
    integer, intent(in) :: pos
    integer, intent(in), optional :: length

    optional length to expand the array

  • private subroutine placeat_ga_triangle_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_trianglearray_type) :: me
    type(tem_triangle_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.

public interface tem_triangle_out

interface to write out triangles in lua format to a file

  • private subroutine tem_triangle_out_scal(me, conf)

    Write out a triangle shape in lua format

    Arguments

    Type IntentOptional Attributes Name
    type(tem_triangle_type), intent(in) :: me

    triangle types to write out

    type(aot_out_type), intent(inout) :: conf

    Aotus type handling the output to the file in lua format

  • private subroutine tem_triangle_out_vec(me, conf)

    Write out an array of triangles in lua format Only if nTriangles <= 10

    Arguments

    Type IntentOptional Attributes Name
    type(tem_triangle_type), intent(in) :: me(:)

    triangle types to write out

    type(aot_out_type), intent(inout) :: conf

    Aotus type handling the output to the file in lua format

private interface expand

increase the size of the container for the array.

  • private subroutine expand_ga_triangle(me, pos, length)

    Arguments

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

    optional length to expand the array

private interface tem_load_triangle

interface to load triangles

  • private interface tem_load_triangle()

    interface to load triangles

    Arguments

    None
  • private subroutine tem_load_triangle_single(me, transform, conf, thandle)

    Load single triangle from config file

    Arguments

    Type IntentOptional Attributes Name
    type(tem_triangle_type), intent(out) :: me

    single triangle

    type(tem_transformation_type), intent(in) :: transform

    transformation for spatial object

    type(flu_State) :: conf

    lua state

    integer, intent(in) :: thandle

Derived Types

type, public ::  tem_triangle_type

This type contains three vertices of the triangle

Components

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

1st index contains x,y,z coordinates and 2nd index the vertex number.

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

type, public ::  grw_trianglearray_type

growing array type for type(tem_triangle_type)

Components

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

Functions

public function tem_triangleCubeOverlap(triangle, cube) result(overlaps)

Compute, if the triangle intersects the cube.

Arguments

Type IntentOptional Attributes Name
type(tem_triangle_type), intent(in) :: triangle
type(tem_cube_type), intent(in) :: cube

Return Value logical

private function triBoxOverlap_loc(boxCenter, boxHalfwidth, triNodes) result(overlaps)

This routine checks for triangle box overlap

Read more…

Arguments

Type IntentOptional Attributes Name
real(kind=rk), intent(in) :: boxCenter(3)

box center

real(kind=rk), intent(in) :: boxHalfwidth(3)

halfwidth of the box

real(kind=rk), intent(in) :: triNodes(3,3)

nodes of the triangle 1st index denote x,y,z coordinates and 2nd index denote nodes

Return Value logical

private function Axistest(dirVec, edge, nodes, boxhalfwidth) result(success)

This function check whether there is separating axis between triangle and box. This function can be optimized by explicitly providing cross_product result see example: http://fileadmin.cs.lth.se/cs/Personal/Tomas_Akenine-Moller/code/tribox3.txt

Arguments

Type IntentOptional Attributes Name
real(kind=rk), intent(in) :: dirVec(3)
real(kind=rk), intent(in) :: edge(3)
real(kind=rk), intent(in) :: nodes(3,3)
real(kind=rk), intent(in) :: boxhalfwidth(3)

Return Value logical

private function planeBoxOverlap(normal, origin, boxhalfwidth) result(overlaps)

This routine checks for plane box overlap this routine is conversion of c-code tribox3.c planeBoxOverlap function

Arguments

Type IntentOptional Attributes Name
real(kind=rk), intent(in) :: normal(3)

normal direction of the plane

real(kind=rk), intent(in) :: origin(3)

origin of the plane

real(kind=rk), intent(in) :: boxhalfwidth(3)

halfwidth of the box

Return Value logical


Subroutines

public subroutine tem_load_triangle(me, transform, conf, thandle)

Load triangle information from config file.

Arguments

Type IntentOptional Attributes Name
type(tem_triangle_type), intent(out), allocatable :: me(:)

array of triangles

type(tem_transformation_type), intent(in) :: transform

transformation for spatial object

type(flu_State) :: conf

lua state

integer, intent(in) :: thandle

public subroutine tem_evaluate_normal_triangle(triangle)

Compute, the outward normal of a triangle. To work nodes must be in counter-clockwise order. For STL this is the standard. It follows pg 136 of Jiri Blaze, CFD Principles and Applications

Arguments

Type IntentOptional Attributes Name
type(tem_triangle_type), intent(inout) :: triangle

public subroutine tem_triangle_normal_proximity(me, point, closest, closekind, distance, normal)

Compute the point of the triangle closest to the given point.

Read more…

Arguments

Type IntentOptional Attributes Name
type(tem_triangle_type), intent(in) :: me
real(kind=rk), intent(in) :: point(3)
real(kind=rk), intent(out) :: closest(3)
integer, intent(out) :: closekind
real(kind=rk), intent(out) :: distance
real(kind=rk), intent(out) :: normal(3)

private subroutine tem_load_triangle_single(me, transform, conf, thandle)

Load single triangle from config file

Arguments

Type IntentOptional Attributes Name
type(tem_triangle_type), intent(out) :: me

single triangle

type(tem_transformation_type), intent(in) :: transform

transformation for spatial object

type(flu_State) :: conf

lua state

integer, intent(in) :: thandle

private subroutine tem_triangle_out_vec(me, conf)

Write out an array of triangles in lua format Only if nTriangles <= 10

Arguments

Type IntentOptional Attributes Name
type(tem_triangle_type), intent(in) :: me(:)

triangle types to write out

type(aot_out_type), intent(inout) :: conf

Aotus type handling the output to the file in lua format

private subroutine tem_triangle_out_scal(me, conf)

Write out a triangle shape in lua format

Arguments

Type IntentOptional Attributes Name
type(tem_triangle_type), intent(in) :: me

triangle types to write out

type(aot_out_type), intent(inout) :: conf

Aotus type handling the output to the file in lua format

private subroutine init_ga_triangle(me, length)

Arguments

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

private subroutine destroy_ga_triangle(me)

Arguments

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

private subroutine truncate_ga_triangle(me)

Arguments

Type IntentOptional Attributes Name
type(grw_trianglearray_type) :: me

private subroutine empty_ga_triangle(me)

Arguments

Type IntentOptional Attributes Name
type(grw_trianglearray_type) :: me

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

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

Read more…

Arguments

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

optional length to expand the array

private subroutine placeat_ga_triangle_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_trianglearray_type) :: me
type(tem_triangle_type), intent(in) :: val(:)
integer, intent(in) :: pos
integer, intent(in), optional :: length

optional length to expand the array

private subroutine append_ga_triangle(me, val, length)

Arguments

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

optional length to expand the array

private subroutine append_ga_triangle_vec(me, val, length)

Arguments

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

optional length to expand the array

private subroutine expand_ga_triangle(me, pos, length)

Arguments

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

optional length to expand the array