MOAB: Mesh Oriented datABase
(version 5.4.1)
|
#include "moab/IntxMesh/IntxRllCssphere.hpp"
#include "moab/IntxMesh/IntxUtils.hpp"
#include "TestUtil.hpp"
Go to the source code of this file.
Functions | |
int | main (int argc, char *argv[]) |
int main | ( | int | argc, |
char * | argv[] | ||
) |
Definition at line 11 of file intx_rll_cs_sphere_test.cpp.
References moab::Interface::create_meshset(), ErrorCode, moab::Intx2Mesh::FindMaxEdges(), moab::IntxUtils::fix_degenerate_quads(), moab::Intx2Mesh::intersect_meshes(), moab::Interface::load_file(), mb, MB_SUCCESS, MESHSET_SET, moab::IntxAreaUtils::positive_orientation(), moab::R, moab::Intx2Mesh::set_error_tolerance(), moab::IntxRllCssphere::set_radius(), STRINGIFY, and moab::Interface::write_mesh().
{ // check command line arg// Euler grid is red, arrival, Lagrangian is blue, departure // will will keep the const char* filename_mesh1 = STRINGIFY( MESHDIR ) "/mbcslam/outRLLMesh.g"; const char* filename_mesh2 = STRINGIFY( MESHDIR ) "/mbcslam/outCSMesh.g"; double R = 1.; // input double epsrel = 1.e-8; const char* newFile = "intx.vtk"; if( argc == 6 ) { filename_mesh1 = argv[1]; filename_mesh2 = argv[2]; R = atof( argv[3] ); epsrel = atof( argv[4] ); newFile = argv[5]; } else { printf( "Usage: %s <mesh_filename1> <mesh_filename2> <radius> <epsrel> <newFile>\n", argv[0] ); if( argc != 1 ) return 1; printf( "No files specified. Defaulting to: %s %s %f %g %s\n", filename_mesh1, filename_mesh2, R, epsrel, newFile ); } // read meshes in 2 file sets Core moab; Interface* mb = &moab; // global EntityHandle sf1, sf2; ErrorCode rval = mb->create_meshset( MESHSET_SET, sf1 ); if( MB_SUCCESS != rval ) return 1; rval = mb->create_meshset( MESHSET_SET, sf2 ); if( MB_SUCCESS != rval ) return 1; rval = mb->load_file( filename_mesh1, &sf1 ); if( MB_SUCCESS != rval ) return 1; rval = mb->load_file( filename_mesh2, &sf2 ); if( MB_SUCCESS != rval ) return 1; EntityHandle outputSet; rval = mb->create_meshset( MESHSET_SET, outputSet ); if( MB_SUCCESS != rval ) return 1; // IntxUtils rval = IntxUtils::fix_degenerate_quads( mb, sf1 ); if( MB_SUCCESS != rval ) return 1; IntxAreaUtils areaAdaptor; rval = areaAdaptor.positive_orientation( mb, sf1, R ); if( MB_SUCCESS != rval ) return 1; rval = areaAdaptor.positive_orientation( mb, sf2, R ); if( MB_SUCCESS != rval ) return 1; /*// set the edge tags on all elements sf1 rval = set_edge_type_flag(mb, sf1); // form all edges, and set on them type 1 if constant latitude // add them to the set after this, just so we have them if (MB_SUCCESS != rval) return 1;*/ IntxRllCssphere worker( mb ); worker.set_error_tolerance( R * epsrel ); // worker.SetEntityType(moab::MBQUAD); worker.set_radius( R ); // worker.enable_debug(); rval = worker.FindMaxEdges( sf1, sf2 ); if( MB_SUCCESS != rval ) return 1; rval = worker.intersect_meshes( sf1, sf2, outputSet ); // compute total area with 2 methods if( MB_SUCCESS != rval ) std::cout << " failed to intersect meshes\n"; rval = mb->write_mesh( newFile, &outputSet, 1 ); if( MB_SUCCESS != rval ) return 1; return 0; }