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 ElemQuality enum

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 ElemQuality enum

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 ElemQuality metrics for a given ElemType element 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:
SourceForge.net Logo