Analysis Software
Documentation for sPHENIX simulation software
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
cll.cpp
Go to the documentation of this file. Or view the newest version in sPHENIX GitHub for file cll.cpp
1 #include <iostream>
2 #include <fstream>
3 #include <cmath>
4 #include <iomanip>
5 #include "rmn.h"
6 #include "cll.h"
7 
8 using namespace std;
9 
10 // slope limiter; chooses minimal abs of the neighbouring slopes
11 double minmod(double a, double b) {
12  if (a * b <= 0.) return 0.;
13  // else return (a*a*b+a*b*b)/(a*a+b*b) ;
14  if (fabs(a) > fabs(b))
15  return b;
16  else
17  return a;
18 }
19 
20 // index44: returns an index of pi^{mu nu} mu,nu component in a plain 1D array
21 int index44(const int &i, const int &j) {
22  if (i > 3 || j > 3 || i < 0 || j < 0) {
23  std::cout << "index44: i j " << i << " " << j << endl;
24  exit(1);
25  }
26  if (j < i)
27  return (i * (i + 1)) / 2 + j;
28  else
29  return (j * (j + 1)) / 2 + i;
30 }
31 
33  for (int i = 0; i < 7; i++) {
34  Q[i] = 0.;
35  Qh[i] = 0.;
36  Qprev[i] = 0.;
37  flux[i] = 0.;
38  }
39  viscCorrCut = 1.;
40  for (int i = 0; i < 10; i++) {
41  pi[i] = 0.0;
42  piH[i] = 0.0;
43  pi0[i] = 0.0;
44  piH0[i] = 0.0;
45  }
46  Pi = 0.0;
47  PiH = 0.0;
48  Pi0 = 0.0;
49  PiH0 = 0.0;
50  setAllM(0.);
51 }
52 
54  for (int i = 0; i < 7; i++) Q[i] += flux[i];
55 }
56 
58  for (int i = 0; i < 7; i++) Qh[i] = Q[i] + flux[i];
59 }
60 
61 void Cell::getPrimVar(EoS *eos, double tau, double &_e, double &_p, double &_nb,
62  double &_nq, double &_ns, double &_vx, double &_vy,
63  double &_vz) {
64  double _Q[7];
65  for (int i = 0; i < 7; i++) _Q[i] = Q[i] / tau;
66  transformPV(eos, _Q, _e, _p, _nb, _nq, _ns, _vx, _vy, _vz);
67  //-------------------- debug ---------------
68  if (_nb != _nb) {
69  cout << "---error in getPrimVar:\n";
70  Dump(tau);
71  }
72  //------------------------------------------
73 }
74 
75 void Cell::getPrimVarLeft(EoS *eos, double tau, double &_e, double &_p,
76  double &_nb, double &_nq, double &_ns, double &_vx,
77  double &_vy, double &_vz, int dir) {
78  double Qr[7], Ql[7], dQ[7];
79 
80  next[dir - 1]->getQ(Qr);
81  prev[dir - 1]->getQ(Ql);
82 
83  for (int i = 0; i < 7; i++)
84  dQ[i] = minmod((Qr[i] - Q[i]) / 2., (Q[i] - Ql[i]) / 2.);
85 
86  for (int i = 0; i < 7; i++) Ql[i] = (Q[i] - dQ[i]) / tau;
87  // if(Ql[T_]<sqrt(Ql[X_]*Ql[X_]+Ql[Y_]*Ql[Y_]+Ql[Z_]*Ql[Z_]))
88  transformPV(eos, Ql, _e, _p, _nb, _nq, _ns, _vx, _vy, _vz);
89  // else transformPV(eos, Q, _e, _p, _nb, _nq, _ns, _vx, _vy, _vz) ;
90  //-------------------- debug ---------------
91  if (_nb != _nb) {
92  cout << "---error in getPrimVarLeft:\n";
93  Dump(tau);
94  next[dir - 1]->Dump(tau);
95  prev[dir - 1]->Dump(tau);
96  }
97  //------------------------------------------
98 }
99 
100 void Cell::getPrimVarRight(EoS *eos, double tau, double &_e, double &_p,
101  double &_nb, double &_nq, double &_ns, double &_vx,
102  double &_vy, double &_vz, int dir) {
103  double Qr[7], Ql[7], dQ[7];
104 
105  next[dir - 1]->getQ(Qr);
106  prev[dir - 1]->getQ(Ql);
107 
108  for (int i = 0; i < 7; i++)
109  dQ[i] = minmod((Qr[i] - Q[i]) / 2., (Q[i] - Ql[i]) / 2.);
110 
111  for (int i = 0; i < 7; i++) Qr[i] = (Q[i] + dQ[i]) / tau;
112  // if(Qr[T_]<sqrt(Qr[X_]*Qr[X_]+Qr[Y_]*Qr[Y_]+Qr[Z_]*Qr[Z_]))
113  transformPV(eos, Qr, _e, _p, _nb, _nq, _ns, _vx, _vy, _vz);
114  // else transformPV(eos, Q, _e, _p, _nb, _nq, _ns, _vx, _vy, _vz) ;
115  //-------------------- debug ---------------
116  if (_nb != _nb) {
117  cout << "---error in getPrimVarRight:\n";
118  Dump(tau);
119  next[dir - 1]->Dump(tau);
120  prev[dir - 1]->Dump(tau);
121  }
122  //------------------------------------------
123 }
124 
125 void Cell::getPrimVarHLeft(EoS *eos, double tau, double &_e, double &_p,
126  double &_nb, double &_nq, double &_ns, double &_vx,
127  double &_vy, double &_vz, int dir) {
128  double Qr[7], Ql[7], dQ[7];
129 
130  next[dir - 1]->getQh(Qr);
131  prev[dir - 1]->getQh(Ql);
132 
133  for (int i = 0; i < 7; i++)
134  dQ[i] = minmod((Qr[i] - Qh[i]) / 2., (Qh[i] - Ql[i]) / 2.);
135 
136  for (int i = 0; i < 7; i++) Ql[i] = (Qh[i] - dQ[i]) / tau;
137  // if(Ql[T_]<sqrt(Ql[X_]*Ql[X_]+Ql[Y_]*Ql[Y_]+Ql[Z_]*Ql[Z_]))
138  transformPV(eos, Ql, _e, _p, _nb, _nq, _ns, _vx, _vy, _vz);
139  // else transformPV(eos, Qh, _e, _p, _nb, _nq, _ns, _vx, _vy, _vz) ;
140  //-------------------- debug ---------------
141  if (_nb != _nb) {
142  cout << "---error in getPrimVarHLeft:\n";
143  Dump(tau);
144  next[dir - 1]->Dump(tau);
145  prev[dir - 1]->Dump(tau);
146  }
147  //------------------------------------------
148 }
149 
150 void Cell::getPrimVarHRight(EoS *eos, double tau, double &_e, double &_p,
151  double &_nb, double &_nq, double &_ns, double &_vx,
152  double &_vy, double &_vz, int dir) {
153  double Qr[7], Ql[7], dQ[7];
154 
155  next[dir - 1]->getQh(Qr);
156  prev[dir - 1]->getQh(Ql);
157 
158  for (int i = 0; i < 7; i++)
159  dQ[i] = minmod((Qr[i] - Qh[i]) / 2., (Qh[i] - Ql[i]) / 2.);
160 
161  for (int i = 0; i < 7; i++) Qr[i] = (Qh[i] + dQ[i]) / tau;
162  // if(Qr[T_]<sqrt(Qr[X_]*Qr[X_]+Qr[Y_]*Qr[Y_]+Qr[Z_]*Qr[Z_]))
163  transformPV(eos, Qr, _e, _p, _nb, _nq, _ns, _vx, _vy, _vz);
164  // else transformPV(eos, Qh, _e, _p, _nb, _nq, _ns, _vx, _vy, _vz) ;
165  //-------------------- debug ---------------
166  if (_nb != _nb) {
167  cout << "---error in getPrimVarHRight:\n";
168  Dump(tau);
169  next[dir - 1]->Dump(tau);
170  prev[dir - 1]->Dump(tau);
171  }
172  //------------------------------------------
173 }
174 
175 void Cell::getPrimVarHCenter(EoS *eos, double tau, double &_e, double &_p,
176  double &_nb, double &_nq, double &_ns, double &_vx,
177  double &_vy, double &_vz) {
178  double _Q[7];
179  for (int i = 0; i < 7; i++) _Q[i] = Qh[i] / tau;
180  transformPV(eos, _Q, _e, _p, _nb, _nq, _ns, _vx, _vy, _vz);
181 }
182 
183 void Cell::getPrimVarPrev(EoS *eos, double tau, double &_e, double &_p,
184  double &_nb, double &_nq, double &_ns, double &_vx,
185  double &_vy, double &_vz) {
186  double _Q[7];
187  for (int i = 0; i < 7; i++) _Q[i] = Qprev[i] / tau;
188  transformPV(eos, _Q, _e, _p, _nb, _nq, _ns, _vx, _vy, _vz);
189 }
190 
191 
192 void Cell::setPrimVar(EoS *eos, double tau, double _e, double _nb, double _nq,
193  double _ns, double _vx, double _vy, double _vz) {
194  const double gamma2 = 1. / (1 - _vx * _vx - _vy * _vy - _vz * _vz);
195  const double p = eos->p(_e, _nb, _nq, _ns);
196  Q[T_] = tau * (_e + p * (_vx * _vx + _vy * _vy + _vz * _vz)) * gamma2;
197  Q[X_] = tau * (_e + p) * _vx * gamma2;
198  Q[Y_] = tau * (_e + p) * _vy * gamma2;
199  Q[Z_] = tau * (_e + p) * _vz * gamma2;
200  Q[NB_] = tau * _nb * sqrt(gamma2);
201  Q[NQ_] = tau * _nq * sqrt(gamma2);
202  Q[NS_] = tau * _ns * sqrt(gamma2);
203  if (Q[NB_] != Q[NB_]) {
204  cout << "init error!\n";
205  eos->p(_e, _nb, _nq, _ns);
206  cout << "e = " << _e << " p = " << p << " vx = " << _vx << " vy = " << _vy
207  << " vz = " << _vz << " gamma2 = " << gamma2 << endl;
208  // exit(1) ;
209  return;
210  }
211 }
212 
213 void Cell::Dump(double tau) {
214  cout << "---------cell values dump-------\n";
215  cout << setw(5) << ix << setw(5) << iy << setw(5) << iz << endl;
216  cout << setw(14) << Q[0] / tau << setw(14) << Q[1] / tau << setw(14)
217  << Q[2] / tau << setw(14) << Q[3] / tau << endl;
218  cout << setw(14) << Q[4] / tau << setw(14) << Q[5] / tau << setw(14)
219  << Q[6] / tau << endl;
220  cout << setw(14) << Qh[0] / tau << setw(14) << Qh[1] / tau << setw(14)
221  << Qh[2] / tau << setw(14) << Qh[3] / tau << endl;
222  cout << setw(14) << Qh[4] / tau << setw(14) << Qh[5] / tau << setw(14)
223  << Qh[6] / tau << endl;
224 
225  cout << "--------------------------------\n";
226 }