Peano
CCZ4.h
Go to the documentation of this file.
1 //
2 // ExaHyPE2 solver file
3 // Generated by Peano's Python API
4 // www.peano-framework.org
5 //
6 // This is generated. If you change fundamental properties, you will have to
7 // generate this file. Backup your manual changes before you do so.
8 //
9 #pragma once
10 
11 #include "AbstractCCZ4.h"
12 #include "tarch/logging/Log.h"
13 
14 
15 #include <cstring>
16 #include "InitialValues.h"
17 
18 #include "CCZ4Kernels.h"
19 
20 
21 namespace applications {
22  namespace exahype2 {
23  namespace ccz4 {
24  class CCZ4;
25  }
26  }
27 }
28 
29 
30 class applications::exahype2::ccz4::CCZ4: public AbstractCCZ4 {
31  private:
32  static tarch::logging::Log _log;
33 
34  public:
35  CCZ4();
36 
72  ::exahype2::RefinementCommand refinementCriterion(
73  const double * NOALIAS Q, // Q[59+0],
74  const tarch::la::Vector<DIMENSIONS,double>& volumeCentre,
75  const tarch::la::Vector<DIMENSIONS,double>& volumeH,
76  double t
77  ) override;
78 
79 #ifdef IncludeTwoPunctures
80  void prepare(TP::TwoPunctures* tp);
81 #endif
82 
83  void initialCondition(
84  double * NOALIAS Q,
85  const tarch::la::Vector<DIMENSIONS,double>& volumeCentre,
86  const tarch::la::Vector<DIMENSIONS,double>& volumeH,
87  bool gridIsConstructed
88  ) override;
89 
90 
91 
92 
93  virtual void boundaryConditions(
94  const double * NOALIAS Qinside, // Qinside[59+0]
95  double * NOALIAS Qoutside, // Qoutside[59+0]
96  const tarch::la::Vector<DIMENSIONS,double>& faceCentre,
97  const tarch::la::Vector<DIMENSIONS,double>& volumeH,
98  double t,
99  int normal
100  ) override;
101 
102 
103 
104  public:
105 
106  void sourceTerm(
107  const double * NOALIAS Q,
108  const tarch::la::Vector<DIMENSIONS,double>& volumeCentre,
109  const tarch::la::Vector<DIMENSIONS,double>& volumeH,
110  double t,
111  double dt,
112  double * NOALIAS S
113  ) override;
114 
115 
116 
124  virtual double maxEigenvalue(
125  const double * NOALIAS Q, // Q[59+0],
126  const tarch::la::Vector<DIMENSIONS,double>& faceCentre,
127  const tarch::la::Vector<DIMENSIONS,double>& volumeH,
128  double t,
129  double dt,
130  int normal
131  ) override;
132 
133 
134 
135  virtual void nonconservativeProduct(
136  const double * NOALIAS Q, // Q[59+0],
137  const double * NOALIAS deltaQ, // [59+0]
138  const tarch::la::Vector<DIMENSIONS,double>& faceCentre,
139  const tarch::la::Vector<DIMENSIONS,double>& volumeH,
140  double t,
141  double dt,
142  int normal,
143  double * NOALIAS BgradQ // BgradQ[59]
144  ) override;
145 
146 
147 
148 
163  #if defined(WITH_GPU_OMP_TARGET)
164  #pragma omp declare target
165  #endif
166  static GPU_CALLABLE_METHOD void sourceTerm(
167  const double * NOALIAS Q,
168  const tarch::la::Vector<DIMENSIONS,double>& volumeCentre,
169  const tarch::la::Vector<DIMENSIONS,double>& volumeH,
170  double t,
171  double dt,
172  double * NOALIAS S,
173  ::exahype2::Solver::Offloadable
174  ) {
175  std::memset(S, 0, NumberOfUnknowns*sizeof(double));
176  source(S,Q, CCZ4LapseType, CCZ4ds, CCZ4c, CCZ4e, CCZ4f, CCZ4bs, CCZ4sk, CCZ4xi, CCZ4itau, CCZ4eta, CCZ4k1, CCZ4k2, CCZ4k3, CCZ4SO);
177  }
178  #if defined(WITH_GPU_OMP_TARGET)
179  #pragma omp end declare target
180  #endif
181 
182 
183 
184 
199  #if defined(WITH_GPU_OMP_TARGET)
200  #pragma omp declare target
201  #endif
202  static GPU_CALLABLE_METHOD double maxEigenvalue(
203  const double * NOALIAS Q, // Q[59+0],
204  const tarch::la::Vector<DIMENSIONS,double>& faceCentre,
205  const tarch::la::Vector<DIMENSIONS,double>& volumeH,
206  double t,
207  double dt,
208  int normal,
209  ::exahype2::Solver::Offloadable
210  ) {
211  const double np = 1.0;
212  #if defined(CCZ4EINSTEIN)
213  const double qmin = std::min({Q[0],Q[3],Q[5]});
214  const double alpha = std::max({1.0, Q[16]}) * std::max({1.0, pow(Q[54],1.0/np)}) / std::sqrt(qmin);
215  #else
216  const double alpha = 1.0;
217  #endif
218 
219  constexpr double sqrtwo = 1.4142135623730951;
220  // NOTE parameters are stored in abstract superclass
221  const double tempA = alpha * std::max({sqrtwo, CCZ4e, CCZ4ds, CCZ4GLMc/alpha, CCZ4GLMd/alpha});
222  const double tempB = Q[17+normal];//DOT_PRODUCT(Q(18:20),nv(:))
223  double tem = std::max({1.0, std::abs(-tempA-tempB), std::abs(tempA-tempB)});
224  bool flag = false;
225  return tem;
226  }
227 
228  #if defined(WITH_GPU_OMP_TARGET)
229  #pragma omp end declare target
230  #endif
231 
232 
233 
234 
235 
236 
251  #if defined(WITH_GPU_OMP_TARGET)
252  #pragma omp declare target
253  #endif
254  static GPU_CALLABLE_METHOD void nonconservativeProduct(
255  const double * NOALIAS Q, // Q[5+0],
256  const double * NOALIAS deltaQ, // [5+0]
257  const tarch::la::Vector<DIMENSIONS,double>& faceCentre,
258  const tarch::la::Vector<DIMENSIONS,double>& volumeH,
259  double t,
260  double dt,
261  int normal,
262  double * NOALIAS BgradQ, // BgradQ[5]
263  ::exahype2::Solver::Offloadable
264  );
265  #if defined(WITH_GPU_OMP_TARGET)
266  #pragma omp end declare target
267  #endif
268 
269 };
270 
271 
::exahype2::RefinementCommand refinementCriterion(const double *NOALIAS Q, const tarch::la::Vector< DIMENSIONS, double > &volumeCentre, const tarch::la::Vector< DIMENSIONS, double > &volumeH, double t) override
Refinement criterion.
Definition: CCZ4.cpp:318
static GPU_CALLABLE_METHOD double maxEigenvalue(const double *NOALIAS Q, const tarch::la::Vector< DIMENSIONS, double > &faceCentre, const tarch::la::Vector< DIMENSIONS, double > &volumeH, double t, double dt, int normal, ::exahype2::Solver::Offloadable)
To obtain the best performance, I recommend to man inline command to this signature and to copy the i...
Definition: CCZ4.h:202
virtual void boundaryConditions(const double *NOALIAS Qinside, double *NOALIAS Qoutside, const tarch::la::Vector< DIMENSIONS, double > &faceCentre, const tarch::la::Vector< DIMENSIONS, double > &volumeH, double t, int normal) override
Definition: CCZ4.cpp:231
void prepare(TP::TwoPunctures *tp)
Definition: CCZ4.cpp:21
static tarch::logging::Log _log
Definition: CCZ4.h:32
static GPU_CALLABLE_METHOD void sourceTerm(const double *NOALIAS Q, const tarch::la::Vector< DIMENSIONS, double > &volumeCentre, const tarch::la::Vector< DIMENSIONS, double > &volumeH, double t, double dt, double *NOALIAS S, ::exahype2::Solver::Offloadable)
To obtain the best performance, I recommend to man inline command to this signature and to copy the i...
Definition: CCZ4.h:166
void sourceTerm(const double *NOALIAS Q, const tarch::la::Vector< DIMENSIONS, double > &volumeCentre, const tarch::la::Vector< DIMENSIONS, double > &volumeH, double t, double dt, double *NOALIAS S) override
Definition: CCZ4.cpp:178
virtual void nonconservativeProduct(const double *NOALIAS Q, const double *NOALIAS deltaQ, const tarch::la::Vector< DIMENSIONS, double > &faceCentre, const tarch::la::Vector< DIMENSIONS, double > &volumeH, double t, double dt, int normal, double *NOALIAS BgradQ) override
Definition: CCZ4.cpp:261
virtual double maxEigenvalue(const double *NOALIAS Q, const tarch::la::Vector< DIMENSIONS, double > &faceCentre, const tarch::la::Vector< DIMENSIONS, double > &volumeH, double t, double dt, int normal) override
Determine max eigenvalue over Jacobian in a given point with solution values (states) Q.
Definition: CCZ4.cpp:248
void initialCondition(double *NOALIAS Q, const tarch::la::Vector< DIMENSIONS, double > &volumeCentre, const tarch::la::Vector< DIMENSIONS, double > &volumeH, bool gridIsConstructed) override
Definition: CCZ4.cpp:129
static GPU_CALLABLE_METHOD void nonconservativeProduct(const double *NOALIAS Q, const double *NOALIAS deltaQ, const tarch::la::Vector< DIMENSIONS, double > &faceCentre, const tarch::la::Vector< DIMENSIONS, double > &volumeH, double t, double dt, int normal, double *NOALIAS BgradQ, ::exahype2::Solver::Offloadable)
To obtain the best performance, I recommend to man inline command to this signature and to copy the i...
static double min(double const x, double const y)
static void source(double *S, const double *const Q, const int CCZ4LapseType, const double CCZ4ds, const double CCZ4c, const double CCZ4e, const double CCZ4f, const double CCZ4bs, const double CCZ4sk, const double CCZ4xi, const double CCZ4itau, const double CCZ4eta, const double CCZ4k1, const double CCZ4k2, const double CCZ4k3, const double CCZ4SO)
The source term is one out of two terms that we use in our CCZ4 formulation.
This code is taken from the original ExaHyPE project written by colleagues from the University of Tre...
Definition: CCZ4Kernels.h:14
Definition: ccz4.py:1