PLUTO
pressure_fix.c File Reference

Inversion scheme for RHD using a pressure fix. More...

#include "pluto.h"
Include dependency graph for pressure_fix.c:

Go to the source code of this file.

Macros

#define MAX_ITER   20
 

Functions

static double VelocitySquareFunc (double, Map_param *)
 
int PressureFix (Map_param *par)
 

Detailed Description

Inversion scheme for RHD using a pressure fix.

Fix p to a small value, solve for the square of velocity. This step involved re-computing W at each step of the iteration. Once the root has been found, we recompute total energy E. Return 0 if succesful, 1 otherwise.

Authors
A. Mignone
C. Zanni
Date
Oct 5, 2012

Definition in file pressure_fix.c.

Macro Definition Documentation

#define MAX_ITER   20

Definition at line 19 of file pressure_fix.c.

Function Documentation

int PressureFix ( Map_param par)

Fix p to a small value, solve for the square of velocity by using secant algorithm applied to Eq (9) of Mignone, Plewa & Bodo (2005). This step involved re-computing W at each step of the iteration. Once the root has been found, we recompute total energy E. Return 0 if succesful, 1 otherwise.

Definition at line 22 of file pressure_fix.c.

31 {
32  int k, done=0;
33  double v2, v2c, fc, f, dW, S2_W2;
34  double fmin, fmax, v2min, v2max;
35 
36  par->prs = g_smallPressure;
37 
38  v2max = 1.0-1.e-8;
39  v2c = 0.95;
40  fc = VelocitySquareFunc(v2c, par);
41  v2 = 0.96;
42  for (k = 1; k < MAX_ITER; k++){
43  f = VelocitySquareFunc(v2, par);
44  if (done == 1) break;
45  dW = (v2 - v2c)/(f - fc)*f;
46  v2c = v2; fc = f;
47  v2 -= dW;
48  v2 = MIN(v2max,v2);
49  v2 = MAX(v2, 0.0);
50  if (fabs(f) < 1.e-9) done = 1;
51  }
52  if (v2 >= 1.0 || k >= MAX_ITER) {
53  print ("! PressureFix: too many iter while fixing p , v^2 = %f\n", v2);
54  return (1);
55  }
56 
57 /* -- Redefine energy, density and entropy -- */
58 
59  par->E = par->W - par->prs;
60  par->rho = par->D/par->lor;
61 
62 #if ENTROPY_SWITCH
63 {
64  double rho = par->rho;
65  double th = par->prs/rho;
66  #if EOS == IDEAL
67  par->sigma_c = par->prs*par->lor/pow(rho,g_gamma-1);
68  #elif EOS == TAUB
69  th = par->prs/rho;
70  par->sigma_c = par->prs*par->lor/pow(rho,2.0/3.0)*(1.5*th + sqrt(2.25*th*th + 1.0);
71  #endif
72 }
73 #endif
74 
75  return(0); /* -- success -- */
76 }
#define MAX(a, b)
Definition: macros.h:101
double g_gamma
Definition: globals.h:112
double D
Lab density (input).
Definition: mod_defs.h:86
double g_smallPressure
Small value for pressure fix.
Definition: globals.h:110
#define MIN(a, b)
Definition: macros.h:104
double rho
proper density (output)
Definition: mod_defs.h:91
double W
D*h*lor (output).
Definition: mod_defs.h:92
int k
Definition: analysis.c:2
void print(const char *fmt,...)
Definition: amrPluto.cpp:497
static double VelocitySquareFunc(double, Map_param *)
Definition: pressure_fix.c:79
double lor
Lorentz factor (output).
Definition: mod_defs.h:93
double prs
Thermal pressure (output).
Definition: mod_defs.h:94
double sigma_c
Conserved entropy (input).
Definition: mod_defs.h:87
#define MAX_ITER
Definition: pressure_fix.c:19
double E
Total energy (input).
Definition: mod_defs.h:88
double VelocitySquareFunc ( double  v2,
Map_param par 
)
static

Implement Eq (A3).

Definition at line 79 of file pressure_fix.c.

86 {
87  double lor2, pg;
88 
89  lor2 = 1.0/(1.0 - v2);
90  par->lor = sqrt(lor2);
91  pg = par->prs*par->lor;
92  #if EOS == IDEAL
93  par->W = (par->D + pg*g_gamma/(g_gamma - 1.0))*par->lor;
94  #elif EOS == TAUB
95  par->W = (2.5*pg + sqrt(2.25*pg*pg + par->D*par->D))*par->lor;
96  #endif
97 
98  return par->m2/(par->W*par->W) - v2;
99 }
#define EOS
Definition: pluto.h:341
double g_gamma
Definition: globals.h:112
double m2
Square of total momentum (input).
Definition: mod_defs.h:89
double D
Lab density (input).
Definition: mod_defs.h:86
#define TAUB
Definition: pluto.h:47
double W
D*h*lor (output).
Definition: mod_defs.h:92
double lor
Lorentz factor (output).
Definition: mod_defs.h:93
double prs
Thermal pressure (output).
Definition: mod_defs.h:94

Here is the caller graph for this function: