![]() |
Mesh Oriented datABase
(version 5.4.1)
Array-based unstructured mesh datastructure
|
Classes | |
class | File_options |
Functions | |
bool | check_for_flag (const char *str) |
ErrorCode | get_file_options (int argc, char **argv, std::vector< std::string > &meshFiles, std::string &interpTag, std::string &gNormTag, std::string &ssNormTag, std::vector< const char * > &ssTagNames, std::vector< const char * > &ssTagValues, std::string &readOpts, std::string &outFile, std::string &writeOpts, std::string &dbgFile, bool &help) |
template<typename Options > | |
ErrorCode | get_file_options (int argc, char **argv, Options &o) |
bool moab::point_locator::io::check_for_flag | ( | const char * | str | ) |
Definition at line 41 of file io.hpp.
Referenced by get_file_options().
{
if( str[0] == '-' )
return true;
else
return false;
}
ErrorCode moab::point_locator::io::get_file_options | ( | int | argc, |
char ** | argv, | ||
std::vector< std::string > & | meshFiles, | ||
std::string & | interpTag, | ||
std::string & | gNormTag, | ||
std::string & | ssNormTag, | ||
std::vector< const char * > & | ssTagNames, | ||
std::vector< const char * > & | ssTagValues, | ||
std::string & | readOpts, | ||
std::string & | outFile, | ||
std::string & | writeOpts, | ||
std::string & | dbgFile, | ||
bool & | help | ||
) |
Definition at line 50 of file io.hpp.
References check_for_flag(), and MB_SUCCESS.
Referenced by get_file_options(), and main().
{
// Initialize some of the outputs to null values indicating not present
// in the argument list.
gNormTag = "";
ssNormTag = "";
readOpts = "PARALLEL=READ_PART;PARTITION=PARALLEL_PARTITION;PARTITION_DISTRIBUTE;"
"PARALLEL_RESOLVE_SHARED_ENTS;PARALLEL_GHOSTS=3.0.1;CPUTIME";
outFile = "";
writeOpts = "PARALLEL=WRITE_PART;CPUTIME";
dbgFile = "";
std::string defaultDbgFile = argv[0]; // The executable name will be the default debug output file.
// These will indicate if we've gotten our required parameters at the end of parsing.
bool haveMeshes = false;
bool haveInterpTag = false;
// Loop over the values in argv pulling out an parsing each one
int npos = 1;
if( argc > 1 && argv[1] == std::string( "-h" ) )
{
help = true;
return MB_SUCCESS;
}
while( npos < argc )
{
if( argv[npos] == std::string( "-meshes" ) )
{
// Parse out the mesh filenames
npos++;
int numFiles = 2;
meshFiles.resize( numFiles );
for( int i = 0; i < numFiles; i++ )
{
if( ( npos < argc ) && ( !check_for_flag( argv[npos] ) ) )
meshFiles[i] = argv[npos++];
else
{
std::cerr << " ERROR - missing correct number of mesh filenames" << std::endl;
return MB_FAILURE;
}
}
haveMeshes = true;
}
else if( argv[npos] == std::string( "-itag" ) )
{
// Parse out the interpolation tag
npos++;
if( ( npos < argc ) && ( !check_for_flag( argv[npos] ) ) )
interpTag = argv[npos++];
else
{
std::cerr << " ERROR - missing " << std::endl;
return MB_FAILURE;
}
haveInterpTag = true;
}
else if( argv[npos] == std::string( "-gnorm" ) )
{
// Parse out the global normalization tag
npos++;
if( ( npos < argc ) && ( !check_for_flag( argv[npos] ) ) )
gNormTag = argv[npos++];
else
{
std::cerr << " ERROR - missing " << std::endl;
return MB_FAILURE;
}
}
else if( argv[npos] == std::string( "-ssnorm" ) )
{
// Parse out the subset normalization tag and selection criteria
npos++;
if( ( npos < argc ) && ( !check_for_flag( argv[npos] ) ) )
ssNormTag = argv[npos++];
else
{
std::cerr << " ERROR - missing " << std::endl;
return MB_FAILURE;
}
if( ( npos < argc ) && ( !check_for_flag( argv[npos] ) ) )
{
char* opts = argv[npos++];
char sep1[1] = { ';' };
char sep2[1] = { '=' };
bool end_vals_seen = false;
std::vector< char* > tmpTagOpts;
// first get the options
for( char* i = strtok( opts, sep1 ); i; i = strtok( 0, sep1 ) )
{
tmpTagOpts.push_back( i );
}
// parse out the name and val or just name.
for( unsigned int j = 0; j < tmpTagOpts.size(); j++ )
{
char* e = strtok( tmpTagOpts[j], sep2 );
ssTagNames.push_back( e );
e = strtok( 0, sep2 );
if( e != NULL )
{
// We have a value
if( end_vals_seen )
{
// ERROR we should not have a value after none are seen
std::cerr << " ERROR - new value seen after end of values "
"in "
<< std::endl;
return MB_FAILURE;
}
// Otherwise get the value string from e and convert it to an int
int* valp = new int;
*valp = atoi( e );
ssTagValues.push_back( (const char*)valp );
}
else
{
// Otherwise there is no '=' so push a null on the list
end_vals_seen = true;
ssTagValues.push_back( (const char*)0 );
}
}
}
else
{
std::cerr << " ERROR - missing " << std::endl;
return MB_FAILURE;
}
}
else if( argv[npos] == std::string( "-ropts" ) )
{
// Parse out the mesh file read options
npos++;
if( ( npos < argc ) && ( !check_for_flag( argv[npos] ) ) )
readOpts = argv[npos++];
else
{
std::cerr << " ERROR - missing " << std::endl;
return MB_FAILURE;
}
}
else if( argv[npos] == std::string( "-outfile" ) )
{
// Parse out the output file name
npos++;
if( ( npos < argc ) && ( !check_for_flag( argv[npos] ) ) )
outFile = argv[npos++];
else
{
std::cerr << " ERROR - missing " << std::endl;
return MB_FAILURE;
}
}
else if( argv[npos] == std::string( "-wopts" ) )
{
// Parse out the output file write options
npos++;
if( ( npos < argc ) && ( !check_for_flag( argv[npos] ) ) )
writeOpts = argv[npos++];
else
{
std::cerr << " ERROR - missing " << std::endl;
return MB_FAILURE;
}
}
else if( argv[npos] == std::string( "-dbgout" ) )
{
// Parse out the debug output file name.
// If no name then use the default.
npos++;
if( ( npos < argc ) && ( !check_for_flag( argv[npos] ) ) )
dbgFile = argv[npos++];
else
dbgFile = defaultDbgFile;
}
else
{
// Unrecognized parameter. Skip it and move along.
std::cerr << " ERROR - Unrecognized parameter:" << argv[npos] << std::endl;
std::cerr << " Skipping..." << std::endl;
npos++;
}
}
if( !haveMeshes )
{
meshFiles.resize( 2 );
meshFiles[0] = std::string( TestDir + "/64bricks_1khex.h5m" );
meshFiles[1] = std::string( TestDir + "/64bricks_12ktet.h5m" );
std::cout << "Mesh files not entered; using default files " << meshFiles[0] << " and " << meshFiles[1]
<< std::endl;
}
if( !haveInterpTag )
{
interpTag = "vertex_field";
std::cout << "Interpolation field name not given, using default of " << interpTag << std::endl;
}
#ifdef MOAB_HAVE_HDF5
if( 1 == argc )
{
std::cout << "No arguments given; using output file dum.h5m." << std::endl;
outFile = "dum.h5m";
}
#endif
return MB_SUCCESS;
}
ErrorCode moab::point_locator::io::get_file_options | ( | int | argc, |
char ** | argv, | ||
Options & | o | ||
) |
Definition at line 280 of file io.hpp.
References get_file_options().
{
return get_file_options( argc, argv, o.meshFiles, o.interpTag, o.gNormTag, o.ssNormTag, o.ssTagNames,
o.ssTagValues, o.readOpts, o.outFile, o.writeOpts, o.dbgFile, o.help );
}