|
cgma
|
#include <iostream>#include <fstream>#include <string>#include <stdexcept>#include <cctype>#include <vector>#include <set>#include <map>#include <sstream>#include <algorithm>#include <cassert>#include "iGeom.h"#include "geometry.hpp"#include "MCNPInput.hpp"#include "options.hpp"#include "volumes.hpp"#include "ProgOptions.hpp"#include "version.hpp"#include <RefEntityFactory.hpp>#include <Body.hpp>#include <GeometryQueryTool.hpp>#include <CubitMessage.hpp>Go to the source code of this file.
Classes | |
| class | SilentCubitMessageHandler |
| class | CubitSilence |
| class | GeometryContext |
| class | GeometryContext::NamedGroup |
| class | GeometryContext::NamedEntity |
| struct | int_triple |
Typedefs | |
| typedef std::vector < iBase_EntityHandle > | entity_collection_t |
Functions | |
| static bool | intersectIfPossible (iGeom_Instance igm, iBase_EntityHandle h1, iBase_EntityHandle h2, iBase_EntityHandle *result, bool delete_on_failure=true) |
| static bool | boundBoxesIntersect (iGeom_Instance igm, iBase_EntityHandle h1, iBase_EntityHandle h2) |
| static std::vector< int_triple > | makeGridShellOfRadius (int r, int dimensions) |
| void | debugSurfaceDistances (InputDeck &deck, std::ostream &out=std::cout) |
| std::string | mcnp2cad_version (bool full=true) |
| int | main (int argc, char *argv[]) |
Variables | |
| static bool | CGMA_opt_inhibit_intersect_errs = false |
| struct program_option_struct | Gopt |
| typedef std::vector<iBase_EntityHandle> entity_collection_t |
Definition at line 78 of file mcnp2cad.cpp.
| static bool boundBoxesIntersect | ( | iGeom_Instance | igm, |
| iBase_EntityHandle | h1, | ||
| iBase_EntityHandle | h2 | ||
| ) | [static] |
Definition at line 113 of file mcnp2cad.cpp.
{
Vector3d h1_min, h1_max, h2_min, h2_max;
int igm_result;
iGeom_getEntBoundBox( igm, h1, h1_min.v, h1_min.v+1, h1_min.v+2, h1_max.v, h1_max.v+1, h1_max.v+2, &igm_result );
CHECK_IGEOM( igm_result, "Getting bounding box h1" );
iGeom_getEntBoundBox( igm, h2, h2_min.v, h2_min.v+1, h2_min.v+2, h2_max.v, h2_max.v+1, h2_max.v+2, &igm_result );
CHECK_IGEOM( igm_result, "Getting bounding box h2" );
bool ret = false;
for( int i = 0; i < 3 && ret == false; ++i ){
ret = ret || ( h1_min.v[i] > h2_max.v[i] );
ret = ret || ( h2_min.v[i] > h1_max.v[i] );
}
return !ret;
}
| void debugSurfaceDistances | ( | InputDeck & | deck, |
| std::ostream & | out = std::cout |
||
| ) |
Definition at line 1110 of file mcnp2cad.cpp.
{
InputDeck::surface_card_list& surfaces = deck.getSurfaces();
for( InputDeck::surface_card_list::iterator i = surfaces.begin(); i!=surfaces.end(); ++i){
try{
const SurfaceVolume& s = makeSurface(*i);
out << "S" << (*i)->getIdent() << " distance from origin: " << s.getFarthestExtentFromOrigin() << std::endl;
}
catch(std::runtime_error& e){
std::cerr << "Error debugging surface distances: " << e.what() << std::endl;
throw;
}
}
}
| static bool intersectIfPossible | ( | iGeom_Instance | igm, |
| iBase_EntityHandle | h1, | ||
| iBase_EntityHandle | h2, | ||
| iBase_EntityHandle * | result, | ||
| bool | delete_on_failure = true |
||
| ) | [static] |
Definition at line 81 of file mcnp2cad.cpp.
{
int igm_result;
//#ifdef USING_CGMA
if( CGMA_opt_inhibit_intersect_errs ){
CubitSilence s;
iGeom_intersectEnts( igm, h1, h2, result, &igm_result);
} else
//#endif
{
iGeom_intersectEnts( igm, h1, h2, result, &igm_result);
}
if( igm_result == iBase_SUCCESS ){
return true;
}
else{
if( delete_on_failure ){
iGeom_deleteEnt( igm, h1, &igm_result);
CHECK_IGEOM(igm_result, "deleting an intersection candidate");
iGeom_deleteEnt( igm, h2, &igm_result);
CHECK_IGEOM(igm_result, "deleting an intersection candidate");
}
return false;
}
}
| int main | ( | int | argc, |
| char * | argv[] | ||
| ) |
Definition at line 1131 of file mcnp2cad.cpp.
{
// set default options
Gopt.verbose = Gopt.debug = false;
Gopt.infinite_lattice_extra_effort = false;
Gopt.tag_materials = true;
Gopt.tag_importances = true;
Gopt.tag_cell_IDs = true;
Gopt.make_graveyard = true;
Gopt.imprint_geom = true;
Gopt.merge_geom = true;
Gopt.input_file = "";
Gopt.output_file = OPT_DEFAULT_OUTPUT_FILENAME;
Gopt.igeom_init_options = "";
Gopt.override_tolerance = false;
Gopt.uwuw_names = false;
bool DiFlag = false, DoFlag = false;
ProgOptions po("mcnp2cad " + mcnp2cad_version(false) + ": An MCNP geometry to CAD file converter");
po.setVersion( mcnp2cad_version() );
po.addOpt<void>("extra-effort,e","Use extra effort to get infinite lattices right (may be slow)",
&Gopt.infinite_lattice_extra_effort );
po.addOpt<void>("verbose,v", "Verbose output", &Gopt.verbose );
po.addOpt<void>("debug,D", "Debugging (very verbose) output", &Gopt.debug );
po.addOpt<void>("Di", "Debug output for MCNP parsing phase only", &DiFlag);
po.addOpt<void>("Do","Debug output for iGeom output phase only", &DoFlag);
po.addOptionHelpHeading( "Options controlling CAD output:" );
po.addOpt<std::string>(",o", "Give name of output file. Default: " + Gopt.output_file, &Gopt.output_file );
po.addOpt<double>("tol,t", "Specify a tolerance for merging surfaces", &Gopt.specific_tolerance );
po.addOpt<void>("skip-mats,M", "Do not tag materials using group names",
&Gopt.tag_materials, po.store_false );
po.addOpt<void>("skip-imps,P", "Do not tag cell importances using group names",
&Gopt.tag_importances, po.store_false );
po.addOpt<void>("skip-nums,N", "Do not tag cell numbers using body names",
&Gopt.tag_cell_IDs, po.store_false );
po.addOpt<void>("skip-merge,E", "Do not merge the geometry",
&Gopt.merge_geom, po.store_false );
po.addOpt<void>("skip-imprint,I", "Do not imprint the geometry; implies skip-merge",
&Gopt.imprint_geom, po.store_false );
po.addOpt<void>("skip-graveyard,G", "Do not bound the geometry with a `graveyard' bounding box",
&Gopt.make_graveyard, po.store_false );
po.addOpt<void>("uwuw-names,U", "Use a UWUW compatible name scheme for material groups,"
"i.e. 'mat:mX/rho:Y' where X is material number is Y is density",
&Gopt.uwuw_names, po.store_true );
//#ifdef USING_CGMA
po.addOptionHelpHeading ("Options controlling CGM library:");
po.addOpt<int>("geomver","Override geometry export engine version");
po.addOptionHelpHeading (" (use --geomver 1600 for backward compatibility w/ Cubit 10.2)");
po.addOpt<void>("Cv", "Verbose messages from CGM" );
po.addOpt<void>("Cq", "Silence warning messages from CGM" );
po.addOpt<void>("CIq","Silence ERROR messages from CGM when doing intersect tests.");
po.addOptionHelpHeading( " (May be useful for infinite lattices, but use cautiously)" );
//#endif
po.addRequiredArg( "input_file", "Path to MCNP geometry input file", &Gopt.input_file );
po.parseCommandLine( argc, argv );
if( po.numOptSet( "tol,t" ) ){
Gopt.override_tolerance = true;
if( Gopt.specific_tolerance <= 0.0 || Gopt.specific_tolerance > .1 ){
std::cerr << "Warning: you seem to have specified an unusual tolerance ("
<< Gopt.specific_tolerance << ")." << std::endl;
}
}
//#ifdef USING_CGMA
// Enable the info_flag only if --Cv is requested
if(po.numOptSet( "Cv" )){
CubitMessage::instance()->set_info_flag( true );
}
else{
CubitMessage::instance()->set_info_flag( false );
}
// Silence warnings if --Cq is set
if(po.numOptSet( "Cq" )){
CubitMessage::instance()->set_warning_flag( false );
}
// Enable silent intersection errors if --CIq is set
if(po.numOptSet( "CIq" )){
CGMA_opt_inhibit_intersect_errs = true;
}
//#endif
if( Gopt.merge_geom && !Gopt.imprint_geom ) {
std::cerr << "Warning: cannot merge geometry without imprinting, will skip merge too." << std::endl;
}
std::ifstream input(Gopt.input_file.c_str(), std::ios::in );
if( !input.is_open() ){
std::cerr << "Error: couldn't open file \"" << Gopt.input_file << "\"" << std::endl;
return 1;
}
std::cout << "Reading input file..." << std::endl;
// if --Di and not -D, set debugging to be true for InputDeck::build() call only
if( DiFlag && !OPT_DEBUG){
Gopt.debug = true;
}
else{ DiFlag = false; }
InputDeck& deck = InputDeck::build(input);
std::cout << "Done reading input." << std::endl;
// turn off debug if it was set by --Di only
if( DiFlag ){ Gopt.debug = false; }
if( DoFlag && !OPT_DEBUG ){ Gopt.debug = true; }
if( OPT_DEBUG ){
debugSurfaceDistances( deck );
}
#ifdef CGM_HAVE_FACET_ENGINE_ONLY
FacetModifyEngine::set_modify_enabled(CUBIT_TRUE);
#endif
iGeom_Instance igm;
int igm_result;
iGeom_newGeom( Gopt.igeom_init_options.c_str(), &igm, &igm_result, Gopt.igeom_init_options.length() );
CHECK_IGEOM( igm_result, "Initializing iGeom");
//#ifdef USING_CGMA
int export_vers;
if( po.getOpt( "geomver", &export_vers) ){
if( CUBIT_SUCCESS == GeometryQueryTool::instance()->set_export_allint_version( export_vers ) ){
std::cout << "Set export engine version to " << export_vers << std::endl;
}
// on failure, an error message will be printed by CGM
}
//#endif
GeometryContext context( igm, deck );
context.createGeometry();
//#ifdef USING_CGMA
if( CGMA_opt_inhibit_intersect_errs && SilentCubitMessageHandler::num_dropped_errors > 0){
std::cout << "--CIq: supressed " << SilentCubitMessageHandler::num_dropped_errors << " intersection errors." << std::endl;
}
//#endif
return 0;
}
| static std::vector<int_triple> makeGridShellOfRadius | ( | int | r, |
| int | dimensions | ||
| ) | [static] |
Definition at line 601 of file mcnp2cad.cpp.
{
if( r == 0 ){
int_triple v; v.v[0] = v.v[1] = v.v[2] = 0;
return std::vector<int_triple>(1,v);
}
else{
std::vector<int_triple> ret;
int jmin = dimensions > 1 ? -r : 0;
int jmax = dimensions > 1 ? r : 0;
int kmin = dimensions > 2 ? -r : 0;
int kmax = dimensions > 2 ? r : 0;
for( int i = -r; i <= r; ++i ){
for( int j = jmin;j <= jmax; ++j ){
for( int k = kmin; k <= kmax; ++k ){
if( i == -r || i == r ||
j == -r || j == r ||
k == -r || k == r ){
int_triple v;
v.v[0] = i;
v.v[1] = j;
v.v[2] = k;
ret.push_back(v);
}
}
}
}
return ret;
}
}
| std::string mcnp2cad_version | ( | bool | full | ) |
Return the version string
Return only numbers ("1.2.3") if full is false, else dated format
Definition at line 1290 of file mcnp2cad.cpp.
{
std::stringstream str;
str << (full ? "mcnp2cad version " : "")
<< MCNP2CAD_VERSION_MAJOR << "."
<< MCNP2CAD_VERSION_MINOR << "."
<< MCNP2CAD_VERSION_REV;
if(full)
str << "\nCompiled on " << __DATE__ << " at " << __TIME__ ;
return str.str();
}
bool CGMA_opt_inhibit_intersect_errs = false [static] |
Definition at line 36 of file mcnp2cad.cpp.
| struct program_option_struct Gopt |
Definition at line 1129 of file mcnp2cad.cpp.