52 for (i = beg; i <= end; i++) {
56 #elif EOS == ISOTHERMAL
67 void Eigenvalues(
double **
v,
double *csound2,
double **lambda,
int beg,
int end)
82 for (i = beg; i <= end; i++){
83 cs = sqrt(csound2[i]);
84 lambda[
i][0] = v[
i][
VXn] - cs;
85 lambda[
i][1] = v[
i][
VXn] + cs;
86 for (k = 2; k <
NFLX; k++) lambda[i][k] = v[i][
VXn];
92 double **LL,
double **RR)
123 double rhocs, rho_cs, cs;
124 #if CHECK_EIGENVECTORS == YES
137 lambda[0] = q[
VXn] - cs;
138 RR[
RHO][0] = 0.5*rho_cs;
141 RR[PRS][0] = 0.5*rhocs;
144 lambda[1] = q[
VXn] + cs;
145 RR[
RHO][1] = 0.5*rho_cs;
148 RR[PRS][1] = 0.5*rhocs;
152 for (k = 2; k <
NFLX; k++) lambda[k] = q[
VXn];
155 EXPAND(RR[
RHO][2] = 1.0; ,
170 LL[0][PRS] = 1.0/rhocs;
171 #elif EOS == ISOTHERMAL
172 LL[0][
RHO] = 1.0/rhocs;
177 LL[1][PRS] = 1.0/rhocs;
178 #elif EOS == ISOTHERMAL
179 LL[1][
RHO] = 1.0/rhocs;
183 EXPAND(LL[2][
RHO] = 1.0; ,
187 LL[2][PRS] = -1.0/cs2;
188 #elif EOS == ISOTHERMAL
204 static double **A, **ALR;
211 print1 (
"! PrimEigenvectors(): eigenvector check requires 3 components\n");
222 for (i = 0; i <
NFLX; i++){
223 for (j = 0; j <
NFLX; j++){
224 A[
i][
j] = ALR[
i][
j] = 0.0;
232 A[PRS][
VXn] = cs2*q[
RHO]; A[PRS][PRS] = q[
VXn];
233 #elif EOS == ISOTHERMAL
241 for (i = 0; i <
NFLX; i++){
242 for (j = 0; j <
NFLX; j++){
244 for (k = 0; k <
NFLX; k++) ALR[i][j] += RR[i][k]*lambda[k]*LL[k][j];
247 for (i = 0; i <
NFLX; i++){
248 for (j = 0; j <
NFLX; j++){
249 dA = ALR[
i][
j] - A[
i][
j];
250 if (fabs(dA) > 1.e-8){
251 print (
"! PrimEigenvectors: eigenvectors not consistent\n");
252 print (
"! A[%d][%d] = %16.9e, R.Lambda.L[%d][%d] = %16.9e\n",
253 i,j, A[i][j], i,j,ALR[i][j]);
254 print (
"! cs2 = %12.6e\n",cs2);
263 for (i = 0; i <
NFLX; i++){
264 for (j = 0; j <
NFLX; j++){
266 for (k = 0; k <
NFLX; k++) a += LL[i][k]*RR[k][j];
267 if ( (i == j && fabs(a-1.0) > 1.e-8) ||
268 (i != j && fabs(a)>1.e-8) ) {
269 print (
"! PrimEigenvectors: Eigenvectors not orthogonal\n");
270 print (
"! i,j = %d, %d %12.6e \n",i,j,a);
280 double **LL,
double **RR,
double *lambda)
298 double H,
a, gt_1, vmag2;
301 print1(
"! ConsEigenvectors: cannot be used presently\n");
313 #if CHECK_EIGENVECTORS == YES
330 #elif EOS == ISOTHERMAL
351 H = 0.5*vmag2 + a2*gt_1;
361 lambda[
k] = v[
VXn] -
a;
364 EXPAND(RR[
MXn][k] = lambda[k]; ,
368 RR[ENG][k] = H - a*v[VXn];
374 lambda[
k] = v[
VXn] +
a;
377 EXPAND(RR[
MXn][k] = lambda[k]; ,
381 RR[ENG][k] = H + a*v[VXn];
391 EXPAND(RR[
MXn][k] = v[VXn]; ,
394 RR[ENG][k] = 0.5*vmag2;
409 #elif EOS == ISOTHERMAL
411 lambda[2] = v[VXn]; RR[
MXt][2] = 1.0; ,
412 lambda[3] = v[
VXn]; RR[
MXb][3] = 1.0;)
423 LL[
k][
RHO] = H + a*gt_1*(v[
VXn] -
a);
424 EXPAND(LL[k][
MXn] = -(v[VXn] + a*gt_1); ,
428 #elif EOS == ISOTHERMAL
437 LL[
k][
RHO] = H - a*gt_1*(v[
VXn] +
a);
438 EXPAND(LL[k][
MXn] = -v[VXn] + a*gt_1; ,
442 #elif EOS == ISOTHERMAL
451 LL[
k][
RHO] = -2.0*H + 4.0*gt_1*a2;
452 EXPAND(LL[k][
MXn] = 2.0*v[VXn]; ,
459 LL[
k][
RHO] = -2.0*v[
VXt]*a2*gt_1;
460 LL[
k][
MXt] = 2.0*a2*gt_1;
466 LL[
k][
RHO] = -2.0*v[
VXb]*a2*gt_1;
467 LL[
k][
MXb] = 2.0*a2*gt_1;
470 for (k = 0; k <
NFLX; k++){
471 for (nv = 0; nv <
NFLX; nv++){
472 LL[
k][nv] *= (
g_gamma - 1.0)/(2.0*a2);
475 #elif EOS == ISOTHERMAL
487 static double **A, **ALR;
488 double dA,
vel2, Bmag2, vB;
494 print (
"! ConsEigenvectors: eigenvector check requires 3 components\n");
505 for (i = 0; i <
NFLX; i++){
506 for (j = 0; j <
NFLX; j++){
507 A[
i][
j] = ALR[
i][
j] = 0.0;
528 A[ENG][
RHO] = 0.5*(
g_gamma - 1.0)*vel2*v[
VXn] - (u[ENG] + v[PRS])/v[
RHO]*v[VXn];
530 A[ENG][
MXn] = (1.0 -
g_gamma)*v[VXn]*v[VXn] + (u[ENG] + v[PRS])/v[
RHO];
536 #elif EOS == ISOTHERMAL
551 for (i = 0; i <
NFLX; i++){
552 for (j = 0; j <
NFLX; j++){
554 for (k = 0; k <
NFLX; k++){
555 ALR[
i][
j] += RR[
i][
k]*lambda[
k]*LL[
k][
j];
559 for (i = 0; i <
NFLX; i++){
560 for (j = 0; j <
NFLX; j++){
561 if (fabs(ALR[i][j] - A[i][j]) > 1.e-6){
562 print (
"! ConsEigenvectors: eigenvectors not consistent\n");
564 print (
"! A[%d][%d] = %16.9e, R.Lambda.L[%d][%d] = %16.9e\n",
565 i,j, A[i][j], i,j,ALR[i][j]);
577 for (i = 0; i <
NFLX; i++){
578 for (j = 0; j <
NFLX; j++){
580 for (k = 0; k <
NFLX; k++) dA += LL[i][k]*RR[k][j];
581 if ( (i == j && fabs(dA-1.0) > 1.e-8) ||
582 (i != j && fabs(dA)>1.e-8) ) {
583 print (
"! ConsEigenvectors: Eigenvectors not orthogonal\n");
584 print (
"! i,j = %d, %d %12.6e \n",i,j,dA);
613 w[0] = L[0][
VXn]*v[
VXn] + L[0][PRS]*v[PRS];
614 w[1] = L[1][
VXn]*v[
VXn] + L[1][PRS]*v[PRS];
615 EXPAND( w[2] = v[
RHO] + L[2][PRS]*v[PRS]; ,
void Eigenvalues(double **v, double *csound2, double **lambda, int beg, int end)
void print1(const char *fmt,...)
void PrimEigenvectors(double *q, double cs2, double h, double *lambda, double **LL, double **RR)
void ShowMatrix(double **, int n, double)
int g_dir
Specifies the current sweep or direction of integration.
void print(const char *fmt,...)
void PrimToChar(double **L, double *v, double *w)
#define CHECK_EIGENVECTORS
void ConsEigenvectors(double *u, double *v, double a2, double **LL, double **RR, double *lambda)
void MaxSignalSpeed(double **v, double *cs2, double *cmin, double *cmax, int beg, int end)
#define ARRAY_2D(nx, ny, type)
#define QUIT_PLUTO(e_code)