OGS
ProcessLib::Assembly::LocalMatrixOutput Struct Reference

Detailed Description

Writes local matrices to disk for debugging purposes.

Definition at line 37 of file MatrixOutput.h.

#include <MatrixOutput.h>

Public Member Functions

 LocalMatrixOutput ()
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)
void operator() (double const t, int const process_id, std::size_t const element_id, std::vector< double > const &local_b_data, std::vector< double > const &local_Jac_data)
 ~LocalMatrixOutput ()

Private Member Functions

bool isOutputRequested (std::size_t const element_id) const

Private Attributes

std::mutex mutex_
std::ofstream outputFile_
std::function< bool(std::size_t)> output_element_predicate_

Constructor & Destructor Documentation

◆ LocalMatrixOutput()

ProcessLib::Assembly::LocalMatrixOutput::LocalMatrixOutput ( )

Definition at line 254 of file MatrixOutput.cpp.

255{
256 auto const opt_prefix = getEnvironmentVariable("OGS_LOCAL_MAT_OUT_PREFIX");
257 auto const opt_elements =
258 getEnvironmentVariable("OGS_LOCAL_MAT_OUT_ELEMENTS");
259
260 if (!opt_prefix)
261 {
262 if (opt_elements)
263 {
264 WARN(
265 "Environment variable OGS_LOCAL_MAT_OUT_ELEMENTS is set, but "
266 "OGS_LOCAL_MAT_OUT_PREFIX is not. Local matrix debug output "
267 "will be disabled.");
268 }
269
270 return;
271 }
272 if (!opt_elements)
273 {
274 WARN(
275 "Environment variable OGS_LOCAL_MAT_OUT_PREFIX is set, but "
276 "OGS_LOCAL_MAT_OUT_ELEMENTS is not. Local matrix debug output "
277 "will be disabled.");
278 return;
279 }
280
283
285 {
286 WARN(
287 "Environment variable OGS_LOCAL_MAT_OUT_ELEMENTS not set "
288 "properly. Local matrix debug output will be disabled.");
289 return;
290 }
291
292 auto const outputFilename = localMatrixOutputFilename(*opt_prefix);
293 outputFile_.open(outputFilename);
294
295 if (!outputFile_)
296 {
297 OGS_FATAL(
298 "File `{}' for local matrix debug output could not be "
299 "opened.",
300 outputFilename);
301 }
302
303 DBUG("Successfully opened local matrix debug output file {}.",
304 outputFilename);
305}
#define OGS_FATAL(...)
Definition Error.h:19
void DBUG(fmt::format_string< Args... > fmt, Args &&... args)
Definition Logging.h:22
void WARN(fmt::format_string< Args... > fmt, Args &&... args)
Definition Logging.h:34
std::function< bool(std::size_t)> createLocalMatrixOutputElementPredicate(std::string const &element_ids_str)
std::string localMatrixOutputFilename(std::string const &filenamePrefix)
static std::optional< std::string > getEnvironmentVariable(std::string const &env_var)
std::function< bool(std::size_t)> output_element_predicate_

References ProcessLib::Assembly::detail::createLocalMatrixOutputElementPredicate(), DBUG(), OGS_FATAL, output_element_predicate_, outputFile_, and WARN().

◆ ~LocalMatrixOutput()

ProcessLib::Assembly::LocalMatrixOutput::~LocalMatrixOutput ( )
default

Member Function Documentation

◆ isOutputRequested()

bool ProcessLib::Assembly::LocalMatrixOutput::isOutputRequested ( std::size_t const element_id) const
private

Definition at line 381 of file MatrixOutput.cpp.

382{
384}

References output_element_predicate_.

Referenced by operator()(), and operator()().

◆ operator()() [1/2]

void ProcessLib::Assembly::LocalMatrixOutput::operator() ( double const t,
int const process_id,
std::size_t const element_id,
std::vector< double > const & local_b_data,
std::vector< double > const & local_Jac_data )

Definition at line 347 of file MatrixOutput.cpp.

351{
352 [[likely]] if (!isOutputRequested(element_id))
353 {
354 return;
355 }
356
357 std::lock_guard lock_guard{mutex_};
358
359 auto& fh = outputFile_;
360
361 DBUG("Writing to local matrix debug output file...");
362
363 fmt::print(fh, "## t = {:.{}g}, process id = {}, element id = {}\n\n", t,
364 std::numeric_limits<double>::max_digits10, process_id,
365 element_id);
366
367 if (!local_b_data.empty())
368 {
369 DBUG("... b");
370 fmt::print(fh, "# b\n{}\n\n", MathLib::toVector(local_b_data));
371 }
372
373 if (!local_Jac_data.empty())
374 {
375 DBUG("... Jac");
376 fmt::print(fh, "# Jac\n{}\n\n\n",
377 toSquareMatrixRowMajor(local_Jac_data));
378 }
379}
Eigen::Map< const Vector > toVector(std::vector< double > const &data, Eigen::VectorXd::Index size)
Creates an Eigen mapped vector from the given data vector.
Eigen::Map< const Eigen::Matrix< double, Eigen::Dynamic, Eigen::Dynamic, Eigen::RowMajor > > toSquareMatrixRowMajor(std::vector< double > entries)
bool isOutputRequested(std::size_t const element_id) const

References DBUG(), isOutputRequested(), mutex_, outputFile_, and MathLib::toVector().

◆ operator()() [2/2]

void ProcessLib::Assembly::LocalMatrixOutput::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 )

Definition at line 307 of file MatrixOutput.cpp.

312{
313 [[likely]] if (!isOutputRequested(element_id))
314 {
315 return;
316 }
317
318 std::lock_guard lock_guard{mutex_};
319
320 auto& fh = outputFile_;
321
322 DBUG("Writing to local matrix debug output file...");
323
324 fmt::print(fh, "## t = {:.{}g}, process id = {}, element id = {}\n\n", t,
325 std::numeric_limits<double>::max_digits10, process_id,
326 element_id);
327
328 if (!local_M_data.empty())
329 {
330 DBUG("... M");
331 fmt::print(fh, "# M\n{}\n\n", toSquareMatrixRowMajor(local_M_data));
332 }
333
334 if (!local_K_data.empty())
335 {
336 DBUG("... K");
337 fmt::print(fh, "# K\n{}\n\n", toSquareMatrixRowMajor(local_K_data));
338 }
339
340 if (!local_b_data.empty())
341 {
342 DBUG("... b");
343 fmt::print(fh, "# b\n{}\n\n", MathLib::toVector(local_b_data));
344 }
345}

References DBUG(), isOutputRequested(), mutex_, outputFile_, and MathLib::toVector().

Member Data Documentation

◆ mutex_

std::mutex ProcessLib::Assembly::LocalMatrixOutput::mutex_
private

Definition at line 57 of file MatrixOutput.h.

Referenced by operator()(), and operator()().

◆ output_element_predicate_

std::function<bool(std::size_t)> ProcessLib::Assembly::LocalMatrixOutput::output_element_predicate_
private

Definition at line 59 of file MatrixOutput.h.

Referenced by LocalMatrixOutput(), and isOutputRequested().

◆ outputFile_

std::ofstream ProcessLib::Assembly::LocalMatrixOutput::outputFile_
private

Definition at line 58 of file MatrixOutput.h.

Referenced by LocalMatrixOutput(), operator()(), and operator()().


The documentation for this struct was generated from the following files: