|
MFC
Exascale flow solver
|
Contains module m_model. More...
Go to the source code of this file.
Modules | |
| module | m_model |
| Binary STL file reader and processor for immersed boundary geometry. | |
Functions/Subroutines | |
| impure subroutine | m_model::s_read_stl_binary (filepath, model) |
| Read a binary STL file. | |
| impure subroutine | m_model::s_read_stl_ascii (filepath, model) |
| Read an ASCII STL file. | |
| impure subroutine | m_model::s_read_stl (filepath, model) |
| Read an STL file. | |
| impure subroutine | m_model::s_read_obj (filepath, model) |
| Read an OBJ file. | |
| impure type(t_model) function, public | m_model::f_model_read (filepath) |
| Read a mesh from a file. | |
| impure subroutine | m_model::s_write_stl (filepath, model) |
| Write a binary STL file. | |
| impure subroutine | m_model::s_write_obj (filepath, model) |
| Write an OBJ file. | |
| impure subroutine, public | m_model::s_model_write (filepath, model) |
| Write a mesh to a file. | |
| subroutine, public | m_model::s_model_free (model) |
| Free the memory allocated for an STL mesh. | |
| impure logical function | m_model::f_read_line (iunit, line) |
| Read the next non-blank, non-comment line from an STL or OBJ model file. | |
| impure subroutine | m_model::s_skip_ignored_lines (iunit, buffered_line, is_buffered) |
| Read the next non-comment line from a model file, using a buffered look-ahead mechanism. | |
| real(wp) function | m_model::f_model_random_number (seed) |
| Generate a pseudo-random number using a seed-based xorshift, replacing the Fortran intrinsic which is incompatible with GPU routines. | |
| impure real(wp) function, public | m_model::f_model_is_inside (model, point, spacing, spc) |
| Determine whether a point is inside a model using stochastic ray casting. | |
| real(wp) function, public | m_model::f_model_is_inside_flat (ntrs, pid, point) |
| Determine if a point is inside a surface using the generalized winding number (Jacobson et al., SIGGRAPH 2013). In 3D, sums the solid angle subtended by each triangle (Van Oosterom-Strackee formula). In 2D (p==0), sums the signed angle subtended by each boundary edge. Returns ~1.0 inside, ~0.0 outside. Unlike ray casting, this is robust to small triangles/edges and vertex winding order. | |
| integer function | m_model::f_intersects_triangle (ray, triangle) |
| Check if a ray intersects a triangle using the Moller-Trumbore algorithm (barycentric coordinates). Unlike the previous cross-product sign test, this is vertex winding-order independent. | |
| subroutine, public | m_model::s_check_boundary (model, boundary_v, boundary_vertex_count, boundary_edge_count) |
| Check and label edges shared by two or more triangle facets of the 2D STL model. | |
| subroutine, public | m_model::s_register_edge (temp_boundary_v, edge, edge_index, edge_count) |
| Append the edge end vertices to a temporary buffer. | |
| subroutine, public | m_model::s_distance_normals_3d (ntrs, pid, point, normals, distance) |
| Determine the levelset distance and normals of 3D models by computing the exact closest point via projection onto triangle surfaces. | |
| subroutine, public | m_model::s_distance_normals_2d (pid, boundary_edge_count, point, normals, distance) |
| Determine the levelset distance and normals of 2D models by computing the exact closest point via projection onto boundary edges. | |
| subroutine, public | m_model::s_instantiate_stl_models () |
| Load, transform, and register STL/OBJ immersed-boundary models onto the simulation grid. | |
| subroutine, public | m_model::s_pack_model_for_gpu (ma) |
| Pack triangle vertices and normals from a model into flat arrays for GPU transfer. | |
Variables | |
| type(t_model_array), dimension(:), allocatable, target, public | m_model::models |
| STL/OBJ models for IB markers and levelset. | |
| integer, dimension(:), allocatable, public | m_model::gpu_ntrs |
| GPU-friendly flat arrays for STL model data. | |
| real(wp), dimension(:,:,:,:), allocatable, public | m_model::gpu_trs_v |
| real(wp), dimension(:,:,:), allocatable, public | m_model::gpu_trs_n |
| real(wp), dimension(:,:,:,:), allocatable, public | m_model::gpu_boundary_v |
| integer, dimension(:), allocatable, public | m_model::gpu_boundary_edge_count |
| integer, dimension(:), allocatable, public | m_model::gpu_total_vertices |
| real(wp), dimension(:,:,:), allocatable, public | m_model::stl_bounding_boxes |
Contains module m_model.
Definition in file m_model.fpp.f90.