Peano
Loading...
Searching...
No Matches
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
21namespace applications {
22 namespace exahype2 {
23 namespace ccz4 {
24 class CCZ4;
25 }
26 }
27}
28
29
30class 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
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 static GPU_CALLABLE_METHOD void sourceTerm(
164 const double * NOALIAS Q,
165 const tarch::la::Vector<DIMENSIONS,double>& volumeCentre,
166 const tarch::la::Vector<DIMENSIONS,double>& volumeH,
167 double t,
168 double dt,
169 double * NOALIAS S,
170 ::exahype2::Solver::Offloadable
171 ) {
172 std::memset(S, 0, NumberOfUnknowns*sizeof(double));
173 source(S,Q, CCZ4LapseType, CCZ4ds, CCZ4c, CCZ4e, CCZ4f, CCZ4bs, CCZ4sk, CCZ4xi, CCZ4itau, CCZ4eta, CCZ4k1, CCZ4k2, CCZ4k3, CCZ4SO);
174 }
175
176
177
192 static GPU_CALLABLE_METHOD double maxEigenvalue(
193 const double * NOALIAS Q, // Q[59+0],
194 const tarch::la::Vector<DIMENSIONS,double>& faceCentre,
195 const tarch::la::Vector<DIMENSIONS,double>& volumeH,
196 double t,
197 double dt,
198 int normal,
199 ::exahype2::Solver::Offloadable
200 ) {
201 const double np = 1.0;
202 #if defined(CCZ4EINSTEIN)
203 const double qmin = std::min({Q[0],Q[3],Q[5]});
204 const double alpha = std::max({1.0, Q[16]}) * std::max({1.0, pow(Q[54],1.0/np)}) / std::sqrt(qmin);
205 #else
206 const double alpha = 1.0;
207 #endif
208
209 constexpr double sqrtwo = 1.4142135623730951;
210 // NOTE parameters are stored in abstract superclass
211 const double tempA = alpha * std::max({sqrtwo, CCZ4e, CCZ4ds, CCZ4GLMc/alpha, CCZ4GLMd/alpha});
212 const double tempB = Q[17+normal];//DOT_PRODUCT(Q(18:20),nv(:))
213 double tem = std::max({1.0, std::abs(-tempA-tempB), std::abs(tempA-tempB)});
214 bool flag = false;
215 return tem;
216 }
217
232 static GPU_CALLABLE_METHOD void nonconservativeProduct(
233 const double * NOALIAS Q, // Q[5+0],
234 const double * NOALIAS deltaQ, // [5+0]
235 const tarch::la::Vector<DIMENSIONS,double>& faceCentre,
236 const tarch::la::Vector<DIMENSIONS,double>& volumeH,
237 double t,
238 double dt,
239 int normal,
240 double * NOALIAS BgradQ, // BgradQ[5]
241 ::exahype2::Solver::Offloadable
242 );
243};
244
245
::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:304
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:192
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:227
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:163
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:257
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:244
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 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