Peano
Loading...
Searching...
No Matches
InitialValues.cpp
Go to the documentation of this file.
1#include "InitialValues.h"
2#include "Properties.h"
7#include "Constants.h"
8
9#include "tarch/la/Vector.h"
10
11#include "peano4/utils/Globals.h"
12
13#include <cstring>
14#include <stdio.h>
15#include <string.h>
16
17#ifdef IncludeTwoPunctures
19#endif
20
22 double * NOALIAS Q, // Q[64+0],
23 const tarch::la::Vector<DIMENSIONS,double>& x,
24 double t
25) {
26 constexpr int nVars = 59;
27 constexpr double pi = M_PI;
28 constexpr double peak_number = 2.0;
29 constexpr double ICA = 0.1;
30 double HH = 1.0 - ICA*sin( peak_number*pi*( x[0] - t));
31 double dxH = -peak_number*pi*ICA*cos( peak_number * pi*(x[0] - t));
32 double dxphi = - pow(HH,(-7.0/6.0))*dxH/6.0;
33 double phi = pow(( 1.0 / HH),(1.0/6.0));
34 double Kxx = - 0.5*peak_number*pi*ICA*cos( peak_number * pi*(x[0] - t))/sqrt( 1.0 - ICA*sin( peak_number*pi*( x[0] - t)) );
35 double traceK = Kxx/HH;
36 std::memset(Q, .0, nVars*sizeof(double));
37 Q[0] = phi*phi*HH ; //\tilde(\gamma)_xx
38 Q[3] = phi*phi ; //\tilde(\gamma)_yy
39 Q[5] = phi*phi ; //\tilde(\gamma)_zz
40 Q[6] = phi*phi*(Kxx - 1.0/3.0*traceK*HH ) ; //\tilde(A)_xx
41 Q[9] = phi*phi*(0.0 - 1.0/3.0*traceK*1.0) ; //\tilde(A)_yy
42 Q[11] = phi*phi*(0.0 - 1.0/3.0*traceK*1.0) ; //\tilde(A)_zz
43 Q[16] = sqrt(HH); //\alpha
44 Q[13] = 2.0/(3.0*pow(HH,(5.0/3.0)))*dxH ; //\hat(\Gamma)^x
45 Q[23] = 1.0/(2.0)*dxH*pow(HH,(-1.0/2.0)) ; //A_x
46 Q[35] = pow(HH,(-1.0/3.0))*dxH/3.0 ; //D_xxx
47 Q[38] = phi*dxphi ; //D_xyy
48 Q[40] = phi*dxphi ; //D_xzz
49 Q[53] = traceK; //K
50 Q[54] = phi; //\phi
51 Q[55] = dxphi; //P_x
52}
53
55 double * NOALIAS Q, // Q[64+0],
56 const tarch::la::Vector<DIMENSIONS,double>& x,
57 double t
58) {
59 constexpr int nVars = 59;
60 constexpr double pi = M_PI;
61 constexpr double peak_number = 2.0;
62 constexpr double ICA = 0.1;
63 double phase = peak_number*pi*( x[0] - x[1] - t);
64 double H=1+2.0*ICA*sin(phase);
65 std::memset(Q, .0, nVars*sizeof(double));
66 Q[0] = pow(H,(-1.0/3.0))*(1+ICA*sin(phase)); //\tilde(\gamma)_xx
67 Q[1] = -pow(H,(-1.0/3.0))*(ICA*sin(phase)); //\tilde(\gamma)_xy
68 Q[3] = pow(H,(-1.0/3.0))*(1+ICA*sin(phase)); //\tilde(\gamma)_yy
69 Q[5] = pow(H,(-1.0/3.0)); //\tilde(\gamma)_zz
70 Q[6] = pow(H,(-5.0/6.0))*(peak_number*pi*ICA/2.0)*cos(phase)*(1.0 - 2.0 * (1+ICA*sin(phase)) / (3.0*H) ); //\tilde(A)_xx
71 Q[7] = pow(H,(-5.0/6.0))*(peak_number*pi*ICA/2.0)*cos(phase)*(2.0 * ICA*sin(phase) / (3.0*H) - 1.0 ); //\tilde(A)_xy
72 Q[9] = pow(H,(-5.0/6.0))*(peak_number*pi*ICA/2.0)*cos(phase)*(1.0 - 2.0 * (1+ICA*sin(phase)) / (3.0*H) ); //\tilde(A)_yy
73 Q[11] = pow(H,(-11.0/6.0))*(peak_number*pi*ICA/3.0)*cos(phase); //\tilde(A)_zz
74 Q[13] = pow(H,(-5.0/3.0))*(4.0*peak_number*pi*ICA/3.0)*cos(phase); //\hat(\Gamma)^x
75 Q[14] = -pow(H,(-5.0/3.0))*(4.0*peak_number*pi*ICA/3.0)*cos(phase); //\hat(\Gamma)^y
76 Q[16] = 0.5*log(H); //ln(\alpha)
77 Q[23] = pow(H,-1.0)*(peak_number*pi*ICA)*cos(phase); //A_x
78 Q[24] = -pow(H,-1.0)*(peak_number*pi*ICA)*cos(phase); //A_y
79 Q[35] = pow(H,(-4.0/3.0))*(peak_number*pi*ICA/6.0)*cos(phase)*(1.0 + 4.0 * ICA*sin(phase) ); //D_xxx
80 Q[36] = -pow(H,(-4.0/3.0))*(peak_number*pi*ICA/6.0)*cos(phase)*(3.0 + 4.0 * ICA*sin(phase) ); //D_xxy
81 Q[38] = pow(H,(-4.0/3.0))*(peak_number*pi*ICA/6.0)*cos(phase)*(1.0 + 4.0 * ICA*sin(phase) ); //D_xyy
82 Q[40] = -pow(H,(-4.0/3.0))*(peak_number*pi*ICA/3.0)*cos(phase); //D_xzz
83 Q[41] = -pow(H,(-4.0/3.0))*(peak_number*pi*ICA/6.0)*cos(phase)*(1.0 + 4.0 * ICA*sin(phase) ); //D_yxx
84 Q[42] = pow(H,(-4.0/3.0))*(peak_number*pi*ICA/6.0)*cos(phase)*(3.0 + 4.0 * ICA*sin(phase) ); //D_yxy
85 Q[41] = -pow(H,(-4.0/3.0))*(peak_number*pi*ICA/6.0)*cos(phase)*(1.0 + 4.0 * ICA*sin(phase) ); //D_yyy
86 Q[46] = pow(H,(-4.0/3.0))*(peak_number*pi*ICA/3.0)*cos(phase); //D_yzz
87 Q[53] = pow(H,(-3.0/2.0))*(peak_number*pi*ICA)*cos(phase); //K
88 Q[54] = -(1.0/6.0)*log(H); //ln(\phi)
89 Q[55] = -pow(H,-1.0)*(peak_number*pi*ICA/3.0)*cos(phase); //P_x
90 Q[56] = pow(H,-1.0)*(peak_number*pi*ICA/3.0)*cos(phase); //P_x
91}
92
94 double * NOALIAS Q, // Q[64+0],
95 const tarch::la::Vector<DIMENSIONS,double>& X,
96 double t
97) {
98 constexpr int nVars = 59;
99 constexpr double pi = M_PI;
100 constexpr double peak_number = 2.0;
101 constexpr double ICA = 1e-4;
102 double HH = ICA*sin( peak_number*pi*( X[0] - t));
103 double dxHH = peak_number*pi*ICA*cos( peak_number * pi*(X[0] - t));
104 double dtHH = -peak_number*pi*ICA*cos( peak_number * pi*(X[0] - t));
105 std::memset(Q, .0, nVars*sizeof(double));
106 Q[0] = 1.0 ; //\tilde(\gamma)_xx
107 Q[3] = 1+HH ; //\tilde(\gamma)_yy
108 Q[5] = 1-HH ; //\tilde(\gamma)_zz
109 Q[6] = 0.0 ; //\tilde(A)_xx
110 Q[9] = -0.5*dtHH ; //\tilde(A)_yy
111 Q[11] = 0.5*dtHH ; //\tilde(A)_zz
112 Q[16] = log(1.0) ; //ln(\alpha)
113 Q[35] = 0.0 ; //D_xxx
114 Q[38] = 0.5*dxHH ; //D_xyy
115 Q[40] = -0.5*dxHH ; //D_xzz
116 Q[54] = log(1.0) ; //ln(\phi)
117}
118
120 double * NOALIAS Q, // Q[64+0],
121 const tarch::la::Vector<DIMENSIONS,double>& x,
122 double t
123) {
124 std::memset(Q, .0, 59*sizeof(double));
125 Q[0] = 1.0 ; //\tilde(\gamma)_xx
126 Q[3] = 1.0 ; //\tilde(\gamma)_yy
127 Q[5] = 1.0 ; //\tilde(\gamma)_zz
128 Q[16] = 1.0;
129 Q[54] = 1.0; //\phi
130}
131
132#ifdef IncludeTwoPunctures
134 double * NOALIAS Q, // Q[64+0],
135 const tarch::la::Vector<DIMENSIONS,double>& X,
136 double t,
138 bool low_res
139) {
140 constexpr int nVars = 59;
141 const double coor[3]={X[0],X[1],X[2]};
142 double LgradQ[3*nVars];
143 std::memset(Q, .0, nVars*sizeof(double));
144 tp->Interpolate(coor,Q,low_res); //do the interpolate
145 //std::cout << coor[0] <<coor[1] << coor[2] << "\n";
146 //std::cout << "real quantites without tilde" <<"\n";
147 //for (int i=0;i<nVars;i++){std::cout << i <<"\t"<< Q[i] << "\n";}
148 TP_bindding::SOCCZ4Cal(Q); //calculate corresponding soccz4 quantities
149 //std::cout << "after treatment" <<"\n";
150 //for (int i=0;i<nVars;i++){std::cout << i <<"\t" << Q[i] << "\n";}
151 TP_bindding::GradientCal(coor, Q, LgradQ, nVars, tp, low_res); //calculate gradient for auxiliary variables
152 //for (int d=0;d<3;d++)
153 //for (int i=0;i<nVars;i++) {std::cout << d <<"\t" << i <<"\t" << LgradQ[d*nVars+i] << "\n";}
154 TP_bindding::AuxiliaryCal(Q, LgradQ, nVars); //calculate the auxiliary variables
155 //std::cout << "after treatment" <<"\n";
156 //for (int i=0;i<nVars;i++){std::cout << i <<"\t" << Q[i] << "\n";}
157
158 //exit(0);
159}
160#endif
161
void Interpolate(const double *const pos, double *Q, bool low_res=false)
Interpolation function for an external caller.
void GradientCal(const double *X, double *NOALIAS Q, double *LgradQ, int nVars, TP::TwoPunctures *tp, bool low_res=false)
Definition TP_bindding.h:42
void AuxiliaryCal(double *NOALIAS Q, double *LgradQ, int nVars)
Definition TP_bindding.h:65
void SOCCZ4Cal(double *NOALIAS Q)
Definition TP_bindding.h:10
void diagonal_gaugeWave(double *NOALIAS Q, const tarch::la::Vector< DIMENSIONS, double > &x, double t)
void linearWave(double *NOALIAS Q, const tarch::la::Vector< DIMENSIONS, double > &X, double t)
void ApplyTwoPunctures(double *NOALIAS Q, const tarch::la::Vector< DIMENSIONS, double > &X, double t, TP::TwoPunctures *tp, bool low_res)
void flat(double *NOALIAS Q, const tarch::la::Vector< DIMENSIONS, double > &X, double t)
void gaugeWave(double *NOALIAS Q, const tarch::la::Vector< DIMENSIONS, double > &x, double t)