From c86b1359e4546c1fc6ed22d20e2be8ea13cf4137 Mon Sep 17 00:00:00 2001
From: renchao_lu <renchao.lu@gmail.com>
Date: Fri, 15 Apr 2022 11:39:44 +0200
Subject: [PATCH] [CL] specify phreeqc I/O file name.

---
 ChemistryLib/PhreeqcIO.cpp            |  5 ++++-
 ChemistryLib/PhreeqcIOData/Dump.h     |  5 ++++-
 ChemistryLib/PhreeqcIOData/Output.cpp | 25 +++++++++++++++++++++++++
 ChemistryLib/PhreeqcIOData/Output.h   |  6 +-----
 4 files changed, 34 insertions(+), 7 deletions(-)

diff --git a/ChemistryLib/PhreeqcIO.cpp b/ChemistryLib/PhreeqcIO.cpp
index 8fc0d98c443..349820eeabc 100644
--- a/ChemistryLib/PhreeqcIO.cpp
+++ b/ChemistryLib/PhreeqcIO.cpp
@@ -262,6 +262,9 @@ static double averageReactantMolality(
 }
 }  // namespace
 
+extern std::string specifyFileName(std::string const& project_file_name,
+                                   std::string const& file_extension);
+
 PhreeqcIO::PhreeqcIO(MeshLib::Mesh const& mesh,
                      GlobalLinearSolver& linear_solver,
                      std::string const& project_file_name,
@@ -273,7 +276,7 @@ PhreeqcIO::PhreeqcIO(MeshLib::Mesh const& mesh,
                      std::unique_ptr<Dump>&& dump,
                      Knobs&& knobs)
     : ChemicalSolverInterface(mesh, linear_solver),
-      _phreeqc_input_file(project_file_name + "_phreeqc.inp"),
+      _phreeqc_input_file(specifyFileName(project_file_name, ".inp")),
       _database(std::move(database)),
       _chemical_system(std::move(chemical_system)),
       _reaction_rates(std::move(reaction_rates)),
diff --git a/ChemistryLib/PhreeqcIOData/Dump.h b/ChemistryLib/PhreeqcIOData/Dump.h
index 55e3b60aede..d79a89bb759 100644
--- a/ChemistryLib/PhreeqcIOData/Dump.h
+++ b/ChemistryLib/PhreeqcIOData/Dump.h
@@ -21,10 +21,13 @@ namespace ChemistryLib
 {
 namespace PhreeqcIOData
 {
+extern std::string specifyFileName(std::string const& project_file_name,
+                                   std::string const& file_extension);
+
 struct Dump
 {
     explicit Dump(std::string const& project_file_name)
-        : dump_file(project_file_name + ".dmp")
+        : dump_file(specifyFileName(project_file_name, ".dmp"))
     {
         try
         {
diff --git a/ChemistryLib/PhreeqcIOData/Output.cpp b/ChemistryLib/PhreeqcIOData/Output.cpp
index 4e2928c41eb..59d5bc96a22 100644
--- a/ChemistryLib/PhreeqcIOData/Output.cpp
+++ b/ChemistryLib/PhreeqcIOData/Output.cpp
@@ -12,10 +12,35 @@
 
 #include <ostream>
 
+#ifdef USE_PETSC
+#include <mpi.h>
+#endif
+
 namespace ChemistryLib
 {
 namespace PhreeqcIOData
 {
+std::string specifyFileName(std::string const& project_file_name,
+                            std::string const& file_extension)
+{
+#ifdef USE_PETSC
+    int mpi_rank;
+
+    MPI_Comm_rank(MPI_COMM_WORLD, &mpi_rank);
+    return project_file_name + "_phreeqc_pid_" + std::to_string(mpi_rank) +
+           file_extension;
+#endif
+
+    return project_file_name + "_phreeqc" + file_extension;
+}
+
+BasicOutputSetups::BasicOutputSetups(std::string const& project_file_name,
+                                     bool const use_high_precision_)
+    : output_file(specifyFileName(project_file_name, ".out")),
+      use_high_precision(use_high_precision_)
+{
+}
+
 std::ostream& operator<<(std::ostream& os,
                          BasicOutputSetups const& basic_output_setups)
 {
diff --git a/ChemistryLib/PhreeqcIOData/Output.h b/ChemistryLib/PhreeqcIOData/Output.h
index 1f270a943eb..99a264511b1 100644
--- a/ChemistryLib/PhreeqcIOData/Output.h
+++ b/ChemistryLib/PhreeqcIOData/Output.h
@@ -24,11 +24,7 @@ class BasicOutputSetups
 {
 public:
     explicit BasicOutputSetups(std::string const& project_file_name,
-                               bool const use_high_precision_)
-        : output_file(project_file_name + "_phreeqc.out"),
-          use_high_precision(use_high_precision_)
-    {
-    }
+                               bool const use_high_precision_);
 
     static int getNumberOfItemsInDisplay()
     {
-- 
GitLab