Put variables in settings.h into settings namespace

This commit is contained in:
Paul Romano 2018-08-24 09:38:13 -05:00
parent d38b3f7714
commit 4ad0725843
7 changed files with 59 additions and 51 deletions

View file

@ -15,21 +15,23 @@ namespace openmc {
// Global variable declarations
//==============================================================================
namespace settings {
// Defined on Fortran side
extern "C" bool openmc_check_overlaps;
extern "C" bool openmc_particle_restart_run;
extern "C" bool openmc_photon_transport;
extern "C" bool openmc_restart_run;
extern "C" bool openmc_run_CE;
extern "C" bool openmc_write_all_tracks;
extern "C" bool openmc_write_initial_source;
extern "C" bool check_overlaps;
extern "C" bool particle_restart_run;
extern "C" bool photon_transport;
extern "C" bool restart_run;
extern "C" bool run_CE;
extern "C" bool write_all_tracks;
extern "C" bool write_initial_source;
// Defined in .cpp
// TODO: Make strings instead of char* once Fortran is gone
extern "C" char* openmc_path_input;
extern "C" char* openmc_path_statepoint;
extern "C" char* openmc_path_sourcepoint;
extern "C" char* openmc_path_particle_restart;
extern "C" char* path_input;
extern "C" char* path_statepoint;
extern "C" char* path_sourcepoint;
extern "C" char* path_particle_restart;
extern std::string path_cross_sections;
extern std::string path_multipole;
extern std::string path_output;
@ -41,6 +43,8 @@ extern double temperature_tolerance;
extern double temperature_default;
extern std::array<double, 2> temperature_range;
} // namespace settings
//==============================================================================
//! Read settings from XML file
//! \param[in] root XML node for <settings>

View file

@ -109,7 +109,7 @@ parse_command_line(int argc, char* argv[])
if (arg[0] == '-') {
if (arg == "-p" || arg == "--plot") {
openmc_run_mode = RUN_MODE_PLOTTING;
openmc_check_overlaps = true;
settings::check_overlaps = true;
} else if (arg == "-n" || arg == "--particles") {
i += 1;
@ -127,11 +127,11 @@ parse_command_line(int argc, char* argv[])
// Set path and flag for type of run
if (filetype == "statepoint") {
openmc_path_statepoint = argv[i];
openmc_restart_run = true;
settings::path_statepoint = argv[i];
settings::restart_run = true;
} else if (filetype == "particle restart") {
openmc_path_particle_restart = argv[i];
openmc_particle_restart_run = true;
settings::path_particle_restart = argv[i];
settings::particle_restart_run = true;
} else {
std::stringstream msg;
msg << "Unrecognized file after restart flag: " << filetype << ".";
@ -140,7 +140,7 @@ parse_command_line(int argc, char* argv[])
}
// If its a restart run check for additional source file
if (openmc_restart_run && i + 1 < argc) {
if (settings::restart_run && i + 1 < argc) {
// Check if it has extension we can read
if (ends_with(argv[i+1], ".h5")) {
@ -156,21 +156,21 @@ parse_command_line(int argc, char* argv[])
}
// It is a source file
openmc_path_sourcepoint = argv[i+1];
settings::path_sourcepoint = argv[i+1];
i += 1;
} else {
// Source is in statepoint file
openmc_path_sourcepoint = openmc_path_statepoint;
settings::path_sourcepoint = settings::path_statepoint;
}
} else {
// Source is assumed to be in statepoint file
openmc_path_sourcepoint = openmc_path_statepoint;
settings::path_sourcepoint = settings::path_statepoint;
}
} else if (arg == "-g" || arg == "--geometry-debug") {
openmc_check_overlaps = true;
settings::check_overlaps = true;
} else if (arg == "-c" || arg == "--volume") {
openmc_run_mode = RUN_MODE_VOLUME;
} else if (arg == "-s" || arg == "--threads") {
@ -200,7 +200,7 @@ parse_command_line(int argc, char* argv[])
return OPENMC_E_UNASSIGNED;
} else if (arg == "-t" || arg == "--track") {
openmc_write_all_tracks = true;
settings::write_all_tracks = true;
} else {
std::cerr << "Unknown option: " << argv[i] << '\n';
@ -213,7 +213,7 @@ parse_command_line(int argc, char* argv[])
}
// Determine directory where XML input files are
if (argc > 1 && last_flag < argc) openmc_path_input = argv[last_flag + 1];
if (argc > 1 && last_flag < argc) settings::path_input = argv[last_flag + 1];
return 0;
}

View file

@ -148,7 +148,8 @@ Particle::write_restart()
// Set up file name
std::stringstream filename;
filename << path_output << "particle_" << openmc_current_batch << '_' << id << ".h5";
filename << settings::path_output << "particle_" << openmc_current_batch
<< '_' << id << ".h5";
#pragma omp critical (WriteParticleRestart)
{

View file

@ -9,7 +9,7 @@ module settings
! ============================================================================
! ENERGY TREATMENT RELATED VARIABLES
logical(C_BOOL), bind(C, name='openmc_run_CE') :: run_CE = .true. ! Run in CE mode?
logical(C_BOOL), bind(C, name='run_CE') :: run_CE = .true. ! Run in CE mode?
! ============================================================================
! CONTINUOUS-ENERGY CROSS SECTION RELATED VARIABLES
@ -26,7 +26,7 @@ module settings
integer :: n_log_bins ! number of bins for logarithmic grid
logical(C_BOOL), bind(C, name='openmc_photon_transport') :: photon_transport = .false.
logical(C_BOOL), bind(C) :: photon_transport = .false.
integer :: electron_treatment = ELECTRON_TTB
! ============================================================================
@ -81,13 +81,13 @@ module settings
integer(C_INT), bind(C, name='openmc_run_mode') :: run_mode = NONE
! Restart run
logical(C_BOOL), bind(C, name='openmc_restart_run') :: restart_run = .false.
logical(C_BOOL), bind(C) :: restart_run = .false.
! The verbosity controls how much information will be printed to the screen
! and in logs
integer(C_INT), bind(C, name='openmc_verbosity') :: verbosity = 7
logical(C_BOOL), bind(C, name='openmc_check_overlaps') :: check_overlaps = .false.
logical(C_BOOL), bind(C) :: check_overlaps = .false.
! Trace for single particle
integer :: trace_batch
@ -95,17 +95,14 @@ module settings
integer(8) :: trace_particle
! Particle tracks
logical(C_BOOL), bind(C, name='openmc_write_all_tracks') :: &
write_all_tracks = .false.
logical(C_BOOL), bind(C) :: write_all_tracks = .false.
integer, allocatable :: track_identifiers(:,:)
! Particle restart run
logical(C_BOOL), bind(C, name='openmc_particle_restart_run') :: &
particle_restart_run = .false.
logical(C_BOOL), bind(C) :: particle_restart_run = .false.
! Write out initial source
logical(C_BOOL), bind(C, name='openmc_write_initial_source') :: &
write_initial_source = .false.
logical(C_BOOL), bind(C) :: write_initial_source = .false.
! Whether create fission neutrons or not. Only applied for MODE_FIXEDSOURCE
logical :: create_fission_neutrons = .true.

View file

@ -16,10 +16,12 @@ namespace openmc {
// Global variables
//==============================================================================
char* openmc_path_input;
char* openmc_path_statepoint;
char* openmc_path_sourcepoint;
char* openmc_path_particle_restart;
namespace settings {
char* path_input;
char* path_statepoint;
char* path_sourcepoint;
char* path_particle_restart;
std::string path_cross_sections;
std::string path_multipole;
std::string path_output;
@ -31,12 +33,16 @@ double temperature_tolerance {10.0};
double temperature_default {293.6};
std::array<double, 2> temperature_range {0.0, 0.0};
} // namespace settings
//==============================================================================
// Functions
//==============================================================================
void read_settings(pugi::xml_node* root)
{
using namespace settings;
// Look for deprecated cross_sections.xml file in settings.xml
if (check_for_node(*root, "cross_sections")) {
warning("Setting cross_sections in settings.xml has been deprecated."

View file

@ -45,7 +45,7 @@ SourceDistribution::SourceDistribution(pugi::xml_node node)
particle_ = ParticleType::neutron;
} else if (temp_str == "photon") {
particle_ = ParticleType::photon;
openmc_photon_transport = true;
settings::photon_transport = true;
} else {
fatal_error(std::string("Unknown source particle type: ") + temp_str);
}
@ -59,12 +59,12 @@ SourceDistribution::SourceDistribution(pugi::xml_node node)
// Check for external source file
if (check_for_node(node, "file")) {
// Copy path of source file
path_source = get_node_value(node, "file", false, true);
settings::path_source = get_node_value(node, "file", false, true);
// Check if source file exists
if (!file_exists(path_source)) {
if (!file_exists(settings::path_source)) {
std::stringstream msg;
msg << "Source file '" << path_source << "' does not exist.";
msg << "Source file '" << settings::path_source << "' does not exist.";
fatal_error(msg);
}
@ -243,16 +243,16 @@ void initialize_source()
int64_t n;
openmc_source_bank(&source_bank, &n);
if (path_source != "") {
if (settings::path_source != "") {
// Read the source from a binary file instead of sampling from some
// assumed source distribution
std::stringstream msg;
msg << "Reading source file from " << path_source << "...";
msg << "Reading source file from " << settings::path_source << "...";
write_message(msg, 6);
// Open the binary file
hid_t file_id = file_open(path_source, 'r', true);
hid_t file_id = file_open(settings::path_source, 'r', true);
// Read the file type
std::string filetype;
@ -282,9 +282,9 @@ void initialize_source()
}
// Write out initial source
if (openmc_write_initial_source) {
if (settings::write_initial_source) {
write_message("Writing out initial source...", 5);
std::string filename = path_output + "initial_source.h5";
std::string filename = settings::path_output + "initial_source.h5";
hid_t file_id = file_open(filename, 'w', true);
write_source_bank(file_id, work_index.data(), source_bank);
file_close(file_id);
@ -318,7 +318,7 @@ Bank sample_external_source()
Bank site {external_sources[i].sample()};
// If running in MG, convert site % E to group
if (!openmc_run_CE) {
if (!settings::run_CE) {
// Get pointer to rev_energy_bins array on Fortran side
double* rev_energy_bins = rev_energy_bins_ptr();
@ -357,7 +357,7 @@ extern "C" int overall_generation();
//! Fill source bank at end of generation for fixed source simulations
extern "C" void fill_source_bank_fixedsource()
{
if (path_source.empty()) {
if (settings::path_source.empty()) {
// Get pointer to source bank
Bank* source_bank;
int64_t n;

View file

@ -153,10 +153,10 @@ ThermalScattering::calculate_xs(double E, double sqrtkT, int* i_temp,
// Determine temperature for S(a,b) table
double kT = sqrtkT*sqrtkT;
int i;
if (temperature_method == TEMPERATURE_NEAREST) {
if (settings::temperature_method == TEMPERATURE_NEAREST) {
// If using nearest temperature, do linear search on temperature
for (i = 0; i < kTs_.size(); ++i) {
if (abs(kTs_[i] - kT) < K_BOLTZMANN*temperature_tolerance) {
if (abs(kTs_[i] - kT) < K_BOLTZMANN*settings::temperature_tolerance) {
break;
}
}