diff --git a/src/tests/ascent/t_ascent_conduit_extract.cpp b/src/tests/ascent/t_ascent_conduit_extract.cpp index f89e23cc1..bc712994f 100644 --- a/src/tests/ascent/t_ascent_conduit_extract.cpp +++ b/src/tests/ascent/t_ascent_conduit_extract.cpp @@ -231,125 +231,6 @@ TEST(ascent_conduit_extract, test_pipeline_result) } -//----------------------------------------------------------------------------- -TEST(ascent_conduit_extract, test_material_field_selection) -{ - // Verify the "materials" field selection keeps material fields and matsets. - auto mesh_domain = [](Node &mesh) -> Node * - { - if(mesh.has_path("fields")) - { - return &mesh; - } - - for(index_t i = 0; i < mesh.number_of_children(); ++i) - { - Node &candidate = mesh.child(i); - if(candidate.has_path("fields")) - { - return &candidate; - } - } - - return nullptr; - }; - - Node data; - std::string root_file; - ASSERT_TRUE(stage_axom_klee_fixture("3mat_q12o12", root_file)); - - conduit::relay::io::blueprint::load_mesh(root_file, data); - Node *input_dom = mesh_domain(data); - ASSERT_TRUE(input_dom != nullptr); - ASSERT_TRUE(input_dom->has_path("fields/vol_frac_inner")); - ASSERT_TRUE(input_dom->has_path("fields/vol_frac_middle")); - ASSERT_TRUE(input_dom->has_path("fields/vol_frac_outer")); - (*input_dom)["state/cycle"] = 0; - - const std::string output_path = prepare_output_dir(); - const std::string output_file = - conduit::utils::join_file_path(output_path, - "tout_material_field_selection"); - const std::string output_root_file = output_file + ".cycle_000000.root"; - - if(conduit::utils::is_file(output_root_file)) - { - conduit::utils::remove_file(output_root_file); - } - - conduit::Node actions; - conduit::Node &add_extracts = actions.append(); - add_extracts["action"] = "add_extracts"; - conduit::Node &extracts = add_extracts["extracts"]; - extracts["e1/type"] = "relay"; - extracts["e1/params/path"] = output_file; - extracts["e1/params/protocol"] = "blueprint/mesh/hdf5"; - extracts["e1/params/fields"].append() = "materials"; - - Ascent ascent; - ascent.open(); - ascent.publish(data); - ascent.execute(actions); - ascent.close(); - - Node filtered; - conduit::relay::io::blueprint::load_mesh(output_root_file, filtered); - Node *filtered_dom = mesh_domain(filtered); - ASSERT_TRUE(filtered_dom != nullptr); - - const Node &dom = *filtered_dom; - EXPECT_TRUE(dom.has_path("fields/mesh_material_attribute")); - EXPECT_TRUE(dom.has_path("fields/boundary_material_attribute")); - EXPECT_TRUE(dom.has_path("fields/vol_frac_inner")); - EXPECT_TRUE(dom.has_path("fields/vol_frac_middle")); - EXPECT_TRUE(dom.has_path("fields/vol_frac_outer")); - EXPECT_TRUE(dom.has_path("matsets/material")); - - const Node &material_values = dom["fields/mesh_material_attribute/values"]; - ASSERT_EQ(material_values.dtype().number_of_elements(), 1); - ASSERT_TRUE(material_values.dtype().is_int32() || - material_values.dtype().is_int64()); - if(material_values.dtype().is_int32()) - { - EXPECT_EQ(material_values.as_int32_ptr()[0], 1); - } - else - { - EXPECT_EQ(material_values.as_int64_ptr()[0], 1); - } - - const Node &inner_values = dom["fields/vol_frac_inner/values"]; - ASSERT_TRUE(inner_values.dtype().is_float64() || - inner_values.dtype().is_float32()); - - double inner_min = std::numeric_limits::max(); - double inner_max = -std::numeric_limits::max(); - const index_t num_inner_values = inner_values.dtype().number_of_elements(); - if(inner_values.dtype().is_float64()) - { - const float64 *values = inner_values.as_float64_ptr(); - for(index_t i = 0; i < num_inner_values; ++i) - { - inner_min = std::min(inner_min, values[i]); - inner_max = std::max(inner_max, values[i]); - } - } - else - { - const float32 *values = inner_values.as_float32_ptr(); - for(index_t i = 0; i < num_inner_values; ++i) - { - inner_min = std::min(inner_min, static_cast(values[i])); - inner_max = std::max(inner_max, static_cast(values[i])); - } - } - - EXPECT_GT(num_inner_values, 0); - EXPECT_GT(inner_max, inner_min); -} - - - //----------------------------------------------------------------------------- int main(int argc, char* argv[]) { diff --git a/src/tests/ascent/t_ascent_mir.cpp b/src/tests/ascent/t_ascent_mir.cpp index 84392d76d..aea7b4009 100644 --- a/src/tests/ascent/t_ascent_mir.cpp +++ b/src/tests/ascent/t_ascent_mir.cpp @@ -468,6 +468,122 @@ TEST(ascent_mir, axom_q7o5_material_boundary) "with Axom balls_and_jacks_q7o5 material data."; ASCENT_ACTIONS_DUMP(actions,output_file,msg); } +//----------------------------------------------------------------------------- +TEST(ascent_mir, test_material_field_selection) +{ + // Verify the "materials" field selection keeps material fields and matsets. + auto mesh_domain = [](Node &mesh) -> Node * + { + if(mesh.has_path("fields")) + { + return &mesh; + } + + for(index_t i = 0; i < mesh.number_of_children(); ++i) + { + Node &candidate = mesh.child(i); + if(candidate.has_path("fields")) + { + return &candidate; + } + } + + return nullptr; + }; + + Node data; + std::string root_file; + ASSERT_TRUE(stage_axom_klee_fixture("3mat_q12o12", root_file)); + + conduit::relay::io::blueprint::load_mesh(root_file, data); + Node *input_dom = mesh_domain(data); + ASSERT_TRUE(input_dom != nullptr); + ASSERT_TRUE(input_dom->has_path("fields/vol_frac_inner")); + ASSERT_TRUE(input_dom->has_path("fields/vol_frac_middle")); + ASSERT_TRUE(input_dom->has_path("fields/vol_frac_outer")); + (*input_dom)["state/cycle"] = 0; + + const std::string output_path = prepare_output_dir(); + const std::string output_file = + conduit::utils::join_file_path(output_path, + "tout_material_field_selection"); + const std::string output_root_file = output_file + ".cycle_000000.root"; + + if(conduit::utils::is_file(output_root_file)) + { + conduit::utils::remove_file(output_root_file); + } + + conduit::Node actions; + conduit::Node &add_extracts = actions.append(); + add_extracts["action"] = "add_extracts"; + conduit::Node &extracts = add_extracts["extracts"]; + extracts["e1/type"] = "relay"; + extracts["e1/params/path"] = output_file; + extracts["e1/params/protocol"] = "blueprint/mesh/hdf5"; + extracts["e1/params/fields"].append() = "materials"; + + Ascent ascent; + ascent.open(); + ascent.publish(data); + ascent.execute(actions); + ascent.close(); + + Node filtered; + conduit::relay::io::blueprint::load_mesh(output_root_file, filtered); + Node *filtered_dom = mesh_domain(filtered); + ASSERT_TRUE(filtered_dom != nullptr); + + const Node &dom = *filtered_dom; + EXPECT_TRUE(dom.has_path("fields/mesh_material_attribute")); + EXPECT_TRUE(dom.has_path("fields/boundary_material_attribute")); + EXPECT_TRUE(dom.has_path("fields/vol_frac_inner")); + EXPECT_TRUE(dom.has_path("fields/vol_frac_middle")); + EXPECT_TRUE(dom.has_path("fields/vol_frac_outer")); + EXPECT_TRUE(dom.has_path("matsets/material")); + + const Node &material_values = dom["fields/mesh_material_attribute/values"]; + ASSERT_EQ(material_values.dtype().number_of_elements(), 1); + ASSERT_TRUE(material_values.dtype().is_int32() || material_values.dtype().is_int64()); + if(material_values.dtype().is_int32()) + { + EXPECT_EQ(material_values.as_int32_ptr()[0], 1); + } + else + { + EXPECT_EQ(material_values.as_int64_ptr()[0], 1); + } + + const Node &inner_values = dom["fields/vol_frac_inner/values"]; + ASSERT_TRUE(inner_values.dtype().is_float64() || + inner_values.dtype().is_float32()); + + double inner_min = std::numeric_limits::max(); + double inner_max = -std::numeric_limits::max(); + const index_t num_inner_values = inner_values.dtype().number_of_elements(); + if(inner_values.dtype().is_float64()) + { + const float64 *values = inner_values.as_float64_ptr(); + for(index_t i = 0; i < num_inner_values; ++i) + { + inner_min = std::min(inner_min, values[i]); + inner_max = std::max(inner_max, values[i]); + } + } + else + { + const float32 *values = inner_values.as_float32_ptr(); + for(index_t i = 0; i < num_inner_values; ++i) + { + inner_min = std::min(inner_min, static_cast(values[i])); + inner_max = std::max(inner_max, static_cast(values[i])); + } + } + + EXPECT_GT(num_inner_values, 0); + EXPECT_GT(inner_max, inner_min); +} + //----------------------------------------------------------------------------- int main(int argc, char* argv[]) {