libMesh::Quality Namespace Reference
Functions | |
| std::string | name (const ElemQuality q) |
| std::string | describe (const ElemQuality q) |
| std::vector< ElemQuality > | valid (const ElemType t) |
Variables | |
| const unsigned int | num_quals = 16 |
Detailed Description
A namespace for quality utility functions.
Function Documentation
| std::string libMesh::Quality::describe | ( | const ElemQuality | q | ) |
- Returns:
- a description for a
ElemQualityenum
This function returns a string containing a short description of q. Useful for asking the enum what it computes.
Definition at line 127 of file elem_quality.C.
References libMeshEnums::ASPECT_RATIO, libMeshEnums::ASPECT_RATIO_BETA, libMeshEnums::ASPECT_RATIO_GAMMA, libMeshEnums::CONDITION, libMeshEnums::DIAGONAL, libMeshEnums::DISTORTION, libMeshEnums::JACOBIAN, libMeshEnums::MAX_ANGLE, libMeshEnums::MIN_ANGLE, libMeshEnums::SHAPE, libMeshEnums::SHEAR, libMeshEnums::SIZE, libMeshEnums::SKEW, libMeshEnums::STRETCH, libMeshEnums::TAPER, and libMeshEnums::WARP.
00128 { 00129 00130 std::ostringstream desc; 00131 00132 switch (q) 00133 { 00134 00135 case ASPECT_RATIO: 00136 desc << "Max edge length ratio\n" 00137 << "at element center.\n" 00138 << '\n' 00139 << "Suggested ranges:\n" 00140 << "Hexes: (1 -> 4)\n" 00141 << "Quads: (1 -> 4)"; 00142 break; 00143 00144 case SKEW: 00145 desc << "Maximum |cos A|, where A\n" 00146 << "is the angle between edges\n" 00147 << "at element center.\n" 00148 << '\n' 00149 << "Suggested ranges:\n" 00150 << "Hexes: (0 -> 0.5)\n" 00151 << "Quads: (0 -> 0.5)"; 00152 break; 00153 00154 case SHEAR: 00155 desc << "LIBMESH_DIM / K(Js)\n" 00156 << '\n' 00157 << "LIBMESH_DIM = element dimension.\n" 00158 << "K(Js) = Condition number of \n" 00159 << " Jacobian skew matrix.\n" 00160 << '\n' 00161 << "Suggested ranges:\n" 00162 << "Hexes(LIBMESH_DIM=3): (0.3 -> 1)\n" 00163 << "Quads(LIBMESH_DIM=2): (0.3 -> 1)"; 00164 break; 00165 00166 case SHAPE: 00167 desc << "LIBMESH_DIM / K(Jw)\n" 00168 << '\n' 00169 << "LIBMESH_DIM = element dimension.\n" 00170 << "K(Jw) = Condition number of \n" 00171 << " weighted Jacobian\n" 00172 << " matrix.\n" 00173 << '\n' 00174 << "Suggested ranges:\n" 00175 << "Hexes(LIBMESH_DIM=3): (0.3 -> 1)\n" 00176 << "Tets(LIBMESH_DIM=3): (0.2 -> 1)\n" 00177 << "Quads(LIBMESH_DIM=2): (0.3 -> 1)."; 00178 break; 00179 00180 case MAX_ANGLE: 00181 desc << "Largest included angle.\n" 00182 << '\n' 00183 << "Suggested ranges:\n" 00184 << "Quads: (90 -> 135)\n" 00185 << "Triangles: (60 -> 90)"; 00186 break; 00187 00188 case MIN_ANGLE: 00189 desc << "Smallest included angle.\n" 00190 << '\n' 00191 << "Suggested ranges:\n" 00192 << "Quads: (45 -> 90)\n" 00193 << "Triangles: (30 -> 60)"; 00194 break; 00195 00196 case CONDITION: 00197 desc << "Condition number of the\n" 00198 << "Jacobian matrix.\n" 00199 << '\n' 00200 << "Suggested ranges:\n" 00201 << "Quads: (1 -> 4)\n" 00202 << "Hexes: (1 -> 8)\n" 00203 << "Tris: (1 -> 1.3)\n" 00204 << "Tets: (1 -> 3)"; 00205 break; 00206 00207 case DISTORTION: 00208 desc << "min |J| * A / <A>\n" 00209 << '\n' 00210 << "|J| = norm of Jacobian matrix\n" 00211 << " A = actual area\n" 00212 << "<A> = reference area\n" 00213 << '\n' 00214 << "Suggested ranges:\n" 00215 << "Quads: (0.6 -> 1), <A>=4\n" 00216 << "Hexes: (0.6 -> 1), <A>=8\n" 00217 << "Tris: (0.6 -> 1), <A>=1/2\n" 00218 << "Tets: (0.6 -> 1), <A>=1/6"; 00219 break; 00220 00221 case TAPER: 00222 desc << "Maximum ratio of lengths\n" 00223 << "derived from opposited edges.\n" 00224 << '\n' 00225 << "Suggested ranges:\n" 00226 << "Quads: (0.7 -> 1)\n" 00227 << "Hexes: (0.4 -> 1)"; 00228 break; 00229 00230 case WARP: 00231 desc << "cos D\n" 00232 << '\n' 00233 << "D = minimum dihedral angle\n" 00234 << " formed by diagonals.\n" 00235 << '\n' 00236 << "Suggested ranges:\n" 00237 << "Quads: (0.9 -> 1)"; 00238 break; 00239 00240 case STRETCH: 00241 desc << "Sqrt(3) * L_min / L_max\n" 00242 << '\n' 00243 << "L_min = minimum edge length.\n" 00244 << "L_max = maximum edge length.\n" 00245 << '\n' 00246 << "Suggested ranges:\n" 00247 << "Quads: (0.25 -> 1)\n" 00248 << "Hexes: (0.25 -> 1)"; 00249 break; 00250 00251 case DIAGONAL: 00252 desc << "D_min / D_max\n" 00253 << '\n' 00254 << "D_min = minimum diagonal.\n" 00255 << "D_max = maximum diagonal.\n" 00256 << '\n' 00257 << "Suggested ranges:\n" 00258 << "Hexes: (0.65 -> 1)"; 00259 break; 00260 00261 case ASPECT_RATIO_BETA: 00262 desc << "CR / (3 * IR)\n" 00263 << '\n' 00264 << "CR = circumsphere radius\n" 00265 << "IR = inscribed sphere radius\n" 00266 << '\n' 00267 << "Suggested ranges:\n" 00268 << "Tets: (1 -> 3)"; 00269 break; 00270 00271 case ASPECT_RATIO_GAMMA: 00272 desc << "S^(3/2) / 8.479670 * V\n" 00273 << '\n' 00274 << "S = sum(si*si/6)\n" 00275 << "si = edge length\n" 00276 << "V = volume\n" 00277 << '\n' 00278 << "Suggested ranges:\n" 00279 << "Tets: (1 -> 3)"; 00280 break; 00281 00282 case SIZE: 00283 desc << "min (|J|, |1/J|)\n" 00284 << '\n' 00285 << "|J| = norm of Jacobian matrix.\n" 00286 << '\n' 00287 << "Suggested ranges:\n" 00288 << "Quads: (0.3 -> 1)\n" 00289 << "Hexes: (0.5 -> 1)\n" 00290 << "Tris: (0.25 -> 1)\n" 00291 << "Tets: (0.2 -> 1)"; 00292 break; 00293 00294 case JACOBIAN: 00295 desc << "Minimum Jacobian divided by\n" 00296 << "the lengths of the LIBMESH_DIM\n" 00297 << "largest edge vectors.\n" 00298 << '\n' 00299 << "LIBMESH_DIM = element dimension.\n" 00300 << '\n' 00301 << "Suggested ranges:\n" 00302 << "Quads: (0.5 -> 1)\n" 00303 << "Hexes: (0.5 -> 1)\n" 00304 << "Tris: (0.5 -> 1.155)\n" 00305 << "Tets: (0.5 -> 1.414)"; 00306 break; 00307 00308 default: 00309 desc << "Unknown"; 00310 break; 00311 } 00312 00313 return desc.str(); 00314 }
| std::string libMesh::Quality::name | ( | const ElemQuality | q | ) |
- Returns:
- a descriptive name for a
ElemQualityenum
This function returns a string containing some name for q. Useful for asking the enum what its name is. I added this since you may want a simple way to attach a name or description to the ElemQuality enums. It can be removed if it is found to be useless.
Definition at line 39 of file elem_quality.C.
References libMeshEnums::ASPECT_RATIO, libMeshEnums::ASPECT_RATIO_BETA, libMeshEnums::ASPECT_RATIO_GAMMA, libMeshEnums::CONDITION, libMeshEnums::DIAGONAL, libMeshEnums::DISTORTION, libMeshEnums::JACOBIAN, libMeshEnums::MAX_ANGLE, libMeshEnums::MIN_ANGLE, libMeshEnums::SHAPE, libMeshEnums::SHEAR, libMeshEnums::SIZE, libMeshEnums::SKEW, libMeshEnums::STRETCH, libMeshEnums::TAPER, and libMeshEnums::WARP.
Referenced by GETPOT_NAMESPACE::GetPot::_convert_to_type_no_default(), libMesh::Utility::complex_filename(), DMLibMeshSetUpName_Private(), DMView_libMesh(), libMesh::Parameters::get(), libMesh::ReferenceCounter::get_info(), libMesh::XdrMGF::init(), libMesh::libmesh_cast_ptr(), libMesh::libmesh_cast_ref(), libMesh::SparseMatrix< Number >::print_matlab(), libMesh::NumericVector< Number >::print_matlab(), libMesh::PltLoader::read_header(), libMesh::ReferenceCountedObject< RBParametrized >::ReferenceCountedObject(), libMesh::Parameters::Parameter< T >::type(), libMesh::TecplotIO::write_binary(), and libMesh::ReferenceCountedObject< RBParametrized >::~ReferenceCountedObject().
00040 { 00041 std::string its_name; 00042 00043 switch (q) 00044 { 00045 00046 case ASPECT_RATIO: 00047 its_name = "Aspect Ratio"; 00048 break; 00049 00050 case SKEW: 00051 its_name = "Skew"; 00052 break; 00053 00054 case SHEAR: 00055 its_name = "Shear"; 00056 break; 00057 00058 case SHAPE: 00059 its_name = "Shape"; 00060 break; 00061 00062 case MAX_ANGLE: 00063 its_name = "Maximum Angle"; 00064 break; 00065 00066 case MIN_ANGLE: 00067 its_name = "Minimum Angle"; 00068 break; 00069 00070 case CONDITION: 00071 its_name = "Condition Number"; 00072 break; 00073 00074 case DISTORTION: 00075 its_name = "Distortion"; 00076 break; 00077 00078 case TAPER: 00079 its_name = "Taper"; 00080 break; 00081 00082 case WARP: 00083 its_name = "Warp"; 00084 break; 00085 00086 case STRETCH: 00087 its_name = "Stretch"; 00088 break; 00089 00090 case DIAGONAL: 00091 its_name = "Diagonal"; 00092 break; 00093 00094 case ASPECT_RATIO_BETA: 00095 its_name = "AR Beta"; 00096 break; 00097 00098 case ASPECT_RATIO_GAMMA: 00099 its_name = "AR Gamma"; 00100 break; 00101 00102 case SIZE: 00103 its_name = "Size"; 00104 break; 00105 00106 case JACOBIAN: 00107 its_name = "Jacobian"; 00108 break; 00109 00110 default: 00111 its_name = "Unknown"; 00112 break; 00113 } 00114 00115 return its_name; 00116 }
| std::vector< ElemQuality > libMesh::Quality::valid | ( | const ElemType | t | ) |
- Returns:
- the valid
ElemQualitymetrics for a givenElemTypeelement type.
Returns all valid quality metrics for element type t.
Definition at line 321 of file elem_quality.C.
References libMeshEnums::ASPECT_RATIO, libMeshEnums::ASPECT_RATIO_BETA, libMeshEnums::ASPECT_RATIO_GAMMA, libMeshEnums::CONDITION, libMeshEnums::DIAGONAL, libMeshEnums::DISTORTION, libMeshEnums::EDGE2, libMeshEnums::EDGE3, libMeshEnums::EDGE4, libMeshEnums::HEX20, libMeshEnums::HEX27, libMeshEnums::HEX8, libMeshEnums::INFEDGE2, libMeshEnums::INFHEX16, libMeshEnums::INFHEX18, libMeshEnums::INFHEX8, libMeshEnums::INFPRISM12, libMeshEnums::INFPRISM6, libMeshEnums::INFQUAD4, libMeshEnums::INFQUAD6, libMeshEnums::JACOBIAN, libMeshEnums::MAX_ANGLE, libMeshEnums::MIN_ANGLE, libMesh::out, libMeshEnums::PRISM18, libMeshEnums::PRISM6, libMeshEnums::PYRAMID5, libMeshEnums::QUAD4, libMeshEnums::QUAD8, libMeshEnums::QUAD9, libMeshEnums::SHAPE, libMeshEnums::SHEAR, libMeshEnums::SIZE, libMeshEnums::SKEW, libMeshEnums::STRETCH, libMeshEnums::TAPER, libMeshEnums::TET10, libMeshEnums::TET4, libMeshEnums::TRI3, libMeshEnums::TRI6, and libMeshEnums::WARP.
00322 { 00323 std::vector<ElemQuality> v; 00324 00325 switch (t) 00326 { 00327 case EDGE2: 00328 case EDGE3: 00329 case EDGE4: 00330 { 00331 // None yet 00332 break; 00333 } 00334 00335 case TRI3: 00336 case TRI6: 00337 { 00338 v.resize(7); 00339 v[0] = MAX_ANGLE; 00340 v[1] = MIN_ANGLE; 00341 v[2] = CONDITION; 00342 v[3] = JACOBIAN; 00343 v[4] = SIZE; 00344 v[5] = SHAPE; 00345 v[6] = DISTORTION; 00346 break; 00347 } 00348 00349 case QUAD4: 00350 case QUAD8: 00351 case QUAD9: 00352 { 00353 v.resize(13); 00354 v[0] = ASPECT_RATIO; 00355 v[1] = SKEW; 00356 v[2] = TAPER; 00357 v[3] = WARP; 00358 v[4] = STRETCH; 00359 v[5] = MIN_ANGLE; 00360 v[6] = MAX_ANGLE; 00361 v[7] = CONDITION; 00362 v[8] = JACOBIAN; 00363 v[9] = SHEAR; 00364 v[10] = SHAPE; 00365 v[11] = SIZE; 00366 v[12] = DISTORTION; 00367 break; 00368 } 00369 00370 case TET4: 00371 case TET10: 00372 { 00373 v.resize(7); 00374 v[0] = ASPECT_RATIO_BETA; 00375 v[1] = ASPECT_RATIO_GAMMA; 00376 v[2] = CONDITION; 00377 v[3] = JACOBIAN; 00378 v[4] = SHAPE; 00379 v[5] = SIZE; 00380 v[6] = DISTORTION; 00381 break; 00382 } 00383 00384 case HEX8: 00385 case HEX20: 00386 case HEX27: 00387 { 00388 v.resize(11); 00389 v[0] = ASPECT_RATIO; 00390 v[1] = SKEW; 00391 v[2] = SHEAR; 00392 v[3] = SHAPE; 00393 v[4] = CONDITION; 00394 v[5] = JACOBIAN; 00395 v[6] = DISTORTION; 00396 v[7] = TAPER; 00397 v[8] = STRETCH; 00398 v[9] = DIAGONAL; 00399 v[10] = SIZE; 00400 break; 00401 } 00402 00403 case PRISM6: 00404 case PRISM18: 00405 { 00406 // None yet 00407 break; 00408 } 00409 00410 case PYRAMID5: 00411 { 00412 // None yet 00413 break; 00414 } 00415 00416 00417 00418 #ifdef LIBMESH_ENABLE_INFINITE_ELEMENTS 00419 00420 case INFEDGE2: 00421 { 00422 // None yet 00423 break; 00424 } 00425 00426 case INFQUAD4: 00427 case INFQUAD6: 00428 { 00429 // None yet 00430 break; 00431 } 00432 00433 case INFHEX8: 00434 case INFHEX16: 00435 case INFHEX18: 00436 { 00437 // None yet 00438 break; 00439 } 00440 00441 case INFPRISM6: 00442 case INFPRISM12: 00443 { 00444 // None yet 00445 break; 00446 } 00447 00448 #endif 00449 00450 00451 default: 00452 { 00453 libMesh::out << "Undefined element type!." << std::endl; 00454 libmesh_error(); 00455 } 00456 } 00457 00458 return v; 00459 }
Variable Documentation
| const unsigned int libMesh::Quality::num_quals = 16 |
The number of element quality types we have defined. This needs to be updated if you add one.
Definition at line 45 of file elem_quality.h.
Site Created By: libMesh Developers
Last modified: February 05 2013 19:55:49 UTC
Hosted By: