MOAB: Mesh Oriented datABase
(version 5.4.1)
|
Classes | |
class | ParShapeImprovementWrapper |
Public Member Functions | |
ParShapeImprover (int inner_iterations=100, double grad_norm=1.e-8) | |
void | run (Mesh &mesh, MeshDomain *domain, MsqError &err, bool always_smooth=true, int debug=0) |
Static Public Member Functions | |
static int | count_invalid_elements (Mesh &mesh, MeshDomain *domain=0) |
Private Attributes | |
int | innerIter |
double | gradNorm |
Definition at line 111 of file par_hex_untangle_shape.cpp.
ParShapeImprover::ParShapeImprover | ( | int | inner_iterations = 100 , |
double | grad_norm = 1.e-8 |
||
) | [inline] |
Definition at line 117 of file par_hex_untangle_shape.cpp.
int ParShapeImprover::count_invalid_elements | ( | Mesh & | mesh, |
MeshDomain * | domain = 0 |
||
) | [static] |
Definition at line 323 of file par_hex_untangle_shape.cpp.
References MBMesquite::InstructionQueue::add_quality_assessor(), MBMesquite::QualityAssessor::Assessor::get_invalid_element_count(), MBMesquite::QualityAssessor::get_results(), MBMesquite::QualityMetric::LINEAR, mesh, MSQ_ERRZERO, MBMesquite::InstructionQueue::run_common(), MBMesquite::AveragingQM::set_averaging_method(), and settings.
{ MsqError err; InstructionQueue q; IdealWeightInverseMeanRatio metric; metric.set_averaging_method( QualityMetric::LINEAR ); // Check for inverted elements in the mesh QualityAssessor inv_check( &metric ); // inv_check.disable_printing_results(); q.add_quality_assessor( &inv_check, err ); MSQ_ERRZERO( err ); Settings settings; // bug? should we pass in pmesh? Mesh* mesh_ptr = &mesh; MeshDomainAssoc mesh_and_domain = MeshDomainAssoc( mesh_ptr, domain ); q.run_common( &mesh_and_domain, 0, &settings, err ); MSQ_ERRZERO( err ); const QualityAssessor::Assessor* inv_b = inv_check.get_results( &metric ); int num_invalid = inv_b->get_invalid_element_count(); return num_invalid; }
void ParShapeImprover::run | ( | Mesh & | mesh, |
MeshDomain * | domain, | ||
MsqError & | err, | ||
bool | always_smooth = true , |
||
int | debug = 0 |
||
) |
Definition at line 347 of file par_hex_untangle_shape.cpp.
References MBMesquite::MsqDebug::enable(), ParShapeImprover::ParShapeImprovementWrapper::m_do_untangle_only, mesh, MPI_COMM_WORLD, MSQ_ERRRTN, rank, and MBMesquite::IQInterface::run_instructions().
Referenced by test().
{ int rank, nprocs; MPI_Comm_rank( MPI_COMM_WORLD, &rank ); MPI_Comm_size( MPI_COMM_WORLD, &nprocs ); if( debug ) { MsqDebug::enable( 1 ); if( debug > 1 ) MsqDebug::enable( 2 ); if( debug > 2 ) MsqDebug::enable( 3 ); } ParallelMesh* pmesh = dynamic_cast< ParallelMesh* >( &mesh ); std::cout << "P[" << rank << "] " << " ParShapeImprover::run: pmesh= " << pmesh << std::endl; MsqError mErr; int num_invalid = 0; bool check_quality = true; if( check_quality ) { num_invalid = count_invalid_elements( mesh, domain ); std::cout << "\nP[" << rank << "] " << " ParShapeImprover num_invalid before= " << num_invalid << ( num_invalid ? " WARNING: invalid elements exist before MBMesquite smoothing" : ( !always_smooth ? "WARNING: no smoothing requested since always_smooth=false" : " " ) ) << std::endl; } if( num_invalid || always_smooth ) { bool use_canned_wrapper = false; if( use_canned_wrapper ) { ShapeImprovementWrapper siw( mErr ); if( pmesh ) siw.run_instructions( pmesh, domain, mErr ); else { MeshDomainAssoc mesh_and_domain = MeshDomainAssoc( &mesh, domain ); siw.run_instructions( &mesh_and_domain, mErr ); } } else { // int msq_debug = debug; // 1,2,3 for more debug info // bool always_smooth_local = false; bool do_untangle_only = false; ParShapeImprover::ParShapeImprovementWrapper siw( innerIter, 0.0, gradNorm, 100 ); siw.m_do_untangle_only = do_untangle_only; if( pmesh ) siw.run_instructions( pmesh, domain, mErr ); else { MeshDomainAssoc mesh_and_domain = MeshDomainAssoc( &mesh, domain ); siw.run_instructions( &mesh_and_domain, mErr ); } } std::cout << "\nP[" << rank << "] " << " ParShapeImprover: MsqError after ShapeImprovementWrapper: " << mErr << std::endl; if( check_quality ) { num_invalid = count_invalid_elements( mesh, domain ); std::cout << "\nP[" << rank << "] " << " ParShapeImprover num_invalid after= " << num_invalid << " " << ( num_invalid ? " ERROR still have invalid elements after MBMesquite smoothing" : " SUCCESS: smoothed and removed invalid elements " ) << std::endl; } MSQ_ERRRTN( mErr ); } }
double ParShapeImprover::gradNorm [private] |
Definition at line 114 of file par_hex_untangle_shape.cpp.
int ParShapeImprover::innerIter [private] |
Definition at line 113 of file par_hex_untangle_shape.cpp.