OGS
CompareJacobiansJacobianAssembler.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 <memory>
7
9
10namespace BaseLib
11{
12class ConfigTree;
13} // namespace BaseLib
14
15namespace ProcessLib
16{
17namespace detail
18{
20} // namespace detail
27{
28 struct Key
29 {
30 // passkey idiom for "private" ctor and std::make_unique
31 };
32
33public:
35 std::unique_ptr<AbstractJacobianAssembler>&& asm1,
36 std::unique_ptr<AbstractJacobianAssembler>&& asm2,
37 double abs_tol_Jac,
38 double rel_tol_Jac,
39 double abs_tol_res,
40 double rel_tol_res,
41 bool fail_on_error,
42 std::string const& log_file_path);
43
45 std::shared_ptr<detail::CompareJacobiansJacobianAssemblerImpl> impl,
46 Key /*key*/);
47
48 void assembleWithJacobian(std::size_t const mesh_item_id,
49 LocalAssemblerInterface& local_assembler,
50 double const t, double const dt,
51 std::vector<double> const& local_x,
52 std::vector<double> const& local_x_prev,
53 std::vector<double>& local_b_data,
54 std::vector<double>& local_Jac_data) override;
55
56 std::unique_ptr<AbstractJacobianAssembler> copy() const override;
57
59 int const max_non_deformation_dofs_per_node) const override;
60
62 std::vector<int> const& non_deformation_component_ids) override;
63
65 std::vector<int> const& non_deformation_component_ids) override;
66
67 bool needsPicardAssembly() const override;
68
69 virtual void preIteration(const unsigned iter) override;
70
71private:
72 // PIMPL idiom to enable copy()
73 std::shared_ptr<detail::CompareJacobiansJacobianAssemblerImpl> impl_;
74};
75
76std::unique_ptr<CompareJacobiansJacobianAssembler>
78
79} // namespace ProcessLib
Base class for Jacobian assemblers.
void assembleWithJacobian(std::size_t const mesh_item_id, LocalAssemblerInterface &local_assembler, double const t, double const dt, std::vector< double > const &local_x, std::vector< double > const &local_x_prev, std::vector< double > &local_b_data, std::vector< double > &local_Jac_data) override
std::unique_ptr< AbstractJacobianAssembler > copy() const override
CompareJacobiansJacobianAssembler(std::unique_ptr< AbstractJacobianAssembler > &&asm1, std::unique_ptr< AbstractJacobianAssembler > &&asm2, double abs_tol_Jac, double rel_tol_Jac, double abs_tol_res, double rel_tol_res, bool fail_on_error, std::string const &log_file_path)
void setNonDeformationComponentIDsNoSizeCheck(std::vector< int > const &non_deformation_component_ids) override
std::shared_ptr< detail::CompareJacobiansJacobianAssemblerImpl > impl_
void checkPerturbationSize(int const max_non_deformation_dofs_per_node) const override
void setNonDeformationComponentIDs(std::vector< int > const &non_deformation_component_ids) override
std::unique_ptr< CompareJacobiansJacobianAssembler > createCompareJacobiansJacobianAssembler(BaseLib::ConfigTree const &config)
Data shared among all copied CompareJacobiansJacobianAssembler instances.