@@ -114,6 +114,9 @@ double Cell::density_mult(int32_t instance) const
114
114
115
115
double Cell::density (int32_t instance) const
116
116
{
117
+ if (instance >= material_.size () && material_.size () != 1 )
118
+ fatal_error (fmt::format (" Instances and materials don't match! {} {}" , instance, material_.size ()));
119
+
117
120
const int32_t mat_index = material (instance);
118
121
if (mat_index == MATERIAL_VOID)
119
122
return 0.0 ;
@@ -123,7 +126,7 @@ double Cell::density(int32_t instance) const
123
126
rho_mult_.size () == 1 ? rho_mult_.at (0 ) : rho_mult_.at (instance);
124
127
return rho * model::materials[mat_index]->density_gpcc ();
125
128
} else {
126
- return rho_mult_[0 ];
129
+ return rho_mult_[0 ] * model::materials[mat_index]-> density_gpcc () ;
127
130
}
128
131
}
129
132
@@ -229,8 +232,14 @@ void Cell::export_properties_hdf5(hid_t group) const
229
232
temps.push_back (sqrtkT_val * sqrtkT_val / K_BOLTZMANN);
230
233
write_dataset (cell_group, " temperature" , temps);
231
234
232
- // Write density multipliers for one or more cell instances
233
- write_dataset (cell_group, " density_mult" , rho_mult_);
235
+ // Write density for one or more cell instances
236
+ if (type_ == Fill::MATERIAL && material_.size () > 0 ) {
237
+ vector<double > rho;
238
+ for (int32_t i = 0 ; i < rho_mult_.size (); ++i)
239
+ rho.push_back (density (i));
240
+
241
+ write_dataset (cell_group, " density" , rho);
242
+ }
234
243
235
244
close_group (cell_group);
236
245
}
@@ -258,17 +267,22 @@ void Cell::import_properties_hdf5(hid_t group)
258
267
this ->set_temperature (temps[i], i);
259
268
}
260
269
261
- // Read density multipliers
262
- if (object_exists (cell_group, " density_mult" )) {
263
- read_dataset (cell_group, " density_mult" , rho_mult_);
270
+ // Read densities
271
+ if (object_exists (cell_group, " density" )) {
272
+ vector<double > rho;
273
+ read_dataset (cell_group, " density" , rho);
264
274
265
- // Ensure number of density multipliers makes sense
266
- auto n_rho = rho_mult_ .size ();
275
+ // Ensure number of densities makes sense
276
+ auto n_rho = rho .size ();
267
277
if (n_rho > 1 && n_rho != n_instances ()) {
268
- fatal_error (fmt::format (" Number of density multipliers for cell {} "
278
+ fatal_error (fmt::format (" Number of densities for cell {} "
269
279
" doesn't match number of instances" ,
270
280
id_));
271
281
}
282
+
283
+ // Set densities.
284
+ for (int32_t i = 0 ; i < n_rho; ++i)
285
+ set_density (rho[i], i);
272
286
}
273
287
274
288
close_group (cell_group);
0 commit comments