Alsvinn  0.5.3
The fast FVM simulator with UQ support
Integrator.hpp
Go to the documentation of this file.
1 /* Copyright (c) 2018 ETH Zurich, Kjetil Olsen Lye
2  * This program is free software: you can redistribute it and/or modify
3  * it under the terms of the GNU General Public License as published by
4  * the Free Software Foundation, either version 3 of the License, or
5  * (at your option) any later version.
6  *
7  * This program is distributed in the hope that it will be useful,
8  * but WITHOUT ANY WARRANTY; without even the implied warranty of
9  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10  * GNU General Public License for more details.
11  *
12  * You should have received a copy of the GNU General Public License
13  * along with this program. If not, see <http://www.gnu.org/licenses/>.
14  */
15 
16 #pragma once
17 #include "alsfvm/volume/Volume.hpp"
20 
21 
22 
23 namespace alsfvm {
24 namespace integrator {
25 
52 class Integrator {
53 public:
54  virtual ~Integrator() {}
59  virtual size_t getNumberOfSubsteps() const = 0;
60 
76  virtual real performSubstep( std::vector<alsfvm::shared_ptr< volume::Volume> >&
77  inputConserved,
78  rvec3 spatialCellSizes, real dt, real cfl,
79  volume::Volume& output, size_t substep,
80  const simulator::TimestepInformation& timestepInformation) = 0;
81 
89  real computeTimestep(const rvec3& waveSpeeds, const rvec3& cellLengths,
90  real cfl,
91  const simulator::TimestepInformation& timestepInformation) const;
92 
97  void addTimestepAdjuster(alsfvm::shared_ptr<TimestepAdjuster>& adjuster);
98 
100 
101 protected:
109  const simulator::TimestepInformation& timestepInformation) const;
110 
111 private:
112  std::vector<alsfvm::shared_ptr<TimestepAdjuster> > timestepAdjusters;
113  std::vector<WaveSpeedAdjusterPtr > waveSpeedAdjusters;
114 
115 };
116 
117 } // namespace alsfvm
118 
119 } // namespace integrator
120 
void addWaveSpeedAdjuster(WaveSpeedAdjusterPtr adjuster)
Definition: Integrator.cpp:53
virtual size_t getNumberOfSubsteps() const =0
The Volume class represents a volume (a collection of cells with values for each cell (eg...
Definition: Volume.hpp:30
alsfvm::shared_ptr< WaveSpeedAdjuster > WaveSpeedAdjusterPtr
Definition: WaveSpeedAdjuster.hpp:30
double real
Definition: types.hpp:65
void addTimestepAdjuster(alsfvm::shared_ptr< TimestepAdjuster > &adjuster)
addTimestepAdjuster adds a timestep adjuster
Definition: Integrator.cpp:48
real adjustTimestep(real dt, const simulator::TimestepInformation &timestepInformation) const
adjustTimestep adjusts the timesteps according to the timestepsadjusters
Definition: Integrator.cpp:57
Definition: Integrator.hpp:52
virtual real performSubstep(std::vector< alsfvm::shared_ptr< volume::Volume > > &inputConserved, rvec3 spatialCellSizes, real dt, real cfl, volume::Volume &output, size_t substep, const simulator::TimestepInformation &timestepInformation)=0
Various utility functions to implement the tecno flux.
Definition: types.hpp:30
real computeTimestep(const rvec3 &waveSpeeds, const rvec3 &cellLengths, real cfl, const simulator::TimestepInformation &timestepInformation) const
Definition: Integrator.cpp:20
virtual ~Integrator()
Definition: Integrator.hpp:54
Definition: TimestepInformation.hpp:22