Skip to content

Commit 3a090f4

Browse files
author
Martin D. Weinberg
committed
Move precision detection into the dataset reader function
1 parent 1f9b797 commit 3a090f4

2 files changed

Lines changed: 9 additions & 19 deletions

File tree

src/Component.cc

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1538,11 +1538,6 @@ void Component::read_bodies_and_distribute_hdf5(void)
15381538
//
15391539
HighFive::Group particles_group = file.getGroup("particles");
15401540

1541-
// Detect precision by inspecting first dataset "m"
1542-
//
1543-
HighFive::DataSet m_dataset = particles_group.getDataSet("m");
1544-
size_t precision = detect_precision(m_dataset);
1545-
15461541
// Variant for flexible reading and access of float or double datasets
15471542
//
15481543
using FloatDataVariant = std::variant<std::vector<float>, std::vector<double>>;
@@ -1579,10 +1574,11 @@ void Component::read_bodies_and_distribute_hdf5(void)
15791574

15801575
// Lambda to read float or double based on precision flag
15811576
//
1582-
auto read_dataset = [&particles_group, precision]
1577+
auto read_dataset = [this, &particles_group]
15831578
(const std::string& name, size_t offset, size_t batch) -> FloatData {
15841579

15851580
HighFive::DataSet dataset = particles_group.getDataSet(name);
1581+
size_t precision = detect_precision(dataset);
15861582

15871583
// Fetch the dimensions (e.g., [rows, cols])
15881584
size_t total = dataset.getSpace().getDimensions()[0];

utils/PhaseSpace/hdf5bods.cc

Lines changed: 7 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -437,7 +437,6 @@ struct ParticleDataVariant
437437
size_t num_particles = 0;
438438
size_t num_aux_ints = 0;
439439
size_t num_aux_floats = 0;
440-
FloatPrecision precision;
441440
};
442441

443442
// Detect float precision by inspecting dataset type
@@ -475,20 +474,17 @@ ParticleDataVariant read_hdf5_data(const std::string& hdf5_file)
475474
// Open particles group
476475
Group particles_group = file.getGroup("particles");
477476

478-
// Detect precision by inspecting first dataset "m"
479-
DataSet m_dataset = particles_group.getDataSet("m");
480-
FloatPrecision precision = detect_precision(m_dataset);
481-
482477
ParticleDataVariant data;
483478
data.num_particles = num_particles;
484479
data.num_aux_ints = num_aux_ints;
485480
data.num_aux_floats = num_aux_floats;
486-
data.precision = precision;
487-
488-
// Precision is available in data.precision; caller decides whether to print it.
489481

490482
// Lambda to read float or double based on precision
491-
auto read_dataset = [&particles_group, precision](const std::string& name) -> FloatData {
483+
auto read_dataset = [&particles_group](const std::string& name) -> FloatData {
484+
// Detect precision by inspecting dataset
485+
DataSet dataset = particles_group.getDataSet(name);
486+
FloatPrecision precision = detect_precision(dataset);
487+
492488
if (precision == FloatPrecision::FLOAT32) {
493489
return particles_group.getDataSet(name).read<std::vector<float>>();
494490
} else {
@@ -598,11 +594,9 @@ void hdf5_to_ascii(const std::string& hdf5_file, const std::string& ascii_file,
598594
}
599595
outfile.close();
600596

601-
std::string precision_str = (data.precision == FloatPrecision::FLOAT32)
602-
? "float32" : "float64";
603597
if (verbose)
604-
std::cout << "Successfully wrote " << data.num_particles << " particles to "
605-
<< ascii_file << " (" << precision_str << ")" << std::endl;
598+
std::cout << "Successfully wrote " << data.num_particles
599+
<< " particles to " << ascii_file << std::endl;
606600
}
607601

608602
// Main function with command-line parsing

0 commit comments

Comments
 (0)