1#ifndef OUTPUT_CSV_TOOL_H
2#define OUTPUT_CSV_TOOL_H
4#define OUTPUT_CSV_TOOL_VERSION "9"
15#include "../../src/GenericManagingModule.h"
16#include "../../src/ModuleFactory.h"
49 static bool m_registered;
50 std::string m_ini_filepath{
"tools/OutputCsvTool.ini"};
51 std::string m_output_filepath{};
52 std::string m_save_mode{};
53 std::vector<std::string>
57 std::vector<int> m_save_steps{};
58 int m_currentIndex{0};
59 std::ofstream output_file;
62 void _writeDataSurface(
int period);
83 bool exec(std::string_view
param)
override;
97 return std::make_shared<OutputCsvTool<T>>(
sim);
99 static std::string
getName() {
return "OutputCsvTool"; };
100 std::string_view
getNameLocal()
const override {
return "OutputCsvTool"; };
111 this->sim->m_simulation_config.getStringParameters(
"ini_folder_path")};
120 std::cerr <<
"[OutputCsvTool]: " <<
e.what() <<
'\n';
121 throw BadInput(
static_cast<std::string
>(
"[OutputCsvTool]: ")
122 +
static_cast<std::string
>(
e.what()));
131 numerical_layers = this->sim->m_simulation_config.getIntParameters(
"numerical_layers");
134 this->sim->m_simulation_config.getIntParameters(
"global_number_of_facets");
139 if (this->sim->my_rank == 0)
142 std::ofstream
file(m_output_filepath);
146 std::ofstream
file(m_output_filepath);
148 if (m_save_mode ==
"specific_time_steps")
153 this->ini_file_data.getDoubleVectorParameters(
"save_time_steps")};
156 m_save_steps.push_back(
static_cast<int>(
save_steps[
i]));
161 std::cerr <<
"[OutputCsvTool]: " <<
e.what() <<
'\n';
162 throw BadInput(
static_cast<std::string
>(
"[OutputCsvTool]: ")
163 +
static_cast<std::string
>(
e.what()));
172 if (
param ==
"InitChain")
176 if (
param ==
"PreTimeStepChain")
178 return preTimeStep();
180 if (
param ==
"PostNonLinIterChain")
182 return postNonLinIter();
184 if (
param ==
"PostTimeStepChain")
186 return postTimeStep();
188 if (
param ==
"OutputChain")
210 if ((m_save_mode ==
"specific_time_steps") && (m_currentIndex < m_save_steps.size())
211 && (m_save_steps[m_currentIndex] ==
this->sim->time_step))
220 else if ((m_save_mode ==
"specific_time_steps_surface")
221 && (m_currentIndex < m_save_steps.size())
222 && (m_save_steps[m_currentIndex] ==
this->sim->time_step))
226 this->sim->m_simulation_config.getIntParameters(
"numerical_layers"));
228 _writeDataSurface(this->sim->m_simulation_config.getIntParameters(
"numerical_layers"));
232 else if ((m_save_mode ==
"interval")
233 && (this->sim->time_step %
this->ini_file_data.getIntParameters(
"interval") == 0))
241 else if ((m_save_mode ==
"interval_surface")
242 && (this->sim->time_step %
this->ini_file_data.getIntParameters(
"interval") == 0))
246 this->sim->m_simulation_config.getIntParameters(
"numerical_layers"));
248 _writeDataSurface(this->sim->m_simulation_config.getIntParameters(
"numerical_layers"));
252 if (this->sim->elapsed_time +
this->sim->m_simulation_config.getIntParameters(
"time_delta")
253 >
this->sim->m_simulation_config.getIntParameters(
"time_max")
263 std::cerr <<
"[OutputCsvTool]: " <<
e.what() <<
'\n';
264 throw BadInput(
static_cast<std::string
>(
"[OutputCsvTool]: ")
265 +
static_cast<std::string
>(
e.what()));
281 if (m_save_mode ==
"surface")
285 _writeDataSurface(this->sim->m_simulation_config.getIntParameters(
"numerical_layers"));
289 std::cerr <<
"[OutputCsvTool]: " <<
e.what() <<
'\n';
290 throw BadInput(
static_cast<std::string
>(
"[OutputCsvTool]: ")
291 +
static_cast<std::string
>(
e.what()));
311 output_file.open(m_output_filepath, std::ios::app);
315 output_file <<
field_name <<
"," << this->sim->elapsed_time <<
",";
321 output_file <<
field[
i] << std::setprecision(15) <<
",";
323 output_file <<
field[
field.
size() - 1] << std::setprecision(15) <<
"\n";
327 std::cerr <<
"[OutputCsvTool]: " <<
field_name
329 "loaded or accessable!\n "
333 +
static_cast<std::string
>(
" module "
335 "accessable!\n [OutputCsvTool]: ")
336 +
static_cast<std::string
>(
e.what()));
356 std::cerr <<
"[OutputCsvTool]: Trying to access an unopened file. Please also use init and "
358 "when using MPI I/O.\n";
359 throw std::runtime_error(
360 "[OutputCsvTool]: Trying to access an unopened file. Please also use init and output "
392 + std::to_string(
field.
size() *
this->sim->world_size) +
",";
397 std::cerr <<
"[OutputCsvTool]: " <<
field_name
399 "loaded or accessable!\n "
403 +
static_cast<std::string
>(
" module "
405 "accessable!\n [OutputCsvTool]: ")
406 +
static_cast<std::string
>(
e.what()));
423 output_file.open(m_output_filepath, std::ios::app);
427 output_file <<
field_name <<
"," << this->sim->elapsed_time <<
",";
433 output_file <<
field[
i *
period] << std::setprecision(15) <<
",";
439 std::cerr <<
"[OutputCsvTool]: " <<
field_name
441 "loaded or accessable!\n "
445 +
static_cast<std::string
>(
" module "
447 "accessable!\n [OutputCsvTool]:")
448 +
static_cast<std::string
>(
e.what()));
470 std::cerr <<
"[OutputCsvTool]: Trying to access an unopened file. Please also use init and "
472 "when using MPI I/O.\n";
473 throw std::runtime_error(
474 "[OutputCsvTool]: Trying to access an unopened file. Please also use init and output "
507 std::cerr <<
"[OutputCsvTool]: " <<
field_name
509 "loaded or accessable!\n "
513 +
static_cast<std::string
>(
" module "
515 "accessable!\n [OutputCsvTool]: ")
516 +
static_cast<std::string
>(
e.what()));
538 if (this->sim->my_rank <
this->sim->number_of_larger_procs)
549 + (this->sim->my_rank -
this->sim->number_of_larger_procs) *
field.
size())
557 if (this->sim->my_rank <
this->sim->number_of_larger_procs)
567 (this->sim->number_of_larger_procs * (
field.
size() + 1)
568 + (this->sim->my_rank -
this->sim->number_of_larger_procs) *
field.
size())
591 if (this->sim->my_rank == 0)
Concrete implementation of a matrix class representing a Compressed Sparse Rows (CSR) matrix....
Definition CsrMatrix.h:37
CsrSparseMatrix()
Constructor for an empty CsrSparseMatrix object. Leaves all storage arrays empty but sets the flag to...
Definition CsrMatrix.h:94
Abstract base class for the managing modules. Managing modules are the highest tier of modules and ar...
Definition GenericManagingModule.h:29
InputManager ini_file_data
Definition GenericManagingModule.h:38
SimulationClassBase< T > * sim
Definition GenericManagingModule.h:31
std::vector< std::string > m_generic_submodules
Definition GenericManagingModule.h:36
std::pair< int, int > size() const
Function that returns the size of the matrix as a pair in (rows, columns) format.
Definition GenericMatrix.h:120
static constexpr bool registerModule(std::string name, creation_method module) noexcept
Function that adds a module to the module registry map.
Definition ModuleFactory.h:75