Geometry module (geometry.f90)¶
Module geometry¶
Description
Brief Description: This module handles all geometry read/write/tree generation.
LICENSE:
Full Description:
This module handles all geometry read/write/generation.
Quick access
- Variables:
allocate_node_arrays,geo_entry_exit_cap,geo_node_offset,get_final_string,get_local_elem,get_local_node,get_parent_branch,line_segments_for_2d_mesh,linregress,make_grid,merge_2d_from_1d_mesh,merge_trifurcations,mesh_2d_from_1d_crux,mesh_2d_from_1d_generic,mesh_rotate_about_axis,mesh_rotate_vector_about_axis,redistribute_mesh_nodes_2d_from_1d,where_inlist,write_3d_geo,write_surface_geo- Routines:
add_matching_mesh(),add_mesh(),append_units(),coord_at_xi(),define_1d_elements(),define_data_geometry(),define_elem_geometry_2d(),define_mesh_geometry_test(),define_node_geometry(),define_node_geometry_2d(),define_rad_from_file(),define_rad_from_geom(),element_connectivity_1d(),element_connectivity_2d(),evaluate_ordering(),get_airway_deadspace(),get_final_integer(),get_final_real(),get_four_nodes(),get_local_elem_1d(),get_local_node_f(),group_elem_parent_term(),import_node_geometry_2d(),import_ply_triangles(),internal_mesh_reorder(),list_tree_statistics(),make_2d_vessel_from_1d(),make_data_grid(),occlude_vessel(),reallocate_node_elem_arrays(),scale_airways(),set_initial_volume(),triangles_from_surface(),volume_of_mesh(),write_elem_geometry_2d(),write_geo_file(),write_node_geometry_2d()
Needed modules
arrays: Brief Description: This module defines arrays.diagnosticsindicesmesh_utilitiesother_constsprecision: Brief Description: Defines the precision of real parameters.
Variables
- geometry/allocate_node_arrays [private]¶
- geometry/geo_entry_exit_cap [private]¶
- geometry/geo_node_offset [private]¶
- geometry/get_final_string [private]¶
- geometry/get_local_elem [private]¶
- geometry/get_local_node [private]¶
- geometry/get_parent_branch [private]¶
- geometry/line_segments_for_2d_mesh [private]¶
- geometry/linregress [private]¶
- geometry/make_grid [private]¶
- geometry/merge_2d_from_1d_mesh [private]¶
- geometry/merge_trifurcations [private]¶
- geometry/mesh_2d_from_1d_crux [private]¶
- geometry/mesh_2d_from_1d_generic [private]¶
- geometry/mesh_rotate_about_axis [private]¶
- geometry/mesh_rotate_vector_about_axis [private]¶
- geometry/redistribute_mesh_nodes_2d_from_1d [private]¶
- geometry/where_inlist [private]¶
- geometry/write_3d_geo [private]¶
- geometry/write_surface_geo [private]¶
Subroutines and functions
- subroutine geometry/add_mesh(airway_meshfile)¶
- add_mesh: Reads in an ipmesh file and adds this mesh to the terminal
branches of an existing tree geometry
- Parameters:
airway_meshfile [character(len=max_filename_len),in]
- Call to:
enter_exit(),reallocate_node_elem_arrays(),element_connectivity_1d(),evaluate_ordering()
- subroutine geometry/add_matching_mesh()¶
add_matching_mesh:
- Call to:
enter_exit(),reallocate_node_elem_arrays()
- subroutine geometry/append_units()¶
append_units: Appends terminal units at the end of a tree structure
- Called from:
two_unit_test()- Call to:
enter_exit()
- subroutine geometry/define_1d_elements(elemfile)¶
define_1d_elements: Reads in an 1D element ipelem file to define a geometry
- Parameters:
elemfile [character(len=max_filename_len),in]
- Call to:
enter_exit(),get_final_integer(),element_connectivity_1d(),internal_mesh_reorder(),evaluate_ordering()
- subroutine geometry/define_elem_geometry_2d(elemfile, sf_option)¶
Reads in 2D ipelem file.
- Parameters:
elemfile [character(len=*)]
sf_option [character(len=4)]
- Call to:
enter_exit(),get_final_integer(),get_four_nodes(),element_connectivity_2d()
- subroutine geometry/define_mesh_geometry_test()¶
define_mesh_geometry_test:
- Call to:
enter_exit(),element_connectivity_1d(),evaluate_ordering()
- subroutine geometry/define_node_geometry(nodefile)¶
define_node_geometry: Reads in an ipnode file to define a tree geometry
- Parameters:
nodefile [character(len=max_filename_len),in] :: Input nodefile
- Call to:
enter_exit(),get_final_integer(),get_final_real()
- subroutine geometry/define_node_geometry_2d(nodefile)¶
define_node_geometry_2d: Reads in an ipnode file to define surface nodes
- Parameters:
nodefile [character(len=*),in]
- Call to:
enter_exit(),get_final_integer(),get_final_real()
- subroutine geometry/define_data_geometry(datafile)¶
define_data_geometry: reads data points from a file
- Parameters:
datafile [character(len=*)]
- Call to:
enter_exit()
- subroutine geometry/import_node_geometry_2d(nodefile)¶
define_node_geometry_2d: Reads in an exnode file to define surface nodes DEC$ ATTRIBUTES DLLEXPORT,ALIAS:”SO_DEFINE_NODE_GEOMETRY_2D” :: DEFINE_NODE_GEOMETRY_2D
- Parameters:
nodefile [character(len=*),in]
- Call to:
enter_exit(),get_final_integer()
- subroutine geometry/import_ply_triangles(ply_file)¶
- import_ply_triangles: Reads in vtk ply file with list of vertex coordinates
and triangles. Used instead of internal triangle mesh creation for tree growing Writes over any existing triangle mesh.
- Parameters:
ply_file [character(len=*),in]
- Call to:
enter_exit()
- subroutine geometry/list_tree_statistics(filename)¶
- Parameters:
filename [character(len=*),in]
- Call to:
enter_exit(),angle_btwn_vectors(),make_plane_from_3points()
- subroutine geometry/triangles_from_surface(surface_elems)¶
- triangles_from_surface: generates a linear surface mesh of triangles
from an existing high order surface mesh.
- Parameters:
surface_elems (*) [integer,in]
- Called from:
make_data_grid(),grow_tree()- Call to:
enter_exit(),coord_at_xi()
- subroutine geometry/group_elem_parent_term(parent_list, ne_parent)¶
- group_elem_parent_term: group the terminal elements that sit distal to
a given parent element (ne_parent)
- Parameters:
parent_list (*) [integer] :: will contain terminal elements below ne_parent on exit
ne_parent [integer,in] :: the parent element number
- Use :
mesh_utilities(group_elem_by_parent())- Called from:
grow_tree()- Call to:
enter_exit(),group_elem_by_parent()
- subroutine geometry/make_data_grid(surface_elems, num_target, offset, spacing0)¶
- make_data_grid: makes a regularly-spaced 3D grid of data points to
fill a bounding surface. surface is defined by elements in ‘surface_elems’. If zero then grow into all elements.
- Parameters:
surface_elems (*) [integer,in]
num_target [integer,in]
offset [real,in]
spacing0 [real,in]
- Call to:
enter_exit(),get_local_elem_2d(),triangles_from_surface(),volume_internal_to_surface()
- subroutine geometry/make_2d_vessel_from_1d(elem_list)¶
- make_2d_vessel_from_1d: create a surface mesh that aligns with the
centrelines of a 1D tree, and located at distance ‘radius’ from the centre. a template for a set of 5 nodes (that together define a bifurcation) is scaled, rotated, translated to align with the 1d mesh and its radii.
- Parameters:
elem_list (*) [integer,in] :: the global stem element number for the 2d mesh
- Call to:
enter_exit(),get_local_elem_1d(),bifurcation_element(),stem_element(),which_child(),distance_between_points(),angle_btwn_points(),unit_vector(),angle_btwn_vectors(),element_connectivity_2d()
- subroutine geometry/define_rad_from_file(fieldfile[, radius_type_in])¶
- define_rad_from_file: reads in a radius field associated with an
airway tree and assigns radius information to each element, also calculates volume of each element
- Parameters:
fieldfile [character(len=max_filename_len),in]
- Options:
radius_type_in [character(len=max_string_len)]
- Call to:
enter_exit(),get_final_integer(),get_final_real(),get_local_elem_1d()
- subroutine geometry/define_rad_from_geom(order_system, control_param, start_from, user_rad[, group_type_in[, group_option_in]])¶
- define_rad_from_geom: Defines vessel or airway radius based on
their geometric structure. For ‘order_system’ == ‘strah’ or ‘horsf’, uses a user-defined maximum radius and branching ratio; for == ‘fit’, uses pre- defined radii (read in) and a calculated branching ratio for each path so that the order 1 branches have radius = USER_RAD.
- Parameters:
order_system [character(len=*),in]
control_param [real,in]
start_from [character(len=*),in]
user_rad [real,in] :: radius of largest branch when order_system
- Options:
group_type_in [character(len=*)]
group_option_in [character(len=*)]
- Call to:
enter_exit()
- subroutine geometry/occlude_vessel(vessel_number, ratio)¶
- occlude_vessel: Occludes/modifies vessel or airway radius based on
the ratio provided by user. This subroutine is made for partial occlusions where the vessel (artery or vein) element number and the ratio is provided by user and this will be applied on unstrained radius of the vessels. This subroutine should be called after define_rad_from_geom/file so that the tree radii are identified. This subroutine is useful for running Pulmonary hypertension or pulmonary embolism cases.
- Parameters:
vessel_number [integer,in] :: Element number that you want to apply occlusion on
ratio [real,in] :: partial/or full occlsion ratio (100 means full occlusions
- Call to:
enter_exit()
- subroutine geometry/element_connectivity_1d()¶
- element_connectivity_1d: Calculates element connectivity in 1D and
stores in array elem_cnct
- Called from:
add_mesh(),define_1d_elements(),define_mesh_geometry_test(),internal_mesh_reorder(),grow_tree()- Call to:
enter_exit()
- subroutine geometry/element_connectivity_2d()¶
- element_connectivity_2d: Calculates element connectivity in 2D and
stores in array elem_cnct_2d
- Called from:
- Call to:
enter_exit(),inlist()
- subroutine geometry/internal_mesh_reorder()¶
- internal_mesh_reorder: reorder the mesh so that all elements and nodes are
sequential from the stem branches down
- Called from:
- Call to:
enter_exit(),element_connectivity_1d(),evaluate_ordering()
- subroutine geometry/evaluate_ordering()¶
- evaluate_ordering: calculates generations, Horsfield orders,
Strahler orders for a given tree
- Called from:
add_mesh(),define_1d_elements(),define_mesh_geometry_test(),internal_mesh_reorder(),grow_tree()- Call to:
enter_exit()
- subroutine geometry/scale_airways(scale_factor)¶
- Parameters:
scale_factor [real,in]
- subroutine geometry/set_initial_volume(gdirn, cov, total_volume, rmax, rmin)¶
- set_initial_volume: assigns a volume to terminal units appended on a
tree structure based on an assumption of a linear gradient in the gravitational direction with max, min, and COV values defined.
- Parameters:
gdirn [integer,in]
cov [real,in]
total_volume [real,in]
rmax [real,in]
rmin [real,in]
- Called from:
evaluate_vent()- Call to:
enter_exit(),volume_of_mesh()
- subroutine geometry/volume_of_mesh(volume_model, volume_tree)¶
- volume_of_mesh: calculates the volume of an airway mesh including
conducting and respiratory airways
- Parameters:
volume_model [real]
volume_tree [real]
- Called from:
solve_gasmix(),set_initial_volume(),get_airway_deadspace(),evaluate_vent(),evaluate_uniform_flow()- Call to:
enter_exit()
- subroutine geometry/write_geo_file(type_bn, filename)¶
- write_geo_file: converts a surface mesh (created using make_2d_vessel_from_1d)
into a gmsh formatted mesh and writes to file. options on ‘type’: 1== single layered surface mesh of the vessel wall
2== double-layered thick-walled volume mesh of vessel wall 3== volume mesh of vessel lumen
- Parameters:
type_bn [integer,in]
filename [character(len=*),in]
- Call to:
enter_exit()
- function geometry/get_final_real(string_bn)¶
- Return:
get_final_real [real] :: return the real value
- Parameters:
string_bn [character(len=*),in]
- Called from:
define_node_geometry(),define_node_geometry_2d(),define_rad_from_file()
- subroutine geometry/reallocate_node_elem_arrays(num_elems_new, num_nodes_new)¶
- reallocate_node_elem_arrays: Reallocates the size of geometric
arrays when modifying geometries
- Parameters:
num_elems_new [integer,in]
num_nodes_new [integer,in]
- Use :
indices- Called from:
add_mesh(),add_matching_mesh(),grow_tree()- Call to:
enter_exit()
- function geometry/get_airway_deadspace()¶
- Return:
airway_deadspace [real]
- Call to:
- function geometry/get_local_node_f(ndimension, np_global)¶
- Parameters:
ndimension [integer,in]
np_global [integer,in]
- Return:
get_local_node [integer]
- Called from:
get_four_nodes(),define_geometry_fit(),map_versions(),distribute_surface_node_fit(),distribute_nodes_between(),centre_a_node()
- function geometry/get_final_integer(string_bn)¶
- Return:
get_final_integer [integer] :: return the integer value
- Parameters:
string_bn [character(len=*),in]
- Called from:
define_1d_elements(),define_elem_geometry_2d(),define_node_geometry(),define_node_geometry_2d(),import_node_geometry_2d(),define_rad_from_file()
- subroutine geometry/get_four_nodes(ne, string_bn)¶
- Parameters:
ne [integer,in]
string_bn [character(len=132),in]
- Called from:
- Call to:
enter_exit(),get_local_node_f()
- function geometry/coord_at_xi(ne, xi, basis)¶
- Parameters:
ne [integer,in]
xi (*) [real,in] :: xi^3-2xi^2+xi
basis [character(len=*),in]
- Return:
coord_at_xi (3) [real]
- Called from:
export_cubic_lagrange_2d(),triangles_from_surface(),coord_at_xi()- Call to:
- function geometry/get_local_elem_1d(ne_global)¶
- Parameters:
ne_global [integer,in]
- Return:
get_local_elem_1d [integer]
- Called from:
make_2d_vessel_from_1d(),define_rad_from_file(),grow_tree()
- subroutine geometry/write_elem_geometry_2d(elemfile)¶
- Parameters:
elemfile [character(len=*),in]
- Call to:
enter_exit()
- subroutine geometry/write_node_geometry_2d(nodefile)¶
- Parameters:
nodefile [character(len=*),in]
- Call to:
enter_exit()