File indexing completed on 2025-08-05 08:19:15
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019 #pragma once
0020 #include <iosfwd>
0021 #include <algorithm>
0022 #include "inc.h"
0023 class EoS;
0024
0025
0026 int index44(const int &i, const int &j);
0027
0028
0029 class Cell {
0030 private:
0031
0032
0033 double Q[7];
0034 double Qh[7];
0035 double Qprev[7];
0036 double pi[10], piH[10];
0037
0038 double Pi,
0039 PiH;
0040 double pi0[10], piH0[10];
0041 double Pi0, PiH0;
0042 double flux[7];
0043 Cell *next[3];
0044 Cell *prev[3];
0045 double m[3];
0046 double dm[3];
0047 int ix, iy, iz;
0048
0049
0050 double viscCorrCut;
0051
0052 public:
0053 Cell();
0054 ~Cell() {};
0055 inline void setPos(int iix, int iiy, int iiz) {
0056 ix = iix;
0057 iy = iiy;
0058 iz = iiz;
0059 }
0060 inline int getX(void) { return ix; }
0061 inline int getY(void) { return iy; }
0062 inline int getZ(void) { return iz; }
0063
0064 inline void setQ(double *_Q) {
0065 for (int i = 0; i < 7; i++) Q[i] = _Q[i];
0066 if (Q[T_] < 0.) {
0067 for (int i = 0; i < 7; i++) Q[i] = 0.;
0068 }
0069 }
0070 inline void setQh(double *_Qh) {
0071 for (int i = 0; i < 7; i++) Qh[i] = _Qh[i];
0072 if (Qh[T_] < 0.) {
0073 for (int i = 0; i < 7; i++) Qh[i] = 0.;
0074 }
0075 }
0076
0077
0078 inline double getpi(const int &i, const int &j) { return pi[index44(i, j)]; }
0079 inline double getpiH(const int &i, const int &j) {
0080 return piH[index44(i, j)];
0081 }
0082 inline double getpi0(const int &i, const int &j) {
0083 return pi0[index44(i, j)];
0084 }
0085 inline double getpiH0(const int &i, const int &j) {
0086 return piH0[index44(i, j)];
0087 }
0088 inline double getPi(void) { return Pi; }
0089 inline double getPiH(void) { return PiH; }
0090 inline double getPi0(void) { return Pi0; }
0091 inline double getPiH0(void) { return PiH0; }
0092
0093 inline void setpi(const int &i, const int &j, const double &val) {
0094 pi[index44(i, j)] = val;
0095 }
0096 inline void setpiH(const int &i, const int &j, const double &val) {
0097 piH[index44(i, j)] = val;
0098 }
0099 inline void setpi0(const int &i, const int &j, const double &val) {
0100 pi0[index44(i, j)] = val;
0101 }
0102 inline void setpiH0(const int &i, const int &j, const double &val) {
0103 piH0[index44(i, j)] = val;
0104 }
0105 inline void addpi0(const int &i, const int &j, const double &val) {
0106 pi0[index44(i, j)] += val;
0107 }
0108 inline void addpiH0(const int &i, const int &j, const double &val) {
0109 piH0[index44(i, j)] += val;
0110 }
0111 inline void setPi(const double &val) { Pi = val; }
0112 inline void setPiH(const double &val) { PiH = val; }
0113 inline void setPi0(const double &val) { Pi0 = val; }
0114 inline void setPiH0(const double &val) { PiH0 = val; }
0115 inline void addPi0(const double &val) { Pi0 += val; }
0116 inline void addPiH0(const double &val) { PiH0 += val; }
0117
0118 inline void getQ(double *_Q) {
0119 for (int i = 0; i < 7; i++) _Q[i] = Q[i];
0120 }
0121 inline void getQh(double *_Qh) {
0122 for (int i = 0; i < 7; i++) _Qh[i] = Qh[i];
0123 }
0124 inline void saveQprev(void) {
0125 for (int i = 0; i < 7; i++) Qprev[i] = Q[i];
0126 }
0127 inline void setNext(int i, Cell *c) { next[i - 1] = c; }
0128 inline void setPrev(int i, Cell *c) { prev[i - 1] = c; }
0129 inline Cell *getNext(int i) { return next[i - 1]; }
0130 inline Cell *getPrev(int i) { return prev[i - 1]; }
0131
0132 inline void setAllM(double value) { m[0] = m[1] = m[2] = value; }
0133 inline void addM(int dir, double inc) {
0134 m[dir - 1] += inc;
0135 if (m[dir - 1] > 0.9)
0136 for (int i = 0; i < 3; i++) m[i] = 1.;
0137 }
0138 inline double getM(int dir) { return m[dir - 1]; }
0139 inline double getMaxM(void) { return std::max(m[0], std::max(m[1], m[2])); }
0140 inline void setDM(int dir, double value) { dm[dir - 1] = value; }
0141 inline double getDM(int dir) { return dm[dir - 1]; }
0142
0143 inline void setpi0(double values[4][4]) {
0144 for (int i = 0; i < 4; i++)
0145 for (int j = 0; j < 4; j++) pi0[index44(i, j)] = values[i][j];
0146 }
0147 inline void setpiH0(double values[4][4]) {
0148 for (int i = 0; i < 4; i++)
0149 for (int j = 0; j < 4; j++) piH0[index44(i, j)] = values[i][j];
0150 }
0151
0152
0153
0154 void getPrimVar(EoS *eos, double tau, double &_e, double &_p, double &_nb,
0155 double &_nq, double &_ns, double &_vx, double &_vy,
0156 double &_vz);
0157
0158 void getPrimVarLeft(EoS *eos, double tau, double &_e, double &_p, double &_nb,
0159 double &_nq, double &_ns, double &_vx, double &_vy,
0160 double &_vz, int dir);
0161
0162 void getPrimVarRight(EoS *eos, double tau, double &_e, double &_p,
0163 double &_nb, double &_nq, double &_ns, double &_vx,
0164 double &_vy, double &_vz, int dir);
0165
0166
0167
0168 void getPrimVarHLeft(EoS *eos, double tau, double &_e, double &_p,
0169 double &_nb, double &_nq, double &_ns, double &_vx,
0170 double &_vy, double &_vz, int dir);
0171
0172
0173 void getPrimVarHRight(EoS *eos, double tau, double &_e, double &_p,
0174 double &_nb, double &_nq, double &_ns, double &_vx,
0175 double &_vy, double &_vz, int dir);
0176
0177 void getPrimVarHCenter(EoS *eos, double tau, double &_e, double &_p,
0178 double &_nb, double &_nq, double &_ns, double &_vx,
0179 double &_vy, double &_vz);
0180
0181 void getPrimVarPrev(EoS *eos, double tau, double &_e, double &_p, double &_nb,
0182 double &_nq, double &_ns, double &_vx, double &_vy,
0183 double &_vz);
0184
0185 void setPrimVar(EoS *eos, double tau, double _e, double _nb, double _nq,
0186 double _ns, double _vx, double _vy, double _vz);
0187
0188
0189 inline void addFlux(double Ft, double Fx, double Fy, double Fz, double Fnb,
0190 double Fnq, double Fns) {
0191 flux[T_] += Ft;
0192 flux[X_] += Fx;
0193 flux[Y_] += Fy;
0194 flux[Z_] += Fz;
0195 flux[NB_] += Fnb;
0196 flux[NQ_] += Fnq;
0197 flux[NS_] += Fns;
0198 }
0199 inline void clearFlux(void) {
0200 for (int i = 0; i < 7; i++) flux[i] = 0.;
0201 }
0202 void updateByFlux();
0203 void updateQtoQhByFlux();
0204 inline void setViscCorrCutFlag(double value) { viscCorrCut = value; }
0205 inline double getViscCorrCutFlag(void) { return viscCorrCut; }
0206 void Dump(double tau);
0207 };