NeoN
A framework for CFD software
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 using ValueType = typename SolutionVectorType::VectorValueType;
66
67 TimeIntegration(const TimeIntegration& timeIntegrator)
68 : timeIntegratorStrategy_(timeIntegrator.timeIntegratorStrategy_->clone()) {};
69
71 : timeIntegratorStrategy_(std::move(timeIntegrator.timeIntegratorStrategy_)) {};
72
73 TimeIntegration(const Dictionary& schemeDict, const Dictionary& solutionDict)
74 : timeIntegratorStrategy_(TimeIntegratorBase<SolutionVectorType>::create(
75 schemeDict.get<std::string>("type"), schemeDict, solutionDict
76 )) {};
77
78 void solve(Expression& eqn, SolutionVectorType& sol, scalar t, scalar dt)
79 {
80 timeIntegratorStrategy_->solve(eqn, sol, t, dt);
81 }
82
83private:
84
85 std::unique_ptr<TimeIntegratorBase<SolutionVectorType>> timeIntegratorStrategy_;
86};
87
88
89} // 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