Skip to content
Snippets Groups Projects
Commit 3f7cc24b authored by Christoph Lehmann's avatar Christoph Lehmann
Browse files

[PL] Made Jacobian assemblers copyable

parent 64d64b2a
No related branches found
No related tags found
No related merge requests found
......@@ -50,6 +50,8 @@ public:
OGS_FATAL("not implemented.");
}
virtual std::unique_ptr<AbstractJacobianAssembler> copy() const = 0;
virtual ~AbstractJacobianAssembler() = default;
};
......
......@@ -38,4 +38,10 @@ void AnalyticalJacobianAssembler::assembleWithJacobianForStaggeredScheme(
local_b_data, local_Jac_data);
}
std::unique_ptr<AbstractJacobianAssembler> AnalyticalJacobianAssembler::copy()
const
{
return std::make_unique<AnalyticalJacobianAssembler>(*this);
}
} // namespace ProcessLib
......@@ -47,6 +47,8 @@ public:
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<AbstractJacobianAssembler> copy() const override;
};
} // namespace ProcessLib
......@@ -221,4 +221,10 @@ createCentralDifferencesJacobianAssembler(BaseLib::ConfigTree const& config)
std::move(abs_eps));
}
std::unique_ptr<AbstractJacobianAssembler>
CentralDifferencesJacobianAssembler::copy() const
{
return std::make_unique<CentralDifferencesJacobianAssembler>(*this);
}
} // namespace ProcessLib
......@@ -11,12 +11,13 @@
#pragma once
#include <memory>
#include "AbstractJacobianAssembler.h"
namespace BaseLib
{
class ConfigTree;
} // BaseLib
} // namespace BaseLib
namespace ProcessLib
{
......@@ -59,6 +60,8 @@ public:
std::vector<double>& local_b_data,
std::vector<double>& local_Jac_data) override;
std::unique_ptr<AbstractJacobianAssembler> copy() const override;
private:
std::vector<double> const _absolute_epsilons;
......
......@@ -396,6 +396,15 @@ void CompareJacobiansJacobianAssembler::assembleWithJacobian(
}
}
std::unique_ptr<AbstractJacobianAssembler>
CompareJacobiansJacobianAssembler::copy() const
{
OGS_FATAL(
"CompareJacobiansJacobianAssembler should not be copied. This class "
"logs to a file, which would most certainly break after copying "
"(concurrent file access) with the current implementation.");
}
std::unique_ptr<CompareJacobiansJacobianAssembler>
createCompareJacobiansJacobianAssembler(BaseLib::ConfigTree const& config)
{
......@@ -427,5 +436,4 @@ createCompareJacobiansJacobianAssembler(BaseLib::ConfigTree const& config)
std::move(asm1), std::move(asm2), abs_tol, rel_tol, fail_on_error,
log_file);
}
} // namespace ProcessLib
......@@ -13,6 +13,7 @@
#include <fstream>
#include <limits>
#include <memory>
#include "AbstractJacobianAssembler.h"
namespace BaseLib
......@@ -60,6 +61,8 @@ public:
std::vector<double>& local_b_data,
std::vector<double>& local_Jac_data) override;
std::unique_ptr<AbstractJacobianAssembler> copy() const override;
private:
std::unique_ptr<AbstractJacobianAssembler> _asm1;
std::unique_ptr<AbstractJacobianAssembler> _asm2;
......
......@@ -153,4 +153,10 @@ void ForwardDifferencesJacobianAssembler::assembleWithJacobian(
}
}
std::unique_ptr<AbstractJacobianAssembler>
ForwardDifferencesJacobianAssembler::copy() const
{
return std::make_unique<ForwardDifferencesJacobianAssembler>(*this);
}
} // namespace ProcessLib
......@@ -52,6 +52,8 @@ public:
std::vector<double>& local_b_data,
std::vector<double>& local_Jac_data) override;
std::unique_ptr<AbstractJacobianAssembler> copy() const override;
private:
std::vector<double> const _absolute_epsilons;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment