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 benchmarks {
22 namespace exahype2 {
23 namespace ccz4 {
24 class CCZ4;
25 }
26 }
27}
28
29
30class benchmarks::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 ) override;
88
89
90
91
92 virtual void boundaryConditions(
93 const double * NOALIAS Qinside, // Qinside[59+0]
94 double * NOALIAS Qoutside, // Qoutside[59+0]
95 const tarch::la::Vector<DIMENSIONS,double>& faceCentre,
96 const tarch::la::Vector<DIMENSIONS,double>& volumeH,
97 double t,
98 int normal
99 ) override;
100
101
102
103 public:
104
105 void sourceTerm(
106 const double * NOALIAS Q,
107 const tarch::la::Vector<DIMENSIONS,double>& volumeCentre,
108 const tarch::la::Vector<DIMENSIONS,double>& volumeH,
109 double t,
110 double dt,
111 double * NOALIAS S
112 ) override;
113
114
115
123 virtual double maxEigenvalue(
124 const double * NOALIAS Q, // Q[59+0],
125 const tarch::la::Vector<DIMENSIONS,double>& faceCentre,
126 const tarch::la::Vector<DIMENSIONS,double>& volumeH,
127 double t,
128 double dt,
129 int normal
130 ) override;
131
132
133
134
135
136
137
138 virtual void nonconservativeProduct(
139 const double * NOALIAS Q, // Q[59+0],
140 const double * NOALIAS deltaQ, // [59+0]
141 const tarch::la::Vector<DIMENSIONS,double>& faceCentre,
142 const tarch::la::Vector<DIMENSIONS,double>& volumeH,
143 double t,
144 double dt,
145 int normal,
146 double * NOALIAS BgradQ // BgradQ[59]
147 ) override;
148
149
150
151
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 memset(S, 0, NumberOfUnknowns*sizeof(double));
176 applications::exahype2::ccz4::source(S,Q, CCZ4LapseType, CCZ4ds, CCZ4c, CCZ4e, CCZ4f, CCZ4bs, CCZ4sk, CCZ4xi, CCZ4itau, CCZ4eta, CCZ4k1, CCZ4k2, CCZ4k3, CCZ4SO);
177 }
178
193 static GPU_CALLABLE_METHOD double maxEigenvalue(
194 const double * NOALIAS Q, // Q[59+0],
195 const tarch::la::Vector<DIMENSIONS,double>& faceCentre,
196 const tarch::la::Vector<DIMENSIONS,double>& volumeH,
197 double t,
198 double dt,
199 int normal,
200 ::exahype2::Solver::Offloadable
201 ) {
202 const double np = 1.0;
203 #if defined(CCZ4EINSTEIN)
204 const double qmin = std::min({Q[0],Q[3],Q[5]});
205 const double alpha = std::max({1.0, Q[16]}) * std::max({1.0, pow(Q[54],1.0/np)}) / std::sqrt(qmin);
206 #else
207 const double alpha = 1.0;
208 #endif
209
210 constexpr double sqrtwo = 1.4142135623730951;
211 // NOTE parameters are stored in abstract superclass
212 const double tempA = alpha * std::max({sqrtwo, CCZ4e, CCZ4ds, CCZ4GLMc/alpha, CCZ4GLMd/alpha});
213 const double tempB = Q[17+normal];//DOT_PRODUCT(Q(18:20),nv(:))
214 double tem = std::max({1.0, std::abs(-tempA-tempB), std::abs(tempA-tempB)});
215 bool flag = false;
216 return tem;
217 }
218
233 static GPU_CALLABLE_METHOD void nonconservativeProduct(
234 const double * NOALIAS Q, // Q[5+0],
235 const double * NOALIAS deltaQ, // [5+0]
236 const tarch::la::Vector<DIMENSIONS,double>& faceCentre,
237 const tarch::la::Vector<DIMENSIONS,double>& volumeH,
238 double t,
239 double dt,
240 int normal,
241 double * NOALIAS BgradQ, // BgradQ[5]
242 ::exahype2::Solver::Offloadable
243 );
244};
245
246
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
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...
void initialCondition(double *NOALIAS Q, const tarch::la::Vector< DIMENSIONS, double > &volumeCentre, const tarch::la::Vector< DIMENSIONS, double > &volumeH) override
Definition CCZ4.cpp:17
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:221
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:208
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:193
::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:69
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:55
static tarch::logging::Log _log
Definition CCZ4.h:32
void prepare(TP::TwoPunctures *tp)
Definition CCZ4.cpp:24
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:169
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.
Definition ccz4.py:1