OGS
MatrixOutput.h
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#pragma once
5
6#include <fstream>
7#include <functional>
8#include <mutex>
9#include <unordered_set>
10
12
14{
17{
19
20 void operator()(double const t, int const process_id, GlobalMatrix const& M,
21 GlobalMatrix const& K, GlobalVector const& b);
22
23 void operator()(double const t, int const process_id, GlobalVector const& b,
24 GlobalMatrix const& Jac);
25
26private:
27 std::string filenamePrefix_;
28
31 std::size_t counter_ = 0;
32
33 bool do_output_ = false;
34};
35
38{
40
41 void operator()(double const t, int const process_id,
42 std::size_t const element_id,
43 std::vector<double> const& local_M_data,
44 std::vector<double> const& local_K_data,
45 std::vector<double> const& local_b_data);
46
47 void operator()(double const t, int const process_id,
48 std::size_t const element_id,
49 std::vector<double> const& local_b_data,
50 std::vector<double> const& local_Jac_data);
51
53
54private:
55 bool isOutputRequested(std::size_t const element_id) const;
56
57 std::mutex mutex_;
58 std::ofstream outputFile_;
59 std::function<bool(std::size_t)> output_element_predicate_;
60};
61
62namespace detail
63{
64// helper function, exposed for unit testing, only
65std::function<bool(std::size_t)> createLocalMatrixOutputElementPredicate(
66 std::string const& element_ids_str);
67
68// helper function, exposed for unit testing, only
69std::unordered_set<std::size_t> parseSetOfSizeT(std::string const& str,
70 std::string const& warn_msg);
71} // namespace detail
72} // namespace ProcessLib::Assembly
MathLib::EigenMatrix GlobalMatrix
MathLib::EigenVector GlobalVector
std::unordered_set< std::size_t > parseSetOfSizeT(std::string const &str, std::string const &warn_msg)
std::function< bool(std::size_t)> createLocalMatrixOutputElementPredicate(std::string const &element_ids_str)
void operator()(double const t, int const process_id, GlobalMatrix const &M, GlobalMatrix const &K, GlobalVector const &b)
bool isOutputRequested(std::size_t const element_id) const
std::function< bool(std::size_t)> output_element_predicate_
void operator()(double const t, int const process_id, std::size_t const element_id, std::vector< double > const &local_M_data, std::vector< double > const &local_K_data, std::vector< double > const &local_b_data)