OGS
ChemistryLib/PhreeqcIOData/Output.cpp
Go to the documentation of this file.
1// SPDX-FileCopyrightText: Copyright (c) OpenGeoSys Community (opengeosys.org)
2// SPDX-License-Identifier: BSD-3-Clause
3
4#include "Output.h"
5
6#include <ostream>
7
8#ifdef USE_PETSC
9#include <mpi.h>
10
11#include "BaseLib/MPI.h"
12#endif
13
14namespace ChemistryLib
15{
16namespace PhreeqcIOData
17{
18std::string specifyFileName(std::string const& project_file_name,
19 std::string const& file_extension)
20{
21#ifdef USE_PETSC
22 int mpi_rank;
23
24 MPI_Comm_rank(BaseLib::MPI::OGS_COMM_WORLD, &mpi_rank);
25 return project_file_name + "_phreeqc_pid_" + std::to_string(mpi_rank) +
26 file_extension;
27#endif
28
29 return project_file_name + "_phreeqc" + file_extension;
30}
31
32BasicOutputSetups::BasicOutputSetups(std::string const& project_file_name,
33 bool const use_high_precision_)
34 : output_file(specifyFileName(project_file_name, ".out")),
35 use_high_precision(use_high_precision_)
36{
37}
38
39std::ostream& operator<<(std::ostream& os,
40 BasicOutputSetups const& basic_output_setups)
41{
42 os << "SELECTED_OUTPUT"
43 << "\n";
44 os << "-file " << basic_output_setups.output_file << "\n";
45 os << "-high_precision " << std::boolalpha
46 << basic_output_setups.use_high_precision << "\n";
47 os << "-simulation " << std::boolalpha
49 os << "-state " << std::boolalpha << BasicOutputSetups::display_state
50 << "\n";
51 os << "-distance " << std::boolalpha << BasicOutputSetups::display_distance
52 << "\n";
53 os << "-time " << std::boolalpha << BasicOutputSetups::display_current_time
54 << "\n";
55 os << "-step " << std::boolalpha << BasicOutputSetups::display_time_step
56 << "\n";
57
58 return os;
59}
60
61std::ostream& operator<<(std::ostream& os, Output const& output)
62{
63 os << output.basic_output_setups;
64
65 auto const component_items =
67 os << "-totals";
68 for (auto const& component_item : component_items)
69 {
70 os << " " << component_item.name;
71 }
72 os << "\n";
73
74 auto const equilibrium_phase_items =
76 if (!equilibrium_phase_items.empty())
77 {
78 os << "-equilibrium_phases";
79 for (auto const& equilibrium_phase_item : equilibrium_phase_items)
80 {
81 os << " " << equilibrium_phase_item.name;
82 }
83 os << "\n";
84 }
85
86 auto const kinetic_reactant_items =
88 if (!kinetic_reactant_items.empty())
89 {
90 os << "-kinetic_reactants";
91 for (auto const& kinetic_reactant_item : kinetic_reactant_items)
92 {
93 os << " " << kinetic_reactant_item.name;
94 }
95 os << "\n";
96 }
97
98 return os;
99}
100} // namespace PhreeqcIOData
101} // namespace ChemistryLib
BasicOutputSetups(std::string const &project_file_name, bool const use_high_precision_)
MPI_Comm OGS_COMM_WORLD
Definition MPI.cpp:9
std::ostream & operator<<(std::ostream &os, PhreeqcIO const &phreeqc_io)
std::string specifyFileName(std::string const &project_file_name, std::string const &file_extension)
Output(BasicOutputSetups &&basic_output_setups_, std::vector< OutputItem > &&accepted_items_, std::vector< int > &&dropped_item_ids_)
std::vector< OutputItem > getOutputItemsByItemType(ItemType item_type) const