Skip to content

Commit a89bae0

Browse files
stumped
1 parent 1f25e35 commit a89bae0

1 file changed

Lines changed: 31 additions & 27 deletions

File tree

src/libs/blueprint/conduit_blueprint_mesh_matset_xforms.cpp

Lines changed: 31 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -252,13 +252,13 @@ walk_matset_by_material(const MatsetAccessor &m_acc,
252252
// we *can* walk this elem-dom representation by material, and sometimes
253253
// we have to. But it is not very efficient.
254254

255-
const index_t num_zones = m_acc.num_elems();
255+
const index_t num_elems = m_acc.num_elems();
256256
// Material ids need not be within in the range [0, N-1), so we iterate
257257
// over the order materials appear in the matset.
258258
for (index_t mat_idx = 0; mat_idx < num_materials; mat_idx ++)
259259
{
260260
index_t num_elems_for_mat = 0;
261-
for (index_t elem_idx = 0; elem_idx < num_zones; elem_idx ++)
261+
for (index_t elem_idx = 0; elem_idx < num_elems; elem_idx ++)
262262
{
263263
const float64 vol_frac = m_acc.get_vol_frac(elem_idx, mat_idx);
264264
if (vol_frac > epsilon)
@@ -327,13 +327,13 @@ walk_matset_species_by_material(const MatsetAccessor &m_acc,
327327
// we *can* walk this elem-dom representation by material, and sometimes
328328
// we have to. But it is not very efficient.
329329

330-
const index_t num_zones = m_acc.num_elems();
330+
const index_t num_elems = m_acc.num_elems();
331331
// Material ids need not be within in the range [0, N-1), so we iterate
332332
// over the order materials appear in the matset.
333333
for (index_t mat_idx = 0; mat_idx < num_materials; mat_idx ++)
334334
{
335335
index_t num_elems_for_mat = 0;
336-
for (index_t elem_idx = 0; elem_idx < num_zones; elem_idx ++)
336+
for (index_t elem_idx = 0; elem_idx < num_elems; elem_idx ++)
337337
{
338338
const float64 vol_frac = m_acc.get_vol_frac(elem_idx, mat_idx);
339339
if (vol_frac > epsilon)
@@ -1655,30 +1655,32 @@ multi_buffer_by_element_to_multi_buffer_by_material_matset(const conduit::Node &
16551655
conduit::Node &dest_matset,
16561656
const float64 epsilon)
16571657
{
1658+
Node material_map;
16581659
if (src_matset.has_child("material_map"))
16591660
{
16601661
dest_matset["material_map"].set(src_matset["material_map"]);
1662+
material_map.set_external(dest_matset["material_map"]);
1663+
}
1664+
else
1665+
{
1666+
create_or_reuse_material_map(src_matset, material_map);
16611667
}
16621668

1663-
const int num_zones = count_zones_from_matset(src_matset);
1664-
1665-
Node material_map;
1666-
create_or_reuse_material_map(src_matset, material_map);
1669+
MatsetAccessor m_acc = MatsetAccessor(src_matset);
1670+
const index_t num_elems = m_acc.num_elems();
16671671

16681672
Node n;
1669-
n["local_element_ids"].set(DataType::index_t(num_zones));
1670-
n["local_volume_fractions"].set(DataType::float64(num_zones));
1673+
n["local_element_ids"].set(DataType::index_t(num_elems));
1674+
n["local_volume_fractions"].set(DataType::float64(num_elems));
16711675
index_t_array local_element_ids = n["local_element_ids"].value();
16721676
float64_array local_volume_fractions = n["local_volume_fractions"].value();
16731677

1674-
MatsetAccessor m_acc = MatsetAccessor(src_matset);
1675-
16761678
auto for_each_value = [&](const index_t mat_idx,
1677-
const index_t zone_idx,
1679+
const index_t elem_idx,
16781680
const index_t eid_id)
16791681
{
1680-
local_element_ids[eid_id] = zone_idx;
1681-
local_volume_fractions[eid_id] = m_acc.get_vol_frac(zone_idx, mat_idx);
1682+
local_element_ids[eid_id] = elem_idx;
1683+
local_volume_fractions[eid_id] = m_acc.get_vol_frac(elem_idx, mat_idx);
16821684
};
16831685

16841686
// what we will do for each material's elem_ids/vol_fracs
@@ -1709,35 +1711,33 @@ multi_buffer_by_element_to_multi_buffer_by_material_field(const conduit::Node &s
17091711
conduit::Node &dest_field,
17101712
const float64 epsilon)
17111713
{
1712-
const index_t num_zones = count_zones_from_matset(src_matset);
1713-
1714-
Node n;
1715-
n["local_matset_values"].set(DataType::float64(num_zones));
1716-
float64_array local_matset_values = n["local_matset_values"].value();
1717-
17181714
Node material_map;
17191715
create_or_reuse_material_map(src_matset, material_map);
17201716

17211717
MatsetAccessor m_acc = MatsetAccessor(src_matset, src_field);
1718+
const index_t num_elems = m_acc.num_elems();
1719+
1720+
Node n;
1721+
n["local_matset_values"].set(DataType::float64(num_elems));
1722+
float64_array local_matset_values = n["local_matset_values"].value();
17221723

17231724
auto for_each_value = [&](const index_t mat_idx,
1724-
const index_t zone_idx,
1725+
const index_t elem_idx,
17251726
const index_t eid_id)
17261727
{
1727-
local_matset_values[eid_id] = m_acc.get_mset_val(zone_idx, mat_idx);
1728+
local_matset_values[eid_id] = m_acc.get_mset_val(elem_idx, mat_idx);
17281729
};
17291730

17301731
// what we will do for each material's mset_vals
17311732
auto for_each_material = [&](const index_t mat_idx,
17321733
const index_t num_elems_for_mat)
17331734
{
17341735
const std::string matname = material_map.child(mat_idx).name();
1735-
Node &result_mset_vals = dest_field["matset_values"][matname];
1736-
result_mset_vals.set(DataType::float64(num_elems_for_mat));
1737-
float64_array result_mset_vals_arr = result_mset_vals.value();
1736+
dest_field["matset_values"][matname].set(DataType::float64(num_elems_for_mat));
1737+
float64_array matset_values = dest_field["matset_values"][matname].value();
17381738
for (index_t eid_id = 0; eid_id < num_elems_for_mat; eid_id ++)
17391739
{
1740-
result_mset_vals_arr[eid_id] = local_matset_values[eid_id];
1740+
matset_values[eid_id] = local_matset_values[eid_id];
17411741
}
17421742
};
17431743

@@ -1752,6 +1752,10 @@ multi_buffer_by_element_to_multi_buffer_by_material_specset(const conduit::Node
17521752
conduit::Node &dest_specset,
17531753
const float64 epsilon)
17541754
{
1755+
// TODO justin I am stumped here
1756+
// I should probably make a new walk method
1757+
// that walks by materials, species, and then elements
1758+
17551759
auto mat_itr = src_matset["volume_fractions"].children();
17561760
auto smat_itr = src_specset["matset_values"].children();
17571761
while (mat_itr.has_next() && smat_itr.has_next())

0 commit comments

Comments
 (0)