MOAB: Mesh Oriented datABase  (version 5.3.0)
algorithm_test.cpp File Reference
#include <iostream>
#include <cstdlib>
#include "Mesquite.hpp"
#include "MeshImpl.hpp"
#include "MsqError.hpp"
#include "Vector3D.hpp"
#include "InstructionQueue.hpp"
#include "PatchData.hpp"
#include "TerminationCriterion.hpp"
#include "QualityAssessor.hpp"
#include "IdealWeightInverseMeanRatio.hpp"
#include "ConditionNumberQualityMetric.hpp"
#include "LPtoPTemplate.hpp"
#include "LInfTemplate.hpp"
#include "FeasibleNewton.hpp"
#include "ConjugateGradient.hpp"
#include "TestUtil.hpp"
+ Include dependency graph for algorithm_test.cpp:

Go to the source code of this file.

Functions

int main ()

Function Documentation

int main ( )

Definition at line 70 of file algorithm_test.cpp.

References MBMesquite::TerminationCriterion::add_absolute_quality_improvement(), MBMesquite::TerminationCriterion::add_cpu_time(), MBMesquite::TerminationCriterion::add_iteration_limit(), MBMesquite::InstructionQueue::add_quality_assessor(), mesh, MBMesquite::print_timing_diagnostics(), MBMesquite::MeshImpl::read_vtk(), MBMesquite::IQInterface::run_instructions(), MBMesquite::QualityImprover::set_inner_termination_criterion(), MBMesquite::InstructionQueue::set_master_quality_improver(), MBMesquite::QualityImprover::set_outer_termination_criterion(), MBMesquite::PatchSetUser::use_global_patch(), and MBMesquite::MeshImpl::write_vtk().

{
    MsqPrintError err( cout );
    MBMesquite::MeshImpl mesh;

    std::string file_name = TestDir + "/3D/vtk/tets/untangled/tire.vtk";
    mesh.read_vtk( file_name.c_str(), err );
    if( err ) return 1;

    // creates an intruction queue
    InstructionQueue queue1;

    // creates a mean ratio quality metric ...
    IdealWeightInverseMeanRatio mean( err );
    if( err ) return 1;

    LPtoPTemplate obj_func( &mean, 1, err );
    if( err ) return 1;

    // creates the optimization procedures
    //   ConjugateGradient* pass1 = new ConjugateGradient( obj_func, err );
    FeasibleNewton pass1( &obj_func );

    // perform optimization globally
    pass1.use_global_patch();
    if( err ) return 1;

    QualityAssessor mean_qa = QualityAssessor( &mean );

    //**************Set termination criterion****************

    // perform 1 pass of the outer loop (this line isn't essential as it is
    // the default behavior).
    TerminationCriterion tc_outer;
    tc_outer.add_iteration_limit( 1 );
    pass1.set_outer_termination_criterion( &tc_outer );

    // perform the inner loop until a certain objective function value is
    // reached.  The exact value needs to be determined (about 18095).
    // As a safety, also stop if the time exceeds 10 minutes (600 seconds).
    TerminationCriterion tc_inner;
    tc_inner.add_absolute_quality_improvement( 13975 );
    //  tc_inner.add_absolute_quality_improvement( 13964.93818 );
    tc_inner.add_cpu_time( 1800 );

    pass1.set_inner_termination_criterion( &tc_inner );

    // used for cg to get some info
    //  pass1->set_debugging_level(2);

    // adds 1 pass of pass1 to mesh_set1
    queue1.add_quality_assessor( &mean_qa, err );
    if( err ) return 1;
    queue1.set_master_quality_improver( &pass1, err );
    if( err ) return 1;
    queue1.add_quality_assessor( &mean_qa, err );
    if( err ) return 1;
    mesh.write_vtk( "original_mesh.vtk", err );
    if( err ) return 1;

    // launches optimization on mesh_set1
    queue1.run_instructions( &mesh, err );
    if( err ) return 1;

    mesh.write_vtk( "smoothed_mesh.vtk", err );
    if( err ) return 1;
    print_timing_diagnostics( cout );
    return 0;
}
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines