Branch data Line data Source code
1 : : /*
2 : : * VerdictWrapper.hpp
3 : : *
4 : : * Created on: Nov 18, 2014
5 : : * Author: iulian
6 : : */
7 : :
8 : : #ifndef SRC_VERDICT_MOAB_VERDICTWRAPPER_HPP_
9 : : #define SRC_VERDICT_MOAB_VERDICTWRAPPER_HPP_
10 : :
11 : : #include <map>
12 : :
13 : : namespace moab
14 : : {
15 : :
16 : : class Interface;
17 : :
18 : : enum QualityType
19 : : {
20 : : // order exactly from HexMetricVals
21 : : MB_UNDEFINED_QUALITY = -1,
22 : : MB_EDGE_RATIO = 0, // 0 MBHEX, MBTET, MBQUAD, MBTRI
23 : : MB_MAX_EDGE_RATIO, // 1 MBHEX, MBQUAD
24 : : MB_SKEW, // 2 MBHEX, MBQUAD
25 : : MB_TAPER, // 3 MBHEX, MBQUAD
26 : : MB_VOLUME, // 4 MBHEX, MBTET, MBPRISM, MBKNIFE
27 : : MB_STRETCH, // 5 MBHEX, MBQUAD
28 : : MB_DIAGONAL, // 6 MBHEX,
29 : : MB_DIMENSION, // 7 MBHEX,
30 : : MB_ODDY, // 8 MBHEX, MBQUAD
31 : : MB_MED_ASPECT_FROBENIUS, // 9 MBHEX, MBQUAD
32 : : MB_MAX_ASPECT_FROBENIUS, // 10 MBHEX, MBTET (aspect_frobenius) MBQUAD, MBTRI
33 : : // (aspect_frobenius)
34 : : MB_CONDITION, // 11 MBHEX, MBTET, MBQUAD, MBTRI
35 : : MB_JACOBIAN, // 12 MBHEX, MBTET, MBQUAD
36 : : MB_SCALED_JACOBIAN, // 13 MBHEX, MBTET, MBQUAD, MBTRI
37 : : MB_SHEAR, // 14 MBHEX, MBQUAD, MBTRI
38 : : MB_SHAPE, // 15 MBHEX, MBTET, MBQUAD, MBTRI
39 : : MB_RELATIVE_SIZE_SQUARED, // 16 MBHEX, MBTET, MBQUAD, MBTRI
40 : : MB_SHAPE_AND_SIZE, // 17 MBHEX, MBTET, MBQUAD
41 : : MB_SHEAR_AND_SIZE, // 18 MBHEX, MBQUAD
42 : : MB_DISTORTION, // 19 MBHEX, MBTET, MBQUAD
43 : : // length for edge:
44 : : MB_LENGTH, // 20 only for MBEDGE
45 : : // specific to tets
46 : : MB_RADIUS_RATIO, // 21 MBTET, MBQUAD, MBTRI
47 : : MB_ASPECT_BETA, // 22 MBTET
48 : : MB_ASPECT_RATIO, // 23 MBTET, MBQUAD, MBTRI
49 : : MB_ASPECT_GAMMA, // 24 MBTET
50 : : MB_MINIMUM_ANGLE, // 25 MBTET, MBQUAD, MBTRI
51 : : MB_COLLAPSE_RATIO, // 26 MBTET
52 : : // specific to quads
53 : : MB_WARPAGE, // 27 MBQUAD
54 : : MB_AREA, // 28 MBQUAD, MBTRI
55 : : MB_MAXIMUM_ANGLE, // 29 MBQUAD, MBTRI
56 : : MB_QUALITY_COUNT // used to size the arrays
57 : :
58 : : };
59 : :
60 : 106 : inline std::string QualityType_ToString( QualityType qtype )
61 : : {
62 [ - - - + : 106 : switch( qtype )
+ + + + +
- - - + +
+ + + + +
+ + + - -
+ - + - +
+ + - ]
63 : : {
64 : : case MB_UNDEFINED_QUALITY:
65 [ # # ]: 0 : return "MB_UNDEFINED_QUALITY";
66 : : case MB_EDGE_RATIO:
67 [ # # ]: 0 : return "MB_EDGE_RATIO";
68 : : case MB_MAX_EDGE_RATIO:
69 [ # # ]: 0 : return "MB_MAX_EDGE_RATIO";
70 : : case MB_SKEW:
71 [ + - ]: 4 : return "MB_SKEW";
72 : : case MB_TAPER:
73 [ + - ]: 4 : return "MB_TAPER";
74 : : case MB_VOLUME:
75 [ + - ]: 8 : return "MB_VOLUME";
76 : : case MB_STRETCH:
77 [ + - ]: 4 : return "MB_STRETCH";
78 : : case MB_DIAGONAL:
79 [ + - ]: 2 : return "MB_DIAGONAL";
80 : : case MB_DIMENSION:
81 [ + - ]: 2 : return "MB_DIMENSION";
82 : : case MB_ODDY:
83 [ # # ]: 0 : return "MB_ODDY";
84 : : case MB_MED_ASPECT_FROBENIUS:
85 [ # # ]: 0 : return "MB_MED_ASPECT_FROBENIUS";
86 : : case MB_MAX_ASPECT_FROBENIUS:
87 [ # # ]: 0 : return "MB_MAX_ASPECT_FROBENIUS";
88 : : case MB_CONDITION:
89 [ + - ]: 8 : return "MB_CONDITION";
90 : : case MB_JACOBIAN:
91 [ + - ]: 6 : return "MB_JACOBIAN";
92 : : case MB_SCALED_JACOBIAN:
93 [ + - ]: 6 : return "MB_SCALED_JACOBIAN";
94 : : case MB_SHEAR:
95 [ + - ]: 4 : return "MB_SHEAR";
96 : : case MB_SHAPE:
97 [ + - ]: 8 : return "MB_SHAPE";
98 : : case MB_RELATIVE_SIZE_SQUARED:
99 [ + - ]: 8 : return "MB_RELATIVE_SIZE_SQUARED";
100 : : case MB_SHAPE_AND_SIZE:
101 [ + - ]: 8 : return "MB_SHAPE_AND_SIZE";
102 : : case MB_SHEAR_AND_SIZE:
103 [ + - ]: 4 : return "MB_SHEAR_AND_SIZE";
104 : : case MB_DISTORTION:
105 [ + - ]: 8 : return "MB_DISTORTION";
106 : : case MB_LENGTH:
107 [ + - ]: 6 : return "MB_LENGTH";
108 : : case MB_RADIUS_RATIO:
109 [ # # ]: 0 : return "MB_RADIUS_RATIO";
110 : : case MB_ASPECT_BETA:
111 [ # # ]: 0 : return "MB_ASPECT_BETA";
112 : : case MB_ASPECT_RATIO:
113 [ + - ]: 2 : return "MB_ASPECT_RATIO";
114 : : case MB_ASPECT_GAMMA:
115 [ # # ]: 0 : return "MB_ASPECT_GAMMA";
116 : : case MB_MINIMUM_ANGLE:
117 [ + - ]: 4 : return "MB_MINIMUM_ANGLE";
118 : : case MB_COLLAPSE_RATIO:
119 [ # # ]: 0 : return "MB_COLLAPSE_RATIO";
120 : : case MB_WARPAGE:
121 [ + - ]: 2 : return "MB_WARPAGE";
122 : : case MB_AREA:
123 [ + - ]: 4 : return "MB_AREA";
124 : : case MB_MAXIMUM_ANGLE:
125 [ + - ]: 4 : return "MB_MAXIMUM_ANGLE";
126 : : default:
127 [ # # ]: 106 : return "MB_QUALITY_COUNT";
128 : : }
129 : : }
130 : :
131 : : class VerdictWrapper
132 : : {
133 : : public:
134 : : VerdictWrapper( Interface* mb );
135 : : virtual ~VerdictWrapper();
136 : : //! return a quality for an entity
137 : : /** compute the quality for an element; the coordinates and number of nodes can be passed
138 : : * if available
139 : : \param eh element entity handle.
140 : : \param q quality requested
141 : : \param quality output
142 : : \param num_nodes optional, number of vertices
143 : : \param coords options, interleaved coordinates
144 : : return MB_SUCCESS
145 : : Example: \code
146 : : EntityHandle hex;
147 : : double jac;
148 : : rval = quality_measure(hex, MB_JACOBIAN, jac); \endcode
149 : : */
150 : : ErrorCode quality_measure( EntityHandle eh, QualityType q, double& quality, int num_nodes = 0,
151 : : EntityType etype = MBMAXTYPE, double* coords = NULL );
152 : : //! return a quality name
153 : : /** return quality name (convert an enum QualityType to a string)
154 : : \param q quality type
155 : : return string
156 : : Example: \code
157 : :
158 : : const char * name = quality_name(MB_JACOBIAN); \endcode
159 : : */
160 : : const char* quality_name( QualityType q );
161 : : //! return a string with entity type name
162 : : const char* entity_type_name( EntityType etype );
163 : : //! return an int with total available qualities for type
164 : : int num_qualities( EntityType etype );
165 : : //! return true if quality possible
166 : : int possible_quality( EntityType et, QualityType q );
167 : : // relative size needs a base size, that is set at global level, one for each major type (hex,
168 : : // tet, quad, tri)
169 : : ErrorCode set_size( double size );
170 : : //! return all qualities for an element
171 : : /** compute all qualities for an element
172 : : \param eh element entity handle.
173 : : \param qs list of QualityType
174 : : \param qualities list of qualities
175 : : return MB_SUCCESS
176 : : Example: \code
177 : : EntityHandle hex;
178 : : std::vector<QualityType> qs;
179 : : std::vector<double> qualities;
180 : : all_quality_measures(hex, qs, qualities); \endcode
181 : : */
182 : : ErrorCode all_quality_measures( EntityHandle eh, std::map< QualityType, double >& qualities );
183 : :
184 : : private:
185 : : Interface* mbImpl;
186 : : };
187 : : } // namespace moab
188 : : #endif /* SRC_VERDICT_MOAB_VERDICTWRAPPER_HPP_ */
|