Mesh Oriented datABase
(version 5.4.1)
Array-based unstructured mesh datastructure
|
Go to the source code of this file.
Defines | |
#define | VERDICT_EXPORTS |
Functions | |
C_FUNC_DEF double | v_wedge_volume (int num_nodes, double coordinates[][3]) |
Calculates wedge volume. | |
C_FUNC_DEF void | v_wedge_quality (int num_nodes, double coordinates[][3], unsigned int metrics_request_flag, WedgeMetricVals *metric_vals) |
Calculates quality metrics for wedge elements. |
#define VERDICT_EXPORTS |
Definition at line 23 of file V_WedgeMetric.cpp.
C_FUNC_DEF void v_wedge_quality | ( | int | num_nodes, |
double | coordinates[][3], | ||
unsigned int | metrics_request_flag, | ||
WedgeMetricVals * | metric_vals | ||
) |
Calculates quality metrics for wedge elements.
Definition at line 102 of file V_WedgeMetric.cpp.
References V_WEDGE_VOLUME, v_wedge_volume(), and WedgeMetricVals::volume.
{ memset( metric_vals, 0, sizeof( WedgeMetricVals ) ); if( metrics_request_flag & V_WEDGE_VOLUME ) metric_vals->volume = v_wedge_volume( num_nodes, coordinates ); }
C_FUNC_DEF double v_wedge_volume | ( | int | num_nodes, |
double | coordinates[][3] | ||
) |
Calculates wedge volume.
calculate the volume of a wedge
this is done by dividing the wedge into 3 tets and summing the volume of each tet
Definition at line 54 of file V_WedgeMetric.cpp.
References VerdictVector::set().
Referenced by moab::VerdictWrapper::all_quality_measures(), moab::VerdictWrapper::quality_measure(), and v_wedge_quality().
{ double volume = 0; VerdictVector side1, side2, side3; if( num_nodes == 6 ) { // divide the wedge into 3 tets and calculate each volume side1.set( coordinates[1][0] - coordinates[0][0], coordinates[1][1] - coordinates[0][1], coordinates[1][2] - coordinates[0][2] ); side2.set( coordinates[2][0] - coordinates[0][0], coordinates[2][1] - coordinates[0][1], coordinates[2][2] - coordinates[0][2] ); side3.set( coordinates[3][0] - coordinates[0][0], coordinates[3][1] - coordinates[0][1], coordinates[3][2] - coordinates[0][2] ); volume = side3 % ( side1 * side2 ) / 6; side1.set( coordinates[4][0] - coordinates[1][0], coordinates[4][1] - coordinates[1][1], coordinates[4][2] - coordinates[1][2] ); side2.set( coordinates[5][0] - coordinates[1][0], coordinates[5][1] - coordinates[1][1], coordinates[5][2] - coordinates[1][2] ); side3.set( coordinates[3][0] - coordinates[1][0], coordinates[3][1] - coordinates[1][1], coordinates[3][2] - coordinates[1][2] ); volume += side3 % ( side1 * side2 ) / 6; side1.set( coordinates[5][0] - coordinates[1][0], coordinates[5][1] - coordinates[1][1], coordinates[5][2] - coordinates[1][2] ); side2.set( coordinates[2][0] - coordinates[1][0], coordinates[2][1] - coordinates[1][1], coordinates[2][2] - coordinates[1][2] ); side3.set( coordinates[3][0] - coordinates[1][0], coordinates[3][1] - coordinates[1][1], coordinates[3][2] - coordinates[1][2] ); volume += side3 % ( side1 * side2 ) / 6; } return (double)volume; }