MOAB: Mesh Oriented datABase  (version 5.2.1)
verdict_defines.hpp File Reference
#include <cmath>
#include "v_vector.h"
#include "VerdictVector.hpp"
+ Include dependency graph for verdict_defines.hpp:
+ This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Defines

#define VERDICT_MIN(a, b)   ( ( a ) < ( b ) ? ( a ) : ( b ) )
#define VERDICT_MAX(a, b)   ( ( a ) > ( b ) ? ( a ) : ( b ) )
#define jacobian_matrix(a, b, c, d, e, f, g)
#define form_t(m11, m21, m12, m22, mw11, mw21, mw12, mw22, detmw, xm11, xm21, xm12, xm22)
#define metric_matrix(m11, m21, m12, m22, gm11, gm12, gm22)

Enumerations

enum  VerdictBoolean { VERDICT_FALSE = 0, VERDICT_TRUE = 1 }

Functions

double determinant (double a, double b, double c, double d)
double determinant (const VerdictVector &v1, const VerdictVector &v2, const VerdictVector &v3)
double normalize_jacobian (double jacobi, VerdictVector &v1, VerdictVector &v2, VerdictVector &v3, int tet_flag=0)
double norm_squared (double m11, double m21, double m12, double m22)
int skew_matrix (double gm11, double gm12, double gm22, double det, double &qm11, double &qm21, double &qm12, double &qm22)
void inverse (const VerdictVector &x1, const VerdictVector &x2, const VerdictVector &x3, VerdictVector &u1, VerdictVector &u2, VerdictVector &u3)
void form_Q (const VerdictVector &v1, const VerdictVector &v2, const VerdictVector &v3, VerdictVector &q1, VerdictVector &q2, VerdictVector &q3)
void product (VerdictVector &a1, VerdictVector &a2, VerdictVector &a3, VerdictVector &b1, VerdictVector &b2, VerdictVector &b3, VerdictVector &c1, VerdictVector &c2, VerdictVector &c3)
double norm_squared (VerdictVector &x1, VerdictVector &x2, VerdictVector &x3)
double skew_x (VerdictVector &q1, VerdictVector &q2, VerdictVector &q3, VerdictVector &qw1, VerdictVector &qw2, VerdictVector &qw3)

Variables

double verdictSqrt2

Define Documentation

#define form_t (   m11,
  m21,
  m12,
  m22,
  mw11,
  mw21,
  mw12,
  mw22,
  detmw,
  xm11,
  xm21,
  xm12,
  xm22 
)
Value:
xm11 = ( (m11) * (mw22) - (m12) * (mw21) ) / (detmw);                                             \
    (xm21) = ( (m21) * (mw22) - (m22) * (mw21) ) / (detmw);                                             \
    (xm12) = ( (m12) * (mw11) - (m11) * (mw12) ) / (detmw);                                             \
    (xm22) = ( (m22) * (mw11) - (m21) * (mw12) ) / (detmw);

Definition at line 67 of file verdict_defines.hpp.

#define jacobian_matrix (   a,
  b,
  c,
  d,
  e,
  f,
 
)
Value:
double jac_mat_tmp;                        \
    jac_mat_tmp = sqrt( a );                   \
    if( jac_mat_tmp == 0 )                     \
    {                                          \
        (d) = 0;                                 \
        (e) = 0;                                 \
        (f) = 0;                                 \
        (g) = 0;                                 \
    }                                          \
    else                                       \
    {                                          \
        (d) = jac_mat_tmp;                       \
        (e) = 0;                                 \
        (f) = (b) / jac_mat_tmp;                   \
        (g) = (c) / jac_mat_tmp;                   \
    }

Definition at line 48 of file verdict_defines.hpp.

#define metric_matrix (   m11,
  m21,
  m12,
  m22,
  gm11,
  gm12,
  gm22 
)
Value:
gm11 = (m11) * (m11) + (m21) * (m21);                             \
    (gm12) = (m11) * (m12) + (m21) * (m22);                             \
    (gm22) = (m12) * (m12) + (m22) * (m22);

