Skip to content

Commit 1fd71ac

Browse files
tests honor matmap
1 parent c5f23ba commit 1fd71ac

2 files changed

Lines changed: 23 additions & 47 deletions

File tree

src/libs/blueprint/conduit_blueprint_mesh_matset_xforms.cpp

Lines changed: 18 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -1355,12 +1355,15 @@ multi_buffer_by_element_to_uni_buffer_by_element_matset(const conduit::Node &src
13551355
Node &material_map = dest_matset["material_map"];
13561356
create_or_copy_material_map(src_matset, material_map);
13571357

1358+
MatsetAccessor m_acc = MatsetAccessor(src_matset);
1359+
const index_t num_elems = m_acc.num_elems();
1360+
13581361
std::vector<float64> vol_fracs;
13591362
std::vector<index_t> mat_ids;
1360-
std::vector<index_t> sizes;
1361-
std::vector<index_t> offsets;
1362-
1363-
MatsetAccessor m_acc = MatsetAccessor(src_matset);
1363+
dest_matset["sizes"].set(DataType::index_t(num_elems));
1364+
index_t_array sizes = dest_matset["sizes"].value();
1365+
dest_matset["offsets"].set(DataType::index_t(num_elems));
1366+
index_t_array offsets = dest_matset["offsets"].value();
13641367

13651368
index_t offset = 0;
13661369
// we need to gather info from each value for the zones
@@ -1375,20 +1378,16 @@ multi_buffer_by_element_to_uni_buffer_by_element_matset(const conduit::Node &src
13751378
auto for_each_element = [&](const index_t elem_idx,
13761379
const index_t nmats)
13771380
{
1378-
(void) elem_idx;
1379-
13801381
// save the size and offset information
1381-
sizes.push_back(nmats);
1382-
offsets.push_back(offset);
1382+
sizes[elem_idx] = nmats;
1383+
offsets[elem_idx] = offset;
13831384
offset += nmats;
13841385
};
13851386

13861387
walk_matset_by_element(m_acc, for_each_value, for_each_element, epsilon);
13871388

13881389
dest_matset["volume_fractions"].set(vol_fracs);
13891390
dest_matset["material_ids"].set(mat_ids);
1390-
dest_matset["sizes"].set(sizes);
1391-
dest_matset["offsets"].set(offsets);
13921391
}
13931392

13941393
//-----------------------------------------------------------------------------
@@ -1399,30 +1398,6 @@ multi_buffer_by_element_to_uni_buffer_by_element_field(const conduit::Node &src_
13991398
conduit::Node &dest_field,
14001399
const float64 epsilon)
14011400
{
1402-
// map material ids to matset values and volume fractions
1403-
std::map<int, float64_accessor> full_vol_fracs;
1404-
std::map<int, float64_accessor> full_matset_vals;
1405-
1406-
// create the material map
1407-
auto mat_itr = src_matset["volume_fractions"].children();
1408-
auto fmat_itr = src_field["matset_values"].children();
1409-
int mat_idx = 0;
1410-
while (mat_itr.has_next() && fmat_itr.has_next())
1411-
{
1412-
const Node &mat_vol_fracs = mat_itr.next();
1413-
std::string matname = mat_itr.name();
1414-
1415-
const Node &mat_field_vals = fmat_itr.next();
1416-
std::string fmatname = fmat_itr.name();
1417-
1418-
CONDUIT_ASSERT(matname == fmatname, "Materials must be ordered the same in "
1419-
"material dependent fields and their matsets.");
1420-
1421-
full_vol_fracs[mat_idx] = mat_vol_fracs.value();
1422-
full_matset_vals[mat_idx] = mat_field_vals.value();
1423-
mat_idx ++;
1424-
}
1425-
14261401
std::vector<float64> matset_values;
14271402

14281403
MatsetAccessor m_acc = MatsetAccessor(src_matset, src_field);
@@ -1445,7 +1420,6 @@ multi_buffer_by_element_to_uni_buffer_by_element_field(const conduit::Node &src_
14451420
void
14461421
multi_buffer_by_element_to_uni_buffer_by_element_specset(const conduit::Node &src_matset,
14471422
const conduit::Node &src_specset,
1448-
const std::string &dest_matset_name,
14491423
conduit::Node &dest_specset,
14501424
const float64 epsilon)
14511425
{
@@ -1543,12 +1517,14 @@ uni_buffer_by_element_to_multi_buffer_by_element_matset(const conduit::Node &src
15431517

15441518
MatsetAccessor m_acc = MatsetAccessor(src_matset);
15451519
const index_t num_mats = m_acc.num_mats();
1520+
const index_t num_elems = m_acc.num_elems();
15461521

15471522
std::vector<float64_array> new_vol_fracs_vec(num_mats);
15481523
// initialize sizes of the vol frac arrays
1549-
for (index_t mat_order_id = 0; mat_order_id < num_mats; mat_order_id)
1524+
for (index_t mat_order_id = 0; mat_order_id < num_mats; mat_order_id ++)
15501525
{
15511526
const std::string &matname = src_matset["material_map"].child(mat_order_id).name();
1527+
new_vol_fracs[matname].set(DataType::float64(num_elems));
15521528
new_vol_fracs_vec[mat_order_id] = new_vol_fracs[matname].as_float64_array();
15531529
new_vol_fracs_vec[mat_order_id].fill(0.0);
15541530
}
@@ -1610,7 +1586,6 @@ uni_buffer_by_element_to_multi_buffer_by_element_field(const conduit::Node &src_
16101586
void
16111587
uni_buffer_by_element_to_multi_buffer_by_element_specset(const conduit::Node &src_matset,
16121588
const conduit::Node &src_specset,
1613-
const std::string &dest_matset_name,
16141589
conduit::Node &dest_specset)
16151590
{
16161591
// map material numbers to material names
@@ -1741,7 +1716,6 @@ uni_buffer_by_element_to_multi_buffer_by_material_field(const conduit::Node &src
17411716
void
17421717
uni_buffer_by_element_to_multi_buffer_by_material_specset(const conduit::Node &src_matset,
17431718
const conduit::Node &src_specset,
1744-
const std::string &dest_matset_name,
17451719
conduit::Node &dest_specset)
17461720
{
17471721
// map material numbers to material names
@@ -1884,7 +1858,6 @@ multi_buffer_by_element_to_multi_buffer_by_material_field(const conduit::Node &s
18841858
void
18851859
multi_buffer_by_element_to_multi_buffer_by_material_specset(const conduit::Node &src_matset,
18861860
const conduit::Node &src_specset,
1887-
const std::string &dest_matset_name,
18881861
conduit::Node &dest_specset,
18891862
const float64 epsilon)
18901863
{
@@ -2008,7 +1981,6 @@ multi_buffer_by_material_to_multi_buffer_by_element_field(const conduit::Node &s
20081981
void
20091982
multi_buffer_by_material_to_multi_buffer_by_element_specset(const conduit::Node &src_matset,
20101983
const conduit::Node &src_specset,
2011-
const std::string &dest_matset_name,
20121984
conduit::Node &dest_specset)
20131985
{
20141986
// sparse by material representation
@@ -2148,7 +2120,6 @@ multi_buffer_by_material_to_uni_buffer_by_element_field(const conduit::Node &src
21482120
void
21492121
multi_buffer_by_material_to_uni_buffer_by_element_specset(const conduit::Node &src_matset,
21502122
const conduit::Node &src_specset,
2151-
const std::string &dest_matset_name,
21522123
conduit::Node &dest_specset)
21532124
{
21542125
// sparse by material representation
@@ -2819,7 +2790,7 @@ to_multi_buffer_by_element(const conduit::Node &src_matset,
28192790
else
28202791
{
28212792
conduit::blueprint::mesh::matset::detail::uni_buffer_by_element_to_multi_buffer_by_element_specset(
2822-
src_matset, src_specset, dest_matset_name, dest_specset);
2793+
src_matset, src_specset, dest_specset);
28232794
}
28242795
}
28252796
else
@@ -2828,7 +2799,7 @@ to_multi_buffer_by_element(const conduit::Node &src_matset,
28282799
if (multi_buf)
28292800
{
28302801
conduit::blueprint::mesh::matset::detail::multi_buffer_by_material_to_multi_buffer_by_element_specset(
2831-
src_matset, src_specset, dest_matset_name, dest_specset);
2802+
src_matset, src_specset, dest_specset);
28322803
}
28332804
// uni-buffer material-dominant "???" representation
28342805
else
@@ -2874,7 +2845,7 @@ to_uni_buffer_by_element(const conduit::Node &src_matset,
28742845
if (multi_buf)
28752846
{
28762847
conduit::blueprint::mesh::matset::detail::multi_buffer_by_element_to_uni_buffer_by_element_specset(
2877-
src_matset, src_specset, dest_matset_name, dest_specset, epsilon);
2848+
src_matset, src_specset, dest_specset, epsilon);
28782849
}
28792850
// uni-buffer element-dominant "sparse by element" representation
28802851
else
@@ -2891,7 +2862,7 @@ to_uni_buffer_by_element(const conduit::Node &src_matset,
28912862
if (multi_buf)
28922863
{
28932864
conduit::blueprint::mesh::matset::detail::multi_buffer_by_material_to_uni_buffer_by_element_specset(
2894-
src_matset, src_specset, dest_matset_name, dest_specset);
2865+
src_matset, src_specset, dest_specset);
28952866
}
28962867
// uni-buffer material-dominant "???" representation
28972868
else
@@ -2937,13 +2908,13 @@ to_multi_buffer_by_material(const conduit::Node &src_matset,
29372908
if (multi_buf)
29382909
{
29392910
conduit::blueprint::mesh::matset::detail::multi_buffer_by_element_to_multi_buffer_by_material_specset(
2940-
src_matset, src_specset, dest_matset_name, dest_specset, epsilon);
2911+
src_matset, src_specset, dest_specset, epsilon);
29412912
}
29422913
// uni-buffer element-dominant "sparse by element" representation
29432914
else
29442915
{
29452916
conduit::blueprint::mesh::matset::detail::uni_buffer_by_element_to_multi_buffer_by_material_specset(
2946-
src_matset, src_specset, dest_matset_name, dest_specset);
2917+
src_matset, src_specset, dest_specset);
29472918
}
29482919
}
29492920
else

src/tests/blueprint/t_blueprint_mesh_matset_xforms.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -421,6 +421,9 @@ TEST(conduit_blueprint_mesh_matset_xforms, mesh_util_matset_style_transforms)
421421
blueprint::mesh::examples::venn_specsets("sparse_by_element", nx, ny, radius, mesh_sbe);
422422
blueprint::mesh::examples::venn_specsets("sparse_by_material", nx, ny, radius, mesh_sbm);
423423

424+
Node material_map;
425+
material_map.set(mesh_sbe["matsets/matset/material_map"]);
426+
424427
CONDUIT_INFO("venn full -> full");
425428
{
426429
// diff full -> full with full
@@ -554,6 +557,7 @@ TEST(conduit_blueprint_mesh_matset_xforms, mesh_util_matset_style_transforms)
554557
const Node &sset = mesh_sbe["specsets/specset"];
555558
Node full_mset_baseline, full_field_baseline, full_sset_baseline;
556559
full_mset_baseline.set(mesh_full["matsets/matset"]);
560+
full_mset_baseline["material_map"].set(material_map);
557561
full_field_baseline.set(mesh_full["fields/importance"]);
558562
full_sset_baseline.set(mesh_full["specsets/specset"]);
559563

@@ -598,6 +602,7 @@ TEST(conduit_blueprint_mesh_matset_xforms, mesh_util_matset_style_transforms)
598602
const Node &sset = mesh_sbe["specsets/specset"];
599603
Node sbm_mset_baseline, sbm_field_baseline, sbm_sset_baseline;
600604
sbm_mset_baseline.set(mesh_sbm["matsets/matset"]);
605+
sbm_mset_baseline["material_map"].set(material_map);
601606
sbm_field_baseline.set(mesh_sbm["fields/importance"]);
602607
sbm_sset_baseline.set(mesh_sbm["specsets/specset"]);
603608

0 commit comments

Comments
 (0)