diff --git a/src/material.cpp b/src/material.cpp index ca29ce7404..30dfa5ed50 100644 --- a/src/material.cpp +++ b/src/material.cpp @@ -349,24 +349,26 @@ Material::~Material() void Material::finalize() { // Set fissionable if any nuclide is fissionable - for (const auto& i_nuc : nuclide_) { - if (data::nuclides[i_nuc]->fissionable_) { - fissionable_ = true; - break; + if (settings::run_CE) { + for (const auto& i_nuc : nuclide_) { + if (data::nuclides[i_nuc]->fissionable_) { + fissionable_ = true; + break; + } } + + // Generate material bremsstrahlung data for electrons and positrons + if (settings::photon_transport && + settings::electron_treatment == ElectronTreatment::TTB) { + this->init_bremsstrahlung(); + } + + // Assign thermal scattering tables + this->init_thermal(); } - // Generate material bremsstrahlung data for electrons and positrons - if (settings::photon_transport && - settings::electron_treatment == ElectronTreatment::TTB) { - this->init_bremsstrahlung(); - } - - // Assign thermal scattering tables - this->init_thermal(); - - // Normalize density - this->normalize_density(); +// Normalize density +this->normalize_density(); } void Material::normalize_density() diff --git a/src/mgxs_interface.cpp b/src/mgxs_interface.cpp index 1a6dab5c6a..77085d57c8 100644 --- a/src/mgxs_interface.cpp +++ b/src/mgxs_interface.cpp @@ -123,10 +123,14 @@ void MgxsInterface::create_macro_xs() // Therefore type(nuclides[mat->nuclide_[0]]) dictates type(macroxs). // At the same time, we will find the scattering type, as that will dictate // how we allocate the scatter object within macroxs. + for (int i = 0; i < model::materials.size(); ++i) { + // First we have to normalize the densities as it has not been called yet + // for MG mode + auto& mat {model::materials[i]}; + mat->finalize(); if (kTs[i].size() > 0) { // Convert atom_densities to a vector - auto& mat {model::materials[i]}; vector atom_densities( mat->atom_density_.begin(), mat->atom_density_.end()); diff --git a/src/volume_calc.cpp b/src/volume_calc.cpp index ae738d6bb1..3ae98fdc38 100644 --- a/src/volume_calc.cpp +++ b/src/volume_calc.cpp @@ -8,6 +8,7 @@ #include "openmc/hdf5_interface.h" #include "openmc/material.h" #include "openmc/message_passing.h" +#include "openmc/mgxs_interface.h" #include "openmc/nuclide.h" #include "openmc/output.h" #include "openmc/random_lcg.h" @@ -237,7 +238,8 @@ vector VolumeCalculation::execute() const // Create 2D array to store atoms/uncertainty for each nuclide. Later this // is compressed into vectors storing only those nuclides that are // non-zero - auto n_nuc = data::nuclides.size(); + auto n_nuc = settings::run_CE ? data::nuclides.size() + : data::mg.nuclides_.size(); xt::xtensor atoms({n_nuc, 2}, 0.0); #ifdef OPENMC_MPI @@ -442,7 +444,8 @@ void VolumeCalculation::to_hdf5( vector nucnames; for (int i_nuc : result.nuclides) { - nucnames.push_back(data::nuclides[i_nuc]->name_); + nucnames.push_back(settings::run_CE ? data::nuclides[i_nuc]->name_ + : data::mg.nuclides_[i_nuc].name); } // Create array of total # of atoms with uncertainty for each nuclide diff --git a/tests/regression_tests/volume_calc/test.py b/tests/regression_tests/volume_calc/test.py index fc96e4a551..ddca3ceaa7 100644 --- a/tests/regression_tests/volume_calc/test.py +++ b/tests/regression_tests/volume_calc/test.py @@ -100,6 +100,8 @@ class VolumeTest(PyAPITestHarness): for iso in ['H1', 'O16', 'B10', 'Mo99', 'U235']: mat = openmc.XSdata(iso, groups) mat.order = 0 + mat.atomic_weight_ratio = \ + openmc.data.atomic_mass(iso) / openmc.data.NEUTRON_MASS mat.set_scatter_matrix(scatter) if iso == 'U235': mat.set_nu_fission(np.multiply(nu, fiss))