Skip to content

Commit 6f36e79

Browse files
move test from conduit extract to mir (#1763)
* move test
1 parent 60a9769 commit 6f36e79

2 files changed

Lines changed: 116 additions & 119 deletions

File tree

src/tests/ascent/t_ascent_conduit_extract.cpp

Lines changed: 0 additions & 119 deletions
Original file line numberDiff line numberDiff line change
@@ -231,125 +231,6 @@ TEST(ascent_conduit_extract, test_pipeline_result)
231231

232232
}
233233

234-
//-----------------------------------------------------------------------------
235-
TEST(ascent_conduit_extract, test_material_field_selection)
236-
{
237-
// Verify the "materials" field selection keeps material fields and matsets.
238-
auto mesh_domain = [](Node &mesh) -> Node *
239-
{
240-
if(mesh.has_path("fields"))
241-
{
242-
return &mesh;
243-
}
244-
245-
for(index_t i = 0; i < mesh.number_of_children(); ++i)
246-
{
247-
Node &candidate = mesh.child(i);
248-
if(candidate.has_path("fields"))
249-
{
250-
return &candidate;
251-
}
252-
}
253-
254-
return nullptr;
255-
};
256-
257-
Node data;
258-
std::string root_file;
259-
ASSERT_TRUE(stage_axom_klee_fixture("3mat_q12o12", root_file));
260-
261-
conduit::relay::io::blueprint::load_mesh(root_file, data);
262-
Node *input_dom = mesh_domain(data);
263-
ASSERT_TRUE(input_dom != nullptr);
264-
ASSERT_TRUE(input_dom->has_path("fields/vol_frac_inner"));
265-
ASSERT_TRUE(input_dom->has_path("fields/vol_frac_middle"));
266-
ASSERT_TRUE(input_dom->has_path("fields/vol_frac_outer"));
267-
(*input_dom)["state/cycle"] = 0;
268-
269-
const std::string output_path = prepare_output_dir();
270-
const std::string output_file =
271-
conduit::utils::join_file_path(output_path,
272-
"tout_material_field_selection");
273-
const std::string output_root_file = output_file + ".cycle_000000.root";
274-
275-
if(conduit::utils::is_file(output_root_file))
276-
{
277-
conduit::utils::remove_file(output_root_file);
278-
}
279-
280-
conduit::Node actions;
281-
conduit::Node &add_extracts = actions.append();
282-
add_extracts["action"] = "add_extracts";
283-
conduit::Node &extracts = add_extracts["extracts"];
284-
extracts["e1/type"] = "relay";
285-
extracts["e1/params/path"] = output_file;
286-
extracts["e1/params/protocol"] = "blueprint/mesh/hdf5";
287-
extracts["e1/params/fields"].append() = "materials";
288-
289-
Ascent ascent;
290-
ascent.open();
291-
ascent.publish(data);
292-
ascent.execute(actions);
293-
ascent.close();
294-
295-
Node filtered;
296-
conduit::relay::io::blueprint::load_mesh(output_root_file, filtered);
297-
Node *filtered_dom = mesh_domain(filtered);
298-
ASSERT_TRUE(filtered_dom != nullptr);
299-
300-
const Node &dom = *filtered_dom;
301-
EXPECT_TRUE(dom.has_path("fields/mesh_material_attribute"));
302-
EXPECT_TRUE(dom.has_path("fields/boundary_material_attribute"));
303-
EXPECT_TRUE(dom.has_path("fields/vol_frac_inner"));
304-
EXPECT_TRUE(dom.has_path("fields/vol_frac_middle"));
305-
EXPECT_TRUE(dom.has_path("fields/vol_frac_outer"));
306-
EXPECT_TRUE(dom.has_path("matsets/material"));
307-
308-
const Node &material_values = dom["fields/mesh_material_attribute/values"];
309-
ASSERT_EQ(material_values.dtype().number_of_elements(), 1);
310-
ASSERT_TRUE(material_values.dtype().is_int32() ||
311-
material_values.dtype().is_int64());
312-
if(material_values.dtype().is_int32())
313-
{
314-
EXPECT_EQ(material_values.as_int32_ptr()[0], 1);
315-
}
316-
else
317-
{
318-
EXPECT_EQ(material_values.as_int64_ptr()[0], 1);
319-
}
320-
321-
const Node &inner_values = dom["fields/vol_frac_inner/values"];
322-
ASSERT_TRUE(inner_values.dtype().is_float64() ||
323-
inner_values.dtype().is_float32());
324-
325-
double inner_min = std::numeric_limits<double>::max();
326-
double inner_max = -std::numeric_limits<double>::max();
327-
const index_t num_inner_values = inner_values.dtype().number_of_elements();
328-
if(inner_values.dtype().is_float64())
329-
{
330-
const float64 *values = inner_values.as_float64_ptr();
331-
for(index_t i = 0; i < num_inner_values; ++i)
332-
{
333-
inner_min = std::min(inner_min, values[i]);
334-
inner_max = std::max(inner_max, values[i]);
335-
}
336-
}
337-
else
338-
{
339-
const float32 *values = inner_values.as_float32_ptr();
340-
for(index_t i = 0; i < num_inner_values; ++i)
341-
{
342-
inner_min = std::min(inner_min, static_cast<double>(values[i]));
343-
inner_max = std::max(inner_max, static_cast<double>(values[i]));
344-
}
345-
}
346-
347-
EXPECT_GT(num_inner_values, 0);
348-
EXPECT_GT(inner_max, inner_min);
349-
}
350-
351-
352-
353234
//-----------------------------------------------------------------------------
354235
int main(int argc, char* argv[])
355236
{

src/tests/ascent/t_ascent_mir.cpp

Lines changed: 116 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -468,6 +468,122 @@ TEST(ascent_mir, axom_q7o5_material_boundary)
468468
"with Axom balls_and_jacks_q7o5 material data.";
469469
ASCENT_ACTIONS_DUMP(actions,output_file,msg);
470470
}
471+
//-----------------------------------------------------------------------------
472+
TEST(ascent_mir, test_material_field_selection)
473+
{
474+
// Verify the "materials" field selection keeps material fields and matsets.
475+
auto mesh_domain = [](Node &mesh) -> Node *
476+
{
477+
if(mesh.has_path("fields"))
478+
{
479+
return &mesh;
480+
}
481+
482+
for(index_t i = 0; i < mesh.number_of_children(); ++i)
483+
{
484+
Node &candidate = mesh.child(i);
485+
if(candidate.has_path("fields"))
486+
{
487+
return &candidate;
488+
}
489+
}
490+
491+
return nullptr;
492+
};
493+
494+
Node data;
495+
std::string root_file;
496+
ASSERT_TRUE(stage_axom_klee_fixture("3mat_q12o12", root_file));
497+
498+
conduit::relay::io::blueprint::load_mesh(root_file, data);
499+
Node *input_dom = mesh_domain(data);
500+
ASSERT_TRUE(input_dom != nullptr);
501+
ASSERT_TRUE(input_dom->has_path("fields/vol_frac_inner"));
502+
ASSERT_TRUE(input_dom->has_path("fields/vol_frac_middle"));
503+
ASSERT_TRUE(input_dom->has_path("fields/vol_frac_outer"));
504+
(*input_dom)["state/cycle"] = 0;
505+
506+
const std::string output_path = prepare_output_dir();
507+
const std::string output_file =
508+
conduit::utils::join_file_path(output_path,
509+
"tout_material_field_selection");
510+
const std::string output_root_file = output_file + ".cycle_000000.root";
511+
512+
if(conduit::utils::is_file(output_root_file))
513+
{
514+
conduit::utils::remove_file(output_root_file);
515+
}
516+
517+
conduit::Node actions;
518+
conduit::Node &add_extracts = actions.append();
519+
add_extracts["action"] = "add_extracts";
520+
conduit::Node &extracts = add_extracts["extracts"];
521+
extracts["e1/type"] = "relay";
522+
extracts["e1/params/path"] = output_file;
523+
extracts["e1/params/protocol"] = "blueprint/mesh/hdf5";
524+
extracts["e1/params/fields"].append() = "materials";
525+
526+
Ascent ascent;
527+
ascent.open();
528+
ascent.publish(data);
529+
ascent.execute(actions);
530+
ascent.close();
531+
532+
Node filtered;
533+
conduit::relay::io::blueprint::load_mesh(output_root_file, filtered);
534+
Node *filtered_dom = mesh_domain(filtered);
535+
ASSERT_TRUE(filtered_dom != nullptr);
536+
537+
const Node &dom = *filtered_dom;
538+
EXPECT_TRUE(dom.has_path("fields/mesh_material_attribute"));
539+
EXPECT_TRUE(dom.has_path("fields/boundary_material_attribute"));
540+
EXPECT_TRUE(dom.has_path("fields/vol_frac_inner"));
541+
EXPECT_TRUE(dom.has_path("fields/vol_frac_middle"));
542+
EXPECT_TRUE(dom.has_path("fields/vol_frac_outer"));
543+
EXPECT_TRUE(dom.has_path("matsets/material"));
544+
545+
const Node &material_values = dom["fields/mesh_material_attribute/values"];
546+
ASSERT_EQ(material_values.dtype().number_of_elements(), 1);
547+
ASSERT_TRUE(material_values.dtype().is_int32() || material_values.dtype().is_int64());
548+
if(material_values.dtype().is_int32())
549+
{
550+
EXPECT_EQ(material_values.as_int32_ptr()[0], 1);
551+
}
552+
else
553+
{
554+
EXPECT_EQ(material_values.as_int64_ptr()[0], 1);
555+
}
556+
557+
const Node &inner_values = dom["fields/vol_frac_inner/values"];
558+
ASSERT_TRUE(inner_values.dtype().is_float64() ||
559+
inner_values.dtype().is_float32());
560+
561+
double inner_min = std::numeric_limits<double>::max();
562+
double inner_max = -std::numeric_limits<double>::max();
563+
const index_t num_inner_values = inner_values.dtype().number_of_elements();
564+
if(inner_values.dtype().is_float64())
565+
{
566+
const float64 *values = inner_values.as_float64_ptr();
567+
for(index_t i = 0; i < num_inner_values; ++i)
568+
{
569+
inner_min = std::min(inner_min, values[i]);
570+
inner_max = std::max(inner_max, values[i]);
571+
}
572+
}
573+
else
574+
{
575+
const float32 *values = inner_values.as_float32_ptr();
576+
for(index_t i = 0; i < num_inner_values; ++i)
577+
{
578+
inner_min = std::min(inner_min, static_cast<double>(values[i]));
579+
inner_max = std::max(inner_max, static_cast<double>(values[i]));
580+
}
581+
}
582+
583+
EXPECT_GT(num_inner_values, 0);
584+
EXPECT_GT(inner_max, inner_min);
585+
}
586+
471587
//-----------------------------------------------------------------------------
472588
int main(int argc, char* argv[])
473589
{

0 commit comments

Comments
 (0)