From 5135353db57129f1d4860b3fd161c62fe06aed2e Mon Sep 17 00:00:00 2001 From: Patrick Shriwise Date: Sat, 16 Mar 2019 08:03:33 -0500 Subject: [PATCH 1/5] Allowing dagmc materials to be set by name. --- src/dagmc.cpp | 37 ++++++++++++++++++++++++++++++++----- 1 file changed, 32 insertions(+), 5 deletions(-) diff --git a/src/dagmc.cpp b/src/dagmc.cpp index 34027ce7c9..a37cf630d8 100644 --- a/src/dagmc.cpp +++ b/src/dagmc.cpp @@ -4,10 +4,11 @@ #include "openmc/constants.h" #include "openmc/error.h" #include "openmc/file_utils.h" +#include "openmc/geometry.h" #include "openmc/geometry_aux.h" +#include "openmc/material.h" #include "openmc/string_utils.h" #include "openmc/settings.h" -#include "openmc/geometry.h" #ifdef DAGMC @@ -88,6 +89,34 @@ bool write_uwuw_materials_xml() { return found_uwuw_mats; } +void legacy_assign_material(const std::string& mat_string, + DAGCell* c) +{ + bool mat_found = false; + // attempt to find a material with a matching name + for (const auto& m : model::materials) { + if (mat_string == m->name_) { + // assign the material with that name + if (!mat_found) { + mat_found = true; + c->material_.push_back(m->id_); + // report error if more than one material is found + } else { + std::stringstream err_msg; + err_msg << "More than one material found with name " << mat_string + << ". Please ensure materials have unique names if using this" + << " property to assign materials."; + fatal_error(err_msg); + } + } + } + + // if no material was set using a name, assign by id + if (!mat_found) { + c->material_.emplace_back(std::stoi(mat_string)); + } +} + void load_dagmc_geometry() { if (!model::DAG) { @@ -187,7 +216,7 @@ void load_dagmc_geometry() size_t _comp_pos = mat_value.find(_comp); if (_comp_pos != std::string::npos) { mat_value.erase(_comp_pos, _comp.length()); } // assign IC material by id - c->material_.push_back(std::stoi(mat_value)); + legacy_assign_material(mat_value, c); } } else { // if no material is found, the implicit complement is void @@ -234,9 +263,7 @@ void load_dagmc_geometry() fatal_error(err_msg); } } else { - // if not using UWUW materials, we'll find this material - // later in the materials.xml - c->material_.push_back(std::stoi(mat_value)); + legacy_assign_material(mat_value, c); } } } From 1f55d331b87042bd579e7c8271c63c19340ad420 Mon Sep 17 00:00:00 2001 From: Patrick Shriwise Date: Sat, 16 Mar 2019 08:08:23 -0500 Subject: [PATCH 2/5] Setting fuel material by name in the dagmc test. --- tests/regression_tests/dagmc/dagmc.h5m | Bin 1233372 -> 1233372 bytes tests/regression_tests/dagmc/inputs_true.dat | 4 ++-- tests/regression_tests/dagmc/test.py | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/tests/regression_tests/dagmc/dagmc.h5m b/tests/regression_tests/dagmc/dagmc.h5m index a55e061dcac9f0bf284ecd0741d62c1bafb6a77c..c90b6d674d9b016aba5b8614d952d90205c355f2 100644 GIT binary patch delta 487 zcmcb!*!#|6?+tHcm_L8%nfzYnk-V|Kp_#s+B@+V#a6oAT3o8RND^ttKA7n)s4L7sO zxeI`_Z1&fS+2S6o>{>Rme@SM7OHf8-B&iS^!(Z*le61A!EF1&g_|SVuRxUQ_rgr=iv=s) zJbwyI^Hf)eX89$rCqJ5_1lFv-^zh_Ub0K!#cbvF+#k>-TLGnwW+Vq#gOkDO9qW?b7 z`xn+iybrXz`Nq2T8|xT>m0@ByXf|V5V$dJv{l;T!@|b9Vc#HF|Pz-ko*#;HvOeA6PG=O=)Vv2 z{)M#=?*lDwzOk - + - + diff --git a/tests/regression_tests/dagmc/test.py b/tests/regression_tests/dagmc/test.py index 6c9be63bf6..b6f2f55e2e 100644 --- a/tests/regression_tests/dagmc/test.py +++ b/tests/regression_tests/dagmc/test.py @@ -30,12 +30,12 @@ def test_dagmc(): model.tallies = [tally] # materials - u235 = openmc.Material() + u235 = openmc.Material(name="fuel") u235.add_nuclide('U235', 1.0, 'ao') u235.set_density('g/cc', 11) u235.id = 40 - water = openmc.Material() + water = openmc.Material(name="water") water.add_nuclide('H1', 2.0, 'ao') water.add_nuclide('O16', 1.0, 'ao') water.set_density('g/cc', 1.0) From 163304773e873abee122838be8c67179c7682d2d Mon Sep 17 00:00:00 2001 From: Patrick Shriwise Date: Sat, 16 Mar 2019 10:14:07 -0500 Subject: [PATCH 3/5] Adding messages for verbose output. --- src/dagmc.cpp | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/src/dagmc.cpp b/src/dagmc.cpp index a37cf630d8..435cb42184 100644 --- a/src/dagmc.cpp +++ b/src/dagmc.cpp @@ -92,13 +92,13 @@ bool write_uwuw_materials_xml() { void legacy_assign_material(const std::string& mat_string, DAGCell* c) { - bool mat_found = false; + bool mat_found_by_name = false; // attempt to find a material with a matching name for (const auto& m : model::materials) { if (mat_string == m->name_) { // assign the material with that name - if (!mat_found) { - mat_found = true; + if (!mat_found_by_name) { + mat_found_by_name = true; c->material_.push_back(m->id_); // report error if more than one material is found } else { @@ -112,9 +112,21 @@ void legacy_assign_material(const std::string& mat_string, } // if no material was set using a name, assign by id - if (!mat_found) { + if (!mat_found_by_name) { c->material_.emplace_back(std::stoi(mat_string)); } + + if (settings::verbosity >= 10) { + Material* m = model::materials[model::material_map[c->material_[0]]].get(); + std::stringstream msg; + msg << "DAGMC material " << mat_string << " was assigned"; + if (mat_found_by_name) { + msg << " using material name: " << m->name_; + } else { + msg << " using material id: " << m->id_; + } + write_message(msg.str(), 10); + } } void load_dagmc_geometry() From f6b251145f18d4e28542e4d6f3f7f4c94a9ab35f Mon Sep 17 00:00:00 2001 From: Patrick Shriwise Date: Sat, 16 Mar 2019 12:48:47 -0500 Subject: [PATCH 4/5] Placing id read in try-catch. --- src/dagmc.cpp | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/dagmc.cpp b/src/dagmc.cpp index 435cb42184..456f9f2795 100644 --- a/src/dagmc.cpp +++ b/src/dagmc.cpp @@ -113,7 +113,15 @@ void legacy_assign_material(const std::string& mat_string, // if no material was set using a name, assign by id if (!mat_found_by_name) { - c->material_.emplace_back(std::stoi(mat_string)); + try { + auto id = std::stoi(mat_string); + c->material_.emplace_back(id); + } catch (...) { + std::stringstream err_msg; + err_msg << "No material " << mat_string + << " found for volume (cell) " << c->id_; + fatal_error(err_msg); + } } if (settings::verbosity >= 10) { From 4048a47fc44a49fbd4f32592beed365021629f2c Mon Sep 17 00:00:00 2001 From: Patrick Shriwise Date: Mon, 18 Mar 2019 09:23:14 -0500 Subject: [PATCH 5/5] Addressing some change requests from @promano. --- src/dagmc.cpp | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/src/dagmc.cpp b/src/dagmc.cpp index 456f9f2795..5e4e237c03 100644 --- a/src/dagmc.cpp +++ b/src/dagmc.cpp @@ -89,8 +89,7 @@ bool write_uwuw_materials_xml() { return found_uwuw_mats; } -void legacy_assign_material(const std::string& mat_string, - DAGCell* c) +void legacy_assign_material(const std::string& mat_string, DAGCell* c) { bool mat_found_by_name = false; // attempt to find a material with a matching name @@ -116,7 +115,7 @@ void legacy_assign_material(const std::string& mat_string, try { auto id = std::stoi(mat_string); c->material_.emplace_back(id); - } catch (...) { + } catch (const std::invalid_argument&) { std::stringstream err_msg; err_msg << "No material " << mat_string << " found for volume (cell) " << c->id_; @@ -128,11 +127,11 @@ void legacy_assign_material(const std::string& mat_string, Material* m = model::materials[model::material_map[c->material_[0]]].get(); std::stringstream msg; msg << "DAGMC material " << mat_string << " was assigned"; - if (mat_found_by_name) { - msg << " using material name: " << m->name_; - } else { - msg << " using material id: " << m->id_; - } + if (mat_found_by_name) { + msg << " using material name: " << m->name_; + } else { + msg << " using material id: " << m->id_; + } write_message(msg.str(), 10); } }