AMDiS  0.3
The Adaptive Multi-Dimensional Simulation Toolbox
ProblemInstat.hpp
1 #pragma once
2 
3 #include <string>
4 
5 #include <amdis/ProblemInstatBase.hpp>
6 #include <amdis/ProblemStat.hpp>
7 #include <amdis/common/TypeTraits.hpp>
8 
9 namespace AMDiS
10 {
11  // forward declarations
12  class AdaptInfo;
13 
21  template <class Traits>
23  : public ProblemInstatBase
24  {
25  using Self = ProblemInstat;
27 
28  using SolutionVector = typename ProblemType::SolutionVector;
29 
30  public:
32  ProblemInstat(std::string const& name, ProblemType& prob)
33  : ProblemInstatBase(name)
34  , problemStat_(&prob)
35  {}
36 
38  ProblemInstat(std::string const& name, ProblemType& prob, ProblemStatBase& initialProb)
39  : ProblemInstatBase(name, initialProb)
40  , problemStat_(&prob)
41  {}
42 
44  void initialize(Flag initFlag = INIT_NOTHING);
45 
47  void initTimestep(AdaptInfo& adaptInfo) override;
48 
50  void closeTimestep(AdaptInfo& adaptInfo) override;
51 
54  ProblemType const& problemStat() const { return *problemStat_; }
55 
57  std::shared_ptr<SolutionVector const> oldSolutionVector() const
58  {
60  "OldSolution need to be created. Call initialize with INIT_UH_OLD.");
61  return oldSolution_;
62  }
63 
65 
69  template <class Range = void, class... Indices>
70  auto oldSolution(Indices... ii) const
71  {
73  "OldSolution need to be created. Call initialize with INIT_UH_OLD.");
74  return valueOf<Range>(*oldSolution_, ii...);
75  }
76 
78  void transferInitialSolution(AdaptInfo& adaptInfo) override;
79 
80  protected:
82  void createUhOld();
83 
84  protected:
87 
89  std::shared_ptr<SolutionVector> oldSolution_;
90  };
91 
92 
93  // Deduction guides
94  template <class Traits>
95  ProblemInstat(std::string const& name, ProblemStat<Traits>& prob)
97 
98  template <class Traits>
99  ProblemInstat(std::string const& name, ProblemStat<Traits>& prob, ProblemStatBase& initialProb)
101 
102 
103  // mark template as explicitly instantiated in cpp file
104  extern template class ProblemInstat<YaspGridBasis<2,1>>;
105  extern template class ProblemInstat<YaspGridBasis<2,2>>;
106 
107 } // end namespace AMDiS
108 
109 #include "ProblemInstat.inc.hpp"
ProblemInstat(std::string const &name, ProblemType &prob)
Constructs a ProblemInstat with prob as its stationary problem, stored as reference.
Definition: ProblemInstat.hpp:32
The Flag class encapsulates flags which represents simple information. Used e.g. while mesh traversal...
Definition: Flag.hpp:13
void createUhOld()
Used in initialize() to create the oldSolution_.
Definition: ProblemInstat.inc.hpp:39
std::index_sequence< I... > Indices
class that represents a sequence of indices
Definition: Index.hpp:40
void closeTimestep(AdaptInfo &adaptInfo) override
Implementation of ProblemTimeInterface::closeTimestep().
Definition: ProblemInstat.inc.hpp:22
auto oldSolution(Indices... ii) const
Return a const view to a oldSolution component.
Definition: ProblemInstat.hpp:70
void initTimestep(AdaptInfo &adaptInfo) override
Implementation of ProblemTimeInterface::initTimestep().
Definition: ProblemInstat.inc.hpp:51
void test_exit_dbg(bool condition, Args &&... args)
call assert_msg, in debug mode only
Definition: Output.hpp:205
The basic container that stores a base vector and a corresponding basis.
Definition: DOFVector.hpp:27
Contains all classes needed for solving linear and non linear equation systems.
Definition: AdaptBase.hpp:6
ProblemType * problemStat_
Space problem solved in each timestep. (non-owning pointer)
Definition: ProblemInstat.hpp:86
void transferInitialSolution(AdaptInfo &adaptInfo) override
Implementation of ProblemTimeInterface::transferInitialSolution().
Definition: ProblemInstat.inc.hpp:11
Definition: ProblemStat.hpp:52
virtual std::string const & name() const
Return the name of the instationary problem name_.
Definition: ProblemInstatBase.hpp:47
Standard implementation of ProblemTimeInterface for a time dependent problems.
Definition: ProblemInstat.hpp:22
ProblemInstat(std::string const &name, ProblemType &prob, ProblemStatBase &initialProb)
Constructor. Stores a reference to prob and initialProb.
Definition: ProblemInstat.hpp:38
void initialize(Flag initFlag=INIT_NOTHING)
Initialisation of the problem.
Definition: ProblemInstat.inc.hpp:30
Interface for time independent problems. Concrete problems must override all pure virtual methods...
Definition: ProblemStatBase.hpp:58
ProblemType & problemStat()
Returns problemStat.
Definition: ProblemInstat.hpp:53
Holds adapt parameters and infos about the problem.
Definition: AdaptInfo.hpp:25
std::shared_ptr< SolutionVector const > oldSolutionVector() const
Returns const-ref of oldSolution.
Definition: ProblemInstat.hpp:57
Base class for ProblemInstat.
Definition: ProblemInstatBase.hpp:19
std::shared_ptr< SolutionVector > oldSolution_
Solution of the last timestep.
Definition: ProblemInstat.hpp:89