MOAB: Mesh Oriented datABase
(version 5.4.1)
|
#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"
Go to the source code of this file.
Functions | |
int | main () |
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 + "unittest/mesquite/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; }