MOAB: Mesh Oriented datABase  (version 5.4.1)
untangle_test.cpp File Reference
#include "MeshImpl.hpp"
#include "MsqTimer.hpp"
#include "Mesquite.hpp"
#include "MsqError.hpp"
#include "Vector3D.hpp"
#include "InstructionQueue.hpp"
#include "PatchData.hpp"
#include "TerminationCriterion.hpp"
#include "QualityAssessor.hpp"
#include "TestUtil.hpp"
#include "Randomize.hpp"
#include "ConditionNumberQualityMetric.hpp"
#include "UntangleBetaQualityMetric.hpp"
#include "LPtoPTemplate.hpp"
#include "LInfTemplate.hpp"
#include "SteepestDescent.hpp"
#include "ConjugateGradient.hpp"
#include "PlanarDomain.hpp"
#include <iostream>
#include <cstdlib>
+ Include dependency graph for untangle_test.cpp:

Go to the source code of this file.

Functions

int main ()

Variables

std::string DEFAULT_MESH = "unittest/mesquite/2D/vtk/quads/tangled/tangled_quad.vtk"
const bool brief_output = true
const bool write_output = false

Function Documentation

int main ( )

Definition at line 80 of file untangle_test.cpp.

References MBMesquite::TerminationCriterion::add_iteration_limit(), MBMesquite::QualityAssessor::add_quality_assessment(), MBMesquite::InstructionQueue::add_quality_assessor(), MBMesquite::TerminationCriterion::add_relative_quality_improvement(), brief_output, DEFAULT_MESH, MBMesquite::QualityAssessor::disable_printing_results(), 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_element_on_vertex_patch(), MBMesquite::PatchSetUser::use_global_patch(), write_output, and MBMesquite::MeshImpl::write_vtk().

{
    MBMesquite::MeshImpl mesh;
    MsqPrintError err( cout );
    mesh.read_vtk( DEFAULT_MESH.c_str(), err );
    if( err ) return 1;

    // Set Domain Constraint
    Vector3D pnt( 0, 0, 5 );
    Vector3D s_norm( 0, 0, 1 );
    PlanarDomain msq_geom( s_norm, pnt );

    // creates an intruction queue
    InstructionQueue queue1;

    // creates a mean ratio quality metric ...
    ConditionNumberQualityMetric shape_metric;
    UntangleBetaQualityMetric untangle( 2 );
    Randomize pass0( .05 );
    // ... and builds an objective function with it
    // LInfTemplate* obj_func = new LInfTemplate(shape_metric);
    LInfTemplate obj_func( &untangle );
    LPtoPTemplate obj_func2( &shape_metric, 2, err );
    if( err ) return 1;
    // creates the steepest descent optimization procedures
    ConjugateGradient pass1( &obj_func, err );
    if( err ) return 1;

    // SteepestDescent* pass2 = new SteepestDescent( obj_func2 );
    ConjugateGradient pass2( &obj_func2, err );
    if( err ) return 1;
    pass2.use_element_on_vertex_patch();
    if( err ) return 1;
    pass2.use_global_patch();
    if( err ) return 1;
    QualityAssessor stop_qa  = QualityAssessor( &shape_metric );
    QualityAssessor stop_qa2 = QualityAssessor( &shape_metric );
    if( brief_output )
    {
        stop_qa.disable_printing_results();
        stop_qa2.disable_printing_results();
    }

    stop_qa.add_quality_assessment( &untangle );
    // **************Set stopping criterion**************
    // untangle beta should be 0 when untangled
    TerminationCriterion sc1;
    sc1.add_relative_quality_improvement( 0.000001 );
    TerminationCriterion sc3;
    sc3.add_iteration_limit( 10 );
    TerminationCriterion sc_rand;
    sc_rand.add_iteration_limit( 1 );

    // StoppingCriterion sc1(&stop_qa,-1.0,.0000001);
    // StoppingCriterion sc3(&stop_qa2,.9,1.00000001);
    // StoppingCriterion sc2(StoppingCriterion::NUMBER_OF_PASSES,10);
    // StoppingCriterion sc_rand(StoppingCriterion::NUMBER_OF_PASSES,1);
    // either until untangled or 10 iterations
    pass0.set_outer_termination_criterion( &sc_rand );
    pass1.set_outer_termination_criterion( &sc1 );
    pass2.set_inner_termination_criterion( &sc3 );

    // adds 1 pass of pass1 to mesh_set1
    queue1.add_quality_assessor( &stop_qa, err );
    if( err ) return 1;
    // queue1.add_preconditioner(pass0,err);MSQ_CHKERR(err);
    // queue1.add_preconditioner(pass1,err);MSQ_CHKERR(err);
    // queue1.set_master_quality_improver(pass2, err); MSQ_CHKERR(err);
    queue1.set_master_quality_improver( &pass1, err );
    if( err ) return 1;
    queue1.add_quality_assessor( &stop_qa2, err );
    if( err ) return 1;
    if( write_output ) mesh.write_vtk( "original_mesh.vtk", err );
    if( err ) return 1;

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

    if( write_output ) mesh.write_vtk( "smoothed_mesh.vtk", err );
    if( err ) return 1;

    if( !brief_output ) print_timing_diagnostics( cout );
    return 0;
}

Variable Documentation

const bool brief_output = true

Definition at line 77 of file untangle_test.cpp.

Referenced by main(), and uwt().

std::string DEFAULT_MESH = "unittest/mesquite/2D/vtk/quads/tangled/tangled_quad.vtk"

Definition at line 75 of file untangle_test.cpp.

Referenced by main().

const bool write_output = false

Definition at line 78 of file untangle_test.cpp.

Referenced by main(), and uwt().

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines