68 int i,
j,
k, nv,
s, s_RKC = 0;
69 int nv_indx, var_list[
NVAR], nvar_rkc;
70 double kappa_dl2, eta_dl2, nu_dl2;
71 double absh, sprad,
Y;
72 double epsilon = 2./13.;
74 double scrh, scr1, scr2;
75 double mu_j, nu_j, mu_tilde,a_jm1;
76 double Tj, dTj, d2Tj, Tjm1, Tjm2, dTjm1, dTjm2, d2Tjm1, d2Tjm2;
77 double b_j, b_jm1, b_jm2, arg;
79 static Data_Arr Y_jm1, Y_jm2, UU_0, F_0, F_jm1;
81 static unsigned char *flag;
98 for (nv = 0; nv <
NVAR; nv++) var_list[nv] = 0;
99 #if VISCOSITY == RK_CHEBYSHEV
100 EXPAND(var_list[i++] =
MX1; ,
101 var_list[i++] =
MX2; ,
102 var_list[i++] =
MX3;)
106 EXPAND(var_list[i++] =
BX1; ,
107 var_list[i++] =
BX2; ,
108 var_list[i++] =
BX3;)
125 for (nv = NVAR; nv--; ) {
126 v[
i][nv] = d->
Vc[nv][
k][
j][
i];
138 #if SHOCK_FLATTENING == MULTID
145 MPI_Allreduce (&Dts->
inv_dtp, &scrh, 1, MPI_DOUBLE, MPI_MAX, MPI_COMM_WORLD);
167 s_RKC = 1 + (
int)(sqrt(1.54*absh*sprad + 1));
170 if(absh > 0.653*s_RKC*s_RKC/sprad){
171 print1 (
"! RKC: outside parameter range\n");
181 w_0 = 1. + epsilon/(1.*s_RKC)/(1.*s_RKC);
184 arg = s_RKC*log(w_0 + scr2);
185 w_1 = sinh(arg)*scr1/(cosh(arg)*s_RKC*scr2 - w_0*sinh(arg));
186 b_jm1 = 1./(2.*w_0)/(2.*w_0);
188 mu_tilde = w_1*b_jm1;
197 for (nv = 0; nv <
NVAR; nv++) {
198 Y_jm1[
k][
j][
i][nv] = Y_jm2[
k][
j][
i][nv] = UU_0[
k][
j][
i][nv];
200 for (nv_indx = 0; nv_indx < nvar_rkc; nv_indx++){
201 nv = var_list[nv_indx];
202 Y_jm1[
k][
j][
i][nv] = Y_jm2[
k][
j][
i][nv] + mu_tilde*absh*F_0[
k][
j][
i][nv];
210 for (nv = NVAR; nv--; ){
211 d->
Vc[nv][
k][
j][
i] = v[
i][nv];
221 Tjm1 = w_0; Tjm2 = 1.0; dTjm1 = 1.0;
222 dTjm2 = 0.0; d2Tjm1 = 0.0; d2Tjm2 = 0.0;
224 for (s = 2; s <= s_RKC; s++){
228 Tj = 2.*w_0*Tjm1 - Tjm2;
229 dTj = 2.*w_0*dTjm1 - dTjm2 + 2.*Tjm1;
230 d2Tj = 2.*w_0*d2Tjm1 - d2Tjm2 + 4.*dTjm1;
232 a_jm1 = 1. - Tjm1*b_jm1;
233 mu_j = 2.*w_0*b_j/b_jm1;
235 mu_tilde = mu_j*w_1/w_0;
243 for (nv_indx = 0; nv_indx < nvar_rkc; nv_indx++){
244 nv = var_list[nv_indx];
245 Y = mu_j*Y_jm1[
k][
j][
i][nv] + nu_j*Y_jm2[
k][
j][
i][nv];
246 Y_jm2[
k][
j][
i][nv] = Y_jm1[
k][
j][
i][nv];
247 Y_jm1[
k][
j][
i][nv] = Y + (1. - mu_j - nu_j)*UU_0[k][j][i][nv]
248 + absh*mu_tilde*(F_jm1[k][j][i][nv]
249 - a_jm1*F_0[k][j][i][nv]);
255 b_jm2 = b_jm1; b_jm1 = b_j; Tjm2 = Tjm1;
256 Tjm1 = Tj; dTjm2 = dTjm1; dTjm1 = dTj;
257 d2Tjm2 = d2Tjm1; d2Tjm1 = d2Tj;
268 for (nv = NVAR; nv--; ){
269 d->
Vc[nv][
k][
j][
i] = v[
i][nv];
void Boundary(const Data *d, int idim, Grid *grid)
void print1(const char *fmt,...)
long int NX2_TOT
Total number of zones in the X2 direction (boundaries included) for the local processor.
int g_intStage
Gives the current integration stage of the time stepping method (predictor = 0, 1st corrector = 1...
double **** Vc
The main four-index data array used for cell-centered primitive variables.
double g_dt
The current integration time step.
double ParabolicRHS(const Data *d, Data_Arr dU, double dt, Grid *grid)
void FindShock(const Data *, Grid *)
double inv_dtp
Inverse of diffusion (parabolic) time step .
#define THERMAL_CONDUCTION
double cfl_par
Courant number for diffusion (STS only).
int ConsToPrim(double **ucons, double **uprim, int ibeg, int iend, unsigned char *flag)
long int NX3_TOT
Total number of zones in the X3 direction (boundaries included) for the local processor.
#define ARRAY_4D(nx, ny, nz, nv, type)
long int IEND
Upper grid index of the computational domain in the the X1 direction for the local processor...
#define ARRAY_1D(nx, type)
D_EXPAND(tot/[n]=(double) grid[IDIR].np_int_glob;, tot/[n]=(double) grid[JDIR].np_int_glob;, tot/[n]=(double) grid[KDIR].np_int_glob;)
long int NMAX_POINT
Maximum number of points among the three directions, boundaries excluded.
void PrimToCons(double **uprim, double **ucons, int ibeg, int iend)
#define ARRAY_2D(nx, ny, type)
#define QUIT_PLUTO(e_code)
long int NX1_TOT
Total number of zones in the X1 direction (boundaries included) for the local processor.
long int IBEG
Lower grid index of the computational domain in the the X1 direction for the local processor...