diff --git a/include/openmc/dagmc.h b/include/openmc/dagmc.h
index 91755ed146..f0c6d47186 100644
--- a/include/openmc/dagmc.h
+++ b/include/openmc/dagmc.h
@@ -27,6 +27,7 @@ void load_dagmc_geometry();
int32_t create_dagmc_universe(const std::string& filename);
void read_geometry_dagmc();
void read_dagmc_universes(pugi::xml_node node);
+void read_dagmc_uwuw_materials();
bool read_uwuw_materials(pugi::xml_document& doc);
bool get_uwuw_materials_xml(std::string& s);
diff --git a/src/dagmc.cpp b/src/dagmc.cpp
index 97398374c0..c162096c23 100644
--- a/src/dagmc.cpp
+++ b/src/dagmc.cpp
@@ -128,6 +128,50 @@ bool read_uwuw_materials(pugi::xml_document& doc) {
return found_uwuw_mats;
}
+void read_dagmc_uwuw_materials() {
+ std::string filename = settings::path_input + "geometry.xml";
+ if (!file_exists(filename)) {
+ fatal_error(fmt::format("Geometry XML file '{}' does not exist!", filename));
+ }
+
+ pugi::xml_document doc;
+ auto result = doc.load_file(filename.c_str());
+ if (!result) {
+ fatal_error("Error processing geometry.xml file.");
+ }
+ pugi::xml_node root = doc.document_element();
+ // Loop over DAGMC elements
+ for (pugi::xml_node dagmc_node : root.children("dagmc")) {
+ if (!check_for_node(dagmc_node, "filename")) {
+ fatal_error("No filename specified on a DAGMC universe element");
+ }
+ std::string dagmc_filename = get_node_value(dagmc_node, "filename");
+ // Load any existing UWUW materials
+ UWUW uwuw(dagmc_filename.c_str());
+ const auto& mat_lib = uwuw.material_library;
+ if (mat_lib.size() == 0) continue;
+
+ std::stringstream ss;
+ ss << "\n";
+ ss << "\n";
+ for (auto mat : mat_lib) { ss << mat.second.openmc("atom"); }
+ ss << "";
+ std::string mat_xml_string = ss.str();
+
+ // create a pugi XML document from this string
+ pugi::xml_document doc;
+ auto result = doc.load_string(mat_xml_string.c_str());
+ if (!result) {
+ fatal_error("Error processing XML created using DAGMC UWUW materials.");
+ }
+ pugi::xml_node root = doc.document_element();
+ for (pugi::xml_node material_node : root.children("material")) {
+ model::materials.push_back(std::make_unique(material_node));
+ }
+ }
+}
+
+
bool write_uwuw_materials_xml() {
std::string s;
bool found_uwuw_mats = get_uwuw_materials_xml(s);
diff --git a/src/material.cpp b/src/material.cpp
index a1aa6ea5f8..9010e8b01c 100644
--- a/src/material.cpp
+++ b/src/material.cpp
@@ -1237,6 +1237,10 @@ void read_materials_xml()
for (pugi::xml_node material_node : root.children("material")) {
model::materials.push_back(make_unique(material_node));
}
+
+ // Search for materials defined on DAGMC models
+ read_dagmc_uwuw_materials();
+
model::materials.shrink_to_fit();
}
diff --git a/tests/regression_tests/dagmc/uwuw/inputs_true.dat b/tests/regression_tests/dagmc/uwuw/inputs_true.dat
index 87ceb944d8..901547fa29 100644
--- a/tests/regression_tests/dagmc/uwuw/inputs_true.dat
+++ b/tests/regression_tests/dagmc/uwuw/inputs_true.dat
@@ -1,4 +1,11 @@
+
+
+
+
+
+
+
eigenvalue
100
@@ -9,7 +16,6 @@
-4 -4 -4 4 4 4
- true
diff --git a/tests/regression_tests/dagmc/uwuw/test.py b/tests/regression_tests/dagmc/uwuw/test.py
index b4391d8e77..5c9777d481 100644
--- a/tests/regression_tests/dagmc/uwuw/test.py
+++ b/tests/regression_tests/dagmc/uwuw/test.py
@@ -27,13 +27,17 @@ class UWUWTest(PyAPITestHarness):
model.settings.export_to_xml()
+ # geometry
+ dag_univ = openmc.DAGMCUniverse("dagmc.h5m")
+ model.geometry = openmc.Geometry(root=dag_univ)
+
# tally
tally = openmc.Tally()
tally.scores = ['total']
tally.filters = [openmc.CellFilter(1)]
model.tallies = [tally]
- model.tallies.export_to_xml()
+ model.export_to_xml()
def test_uwuw():
harness = UWUWTest('statepoint.5.h5')