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