Mesh Oriented datABase
(version 5.4.1)
Array-based unstructured mesh datastructure
|
00001 /* 00002 * Sphere decomp tool. Meshes a group of spheres and the interstices between with 00003 * hex elements, by triangulating the vertices corresponding to sphere centers 00004 * and subdividing those tets. For a description of the subdivision template used, 00005 * see comments in the subdivide_tet function below. 00006 */ 00007 00008 #include "moab/Core.hpp" 00009 #include "SphereDecomp.hpp" 00010 #include <iostream> 00011 00012 const char* SPHERE_RADII_TAG_NAME = "SPHERE_RADII"; 00013 00014 #define RR \ 00015 if( moab::MB_SUCCESS != result ) return result 00016 00017 int main( int argc, char* argv[] ) 00018 { 00019 if( argc < 3 ) 00020 { 00021 std::cout << "Usage: " << argv[0] << " <input_mesh> <output_mesh>" << std::endl; 00022 return 0; 00023 } 00024 00025 // create MOAB 00026 moab::Interface* mbImpl = new moab::Core(); 00027 00028 // read in mesh 00029 moab::ErrorCode result = mbImpl->load_mesh( argv[1] ); 00030 if( moab::MB_SUCCESS != result ) 00031 { 00032 std::cout << "Problems loading mesh." << std::endl; 00033 return 1; 00034 } 00035 00036 moab::Tag sphere_radii_tag = 0; 00037 double dum_val = 0.1; 00038 result = mbImpl->tag_get_handle( SPHERE_RADII_TAG_NAME, 1, moab::MB_TYPE_DOUBLE, sphere_radii_tag, 00039 moab::MB_TAG_DENSE | moab::MB_TAG_CREAT, &dum_val ); 00040 if( moab::MB_SUCCESS != result ) 00041 { 00042 std::cout << "Problem allocating SPHERE_RADII tag." << std::endl; 00043 return 1; 00044 } 00045 00046 SphereDecomp sd( mbImpl ); 00047 00048 moab::EntityHandle this_set = 0; 00049 result = sd.build_sphere_mesh( SPHERE_RADII_TAG_NAME, &this_set );RR; 00050 00051 // write mesh 00052 result = mbImpl->write_mesh( argv[2], &this_set, 1 );RR; 00053 00054 return 0; 00055 }