OGS
CompareJacobiansJacobianAssembler.h
Go to the documentation of this file.
1 
11 #pragma once
12 
13 #include <fstream>
14 #include <limits>
15 #include <memory>
17 
18 namespace BaseLib
19 {
20 class ConfigTree;
21 } // namespace BaseLib
22 
23 namespace ProcessLib
24 {
31 {
32 public:
34  std::unique_ptr<AbstractJacobianAssembler>&& asm1,
35  std::unique_ptr<AbstractJacobianAssembler>&& asm2,
36  double abs_tol,
37  double rel_tol,
38  bool fail_on_error,
39  std::string const& log_file_path)
40  : _asm1(std::move(asm1)),
41  _asm2(std::move(asm2)),
42  _abs_tol(abs_tol),
43  _rel_tol(rel_tol),
44  _fail_on_error(fail_on_error),
45  _log_file(log_file_path)
46  {
47  _log_file.precision(std::numeric_limits<double>::digits10);
48  _log_file << "#!/usr/bin/env python\n"
49  "import numpy as np\n"
50  "from numpy import nan\n"
51  << std::endl;
52  }
53 
54  void assembleWithJacobian(LocalAssemblerInterface& local_assembler,
55  double const t, double const dt,
56  std::vector<double> const& local_x,
57  std::vector<double> const& local_xdot,
58  const double dxdot_dx, const double dx_dx,
59  std::vector<double>& local_M_data,
60  std::vector<double>& local_K_data,
61  std::vector<double>& local_b_data,
62  std::vector<double>& local_Jac_data) override;
63 
64 private:
65  std::unique_ptr<AbstractJacobianAssembler> _asm1;
66  std::unique_ptr<AbstractJacobianAssembler> _asm2;
67 
68  // TODO change to matrix
69  double const _abs_tol;
70  double const _rel_tol;
71 
73  bool const _fail_on_error;
74 
77  std::ofstream _log_file;
78 
82  std::size_t _counter = 0;
83 };
84 
85 std::unique_ptr<CompareJacobiansJacobianAssembler>
87 
88 } // namespace ProcessLib
Base class for Jacobian assemblers.
bool const _fail_on_error
Whether to abort if the tolerances are exceeded.
std::unique_ptr< AbstractJacobianAssembler > _asm2
CompareJacobiansJacobianAssembler(std::unique_ptr< AbstractJacobianAssembler > &&asm1, std::unique_ptr< AbstractJacobianAssembler > &&asm2, double abs_tol, double rel_tol, bool fail_on_error, std::string const &log_file_path)
std::unique_ptr< AbstractJacobianAssembler > _asm1
void assembleWithJacobian(LocalAssemblerInterface &local_assembler, double const t, double const dt, std::vector< double > const &local_x, std::vector< double > const &local_xdot, const double dxdot_dx, const double dx_dx, std::vector< double > &local_M_data, std::vector< double > &local_K_data, std::vector< double > &local_b_data, std::vector< double > &local_Jac_data) override
std::unique_ptr< CompareJacobiansJacobianAssembler > createCompareJacobiansJacobianAssembler(BaseLib::ConfigTree const &config)