NeoN
A framework for CFD software
Loading...
Searching...
No Matches
timeIntegration.hpp
Go to the documentation of this file.
1// SPDX-FileCopyrightText: 2023 - 2025 NeoN authors
2//
3// SPDX-License-Identifier: MIT
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
46 virtual bool explicitIntegration() const { return true; }
47
48protected:
49
52};
53
60template<typename SolutionVectorType>
62{
63
64public:
65
66 using ValueType = typename SolutionVectorType::VectorValueType;
68
69 TimeIntegration(const TimeIntegration& timeIntegrator)
70 : timeIntegratorStrategy_(timeIntegrator.timeIntegratorStrategy_->clone()) {};
71
73 : timeIntegratorStrategy_(std::move(timeIntegrator.timeIntegratorStrategy_)) {};
74
75 TimeIntegration(const Dictionary& schemeDict, const Dictionary& solutionDict)
76 : timeIntegratorStrategy_(TimeIntegratorBase<SolutionVectorType>::create(
77 schemeDict.get<std::string>("type"), schemeDict, solutionDict
78 )) {};
79
80 void solve(Expression& eqn, SolutionVectorType& sol, scalar t, scalar dt)
81 {
82 timeIntegratorStrategy_->solve(eqn, sol, t, dt);
83 }
84
85 bool explicitIntegration() const { return timeIntegratorStrategy_->explicitIntegration(); }
86
87private:
88
89 std::unique_ptr<TimeIntegratorBase<SolutionVectorType>> timeIntegratorStrategy_;
90};
91
92
93} // 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:16