Definition at line 110 of file verdict_defines.hpp.

#define VERDICT_MIN (   a,
  b 
)    ( ( a ) < ( b ) ? ( a ) : ( b ) )

Enumeration Type Documentation

Enumerator:
VERDICT_FALSE 
VERDICT_TRUE 

Definition at line 29 of file verdict_defines.hpp.


Function Documentation

double determinant ( double  a,
double  b,
double  c,
double  d 
) [inline]

Definition at line 38 of file verdict_defines.hpp.

Referenced by get_weight(), inverse(), v_quad_quality(), v_quad_relative_size_squared(), v_tri_quality(), and v_tri_relative_size_squared().

{
    return ( ( a ) * ( d ) - ( b ) * ( c ) );
}
double determinant ( const VerdictVector v1,
const VerdictVector v2,
const VerdictVector v3 
) [inline]

Definition at line 43 of file verdict_defines.hpp.

{
    return v1 % ( v2 * v3 );
}
void form_Q ( const VerdictVector v1,
const VerdictVector v2,
const VerdictVector v3,
VerdictVector q1,
VerdictVector q2,
VerdictVector q3 
) [inline]

Definition at line 191 of file verdict_defines.hpp.

References moab::cross(), and VerdictVector::set().

{

    double g11, g12, g13, g22, g23, g33;

    g11 = v1 % v1;
    g12 = v1 % v2;
    g13 = v1 % v3;
    g22 = v2 % v2;
    g23 = v2 % v3;
    g33 = v3 % v3;

    double rtg11 = sqrt( g11 );
    double rtg22 = sqrt( g22 );
    double rtg33 = sqrt( g33 );
    VerdictVector temp1;

    temp1 = v1 * v2;

    double cross = sqrt( temp1 % temp1 );

    double q11, q21, q31;
    double q12, q22, q32;
    double q13, q23, q33;

    q11 = 1;
    q21 = 0;
    q31 = 0;

    q12 = g12 / rtg11 / rtg22;
    q22 = cross / rtg11 / rtg22;
    q32 = 0;

    q13   = g13 / rtg11 / rtg33;
    q23   = ( g11 * g23 - g12 * g13 ) / rtg11 / rtg33 / cross;
    temp1 = v2 * v3;
    q33   = ( v1 % temp1 ) / rtg33 / cross;

    q1.set( q11, q21, q31 );
    q2.set( q12, q22, q32 );
    q3.set( q13, q23, q33 );
}
void inverse ( const VerdictVector x1,
const VerdictVector x2,
const VerdictVector x3,
VerdictVector u1,
VerdictVector u2,
VerdictVector u3 
) [inline]

Definition at line 128 of file verdict_defines.hpp.

References determinant(), VerdictVector::set(), VerdictVector::x(), VerdictVector::y(), and VerdictVector::z().

Referenced by moab::element_utility::Linear_tet_map< Entity_handle, moab::Matrix3 >::set_tet(), skew_x(), moab::element_utility::Linear_hex_map< moab::Matrix3 >::solve_inverse(), and test_spectral_hex().

{
    double detx = determinant( x1, x2, x3 );
    VerdictVector rx1, rx2, rx3;

    rx1.set( x1.x(), x2.x(), x3.x() );
    rx2.set( x1.y(), x2.y(), x3.y() );
    rx3.set( x1.z(), x2.z(), x3.z() );

    u1 = rx2 * rx3;
    u2 = rx3 * rx1;
    u3 = rx1 * rx2;

    u1 /= detx;
    u2 /= detx;
    u3 /= detx;
}
double norm_squared ( double  m11,
double  m21,
double  m12,
double  m22 
) [inline]

Definition at line 105 of file verdict_defines.hpp.

Referenced by MBMesquite::SteepestDescent::optimize_vertex_positions(), and skew_x().

