Loading [MathJax]/extensions/tex2jax.js
Mesh Oriented datABase  (version 5.5.1)
An array-based unstructured mesh library
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
measure.cpp File Reference
#include "moab/CartVect.hpp"
#include "measure.hpp"
+ Include dependency graph for measure.cpp:

Go to the source code of this file.

Functions

static double tet_volume (const CartVect &v0, const CartVect &v1, const CartVect &v2, const CartVect &v3)
 
double edge_length (const double *start_vtx_coords, const double *end_vtx_coords)
 
double measure (moab::EntityType type, int num_vertices, const double *vertex_coordinates)
 

Function Documentation

◆ edge_length()

double edge_length ( const double *  start_vtx_coords,
const double *  end_vtx_coords 
)

Definition at line 35 of file measure.cpp.

36 { 37  const CartVect* start = reinterpret_cast< const CartVect* >( start_vtx_coords ); 38  const CartVect* end = reinterpret_cast< const CartVect* >( end_vtx_coords ); 39  return ( *start - *end ).length(); 40 }

References moab::CartVect::length().

Referenced by gather_set_stats(), and moab::Intx2Mesh::intersect_meshes_kdtree().

◆ measure()

double measure ( moab::EntityType  type,
int  num_vertices,
const double *  vertex_coordinates 
)

Definition at line 42 of file measure.cpp.

43 { 44  const CartVect* coords = reinterpret_cast< const CartVect* >( vertex_coordinates ); 45  switch( type ) 46  { 47  case moab::MBEDGE: 48  return ( coords[0] - coords[1] ).length(); 49  case moab::MBTRI: 50  return 0.5 * ( ( coords[1] - coords[0] ) * ( coords[2] - coords[0] ) ).length(); 51  case moab::MBQUAD: 52  num_vertices = 4; 53  // fall through 54  case moab::MBPOLYGON: { 55  CartVect mid( 0, 0, 0 ); 56  for( int i = 0; i < num_vertices; ++i ) 57  mid += coords[i]; 58  mid /= num_vertices; 59  60  double sum = 0.0; 61  for( int i = 0; i < num_vertices; ++i ) 62  { 63  int j = ( i + 1 ) % num_vertices; 64  sum += ( ( mid - coords[i] ) * ( mid - coords[j] ) ).length(); 65  } 66  return 0.5 * sum; 67  } 68  case moab::MBTET: 69  return tet_volume( coords[0], coords[1], coords[2], coords[3] ); 70  case moab::MBPYRAMID: 71  return tet_volume( coords[0], coords[1], coords[2], coords[4] ) + 72  tet_volume( coords[0], coords[2], coords[3], coords[4] ); 73  case moab::MBPRISM: 74  return tet_volume( coords[0], coords[1], coords[2], coords[5] ) + 75  tet_volume( coords[3], coords[5], coords[4], coords[0] ) + 76  tet_volume( coords[1], coords[4], coords[5], coords[0] ); 77  case moab::MBHEX: 78  return tet_volume( coords[0], coords[1], coords[3], coords[4] ) + 79  tet_volume( coords[7], coords[3], coords[6], coords[4] ) + 80  tet_volume( coords[4], coords[5], coords[1], coords[6] ) + 81  tet_volume( coords[1], coords[6], coords[3], coords[4] ) + 82  tet_volume( coords[2], coords[6], coords[3], coords[1] ); 83  default: 84  return 0.0; 85  } 86 }

References length(), MBEDGE, MBHEX, MBPOLYGON, MBPRISM, MBPYRAMID, MBQUAD, MBTET, MBTRI, moab::sum(), and tet_volume().

◆ tet_volume()

static double tet_volume ( const CartVect v0,
const CartVect v1,
const CartVect v2,
const CartVect v3 
)
inlinestatic

Definition at line 30 of file measure.cpp.

31 { 32  return 1. / 6. * ( ( ( v1 - v0 ) * ( v2 - v0 ) ) % ( v3 - v0 ) ); 33 }

Referenced by measure().