NeoN
WIP Prototype of a modern OpenFOAM core
Loading...
Searching...
No Matches
timeIntegration.hpp
Go to the documentation of this file.
1// SPDX-License-Identifier: MIT
2//
3// SPDX-FileCopyrightText: 2023 NeoN authors
4
5#pragma once
6
7#include <functional>
8
12
14{
15
16/* @class Factory class to create time integration method by a given name
17 * using NeoNs runTimeFactory mechanism
18 */
19template<typename SolutionType>
22 TimeIntegratorBase<SolutionType>,
23 Parameters<const Dictionary&, const Dictionary&>>
24{
25
26public:
27
28 using ValueType = typename SolutionType::VectorValueType;
30
31 static std::string name() { return "timeIntegrationFactory"; }
32
33 TimeIntegratorBase(const Dictionary& schemeDict, const Dictionary& solutionDict)
34 : schemeDict_(schemeDict), solutionDict_(solutionDict)
35 {}
36
38
39 virtual void solve(
40 Expression& eqn, SolutionType& sol, scalar t, scalar dt
41 ) = 0; // Pure virtual function for solving
42
43 // Pure virtual function for cloning
44 virtual std::unique_ptr<TimeIntegratorBase> clone() const = 0;
45
46protected:
47
50};
51
58template<typename SolutionVectorType>
60{
61
62public:
63
64
65 using ValueType = typename SolutionVectorType::VectorValueType;
67
68 TimeIntegration(const TimeIntegration& timeIntegrator)
69 : timeIntegratorStrategy_(timeIntegrator.timeIntegratorStrategy_->clone()) {};
70
72 : timeIntegratorStrategy_(std::move(timeIntegrator.timeIntegratorStrategy_)) {};
73
74 TimeIntegration(const Dictionary& schemeDict, const Dictionary& solutionDict)
75 : timeIntegratorStrategy_(TimeIntegratorBase<SolutionVectorType>::create(
76 schemeDict.get<std::string>("type"), schemeDict, solutionDict
77 )) {};
78
79 void solve(Expression& eqn, SolutionVectorType& sol, scalar t, scalar dt)
80 {
81 timeIntegratorStrategy_->solve(eqn, sol, t, dt);
82 }
83
84private:
85
86 std::unique_ptr<TimeIntegratorBase<SolutionVectorType>> timeIntegratorStrategy_;
87};
88
89
90} // namespace NeoN::timeIntegration
A class representing a dictionary that stores key-value pairs.
A factory class for runtime selection of derived classes.
TimeIntegration(const Dictionary &schemeDict, const Dictionary &solutionDict)
typename SolutionVectorType::VectorValueType ValueType
TimeIntegration(const TimeIntegration &timeIntegrator)
void solve(Expression &eqn, SolutionVectorType &sol, scalar t, scalar dt)
TimeIntegration(TimeIntegration &&timeIntegrator)
typename SolutionType::VectorValueType ValueType
virtual std::unique_ptr< TimeIntegratorBase > clone() const =0
virtual void solve(Expression &eqn, SolutionType &sol, scalar t, scalar dt)=0
TimeIntegratorBase(const Dictionary &schemeDict, const Dictionary &solutionDict)
float scalar
Definition scalar.hpp:14