MOAB: Mesh Oriented datABase  (version 5.4.1)
MBMesquite::ObjectiveFunctionTemplate Class Reference

Base for most concrete objective functions. More...

#include <ObjectiveFunctionTemplate.hpp>

+ Inheritance diagram for MBMesquite::ObjectiveFunctionTemplate:
+ Collaboration diagram for MBMesquite::ObjectiveFunctionTemplate:

Public Member Functions

 ObjectiveFunctionTemplate (QualityMetric *qm=0)
virtual ~ObjectiveFunctionTemplate ()
QualityMetricget_quality_metric () const
void set_quality_metric (QualityMetric *metric)
virtual bool initialize_block_coordinate_descent (MeshDomainAssoc *mesh_and_domain, const Settings *settings, PatchSet *user_set, MsqError &err)
 Initial accumulated value for block coordinate descent algorithms.
virtual int min_patch_layers () const
virtual void initialize_queue (MeshDomainAssoc *mesh_and_domain, const Settings *settings, MsqError &err)
 Called at start of instruction queue processing.

Private Attributes

QualityMetricqualityMetric

Detailed Description

Base for most concrete objective functions.

Base class for objective functions which are a function of a quality metric.

Definition at line 46 of file ObjectiveFunctionTemplate.hpp.


Constructor & Destructor Documentation


Member Function Documentation

bool MBMesquite::ObjectiveFunctionTemplate::initialize_block_coordinate_descent ( MeshDomainAssoc mesh_and_domain,
const Settings settings,
PatchSet user_set,
MsqError err 
) [virtual]

Initial accumulated value for block coordinate descent algorithms.

Set accumulated value of objective function to the value for the entire, unmodified mesh. This is the initial state for a block coordinate descent algorithm. The ObjectiveFunction will asked to add or remove values for a specific patch of the mesh during the optimization.

Parameters:
meshThe Mesh
domainThe MeshDomain
user_setUser-defined patch set - not relevant for most OF templates.

Implements MBMesquite::ObjectiveFunction.

Definition at line 55 of file ObjectiveFunctionTemplate.cpp.

References MBMesquite::ObjectiveFunction::ACCUMULATE, b, MBMesquite::ObjectiveFunction::clear(), MBMesquite::QualityMetric::ELEMENT_BASED, MBMesquite::ObjectiveFunction::evaluate(), MBMesquite::MeshDomainAssoc::get_domain(), MBMesquite::MeshDomainAssoc::get_mesh(), get_quality_metric(), MBMesquite::MsqError::INVALID_STATE, mesh, MSQ_CHKERR, MSQ_ERRZERO, MSQ_SETERR, MBMesquite::PatchData::set_mesh(), value(), and MBMesquite::QualityMetric::VERTEX_BASED.

{
    std::unique_ptr< PatchSet > patch_set;
    switch( get_quality_metric()->get_metric_type() )
    {
        case QualityMetric::VERTEX_BASED:
            patch_set = std::unique_ptr< PatchSet >( new VertexPatches( 1, false ) );
            break;
        case QualityMetric::ELEMENT_BASED:
            patch_set = std::unique_ptr< PatchSet >( new ElementPatches );
            break;
        default:
            MSQ_SETERR( err )
            ( "Cannot initialize for BCD for unknown metric type", MsqError::INVALID_STATE );
            return false;
    }

    Mesh* mesh         = mesh_and_domain->get_mesh();
    MeshDomain* domain = mesh_and_domain->get_domain();

    clear();
    patch_set->set_mesh( mesh );
    PatchIterator patches( patch_set.get() );

    PatchData pd;
    pd.set_mesh( mesh );
    pd.set_domain( domain );
    if( settings ) pd.attach_settings( settings );

    bool result = true;
    while( patches.get_next_patch( pd, err ) && !MSQ_CHKERR( err ) )
    {
        double value;
        bool b = evaluate( ObjectiveFunction::ACCUMULATE, pd, value, false, err );
        MSQ_ERRZERO( err );
        result = result && b;
    }
    return result;
}
void MBMesquite::ObjectiveFunctionTemplate::initialize_queue ( MeshDomainAssoc mesh_and_domain,
const Settings settings,
MsqError err 
) [virtual]

Called at start of instruction queue processing.

Do any preliminary global initialization, consistency checking, etc. Default implementation does nothing.

Implements MBMesquite::ObjectiveFunction.

Definition at line 48 of file ObjectiveFunctionTemplate.cpp.

References MBMesquite::QualityMetric::initialize_queue(), MSQ_ERRRTN, and qualityMetric.

{
    qualityMetric->initialize_queue( mesh_and_domain, settings, err );MSQ_ERRRTN( err );
}

Get the minimum number of layers of adjacent elements required in a patch to evaluate the objective function for a single free vertex.

Implements MBMesquite::ObjectiveFunction.

Definition at line 98 of file ObjectiveFunctionTemplate.cpp.

References get_quality_metric(), and MBMesquite::QualityMetric::VERTEX_BASED.

{
    if( !get_quality_metric() )
        return 0;
    else if( get_quality_metric()->get_metric_type() == QualityMetric::VERTEX_BASED )
        return 2;
    else
        return 1;
}

Member Data Documentation

List of all members.


The documentation for this class was generated from the following files:
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines