@@ -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_
14451420void
14461421multi_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_
16101586void
16111587uni_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
17411716void
17421717uni_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
18841858void
18851859multi_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
20081981void
20091982multi_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
21482120void
21492121multi_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
0 commit comments