Peano
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,
137  TP::TwoPunctures* tp,
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.
list coor
Definition: CSVConvert.py:67
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)