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