/*! The shape of a tri 2 / condition number of weighted jacobian matrix */ C_FUNC_DEF double v_tri_shape( int num_nodes, double coordinates[][3] ) { double condition = v_tri_condition( num_nodes, coordinates ); double shape; if( condition <= VERDICT_DBL_MIN ) shape = VERDICT_DBL_MAX; else shape = (1 / condition); if( shape > 0 ) return (double) VERDICT_MIN( shape, VERDICT_DBL_MAX ); return (double) VERDICT_MAX( shape, -VERDICT_DBL_MAX ); }
double avtVMetricCondition::Metric (double coords[][3], int type) { #ifdef HAVE_VERDICT switch (type) { case VTK_HEXAHEDRON: case VTK_VOXEL: return v_hex_condition(8, coords); case VTK_TETRA: return v_tet_condition(4,coords); case VTK_QUAD: return v_quad_condition(4, coords); case VTK_TRIANGLE: return v_tri_condition(3, coords); } #endif return 0; }
/*! the condition of a quad maximum condition number of the Jacobian matrix at 4 corners */ C_FUNC_DEF VERDICT_REAL v_quad_condition( int /*num_nodes*/, VERDICT_REAL coordinates[][3] ) { if ( is_collapsed_quad( coordinates ) == VERDICT_TRUE ) return v_tri_condition(3,coordinates); double areas[4]; signed_corner_areas( areas, coordinates ); double max_condition = 0.; VerdictVector xxi, xet; double condition; for ( int i=0; i<4; i++ ) { xxi.set( coordinates[i][0] - coordinates[(i+1)%4][0], coordinates[i][1] - coordinates[(i+1)%4][1], coordinates[i][2] - coordinates[(i+1)%4][2] ); xet.set( coordinates[i][0] - coordinates[(i+3)%4][0], coordinates[i][1] - coordinates[(i+3)%4][1], coordinates[i][2] - coordinates[(i+3)%4][2] ); if ( areas[i] < VERDICT_DBL_MIN ) condition = VERDICT_DBL_MAX; else condition = ( xxi % xxi + xet % xet ) / areas[i]; max_condition = VERDICT_MAX(max_condition, condition); } max_condition /= 2; if( max_condition > 0 ) return (VERDICT_REAL) VERDICT_MIN( max_condition, VERDICT_DBL_MAX ); return (VERDICT_REAL) VERDICT_MAX( max_condition, -VERDICT_DBL_MAX ); }