Example demonstrating uniform mesh refinement using MOAB's AHF data structures.This example shows how to:
Usage: ./UniformRefinement [filename] [level1_degree] [level2_degree] ...
Example: ./UniformRefinement input.h5m 2 3 2 # Three levels with degrees 2, 3, 2
#include <iostream>
#include <vector>
#include <string>
#include <cstdlib>
#include <stdexcept>
namespace
{
{
std::cout << "Usage: " << program_name << " filename [level1_degree level2_degree ...]\n"
<< " filename - Path to the input mesh file\n"
<< " levelN_degree - (Optional) Degree of refinement for each level\n"
<< " levels with default degrees\n";
}
{
std::vector< int > level_degrees;
if( argc > 2 )
{
level_degrees.reserve( argc - 2 );
for( int i = 2; i < argc; ++i )
{
try
{
int degree = std::stoi( argv[i] );
if( degree < 1 )
{
throw std::invalid_argument( "Refinement degree must be at least 1" );
}
level_degrees.push_back( degree );
}
catch( const std::exception& e )
{
throw std::runtime_error( "Invalid refinement degree: " + std::string( e.what() ) );
}
}
}
else
{
}
return level_degrees;
}
}
int main(
int argc,
char* argv[] )
{
try
{
if( argc < 2 || std::string( argv[1] ) == "--help" || std::string( argv[1] ) == "-h" )
{
return argc < 2 ? 1 : 0;
}
const int num_levels = static_cast< int >( level_degrees.size() );
<< "Refinement levels: " << num_levels << "\n"
<< "Level degrees: ";
for( const auto& degree : level_degrees )
{
std::cout << degree << " ";
}
std::cout << "\n";
auto moab = std::make_unique< Core >();
{
throw std::runtime_error( "Failed to create MOAB instance" );
}
NestedRefine refiner(
moab.get() );
std::vector< EntityHandle > mesh_sets;
std::cout << "Starting mesh hierarchy generation for " << num_levels << " levels...\n";
MB_CHK_SET_ERR( refiner.generate_mesh_hierarchy( num_levels, level_degrees.data(), mesh_sets ),
"Failed to generate mesh hierarchy" );
std::cout << "Successfully generated mesh hierarchy\n";
return 0;
}
catch( const std::exception& e )
{
std::cerr << "\nError: " << e.what() << "\n";
return 1;
}
catch( ... )
{
std::cerr << "\nError: Unknown exception occurred\n";
return 1;
}
}