23 #include "libmesh/libmesh_common.h" 24 #include "libmesh/elem_quality.h" 25 #include "libmesh/enum_elem_type.h" 26 #include "libmesh/enum_elem_quality.h" 50 its_name =
"Aspect Ratio";
66 its_name =
"Maximum Angle";
70 its_name =
"Minimum Angle";
74 its_name =
"Maximum Dihedral Angle";
78 its_name =
"Minimum Dihedral Angle";
82 its_name =
"Condition Number";
86 its_name =
"Distortion";
102 its_name =
"Diagonal";
106 its_name =
"AR Beta";
110 its_name =
"AR Gamma";
118 its_name =
"Jacobian";
122 its_name =
"Scaled Jacobian";
126 its_name =
"Unknown";
145 std::ostringstream desc;
152 desc <<
"Max edge length ratio\n" 153 <<
"at element center.\n" 155 <<
"Suggested ranges:\n" 156 <<
"Hexes: (1 -> 4)\n" 157 <<
"Quads: (1 -> 4)";
161 desc <<
"Maximum |cos A|, where A\n" 162 <<
"is the angle between edges\n" 163 <<
"at element center.\n" 165 <<
"Suggested ranges:\n" 166 <<
"Hexes: (0 -> 0.5)\n" 167 <<
"Quads: (0 -> 0.5)";
171 desc <<
"LIBMESH_DIM / K(Js)\n" 173 <<
"LIBMESH_DIM = element dimension.\n" 174 <<
"K(Js) = Condition number of \n" 175 <<
" Jacobian skew matrix.\n" 177 <<
"Suggested ranges:\n" 178 <<
"Hexes(LIBMESH_DIM=3): (0.3 -> 1)\n" 179 <<
"Quads(LIBMESH_DIM=2): (0.3 -> 1)";
183 desc <<
"LIBMESH_DIM / K(Jw)\n" 185 <<
"LIBMESH_DIM = element dimension.\n" 186 <<
"K(Jw) = Condition number of \n" 187 <<
" weighted Jacobian\n" 190 <<
"Suggested ranges:\n" 191 <<
"Hexes(LIBMESH_DIM=3): (0.3 -> 1)\n" 192 <<
"Tets(LIBMESH_DIM=3): (0.2 -> 1)\n" 193 <<
"Quads(LIBMESH_DIM=2): (0.3 -> 1).";
197 desc <<
"Largest angle between all adjacent pairs of edges (in 2D, sides).\n" 199 <<
"Suggested ranges:\n" 200 <<
"Quads: (90 -> 135)\n" 201 <<
"Triangles: (60 -> 90)";
205 desc <<
"Smallest angle between all adjacent pairs of edges (in 2D, sides).\n" 207 <<
"Suggested ranges:\n" 208 <<
"Quads: (45 -> 90)\n" 209 <<
"Triangles: (30 -> 60)";
213 desc <<
"Largest angle between all adjacent pairs of sides (in 2D, equivalent to MAX_ANGLE).\n" 215 <<
"Suggested ranges:\n" 216 <<
"Quads: (90 -> 135)\n" 217 <<
"Triangles: (60 -> 90)";
221 desc <<
"Smallest angle between all adjacent pairs of sides (in 2D, equivalent to MIN_ANGLE).\n" 223 <<
"Suggested ranges:\n" 224 <<
"Quads: (45 -> 90)\n" 225 <<
"Triangles: (30 -> 60)";
229 desc <<
"Condition number of the\n" 230 <<
"Jacobian matrix.\n" 232 <<
"Suggested ranges:\n" 233 <<
"Quads: (1 -> 4)\n" 234 <<
"Hexes: (1 -> 8)\n" 235 <<
"Tris: (1 -> 1.3)\n" 240 desc <<
"min |J| * A / <A>\n" 242 <<
"|J| = norm of Jacobian matrix\n" 243 <<
" A = actual area\n" 244 <<
"<A> = reference area\n" 246 <<
"Suggested ranges:\n" 247 <<
"Quads: (0.6 -> 1), <A>=4\n" 248 <<
"Hexes: (0.6 -> 1), <A>=8\n" 249 <<
"Tris: (0.6 -> 1), <A>=1/2\n" 250 <<
"Tets: (0.6 -> 1), <A>=1/6";
254 desc <<
"Maximum ratio of lengths\n" 255 <<
"derived from opposite edges.\n" 257 <<
"Suggested ranges:\n" 258 <<
"Quads: (0.7 -> 1)\n" 259 <<
"Hexes: (0.4 -> 1)";
265 <<
"D = minimum dihedral angle\n" 266 <<
" formed by diagonals.\n" 268 <<
"Suggested ranges:\n" 269 <<
"Quads: (0.9 -> 1)";
273 desc <<
"Sqrt(3) * L_min / L_max\n" 275 <<
"L_min = minimum edge length.\n" 276 <<
"L_max = maximum edge length.\n" 278 <<
"Suggested ranges:\n" 279 <<
"Quads: (0.25 -> 1)\n" 280 <<
"Hexes: (0.25 -> 1)";
284 desc <<
"D_min / D_max\n" 286 <<
"D_min = minimum diagonal.\n" 287 <<
"D_max = maximum diagonal.\n" 289 <<
"Suggested ranges:\n" 290 <<
"Hexes: (0.65 -> 1)";
294 desc <<
"CR / (3 * IR)\n" 296 <<
"CR = circumsphere radius\n" 297 <<
"IR = inscribed sphere radius\n" 299 <<
"Suggested ranges:\n" 304 desc <<
"S^(3/2) / 8.479670 * V\n" 306 <<
"S = sum(si*si/6)\n" 307 <<
"si = edge length\n" 310 <<
"Suggested ranges:\n" 315 desc <<
"min (|J|, |1/J|)\n" 317 <<
"|J| = norm of Jacobian matrix.\n" 319 <<
"Suggested ranges:\n" 320 <<
"Quads: (0.3 -> 1)\n" 321 <<
"Hexes: (0.5 -> 1)\n" 322 <<
"Tris: (0.25 -> 1)\n" 323 <<
"Tets: (0.2 -> 1)";
328 desc <<
"Minimum nodal Jacobian.\n" 329 <<
"The nodal Jacobians are computed by taking the cross product (2D) or scalar product (3D) of the adjacent edges that meet at that node.\n" 330 <<
"In the SCALED_JACOBIAN case, we also then divide by the lengths of each of the associated edges.\n" 331 <<
"For Pyramid elements where four edges meet at the apex node, special handling is required.\n" 333 <<
"Suggested acceptable ranges (from Cubit documentation) for SCALED_JACOBIAN metric:\n" 334 <<
"Quads/Hexes: (0.5 -> 1)\n" 335 <<
"Tris/Tets: (0.2 -> 1.0)";
349 std::vector<ElemQuality> v;
495 #ifdef LIBMESH_ENABLE_INFINITE_ELEMENTS 525 libmesh_error_msg(
"Undefined element type!");
std::string name(const ElemQuality q)
This function returns a string containing some name for q.
ElemType
Defines an enum for geometric element types.
std::string describe(const ElemQuality q)
This function returns a string containing a short description of q.
The libMesh namespace provides an interface to certain functionality in the library.
ElemQuality
Defines an enum for element quality metrics.
std::vector< ElemQuality > valid(const ElemType t)