31 #ifndef PRECOND_H_INCLUDED
32 #define PRECOND_H_INCLUDED
69 REAL c2, mach2, mref2, beta;
74 beta = mref2/(1.0+(gam-1.0)*mref2);
76 return(1.0/(beta*c2));
97 pmat[1][0] = theta*wpvec[1];
98 pmat[2][0] = theta*wpvec[2];
99 pmat[3][0] = theta*wpvec[3];
100 pmat[4][0] = theta*H - 1. - wvec[0]*hp;
103 pmat[1][1] = wvec[0];
106 pmat[4][1] = wvec[1];
110 pmat[2][2] = wvec[0];
112 pmat[4][2] = wvec[2];
117 pmat[3][3] = wvec[0];
118 pmat[4][3] = wvec[3];
121 pmat[1][4] = rhoT*wpvec[1];
122 pmat[2][4] = rhoT*wpvec[2];
123 pmat[3][4] = rhoT*wpvec[3];
124 pmat[4][4] = rhoT*H + wvec[0]*hT;
146 double rrho, Hq2, ra1, d1, d2;
150 ra1 = 1./(wvec[0]*theta*hT + rhoT*(1.-wvec[0]*hp));
154 pmat[0][0] = ra1*(wvec[0]*hT+rhoT*Hq2);
155 pmat[1][0] = -wpvec[1]*rrho;
156 pmat[2][0] = -wpvec[2]*rrho;
157 pmat[3][0] = -wpvec[3]*rrho;
158 pmat[4][0] = ra1*(1.-theta*Hq2-wvec[0]*hp);
160 pmat[0][1] = d1*wpvec[1];
164 pmat[4][1] = -d2*wpvec[1];
166 pmat[0][2] = d1*wpvec[2];
170 pmat[4][2] = -d2*wpvec[2];
172 pmat[0][3] = d1*wpvec[3];
176 pmat[4][3] = -d2*wpvec[3];
203 REAL a1, ra1g, a4, a5, cc2;
205 a1 = wvec[0]*rhop*hT + rhoT*(1.-wvec[0]*hp);
206 ra1g = 1./(wvec[0]*theta*hT + rhoT*(1.-wvec[0]*hp));
208 a5 = wvec[0]*hT*ra1g;
209 cc2 = SQRT(V*V*(a4-1.)*(a4-1.)+4.*a5);
232 lam[3][3] = 0.5*((a4+1.)*V+cc2);
239 lam[4][4] = 0.5*((a4+1.)*V-cc2);
261 REAL a1, a1g, ra1g, a4, a5, a6, a7, cc;
264 a1 = wvec[0]*rhop*hT + rhoT*(1.-wvec[0]*hp);
265 a1g = wvec[0]*theta*hT + rhoT*(1.-wvec[0]*hp);
268 a5 = wvec[0]*hT*ra1g;
269 cc = 0.5*SQRT(V*V*(a4-1.)*(a4-1.)+4.*a5);
271 a7 = (V*(a4-1.))/(4.*cc);
276 evl[0][0] = -h1*nvec[0];
277 evl[1][0] = -h1*nvec[1];
278 evl[2][0] = -h1*nvec[2];
279 evl[3][0] = 0.5 + a7;
280 evl[4][0] = 0.5 - a7;
283 evl[1][1] = -h2*nvec[2];
284 evl[2][1] = h2*nvec[1];
285 evl[3][1] = 0.5*h2*nvec[0];
286 evl[4][1] = -0.5*h2*nvec[0];
288 evl[0][2] = h2*nvec[2];
290 evl[2][2] = -h2*nvec[0];
291 evl[3][2] = 0.5*h2*nvec[1];
292 evl[4][2] = -0.5*h2*nvec[1];
294 evl[0][3] = -h2*nvec[1];
295 evl[1][3] = h2*nvec[0];
297 evl[3][3] = 0.5*h2*nvec[2];
298 evl[4][3] = -0.5*h2*nvec[2];
300 evl[0][4] = -h3*nvec[0];
301 evl[1][4] = -h3*nvec[1];
302 evl[2][4] = -h3*nvec[2];
328 REAL a1, a1g, ra1g, a4, a5, a8, a9, a10, cc;
331 a1 = wvec[0]*rhop*hT + rhoT*(1.-wvec[0]*hp);
332 a1g = wvec[0]*theta*hT + rhoT*(1.-wvec[0]*hp);
335 a5 = wvec[0]*hT*ra1g;
336 cc = 0.5*SQRT(V*V*(a4-1.)*(a4-1.)+4.*a5);
337 a8 = rhoT*wpvec[4]/wvec[0];
339 a10 = a8*H + hT*wpvec[4];
342 h3 = a1g/(wvec[0]*hT);
344 evr[0][0] = -a8*nvec[0];
345 evr[1][0] = -a8*wpvec[1]*nvec[0];
346 evr[2][0] = cc*nvec[2] - a8*wpvec[2]*nvec[0];
347 evr[3][0] = -cc*nvec[1] - a8*wpvec[3]*nvec[0];
348 evr[4][0] = cc*(wpvec[2]*nvec[2]-wpvec[3]*nvec[1]) - a10*nvec[0];
350 evr[0][1] = -a8*nvec[1];
351 evr[1][1] = -cc*nvec[2] - a8*wpvec[1]*nvec[1];
352 evr[2][1] = -a8*wpvec[2]*nvec[1];
353 evr[3][1] = cc*nvec[0] - a8*wpvec[3]*nvec[1];
354 evr[4][1] = cc*(wpvec[3]*nvec[0]-wpvec[1]*nvec[2]) - a10*nvec[1];
356 evr[0][2] = -a8*nvec[2];
357 evr[1][2] = cc*nvec[1] - a8*wpvec[1]*nvec[2];
358 evr[2][2] = -cc*nvec[0] - a8*wpvec[2]*nvec[2];
359 evr[3][2] = -a8*wpvec[3]*nvec[2];
360 evr[4][2] = cc*(wpvec[1]*nvec[1]-wpvec[2]*nvec[0]) - a10*nvec[2];
363 evr[1][3] = wpvec[1] + h1*nvec[0];
364 evr[2][3] = wpvec[2] + h1*nvec[1];
365 evr[3][3] = wpvec[3] + h1*nvec[2];
366 evr[4][3] = H + h1*V;
369 evr[1][4] = wpvec[1] + h2*nvec[0];
370 evr[2][4] = wpvec[2] + h2*nvec[1];
371 evr[3][4] = wpvec[3] + h2*nvec[2];
372 evr[4][4] = H + h2*V;
424 REAL a1, a1g, ra1g, a4, a5, a5rp, a5c, a5c5, a5rt2, a7, cc, a14, a15, a15rt,
425 a16, a16rt, a17, a17rt, h0, rhoT2, vc;
427 a1 = wvec[0]*rhop*hT + rhoT*(1.-wvec[0]*hp);
428 a1g = wvec[0]*theta*hT + rhoT*(1.-wvec[0]*hp);
431 a5 = wvec[0]*hT*ra1g;
432 cc = 0.5*SQRT(V*V*(a4-1.)*(a4-1.)+4.*a5);
433 a7 = V*(a4-1.)/(4.*cc);
434 h0 = (a5*wvec[0])/(a1*wpvec[4]);
438 rhoT2 = (rhoT*rhoT)/(a1*a1g);
439 a5rt2 = a5rp - rhoT2;
440 a14 = h0*(1.-rhop*(H-q2)-wvec[0]*hp);
441 a15 = (H-q2)*rhoT + wvec[0]*hT;
442 a15rt = rhoT*a15/(a1*a1g);
447 vc = nvec[0]*wpvec[1] + nvec[1]*wpvec[2] + nvec[2]*wpvec[3];
449 mat[0][0] = a5c*(nvec[1]*wpvec[3]-nvec[2]*wpvec[2]) - nvec[0]*(a14+a15rt);
450 mat[0][1] = (wpvec[1]*nvec[0])*a5rt2;
451 mat[0][2] = (wpvec[2]*nvec[0])*a5rt2 + a5c*nvec[2];
452 mat[0][3] = (wpvec[3]*nvec[0])*a5rt2 - a5c*nvec[1];
453 mat[0][4] = -nvec[0]*a5rt2;
455 mat[1][0] = a5c*(nvec[2]*wpvec[1]-nvec[0]*wpvec[3]) - nvec[1]*(a14+a15rt);
456 mat[1][1] = (wpvec[1]*nvec[1])*a5rt2 - a5c*nvec[2];
457 mat[1][2] = (wpvec[2]*nvec[1])*a5rt2;
458 mat[1][3] = (wpvec[3]*nvec[1])*a5rt2 + a5c*nvec[0];
459 mat[1][4] = -nvec[1]*a5rt2;
461 mat[2][0] = a5c*(nvec[0]*wpvec[2]-nvec[1]*wpvec[1]) - nvec[2]*(a14+a15rt);
462 mat[2][1] = (wpvec[1]*nvec[2])*a5rt2 + a5c*nvec[1];
463 mat[2][2] = (wpvec[2]*nvec[2])*a5rt2 - a5c*nvec[0];
464 mat[2][3] = (wpvec[3]*nvec[2])*a5rt2;
465 mat[2][4] = -nvec[2]*a5rt2;
467 mat[3][0] = a15*a16 - a5c5*vc;
468 mat[3][1] = a16rt*wpvec[1] + a5c5*nvec[0];
469 mat[3][2] = a16rt*wpvec[2] + a5c5*nvec[1];
470 mat[3][3] = a16rt*wpvec[3] + a5c5*nvec[2];
473 mat[4][0] = a15*a17 + a5c5*vc;
474 mat[4][1] = a17rt*wpvec[1] - a5c5*nvec[0];
475 mat[4][2] = a17rt*wpvec[2] - a5c5*nvec[1];
476 mat[4][3] = a17rt*wpvec[3] - a5c5*nvec[2];
495 REAL a1, a2, a3, a4, a5;
497 a1 = amat[0][0]*bmat[0][0] + amat[0][4]*bmat[4][0];
498 a2 = amat[0][0]*bmat[0][1] + amat[0][4]*bmat[4][1];
499 a3 = amat[0][0]*bmat[0][2] + amat[0][4]*bmat[4][2];
500 a4 = amat[0][0]*bmat[0][3] + amat[0][4]*bmat[4][3];
501 a5 = amat[0][0]*bmat[0][4] + amat[0][4]*bmat[4][4];
504 cmat[1][0] = wpvec[1]*a1 - wpvec[1];
505 cmat[2][0] = wpvec[2]*a1 - wpvec[2];
506 cmat[3][0] = wpvec[3]*a1 - wpvec[3];
507 cmat[4][0] = amat[4][0]*bmat[0][0] + amat[4][4]*bmat[4][0] - q2;
510 cmat[1][1] = wpvec[1]*a2 + 1.;
511 cmat[2][1] = wpvec[2]*a2;
512 cmat[3][1] = wpvec[3]*a2;
513 cmat[4][1] = amat[4][0]*bmat[0][1] + amat[4][4]*bmat[4][1] + wpvec[1];
516 cmat[1][2] = wpvec[1]*a3;
517 cmat[2][2] = wpvec[2]*a3 + 1.;
518 cmat[3][2] = wpvec[3]*a3;
519 cmat[4][2] = amat[4][0]*bmat[0][2] + amat[4][4]*bmat[4][2] + wpvec[2];
522 cmat[1][3] = wpvec[1]*a4;
523 cmat[2][3] = wpvec[2]*a4;
524 cmat[3][3] = wpvec[3]*a4 + 1.;
525 cmat[4][3] = amat[4][0]*bmat[0][3] + amat[4][4]*bmat[4][3] + wpvec[3];
528 cmat[1][4] = wpvec[1]*a5;
529 cmat[2][4] = wpvec[2]*a5;
530 cmat[3][4] = wpvec[3]*a5;
531 cmat[4][4] = amat[4][0]*bmat[0][4] + amat[4][4]*bmat[4][4];
544 c[0] = a[0][0]*v[0] + a[0][1]*v[1] + a[0][2]*v[2] +
545 a[0][3]*v[3] + a[0][4]*v[4];
546 c[1] = a[1][0]*v[0] + a[1][1]*v[1] + a[1][2]*v[2] +
547 a[1][3]*v[3] + a[1][4]*v[4];
548 c[2] = a[2][0]*v[0] + a[2][1]*v[1] + a[2][2]*v[2] +
549 a[2][3]*v[3] + a[2][4]*v[4];
550 c[3] = a[3][0]*v[0] + a[3][1]*v[1] + a[3][2]*v[2] +
551 a[3][3]*v[3] + a[3][4]*v[4];
552 c[4] = a[4][0]*v[0] + a[4][1]*v[1] + a[4][2]*v[2] +
553 a[4][3]*v[3] + a[4][4]*v[4];
562 #endif // PRECOND_H_INCLUDED
REAL ComputeTheta(REAL gam, REAL c, REAL q2) const
Definition: precond.h:67
static void MatprodTp1_P1(REAL wvec[], REAL wpvec[], REAL nvec[], REAL V, REAL H, REAL theta, REAL rhop, REAL rhoT, REAL hp, REAL hT, REAL q2, REAL mat[5][5])
Definition: precond.h:420
REAL machRef2
Definition: precond.h:45
static void Prim2Cons(REAL wvec[], REAL wpvec[], REAL H, REAL theta, REAL rhoT, REAL hp, REAL hT, REAL pmat[5][5])
Definition: precond.h:93
Precond()
Definition: precond.h:52
static void MatrixTimesInverse(REAL wpvec[], REAL q2, REAL amat[5][5], REAL bmat[5][5], REAL cmat[5][5])
Definition: precond.h:492
static void MatVecProd5(REAL a[5][5], REAL v[], REAL c[])
Definition: precond.h:542
static void RightEigenvec(REAL wvec[], REAL wpvec[], REAL nvec[], REAL V, REAL H, REAL theta, REAL rhop, REAL rhoT, REAL hp, REAL hT, REAL evr[5][5])
Definition: precond.h:324
static void Cons2Prim(REAL wvec[], REAL wpvec[], REAL H, REAL q2, REAL theta, REAL rhoT, REAL hp, REAL hT, REAL pmat[5][5])
Definition: precond.h:142
static void Eigenvalues(REAL wvec[], REAL wpvec[], REAL V, REAL theta, REAL rhop, REAL rhoT, REAL hp, REAL hT, REAL lam[5][5])
Definition: precond.h:199
REAL preCoeff
Definition: precond.h:45
double REAL
Definition: defs.h:58
bool switchedOn
Definition: precond.h:44
static void LeftEigenvec(REAL wvec[], REAL wpvec[], REAL nvec[], REAL V, REAL theta, REAL rhop, REAL rhoT, REAL hp, REAL hT, REAL evl[5][5])
Definition: precond.h:257