25 int flux_compute_general(
int i,
int j,
int k,
int dir,
struct of_geom *ptrgeom,
FTYPE CUf,
FTYPE *p_c,
FTYPE *p_l,
FTYPE *p_r,
FTYPE *F,
FTYPE *ctopallptr)
27 int flux_compute(
int i,
int j,
int k,
int dir,
struct of_geom *geom,
FTYPE *cminmax_l,
FTYPE *cminmax_r,
FTYPE *cminmax,
FTYPE ctopmhd,
FTYPE *cminmaxrad_l,
FTYPE *cminmaxrad_r,
FTYPE *cminmaxrad,
FTYPE ctoprad,
FTYPE CUf,
FTYPE *p_l,
FTYPE *p_r,
FTYPE *U_l,
FTYPE *U_r,
FTYPE *F_l,
FTYPE *F_r,
FTYPE *F);
32 FTYPE ctopmhd,ctoprad,ctoprad2;
33 struct of_state state_c, state_l, state_r;
34 struct of_state *ptrstate_c, *ptrstate_l, *ptrstate_r;
35 FTYPE F_c[NPR], F_l[NPR], F_r[NPR];
36 FTYPE U_c[NPR], U_l[NPR], U_r[NPR];
42 ptrstate_c = &state_c;
43 ptrstate_l = &state_l;
44 ptrstate_r = &state_r;
53 MYFUN(
p2SFUevolve(dir,
ISLEFT, p_l, ptrgeom, &ptrstate_l, F_l, U_l),
"step_ch.c:fluxcalc()",
"p2SFUevolve()", 1);
54 MYFUN(
p2SFUevolve(dir,
ISRIGHT, p_r, ptrgeom, &ptrstate_r, F_r, U_r),
"step_ch.c:fluxcalc()",
"p2SFUevolve()", 2);
58 FTYPE FPAKE[NPR], FPAKE_l[NPR], FPAKE_r[NPR], UPAKE_l[NPR], UPAKE_r[NPR];
59 FTYPE FEN[NPR], FEN_l[NPR], FEN_r[NPR], UEN_l[NPR], UEN_r[NPR];
60 FTYPE FEM[NPR], FEM_l[NPR], FEM_r[NPR], UEM_l[NPR], UEM_r[NPR];
61 FTYPE FRAD[NPR], FRAD_l[NPR], FRAD_r[NPR], URAD_l[NPR], URAD_r[NPR];
62 int p2SFUevolveall(
int dir,
int isleftright,
FTYPE *p,
struct of_geom *ptrgeom,
struct of_state **ptrstate,
FTYPE *FPAKE,
FTYPE *FEN,
FTYPE *FEM,
FTYPE *FRAD,
FTYPE *UPAKE,
FTYPE *UEN,
FTYPE *UEM,
FTYPE *URAD);
63 MYFUN(
p2SFUevolveall(dir,
ISLEFT, p_l, ptrgeom, &ptrstate_l, FPAKE_l, FEN_l, FEM_l, FRAD_l, UPAKE_l, UEN_l, UEM_l, URAD_l),
"step_ch.c:fluxcalc()",
"p2SFUevolve()", 1);
64 MYFUN(
p2SFUevolveall(dir,
ISRIGHT, p_r, ptrgeom, &ptrstate_r, FPAKE_r, FEN_r, FEM_r, FRAD_r, UPAKE_r, UEN_r, UEM_r, URAD_r),
"step_ch.c:fluxcalc()",
"p2SFUevolve()", 2);
70 get_wavespeeds(dir, ptrgeom, p_l, p_r, U_l, U_r, F_l, F_r, ptrstate_l, ptrstate_r, cminmax_l, cminmax_r, cminmax, &ctopmhd, cminmaxrad_l, cminmaxrad_r, cminmaxrad, &ctoprad, cminmaxrad2_l, cminmaxrad2_r, cminmaxrad2, &ctoprad2);
76 *ctopallptr=
MAX(ctopmhd,ctoprad2);
79 *ctopallptr=1.0/sqrt(ptrgeom->gcov[
GIND(dir,dir)]);
83 else *ctopallptr=ctopmhd;
92 MYFUN(
flux_compute(i, j, k, dir, ptrgeom, cminmax_l,cminmax_r, cminmax, ctopmhd, cminmaxrad_l,cminmaxrad_r, cminmaxrad, ctoprad, CUf, p_l, p_r, U_l, U_r, F_l, F_r, F),
"step_ch.c:fluxcalc()",
"flux_compute", 1);
98 PLOOP(pliter,pl) GLOBALMACP0A1(fluxdump,i,j,k,0*NPR + pl)=F[pl];
101 MYFUN(
flux_compute(i, j, k, dir, ptrgeom, cminmax_l,cminmax_r, cminmax, ctopmhd, cminmaxrad_l,cminmaxrad_r, cminmaxrad, ctoprad, CUf, p_l, p_r, UPAKE_l, UPAKE_r, FPAKE_l, FPAKE_r, FPAKE),
"step_ch.c:fluxcalc()",
"flux_compute", 1);
102 PLOOP(pliter,pl) GLOBALMACP0A1(fluxdump,i,j,k,1*NPR + pl)=FPAKE[pl];
104 MYFUN(
flux_compute(i, j, k, dir, ptrgeom, cminmax_l,cminmax_r, cminmax, ctopmhd, cminmaxrad_l,cminmaxrad_r, cminmaxrad, ctoprad, CUf, p_l, p_r, UEN_l, UEN_r, FEN_l, FEN_r, FEN),
"step_ch.c:fluxcalc()",
"flux_compute", 1);
105 PLOOP(pliter,pl) GLOBALMACP0A1(fluxdump,i,j,k,2*NPR + pl)=FEN[pl];
107 MYFUN(
flux_compute(i, j, k, dir, ptrgeom, cminmax_l,cminmax_r, cminmax, ctopmhd, cminmaxrad_l,cminmaxrad_r, cminmaxrad, ctoprad, CUf, p_l, p_r, UEM_l, UEM_r, FEM_l, FEM_r, FEM),
"step_ch.c:fluxcalc()",
"flux_compute", 1);
108 PLOOP(pliter,pl) GLOBALMACP0A1(fluxdump,i,j,k,3*NPR + pl)=FEM[pl];
111 MYFUN(
flux_compute(i, j, k, dir, ptrgeom, cminmax_l,cminmax_r, cminmax, ctopmhd, cminmaxrad_l,cminmaxrad_r, cminmaxrad, ctoprad, CUf, p_l, p_r, URAD_l, URAD_r, FRAD_l, FRAD_r, FRAD),
"step_ch.c:fluxcalc()",
"flux_compute", 1);
112 PLOOP(pliter,pl) GLOBALMACP0A1(fluxdump,i,j,k,4*NPR + pl)=FRAD[pl];
118 diag_fluxdump_1(dir,i,j,k,p_l, p_r, F_l, F_r);
129 int flux_compute_splitmaem(
int i,
int j,
int k,
int dir,
struct of_geom *ptrgeom,
FTYPE CUf,
FTYPE *p_c,
FTYPE *p_l,
FTYPE *p_r,
FTYPE *F,
FTYPE *FEM,
FTYPE *ctopallptr)
131 int flux_compute(
int i,
int j,
int k,
int dir,
struct of_geom *geom,
FTYPE *cminmax_l,
FTYPE *cminmax_r,
FTYPE *cminmax,
FTYPE ctopmhd,
FTYPE *cminmaxrad_l,
FTYPE *cminmaxrad_r,
FTYPE *cminmaxrad,
FTYPE ctoprad,
FTYPE CUf,
FTYPE *p_l,
FTYPE *p_r,
FTYPE *U_l,
FTYPE *U_r,
FTYPE *F_l,
FTYPE *F_r,
FTYPE *F);
136 FTYPE ctopmhd,ctoprad,ctoprad2;
137 struct of_state state_c, state_l, state_r;
138 struct of_state *ptrstate_c, *ptrstate_l, *ptrstate_r;
139 FTYPE F_c[NPR], F_l[NPR], F_r[NPR];
140 FTYPE U_c[NPR], U_l[NPR], U_r[NPR];
141 FTYPE FEM_c[NPR], FEM_l[NPR], FEM_r[NPR];
142 FTYPE UEM_c[NPR], UEM_l[NPR], UEM_r[NPR];
148 ptrstate_c = &state_c;
149 ptrstate_l = &state_l;
150 ptrstate_r = &state_r;
158 MYFUN(p2SFUevolve_splitmaem(dir,
ISLEFT, p_l, ptrgeom, &ptrstate_l, F_l, FEM_l, U_l, UEM_l),
"step_ch.c:fluxcalc()",
"p2SFUevolve()", 1);
159 MYFUN(p2SFUevolve_splitmaem(dir,
ISRIGHT, p_r, ptrgeom, &ptrstate_r, F_r, FEM_r, U_r, UEM_r),
"step_ch.c:fluxcalc()",
"p2SFUevolve()", 2);
163 get_wavespeeds(dir, ptrgeom, p_l, p_r, U_l, U_r, F_l, F_r, ptrstate_l, ptrstate_r, cminmax_l, cminmax_r, cminmax, &ctopmhd, cminmaxrad_l, cminmaxrad_r, cminmaxrad, &ctoprad, cminmaxrad2_l, cminmaxrad2_r, cminmaxrad2, &ctoprad2);
170 *ctopallptr=
MAX(ctopmhd,ctoprad2);
172 else *ctopallptr=ctopmhd;
180 MYFUN(
flux_compute(i, j, k, dir, ptrgeom, cminmax_l,cminmax_r, cminmax, ctopmhd, cminmaxrad_l,cminmaxrad_r, cminmaxrad, ctoprad, CUf, p_l, p_r, U_l, U_r, F_l, F_r, F),
"step_ch.c:fluxcalc()",
"flux_compute", 1);
182 MYFUN(
flux_compute(i, j, k, dir, ptrgeom, cminmax_l,cminmax_r, cminmax, ctopmhd, cminmaxrad_l,cminmaxrad_r, cminmaxrad, ctoprad, CUf, p_l, p_r, UEM_l, UEM_r, FEM_l, FEM_r, FEM),
"step_ch.c:fluxcalc()",
"flux_compute", 1);
189 diag_fluxdump_1(dir,i,j,k,p_l, p_r, F_l, F_r);
210 MYFUN(
primtoflux(
UEVOLVE,p, *ptrstate, dir, ptrgeom, F, NULL),
"flux.c:p2SFUevolve()",
"primtoflux_calc() dir=1/2 l", 1);
211 MYFUN(
primtoflux(
UEVOLVE,p, *ptrstate,
TT, ptrgeom, U, NULL),
"flux.c:p2SFUevolve()",
"primtoflux_calc() dir=l0", 1);
218 int p2SFUevolveall(
int dir,
int isleftright,
FTYPE *
p,
struct of_geom *ptrgeom,
struct of_state **ptrstate,
FTYPE *FPAKE,
FTYPE *FEN,
FTYPE *FEM,
FTYPE *FRAD,
FTYPE *UPAKE,
FTYPE *UEN,
FTYPE *UEM,
FTYPE *URAD)
233 PLOOP(pliter,pl) ptemp[pl] = p[pl]; qtemp=**ptrstate;
236 if(URAD0>=0) ptemp[URAD0]=
SMALL;
237 MYFUN(
primtoflux(
UEVOLVE,ptemp, &qtemp, dir, ptrgeom, FPAKE,NULL),
"flux.c:p2SFUevolve()",
"primtoflux_calc() dir=1/2 l", 1);
238 MYFUN(
primtoflux(
UEVOLVE,ptemp, &qtemp,
TT, ptrgeom, UPAKE,NULL),
"flux.c:p2SFUevolve()",
"primtoflux_calc() dir=l0", 1);
242 if(URAD0>=0) ptemp[URAD0]=
SMALL;
243 MYFUN(
primtoflux(
UEVOLVE,ptemp, &qtemp, dir, ptrgeom, FEN,NULL),
"flux.c:p2SFUevolve()",
"primtoflux_calc() dir=1/2 l", 1);
244 MYFUN(
primtoflux(
UEVOLVE,ptemp, &qtemp,
TT, ptrgeom, UEN,NULL),
"flux.c:p2SFUevolve()",
"primtoflux_calc() dir=l0", 1);
248 if(URAD0>=0) ptemp[URAD0]=
SMALL;
249 MYFUN(
primtoflux(
UEVOLVE,ptemp, &qtemp, dir, ptrgeom, FEM,NULL),
"flux.c:p2SFUevolve()",
"primtoflux_calc() dir=1/2 l", 1);
250 MYFUN(
primtoflux(
UEVOLVE,ptemp, &qtemp,
TT, ptrgeom, UEM,NULL),
"flux.c:p2SFUevolve()",
"primtoflux_calc() dir=l0", 1);
256 MYFUN(
primtoflux(
UEVOLVE,ptemp, &qtemp, dir, ptrgeom, FRAD,NULL),
"flux.c:p2SFUevolve()",
"primtoflux_calc() dir=1/2 l", 1);
257 MYFUN(
primtoflux(
UEVOLVE,ptemp, &qtemp,
TT, ptrgeom, URAD,NULL),
"flux.c:p2SFUevolve()",
"primtoflux_calc() dir=l0", 1);
269 #if(ROEAVERAGEDWAVESPEED && ((USESTOREDSPEEDSFORFLUX==0)||(STOREWAVESPEEDS==0)) )
270 dualfprintf(
fail_file,
"Only supposed to use this splitting of F and U pulling out particular linear terms if not assuming U is not true conserved quantity\n");
276 MYFUN(primtoflux_splitmaem(
UEVOLVE, p, *ptrstate, dir, dir, ptrgeom, F, FEM),
"flux.c:p2SFUevolve_splitmaem()",
"primtoflux_ma() dir=1/2 l", 1);
277 MYFUN(primtoflux_splitmaem(
UEVOLVE, p, *ptrstate, dir,
TT, ptrgeom, U, UEM),
"flux.c:p2SFUevolve_splitmaem()",
"primtoflux_ma() dir=l0", 1);
289 void diag_fluxdump_1(
int dir,
int i,
int j,
int k,
FTYPE *p_l,
FTYPE *p_r,
FTYPE *F_l,
FTYPE *F_r)
294 PLOOP(pliter,pl) GLOBALMACP0A1(fluxdump,i,j,k,4*NPR + (dir-1)*NPR*5 + NPR*1 + pl)=F_l[pl];
295 PLOOP(pliter,pl) GLOBALMACP0A1(fluxdump,i,j,k,4*NPR + (dir-1)*NPR*5 + NPR*2 + pl)=F_r[pl];
296 PLOOP(pliter,pl) GLOBALMACP0A1(fluxdump,i,j,k,4*NPR + (dir-1)*NPR*5 + NPR*3 + pl)=p_l[pl];
297 PLOOP(pliter,pl) GLOBALMACP0A1(fluxdump,i,j,k,4*NPR + (dir-1)*NPR*5 + NPR*4 + pl)=p_r[pl];
299 if(0 && dir==2 && j==0 && i==
N1/2){
313 #define HLLCOMPUTE(cmin,cmax,U_l,U_r,F_l,F_r) (( (cmax * F_l + cmin * F_r) - (FLUXDISSIPATION)*(cmax * cmin) * (U_r - U_l) ) / (cmax + cmin) )
316 #define LAXFCOMPUTE(ctop,U_l,U_r,F_l,F_r) (0.5 * ( (F_l + F_r) - (FLUXDISSIPATION)*ctop * (U_r - U_l) ) )
322 #define LFCOMPUTE(crus,U_l,U_r,F_l,F_r) (0.5*( (F_l+F_r) - (FLUXDISSIPATION)*crus*(U_r - U_l)))
325 #define UHALF(crus,U_l, U_r, F_l, F_r) (0.5*((U_l+U_r)-(FLUXDISSIPATION)*(F_r-F_l)/crus))
328 #define LWCOMPUTE(crus,U_l,U_r,F_l,Fhalf,F_r) (Fhalf)
331 #define FORCECOMPUTE(crus,U_l,U_r,F_l,Fhalf,F_r) (0.25*( (F_l+F_r) + 2.0*Fhalf - (FLUXDISSIPATION)*crus*(U_r - U_l)))
334 #define GFORCECOMPUTE(cg,crus,U_l,U_r,F_l,Fhalf,F_r) ( (LWCOMPUTE(crus,U_l,U_r,F_l,Fhalf,F_r) + cg*LFCOMPUTE(crus,U_l,U_r,F_l,F_r))/(1.0+cg) )
338 #define HLLLAXF1(cmin,cmax,ctop,f_s, U_l, U_r, F_l, F_r) ( HLLCOMPUTE(cmin,cmax,U_l,U_r,F_l,F_r)*f_s + LAXFCOMPUTE(ctop,U_l,U_r,F_l,F_r)*(1.0-f_s) )
346 int flux_compute(
int i,
int j,
int k,
int dir,
struct of_geom *geom,
FTYPE *cminmax_l,
FTYPE *cminmax_r,
FTYPE *cminmax,
FTYPE ctopmhd,
FTYPE *cminmaxrad_l,
FTYPE *cminmaxrad_r,
FTYPE *cminmaxrad,
FTYPE ctoprad,
FTYPE CUf,
FTYPE *p_l,
FTYPE *p_r,
FTYPE *U_l,
FTYPE *U_r,
FTYPE *F_l,
FTYPE *F_r,
FTYPE *F)
349 void choose_flux(
int fluxmethodlocal,
int i,
int j,
int k,
int pl,
FTYPE *laxffrac,
FTYPE *hllfrac);
350 FTYPE laxffrac[NPR],hllfrac[NPR];
352 int forceflux_compute(
int dir,
struct of_geom *geom,
FTYPE *cmin,
FTYPE *cmax,
FTYPE *ctop,
FTYPE *cforce,
FTYPE *p_l,
FTYPE *p_r,
FTYPE *U_l,
FTYPE *U_r,
FTYPE *F_l,
FTYPE *F_r,
FTYPE *F);
353 int mustaflux_compute(
int dir,
struct of_geom *geom,
FTYPE *cmin_l,
FTYPE *cmin_r,
FTYPE *cmax_l,
FTYPE *cmax_r,
FTYPE *cmin,
FTYPE *cmax,
FTYPE *ctop,
FTYPE *cforce,
FTYPE *p_l,
FTYPE *p_r,
FTYPE *U_l,
FTYPE *U_r,
FTYPE *F_l,
FTYPE *F_r,
FTYPE *F);
354 int hllflux_compute(
int dir,
struct of_geom *geom,
FTYPE *cmin,
FTYPE *cmax,
FTYPE *ctop,
FTYPE *p_l,
FTYPE *p_r,
FTYPE *U_l,
FTYPE *U_r,
FTYPE *F_l,
FTYPE *F_r,
FTYPE *F);
357 FTYPE cmin_l[NPR], cmax_l[NPR], cmin_r[NPR], cmax_r[NPR], cmax[NPR], cmin[NPR];
362 int fluxmethodlocal[NPR];
364 FTYPE cmaxfactor=1.0;
365 FTYPE cminfactor=1.0;
366 #if(OUTERRADIALSUPERFAST)
378 cmin_l[pl] = cminmax_l[
CMIN];
379 cmax_l[pl] = cminmax_l[
CMAX];
380 cmin_r[pl] = cminmax_r[
CMIN];
381 cmax_r[pl] = cminmax_r[
CMAX];
382 cmin[pl] = cminmax[
CMIN]*cminfactor;
383 cmax[pl] = cminmax[
CMAX]*cmaxfactor;
389 cmin_l[pl] = cminmaxrad_l[
CMIN];
390 cmax_l[pl] = cminmaxrad_l[
CMAX];
391 cmin_r[pl] = cminmaxrad_r[
CMIN];
392 cmax_r[pl] = cminmaxrad_r[
CMAX];
393 cmin[pl] = cminmaxrad[
CMIN]*cminfactor;
394 cmax[pl] = cminmaxrad[
CMAX]*cmaxfactor;
399 crus[pl]=
dx[dir]/(
dt*CUf);
445 if(fluxmethodlocal[pl]==
LAXFFLUX) F[pl] =
LAXFCOMPUTE(ctop[pl],U_l[pl],U_r[pl],F_l[pl],F_r[pl]);
446 else hllflux_compute(dir,geom,cmin,cmax,ctop,p_l,p_r,U_l,U_r,F_l,F_r,F);
477 hllflux_compute(dir,geom,cmin,cmax,ctop,p_l,p_r,U_l,U_r,F_l,F_r,F);
485 PLOOP(pliter,pl) cforce[pl]=ctop[pl];
488 forceflux_compute(dir,geom,cmin,cmax,ctop,cforce,p_l,p_r,U_l,U_r,F_l,F_r,F);
497 mustaflux_compute(dir,geom,cmin_l,cmin_r,cmax_l,cmax_r,cmin,cmax,ctop,cforce,p_l,p_r,U_l,U_r,F_l,F_r,F);
502 #define MINDPOP (0.0)
503 #define MAXDPOP (0.3)
505 dPoP = fabs( (p_r[
UU]-p_l[
UU])/(0.5*(p_r[UU]+p_l[UU])) );
511 if(cmax[pl]+cmin[pl]!=0.0){
512 F[pl] =
HLLLAXF1(cmin[pl],cmax[pl],ctop[pl],f_s, U_l[pl], U_r[pl], F_l[pl], F_r[pl]);
515 F[pl] =
LAXFCOMPUTE(ctop[pl],U_l[pl],U_r[pl],F_l[pl],F_r[pl]);
544 #define USE_CORRECTED_STATES 0
547 int hllflux_compute(
int dir,
struct of_geom *geom,
FTYPE *cmin,
FTYPE *cmax,
FTYPE *ctop,
FTYPE *p_l,
FTYPE *p_r,
FTYPE *U_l,
FTYPE *U_r,
FTYPE *F_l,
FTYPE *F_r,
FTYPE *F)
550 FTYPE vmin[NPR],vmax[NPR];
551 FTYPE cminreal[NPR],cmaxreal[NPR];
556 #if(USE_CORRECTED_STATES)
558 vmin[pl]=
min(p_l[
UU+dir],p_r[
UU+dir]);
559 vmax[pl]=
max(p_l[
UU+dir],p_r[
UU+dir]);
560 vmin[pl] = fabs(
max(0., -vmin[pl]));
561 vmax[pl] = fabs(
max(0., vmax[pl]));
564 if(cmax[pl]+cmin[pl]!=0.0){
565 if( pl ==
UU + dir && (vmin[pl]+vmax[pl]!=0.0) ) {
567 cminreal[pl] = vmin[pl];
568 cmaxreal[pl] = vmax[pl];
571 cminreal[pl] = cmin[pl];
572 cmaxreal[pl] = cmax[pl];
574 F[pl] =
HLLCOMPUTE(cminreal[pl],cmaxreal[pl],U_l[pl],U_r[pl],F_l[pl],F_r[pl]);
576 else F[pl] =
LAXFCOMPUTE(ctop[pl],U_l[pl],U_r[pl],F_l[pl],F_r[pl]);
580 if(cmax[pl]+cmin[pl]!=0.0){
581 F[pl] =
HLLCOMPUTE(cmin[pl],cmax[pl],U_l[pl],U_r[pl],F_l[pl],F_r[pl]);
583 else F[pl] =
LAXFCOMPUTE(ctop[pl],U_l[pl],U_r[pl],F_l[pl],F_r[pl]);
594 #define MUSTACOEF (1.0)
626 int forceflux_compute(
int dir,
struct of_geom *geom,
FTYPE *cmin,
FTYPE *cmax,
FTYPE *ctop,
FTYPE *cforce,
FTYPE *p_l,
FTYPE *p_r,
FTYPE *U_l,
FTYPE *U_r,
FTYPE *F_l,
FTYPE *F_r,
FTYPE *F)
629 FTYPE umid[NPR],pmid[NPR],fmid[NPR];
633 FTYPE vmin[NPR],vmax[NPR];
634 FTYPE vminorig[NPR], vmaxorig[NPR];
635 FTYPE cminreal[NPR], cmaxreal[NPR];
636 int hllflux_compute(
int dir,
struct of_geom *geom,
FTYPE *cmin,
FTYPE *cmax,
FTYPE *ctop,
FTYPE *p_l,
FTYPE *p_r,
FTYPE *U_l,
FTYPE *U_r,
FTYPE *F_l,
FTYPE *F_r,
FTYPE *F);
637 struct of_newtonstats newtonstats; setnewtonstatsdefault(&newtonstats);
639 int allowlocalfailurefixandnoreport=1;
646 PLOOP(pliter,pl) umid[pl] =
UHALF(cforce[pl],U_l[pl],U_r[pl],F_l[pl],F_r[pl]);
651 PLOOP(pliter,pl) pmid[pl]=0.5*(p_l[pl]+p_r[pl]);
654 FTYPE dissmeasure=-1.0;
660 MYFUN(
Utoprimgen(showmessages,checkoninversiongas,checkoninversionrad,allowlocalfailurefixandnoreport, 0, &eomtype,whichcap,whichmethod,modprim,
EVOLVEUTOPRIM,
UEVOLVE, umid, NULL, geom, dissmeasure, pmid, pmid,&newtonstats),
"flux.c:flux_compute()",
"Utoprimgen", 1);
663 if(debugfail>=1) dualfprintf(
fail_file,
"Failed to find inversion for FORCEFLUX, trying p_l : nstep=%ld t=%21.15g i=%d j=%d k=%d\n",
nstep,
t,geom->i,geom->j,geom->k);
664 PLOOP(pliter,pl) pmid[pl]=p_l[pl];
666 MYFUN(
Utoprimgen(showmessages,checkoninversiongas,checkoninversionrad,allowlocalfailurefixandnoreport, 0, &eomtype,whichcap,whichmethod,modprim,
EVOLVEUTOPRIM,
UEVOLVE, umid, NULL, geom, dissmeasure, pmid, pmid,&newtonstats),
"flux.c:flux_compute()",
"Utoprimgen", 1);
668 if(debugfail>=1) dualfprintf(
fail_file,
"Failed to find inversion for FORCEFLUX, trying p_r : nstep=%ld t=%21.15g i=%d j=%d k=%d\n",
nstep,
t,geom->i,geom->j,geom->k);
669 PLOOP(pliter,pl) pmid[pl]=p_r[pl];
671 MYFUN(
Utoprimgen(showmessages,checkoninversiongas,checkoninversionrad,allowlocalfailurefixandnoreport, 0, &eomtype,whichcap,whichmethod,modprim,
EVOLVEUTOPRIM,
UEVOLVE, umid, NULL, geom, dissmeasure, pmid, pmid,&newtonstats),
"flux.c:flux_compute()",
"Utoprimgen", 1);
673 if(debugfail>=1) dualfprintf(
fail_file,
"No initial guess worked, rejecting FORCEFLUX method : nstep=%ld t=%21.15g i=%d j=%d k=%d\n",
nstep,
t,geom->i,geom->j,geom->k);
689 MYFUN(
primtoflux(
UEVOLVE, pmid, ptrstate, dir, geom, fmid, NULL),
"flux.c:flux_compute()",
"primtoflux_calc() dir=1/2 l", 1);
699 hllflux_compute(dir,geom,cmin,cmax,ctop,p_l,p_r,U_l,U_r,F_l,F_r,F);
708 #define NUMMUSTAITERS 1
711 #define DOMULTICELL 0
713 #define NUMMULTIMUSTAITERS 2 // 1=expensive way to do no musta, 2 minimum for interesting calculation
717 #define NUMLOCALCELLS 2
718 #define MULTIMUSTACOEF (0.9)
725 #define WHICHFLUX MUSTAHLL
734 #define HLLBOUNDMUSTA 0
737 int mustaflux_compute(
int dir,
struct of_geom *geom,
FTYPE *cmin_l,
FTYPE *cmin_r,
FTYPE *cmax_l,
FTYPE *cmax_r,
FTYPE *cmin,
FTYPE *cmax,
FTYPE *ctop,
FTYPE *cforce,
FTYPE *p_l,
FTYPE *p_r,
FTYPE *U_l,
FTYPE *U_r,
FTYPE *F_l,
FTYPE *F_r,
FTYPE *F)
739 int musta1flux_compute(
int dir,
struct of_geom *geom,
FTYPE *cmin_l,
FTYPE *cmin_r,
FTYPE *cmax_l,
FTYPE *cmax_r,
FTYPE *cmin,
FTYPE *cmax,
FTYPE *ctop,
FTYPE *cforce,
FTYPE *p_l,
FTYPE *p_r,
FTYPE *U_l,
FTYPE *U_r,
FTYPE *F_l,
FTYPE *F_r,
FTYPE *F);
740 int musta2flux_compute(
int dir,
struct of_geom *geom,
FTYPE *cmin_l,
FTYPE *cmin_r,
FTYPE *cmax_l,
FTYPE *cmax_r,
FTYPE *cmin,
FTYPE *cmax,
FTYPE *ctop,
FTYPE *cforce,
FTYPE *p_l,
FTYPE *p_r,
FTYPE *U_l,
FTYPE *U_r,
FTYPE *F_l,
FTYPE *F_r,
FTYPE *F);
741 int hllflux_compute(
int dir,
struct of_geom *geom,
FTYPE *cmin,
FTYPE *cmax,
FTYPE *ctop,
FTYPE *p_l,
FTYPE *p_r,
FTYPE *U_l,
FTYPE *U_r,
FTYPE *F_l,
FTYPE *F_r,
FTYPE *F);
743 FTYPE cmaxorig[NPR],cminorig[NPR],ctoporig[NPR];
744 FTYPE Uorig_l[NPR],Uorig_r[NPR],Forig_l[NPR],Forig_r[NPR],porig_l[NPR],porig_r[NPR];
750 FTYPE contactstrength;
751 struct of_newtonstats newtonstats; setnewtonstatsdefault(&newtonstats);
753 int allowlocalfailurefixandnoreport=1;
759 shockstrength=fabs((p_r[
UU]-p_l[
UU])/
max(
min(fabs(p_l[UU]),fabs(p_r[UU])),
SMALL));
762 contactstrength=fabs((p_r[
RHO]-p_l[
RHO])/
max(
min(fabs(p_l[RHO]),fabs(p_r[RHO])),
SMALL));
765 shockstrength=contactstrength=0;
769 rarestrength=fabs((p_r[
UU+dir]-p_l[
UU+dir])/
max(
min(fabs(p_l[
UU+dir]),fabs(p_r[
UU+dir])),
SMALL));
775 cmaxorig[pl]=cmax[pl];
776 cminorig[pl]=cmin[pl];
777 ctoporig[pl]=ctop[pl];
790 domustaflux=musta1flux_compute(dir,geom,cmin_l,cmin_r,cmax_l,cmax_r,cmin,cmax,ctop,cforce,p_l,p_r,U_l,U_r,F_l,F_r,F);
793 domustaflux=musta2flux_compute(dir,geom,cmin_l,cmin_r,cmax_l,cmax_r,cmin,cmax,ctop,cforce,p_l,p_r,U_l,U_r,F_l,F_r,F);
805 hllflux_compute(dir,geom,cminorig,cmaxorig,ctoporig,porig_l,porig_r,Uorig_l,Uorig_r,Forig_l,Forig_r,F);
815 hllflux_compute(dir,geom,cminorig,cmaxorig,ctoporig,porig_l,porig_r,Uorig_l,Uorig_r,Forig_l,Forig_r,Fother);
817 PLOOP(pliter,pl) F[pl] = 0.5*(Fother[pl]+F[pl]);
824 hllflux_compute(dir,geom,cminorig,cmaxorig,ctoporig,porig_l,porig_r,Uorig_l,Uorig_r,Forig_l,Forig_r,Fother);
826 PLOOP(pliter,pl)
if( fabs(Fother[pl]-F[pl])/(fabs(Fother[pl])+
SMALL)>2.0) F[pl]=Fother[pl];
834 hllflux_compute(dir,geom,cminorig,cmaxorig,ctoporig,porig_l,porig_r,Uorig_l,Uorig_r,Forig_l,Forig_r,Fother);
835 PLOOP(pliter,pl)
if( ((Fother[pl]<0.0)&&(F[pl]>0.0))||((Fother[pl]>0.0)&&(F[pl]<0.0)) ) F[pl]=Fother[pl];
841 hllflux_compute(dir,geom,cminorig,cmaxorig,ctoporig,porig_l,porig_r,Uorig_l,Uorig_r,Forig_l,Forig_r,Fother);
843 if( (shockstrength>0.5)||(rarestrength>0.5)){
857 #if(1) // not too bad, but generates problem at moving contact.
858 hllflux_compute(dir,geom,cminorig,cmaxorig,ctoporig,porig_l,porig_r,Uorig_l,Uorig_r,Forig_l,Forig_r,Fother);
873 int musta1flux_compute(
int dir,
struct of_geom *geom,
FTYPE *cmin_l,
FTYPE *cmin_r,
FTYPE *cmax_l,
FTYPE *cmax_r,
FTYPE *cmin,
FTYPE *cmax,
FTYPE *ctop,
FTYPE *cforce,
FTYPE *p_l,
FTYPE *p_r,
FTYPE *U_l,
FTYPE *U_r,
FTYPE *F_l,
FTYPE *F_r,
FTYPE *F)
875 int forceflux_compute(
int dir,
struct of_geom *geom,
FTYPE *cmin,
FTYPE *cmax,
FTYPE *ctop,
FTYPE *cforce,
FTYPE *p_l,
FTYPE *p_r,
FTYPE *U_l,
FTYPE *U_r,
FTYPE *F_l,
FTYPE *F_r,
FTYPE *F);
876 int hllflux_compute(
int dir,
struct of_geom *geom,
FTYPE *cmin,
FTYPE *cmax,
FTYPE *ctop,
FTYPE *p_l,
FTYPE *p_r,
FTYPE *U_l,
FTYPE *U_r,
FTYPE *F_l,
FTYPE *F_r,
FTYPE *F);
878 FTYPE umid[NPR],plnew[NPR],prnew[NPR],fmid[NPR];
879 struct of_state state, state_l, state_r;
880 struct of_state *ptrstate, *ptrstate_l, *ptrstate_r;
889 FTYPE correctionl[NPR],correctionr[NPR],mymustacoef[NPR],mymustacoeffinal;
893 FTYPE fracl[NPR],fracr[NPR];
895 struct of_newtonstats newtonstats; setnewtonstatsdefault(&newtonstats);
896 FTYPE cminmhd,cmaxmhd,ctopmhd;
897 FTYPE cminrad,cmaxrad,ctoprad;
898 FTYPE cminrad2,cmaxrad2,ctoprad2;
900 int allowlocalfailurefixandnoreport=1;
903 #if(EOMRADTYPE!=EOMRADNONE)
904 dualfprintf(
fail_file,
"musta1flux_compute not setup for radiation.");
910 ptrstate_l = &state_l;
911 ptrstate_r = &state_r;
919 #if(WHICHFLUX==MUSTAFORCE)
920 PLOOP(pliter,pl) cmusta[pl]=ctop[pl];
921 forceflux_compute(dir,geom,cmin,cmax,ctop,cforce,p_l,p_r,U_l,U_r,F_l,F_r,F);
922 #elif(WHICHFLUX==MUSTAHLL)
923 PLOOP(pliter,pl) cmusta[pl]=ctop[pl];
924 hllflux_compute(dir,geom,cmin,cmax,ctop,p_l,p_r,U_l,U_r,F_l,F_r,F);
925 #elif(WHICHFLUX==MUSTALAXF)
926 PLOOP(pliter,pl) cmusta[pl]=ctop[pl];
927 PLOOP(pliter,pl) F[pl] =
LAXFCOMPUTE(ctop[pl],U_l[pl],U_r[pl],F_l[pl],F_r[pl]);
937 #if(WHICHFLUX==MUSTAFORCE)
940 #elif(WHICHFLUX==MUSTAHLL)
942 #elif(WHICHFLUX==MUSTALAXF)
951 #define MUSTAVERSION 0
957 U_l[pl] -=
MUSTACOEF*(F[pl]-F_l[pl])/cmusta[pl];
958 U_r[pl] -=
MUSTACOEF*(F_r[pl]-F[pl])/cmusta[pl];
960 #elif(MUSTAVERSION==1)
964 correctionl[pl]=
MUSTACOEF*(F[pl]-F_l[pl])/cmusta[pl];
965 correctionr[pl]=
MUSTACOEF*(F_r[pl]-F[pl])/cmusta[pl];
968 fracl[pl]=fabs(U_l[pl]-correctionl[pl])/(fabs(U_l[pl])+
SMALL);
969 fracr[pl]=fabs(U_r[pl]-correctionr[pl])/(fabs(U_r[pl])+
SMALL);
971 mymustacoef[pl]=(U_l[pl]-U_r[pl])/(correctionl[pl]-correctionr[pl]);
976 mymustacoeffinal=0.0;
979 if(mymustacoeffinal<=mymustacoef[pl]){
980 mymustacoeffinal=mymustacoef[pl];
984 if(mymustacoeffinal>1.0) mymustacoeffinal=1.0;
985 if(mymustacoeffinal<0.9) mymustacoeffinal=0.9;
1006 U_l[pl] -= mymustacoeffinal*correctionl[pl];
1007 U_r[pl] -= mymustacoeffinal*correctionr[pl];
1009 #elif(MUSTAVERSION==2)
1011 correctionl[pl]=
MUSTACOEF*(F[pl]-F_l[pl])/cmusta[pl];
1012 correctionr[pl]=
MUSTACOEF*(F_r[pl]-F[pl])/cmusta[pl];
1016 if(fabs(correctionl[pl]-correctionr[pl])!=0.0){
1017 mymustacoef[pl]=(U_l[pl]-U_r[pl])/(correctionl[pl]-correctionr[pl]);
1019 else mymustacoef[pl]=
BIG;
1026 if(mymustacoef[pl]<0.0)
return(0);
1030 #define MUSTACOEFTYPE 1
1032 #if(MUSTACOEFTYPE==0)
1035 dualfprintf(
fail_file,
"nstep=%ld steppart=%d i=%d coef[%d]=%21.15g\n",
nstep,
steppart,geom->i,pl,mymustacoef[pl]);
1040 mymustacoeffinal=
BIG;
1042 if(mymustacoeffinal>mymustacoef[pl]) mymustacoeffinal=mymustacoef[pl];
1044 if(mymustacoeffinal>1.0)
return(0);
1048 mymustacoef[pl]=mymustacoeffinal;
1051 #elif(MUSTACOEFTYPE==1)
1055 if( (mymustacoeffinal<mymustacoef[pl])&&(mymustacoef[pl]<=1.0)&&(mymustacoef[pl]>0.9) ) mymustacoeffinal=mymustacoef[pl];
1062 mymustacoef[pl]=mymustacoeffinal;
1064 #elif(MUSTACOEFTYPE==2)
1067 if(mymustacoef[pl]<0.0) mymustacoef[pl]=0.0;
1068 if(mymustacoef[pl]>1.0) mymustacoef[pl]=1.0;
1070 #elif(MUSTACOEFTYPE==3)
1087 Ucl=U_l[pl]-mymustacoef[pl]*correctionl[pl];
1088 Ucr=U_r[pl]-mymustacoef[pl]*correctionr[pl];
1092 if((U_r[pl] - U_l[pl])*(Ucl - U_l[pl])<0.0)
return(0);
1093 if((U_r[pl] - U_l[pl])*(Ucr - U_r[pl])>0.0)
return(0);
1099 #elif(MUSTAVERSION==3)
1101 correctionl=(F[pl]-F_l[pl])/cmusta[pl];
1102 correctionr=(F_r[pl]-F[pl])/cmusta[pl];
1106 U_l[pl] -= mymustacoef*correctionl;
1107 U_r[pl] -= mymustacoef*correctionr;
1131 FTYPE dissmeasure=-1.0;
1137 MYFUN(
Utoprimgen(showmessages,checkoninversiongas,checkoninversionrad,allowlocalfailurefixandnoreport, 0, &eomtype,whichcap,whichmethod,modprim,
EVOLVEUTOPRIM,
UEVOLVE, U_l, ptrstate_l, geom, dissmeasure, p_l, p_l,&newtonstats),
"flux.c:mustaflux_compute()",
"Utoprimgen", 1);
1139 if(debugfail>=1) dualfprintf(
fail_file,
"Failed to find inversion for MUSTAFORCEFLUX(left): nstep=%ld t=%21.15g i=%d j=%d k=%d\n",
nstep,
t,geom->i,geom->j,geom->k);
1144 MYFUN(
Utoprimgen(showmessages,checkoninversiongas,checkoninversionrad,allowlocalfailurefixandnoreport, 0, &eomtype,whichcap,whichmethod,modprim,
EVOLVEUTOPRIM,
UEVOLVE, U_r, ptrstate_r, geom, dissmeasure, p_r, p_r,&newtonstats),
"flux.c:mustaflux_compute()",
"Utoprimgen", 1);
1146 if(debugfail>=1) dualfprintf(
fail_file,
"Failed to find inversion for MUSTAFORCEFLUX(right): nstep=%ld t=%21.15g i=%d j=%d k=%d\n",
nstep,
t,geom->i,geom->j,geom->k);
1152 MYFUN(
get_state(p_l, geom, ptrstate_l),
"flux.c:flux_compute()",
"get_state()", 1);
1153 MYFUN(
primtoflux(
UEVOLVE, p_l, ptrstate_l, dir, geom, F_l, NULL),
"flux.c:flux_compute()",
"primtoflux_calc() dir=1/2 l", 1);
1155 MYFUN(
get_state(p_r, geom, ptrstate_r),
"flux.c:flux_compute()",
"get_state()", 1);
1156 MYFUN(
primtoflux(
UEVOLVE, p_r, ptrstate_r, dir, geom, F_r, NULL),
"flux.c:flux_compute()",
"primtoflux_calc() dir=1/2 l", 1);
1161 #if(1||((WHICHFLUX==MUSTAHLL)||(WHICHFLUX==MUSTALAXF)))
1163 MYFUN(
vchar_each(p_l, ptrstate_l, dir, geom, &cmaxeach_l[
EOMSETMHD], &cmineach_l[EOMSETMHD], &cmaxeach_l[
EOMSETRAD], &cmineach_l[EOMSETRAD], &cmaxeach_l[
EOMSETRADFORDT], &cmineach_l[EOMSETRADFORDT],&ignorecourant),
"step_ch.c:fluxcalc()",
"vchar() dir=1or2", 1);
1164 MYFUN(
vchar_each(p_r, ptrstate_r, dir, geom, &cmaxeach_r[
EOMSETMHD], &cmineach_r[EOMSETMHD], &cmaxeach_r[
EOMSETRAD], &cmineach_r[EOMSETRAD], &cmaxeach_r[
EOMSETRADFORDT], &cmineach_r[EOMSETRADFORDT],&ignorecourant),
"step_ch.c:fluxcalc()",
"vchar() dir=1or2", 2);
1165 cminmax_calc(cmineach_l[
EOMSETMHD],cmineach_r[EOMSETMHD],cmaxeach_l[EOMSETMHD],cmaxeach_r[EOMSETMHD],&cminmhd,&cmaxmhd,&ctopmhd);
1166 cminmax_calc(cmineach_l[
EOMSETRAD],cmineach_r[EOMSETRAD],cmaxeach_l[EOMSETRAD],cmaxeach_r[EOMSETRAD],&cminrad,&cmaxrad,&ctoprad);
1167 cminmax_calc(cmineach_l[
EOMSETRADFORDT],cmineach_r[EOMSETRADFORDT],cmaxeach_l[EOMSETRADFORDT],cmaxeach_r[EOMSETRADFORDT],&cminrad2,&cmaxrad2,&ctoprad2);
1170 if(pl<URAD0 || pl>URAD3){
1186 #if(WHICHFLUX==MUSTAFORCE)
1187 PLOOP(pliter,pl) cforce[pl]=ctop[pl];
1188 forceflux_compute(dir,geom,cmin,cmax,ctop,cforce,p_l,p_r,U_l,U_r,F_l,F_r,F);
1189 #elif(WHICHFLUX==MUSTAHLL)
1190 hllflux_compute(dir,geom,cmin,cmax,ctop,p_l,p_r,U_l,U_r,F_l,F_r,F);
1191 #elif(WHICHFLUX==MUSTALAXF)
1192 PLOOP(pliter,pl) F[pl] =
LAXFCOMPUTE(ctop[pl],U_l[pl],U_r[pl],F_l[pl],F_r[pl]);
1198 return(domustaflux);
1206 int musta2flux_compute(
int dir,
struct of_geom *geom,
FTYPE *cmin_l,
FTYPE *cmin_r,
FTYPE *cmax_l,
FTYPE *cmax_r,
FTYPE *cmin,
FTYPE *cmax,
FTYPE *ctop,
FTYPE *cforce,
FTYPE *p_l,
FTYPE *p_r,
FTYPE *U_l,
FTYPE *U_r,
FTYPE *F_l,
FTYPE *F_r,
FTYPE *F)
1208 int forceflux_compute(
int dir,
struct of_geom *geom,
FTYPE *cmin,
FTYPE *cmax,
FTYPE *ctop,
FTYPE *cforce,
FTYPE *p_l,
FTYPE *p_r,
FTYPE *U_l,
FTYPE *U_r,
FTYPE *F_l,
FTYPE *F_r,
FTYPE *F);
1209 int hllflux_compute(
int dir,
struct of_geom *geom,
FTYPE *cmin,
FTYPE *cmax,
FTYPE *ctop,
FTYPE *p_l,
FTYPE *p_r,
FTYPE *U_l,
FTYPE *U_r,
FTYPE *F_l,
FTYPE *F_r,
FTYPE *F);
1211 FTYPE umid[NPR],plnew[NPR],prnew[NPR],fmid[NPR];
1217 FTYPE *Unow,*Fnow,*pnow;
1218 FTYPE *Unow_l, *Unow_r, *Fnow_l, *Fnow_r, *pnow_l, *pnow_r;
1219 FTYPE *cmaxnow,*cminnow,*ctopnow;
1222 FTYPE cmaxnow_l[NPR], cmaxnow_r[NPR], cminnow_l[NPR], cminnow_r[NPR];
1228 struct of_newtonstats newtonstats; setnewtonstatsdefault(&newtonstats);
1230 int allowlocalfailurefixandnoreport=1;
1235 for(mustacellloop=0;mustacellloop<=
NUMLOCALCELLS;mustacellloop++){
1237 Umusta[mustacellloop][pl]=U_l[pl];
1238 Fmusta[mustacellloop][pl]=F_l[pl];
1239 pmusta[mustacellloop][pl]=p_l[pl];
1240 cmaxmusta[mustacellloop][pl]=cmax_l[pl];
1241 cminmusta[mustacellloop][pl]=cmin_l[pl];
1247 Umusta[mustacellloop][pl]=U_r[pl];
1248 Fmusta[mustacellloop][pl]=F_r[pl];
1249 pmusta[mustacellloop][pl]=p_r[pl];
1250 cmaxmusta[mustacellloop][pl]=cmax_r[pl];
1251 cminmusta[mustacellloop][pl]=cmin_r[pl];
1287 for(mustacellloop=1;mustacellloop<=2*
NUMLOCALCELLS+1;mustacellloop++){
1291 Unow_l=Umusta[mustacellloop-1];
1292 Unow_r=Umusta[mustacellloop];
1293 Fnow_l=Fmusta[mustacellloop-1];
1294 Fnow_r=Fmusta[mustacellloop];
1295 pnow_l=pmusta[mustacellloop-1];
1296 pnow_r=pmusta[mustacellloop];
1299 cmaxnow_l[pl]=cmaxmusta[mustacellloop-1][pl];
1300 cmaxnow_r[pl]=cmaxmusta[mustacellloop][pl];
1301 cminnow_l[pl]=cminmusta[mustacellloop-1][pl];
1302 cminnow_r[pl]=cminmusta[mustacellloop][pl];
1305 Fnow=Fmusta_edge[mustacellloop];
1312 dualfprintf(
fail_file,
"musta2 not setup for radiation\n");
1315 #if(WHICHFLUX==MUSTAFORCE)
1316 PLOOP(pliter,pl) cmusta[pl]=cforce[pl];
1317 forceflux_compute(dir,geom,cmin,cmax,ctop,cforce,pnow_l,pnow_r,Unow_l,Unow_r,Fnow_l,Fnow_r,Fnow);
1318 #elif(WHICHFLUX==MUSTAHLL)
1319 PLOOP(pliter,pl) cmusta[pl]=ctop[pl];
1320 hllflux_compute(dir,geom,cmin,cmax,ctop,pnow_l,pnow_r,Unow_l,Unow_r,Fnow_l,Fnow_r,Fnow);
1321 #elif(WHICHFLUX==MUSTALAXF)
1322 PLOOP(pliter,pl) cmusta[pl]=ctop[pl];
1323 PLOOP(pliter,pl) Fnow[pl] =
LAXFCOMPUTE(ctop[pl],Unow_l[pl],Unow_r[pl],Fnow_l[pl],Fnow_r[pl]);
1335 if(mustaloop==NUMMULTIMUSTAITERS-1)
break;
1342 for(mustacellloop=1;mustacellloop<=2*
NUMLOCALCELLS;mustacellloop++){
1346 Unow=Umusta[mustacellloop];
1347 pnow=pmusta[mustacellloop];
1348 Fnow=Fmusta[mustacellloop];
1350 cmaxnow[pl]=cmaxmusta[mustacellloop][pl];
1351 cminnow[pl]=cminmusta[mustacellloop][pl];
1354 Fnow_l=Fmusta_edge[mustacellloop];
1355 Fnow_r=Fmusta_edge[mustacellloop+1];
1361 #if(WHICHFLUX==MUSTAFORCE)
1362 cmusta[pl]=cforce[pl];
1363 #elif(WHICHFLUX==MUSTAHLL)
1364 cmusta[pl]=ctop[pl];
1365 #elif(WHICHFLUX==MUSTALAXF)
1366 cmusta[pl]=ctop[pl];
1376 FTYPE dissmeasure=-1.0;
1382 MYFUN(
Utoprimgen(showmessages,checkoninversiongas,checkoninversionrad,allowlocalfailurefixandnoreport, 0, &eomtype,whichcap,whichmethod,modprim,
EVOLVEUTOPRIM,
UEVOLVE, Unow, NULL, geom, dissmeasure, pnow, pnow,&newtonstats),"flux.c:mustaflux_compute()", "
Utoprimgen", 1);
1384 if(debugfail>=1) dualfprintf(
fail_file,
"Failed to find inversion for MUSTAFORCEFLUX(right): nstep=%ld t=%21.15g i=%d j=%d k=%d\n",
nstep,
t,geom->i,geom->j,geom->k);
1392 MYFUN(
get_state(pnow, geom, ptrstate),
"flux.c:flux_compute()",
"get_state()", 1);
1393 MYFUN(
primtoflux(UEVOLVE, pnow, ptrstate, dir, geom, Fnow, NULL),
"flux.c:flux_compute()",
"primtoflux_calc() dir=1/2 l", 1);
1397 MYFUN(
vchar(pnow, ptrstate, dir, geom, cmaxnow, cminnow, &ignorecourant),
"step_ch.c:fluxcalc()",
"vchar() dir=1or2", 2);
1403 if(domustaflux==0)
break;
1412 Umusta[0][pl]=Umusta[1][pl];
1413 Fmusta[0][pl]=Fmusta[1][pl];
1414 pmusta[0][pl]=pmusta[1][pl];
1434 return(domustaflux);
1440 void choose_flux(
int fluxmethodlocal,
int i,
int j,
int k,
int pl,
FTYPE *laxffrac,
FTYPE *hllfrac)
1444 #if(HYDROFLUXADJUSTONLY)
1446 if(GLOBALMACP0A1(pflag,i,j,k,
FLAGREALFLUX)==
HLLFLUX){ hllfrac[pl]=1.0; laxffrac[pl]=0.0; }
1447 else { hllfrac[pl]=0.0; laxffrac[pl]=1.0; }
1454 else if(fluxmethodlocal==
LAXFFLUX){
1460 if(GLOBALMACP0A1(pflag,i,j,k,
FLAGREALFLUX)==
HLLFLUX){ hllfrac[pl]=1.0; laxffrac[pl]=0.0; }
1461 else { hllfrac[pl]=0.0; laxffrac[pl]=1.0; }
1469 else if(fluxmethodlocal==
LAXFFLUX){