Go to the documentation of this file. 1
14
15
22
23 #define VERDICT_EXPORTS
24
25 #include "moab/verdict.h"
26 #include "VerdictVector.hpp"
27 #include <memory.h>
28
29
44
45
53
54 C_FUNC_DEF double v_wedge_volume( int num_nodes, double coordinates[][3] )
55 {
56
57 double volume = 0;
58 VerdictVector side1, side2, side3;
59
60 if( num_nodes == 6 )
61 {
62
63
64
65 side1.set( coordinates[1][0] - coordinates[0][0], coordinates[1][1] - coordinates[0][1],
66 coordinates[1][2] - coordinates[0][2] );
67
68 side2.set( coordinates[2][0] - coordinates[0][0], coordinates[2][1] - coordinates[0][1],
69 coordinates[2][2] - coordinates[0][2] );
70
71 side3.set( coordinates[3][0] - coordinates[0][0], coordinates[3][1] - coordinates[0][1],
72 coordinates[3][2] - coordinates[0][2] );
73
74 volume = side3 % ( side1 * side2 ) / 6;
75
76 side1.set( coordinates[4][0] - coordinates[1][0], coordinates[4][1] - coordinates[1][1],
77 coordinates[4][2] - coordinates[1][2] );
78
79 side2.set( coordinates[5][0] - coordinates[1][0], coordinates[5][1] - coordinates[1][1],
80 coordinates[5][2] - coordinates[1][2] );
81
82 side3.set( coordinates[3][0] - coordinates[1][0], coordinates[3][1] - coordinates[1][1],
83 coordinates[3][2] - coordinates[1][2] );
84
85 volume += side3 % ( side1 * side2 ) / 6;
86
87 side1.set( coordinates[5][0] - coordinates[1][0], coordinates[5][1] - coordinates[1][1],
88 coordinates[5][2] - coordinates[1][2] );
89
90 side2.set( coordinates[2][0] - coordinates[1][0], coordinates[2][1] - coordinates[1][1],
91 coordinates[2][2] - coordinates[1][2] );
92
93 side3.set( coordinates[3][0] - coordinates[1][0], coordinates[3][1] - coordinates[1][1],
94 coordinates[3][2] - coordinates[1][2] );
95
96 volume += side3 % ( side1 * side2 ) / 6;
97 }
98
99 return (double)volume;
100 }
101
102 C_FUNC_DEF void v_wedge_quality( int num_nodes,
103 double coordinates[][3],
104 unsigned int metrics_request_flag,
105 WedgeMetricVals* metric_vals )
106 {
107 memset( metric_vals, 0, sizeof( WedgeMetricVals ) );
108
109 if( metrics_request_flag & V_WEDGE_VOLUME ) metric_vals->volume = v_wedge_volume( num_nodes, coordinates );
110 }