![]() |
Mesh Oriented datABase
(version 5.4.1)
Array-based unstructured mesh datastructure
|
00001 /*=========================================================================
00002
00003 Module: $RCSfile: verdict.h,v $
00004
00005 Copyright (c) 2006 Sandia Corporation.
00006 All rights reserved.
00007 See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
00008
00009 This software is distributed WITHOUT ANY WARRANTY; without even
00010 the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
00011 PURPOSE. See the above copyright notice for more information.
00012
00013 =========================================================================*/
00014
00015 /*! \file verdict.h
00016 \brief Header file for verdict library that calculates metrics for finite elements.
00017 Also see: \ref index "Main Page"
00018 *
00019 * verdict.h is the header file for applications/libraries to include
00020 * to compute quality metrics.
00021 *
00022 * This file is part of VERDICT
00023 *
00024 */
00025
00026 /* note: changes to this file must be propagated to verdict.h.in so that
00027 Verdict can be compiled using CMake and autoconf. */
00028
00029 #ifndef VERDICT_INC_LIB
00030 #define VERDICT_INC_LIB
00031
00032 #ifndef VERDICT_VERSION
00033 #define VERDICT_VERSION 120
00034 #endif
00035
00036 #define VERDICT_DBL_MIN 1.0E-30
00037 #define VERDICT_DBL_MAX 1.0E+30
00038 #define VERDICT_PI 3.1415926535897932384626
00039
00040 #ifdef __cplusplus
00041 #if defined( WIN32 ) && defined( VERDICT_SHARED_LIB )
00042 #ifdef verdict_EXPORTS
00043 #define C_FUNC_DEF extern "C" __declspec( dllexport )
00044 #else
00045 #define C_FUNC_DEF extern "C" __declspec( dllimport )
00046 #endif
00047 #else
00048 #define C_FUNC_DEF extern "C"
00049 #endif
00050 #else
00051 #if defined( WIN32 ) && defined( VERDICT_SHARED_LIB )
00052 #ifdef verdict_EXPORTS
00053 #define C_FUNC_DEF __declspec( dllexport )
00054 #else
00055 #define C_FUNC_DEF __declspec( dllimport )
00056 #endif
00057 #else
00058 #define C_FUNC_DEF
00059 #endif
00060 #endif
00061
00062 /* typedef for the user if they want to use
00063 * function pointers */
00064 #ifdef __cplusplus
00065 extern "C" {
00066 #endif
00067 typedef double ( *VerdictFunction )( int, double[][3] );
00068 typedef int ( *ComputeNormal )( double point[3], double normal[3] );
00069 #ifdef __cplusplus
00070 }
00071 #endif
00072
00073 /** HexMetricVals is a struct used to return calculated metrics
00074 when calling the function v_hex_quality(...)
00075
00076 HexMetricVals is used just as QuadMetricVals.
00077 For an example, see Detailed Description in QuadMetricVals
00078 */
00079 struct HexMetricVals
00080 {
00081 /** \sa v_hex_edge_ratio */
00082 double edge_ratio;
00083 /** \sa v_hex_max_edge_ratio */
00084 double max_edge_ratio;
00085 /** \sa v_hex_skew */
00086 double skew;
00087 /** \sa v_hex_taper */
00088 double taper;
00089 /** \sa v_hex_volume */
00090 double volume;
00091 /** \sa v_hex_stretch */
00092 double stretch;
00093 /** \sa v_hex_diagonal */
00094 double diagonal;
00095 /** \sa v_hex_dimension */
00096 double dimension;
00097 /** \sa v_hex_oddy */
00098 double oddy;
00099 /** \sa v_hex_med_aspect_frobenius */
00100 double med_aspect_frobenius;
00101 /** \sa v_hex_condition */
00102 double condition;
00103 /** \sa v_hex_jacobian */
00104 double jacobian;
00105 /** \sa v_hex_scaled_jacobian */
00106 double scaled_jacobian;
00107 /** \sa v_hex_shear */
00108 double shear;
00109 /** \sa v_hex_shape */
00110 double shape;
00111 /** \sa v_hex_relative_size */
00112 double relative_size_squared;
00113 /** \sa v_hex_shape_and_size */
00114 double shape_and_size;
00115 /** \sa v_hex_shear_and_size */
00116 double shear_and_size;
00117 /** \sa v_hex_distortion */
00118 double distortion;
00119 };
00120
00121 /** EdgeMetricVals is a struct used to return calculated metrics
00122 when calling the function v_edge_quality(...)
00123
00124 EdgeMetricVals is used just as QuadMetricVals.
00125 For an example, see Detailed Description in QuadMetricVals
00126 */
00127 struct EdgeMetricVals
00128 {
00129 double length;
00130 };
00131
00132 /** KnifeMetricVals is a struct used to return calculated metrics
00133 when calling the function v_knife_quality(...)
00134
00135 KnifeMetricVals is used just as QuadMetricVals.
00136 For an example, see Detailed Description in QuadMetricVals
00137 */
00138 struct KnifeMetricVals
00139 {
00140 double volume;
00141 };
00142
00143 /** QuadMetricVals is a struct used to return calculated metrics
00144 when calling the function v_quad_quality(...)
00145
00146 The following is an example of how this struct is used with Verdict.
00147
00148 Example: \code
00149 QuadMetricVals quad_metrics = {0};
00150 unsigned long metrics_flag = 0;
00151 metrics_flag += V_QUAD_SHAPE;
00152 metrics_flag += V_QUAD_DISTORTION;
00153 metrics_flag += V_QUAD_AREA;
00154 double quad_nodes[4][3];
00155 get_quad_nodes( quad_nodes ); //some user-defined function to load
00156 //xyz coordinate info. into array
00157 v_quad_quality( 4, quad_nodes, metrics_flag, quad_metrics );
00158 double my_shape = quad_metrics.shape;
00159 double my_distortion = quad_metrics.distortion;
00160 double my_area = quad_metrics.area; \endcode
00161
00162 */
00163
00164 struct QuadMetricVals
00165 {
00166 /** \sa v_quad_edge_ratio function */
00167 double edge_ratio;
00168 /** \sa v_quad_max_edge_ratio function */
00169 double max_edge_ratio;
00170 /** \sa v_quad_aspect_ratio function */
00171 double aspect_ratio;
00172 /** \sa v_quad_radius_ratio function */
00173 double radius_ratio;
00174 /** \sa v_quad_med_aspect_frobenius function */
00175 double med_aspect_frobenius;
00176 /** \sa v_quad_max_aspect_frobenius function */
00177 double max_aspect_frobenius;
00178 /** \sa v_quad_skew function */
00179 double skew;
00180 /** \sa v_quad_taper function */
00181 double taper;
00182 /** \sa v_quad_warpage function */
00183 double warpage;
00184 /** \sa v_quad_area function */
00185 double area;
00186 /** \sa v_quad_stretch function */
00187 double stretch;
00188 /** \sa v_quad_smallest_angle function */
00189 double minimum_angle;
00190 /** \sa v_quad_largest_angle function */
00191 double maximum_angle;
00192 /** \sa v_quad_oddy function */
00193 double oddy;
00194 /** \sa v_quad_condition function */
00195 double condition;
00196 /** \sa v_quad_jacobian function */
00197 double jacobian;
00198 /** \sa v_quad_scaled_jacobian function */
00199 double scaled_jacobian;
00200 /** \sa v_quad_shear function */
00201 double shear;
00202 /** \sa v_quad_shape function */
00203 double shape;
00204 /** \sa v_quad_relative_size_squared function */
00205 double relative_size_squared;
00206 /** \sa v_quad_shape_and_size function */
00207 double shape_and_size;
00208 /** \sa v_quad_shear_and_size function */
00209 double shear_and_size;
00210 /** \sa v_quad_distortion function */
00211 double distortion;
00212 };
00213
00214 /** PyramidMetricVals is a struct used to return calculated metrics
00215 when calling the function v_pyramid_quality(...)
00216
00217 PyramidMetricVals is used just as QuadMetricVals.
00218 For an example, see Detailed Description in QuadMetricVals
00219 */
00220 struct PyramidMetricVals
00221 {
00222 double volume;
00223 };
00224
00225 /** WedgeMetricVals is a struct used to return calculated metrics
00226 when calling the function v_wedge_quality(...)
00227
00228 WedgeMetricVals is used just as QuadMetricVals.
00229 For an example, see Detailed Description in QuadMetricVals
00230 */
00231 struct WedgeMetricVals
00232 {
00233 double volume;
00234 };
00235
00236 /** TetMetricVals is a struct used to return calculated metrics
00237 when calling the function v_tet_quality(...)
00238
00239 TetMetricVals is used just as QuadMetricVals.
00240 For an example, see Detailed Description in QuadMetricVals
00241 */
00242 struct TetMetricVals
00243 {
00244 /** \sa v_tet_edge_ratio*/
00245 double edge_ratio;
00246 /** \sa v_tet_radius_ratio*/
00247 double radius_ratio;
00248 /** \sa v_tet_aspect_beta*/
00249 double aspect_beta;
00250 /** \sa v_tet_aspect_ratio */
00251 double aspect_ratio;
00252 /** \sa v_tet_aspect_gamma */
00253 double aspect_gamma;
00254 /** \sa v_tet_aspect_frobenius */
00255 double aspect_frobenius;
00256 /** \sa v_tet_minimum_angle */
00257 double minimum_angle;
00258 /** \sa v_tet_collapse_ratio*/
00259 double collapse_ratio;
00260 /** \sa v_tet_volume */
00261 double volume;
00262 /** \sa v_tet_condition */
00263 double condition;
00264 /** \sa v_tet_jacobian */
00265 double jacobian;
00266 /** \sa v_tet_scaled_jacobian */
00267 double scaled_jacobian;
00268 /** \sa v_tet_shape */
00269 double shape;
00270 /** \sa v_tet_relative_size */
00271 double relative_size_squared;
00272 /** \sa v_tet_shape_and_size*/
00273 double shape_and_size;
00274 /** \sa v_tet_distortion */
00275 double distortion;
00276 };
00277
00278 /** TriMetricVals is a struct used to return calculated metrics
00279 when calling the function v_tri_quality(...)
00280
00281 TriMetricVals is used just as QuadMetricVals.
00282 For an example, see Detailed Description in QuadMetricVals
00283 */
00284 struct TriMetricVals
00285 {
00286 /** \sa v_tri_edge_ratio */
00287 double edge_ratio;
00288 /** \sa v_tri_aspect_ratio */
00289 double aspect_ratio;
00290 /** \sa v_tri_radius_ratio */
00291 double radius_ratio;
00292 /** \sa v_tri_aspect_frobenius */
00293 double aspect_frobenius;
00294 /** \sa v_tri_area*/
00295 double area;
00296 /** \sa v_tri_minimum_angle*/
00297 double minimum_angle;
00298 /** \sa v_tri_maximum_angle */
00299 double maximum_angle;
00300 /** \sa v_tri_condition */
00301 double condition;
00302 /** \sa v_tri_scaled_jacobian */
00303 double scaled_jacobian;
00304 /** \sa v_tri_shape */
00305 double shape;
00306 /** \sa v_tri_relative_size_squared */
00307 double relative_size_squared;
00308 /** \sa v_tri_shape_and_size */
00309 double shape_and_size;
00310 /** \sa v_tri_distortion */
00311 double distortion;
00312 };
00313
00314 /* definition of bit fields to determine which metrics to calculate */
00315
00316 //! \name Hex bit fields
00317 //!
00318 //@{
00319
00320 #define V_HEX_MAX_EDGE_RATIO 1 /*!< \hideinitializer */
00321 #define V_HEX_SKEW 2 /*!< \hideinitializer */
00322 #define V_HEX_TAPER 4 /*!< \hideinitializer */
00323 #define V_HEX_VOLUME 8 /*!< \hideinitializer */
00324 #define V_HEX_STRETCH 16 /*!< \hideinitializer */
00325 #define V_HEX_DIAGONAL 32 /*!< \hideinitializer */
00326 #define V_HEX_DIMENSION 64 /*!< \hideinitializer */
00327 #define V_HEX_ODDY 128 /*!< \hideinitializer */
00328 #define V_HEX_MAX_ASPECT_FROBENIUS 256 /*!< \hideinitializer */
00329 #define V_HEX_CONDITION 256 /*!< \hideinitializer */
00330 #define V_HEX_JACOBIAN 512 /*!< \hideinitializer */
00331 #define V_HEX_SCALED_JACOBIAN 1024 /*!< \hideinitializer */
00332 #define V_HEX_SHEAR 2048 /*!< \hideinitializer */
00333 #define V_HEX_SHAPE 4096 /*!< \hideinitializer */
00334 #define V_HEX_RELATIVE_SIZE_SQUARED 8192 /*!< \hideinitializer */
00335 #define V_HEX_SHAPE_AND_SIZE 16384 /*!< \hideinitializer */
00336 #define V_HEX_SHEAR_AND_SIZE 32768 /*!< \hideinitializer */
00337 #define V_HEX_DISTORTION 65536 /*!< \hideinitializer */
00338 #define V_HEX_EDGE_RATIO 131072 /*!< \hideinitializer */
00339 #define V_HEX_MED_ASPECT_FROBENIUS 262144 /*!< \hideinitializer */
00340 #define V_HEX_ALL 524287 /*!< \hideinitializer */
00341 /*!< \hideinitializer */
00342 #define V_HEX_TRADITIONAL \
00343 ( V_HEX_MAX_EDGE_RATIO + V_HEX_SKEW + V_HEX_TAPER + V_HEX_STRETCH + V_HEX_DIAGONAL + V_HEX_ODDY + \
00344 V_HEX_CONDITION + V_HEX_JACOBIAN + V_HEX_SCALED_JACOBIAN + V_HEX_DIMENSION )
00345
00346 /*!< \hideinitializer */
00347 #define V_HEX_DIAGNOSTIC V_HEX_VOLUME
00348 /*!< \hideinitializer */
00349 #define V_HEX_ALGEBRAIC \
00350 ( V_HEX_SHAPE + V_HEX_SHEAR + V_HEX_RELATIVE_SIZE_SQUARED + V_HEX_SHAPE_AND_SIZE + V_HEX_SHEAR_AND_SIZE )
00351 /*!< \hideinitializer */
00352 #define V_HEX_ROBINSON ( V_HEX_SKEW + V_HEX_TAPER )
00353 //@}
00354
00355 //! \name Tet bit fields
00356 //!
00357 //@{
00358 #define V_TET_RADIUS_RATIO 1 /*!< \hideinitializer */
00359 #define V_TET_ASPECT_BETA 2 /*!< \hideinitializer */
00360 #define V_TET_ASPECT_GAMMA 4 /*!< \hideinitializer */
00361 #define V_TET_VOLUME 8 /*!< \hideinitializer */
00362 #define V_TET_CONDITION 16 /*!< \hideinitializer */
00363 #define V_TET_JACOBIAN 32 /*!< \hideinitializer */
00364 #define V_TET_SCALED_JACOBIAN 64 /*!< \hideinitializer */
00365 #define V_TET_SHAPE 128 /*!< \hideinitializer */
00366 #define V_TET_RELATIVE_SIZE_SQUARED 256 /*!< \hideinitializer */
00367 #define V_TET_SHAPE_AND_SIZE 512 /*!< \hideinitializer */
00368 #define V_TET_DISTORTION 1024 /*!< \hideinitializer */
00369 #define V_TET_EDGE_RATIO 2048 /*!< \hideinitializer */
00370 #define V_TET_ASPECT_RATIO 4096 /*!< \hideinitializer */
00371 #define V_TET_ASPECT_FROBENIUS 8192 /*!< \hideinitializer */
00372 #define V_TET_MINIMUM_ANGLE 16384 /*!< \hideinitializer */
00373 #define V_TET_COLLAPSE_RATIO 32768 /*!< \hideinitializer */
00374 #define V_TET_ALL 65535 /*!< \hideinitializer */
00375 /*!< \hideinitializer */
00376 #define V_TET_TRADITIONAL \
00377 ( V_TET_ASPECT_BETA + V_TET_ASPECT_GAMMA + V_TET_CONDITION + V_TET_JACOBIAN + V_TET_SCALED_JACOBIAN )
00378 /*!< \hideinitializer */
00379 #define V_TET_DIAGNOSTIC V_TET_VOLUME
00380 /*!< \hideinitializer */
00381 #define V_TET_ALGEBRAIC ( V_TET_SHAPE + V_TET_RELATIVE_SIZE_SQUARED + V_TET_SHAPE_AND_SIZE )
00382 //@}
00383
00384 //! \name Pyramid bit fields
00385 //!
00386 //@{
00387 #define V_PYRAMID_VOLUME 1 /*!< \hideinitializer */
00388 //@}
00389
00390 //! \name Wedge bit fields
00391 //!
00392 //@{
00393 #define V_WEDGE_VOLUME 1 /*!< \hideinitializer */
00394 //@}
00395
00396 //! \name Knife bit fields
00397 //!
00398 //@{
00399 #define V_KNIFE_VOLUME 1 /*!< \hideinitializer */
00400 //@}
00401
00402 //! \name Quad bit fields
00403 //!
00404 //@{
00405 #define V_QUAD_MAX_EDGE_RATIO 1 /*!< \hideinitializer */
00406 #define V_QUAD_SKEW 2 /*!< \hideinitializer */
00407 #define V_QUAD_TAPER 4 /*!< \hideinitializer */
00408 #define V_QUAD_WARPAGE 8 /*!< \hideinitializer */
00409 #define V_QUAD_AREA 16 /*!< \hideinitializer */
00410 #define V_QUAD_STRETCH 32 /*!< \hideinitializer */
00411 #define V_QUAD_MINIMUM_ANGLE 64 /*!< \hideinitializer */
00412 #define V_QUAD_MAXIMUM_ANGLE 128 /*!< \hideinitializer */
00413 #define V_QUAD_ODDY 256 /*!< \hideinitializer */
00414 #define V_QUAD_CONDITION 512 /*!< \hideinitializer */
00415 #define V_QUAD_JACOBIAN 1024 /*!< \hideinitializer */
00416 #define V_QUAD_SCALED_JACOBIAN 2048 /*!< \hideinitializer */
00417 #define V_QUAD_SHEAR 4096 /*!< \hideinitializer */
00418 #define V_QUAD_SHAPE 8192 /*!< \hideinitializer */
00419 #define V_QUAD_RELATIVE_SIZE_SQUARED 16384 /*!< \hideinitializer */
00420 #define V_QUAD_SHAPE_AND_SIZE 32768 /*!< \hideinitializer */
00421 #define V_QUAD_SHEAR_AND_SIZE 65536 /*!< \hideinitializer */
00422 #define V_QUAD_DISTORTION 131072 /*!< \hideinitializer */
00423 #define V_QUAD_EDGE_RATIO 262144 /*!< \hideinitializer */
00424 #define V_QUAD_ASPECT_RATIO 524288 /*!< \hideinitializer */
00425 #define V_QUAD_RADIUS_RATIO 1048576 /*!< \hideinitializer */
00426 #define V_QUAD_MED_ASPECT_FROBENIUS 2097152 /*!< \hideinitializer */
00427 #define V_QUAD_MAX_ASPECT_FROBENIUS 4194304 /*!< \hideinitializer */
00428 #define V_QUAD_ALL 8388607 /*!< \hideinitializer */
00429 /*!< \hideinitializer */
00430 #define V_QUAD_TRADITIONAL \
00431 ( V_QUAD_MAX_EDGE_RATIO + V_QUAD_SKEW + V_QUAD_TAPER + V_QUAD_WARPAGE + V_QUAD_STRETCH + V_QUAD_MINIMUM_ANGLE + \
00432 V_QUAD_MAXIMUM_ANGLE + V_QUAD_ODDY + V_QUAD_CONDITION + V_QUAD_JACOBIAN + V_QUAD_SCALED_JACOBIAN )
00433 /*!< \hideinitializer */
00434 #define V_QUAD_DIAGNOSTIC V_QUAD_AREA
00435 /*!< \hideinitializer */
00436 #define V_QUAD_ALGEBRAIC ( V_QUAD_SHEAR + V_QUAD_SHAPE + V_QUAD_RELATIVE_SIZE_SQUARED + V_QUAD_SHAPE_AND_SIZE )
00437 /*!< \hideinitializer */
00438 #define V_QUAD_ROBINSON ( V_QUAD_MAX_EDGE_RATIO + V_QUAD_SKEW + V_QUAD_TAPER )
00439 //@}
00440
00441 //! \name Tri bit fields
00442 //!
00443 //@{
00444 #define V_TRI_ASPECT_FROBENIUS 1 /*!< \hideinitializer */
00445 #define V_TRI_AREA 2 /*!< \hideinitializer */
00446 #define V_TRI_MINIMUM_ANGLE 4 /*!< \hideinitializer */
00447 #define V_TRI_MAXIMUM_ANGLE 8 /*!< \hideinitializer */
00448 #define V_TRI_CONDITION 16 /*!< \hideinitializer */
00449 #define V_TRI_SCALED_JACOBIAN 32 /*!< \hideinitializer */
00450 #define V_TRI_SHAPE 64 /*!< \hideinitializer */
00451 #define V_TRI_RELATIVE_SIZE_SQUARED 128 /*!< \hideinitializer */
00452 #define V_TRI_SHAPE_AND_SIZE 256 /*!< \hideinitializer */
00453 #define V_TRI_DISTORTION 512 /*!< \hideinitializer */
00454 #define V_TRI_RADIUS_RATIO 1024 /*!< \hideinitializer */
00455 #define V_TRI_EDGE_RATIO 2048 /*!< \hideinitializer */
00456 #define V_TRI_ALL 4095 /*!< \hideinitializer */
00457 /*!< \hideinitializer */
00458 #define V_TRI_TRADITIONAL \
00459 ( V_TRI_ASPECT_FROBENIUS + V_TRI_MINIMUM_ANGLE + V_TRI_MAXIMUM_ANGLE + V_TRI_CONDITION + V_TRI_SCALED_JACOBIAN )
00460 /*!< \hideinitializer */
00461 #define V_TRI_DIAGNOSTIC V_TRI_AREA
00462 /*!< \hideinitializer */
00463 #define V_TRI_ALGEBRAIC ( V_TRI_SHAPE + V_TRI_SHAPE_AND_SIZE + V_TRI_RELATIVE_SIZE_SQUARED )
00464
00465 #define V_EDGE_LENGTH 1 /*!< \hideinitializer */
00466 //@}
00467
00468 /*! \mainpage
00469 Verdict is a library used to calculate metrics on the following type of elements:
00470
00471 \li Hexahedra
00472 \li Tetrahedra
00473 \li Pryamid
00474 \li Wedge
00475 \li Knife
00476 \li Quadrilateral
00477 \li Triangle
00478 \li Edge
00479
00480 Verdict calculates individual or multiple metrics on a single element.
00481 The v_*_quality(...) functions allow for efficient calculations of
00482 multiple metrics on a single element. Individual metrics may be
00483 calculated on a single element as well.
00484
00485 \section jack Using Verdict
00486
00487 The v_*_quality functions take the following parameters:
00488
00489 \param num_nodes Number of nodes in the element.
00490 \param coordinates 2D array containing x,y,z coordinate data of the nodes.
00491 \param metrics_request_flag Bitfield to define which metrics to calculate.
00492 \param metric_vals Struct to hold the metric calculated values.
00493
00494 All other functions take these parameters below and return the calculated
00495 metric value.
00496
00497 \param num_nodes Number of nodes in the element.
00498 \param coordinates 2D array containing x,y,z coordinate data of the nodes.
00499
00500
00501 \par Setting the metrics_request_flag:
00502 In order to use v_*_quality functions you must know how to set the bitfield argument
00503 correctly. To calculate aspect ratio, condition number, shape and shear metrics on a triangle, set
00504 the "metrics_request_flag" like so:
00505
00506 \code
00507 unsigned int metrics_request_flag = 0;
00508 metrics_request_flag += V_TRI_ASPECT_FROBENIUS;
00509 metrics_request_flag += V_CONDITION;
00510 metrics_request_flag += V_SHAPE;
00511 metrics_request_flag += V_SHEAR;
00512 \endcode
00513
00514 The bitwise field can also be set for many metrics at once using #deinfed numbers. V_HEX_ALL,
00515 V_HEX_DIAGNOSTIC, V_TRI_ALGEBRAIC are examples.
00516
00517 Below is an example of how use Verdict's functions:
00518
00519
00520 Example: \code
00521 QuadMetricVals quad_metrics = {0};
00522 unsigned long metrics_flag = 0;
00523 metrics_flag += V_QUAD_SHAPE;
00524 metrics_flag += V_QUAD_DISTORTION;
00525 metrics_flag += V_QUAD_AREA;
00526 double quad_nodes[4][3];
00527
00528 //node 1
00529 quad_node[0][0] = 0; //x
00530 quad_node[0][1] = 0; //y
00531 quad_node[0][2] = 0; //z
00532
00533 //node 2
00534 quad_node[1][0] = 1;
00535 quad_node[1][1] = 0.1;
00536 quad_node[1][2] = 0.1;
00537
00538 //node 3
00539 quad_node[2][0] = 0.9;
00540 quad_node[2][1] = 0.9;
00541 quad_node[2][2] = -0.1;
00542
00543 //node 4
00544 quad_node[3][0] = -0.05;
00545 quad_node[3][1] = 1;
00546 quad_node[3][2] = 0;
00547
00548 //calculate multiple metrics with one call
00549 v_quad_quality( 4, quad_nodes, metrics_flag, quad_metrics );
00550 double my_shape = quad_metrics.shape;
00551 double my_distortion = quad_metrics.distortion;
00552 double my_area = quad_metrics.area;
00553
00554 //calculate an individual metric
00555 double my_relative_size = v_quad_relative_size( 4, quad_nodes );
00556 \endcode
00557
00558 */
00559
00560 //! Calculates quality metrics for hexahedral elements.
00561 C_FUNC_DEF void v_hex_quality( int num_nodes,
00562 double coordinates[][3],
00563 unsigned int metrics_request_flag,
00564 struct HexMetricVals* metric_vals );
00565
00566 //! Calculates quality metrics for tetrahedral elements.
00567 C_FUNC_DEF void v_tet_quality( int num_nodes,
00568 double coordinates[][3],
00569 unsigned int metrics_request_flag,
00570 struct TetMetricVals* metric_vals );
00571
00572 //! Calculates quality metrics for pyramid elements.
00573 C_FUNC_DEF void v_pyramid_quality( int num_nodes,
00574 double coordinates[][3],
00575 unsigned int metrics_request_flag,
00576 struct PyramidMetricVals* metric_vals );
00577
00578 //! Calculates quality metrics for wedge elements.
00579 C_FUNC_DEF void v_wedge_quality( int num_nodes,
00580 double coordinates[][3],
00581 unsigned int metrics_request_flag,
00582 struct WedgeMetricVals* metric_vals );
00583
00584 //! Calculates quality metrics for knife elements.
00585 C_FUNC_DEF void v_knife_quality( int num_nodes,
00586 double coordinates[][3],
00587 unsigned int metrics_request_flag,
00588 struct KnifeMetricVals* metric_vals );
00589
00590 //! Calculates quality metrics for quadrilateral elements.
00591 C_FUNC_DEF void v_quad_quality( int num_nodes,
00592 double coordinates[][3],
00593 unsigned int metrics_request_flag,
00594 struct QuadMetricVals* metric_vals );
00595
00596 //! Calculates quality metrics for triangle elements.
00597 C_FUNC_DEF void v_tri_quality( int num_nodes,
00598 double coordinates[][3],
00599 unsigned int metrics_request_flag,
00600 struct TriMetricVals* metric_vals );
00601
00602 //! Calculates quality metrics for edge elements.
00603 C_FUNC_DEF void v_edge_quality( int num_nodes,
00604 double coordinates[][3],
00605 unsigned int metrics_request_flag,
00606 struct EdgeMetricVals* metric_vals );
00607
00608 /* individual quality functions for hex elements */
00609
00610 //! Sets average size (volume) of hex, needed for v_hex_relative_size(...)
00611 C_FUNC_DEF void v_set_hex_size( double size );
00612
00613 //! Calculates hex edge ratio metric.
00614 /** Hmax / Hmin where Hmax and Hmin are respectively the maximum and the
00615 minimum edge lengths */
00616 C_FUNC_DEF double v_hex_edge_ratio( int num_nodes, double coordinates[][3] );
00617
00618 //! Calculates hex maximum of edge ratio
00619 /**Maximum edge length ratio at hex center.
00620 Reference --- L.M. Taylor, and D.P. Flanagan, Pronto3D - A Three Dimensional Transient
00621 Solid Dynamics Program, SAND87-1912, Sandia National Laboratories, 1989. */
00622 C_FUNC_DEF double v_hex_max_edge_ratio( int num_nodes, double coordinates[][3] );
00623
00624 //! Calculates hex skew metric.
00625 /** Maximum |cos A| where A is the angle between edges at hex center.
00626 Reference --- L.M. Taylor, and D.P. Flanagan, Pronto3D - A Three Dimensional Transient
00627 Solid Dynamics Program, SAND87-1912, Sandia National Laboratories, 1989. */
00628 C_FUNC_DEF double v_hex_skew( int num_nodes, double coordinates[][3] );
00629
00630 //! Calculates hex taper metric
00631 /** Maximum ratio of lengths derived from opposite edges.
00632 Reference --- L.M. Taylor, and D.P. Flanagan, Pronto3D - A Three Dimensional Transient
00633 Solid Dynamics Program, SAND87-1912, Sandia National Laboratories, 1989. */
00634 C_FUNC_DEF double v_hex_taper( int num_nodes, double coordinates[][3] );
00635
00636 //! Calculates hex volume
00637 /** Jacobian at hex center.
00638 Reference --- L.M. Taylor, and D.P. Flanagan, Pronto3D - A Three Dimensional Transient
00639 Solid Dynamics Program, SAND87-1912, Sandia National Laboratories, 1989. */
00640 C_FUNC_DEF double v_hex_volume( int num_nodes, double coordinates[][3] );
00641
00642 //! Calculates hex stretch metric
00643 /** Sqrt(3) * minimum edge length / maximum diagonal length.
00644 Reference --- FIMESH code */
00645 C_FUNC_DEF double v_hex_stretch( int num_nodes, double coordinates[][3] );
00646
00647 //! Calculates hex diagonal metric
00648 /** Minimum diagonal length / maximum diagonal length.
00649 Reference --- Unknown */
00650 C_FUNC_DEF double v_hex_diagonal( int num_nodes, double coordinates[][3] );
00651
00652 //! Calculates hex dimension metric
00653 /** Pronto-specific characteristic length for stable time step calculation.
00654 Char_length = Volume / 2 grad Volume.
00655 Reference --- L.M. Taylor, and D.P. Flanagan, Pronto3D - A Three Dimensional Transient
00656 Solid Dynamics Program, SAND87-1912, Sandia National Laboratories, 1989. */
00657 C_FUNC_DEF double v_hex_dimension( int num_nodes, double coordinates[][3] );
00658
00659 //! Calculates hex oddy metric
00660 C_FUNC_DEF double v_hex_oddy( int num_nodes, double coordinates[][3] );
00661
00662 //! Calculates hex condition metric
00663 /** Average Frobenius condition number of the Jacobian matrix at 8 corners. */
00664 C_FUNC_DEF double v_hex_med_aspect_frobenius( int num_nodes, double coordinates[][3] );
00665
00666 //! Calculates hex condition metric
00667 /** Maximum Frobenius condition number of the Jacobian matrix at 8 corners.
00668 Reference --- P. Knupp, Achieving Finite Element Mesh Quality via
00669 Optimization of the Jacobian Matrix Norm and Associated Quantities,
00670 Intl. J. Numer. Meth. Engng. 2000, 48:1165-1185. */
00671 C_FUNC_DEF double v_hex_max_aspect_frobenius( int num_nodes, double coordinates[][3] );
00672 C_FUNC_DEF double v_hex_condition( int num_nodes, double coordinates[][3] );
00673
00674 //! Calculates hex jacobian metric
00675 /** Minimum pointwise volume of local map at 8 corners & center of hex.
00676 Reference --- P. Knupp, Achieving Finite Element Mesh Quality via
00677 Optimization of the Jacobian Matrix Norm and Associated Quantities,
00678 Intl. J. Numer. Meth. Engng. 2000, 48:1165-1185. */
00679 C_FUNC_DEF double v_hex_jacobian( int num_nodes, double coordinates[][3] );
00680
00681 //! Calculates hex scaled jacobian metric
00682 /** Minimum Jacobian divided by the lengths of the 3 edge vectors.
00683 Reference --- P. Knupp, Achieving Finite Element Mesh Quality via
00684 Optimization of the Jacobian Matrix Norm and Associated Quantities,
00685 Intl. J. Numer. Meth. Engng. 2000, 48:1165-1185. */
00686 C_FUNC_DEF double v_hex_scaled_jacobian( int num_nodes, double coordinates[][3] );
00687
00688 //! Calculates hex shear metric
00689 /** 3/Mean Ratio of Jacobian Skew matrix.
00690 Reference --- P. Knupp, Algebraic Mesh Quality Metrics for
00691 Unstructured Initial Meshes, submitted for publication. */
00692 C_FUNC_DEF double v_hex_shear( int num_nodes, double coordinates[][3] );
00693
00694 //! Calculates hex shape metric.
00695 /** 3/Mean Ratio of weighted Jacobian matrix.
00696 Reference --- P. Knupp, Algebraic Mesh Quality Metrics for
00697 Unstructured Initial Meshes, submitted for publication. */
00698 C_FUNC_DEF double v_hex_shape( int num_nodes, double coordinates[][3] );
00699
00700 //! Calculates hex relative size metric.
00701 /** 3/Mean Ratio of weighted Jacobian matrix.
00702 Reference --- P. Knupp, Algebraic Mesh Quality Metrics for
00703 Unstructured Initial Meshes, submitted for publication. */
00704 C_FUNC_DEF double v_hex_relative_size_squared( int num_nodes, double coordinates[][3] );
00705
00706 //! Calculates hex shape-size metric.
00707 /** Product of Shape and Relative Size.
00708 Reference --- P. Knupp, Algebraic Mesh Quality Metrics for
00709 Unstructured Initial Meshes, submitted for publication. */
00710 C_FUNC_DEF double v_hex_shape_and_size( int num_nodes, double coordinates[][3] );
00711
00712 //! Calculates hex shear-size metric
00713 /** Product of Shear and Relative Size.
00714 Reference --- P. Knupp, Algebraic Mesh Quality Metrics for
00715 Unstructured Initial Meshes, submitted for publication. */
00716 C_FUNC_DEF double v_hex_shear_and_size( int num_nodes, double coordinates[][3] );
00717
00718 //! Calculates hex distortion metric
00719 /** {min(|J|)/actual volume}*parent volume, parent volume = 8 for hex.
00720 Reference --- SDRC/IDEAS Simulation: Finite Element Modeling--User's Guide */
00721 C_FUNC_DEF double v_hex_distortion( int num_nodes, double coordinates[][3] );
00722
00723 /* individual quality functions for tet elements */
00724
00725 //! Sets average size (volume) of tet, needed for v_tet_relative_size(...)
00726 C_FUNC_DEF void v_set_tet_size( double size );
00727
00728 //! Calculates tet edge ratio metric.
00729 /** Hmax / Hmin where Hmax and Hmin are respectively the maximum and the
00730 minimum edge lengths */
00731 C_FUNC_DEF double v_tet_edge_ratio( int num_nodes, double coordinates[][3] );
00732
00733 //! Calculates tet radius ratio metric.
00734 /** CR / (3.0 * IR) where CR = circumsphere radius, IR = inscribed sphere radius.
00735 Reference --- V. N. Parthasarathy et al, A comparison of tetrahedron
00736 quality measures, Finite Elem. Anal. Des., Vol 15(1993), 255-261. */
00737 C_FUNC_DEF double v_tet_radius_ratio( int num_nodes, double coordinates[][3] );
00738
00739 //! Calculates the radius ratio metric of a positively oriented tet.
00740 /** CR / (3.0 * IR) where CR = circumsphere radius, IR = inscribed sphere radius
00741 if the element is positively-oriented.
00742 Reference --- V. N. Parthasarathy et al, A comparison of tetrahedron
00743 quality measures, Finite Elem. Anal. Des., Vol 15(1993), 255-261. */
00744 C_FUNC_DEF double v_tet_aspect_beta( int num_nodes, double coordinates[][3] );
00745
00746 //! Calculates tet aspect ratio metric.
00747 /** Hmax / (2 sqrt(6) r) where Hmax and r respectively denote the greatest edge
00748 length and the inradius of the tetrahedron
00749 Reference --- P. Frey and P.-L. George, Meshing, Hermes (2000). */
00750 C_FUNC_DEF double v_tet_aspect_ratio( int num_nodes, double coordinates[][3] );
00751
00752 //! Calculates tet aspect gamma metric.
00753 /** Srms**3 / (8.479670*V) where Srms = sqrt(Sum(Si**2)/6), Si = edge length.
00754 Reference --- V. N. Parthasarathy et al, A comparison of tetrahedron
00755 quality measures, Finite Elem. Anal. Des., Vol 15(1993), 255-261. */
00756 C_FUNC_DEF double v_tet_aspect_gamma( int num_nodes, double coordinates[][3] );
00757
00758 //! Calculates tet aspect frobenius metric.
00759 /** Frobenius condition number when the reference element is regular
00760 Reference --- P. Knupp, Achieving Finite Element Mesh Quality via
00761 Optimization of the Jacobian Matrix Norm and Associated Quantities,
00762 Intl. J. Numer. Meth. Engng. 2000, 48:1165-1185. */
00763 C_FUNC_DEF double v_tet_aspect_frobenius( int num_nodes, double coordinates[][3] );
00764
00765 //! Calculates tet minimum dihedral angle.
00766 /** Minimum (nonoriented) dihedral angle of a tetrahedron, expressed in degrees. */
00767 C_FUNC_DEF double v_tet_minimum_angle( int num_nodes, double coordinates[][3] );
00768
00769 //! Calculates tet collapse ratio metric.
00770 /** Collapse ratio */
00771 C_FUNC_DEF double v_tet_collapse_ratio( int num_nodes, double coordinates[][3] );
00772
00773 //! Calculates tet volume.
00774 /** (1/6) * Jacobian at corner node.
00775 Reference --- V. N. Parthasarathy et al, A comparison of tetrahedron
00776 quality measures, Finite Elem. Anal. Des., Vol 15(1993), 255-261. */
00777 C_FUNC_DEF double v_tet_volume( int num_nodes, double coordinates[][3] );
00778
00779 //! Calculates tet condition metric.
00780 /** Condition number of the Jacobian matrix at any corner.
00781 Reference --- P. Knupp, Achieving Finite Element Mesh Quality via
00782 Optimization of the Jacobian Matrix Norm and Associated Quantities,
00783 Intl. J. Numer. Meth. Engng. 2000, 48:1165-1185. */
00784 C_FUNC_DEF double v_tet_condition( int num_nodes, double coordinates[][3] );
00785
00786 //! Calculates tet jacobian.
00787 /** Minimum pointwise volume at any corner.
00788 Reference --- P. Knupp, Achieving Finite Element Mesh Quality via
00789 Optimization of the Jacobian Matrix Norm and Associated Quantities,
00790 Intl. J. Numer. Meth. Engng. 2000, 48:1165-1185. */
00791 C_FUNC_DEF double v_tet_jacobian( int num_nodes, double coordinates[][3] );
00792
00793 //! Calculates tet scaled jacobian.
00794 /** Minimum Jacobian divided by the lengths of 3 edge vectors
00795 Reference --- P. Knupp, Achieving Finite Element Mesh Quality via
00796 Optimization of the Jacobian Matrix Norm and Associated Quantities,
00797 Intl. J. Numer. Meth. Engng. 2000, 48:1165-1185. */
00798 C_FUNC_DEF double v_tet_scaled_jacobian( int num_nodes, double coordinates[][3] );
00799
00800 //! Calculates tet shape metric.
00801 /** 3/Mean Ratio of weighted Jacobian matrix.
00802 Reference --- P. Knupp, Algebraic Mesh Quality Metrics for
00803 Unstructured Initial Meshes, submitted for publication. */
00804 C_FUNC_DEF double v_tet_shape( int num_nodes, double coordinates[][3] );
00805
00806 //! Calculates tet relative size metric.
00807 /** Min( J, 1/J ), where J is determinant of weighted Jacobian matrix.
00808 Reference --- P. Knupp, Algebraic Mesh Quality Metrics for
00809 Unstructured Initial Meshes, submitted for publication. */
00810 C_FUNC_DEF double v_tet_relative_size_squared( int num_nodes, double coordinates[][3] );
00811
00812 //! Calculates tet shape-size metric.
00813 /** Product of Shape and Relative Size.
00814 Reference --- P. Knupp, Algebraic Mesh Quality Metrics for
00815 Unstructured Initial Meshes, submitted for publication. */
00816 C_FUNC_DEF double v_tet_shape_and_size( int num_nodes, double coordinates[][3] );
00817
00818 //! Calculates tet distortion metric.
00819 /** {min(|J|)/actual volume}*parent volume, parent volume = 1/6 for tet.
00820 Reference --- SDRC/IDEAS Simulation: Finite Element Modeling--User's Guide */
00821 C_FUNC_DEF double v_tet_distortion( int num_nodes, double coordinates[][3] );
00822
00823 /* individual quality functions for pyramid elements */
00824
00825 //! Calculates pyramid volume.
00826 C_FUNC_DEF double v_pyramid_volume( int num_nodes, double coordinates[][3] );
00827
00828 /* individual quality functions for wedge elements */
00829
00830 //! Calculates wedge volume.
00831 C_FUNC_DEF double v_wedge_volume( int num_nodes, double coordinates[][3] );
00832
00833 /* individual quality functions for knife elements */
00834
00835 //! Calculates knife volume.
00836 C_FUNC_DEF double v_knife_volume( int num_nodes, double coordinates[][3] );
00837
00838 /* individual quality functions for edge elements */
00839
00840 //! Calculates edge length.
00841 C_FUNC_DEF double v_edge_length( int num_nodes, double coordinates[][3] );
00842
00843 /* individual quality functions for quad elements */
00844 //! Sets average size (area) of quad, needed for v_quad_relative_size(...)
00845 C_FUNC_DEF void v_set_quad_size( double size );
00846
00847 //! Calculates quad edge ratio
00848 /** edge ratio
00849 Reference --- P. P. Pebay, Planar Quadrangle Quality
00850 Measures, Eng. Comp., 2004, 20(2):157-173 */
00851 C_FUNC_DEF double v_quad_edge_ratio( int num_nodes, double coordinates[][3] );
00852
00853 //! Calculates quad maximum of edge ratio.
00854 /** Maximum edge length ratio at quad center.
00855 Reference --- J. Robinson, CRE Method of element testing and the
00856 Jacobian shape parameters, Eng. Comput., Vol 4, 1987. */
00857 C_FUNC_DEF double v_quad_max_edge_ratio( int num_nodes, double coordinates[][3] );
00858
00859 //! Calculates quad aspect ratio
00860 /** aspect ratio
00861 Reference --- P. P. Pebay, Planar Quadrangle Quality
00862 Measures, Eng. Comp., 2004, 20(2):157-173 */
00863 C_FUNC_DEF double v_quad_aspect_ratio( int num_nodes, double coordinates[][3] );
00864
00865 //! Calculates quad radius ratio
00866 /** radius ratio
00867 Reference --- P. P. Pebay, Planar Quadrangle Quality
00868 Measures, Eng. Comp., 2004, 20(2):157-173 */
00869 C_FUNC_DEF double v_quad_radius_ratio( int num_nodes, double coordinates[][3] );
00870
00871 //! Calculates quad average Frobenius aspect
00872 /** average Frobenius aspect
00873 Reference --- P. P. Pebay, Planar Quadrangle Quality
00874 Measures, Eng. Comp., 2004, 20(2):157-173 */
00875 C_FUNC_DEF double v_quad_med_aspect_frobenius( int num_nodes, double coordinates[][3] );
00876
00877 //! Calculates quad maximum Frobenius aspect
00878 /** average Frobenius aspect
00879 Reference --- P. P. Pebay, Planar Quadrangle Quality
00880 Measures, Eng. Comp., 2004, 20(2):157-173 */
00881 C_FUNC_DEF double v_quad_max_aspect_frobenius( int num_nodes, double coordinates[][3] );
00882
00883 //! Calculates quad skew metric.
00884 /** Maximum |cos A| where A is the angle between edges at quad center.
00885 Reference --- J. Robinson, CRE Method of element testing and the
00886 Jacobian shape parameters, Eng. Comput., Vol 4, 1987. */
00887 C_FUNC_DEF double v_quad_skew( int num_nodes, double coordinates[][3] );
00888
00889 //! Calculates quad taper metric.
00890 /** Maximum ratio of lengths derived from opposite edges.
00891 Reference --- J. Robinson, CRE Method of element testing and the
00892 Jacobian shape parameters, Eng. Comput., Vol 4, 1987. */
00893 C_FUNC_DEF double v_quad_taper( int num_nodes, double coordinates[][3] );
00894
00895 //! Calculates quad warpage metric.
00896 /** Cosine of Minimum Dihedral Angle formed by Planes Intersecting in Diagonals.
00897 Reference --- J. Robinson, CRE Method of element testing and the
00898 Jacobian shape parameters, Eng. Comput., Vol 4, 1987. */
00899 C_FUNC_DEF double v_quad_warpage( int num_nodes, double coordinates[][3] );
00900
00901 //! Calculates quad area.
00902 /** Jacobian at quad center.
00903 Reference --- J. Robinson, CRE Method of element testing and the
00904 Jacobian shape parameters, Eng. Comput., Vol 4, 1987. */
00905 C_FUNC_DEF double v_quad_area( int num_nodes, double coordinates[][3] );
00906
00907 //! Calculates quad strech metric.
00908 /** Sqrt(2) * minimum edge length / maximum diagonal length.
00909 Reference --- FIMESH code. */
00910 C_FUNC_DEF double v_quad_stretch( int num_nodes, double coordinates[][3] );
00911
00912 //! Calculates quad's smallest angle.
00913 /** Smallest included quad angle (degrees).
00914 Reference --- Unknown. */
00915 C_FUNC_DEF double v_quad_minimum_angle( int num_nodes, double coordinates[][3] );
00916
00917 //! Calculates quad's largest angle.
00918 /** Largest included quad angle (degrees).
00919 Reference --- Unknown. */
00920 C_FUNC_DEF double v_quad_maximum_angle( int num_nodes, double coordinates[][3] );
00921
00922 //! Calculates quad oddy metric.
00923 C_FUNC_DEF double v_quad_oddy( int num_nodes, double coordinates[][3] );
00924
00925 //! Calculates quad condition number metric.
00926 /** Maximum condition number of the Jacobian matrix at 4 corners.
00927 Reference --- P. Knupp, Achieving Finite Element Mesh Quality via
00928 Optimization of the Jacobian Matrix Norm and Associated Quantities,
00929 Intl. J. Numer. Meth. Engng. 2000, 48:1165-1185. */
00930 C_FUNC_DEF double v_quad_condition( int num_nodes, double coordinates[][3] );
00931
00932 //! Calculates quad jacobian.
00933 /** Minimum pointwise volume of local map at 4 corners & center of quad.
00934 Reference --- P. Knupp, Achieving Finite Element Mesh Quality via
00935 Optimization of the Jacobian Matrix Norm and Associated Quantities,
00936 Intl. J. Numer. Meth. Engng. 2000, 48:1165-1185. */
00937 C_FUNC_DEF double v_quad_jacobian( int num_nodes, double coordinates[][3] );
00938
00939 //! Calculates quad scaled jacobian.
00940 /** Minimum Jacobian divided by the lengths of the 2 edge vectors.
00941 Reference --- P. Knupp, Achieving Finite Element Mesh Quality via
00942 Optimization of the Jacobian Matrix Norm and Associated Quantities,
00943 Intl. J. Numer. Meth. Engng. 2000, 48:1165-1185. */
00944 C_FUNC_DEF double v_quad_scaled_jacobian( int num_nodes, double coordinates[][3] );
00945
00946 //! Calculates quad shear metric.
00947 /** 2/Condition number of Jacobian Skew matrix.
00948 Reference --- P. Knupp, Algebraic Mesh Quality Metrics for
00949 Unstructured Initial Meshes, submitted for publication. */
00950 C_FUNC_DEF double v_quad_shear( int num_nodes, double coordinates[][3] );
00951
00952 //! Calculates quad shape metric.
00953 /** 2/Condition number of weighted Jacobian matrix.
00954 Reference --- P. Knupp, Algebraic Mesh Quality Metrics for
00955 Unstructured Initial Meshes, submitted for publication. */
00956 C_FUNC_DEF double v_quad_shape( int num_nodes, double coordinates[][3] );
00957
00958 //! Calculates quad relative size metric.
00959 /** Min( J, 1/J ), where J is determinant of weighted Jacobian matrix.
00960 Reference --- P. Knupp, Algebraic Mesh Quality Metrics for
00961 Unstructured Initial Meshes, submitted for publication. */
00962 C_FUNC_DEF double v_quad_relative_size_squared( int num_nodes, double coordinates[][3] );
00963
00964 //! Calculates quad shape-size metric.
00965 /** Product of Shape and Relative Size.
00966 Reference --- P. Knupp, Algebraic Mesh Quality Metrics for
00967 Unstructured Initial Meshes, submitted for publication. */
00968 C_FUNC_DEF double v_quad_shape_and_size( int num_nodes, double coordinates[][3] );
00969
00970 //! Calculates quad shear-size metric.
00971 /** Product of Shear and Relative Size.
00972 Reference --- P. Knupp, Algebraic Mesh Quality Metrics for
00973 Unstructured Initial Meshes, submitted for publication. */
00974 C_FUNC_DEF double v_quad_shear_and_size( int num_nodes, double coordinates[][3] );
00975
00976 //! Calculates quad distortion metric.
00977 /** {min(|J|)/actual area}*parent area, parent area = 4 for quad.
00978 Reference --- SDRC/IDEAS Simulation: Finite Element Modeling--User's Guide */
00979 C_FUNC_DEF double v_quad_distortion( int num_nodes, double coordinates[][3] );
00980
00981 /* individual quality functions for tri elements */
00982
00983 //! Sets average size (area) of tri, needed for v_tri_relative_size(...)
00984 C_FUNC_DEF void v_set_tri_size( double size );
00985
00986 //! Sets fuction pointer to calculate tri normal wrt surface
00987 C_FUNC_DEF void v_set_tri_normal_func( ComputeNormal func );
00988
00989 //! Calculates tri metric.
00990 /** edge ratio
00991 Reference --- P. P. Pebay & T. J. Baker, Analysis of Triangle Quality
00992 Measures, AMS Math. Comp., 2003, 72(244):1817-1839 */
00993 C_FUNC_DEF double v_tri_edge_ratio( int num_nodes, double coordinates[][3] );
00994
00995 //! Calculates tri metric.
00996 /** aspect ratio
00997 Reference --- P. P. Pebay & T. J. Baker, Analysis of Triangle Quality
00998 Measures, AMS Math. Comp., 2003, 72(244):1817-1839 */
00999 C_FUNC_DEF double v_tri_aspect_ratio( int num_nodes, double coordinates[][3] );
01000
01001 //! Calculates tri metric.
01002 /** radius ratio
01003 Reference --- P. P. Pebay & T. J. Baker, Analysis of Triangle Quality
01004 Measures, AMS Math. Comp., 2003, 72(244):1817-1839 */
01005 C_FUNC_DEF double v_tri_radius_ratio( int num_nodes, double coordinates[][3] );
01006
01007 //! Calculates tri metric.
01008 /** Frobenius aspect */
01009 C_FUNC_DEF double v_tri_aspect_frobenius( int num_nodes, double coordinates[][3] );
01010
01011 //! Calculates tri metric.
01012 /** Maximum included angle in triangle */
01013 C_FUNC_DEF double v_tri_area( int num_nodes, double coordinates[][3] );
01014
01015 //! Calculates tri metric.
01016 /** Minimum included angle in triangle */
01017 C_FUNC_DEF double v_tri_minimum_angle( int num_nodes, double coordinates[][3] );
01018
01019 //! Calculates tri metric.
01020 /** Maximum included angle in triangle */
01021 C_FUNC_DEF double v_tri_maximum_angle( int num_nodes, double coordinates[][3] );
01022
01023 //! Calculates tri metric.
01024 /** Condition number of the Jacobian matrix.
01025 Reference --- P. Knupp, Achieving Finite Element Mesh Quality via
01026 Optimization of the Jacobian Matrix Norm and Associated Quantities,
01027 Intl. J. Numer. Meth. Engng. 2000, 48:1165-1185. */
01028 C_FUNC_DEF double v_tri_condition( int num_nodes, double coordinates[][3] );
01029
01030 //! Calculates tri metric.
01031 /** Minimum Jacobian divided by the lengths of 2 edge vectors.
01032 Reference --- P. Knupp, Achieving Finite Element Mesh Quality via
01033 Optimization of the Jacobian Matrix Norm and Associated Quantities,
01034 Intl. J. Numer. Meth. Engng. 2000, 48:1165-1185. */
01035 C_FUNC_DEF double v_tri_scaled_jacobian( int num_nodes, double coordinates[][3] );
01036
01037 //! Calculates tri metric.
01038 /** Min( J, 1/J ), where J is determinant of weighted Jacobian matrix.
01039 Reference --- P. Knupp, Algebraic Mesh Quality Metrics for
01040 Unstructured Initial Meshes, submitted for publication. */
01041 C_FUNC_DEF double v_tri_relative_size_squared( int num_nodes, double coordinates[][3] );
01042
01043 //! Calculates tri metric.
01044 /** 2/Condition number of weighted Jacobian matrix.
01045 Reference --- P. Knupp, Algebraic Mesh Quality Metrics for
01046 Unstructured Initial Meshes, submitted for publication. */
01047 C_FUNC_DEF double v_tri_shape( int num_nodes, double coordinates[][3] );
01048
01049 //! Calculates tri metric.
01050 /** Product of Shape and Relative Size.
01051 Reference --- P. Knupp, Algebraic Mesh Quality Metrics for
01052 Unstructured Initial Meshes, submitted for publication. */
01053 C_FUNC_DEF double v_tri_shape_and_size( int num_nodes, double coordinates[][3] );
01054
01055 //! Calculates tri metric.
01056 /** {min(|J|)/actual area}*parent area, parent area = 1/2 for triangular element.
01057 Reference --- SDRC/IDEAS Simulation: Finite Element Modeling--User's Guide */
01058 C_FUNC_DEF double v_tri_distortion( int num_nodes, double coordinates[][3] );
01059
01060 #endif /* VERDICT_INC_LIB */