From 8de0d12083c904eded759d590b879a501672d3c6 Mon Sep 17 00:00:00 2001 From: yrasool <111371895+yrasool@users.noreply.github.com> Date: Mon, 22 Jun 2026 14:44:37 -0400 Subject: [PATCH] Fix mergeMctals with many input files --- libmcnptools/src/mergeMctals.cpp | 6 ++++-- libmcnptools/tests/mctal/tests/CMakeLists.txt | 1 + .../mctal/tests/MctalMergeManyInputs.cpp | 21 +++++++++++++++++++ 3 files changed, 26 insertions(+), 2 deletions(-) create mode 100644 libmcnptools/tests/mctal/tests/MctalMergeManyInputs.cpp diff --git a/libmcnptools/src/mergeMctals.cpp b/libmcnptools/src/mergeMctals.cpp index 3e674e0..88d2715 100644 --- a/libmcnptools/src/mergeMctals.cpp +++ b/libmcnptools/src/mergeMctals.cpp @@ -25,10 +25,11 @@ Mctal mergeMctals(const std::string& name, const std::vector mctal_ Mctal base(mctal_names.at(0)); std::vector mctals; + mctals.reserve(mctal_names.size() - 1); for(unsigned int m=1; m 1 ) std::cerr << "Indexing MCTAL file \'" << mctal_names.at(m) << "\'" << std::endl; - mctals.push_back(Mctal(mctal_names.at(m))); + mctals.emplace_back(mctal_names.at(m)); } const std::vector tallies = base.GetTallyList(); @@ -137,10 +138,11 @@ Mctal parallelMergeMctals(const std::string& name, const std::vector mctals; + mctals.reserve(mctal_names.size() / size + 1); for(size_t m=lrank+size; m 1 ) std::cerr << "Task " << lrank << " indexing MCTAL file \'" << mctal_names.at(m) << "\'" << std::endl; - mctals.push_back(Mctal(mctal_names.at(m))); + mctals.emplace_back(mctal_names.at(m)); } // build the total number of histories and random numbers used diff --git a/libmcnptools/tests/mctal/tests/CMakeLists.txt b/libmcnptools/tests/mctal/tests/CMakeLists.txt index 49de87b..28b51a1 100644 --- a/libmcnptools/tests/mctal/tests/CMakeLists.txt +++ b/libmcnptools/tests/mctal/tests/CMakeLists.txt @@ -6,6 +6,7 @@ list(APPEND TEST_SRCS MctalKcodeCycles.cpp MctalKcodeNdat.cpp MctalKcodeValue.cpp + MctalMergeManyInputs.cpp MctalNps.cpp MctalRandoms.cpp MctalTallyCBins.cpp diff --git a/libmcnptools/tests/mctal/tests/MctalMergeManyInputs.cpp b/libmcnptools/tests/mctal/tests/MctalMergeManyInputs.cpp new file mode 100644 index 0000000..893b34a --- /dev/null +++ b/libmcnptools/tests/mctal/tests/MctalMergeManyInputs.cpp @@ -0,0 +1,21 @@ +#include "gtest/gtest.h" +#include "mcnptools/Mctal.hpp" +#include "mcnptools/mergeMctals.hpp" + +#include +#include +#include + +TEST(MctalMerge, ManyInputFiles) { + const std::string output = "test_mctal_merged_many"; + std::vector mctals(130, "test_mctal"); + std::remove(output.c_str()); + + EXPECT_NO_THROW({ + mcnptools::Mctal merged = mcnptools::mergeMctals(output, mctals); + merged.GetTally(1); + merged.GetTally(4); + }); + + std::remove(output.c_str()); +}