Mesh Oriented datABase
(version 5.4.1)
Array-based unstructured mesh datastructure
|
00001 /* 00002 * VerdictWrapper.hpp 00003 * 00004 * Created on: Nov 18, 2014 00005 * Author: iulian 00006 */ 00007 00008 #ifndef SRC_VERDICT_MOAB_VERDICTWRAPPER_HPP_ 00009 #define SRC_VERDICT_MOAB_VERDICTWRAPPER_HPP_ 00010 00011 #include <map> 00012 00013 namespace moab 00014 { 00015 00016 class Interface; 00017 00018 enum QualityType 00019 { 00020 // order exactly from HexMetricVals 00021 MB_UNDEFINED_QUALITY = -1, 00022 MB_EDGE_RATIO = 0, // 0 MBHEX, MBTET, MBQUAD, MBTRI 00023 MB_MAX_EDGE_RATIO, // 1 MBHEX, MBQUAD 00024 MB_SKEW, // 2 MBHEX, MBQUAD 00025 MB_TAPER, // 3 MBHEX, MBQUAD 00026 MB_VOLUME, // 4 MBHEX, MBTET, MBPRISM, MBKNIFE 00027 MB_STRETCH, // 5 MBHEX, MBQUAD 00028 MB_DIAGONAL, // 6 MBHEX, 00029 MB_DIMENSION, // 7 MBHEX, 00030 MB_ODDY, // 8 MBHEX, MBQUAD 00031 MB_MED_ASPECT_FROBENIUS, // 9 MBHEX, MBQUAD 00032 MB_MAX_ASPECT_FROBENIUS, // 10 MBHEX, MBTET (aspect_frobenius) MBQUAD, MBTRI 00033 // (aspect_frobenius) 00034 MB_CONDITION, // 11 MBHEX, MBTET, MBQUAD, MBTRI 00035 MB_JACOBIAN, // 12 MBHEX, MBTET, MBQUAD 00036 MB_SCALED_JACOBIAN, // 13 MBHEX, MBTET, MBQUAD, MBTRI 00037 MB_SHEAR, // 14 MBHEX, MBQUAD, MBTRI 00038 MB_SHAPE, // 15 MBHEX, MBTET, MBQUAD, MBTRI 00039 MB_RELATIVE_SIZE_SQUARED, // 16 MBHEX, MBTET, MBQUAD, MBTRI 00040 MB_SHAPE_AND_SIZE, // 17 MBHEX, MBTET, MBQUAD 00041 MB_SHEAR_AND_SIZE, // 18 MBHEX, MBQUAD 00042 MB_DISTORTION, // 19 MBHEX, MBTET, MBQUAD 00043 // length for edge: 00044 MB_LENGTH, // 20 only for MBEDGE 00045 // specific to tets 00046 MB_RADIUS_RATIO, // 21 MBTET, MBQUAD, MBTRI 00047 MB_ASPECT_BETA, // 22 MBTET 00048 MB_ASPECT_RATIO, // 23 MBTET, MBQUAD, MBTRI 00049 MB_ASPECT_GAMMA, // 24 MBTET 00050 MB_MINIMUM_ANGLE, // 25 MBTET, MBQUAD, MBTRI 00051 MB_COLLAPSE_RATIO, // 26 MBTET 00052 // specific to quads 00053 MB_WARPAGE, // 27 MBQUAD 00054 MB_AREA, // 28 MBQUAD, MBTRI 00055 MB_MAXIMUM_ANGLE, // 29 MBQUAD, MBTRI 00056 MB_QUALITY_COUNT // used to size the arrays 00057 00058 }; 00059 00060 inline std::string QualityType_ToString( QualityType qtype ) 00061 { 00062 switch( qtype ) 00063 { 00064 case MB_UNDEFINED_QUALITY: 00065 return "MB_UNDEFINED_QUALITY"; 00066 case MB_EDGE_RATIO: 00067 return "MB_EDGE_RATIO"; 00068 case MB_MAX_EDGE_RATIO: 00069 return "MB_MAX_EDGE_RATIO"; 00070 case MB_SKEW: 00071 return "MB_SKEW"; 00072 case MB_TAPER: 00073 return "MB_TAPER"; 00074 case MB_VOLUME: 00075 return "MB_VOLUME"; 00076 case MB_STRETCH: 00077 return "MB_STRETCH"; 00078 case MB_DIAGONAL: 00079 return "MB_DIAGONAL"; 00080 case MB_DIMENSION: 00081 return "MB_DIMENSION"; 00082 case MB_ODDY: 00083 return "MB_ODDY"; 00084 case MB_MED_ASPECT_FROBENIUS: 00085 return "MB_MED_ASPECT_FROBENIUS"; 00086 case MB_MAX_ASPECT_FROBENIUS: 00087 return "MB_MAX_ASPECT_FROBENIUS"; 00088 case MB_CONDITION: 00089 return "MB_CONDITION"; 00090 case MB_JACOBIAN: 00091 return "MB_JACOBIAN"; 00092 case MB_SCALED_JACOBIAN: 00093 return "MB_SCALED_JACOBIAN"; 00094 case MB_SHEAR: 00095 return "MB_SHEAR"; 00096 case MB_SHAPE: 00097 return "MB_SHAPE"; 00098 case MB_RELATIVE_SIZE_SQUARED: 00099 return "MB_RELATIVE_SIZE_SQUARED"; 00100 case MB_SHAPE_AND_SIZE: 00101 return "MB_SHAPE_AND_SIZE"; 00102 case MB_SHEAR_AND_SIZE: 00103 return "MB_SHEAR_AND_SIZE"; 00104 case MB_DISTORTION: 00105 return "MB_DISTORTION"; 00106 case MB_LENGTH: 00107 return "MB_LENGTH"; 00108 case MB_RADIUS_RATIO: 00109 return "MB_RADIUS_RATIO"; 00110 case MB_ASPECT_BETA: 00111 return "MB_ASPECT_BETA"; 00112 case MB_ASPECT_RATIO: 00113 return "MB_ASPECT_RATIO"; 00114 case MB_ASPECT_GAMMA: 00115 return "MB_ASPECT_GAMMA"; 00116 case MB_MINIMUM_ANGLE: 00117 return "MB_MINIMUM_ANGLE"; 00118 case MB_COLLAPSE_RATIO: 00119 return "MB_COLLAPSE_RATIO"; 00120 case MB_WARPAGE: 00121 return "MB_WARPAGE"; 00122 case MB_AREA: 00123 return "MB_AREA"; 00124 case MB_MAXIMUM_ANGLE: 00125 return "MB_MAXIMUM_ANGLE"; 00126 default: 00127 return "MB_QUALITY_COUNT"; 00128 } 00129 } 00130 00131 class VerdictWrapper 00132 { 00133 public: 00134 VerdictWrapper( Interface* mb ); 00135 virtual ~VerdictWrapper(); 00136 //! return a quality for an entity 00137 /** compute the quality for an element; the coordinates and number of nodes can be passed 00138 * if available 00139 \param eh element entity handle. 00140 \param q quality requested 00141 \param quality output 00142 \param num_nodes optional, number of vertices 00143 \param coords options, interleaved coordinates 00144 return MB_SUCCESS 00145 Example: \code 00146 EntityHandle hex; 00147 double jac; 00148 rval = quality_measure(hex, MB_JACOBIAN, jac); \endcode 00149 */ 00150 ErrorCode quality_measure( EntityHandle eh, 00151 QualityType q, 00152 double& quality, 00153 int num_nodes = 0, 00154 EntityType etype = MBMAXTYPE, 00155 double* coords = NULL ); 00156 //! return a quality name 00157 /** return quality name (convert an enum QualityType to a string) 00158 \param q quality type 00159 return string 00160 Example: \code 00161 00162 const char * name = quality_name(MB_JACOBIAN); \endcode 00163 */ 00164 const char* quality_name( QualityType q ); 00165 //! return a string with entity type name 00166 const char* entity_type_name( EntityType etype ); 00167 //! return an int with total available qualities for type 00168 int num_qualities( EntityType etype ); 00169 //! return true if quality possible 00170 int possible_quality( EntityType et, QualityType q ); 00171 // relative size needs a base size, that is set at global level, one for each major type (hex, 00172 // tet, quad, tri) 00173 ErrorCode set_size( double size ); 00174 //! return all qualities for an element 00175 /** compute all qualities for an element 00176 \param eh element entity handle. 00177 \param qs list of QualityType 00178 \param qualities list of qualities 00179 return MB_SUCCESS 00180 Example: \code 00181 EntityHandle hex; 00182 std::vector<QualityType> qs; 00183 std::vector<double> qualities; 00184 all_quality_measures(hex, qs, qualities); \endcode 00185 */ 00186 ErrorCode all_quality_measures( EntityHandle eh, std::map< QualityType, double >& qualities ); 00187 00188 private: 00189 Interface* mbImpl; 00190 }; 00191 } // namespace moab 00192 #endif /* SRC_VERDICT_MOAB_VERDICTWRAPPER_HPP_ */