MOAB: Mesh Oriented datABase  (version 5.2.1)
V_WedgeMetric.cpp File Reference
#include "moab/verdict.h"
#include "VerdictVector.hpp"
#include <memory.h>
+ Include dependency graph for V_WedgeMetric.cpp:

Go to the source code of this file.

Defines

#define VERDICT_EXPORTS

Functions

C_FUNC_DEF double v_wedge_volume (int num_nodes, double coordinates[][3])
 Calculates wedge volume.
C_FUNC_DEF void v_wedge_quality (int num_nodes, double coordinates[][3], unsigned int metrics_request_flag, WedgeMetricVals *metric_vals)
 Calculates quality metrics for wedge elements.

Define Documentation

#define VERDICT_EXPORTS

Definition at line 23 of file V_WedgeMetric.cpp.


Function Documentation

C_FUNC_DEF void v_wedge_quality ( int  num_nodes,
double  coordinates[][3],
unsigned int  metrics_request_flag,
WedgeMetricVals metric_vals 
)

Calculates quality metrics for wedge elements.

Definition at line 102 of file V_WedgeMetric.cpp.

References V_WEDGE_VOLUME, v_wedge_volume(), and WedgeMetricVals::volume.

{
    memset( metric_vals, 0, sizeof( WedgeMetricVals ) );

    if( metrics_request_flag & V_WEDGE_VOLUME ) metric_vals->volume = v_wedge_volume( num_nodes, coordinates );
}
C_FUNC_DEF double v_wedge_volume ( int  num_nodes,
double  coordinates[][3] 
)

Calculates wedge volume.

calculate the volume of a wedge

this is done by dividing the wedge into 3 tets and summing the volume of each tet

Definition at line 54 of file V_WedgeMetric.cpp.

References VerdictVector::set().

Referenced by moab::VerdictWrapper::all_quality_measures(), moab::VerdictWrapper::quality_measure(), and v_wedge_quality().

{

    double volume = 0;
    VerdictVector side1, side2, side3;

    if( num_nodes == 6 )
    {

        // divide the wedge into 3 tets and calculate each volume

        side1.set( coordinates[1][0] - coordinates[0][0], coordinates[1][1] - coordinates[0][1],
                   coordinates[1][2] - coordinates[0][2] );

        side2.set( coordinates[2][0] - coordinates[0][0], coordinates[2][1] - coordinates[0][1],
                   coordinates[2][2] - coordinates[0][2] );

        side3.set( coordinates[3][0] - coordinates[0][0], coordinates[3][1] - coordinates[0][1],
                   coordinates[3][2] - coordinates[0][2] );

        volume = side3 % ( side1 * side2 ) / 6;

        side1.set( coordinates[4][0] - coordinates[1][0], coordinates[4][1] - coordinates[1][1],
                   coordinates[4][2] - coordinates[1][2] );

        side2.set( coordinates[5][0] - coordinates[1][0], coordinates[5][1] - coordinates[1][1],
                   coordinates[5][2] - coordinates[1][2] );

        side3.set( coordinates[3][0] - coordinates[1][0], coordinates[3][1] - coordinates[1][1],
                   coordinates[3][2] - coordinates[1][2] );

        volume += side3 % ( side1 * side2 ) / 6;

        side1.set( coordinates[5][0] - coordinates[1][0], coordinates[5][1] - coordinates[1][1],
                   coordinates[5][2] - coordinates[1][2] );

        side2.set( coordinates[2][0] - coordinates[1][0], coordinates[2][1] - coordinates[1][1],
                   coordinates[2][2] - coordinates[1][2] );

        side3.set( coordinates[3][0] - coordinates[1][0], coordinates[3][1] - coordinates[1][1],
                   coordinates[3][2] - coordinates[1][2] );

        volume += side3 % ( side1 * side2 ) / 6;
    }

    return (double)volume;
}
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines