SPH
TimeStepping.h
Go to the documentation of this file.
1 #pragma once
2 
7 
8 #include "common/ForwardDecl.h"
12 
14 
15 class IScheduler;
16 
46 class ITimeStepping : public Polymorphic {
47 protected:
50 
53 
56 
59 
60 public:
65  ITimeStepping(const SharedPtr<Storage>& storage, const RunSettings& settings);
66 
71  const RunSettings& settings,
73 
74  ~ITimeStepping() override;
75 
77  return timeStep;
78  }
79 
80  void step(IScheduler& scheduler, ISolver& solver, Statistics& stats);
81 
82 protected:
83  virtual void stepImpl(IScheduler& scheduler, ISolver& solver, Statistics& stats) = 0;
84 };
85 
86 
88 class EulerExplicit : public ITimeStepping {
89 public:
90  explicit EulerExplicit(const SharedPtr<Storage>& storage, const RunSettings& settings)
91  : ITimeStepping(storage, settings) {}
92 
93  virtual void stepImpl(IScheduler& scheduler, ISolver& solver, Statistics& stats) override;
94 };
95 
98 private:
101  SharedPtr<Storage> predictions;
102 
103 public:
104  PredictorCorrector(const SharedPtr<Storage>& storage, const RunSettings& settings);
105 
107 
108 protected:
109  virtual void stepImpl(IScheduler& scheduler, ISolver& solver, Statistics& stats) override;
110 
111  void makePredictions(IScheduler& scheduler);
112 
113  void makeCorrections(IScheduler& scheduler);
114 };
115 
120 class LeapFrog : public ITimeStepping {
121 public:
123  : ITimeStepping(storage, settings) {}
124 
125 protected:
126  virtual void stepImpl(IScheduler& scheduler, ISolver& solver, Statistics& stats) override;
127 };
128 
129 class RungeKutta : public ITimeStepping {
130 private:
131  SharedPtr<Storage> k1, k2, k3, k4;
132 
133 public:
134  RungeKutta(const SharedPtr<Storage>& storage, const RunSettings& settings);
135 
136  ~RungeKutta() override;
137 
138 protected:
139  virtual void stepImpl(IScheduler& scheduler, ISolver& solver, Statistics& stats) override;
140 
141  void integrateAndAdvance(ISolver& solver, Statistics& stats, Storage& k, const Float m, const Float n);
142 };
143 
144 
146 private:
147  SharedPtr<Storage> mid;
148  Size n;
149 
150 public:
152 
153 protected:
154  virtual void stepImpl(IScheduler& scheduler, ISolver& solver, Statistics& stats) override;
155 };
156 
157 class BulirschStoer : public ITimeStepping {
158 private:
159  Float eps;
160 
161 public:
162  BulirschStoer(const SharedPtr<Storage>& storage, const RunSettings& settings);
163 
164 protected:
165  virtual void stepImpl(IScheduler& scheduler, ISolver& solver, Statistics& stats) override;
166 };
167 
Generic dynamically allocated resizable storage.
NAMESPACE_SPH_BEGIN
Definition: BarnesHut.cpp:13
uint32_t Size
Integral type used to index arrays (by default).
Definition: Globals.h:16
double Float
Precision used withing the code. Use Float instead of float or double where precision is important.
Definition: Globals.h:13
#define INLINE
Macros for conditional compilation based on selected compiler.
Definition: Object.h:31
#define NAMESPACE_SPH_END
Definition: Object.h:12
Basic vector algebra. Computations are accelerated using SIMD.
virtual void stepImpl(IScheduler &scheduler, ISolver &solver, Statistics &stats) override
BulirschStoer(const SharedPtr< Storage > &storage, const RunSettings &settings)
Simple Euler first-order timestepping.
Definition: TimeStepping.h:88
virtual void stepImpl(IScheduler &scheduler, ISolver &solver, Statistics &stats) override
EulerExplicit(const SharedPtr< Storage > &storage, const RunSettings &settings)
Definition: TimeStepping.h:90
Interface that allows unified implementation of sequential and parallelized versions of algorithms.
Definition: Scheduler.h:27
Base class for all solvers.
Definition: ISolver.h:20
Base object providing integration in time for all quantities.
Definition: TimeStepping.h:46
Float timeStep
Current time step.
Definition: TimeStepping.h:52
SharedPtr< Storage > storage
Main storage holding all the particles in the run.
Definition: TimeStepping.h:49
virtual void stepImpl(IScheduler &scheduler, ISolver &solver, Statistics &stats)=0
AutoPtr< ITimeStepCriterion > criterion
Criterion used to compute the time step.
Definition: TimeStepping.h:58
~ITimeStepping() override
INLINE Float getTimeStep() const
Definition: TimeStepping.h:76
Float maxTimeStep
Maximal allowed time step.
Definition: TimeStepping.h:55
void step(IScheduler &scheduler, ISolver &solver, Statistics &stats)
ITimeStepping(const SharedPtr< Storage > &storage, const RunSettings &settings)
Constructs the timestepping, using timestep criteria from parameters in settings.
Leapfrog timestepping.
Definition: TimeStepping.h:120
LeapFrog(const SharedPtr< Storage > &storage, const RunSettings &settings)
Definition: TimeStepping.h:122
virtual void stepImpl(IScheduler &scheduler, ISolver &solver, Statistics &stats) override
ModifiedMidpointMethod(const SharedPtr< Storage > &storage, const RunSettings &settings)
virtual void stepImpl(IScheduler &scheduler, ISolver &solver, Statistics &stats) override
Predictor-corrector second-order timestepping.
Definition: TimeStepping.h:97
virtual void stepImpl(IScheduler &scheduler, ISolver &solver, Statistics &stats) override
void makePredictions(IScheduler &scheduler)
void makeCorrections(IScheduler &scheduler)
PredictorCorrector(const SharedPtr< Storage > &storage, const RunSettings &settings)
~PredictorCorrector() override
virtual void stepImpl(IScheduler &scheduler, ISolver &solver, Statistics &stats) override
void integrateAndAdvance(ISolver &solver, Statistics &stats, Storage &k, const Float m, const Float n)
~RungeKutta() override
RungeKutta(const SharedPtr< Storage > &storage, const RunSettings &settings)
Object holding various statistics about current run.
Definition: Statistics.h:22
Container storing all quantities used within the simulations.
Definition: Storage.h:230
Base class for all polymorphic objects.
Definition: Object.h:88