Skip to content
Snippets Groups Projects
Commit 89b30b76 authored by Elias Pipping's avatar Elias Pipping
Browse files

[Extend] Make time/state updaters cloneable

parent 81b688cb
No related branches found
No related tags found
No related merge requests found
......@@ -46,3 +46,9 @@ void AgeingLawStateUpdater<ScalarVector, Vector>::extractAlpha(
ScalarVector &_alpha) {
_alpha = alpha;
}
template <class ScalarVector, class Vector>
std::shared_ptr<StateUpdater<ScalarVector, Vector>>
AgeingLawStateUpdater<ScalarVector, Vector>::clone() const {
return std::make_shared<AgeingLawStateUpdater<ScalarVector, Vector>>(*this);
}
......@@ -16,6 +16,8 @@ class AgeingLawStateUpdater : public StateUpdater<ScalarVector, Vector> {
void solve(Vector const &velocity_field) override;
void extractAlpha(ScalarVector &) override;
std::shared_ptr<StateUpdater<ScalarVector, Vector>> clone() const;
private:
ScalarVector alpha_o;
ScalarVector alpha;
......
......@@ -35,3 +35,9 @@ void SlipLawStateUpdater<ScalarVector, Vector>::extractAlpha(
ScalarVector &_alpha) {
_alpha = alpha;
}
template <class ScalarVector, class Vector>
std::shared_ptr<StateUpdater<ScalarVector, Vector>>
SlipLawStateUpdater<ScalarVector, Vector>::clone() const {
return std::make_shared<SlipLawStateUpdater<ScalarVector, Vector>>(*this);
}
......@@ -16,6 +16,8 @@ class SlipLawStateUpdater : public StateUpdater<ScalarVector, Vector> {
void solve(Vector const &velocity_field) override;
void extractAlpha(ScalarVector &) override;
std::shared_ptr<StateUpdater<ScalarVector, Vector>> clone() const;
private:
ScalarVector alpha_o;
ScalarVector alpha;
......
......@@ -9,6 +9,8 @@ template <class ScalarVectorTEMPLATE, class Vector> class StateUpdater {
void virtual setup(double _tau) = 0;
void virtual solve(Vector const &velocity_field) = 0;
void virtual extractAlpha(ScalarVector &alpha) = 0;
std::shared_ptr<StateUpdater<ScalarVector, Vector>> virtual clone() const = 0;
};
#endif
......@@ -20,6 +20,10 @@ class TimeSteppingScheme {
void virtual extractVelocity(Vector &velocity) const = 0;
void virtual extractRelativeVelocity(Vector &velocity) const = 0;
void virtual extractOldVelocity(Vector &velocity) const = 0;
std::shared_ptr<
TimeSteppingScheme<Vector, Matrix, Function, dim>> virtual clone()
const = 0;
};
#include "timestepping/newmark.hh"
......
......@@ -147,3 +147,9 @@ void BackwardEuler<Vector, Matrix, Function, dim>::extractOldVelocity(
Vector &velocity) const {
velocity = v_o;
}
template <class Vector, class Matrix, class Function, size_t dim>
std::shared_ptr<TimeSteppingScheme<Vector, Matrix, Function, dim>>
BackwardEuler<Vector, Matrix, Function, dim>::clone() const {
return std::make_shared<BackwardEuler<Vector, Matrix, Function, dim>>(*this);
}
......@@ -21,6 +21,9 @@ class BackwardEuler : public TimeSteppingScheme<Vector, Matrix, Function, dim> {
void extractRelativeVelocity(Vector &) const override;
void extractOldVelocity(Vector &) const override;
std::shared_ptr<TimeSteppingScheme<Vector, Matrix, Function, dim>> clone()
const;
private:
Matrix const &A;
Matrix const &M;
......
......@@ -166,3 +166,9 @@ void Newmark<Vector, Matrix, Function, dim>::extractOldVelocity(
Vector &velocity) const {
velocity = v_o;
}
template <class Vector, class Matrix, class Function, size_t dim>
std::shared_ptr<TimeSteppingScheme<Vector, Matrix, Function, dim>>
Newmark<Vector, Matrix, Function, dim>::clone() const {
return std::make_shared<Newmark<Vector, Matrix, Function, dim>>(*this);
}
......@@ -22,6 +22,9 @@ class Newmark : public TimeSteppingScheme<Vector, Matrix, Function, dim> {
void extractRelativeVelocity(Vector &) const override;
void extractOldVelocity(Vector &) const override;
std::shared_ptr<TimeSteppingScheme<Vector, Matrix, Function, dim>> clone()
const;
private:
Matrix const &A;
Matrix const &M;
......
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