{
    return m11 * m11 + m21 * m21 + m12 * m12 + m22 * m22;
}
double norm_squared ( VerdictVector x1,
VerdictVector x2,
VerdictVector x3 
) [inline]

Definition at line 250 of file verdict_defines.hpp.

{
    return ( x1 % x1 ) + ( x2 % x2 ) + ( x3 % x3 );
}
double normalize_jacobian ( double  jacobi,
VerdictVector v1,
VerdictVector v2,
VerdictVector v3,
int  tet_flag = 0 
) [inline]

Definition at line 75 of file verdict_defines.hpp.

References VerdictVector::length_squared(), and verdictSqrt2.

{
    double return_value = 0.0;

    if( jacobi != 0.0 )
    {

        double l1, l2, l3, length_product;
        // Note: there may be numerical problems if one is a lot shorter
        // than the others this way. But scaling each vector before the
        // triple product would involve 3 square roots instead of just
        // one.
        l1             = v1.length_squared();
        l2             = v2.length_squared();
        l3             = v3.length_squared();
        length_product = sqrt( l1 * l2 * l3 );

        // if some numerical scaling problem, or just plain roundoff,
        // then push back into range [-1,1].
        if( length_product < fabs( jacobi ) ) { length_product = fabs( jacobi ); }

        if( tet_flag == 1 )
            return_value = verdictSqrt2 * jacobi / length_product;
        else
            return_value = jacobi / length_product;
    }
    return return_value;
}
void product ( VerdictVector a1,
VerdictVector a2,
VerdictVector a3,
VerdictVector b1,
VerdictVector b2,
VerdictVector b3,
VerdictVector c1,
VerdictVector c2,
VerdictVector c3 
) [inline]

Definition at line 235 of file verdict_defines.hpp.

References VerdictVector::set(), VerdictVector::x(), VerdictVector::y(), and VerdictVector::z().

Referenced by skew_x().

{

    VerdictVector x1, x2, x3;

    x1.set( a1.x(), a2.x(), a3.x() );
    x2.set( a1.y(), a2.y(), a3.y() );
    x3.set( a1.z(), a2.z(), a3.z() );

    c1.set( x1 % b1, x2 % b1, x3 % b1 );
    c2.set( x1 % b2, x2 % b2, x3 % b2 );
    c3.set( x1 % b3, x2 % b3, x3 % b3 );
}
int skew_matrix ( double  gm11,
double  gm12,
double  gm22,
double  det,
double &  qm11,
double &  qm21,
double &  qm12,
double &  qm22 
) [inline]

Definition at line 115 of file verdict_defines.hpp.

{
    double tmp = sqrt( gm11 * gm22 );
    if( tmp == 0 ) { return false; }

    qm11 = 1;
    qm21 = 0;
    qm12 = gm12 / tmp;
    qm22 = det / tmp;
    return true;
}
double skew_x ( VerdictVector q1,
VerdictVector q2,
VerdictVector q3,
VerdictVector qw1,
VerdictVector qw2,
VerdictVector qw3 
) [inline]

Definition at line 256 of file verdict_defines.hpp.

References inverse(), norm_squared(), product(), and VERDICT_DBL_MIN.

{
    double normsq1, normsq2, kappa;
    VerdictVector u1, u2, u3;
    VerdictVector x1, x2, x3;

    inverse( qw1, qw2, qw3, u1, u2, u3 );
    product( q1, q2, q3, u1, u2, u3, x1, x2, x3 );
    inverse( x1, x2, x3, u1, u2, u3 );
    normsq1 = norm_squared( x1, x2, x3 );
    normsq2 = norm_squared( u1, u2, u3 );
    kappa   = sqrt( normsq1 * normsq2 );

    double skew = 0;
    if( kappa > VERDICT_DBL_MIN ) skew = 3 / kappa;

    return skew;
}

Variable Documentation

double verdictSqrt2

Definition at line 30 of file V_GaussIntegration.cpp.

Referenced by normalize_jacobian().

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines