|
cgma
|
#include <MCNPInput.hpp>
Main interface to MCNP reader: the InputDeck
Definition at line 134 of file MCNPInput.hpp.
| typedef std::vector< CellCard* > InputDeck::cell_card_list |
Definition at line 137 of file MCNPInput.hpp.
| typedef std::vector< DataCard* > InputDeck::data_card_list |
Definition at line 139 of file MCNPInput.hpp.
| typedef std::vector< SurfaceCard* > InputDeck::surface_card_list |
Definition at line 138 of file MCNPInput.hpp.
Definition at line 1163 of file MCNPInput.cpp.
{
for(cell_card_list::iterator i = cells.begin(); i!=cells.end(); ++i){
delete *i;
}
cells.clear();
for(surface_card_list::iterator i = surfaces.begin(); i!=surfaces.end(); ++i){
delete *i;
}
surfaces.clear();
for(data_card_list::iterator i = datacards.begin(); i!=datacards.end(); ++i){
delete *i;
}
datacards.clear();
}
| InputDeck & InputDeck::build | ( | std::istream & | input | ) | [static] |
Definition at line 1354 of file MCNPInput.cpp.
{
LineExtractor lines(input);
InputDeck* deck = new InputDeck();
deck->parseTitle(lines);
deck->parseCells(lines);
deck->parseSurfaces(lines);
deck->parseDataCards(lines);
for( std::vector<CellCard*>::iterator i = deck->cells.begin(); i!=deck->cells.end(); ++i){
dynamic_cast<CellCardImpl*>(*i)->finish();
}
while(lines.hasLine()){ lines.takeLine(); }
if( OPT_VERBOSE ) { std::cout << "Total lines read: " << lines.getLineCount() << std::endl; }
return *deck;
}
| bool InputDeck::do_line_continuation | ( | LineExtractor & | lines, |
| token_list_t & | token_buffer | ||
| ) | [protected] |
Definition at line 1181 of file MCNPInput.cpp.
{
/* check for final character being & */
std::string last_token = token_buffer.at(token_buffer.size()-1);
if( last_token.at(last_token.length()-1) == '&' ){
if( last_token.length() == 1 ){
token_buffer.pop_back();
}
else{
last_token.resize(last_token.length()-1);
token_buffer.at(token_buffer.size()-1).swap( last_token );
}
return true;
}
/* check for next line beginning with five spaces */
else if( lines.hasLine() && lines.peekLine().find(" ") == 0){
/* but don't count it as a continuation if the line is entirely blank */
if( lines.peekLine().find_first_not_of(" \t\n") != std::string::npos ){
return true;
}
}
return false;
}
| cell_card_list& InputDeck::getCells | ( | ) | [inline] |
Definition at line 162 of file MCNPInput.hpp.
{ return cells; }
| InputDeck::cell_card_list InputDeck::getCellsOfUniverse | ( | int | universe | ) |
Definition at line 1376 of file MCNPInput.cpp.
{
cell_card_list ret;
for( cell_card_list::iterator i = cells.begin(); i!=cells.end(); ++i){
CellCard* c = *i;
if( std::abs(c->getUniverse()) == universe ){
ret.push_back( *i );
}
}
return ret;
}
| data_card_list& InputDeck::getDataCards | ( | ) | [inline] |
Definition at line 164 of file MCNPInput.hpp.
{ return datacards; }
| surface_card_list& InputDeck::getSurfaces | ( | ) | [inline] |
Definition at line 163 of file MCNPInput.hpp.
{ return surfaces; }
| CellCard * InputDeck::lookup_cell_card | ( | int | ident | ) |
Definition at line 1390 of file MCNPInput.cpp.
| DataCard * InputDeck::lookup_data_card | ( | const DataCard::id_t & | ident | ) |
Definition at line 1400 of file MCNPInput.cpp.
{
assert( datacard_map.find(ident) != datacard_map.end() );
return (*datacard_map.find(ident)).second;
}
| DataCard* InputDeck::lookup_data_card | ( | DataCard::kind | k, |
| int | ident | ||
| ) | [inline] |
Definition at line 172 of file MCNPInput.hpp.
{
return lookup_data_card( std::make_pair( k, ident ) );
}
| SurfaceCard * InputDeck::lookup_surface_card | ( | int | ident | ) |
Definition at line 1395 of file MCNPInput.cpp.
{
assert( surface_map.find(ident) != surface_map.end() );
return (*surface_map.find(ident)).second;
}
| void InputDeck::parseCells | ( | LineExtractor & | lines | ) | [protected] |
Definition at line 1208 of file MCNPInput.cpp.
{
std::string line;
token_list_t token_buffer;
while( !isblank(line = lines.takeLine()) ){
tokenizeLine(line, token_buffer, "=");
if( do_line_continuation( lines, token_buffer ) ){
continue;
}
if( OPT_DEBUG ) std::cout << "Creating cell with the following tokens:\n" << token_buffer << std::endl;
CellCard* c = new CellCardImpl(*this, token_buffer);
if( OPT_VERBOSE ) c->print(std::cout);
this->cells.push_back(c);
this->cell_map.insert( std::make_pair(c->getIdent(), c) );
token_buffer.clear();
}
}
| void InputDeck::parseDataCards | ( | LineExtractor & | lines | ) | [protected] |
Definition at line 1289 of file MCNPInput.cpp.
{
std::string line;
token_list_t token_buffer;
while( lines.hasLine() && !isblank(line = lines.takeLine()) ){
tokenizeLine(line, token_buffer );
if( do_line_continuation( lines, token_buffer ) ){
continue;
}
else if( token_buffer.at(0) == "#" ){
std::cerr << "Vertical data card format not supported" << std::endl;
std::cerr << "Data written in this format will be ignored." << std::endl;
}
DataCard* d = NULL;
DataCard::kind t = DataCard::OTHER;
int ident = 0;
std::string cardname = token_buffer.at(0);
token_buffer.erase( token_buffer.begin() );
if( cardname.find("tr") == 0 || cardname.find("*tr") == 0 ){
t = DataCard::TR;
bool degree_format = false;
if( cardname[0] == '*' ){
degree_format = true;
cardname = cardname.substr( 1 ); // remove leading *
}
else if( cardname.find("*") == cardname.length()-1 ){
// although it's undocumented, apparently TRn* is a synonym for *TRn
// (the manual uses this undocumented form in chapter 4)
degree_format = true;
cardname.resize( cardname.length() -1 ); // remove trailing *
}
std::string id_string( cardname, 2 );
// the id_string may be empty, indicating that n is missing from TRn.
// examples from the manual indicate it should be assumed to be 1
if( id_string == "" ){
ident = 1;
}
else{
ident = makeint( id_string );
}
d = new TransformCard( *this, ident, degree_format, token_buffer);
}
if(d){
if( OPT_VERBOSE ){ d->print( std::cout ); }
this->datacards.push_back(d);
this->datacard_map.insert( std::make_pair( std::make_pair(t,ident), d) );
}
token_buffer.clear();
}
}
| void InputDeck::parseSurfaces | ( | LineExtractor & | lines | ) | [protected] |
Definition at line 1265 of file MCNPInput.cpp.
{
std::string line;
token_list_t token_buffer;
while( !isblank(line = lines.takeLine()) ){
tokenizeLine(line, token_buffer );
if( do_line_continuation( lines, token_buffer ) ){
continue;
}
SurfaceCard* s = new SurfaceCard(*this, token_buffer);
if( OPT_VERBOSE) s->print(std::cout);
this->surfaces.push_back(s);
this->surface_map.insert( std::make_pair(s->getIdent(), s) );
token_buffer.clear();
}
}
| void InputDeck::parseTitle | ( | LineExtractor & | lines | ) | [protected] |
Definition at line 1238 of file MCNPInput.cpp.
{
// FIXME: will break if the title line looks like a comment card.
int lineno;
std::string topLine = lines.takeLine(lineno);
if(topLine.find("message:") == 0){
if( OPT_VERBOSE ) std::cout << "Skipping MCNP file message block..." << std::endl;
do{
// nothing
}
while( !isblank(lines.takeLine()) ) /*do nothing */;
topLine = lines.takeLine(lineno);
}
if(topLine.find("continue") == 0){
std::cerr << "Warning: this looks like it might be a `continue-run' input file." << std::endl;
std::cerr << " beware of trouble ahead!" << std::endl;
}
std::cout << "The MCNP title card is: " << topLine << std::endl;
//std::cout << " and occupies line " << lineno << std::endl;
}
std::map<int, CellCard*> InputDeck::cell_map [protected] |
Definition at line 148 of file MCNPInput.hpp.
cell_card_list InputDeck::cells [protected] |
Definition at line 142 of file MCNPInput.hpp.
std::map< DataCard::id_t, DataCard*> InputDeck::datacard_map [protected] |
Definition at line 150 of file MCNPInput.hpp.
data_card_list InputDeck::datacards [protected] |
Definition at line 146 of file MCNPInput.hpp.
std::map<int, SurfaceCard*> InputDeck::surface_map [protected] |
Definition at line 149 of file MCNPInput.hpp.
surface_card_list InputDeck::surfaces [protected] |
Definition at line 145 of file MCNPInput.hpp.