From 157320427d0cc7627e68bb41189c41102ebf79d9 Mon Sep 17 00:00:00 2001 From: yxpw Date: Wed, 13 May 2026 11:42:31 +0800 Subject: [PATCH] fix: fix MPI race condition in permittivity file output Move root rank check before opening the output file to prevent multiple MPI processes from simultaneously creating/truncating the file. This fixes intermittent null bytes appearing at the beginning of permittivity.dat when running with multiple processes. --- src/functions/optics/permittivity.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/functions/optics/permittivity.cpp b/src/functions/optics/permittivity.cpp index 8642ed9..e055a2d 100644 --- a/src/functions/optics/permittivity.cpp +++ b/src/functions/optics/permittivity.cpp @@ -92,13 +92,13 @@ void CalcOptPermit::at_k(FracCoord k_frac) { void CalcOptPermit::save_data() { + // Only the root rank output data! + if (!UtilsMPI::i_am_root_rank()) return; // Check and prepare UtilsMisc::check_output_directory_is_ok(); std::ofstream outputFile(PERMITTIVITY_OUT); // Check if the file open with no error if (!outputFile) UtilsMPI::Abort() << "Fail to create the output file."; - // Only the root rank output data! - if (!UtilsMPI::i_am_root_rank()) return; // Write the data to file for (size_t i_w=0; i_w