16 static void leftrightcompute(
int i,
int j,
int k,
int dir,
int is,
int ie,
int js,
int je,
int ks,
int ke,
int *computewithleft,
int *computewithright);
23 static void leftrightcompute(
int i,
int j,
int k,
int dir,
int is,
int ie,
int js,
int je,
int ks,
int ke,
int *computewithleft,
int *computewithright)
26 #if(MERGEDC2EA2CMETHOD)
28 if(dir==1 && (i==is) || dir==2 && (j==js) || dir==3 && (k==ks)){ *computewithleft=0; *computewithright=1; }
29 else if(dir==1 && (i==ie) || dir==2 && (j==je) || dir==3 && (k==ke)){ *computewithleft=1; *computewithright=0; }
30 else{ *computewithleft=1; *computewithright=1; }
33 *computewithleft=1; *computewithright=1;
45 int initialstep,
int finalstep,
62 int fluxcalc_flux(
int stage,
FTYPE (*
pr)[
NSTORE2][
NSTORE3][NPR],
FTYPE (*pstag)[
NSTORE2][
NSTORE3][NPR],
FTYPE (*pl_ct)[
NSTORE1][
NSTORE2][
NSTORE3][NPR2INTERP],
FTYPE (*pr_ct)[
NSTORE1][
NSTORE2][
NSTORE3][NPR2INTERP],
int *Nvec,
FTYPE (*dqvec[
NDIM])[
NSTORE2][
NSTORE3][NPR2INTERP],
FTYPE (*fluxvec[NDIM])[
NSTORE2][
NSTORE3][NPR+
NSPECIAL],
FTYPE (*fluxvecEM[NDIM])[
NSTORE2][
NSTORE3][NPR+
NSPECIAL],
FTYPE CUf,
SFTYPE time,
FTYPE *ndtvec[NDIM],
struct of_loop *cent2faceloop);
71 void preinterp_flux_point2avg(
void);
83 struct of_loop cent2faceloop[NDIM],face2cornloop[NDIM][NDIM][NDIM];
112 if(splitmaem) ptrfluxvec=fluxvecEM;
113 else ptrfluxvec=fluxvec;
128 zero_out_emf_fluxes(Nvec,ptrfluxvec);
136 preinterp_flux_point2avg();
153 fluxcalc_flux(stage,
pr, pstag, pl_ct, pr_ct, Nvec, dqvec, fluxvec, fluxvecEM, CUf[2], fluxtime, ndtvec, cent2faceloop);
163 if(Nvec[1]>1)
FULLLOOP PLOOP(pliter,pl)
MACP1A1(fluxvec,1,i,j,k,pl)+=
MACP1A1(fluxvecEM,1,i,j,k,pl);
164 if(Nvec[2]>1)
FULLLOOP PLOOP(pliter,pl)
MACP1A1(fluxvec,2,i,j,k,pl)+=
MACP1A1(fluxvecEM,2,i,j,k,pl);
165 if(Nvec[3]>1)
FULLLOOP PLOOP(pliter,pl)
MACP1A1(fluxvec,3,i,j,k,pl)+=
MACP1A1(fluxvecEM,3,i,j,k,pl);
177 fix_flux(
pr, fluxvec[1], fluxvec[2], fluxvec[3]);
178 if(splitmaem) fix_flux(
pr, fluxvecEM[1], fluxvecEM[2], fluxvecEM[3]);
194 adjust_flux(fluxtime,
pr, fluxvec[1], fluxvec[2], fluxvec[3]);
211 #if(STOREWAVESPEEDS==0 || USESTOREDSPEEDSFORFLUX==0)
212 dualfprintf(
fail_file,
"STOREWAVESPEEDS,USESTOREDSPEEDSFORFLUX must be >0 when FLUXB==FLUXCTSTAG\n");
219 MYFUN(
fluxcalc_fluxctstag(stage, initialstep, finalstep,
pr, pstag, pl_ct, pr_ct,
GLOBALPOINT(pvbcorninterp),
GLOBALPOINT(wspeed),
GLOBALPOINT(prc),
GLOBALPOINT(pleft),
GLOBALPOINT(pright),
GLOBALPOINT(fluxstatecent),
GLOBALPOINT(fluxstate),
GLOBALPOINT(geomcornglobal), Nvec, dqvec, ptrfluxvec, vpot, CUf, CUnew, fluxdt, fluxtime, cent2faceloop, face2cornloop),
"flux.c:fluxcalc()",
"fluxcalc_fluxctstag", 0);
237 if(pl>=
B1 && pl<=
B2){
239 dualfprintf(
fail_file,
"GOD FLUXA: dir=%d pl=%d i=%d j=%d k=%d\n",dir,pl,i,j,k,
MACP1A1(fluxvec,dir,i,j,k,pl));
262 flux_point2avg(stage,
ISMAONLY,
pr, Nvec, fluxvec,fluxvecEM);
263 flux_point2avg(stage,
ISEMONLY,
pr, Nvec, fluxvecEM, NULL);
266 flux_point2avg(stage,
ISMAANDEM,
pr, Nvec, fluxvec,NULL);
290 MYFUN(flux_ct(stage, initialstep, finalstep,
pr,
GLOBALPOINT(emf),
GLOBALPOINT(vconemf),
GLOBALPOINT(dq1),
GLOBALPOINT(dq2),
GLOBALPOINT(dq3), ptrfluxvec[1], ptrfluxvec[2], ptrfluxvec[3], vpot, Nvec, CUf, CUnew, fluxdt, fluxtime),
"step_ch.c:advance()",
"flux_ct",1);
302 if(splitmaem) fluxsum(Nvec, fluxvec,fluxvecEM);
317 mergedc2ea2cmethod_compute(Nvec,fluxvec);
330 cleanup_fluxes(Nvec,ptrfluxvec);
343 PLOOP(pliter,pl) GLOBALMACP0A1(fluxdump,i,j,k,4*NPR + (dir-1)*NPR*5 + NPR*0 + pl)=
MACP1A1(fluxvec,dir,i,j,k,pl);
346 PLOOP(pliter,pl) GLOBALMACP0A1(fluxdump,i,j,k,4*NPR + (dir-1)*NPR*5 + NPR*0 + pl)=0.0;
384 int B1is,B1ie,B1js,B1je,B1ks,B1ke;
385 int B2is,B2ie,B2js,B2je,B2ks,B2ke;
386 int B3is,B3ie,B3js,B3je,B3ks,B3ke;
423 B1ie=loop[
FIE]+(dir==1 || dir==2 || dir==3)*
SHIFT1;
425 B1je=loop[
FJE]+(dir==1 || dir==2)*
SHIFT2;
427 B1ke=loop[
FKE]+(dir==1 || dir==3)*
SHIFT3;
431 B2ie=loop[
FIE]+(dir==1 || dir==2)*
SHIFT1;
433 B2je=loop[
FJE]+(dir==1 || dir==2 || dir==3)*
SHIFT2;
435 B2ke=loop[
FKE]+(dir==2 || dir==3)*
SHIFT3;
439 B3ie=loop[
FIE]+(dir==1 || dir==3)*
SHIFT1;
441 B3je=loop[
FJE]+(dir==2 || dir==3)*
SHIFT2;
443 B3ke=loop[
FKE]+(dir==1 || dir==2 || dir==3)*
SHIFT3;
462 #pragma omp for schedule(OPENMPSCHEDULE(),OPENMPCHUNKSIZE(blocksize)) nowait // can nowait since each fluxvec[dir] is set separately
467 if(! (i>=is && i<=ie && j>=js && j<=je && k>=ks && k<=ke) ){
471 if(! (i>=B1is && i<=B1ie && j>=B1js && j<=B1je && k>=B1ks && k<=B1ke) ){
472 pl=
B1;
MACP1A1(fluxvec,dir,i,j,k,pl)=0.0;
474 if(! (i>=B2is && i<=B2ie && j>=B2js && j<=B2je && k>=B2ks && k<=B2ke) ){
475 pl=
B2;
MACP1A1(fluxvec,dir,i,j,k,pl)=0.0;
477 if(! (i>=B3is && i<=B3ie && j>=B3js && j<=B3je && k>=B3ks && k<=B3ke) ){
478 pl=
B3;
MACP1A1(fluxvec,dir,i,j,k,pl)=0.0;
507 #pragma omp for schedule(OPENMPSCHEDULE(),OPENMPCHUNKSIZE(blocksize)) nowait // can nowait since each fluxvec[dir] is set separately
536 #pragma omp for schedule(OPENMPSCHEDULE(),OPENMPCHUNKSIZE(blocksize)) nowait // can nowait since each fluxvec[dir] is set separately
567 #pragma omp for schedule(OPENMPSCHEDULE(),OPENMPCHUNKSIZE(blocksize)) nowait // can nowait since each fluxvec[dir] is set separately
571 PLOOPBONLY(pl)
MACP1A1(fluxvecEM,dir,i,j,k,pl)=
MACP1A1(fluxvec,dir,i,j,k,pl);
596 #pragma omp for schedule(OPENMPSCHEDULE(),OPENMPCHUNKSIZE(blocksize)) nowait // can nowait since each fluxvec[dir] is set separately
600 PLOOP(pliter,pl)
MACP1A1(fluxvec,dir,i,j,k,pl)+=
MACP1A1(fluxvecEM,dir,i,j,k,pl);
628 #pragma omp for schedule(OPENMPSCHEDULE(),OPENMPCHUNKSIZE(blocksize)) nowait // can nowait since each fluxvec[dir] is set separately
632 #if(SPLITPRESSURETERMINFLUXMA)
634 MACP1A1(fluxvec,dir,i,j,k,
UU+dir)+=
MACP1A1(fluxvec,dir,i,j,k,
FLUXSPLITPMA(dir));
638 #if(SPLITPRESSURETERMINFLUXEM)
640 MACP1A1(fluxvec,dir,i,j,k,
UU+dir)+=
MACP1A1(fluxvecEM,dir,i,j,k,
FLUXSPLITPEM(dir));
645 PLOOP(pliter,pl)
MACP1A1(fluxvec,dir,i,j,k,pl)+=
MACP1A1(fluxvecEM,dir,i,j,k,pl);
662 int fluxcalc_flux(
int stage,
FTYPE (*
pr)[
NSTORE2][
NSTORE3][NPR],
FTYPE (*pstag)[
NSTORE2][
NSTORE3][NPR],
FTYPE (*pl_ct)[
NSTORE1][
NSTORE2][
NSTORE3][NPR2INTERP],
FTYPE (*pr_ct)[
NSTORE1][
NSTORE2][
NSTORE3][NPR2INTERP],
int *Nvec,
FTYPE (*dqvec[NDIM])[
NSTORE2][
NSTORE3][NPR2INTERP],
FTYPE (*fluxvec[NDIM])[
NSTORE2][
NSTORE3][NPR+NSPECIAL],
FTYPE (*fluxvecEM[NDIM])[
NSTORE2][
NSTORE3][NPR+NSPECIAL],
FTYPE CUf,
SFTYPE time,
FTYPE *ndtvec[NDIM], struct
of_loop *cent2faceloop)
664 int fluxcalc_flux_1d(
int stage,
FTYPE (*
pr)[
NSTORE2][
NSTORE3][NPR],
FTYPE (*pstag)[
NSTORE2][
NSTORE3][NPR],
FTYPE (*pl_ct)[
NSTORE1][
NSTORE2][
NSTORE3][NPR2INTERP],
FTYPE (*pr_ct)[
NSTORE1][
NSTORE2][
NSTORE3][NPR2INTERP],
int dir,
SFTYPE time,
int is,
int ie,
int js,
int je,
int ks,
int ke,
int idel,
int jdel,
int kdel,
int face,
FTYPE (*dq)[
NSTORE2][
NSTORE3][NPR2INTERP],
FTYPE (*F)[
NSTORE2][
NSTORE3][NPR+NSPECIAL],
FTYPE (*FEM)[
NSTORE2][
NSTORE3][NPR+NSPECIAL],
FTYPE CUf,
FTYPE *ndt,
struct of_loop *cent2faceloop,
int *didassigngetstatecentdata );
666 int idel, jdel, kdel, face;
668 int didassigngetstatecentdata;
676 didassigngetstatecentdata=0;
705 MYFUN(
fluxcalc_flux_1d(stage,
pr, pstag, pl_ct, pr_ct, dir, time, is, ie, js, je, ks, ke, idel, jdel, kdel, face, dqvec[dir], fluxvec[dir], fluxvecEM[dir], CUf, ndtvec[dir], ¢2faceloop[dir], &didassigngetstatecentdata),
"flux.c:fluxcalc()",
"fluxcalc_flux_1d", dir);
708 trifprintf(
"%d",dir);
729 *(ndtvec[dimen])=
BIG;
730 ndtveclocal[dimen]=
BIG;
735 int doingdimen[
NDIM];
751 #pragma omp for schedule(OPENMPSCHEDULE(),OPENMPCHUNKSIZE(blocksize))
756 DIMENLOOP(dimen)
if(doingdimen[dimen]) ndtveclocal[dimen]=GLOBALMACP0A1(dtijk,i,j,k,dimen);
758 if(i<-1 || j<-1 || k<-1 || i>
N1 || j>
N2 || k>
N3 || i<0 && j<0 || i<0 && k<0 || j<0 && k<0 || i>
N1-1 && j>
N2-1 || i>
N1-1 && k>
N3-1 || j>
N2-1 && k>
N3-1 || ndtveclocal[1] <0.0 || ndtveclocal[2] <0.0 || ndtveclocal[3] <0.0)
continue;
762 wavedt =
MINDTSET(ndtveclocal[1],ndtveclocal[2],ndtveclocal[3]);
768 if (wavedt < *(ndtvec[dimen]) ){
769 *ndtvec[dimen] = wavedt;
783 if(doingdimen[dimen]){
784 *ndtvec[dimen]=*ndtvec[dimenorig];
805 int fluxcalc_flux_1d(
int stage,
FTYPE (*
pr)[
NSTORE2][
NSTORE3][NPR],
FTYPE (*pstag)[
NSTORE2][
NSTORE3][NPR],
FTYPE (*pl_ct)[
NSTORE1][
NSTORE2][
NSTORE3][NPR2INTERP],
FTYPE (*pr_ct)[
NSTORE1][
NSTORE2][
NSTORE3][NPR2INTERP],
int dir,
SFTYPE time,
int is,
int ie,
int js,
int je,
int ks,
int ke,
int idel,
int jdel,
int kdel,
int face,
FTYPE (*dq)[
NSTORE2][
NSTORE3][NPR2INTERP],
FTYPE (*F)[
NSTORE2][
NSTORE3][NPR+NSPECIAL],
FTYPE (*FEM)[
NSTORE2][
NSTORE3][NPR+NSPECIAL],
FTYPE CUf,
FTYPE *ndt,
struct of_loop *cent2faceloop,
int *didassigngetstatecentdata )
807 int fluxcalc_standard(
int stage,
FTYPE (*
pr)[
NSTORE2][
NSTORE3][NPR],
FTYPE (*pstag)[
NSTORE2][
NSTORE3][NPR],
FTYPE (*pl_ct)[
NSTORE1][
NSTORE2][
NSTORE3][NPR2INTERP],
FTYPE (*pr_ct)[
NSTORE1][
NSTORE2][
NSTORE3][NPR2INTERP],
int dir,
SFTYPE time,
int is,
int ie,
int js,
int je,
int ks,
int ke,
int idel,
int jdel,
int kdel,
int face,
FTYPE (*dq)[
NSTORE2][
NSTORE3][NPR2INTERP],
FTYPE (*F)[
NSTORE2][
NSTORE3][NPR+NSPECIAL],
FTYPE (*FEM)[
NSTORE2][
NSTORE3][NPR+NSPECIAL],
FTYPE CUf,
FTYPE *ndt,
struct of_loop *cent2faceloop,
int *didassigngetstatecentdata);
808 int fluxcalc_standard_4fluxctstag(
int stage,
FTYPE (*
pr)[
NSTORE2][
NSTORE3][NPR],
FTYPE (*pstag)[
NSTORE2][
NSTORE3][NPR],
FTYPE (*pl_ct)[
NSTORE1][
NSTORE2][
NSTORE3][NPR2INTERP],
FTYPE (*pr_ct)[
NSTORE1][
NSTORE2][
NSTORE3][NPR2INTERP],
int dir,
SFTYPE time,
int is,
int ie,
int js,
int je,
int ks,
int ke,
int idel,
int jdel,
int kdel,
int face,
FTYPE (*dq)[
NSTORE2][
NSTORE3][NPR2INTERP],
FTYPE (*F)[
NSTORE2][
NSTORE3][NPR+NSPECIAL],
FTYPE (*FEM)[
NSTORE2][
NSTORE3][NPR+NSPECIAL],
FTYPE CUf,
FTYPE *ndt,
struct of_loop *cent2faceloop,
int *didassigngetstatecentdata);
820 MYFUN(
fluxcalc_standard_4fluxctstag(stage,
pr,pstag,pl_ct, pr_ct, dir,time, is, ie, js, je, ks, ke,idel,jdel,kdel,face,dq,F,FEM,CUf,ndt,cent2faceloop,didassigngetstatecentdata),
"flux.c:fluxcalc_flux_1d()",
"fluxcalc_standard_4fluxctstag()", 1);
824 MYFUN(
fluxcalc_standard(stage,
pr,pstag,pl_ct, pr_ct, dir,time,is, ie, js, je, ks, ke,idel,jdel,kdel,face,dq,F,FEM,CUf,ndt,cent2faceloop,didassigngetstatecentdata),
"flux.c:fluxcalc_flux_1d()",
"fluxcalc_standard()", 1);
873 void set_normal_realisinterp(
int *realisinterp)
911 #pragma omp parallel OPENMPGLOBALPRIVATEFORSTATEANDGEOMINTERP // generally requires full information
915 struct of_geom *ptrgeom=&geomdontuse;
919 ptrgeom=&geomdontuse;
921 #pragma omp for schedule(OPENMPSCHEDULE(),OPENMPCHUNKSIZE(blocksize))
928 if(
npr2interpstart<=
npr2interpend) rescale(
DORESCALE,dir,
MAC(
pr,i,j,k),ptrgeom,
MAC(p2interp,i,j,k));
940 int fluxcalc_standard(
int stage,
FTYPE (*
pr)[
NSTORE2][
NSTORE3][NPR],
FTYPE (*pstag)[
NSTORE2][
NSTORE3][NPR],
FTYPE (*pl_ct)[
NSTORE1][
NSTORE2][
NSTORE3][NPR2INTERP],
FTYPE (*pr_ct)[
NSTORE1][
NSTORE2][
NSTORE3][NPR2INTERP],
int dir,
SFTYPE time,
int is,
int ie,
int js,
int je,
int ks,
int ke,
int idel,
int jdel,
int kdel,
int face,
FTYPE (*dq)[
NSTORE2][
NSTORE3][NPR2INTERP],
FTYPE (*F)[
NSTORE2][
NSTORE3][NPR+NSPECIAL],
FTYPE (*FEM)[
NSTORE2][
NSTORE3][NPR+NSPECIAL],
FTYPE CUf,
FTYPE *ndt,
struct of_loop *cent2faceloop,
int *didassigngetstatecentdata)
942 void slope_lim(
int dointerpolation,
int realisinterp,
int dir,
int idel,
int jdel,
int kdel,
FTYPE (*primreal)[
NSTORE2][
NSTORE3][NPR],
FTYPE (*p2interp)[
NSTORE2][
NSTORE3][NPR2INTERP],
FTYPE (*dq)[
NSTORE2][
NSTORE3][NPR2INTERP],
FTYPE (*pleft)[
NSTORE2][
NSTORE3][NPR2INTERP],
FTYPE (*pright)[
NSTORE2][
NSTORE3][NPR2INTERP],
struct of_loop *cent2faceloop);
943 int getplpr(
int dir,
SFTYPE time,
int idel,
int jdel,
int kdel,
int i,
int j,
int k,
struct of_geom *geom,
FTYPE (*
pr)[
NSTORE2][
NSTORE3][NPR],
FTYPE (*pstag)[
NSTORE2][
NSTORE3][NPR],
FTYPE (*p2interp)[
NSTORE2][
NSTORE3][NPR2INTERP],
FTYPE (*dq)[
NSTORE2][
NSTORE3][NPR2INTERP],
FTYPE (*pleft)[
NSTORE2][
NSTORE3][NPR2INTERP],
FTYPE (*pright)[
NSTORE2][
NSTORE3][NPR2INTERP],
FTYPE *p2interp_l,
FTYPE *p2interp_r,
FTYPE *p_l,
FTYPE *p_r);
949 void do_noninterpolation_dimension(
int whichfluxcalc,
int dointerpolation,
int realisinterp,
int dir,
int idel,
int jdel,
int kdel,
FTYPE (*
pr)[
NSTORE2][
NSTORE3][NPR],
FTYPE (*pl_ct)[
NSTORE1][
NSTORE2][
NSTORE3][NPR2INTERP],
FTYPE (*pr_ct)[
NSTORE1][
NSTORE2][
NSTORE3][NPR2INTERP],
struct of_loop *cent2faceloop,
int *didassigngetstatecentdata);
950 void compute_and_store_fluxstate(
int dimen,
int isleftright,
int i,
int j,
int k,
struct of_geom *geom,
FTYPE *
pr);
966 set_normal_realisinterp(&realisinterp);
985 do_noninterpolation_dimension(
ORIGINALFLUXCALC, dointerpolation, realisinterp, dir, idel, jdel, kdel, pr, pl_ct, pr_ct, cent2faceloop, didassigngetstatecentdata);
1015 rescale_calc_full(dir,pr,p2interp);
1032 MYFUN(
get_global_wavespeeds_full(dir,is,ie,js,je,ks,ke,idel,jdel,kdel,
POINT(pr),
GLOBALPOINT(wspeed)),
"flux.c:fluxcalc_standard()",
"get_global_wavespeeds_full()", 0);
1051 slope_lim(dointerpolation,realisinterp,dir,idel,jdel,kdel,pr,p2interp,dq,
GLOBALPOINT(pleft),
GLOBALPOINT(pright),cent2faceloop);
1070 #pragma omp parallel OPENMPGLOBALPRIVATEFORSTATEANDGEOM // requires full information
1072 int i,
j,k,pl,pliter;
1074 struct of_geom *ptrgeom=&geomdontuse;
1075 FTYPE p_l[NPR2INTERP], p_r[NPR2INTERP];
1076 FTYPE pstore_l[NPR2INTERP],pstore_r[NPR2INTERP];
1077 FTYPE *p2interp_l,*p2interp_r;
1080 int computewithleft,computewithright;
1086 p2interp_l=pstore_l;
1087 p2interp_r=pstore_r;
1094 #pragma omp for schedule(OPENMPSCHEDULE(),OPENMPCHUNKSIZE(blocksize))
1115 MYFUN(getplpr(dir,time,idel,jdel,kdel,i,j,k,ptrgeom,pr,pstag,p2interp,dq,
GLOBALPOINT(pleft),
GLOBALPOINT(pright),p2interp_l,p2interp_r,p_l,p_r),
"flux.c:fluxcalc_standard()",
"getplpr", 1);
1116 #if(SPLITNPR || FIELDSTAGMEM)
1119 MACP1A1(pl_ct,dir,i,j,k,pl)=p_l[pl];
1120 MACP1A1(pr_ct,dir,i,j,k,pl)=p_r[pl];
1123 p_l[pl]=
MACP1A1(pl_ct,dir,i,j,k,pl);
1124 p_r[pl]=
MACP1A1(pr_ct,dir,i,j,k,pl);
1129 #if(SPLITNPR || FIELDSTAGMEM)
1133 p_l[pl]=
MACP1A1(pl_ct,dir,i,j,k,pl);
1134 p_r[pl]=
MACP1A1(pr_ct,dir,i,j,k,pl);
1137 #if(SPLITNPR==0 || FIELDSTAGMEM==0)
1138 dualfprintf(
fail_file,
"Should not be using gp_? in flux.c when SPLITNPR==0 or FIELDSTAGMEM==0\n");
1146 leftrightcompute(i, j, k, dir, is, ie, js, je, ks, ke, &computewithleft, &computewithright);
1156 if(computewithleft) compute_and_store_fluxstate(dir,
ISLEFT, i, j, k, ptrgeom, p_l);
1157 if(computewithright) compute_and_store_fluxstate(dir,
ISRIGHT, i, j, k, ptrgeom, p_r);
1163 if(computewithleft&&computewithright){
1172 MYFUN(
flux_compute_general(i, j, k, dir, ptrgeom, CUf,
MAC(pr,i,j,k), p_l, p_r,
MAC(F,i,j,k), &ctop),
"step_ch.c:fluxcalc()",
"flux_compute", 1);
1175 MYFUN(flux_compute_splitmaem(i, j, k, dir, ptrgeom, CUf,
MAC(pr,i,j,k), p_l, p_r,
MAC(F,i,j,k),
MAC(FEM,i,j,k), &ctop),
"step_ch.c:fluxcalc()",
"flux_compute", 1);
1194 dtij =
cour *
dx[dir] / ctop;
1206 #pragma omp critical
1219 GLOBALMACP0A1(dtijk,i,j,k,dir) = dtij;
1245 void do_noninterpolation_dimension(
int whichfluxcalc,
int dointerpolation,
int realisinterp,
int dir,
int idel,
int jdel,
int kdel,
FTYPE (*
pr)[
NSTORE2][
NSTORE3][NPR],
FTYPE (*pl_ct)[
NSTORE1][
NSTORE2][
NSTORE3][NPR2INTERP],
FTYPE (*pr_ct)[
NSTORE1][
NSTORE2][
NSTORE3][NPR2INTERP],
struct of_loop *cent2faceloop,
int *didassigngetstatecentdata)
1250 struct of_geom *ptrgeom=&geomdontuse;
1251 void slope_lim(
int dointerpolation,
int realisinterp,
int dir,
int idel,
int jdel,
int kdel,
FTYPE (*primreal)[
NSTORE2][
NSTORE3][NPR],
FTYPE (*p2interp)[
NSTORE2][
NSTORE3][NPR2INTERP],
FTYPE (*dq)[
NSTORE2][
NSTORE3][NPR2INTERP],
FTYPE (*pleft)[
NSTORE2][
NSTORE3][NPR2INTERP],
FTYPE (*pright)[
NSTORE2][
NSTORE3][NPR2INTERP],
struct of_loop *cent2faceloop);
1252 void slope_lim_cent2face(
int dointerpolation,
int realisinterp,
int dir,
int idel,
int jdel,
int kdel,
FTYPE (*primreal)[
NSTORE2][
NSTORE3][NPR],
FTYPE (*p2interp)[
NSTORE2][
NSTORE3][NPR2INTERP],
FTYPE (*dq)[
NSTORE2][
NSTORE3][NPR2INTERP],
FTYPE (*pleft)[
NSTORE2][
NSTORE3][NPR2INTERP],
FTYPE (*pright)[
NSTORE2][
NSTORE3][NPR2INTERP],
struct of_loop *cent2faceloop);
1253 void compute_and_store_fluxstate(
int dimen,
int isleftright,
int i,
int j,
int k,
struct of_geom *geom,
FTYPE *
pr);
1254 void compute_and_store_fluxstate_assign(
int dimeninput,
int dimenoutput,
int isleftrightinput,
int isleftrightoutput,
int i,
int j,
int k);
1261 copy_3dnpr2interp_2ptrs_fullloop(
pr,pl_ct[dir],pr_ct[dir]);
1268 slope_lim(dointerpolation, realisinterp,dir,idel,jdel,kdel,NULL,NULL,NULL,NULL,NULL,cent2faceloop);
1271 slope_lim_cent2face(dointerpolation, realisinterp,dir,idel,jdel,kdel,NULL,NULL,NULL,NULL,NULL,cent2faceloop);
1283 int fluxcalc_standard_4fluxctstag(
int stage,
FTYPE (*
pr)[
NSTORE2][
NSTORE3][NPR],
FTYPE (*pstag)[
NSTORE2][
NSTORE3][NPR],
FTYPE (*pl_ct)[
NSTORE1][
NSTORE2][
NSTORE3][NPR2INTERP],
FTYPE (*pr_ct)[
NSTORE1][
NSTORE2][
NSTORE3][NPR2INTERP],
int dir,
SFTYPE time,
int is,
int ie,
int js,
int je,
int ks,
int ke,
int idel,
int jdel,
int kdel,
int face,
FTYPE (*dq)[
NSTORE2][
NSTORE3][NPR2INTERP],
FTYPE (*F)[
NSTORE2][
NSTORE3][NPR+NSPECIAL],
FTYPE (*FEM)[
NSTORE2][
NSTORE3][NPR+NSPECIAL],
FTYPE CUf,
FTYPE *ndt,
struct of_loop *cent2faceloop,
int *didassigngetstatecentdata)
1285 int interpolate_prim_cent2face(
int stage,
int realisinterp,
FTYPE (*
pr)[
NSTORE2][
NSTORE3][NPR],
FTYPE (*pstag)[
NSTORE2][
NSTORE3][NPR],
FTYPE (*pl_ct)[
NSTORE1][
NSTORE2][
NSTORE3][NPR2INTERP],
FTYPE (*pr_ct)[
NSTORE1][
NSTORE2][
NSTORE3][NPR2INTERP],
int dir,
SFTYPE time,
int is,
int ie,
int js,
int je,
int ks,
int ke,
int idel,
int jdel,
int kdel,
int face,
FTYPE (*dq)[
NSTORE2][
NSTORE3][NPR2INTERP],
struct of_loop *cent2faceloop);
1289 int dointerpolation;
1290 void do_noninterpolation_dimension(
int whichfluxcalc,
int dointerpolation,
int realisinterp,
int dir,
int idel,
int jdel,
int kdel,
FTYPE (*
pr)[
NSTORE2][
NSTORE3][NPR],
FTYPE (*pl_ct)[
NSTORE1][
NSTORE2][
NSTORE3][NPR2INTERP],
FTYPE (*pr_ct)[
NSTORE1][
NSTORE2][
NSTORE3][NPR2INTERP],
struct of_loop *cent2faceloop,
int *didassigngetstatecentdata);
1308 set_normal_realisinterp(&realisinterp);
1327 do_noninterpolation_dimension(
NEWFLUXCALC, dointerpolation, realisinterp, dir, idel, jdel, kdel,
pr, pl_ct, pr_ct, cent2faceloop,didassigngetstatecentdata);
1362 MYFUN(
get_global_wavespeeds_full(dir,is,ie,js,je,ks,ke,idel,jdel,kdel,
POINT(
pr),
GLOBALPOINT(wspeed)),
"flux.c:fluxcalc_standard()",
"get_global_wavespeeds_full()", 0);
1376 interpolate_prim_cent2face(stage, realisinterp,
pr, pstag, pl_ct, pr_ct, dir, time, is, ie, js, je, ks, ke, idel, jdel, kdel, face, dq, cent2faceloop);
1395 #pragma omp parallel // then flux_compute() below uses *stored* state already
1397 #pragma omp parallel OPENMPGLOBALPRIVATEFORSTATEANDGEOM // requires full information
1404 struct of_geom *ptrgeom=&geomdontuse;
1405 int computewithleft,computewithright;
1410 ptrgeom=&geomdontuse;
1412 #pragma omp for schedule(OPENMPSCHEDULE(),OPENMPCHUNKSIZE(blocksize))
1419 leftrightcompute(i, j, k, dir, is, ie, js, je, ks, ke, &computewithleft, &computewithright);
1424 if(computewithleft&&computewithright){
1441 MYFUN(
flux_compute_general(i, j, k, dir, ptrgeom, CUf,
MAC(
pr,i,j,k),
MACP1A0(pl_ct,dir,i,j,k),
MACP1A0(pr_ct,dir,i,j,k),
MAC(F,i,j,k), &ctop),
"step_ch.c:fluxcalc()",
"flux_compute", 1);
1444 MYFUN(flux_compute_splitmaem(i, j, k, dir, ptrgeom, CUf,
MAC(
pr,i,j,k),
MACP1A0(pl_ct,dir,i,j,k),
MACP1A0(pr_ct,dir,i,j,k),
MAC(F,i,j,k),
MAC(FEM,i,j,k), &ctop),
"step_ch.c:fluxcalc()",
"flux_compute", 1);
1463 dtij =
cour *
dx[dir] / ctop;
1476 #pragma omp critical
1489 GLOBALMACP0A1(dtijk,i,j,k,dir) = dtij;
1518 int interpolate_prim_cent2face(
int stage,
int realisinterp,
FTYPE (*
pr)[
NSTORE2][
NSTORE3][NPR],
FTYPE (*pstag)[
NSTORE2][
NSTORE3][NPR],
FTYPE (*pl_ct)[
NSTORE1][
NSTORE2][
NSTORE3][NPR2INTERP],
FTYPE (*pr_ct)[
NSTORE1][
NSTORE2][
NSTORE3][NPR2INTERP],
int dir,
SFTYPE time,
int is,
int ie,
int js,
int je,
int ks,
int ke,
int idel,
int jdel,
int kdel,
int face,
FTYPE (*dq)[
NSTORE2][
NSTORE3][NPR2INTERP],
struct of_loop *cent2faceloop)
1520 void slope_lim_cent2face(
int dointerpolation,
int realisinterp,
int dir,
int idel,
int jdel,
int kdel,
FTYPE (*primreal)[
NSTORE2][
NSTORE3][NPR],
FTYPE (*p2interp)[
NSTORE2][
NSTORE3][NPR2INTERP],
FTYPE (*dq)[
NSTORE2][
NSTORE3][NPR2INTERP],
FTYPE (*pleft)[
NSTORE2][
NSTORE3][NPR2INTERP],
FTYPE (*pright)[
NSTORE2][
NSTORE3][NPR2INTERP],
struct of_loop *cent2faceloop);
1521 int getplpr(
int dir,
SFTYPE time,
int idel,
int jdel,
int kdel,
int i,
int j,
int k,
struct of_geom *geom,
FTYPE (*
pr)[
NSTORE2][
NSTORE3][NPR],
FTYPE (*pstag)[
NSTORE2][
NSTORE3][NPR],
FTYPE (*p2interp)[
NSTORE2][
NSTORE3][NPR2INTERP],
FTYPE (*dq)[
NSTORE2][
NSTORE3][NPR2INTERP],
FTYPE (*pleft)[
NSTORE2][
NSTORE3][NPR2INTERP],
FTYPE (*pright)[
NSTORE2][
NSTORE3][NPR2INTERP],
FTYPE *p2interp_l,
FTYPE *p2interp_r,
FTYPE *p_l,
FTYPE *p_r);
1522 void compute_and_store_fluxstate(
int dimen,
int isleftright,
int i,
int j,
int k,
struct of_geom *geom,
FTYPE *
pr);
1524 int nprlocalstart,nprlocalend;
1525 int nprlocallist[MAXNPR];
1526 int realis,realie,realjs,realje,realks,realke;
1527 int dointerpolation;
1554 #pragma omp parallel private(pl,pl2)
1579 rescale_calc_full(dir,pr,p2interp);
1595 slope_lim_cent2face(dointerpolation,realisinterp,dir,idel,jdel,kdel,pr,p2interp,dq,
GLOBALPOINT(pleft),
GLOBALPOINT(pright),cent2faceloop);
1632 #pragma omp parallel OPENMPGLOBALPRIVATEFORSTATEANDGEOM // storage of state requires full copyin()
1634 FTYPE p_l[NPR2INTERP], p_r[NPR2INTERP];
1635 FTYPE pstore_l[NPR2INTERP],pstore_r[NPR2INTERP];
1636 FTYPE *p2interp_l,*p2interp_r;
1640 struct of_geom *ptrgeom=&geomdontuse;
1641 int computewithleft,computewithright;
1647 p2interp_l=pstore_l;
1648 p2interp_r=pstore_r;
1655 #pragma omp for schedule(OPENMPSCHEDULE(),OPENMPCHUNKSIZE(blocksize))
1674 MYFUN(getplpr(dir,time,idel,jdel,kdel,i,j,k,ptrgeom,pr,pstag,p2interp,dq,
GLOBALPOINT(pleft),
GLOBALPOINT(pright),p2interp_l,p2interp_r,p_l,p_r),
"flux.c:fluxcalc_standard()",
"getplpr", 1);
1678 MACP1A1(pl_ct,dir,i,j,k,pl)=p_l[pl];
1679 MACP1A1(pr_ct,dir,i,j,k,pl)=p_r[pl];
1685 MACP1A1(pl_ct,dir,i,j,k,pl)=p_l[pl];
1686 MACP1A1(pr_ct,dir,i,j,k,pl)=p_r[pl];
1692 leftrightcompute(i, j, k, dir, is, ie, js, je, ks, ke, &computewithleft, &computewithright);
1701 if(computewithleft) compute_and_store_fluxstate(dir,
ISLEFT, i, j, k, ptrgeom, p_l);
1702 if(computewithright) compute_and_store_fluxstate(dir,
ISRIGHT, i, j, k, ptrgeom, p_r);
1732 #pragma omp parallel private(pl)
1750 void compute_and_store_fluxstate_assign(
int dimeninput,
int dimenoutput,
int isleftrightinput,
int isleftrightoutput,
int i,
int j,
int k)
1754 GLOBALMACP1A1(fluxstate,dimenoutput,i,j,k,isleftrightoutput)=
GLOBALMACP1A1(fluxstate,dimeninput,i,j,k,isleftrightinput);
1760 void compute_and_store_fluxstate(
int dimen,
int isleftright,
int i,
int j,
int k,
struct of_geom *geom,
FTYPE *
pr)
1775 int is,ie,js,je,ks,ke,di,dj,dk;
1778 int startorderi,endorderi;
1793 set_interppoint_loop_ranges_3Dextended(
ENOINTERPTYPE, loc, continuous, &is, &ie, &js, &je, &ks, &ke, &di, &dj, &dk);
1796 #if(STOREFLUXSTATE||STORESHOCKINDICATOR)
1805 #pragma omp parallel OPENMPGLOBALPRIVATEFORSTATEANDGEOM // requires full copyin()
1809 struct of_geom *ptrgeom=&geomdontuse;
1815 #pragma omp for schedule(OPENMPSCHEDULE(),OPENMPCHUNKSIZE(blocksize))
1830 #if(RADSHOCKFLAT&&EOMRADTYPE!=EOMRADNONE) // KORAL
1837 #if(STORESHOCKINDICATOR)
1843 #if(VLINEWITHGDETRHO==0)
1851 #if(RADSHOCKFLAT&&EOMRADTYPE!=EOMRADNONE) // KORAL
1852 #if(VLINEWITHGDETRHO==0)
1868 #if(RADSHOCKFLAT&&EOMRADTYPE!=EOMRADNONE) // KORAL
1881 #endif // end if STORESHOCKINDICATOR
1900 #endif// end if STOREFLUXSTATE
1905 #endif// end if STOREFLUXSTATE|| STORESHOCKINDICATOR
1916 #if(STORESHOCKINDICATOR)
1923 dualfprintf(
fail_file,
"MAXBND should be 4 for shockindicator???\n");
1927 startorderi = - (7)/2;
1928 endorderi = - startorderi;
1932 #pragma omp parallel
1941 FTYPE *velptr,*ptotptr;
1950 velptr = a_velstencil - startorderi;
1951 ptotptr = a_ptotstencil - startorderi;
1958 #pragma omp for schedule(OPENMPSCHEDULE(),OPENMPCHUNKSIZE(blocksize))
1962 FTYPE radshock={0},mhdshock={0};
1969 for(l=startorderi;l<=endorderi;l++){
1991 Fi=Ficalc(dir,&velptr[0],&ptotptr[0]);
1994 FTYPE dissit=fabs(GLOBALMACP0A1(dissmeasurearray,i,j,k,1));
1995 dissit =
MAX(0.0,
MIN(1,2*(dissit-0.3)));
1996 Fi=
MIN(1.0,
MAX(Fi,dissit));
1999 GLOBALMACP1A0(shockindicatorarray,
SHOCKPLDIR1+dir-1,i,j,k)=Fi;
2003 GLOBALMACP0A1(dissmeasurearray,i,j,k,NSPECIAL+1+dir-1)=GLOBALMACP1A0(shockindicatorarray,
SHOCKPLDIR1+dir-1,i,j,k);
2013 GLOBALMACP1A0(shockindicatorarray,
DIVPLDIR1+dir-1,i,j,k)=Divcalc(dir,Fi,&velptr[0],&ptotptr[0]);
2018 for(l=startorderi;l<=endorderi;l++){
2039 Firad=Ficalc(dir,&velptr[0],&ptotptr[0]);
2043 FTYPE dissit=fabs(GLOBALMACP0A1(dissmeasurearray,i,j,k,5));
2044 dissit =
MAX(0.0,
MIN(1,2*(dissit-0.3)));
2045 Firad=
MIN(1.0,
MAX(Firad,dissit));
2048 GLOBALMACP1A0(shockindicatorarray,
SHOCKRADPLDIR1+dir-1,i,j,k)=Firad;
2060 GLOBALMACP0A1(dissmeasurearray,i,j,k,NSPECIAL+1+3+dir-1)=GLOBALMACP1A0(shockindicatorarray,
SHOCKRADPLDIR1+dir-1,i,j,k);
2065 GLOBALMACP1A0(shockindicatorarray,
DIVRADPLDIR1+dir-1,i,j,k)=Divcalc(dir,Firad,&velptr[0],&ptotptr[0]);
2073 struct of_geom *ptrgeom=&geomdontuse;
2074 #if(RADSHOCKFLAT&&EOMRADTYPE!=EOMRADNONE) // KORAL
2091 GLOBALMACP1A0(shockindicatorarray,
SHOCKPLDIR1+dir-1,i,j,k) = Fiswitch*
MIN(1.0,
MAX(Firad,Fi)) + (1.0-Fiswitch)*Fi;
2092 GLOBALMACP1A0(shockindicatorarray,
SHOCKRADPLDIR1+dir-1,i,j,k) = Fiswitch*
MIN(1.0,
MAX(Firad,Fi)) + (1.0-Fiswitch)*Firad;
2118 FTYPE divcond=-1.0,absdivcond=0.0;
2123 if(VLINEWITHGDETRHO==0){
2124 divcondtest[dir]=GLOBALMACP1A0(shockindicatorarray,
DIVPLDIR1+dir-1,i,j,k)/(sqrt(fabs(ptrgeom->gcon[
GIND(dir,dir)])));
2127 divcondtest[dir]=GLOBALMACP1A0(shockindicatorarray,
DIVPLDIR1+dir-1,i,j,k)/(sqrt(fabs(ptrgeom->gcon[
GIND(dir,dir)]))*ptrgeom->gdet);
2129 absdivcondtest=fabs(divcondtest[dir]);
2130 if(absdivcondtest>absdivcond){
2132 absdivcond=absdivcondtest;
2133 divcond=divcondtest[dir];
2140 #define MAXSHOCK (0.1)
2141 #define FACTORBIGDIV (10.0)
2143 if(GLOBALMACP1A0(shockindicatorarray,
SHOCKPLDIR1+dir-1,i,j,k)>MAXSHOCK){
2147 if(dir!=largestdir && fabs(divcond)<FACTORBIGDIV*fabs(divcondtest[dir]) && divcondtest[dir]<0.0){
2155 GLOBALMACP1A0(shockindicatorarray,
DIVPLDIR1+dir-1,i,j,k)=divcond;
2184 #endif // end if STORESHOCKINDICATOR
2199 int getplpr(
int dir,
SFTYPE time,
int idel,
int jdel,
int kdel,
int i,
int j,
int k,
struct of_geom *ptrgeom,
FTYPE (*pr)[
NSTORE2][
NSTORE3][NPR],
FTYPE (*pstag)[
NSTORE2][
NSTORE3][NPR],
FTYPE (*p2interp)[
NSTORE2][
NSTORE3][NPR2INTERP],
FTYPE (*dq)[
NSTORE2][
NSTORE3][NPR2INTERP],
FTYPE (*pleft)[
NSTORE2][
NSTORE3][NPR2INTERP],
FTYPE (*pright)[
NSTORE2][
NSTORE3][NPR2INTERP],
FTYPE *p2interp_l,
FTYPE *p2interp_r,
FTYPE *p_l,
FTYPE *p_r)
2201 void getp2interplr(
int dir,
int idel,
int jdel,
int kdel,
int i,
int j,
int k,
FTYPE (*p2interp)[
NSTORE2][
NSTORE3][NPR2INTERP],
FTYPE (*dq)[
NSTORE2][
NSTORE3][NPR2INTERP],
FTYPE (*pleft)[
NSTORE2][
NSTORE3][NPR2INTERP],
FTYPE (*pright)[
NSTORE2][
NSTORE3][NPR2INTERP],
FTYPE *p2interp_l,
FTYPE *p2interp_r);
2202 int check_plpr(
int dir,
int i,
int j,
int k,
int idel,
int jdel,
int kdel,
struct of_geom *geom,
FTYPE (*pr)[
NSTORE2][
NSTORE3][NPR],
FTYPE *p_l,
FTYPE *p_r);
2214 getp2interplr(dir,idel,jdel,kdel,i,j,k,p2interp,dq,pleft,pright,p2interp_l,p2interp_r);
2232 rescale(
UNRESCALE,dir,p_l,ptrgeom,p2interp_l);
2233 rescale(
UNRESCALE,dir,p_r,ptrgeom,p2interp_r);
2255 p_l[pl]=p_r[pl]=
MACP0A1(pstag,i,j,k,pl);
2261 p_l[pl]=p_r[pl]=0.5*(p_l[pl]+p_r[pl]);
2267 set_plpr(dir,time,i,j,k,pr,p_l,p_r);
2276 MYFUN(check_plpr(dir, i, j, k, idel, jdel, kdel, ptrgeom, pr, p_l, p_r),
"step_ch.c:fluxcalc()",
"check_plpr()", 1);
2288 int check_plpr(
int dir,
int i,
int j,
int k,
int idel,
int jdel,
int kdel,
struct of_geom *geom,
FTYPE (*pr)[
NSTORE2][
NSTORE3][NPR],
FTYPE *p_l,
FTYPE *p_r)
2294 #if(ZEROOUTFLOWFLUX==1)
2295 inflow_check_4vel(dir,p_l,NULL,-1);
2296 inflow_check_4vel(dir,p_r,NULL,geom,-1);
2298 #elif(WHICHVEL==VEL3)
2299 #if(ZEROOUTFLOWFLUX==1)
2300 inflow_check_3vel(dir,p_l,NULL,geom,-1);
2301 inflow_check_3vel(dir,p_r,NULL,geom,-1);
2305 MYFUN(check_pr(p_l,
MAC(pr,i-idel,j-jdel,k-kdel),NULL,geom,1,-1.0),
"flux.c:check_plpr()",
"check_pr()", 1);
2307 MYFUN(check_pr(p_r,
MAC(pr,i,j,k),NULL,geom,2,-1),
"flux.c:check_plpr()",
"check_pr()", 2);
2309 #elif(WHICHVEL==VELREL4)
2310 #if(ZEROOUTFLOWFLUX==1)
2311 inflow_check_rel4vel(dir,p_l,NULL,geom,-1);
2312 inflow_check_rel4vel(dir,p_r,NULL,geom,-1);
2317 #endif// end if WHICHVEL==VEL4REL
2321 #if(PRODUCTION==0 && MERGEDC2EA2CMETHOD==0)
2324 dualfprintf(
fail_file,
"nstep=%ld steppart=%d i=%d j=%d k=%d :: p_l is not finite pl=%d p_l=%21.15g\n",
nstep,
steppart,i,j,k,pl,p_l[pl]);
2327 dualfprintf(
fail_file,
"nstep=%ld steppart=%d i=%d j=%d k=%d :: p_r is not finite pl=%d p_r=%21.15g\n",
nstep,
steppart,i,j,k,pl,p_r[pl]);
2361 void getp2interplr(
int dir,
int idel,
int jdel,
int kdel,
int i,
int j,
int k,
FTYPE (*p2interp)[
NSTORE2][
NSTORE3][NPR2INTERP],
FTYPE (*dq)[
NSTORE2][
NSTORE3][NPR2INTERP],
FTYPE (*pleft)[
NSTORE2][
NSTORE3][NPR2INTERP],
FTYPE (*pright)[
NSTORE2][
NSTORE3][NPR2INTERP],
FTYPE *p2interp_l,
FTYPE *p2interp_r)
2365 FTYPE rleft,rcenter,thleft,thcent;
2368 int choose_limiter(
int dir,
int i,
int j,
int k,
int pl);
2376 remapdq( dir, idel, jdel, kdel, i, j, k, p2interp, dq, pleft, pright, p2interp_l, p2interp_r);
2387 bl_coord_ijk_2(
im1mac(i), j, k,
CENT, Xleft,Vleft);
2388 bl_coord_ijk_2(i, j, k,
CENT, Xcent,Vcent);
2395 locallim=choose_limiter(dir, i,j,k,pl);
2399 if(rleft>
Rhor) p2interp_l[pl] =
MACP0A1(p2interp,i - idel,j - jdel,k - kdel,pl) + 0.5 *
MACP0A1(dq,i - idel,j - jdel,k - kdel,pl);
2400 else p2interp_l[pl] =
MACP0A1(p2interp,i,j,k,pl) - 0.5 *
MACP0A1(dq,i,j,k,pl);
2401 if(rcenter>
Rhor) p2interp_r[pl] =
MACP0A1(p2interp,i,j,k,pl) - 0.5 *
MACP0A1(dq,i,j,k,pl);
2402 else p2interp_r[pl] =
MACP0A1(p2interp,i+idel,j+jdel,k+kdel,pl) - 1.5 *
MACP0A1(dq,i+idel,j+jdel,k+kdel,pl);
2405 p2interp_l[pl] =
MACP0A1(pright,i-idel,j-jdel,k-kdel,pl);
2406 p2interp_r[pl] =
MACP0A1(pleft,i,j,k,pl);
2417 locallim=choose_limiter(dir, i,j,k,pl);
2421 p2interp_l[pl] =
MACP0A1(p2interp,i - idel,j - jdel,k - kdel,pl) + 0.5 *
MACP0A1(dq,i - idel,j - jdel,k - kdel,pl);
2422 p2interp_r[pl] =
MACP0A1(p2interp,i,j,k,pl) - 0.5 *
MACP0A1(dq,i,j,k,pl);
2426 p2interp_l[pl] =
MACP0A1(pright,i-idel,j-jdel,k-kdel,pl);
2427 p2interp_r[pl] =
MACP0A1(pleft,i,j,k,pl);
2441 remapplpr( dir, idel, jdel, kdel, i, j, k, p2interp, dq, pleft, pright, p2interp_l, p2interp_r);
2451 int choose_limiter(
int dir,
int i,
int j,
int k,
int pl)
2453 #if(LIMADJUST==LIMITERFIXED)
2460 #if(HYDROLIMADJUSTONLY)
2462 else return(
lim[dir]);
2491 void slope_lim(
int dointerpolation,
int realisinterp,
int dir,
int idel,
int jdel,
int kdel,
FTYPE (*primreal)[
NSTORE2][
NSTORE3][NPR],
FTYPE (*p2interp)[
NSTORE2][
NSTORE3][NPR2INTERP],
FTYPE (*dq)[
NSTORE2][
NSTORE3][NPR2INTERP],
FTYPE (*pleft)[
NSTORE2][
NSTORE3][NPR2INTERP],
FTYPE (*pright)[
NSTORE2][
NSTORE3][NPR2INTERP],
struct of_loop *cent2faceloop)
2501 if(dointerpolation)
slope_lim_linetype_c2e(realisinterp,
ENOPRIMITIVE,
ENOINTERPTYPE, dir, idel, jdel, kdel, primreal, NULL, p2interp, pleft, pright);
2507 if(dointerpolation){
2509 slope_lim_pointtype(
ENOINTERPTYPE, realisinterp, pl, dir, loc, continuous, idel, jdel, kdel, primreal, p2interp, dq, pleft, pright);
2533 void slope_lim_cent2face(
int dointerpolation,
int realisinterp,
int dir,
int idel,
int jdel,
int kdel,
FTYPE (*primreal)[
NSTORE2][
NSTORE3][NPR],
FTYPE (*p2interp)[
NSTORE2][
NSTORE3][NPR2INTERP],
FTYPE (*dq)[
NSTORE2][
NSTORE3][NPR2INTERP],
FTYPE (*pleft)[
NSTORE2][
NSTORE3][NPR2INTERP],
FTYPE (*pright)[
NSTORE2][
NSTORE3][NPR2INTERP],
struct of_loop *cent2faceloop)
2552 if(dointerpolation)
slope_lim_linetype_c2e(realisinterp,
ENOPRIMITIVE, interporflux, dir, idel, jdel, kdel, primreal, NULL, p2interp, pleft, pright);
2558 if(dointerpolation){
2560 slope_lim_pointtype(interporflux, realisinterp, pl, dir, loc, continuous, idel, jdel, kdel, primreal, p2interp, dq, pleft, pright);
2579 #define STOREWAVESPEEDMETHOD 1
2601 int dir,
i,
j,k,pl,pliter;
2603 struct of_geom *ptrgeomc=&geomcdontuse;
2606 struct of_geom *ptrgeomf1=&geomf1dontuse;
2608 struct of_geom *ptrgeomf2=&geomf2dontuse;
2610 struct of_geom geomf1udontuse;
2611 struct of_geom *ptrgeomf1u=&geomf1udontuse;
2612 struct of_geom geomf2udontuse;
2613 struct of_geom *ptrgeomf2u=&geomf2udontuse;
2615 struct of_geom geomcorn3dontuse;
2616 struct of_geom *ptrgeomcorn3=&geomcorn3dontuse;
2619 FTYPE primcent[3][3][NPR];
2620 FTYPE prim[3][3][NPR];
2632 int ignorecourant=0;
2633 FTYPE dB[2],ctop[2],ctoporig[2];
2636 struct of_state state_c, state_l, state_r;
2637 struct of_state *ptrstate_c, *ptrstate_l, *ptrstate_r;
2638 FTYPE F_c[NPR], F_l[NPR], F_r[NPR];
2639 FTYPE U_c[NPR], U_l[NPR], U_r[NPR];
2642 extern 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);
2645 FTYPE *ctopptr=&ctopother[0];
2647 FTYPE *ctopptr2=&ctopother2[0];
2650 FTYPE *ctopradptr=&ctopradother[0];
2652 FTYPE *ctopradptr2=&ctopradother2[0];
2655 FTYPE p_l[NPR],p_r[NPR];
2658 int is,ie,js,je,ks,ke;
2661 #if(EOMRADTYPE!=EOMRADNONE)
2662 dualfprintf(
fail_file,
"fluxcalc_donor not setup for radiation.");
2672 ptrstate_c = &state_c;
2673 ptrstate_l = &state_l;
2674 ptrstate_r = &state_r;
2680 #define MYCOMPLOOPF3 for(k=-SHIFT3+SHIFTX3DN;k<=N3-1+SHIFT3+SHIFT3+SHIFTX3UP;k++)
2681 #define MYCOMPLOOPF2 for(j=-SHIFT2+SHIFTX2DN;j<=N2-1+SHIFT2+SHIFT2+SHIFTX2UP;j++)
2682 #define MYCOMPLOOPF1 for(i=-SHIFT1+SHIFTX1DN;i<=N1-1+SHIFT1+SHIFT1+SHIFTX1UP;i++)
2692 #define MYCOMPLOOPF MYCOMPLOOPF3 MYCOMPLOOPF2 MYCOMPLOOPF1
2702 PLOOP(pliter,pl) primcent[shifti][shiftj][pl] =
MACP0A1(pr,ii,jj,kk,pl);
2703 PLOOP(pliter,pl) prim[shifti][shiftj][pl] =
MACP0A1(pr,ii,jj,kk,pl);
2711 ucon_calc(prim[shifti][shiftj], ptrgeomc, uconcent[shifti][shiftj],others);
2715 ucon_calc(prim[shifti][shiftj], ptrgeomf1, uconf1[shifti][shiftj],others);
2719 ucon_calc(prim[shifti][shiftj], ptrgeomf2, uconf2[shifti][shiftj],others);
2734 PLOOP(pliter,pl) p_l[pl] = prim[0][1][pl];
2735 PLOOP(pliter,pl) p_r[pl] = prim[1][1][pl];
2736 p_l[
B1]=p_r[
B1]=prim[1][1][
B1];
2742 p_r[
B2]=0.5*(prim[1][1][
B2]*ptrgeomf2->gdet+prim[1][2][
B2]*ptrgeomf2u->gdet)/(ptrgeomc->gdet);
2750 p_l[
B2]=0.5*(prim[0][1][
B2]*ptrgeomf2->gdet+prim[0][2][
B2]*ptrgeomf2u->gdet)/(ptrgeomc->gdet);
2756 PLOOP(pliter,pl) pvec_l[dir][pl]=p_l[pl];
2757 PLOOP(pliter,pl) pvec_r[dir][pl]=p_r[pl];
2761 flux_compute_general(i, j, k, dir, ptrgeomf1, CUf, NULL, p_l, p_r,
MAC(F1,i,j,k), &ctopptr[dir]);
2765 MYFUN(
p2SFUevolve(dir,
ISLEFT, p_l, ptrgeomf1, &ptrstate_l, F_l, U_l),
"step_ch.c:fluxcalc()",
"p2SFUevolve()", 1);
2766 MYFUN(
p2SFUevolve(dir,
ISRIGHT, p_r, ptrgeomf1, &ptrstate_r, F_r, U_r),
"step_ch.c:fluxcalc()",
"p2SFUevolve()", 2);
2770 MYFUN(
vchar(p_l, ptrstate_l, dir, ptrgeomf1, &ocminmax_l[
CMAX], &ocminmax_l[
CMIN],&ignorecourant),
"step_ch.c:fluxcalc()",
"vchar() dir=1or2", 1);
2771 MYFUN(
vchar(p_r, ptrstate_r, dir, ptrgeomf1, &ocminmax_r[CMAX], &ocminmax_r[CMIN],&ignorecourant),
"step_ch.c:fluxcalc()",
"vchar() dir=1or2", 2);
2772 cminmax_calc(ocminmax_l[CMIN],ocminmax_r[CMIN],ocminmax_l[CMAX],ocminmax_r[CMAX],&ocminmax[CMIN],&ocminmax[CMAX],&ctopptr[1]);
2777 get_state(primcent[0][1],ptrgeomc,&state);
2778 MYFUN(
vchar(primcent[0][1], &state, dir, ptrgeomc, &ocminmax_l[
CMAX], &ocminmax_l[
CMIN],&ignorecourant),
"step_ch.c:fluxcalc()",
"vchar() dir=1or2", 1);
2780 get_state(primcent[1][1],ptrgeomc,&state);
2781 MYFUN(
vchar(primcent[1][1], &state, dir, ptrgeomc, &ocminmax_r[CMAX], &ocminmax_r[CMIN],&ignorecourant),
"step_ch.c:fluxcalc()",
"vchar() dir=1or2", 2);
2782 cminmax_calc(ocminmax_l[CMIN],ocminmax_r[CMIN],ocminmax_l[CMAX],ocminmax_r[CMAX],&ocminmax[CMIN],&ocminmax[CMAX],&ctopptr[1]);
2794 MYFUN(
flux_compute(i, j, k, dir, ptrgeomf1, ocminmax_l,ocminmax_r, ocminmax, ctopptr[1], ocminmaxrad_l,ocminmaxrad_r, ocminmaxrad, ctopradptr[1], CUf, p_l, p_r, U_l, U_r, F_l, F_r, F),
"step_ch.c:fluxcalc()",
"flux_compute", 1);
2799 if(i==390 && j==1 && k==0){
2801 PLOOP(pliter,pl) dualfprintf(
fail_file,
"F1: pl=%d p_l=%21.15g p_r=%21.15g U_l=%21.15g U_r=%21.15g F_l=%21.15g F_r=%21.15g F=%21.15g\n",pl,p_l[pl],p_r[pl],U_l[pl],U_r[pl],F_l[pl],F_r[pl],F[pl]);
2802 dualfprintf(
fail_file,
"NEW: ocminmax_l[CMIN]=%21.15g ocminmax_r[CMIN]=%21.15g ocminmax_l[CMAX]=%21.15g ocminmax_r[CMAX]=%21.15g ocminmax[CMIN]=%21.15g ocminmax[CMAX]=%21.15g ctopptr[1]=%21.15g\n",ocminmax_l[
CMIN],ocminmax_r[CMIN],ocminmax_l[
CMAX],ocminmax_r[CMAX],ocminmax[CMIN],ocminmax[CMAX],ctopptr[1]);
2811 PLOOP(pliter,pl) p_l[pl] = prim[0][0][pl];
2812 PLOOP(pliter,pl) p_r[pl] = prim[1][0][pl];
2813 p_l[
B1]=p_r[
B1]=prim[1][0][
B1];
2818 p_r[
B2]=0.5*(prim[1][0][
B2]*ptrgeomf2->gdet+prim[1][1][
B2]*ptrgeomf2u->gdet)/(ptrgeomc->gdet);
2823 p_l[
B2]=0.5*(prim[0][0][
B2]*ptrgeomf2->gdet+prim[0][1][
B2]*ptrgeomf2u->gdet)/(ptrgeomc->gdet);
2825 MYFUN(
p2SFUevolve(dir,
ISLEFT, p_l, ptrgeomf1, &ptrstate_l, F_l, U_l),
"step_ch.c:fluxcalc()",
"p2SFUevolve()", 1);
2826 MYFUN(
p2SFUevolve(dir,
ISRIGHT, p_r, ptrgeomf1, &ptrstate_r, F_r, U_r),
"step_ch.c:fluxcalc()",
"p2SFUevolve()", 2);
2831 MYFUN(
vchar(p_l, ptrstate_l, dir, ptrgeomf1, &ocminmax_l[
CMAX], &ocminmax_l[
CMIN],&ignorecourant),
"step_ch.c:fluxcalc()",
"vchar() dir=1or2", 1);
2832 MYFUN(
vchar(p_r, ptrstate_r, dir, ptrgeomf1, &ocminmax_r[CMAX], &ocminmax_r[CMIN],&ignorecourant),
"step_ch.c:fluxcalc()",
"vchar() dir=1or2", 2);
2833 cminmax_calc(ocminmax_l[CMIN],ocminmax_r[CMIN],ocminmax_l[CMAX],ocminmax_r[CMAX],&ocminmax[CMIN],&ocminmax[CMAX],&ctopptr2[1]);
2839 get_state(primcent[0][0],ptrgeomc,&state);
2840 MYFUN(
vchar(primcent[0][0], &state, dir, ptrgeomc, &ocminmax_l[
CMAX], &ocminmax_l[
CMIN],&ignorecourant),
"step_ch.c:fluxcalc()",
"vchar() dir=1or2", 1);
2842 get_state(primcent[1][0],ptrgeomc,&state);
2843 MYFUN(
vchar(primcent[1][0], &state, dir, ptrgeomc, &ocminmax_r[CMAX], &ocminmax_r[CMIN],&ignorecourant),
"step_ch.c:fluxcalc()",
"vchar() dir=1or2", 2);
2844 cminmax_calc(ocminmax_l[CMIN],ocminmax_r[CMIN],ocminmax_l[CMAX],ocminmax_r[CMAX],&ocminmax[CMIN],&ocminmax[CMAX],&ctopptr2[1]);
2848 c2d[
CMIN][0] = fabs(
MAX(c2d[
CMIN][0],ocminmax[CMIN]));
2849 c2d[
CMAX][0] = fabs(
MAX(c2d[
CMAX][0],ocminmax[CMAX]));
2850 ctoporig[0] =
MAX(c2d[CMIN][0],c2d[CMAX][0]);
2863 PLOOP(pliter,pl) p_l[pl] = prim[1][0][pl];
2864 PLOOP(pliter,pl) p_r[pl] = prim[1][1][pl];
2865 p_l[
B2]=p_r[
B2]=prim[1][1][
B2];
2870 p_r[
B1]=0.5*(prim[1][1][
B1]*ptrgeomf1->gdet+prim[2][1][
B1]*ptrgeomf1u->gdet)/(ptrgeomc->gdet);
2875 p_l[
B1]=0.5*(prim[1][0][
B1]*ptrgeomf1->gdet+prim[2][0][
B1]*ptrgeomf1u->gdet)/(ptrgeomc->gdet);
2877 PLOOP(pliter,pl) pvec_l[dir][pl]=p_l[pl];
2878 PLOOP(pliter,pl) pvec_r[dir][pl]=p_r[pl];
2882 flux_compute_general(i, j, k, dir, ptrgeomf2, CUf, NULL, p_l, p_r,
MAC(F2,i,j,k), &ctopptr[dir]);
2886 MYFUN(
p2SFUevolve(dir,
ISLEFT, p_l, ptrgeomf2, &ptrstate_l, F_l, U_l),
"step_ch.c:fluxcalc()",
"p2SFUevolve()", 1);
2887 MYFUN(
p2SFUevolve(dir,
ISRIGHT, p_r, ptrgeomf2, &ptrstate_r, F_r, U_r),
"step_ch.c:fluxcalc()",
"p2SFUevolve()", 2);
2892 MYFUN(
vchar(p_l, ptrstate_l, dir, ptrgeomf2, &ocminmax_l[
CMAX], &ocminmax_l[
CMIN],&ignorecourant),
"step_ch.c:fluxcalc()",
"vchar() dir=1or2", 1);
2893 MYFUN(
vchar(p_r, ptrstate_r, dir, ptrgeomf2, &ocminmax_r[CMAX], &ocminmax_r[CMIN],&ignorecourant),
"step_ch.c:fluxcalc()",
"vchar() dir=1or2", 2);
2894 cminmax_calc(ocminmax_l[CMIN],ocminmax_r[CMIN],ocminmax_l[CMAX],ocminmax_r[CMAX],&ocminmax[CMIN],&ocminmax[CMAX],&ctopptr[2]);
2900 get_state(primcent[1][0],ptrgeomc,&state);
2901 MYFUN(
vchar(primcent[1][0], &state, dir, ptrgeomc, &ocminmax_l[
CMAX], &ocminmax_l[
CMIN],&ignorecourant),
"step_ch.c:fluxcalc()",
"vchar() dir=1or2", 1);
2903 get_state(primcent[1][1],ptrgeomc,&state);
2904 MYFUN(
vchar(primcent[1][1], &state, dir, ptrgeomc, &ocminmax_r[CMAX], &ocminmax_r[CMIN],&ignorecourant),
"step_ch.c:fluxcalc()",
"vchar() dir=1or2", 2);
2905 cminmax_calc(ocminmax_l[CMIN],ocminmax_r[CMIN],ocminmax_l[CMAX],ocminmax_r[CMAX],&ocminmax[CMIN],&ocminmax[CMAX],&ctopptr[2]);
2914 MYFUN(
flux_compute(i, j, k, dir, ptrgeomf2, ocminmax_l,ocminmax_r, ocminmax, ctopptr[2], ocminmaxrad_l,ocminmaxrad_r, ocminmaxrad, ctopradptr[2], CUf, p_l, p_r, U_l, U_r, F_l, F_r, F),
"step_ch.c:fluxcalc()",
"flux_compute", 1);
2919 if(i==390 && j==1 && k==0){
2922 PLOOP(pliter,pl) dualfprintf(
fail_file,
"F2: pl=%d p_l=%21.15g p_r=%21.15g U_l=%21.15g U_r=%21.15g F_l=%21.15g F_r=%21.15g F=%21.15g\n",pl,p_l[pl],p_r[pl],U_l[pl],U_r[pl],F_l[pl],F_r[pl],F[pl]);
2923 dualfprintf(
fail_file,
"NEW: ocminmax_l[CMIN]=%21.15g ocminmax_r[CMIN]=%21.15g ocminmax_l[CMAX]=%21.15g ocminmax_r[CMAX]=%21.15g ocminmax[CMIN]=%21.15g ocminmax[CMAX]=%21.15g ctopptr[1]=%21.15g\n",ocminmax_l[
CMIN],ocminmax_r[CMIN],ocminmax_l[
CMAX],ocminmax_r[CMAX],ocminmax[CMIN],ocminmax[CMAX],ctopptr[2]);
2932 PLOOP(pliter,pl) p_l[pl] = prim[0][0][pl];
2933 PLOOP(pliter,pl) p_r[pl] = prim[0][1][pl];
2934 p_l[
B2]=p_r[
B2]=prim[0][1][
B2];
2939 p_r[
B1]=0.5*(prim[0][1][
B1]*ptrgeomf1->gdet+prim[1][1][
B1]*ptrgeomf1u->gdet)/(ptrgeomc->gdet);
2944 p_l[
B1]=0.5*(prim[0][0][
B1]*ptrgeomf1->gdet+prim[1][0][
B1]*ptrgeomf1u->gdet)/(ptrgeomc->gdet);
2946 MYFUN(
p2SFUevolve(dir,
ISLEFT, p_l, ptrgeomf2, &ptrstate_l, F_l, U_l),
"step_ch.c:fluxcalc()",
"p2SFUevolve()", 1);
2947 MYFUN(
p2SFUevolve(dir,
ISRIGHT, p_r, ptrgeomf2, &ptrstate_r, F_r, U_r),
"step_ch.c:fluxcalc()",
"p2SFUevolve()", 2);
2951 MYFUN(
vchar(p_l, ptrstate_l, dir, ptrgeomf2, &ocminmax_l[
CMAX], &ocminmax_l[
CMIN],&ignorecourant),
"step_ch.c:fluxcalc()",
"vchar() dir=1or2", 1);
2952 MYFUN(
vchar(p_r, ptrstate_r, dir, ptrgeomf2, &ocminmax_r[CMAX], &ocminmax_r[CMIN],&ignorecourant),
"step_ch.c:fluxcalc()",
"vchar() dir=1or2", 2);
2953 cminmax_calc(ocminmax_l[CMIN],ocminmax_r[CMIN],ocminmax_l[CMAX],ocminmax_r[CMAX],&ocminmax[CMIN],&ocminmax[CMAX],&ctopptr2[2]);
2959 get_state(primcent[0][0],ptrgeomc,&state);
2960 MYFUN(
vchar(primcent[0][0], &state, dir, ptrgeomc, &ocminmax_l[
CMAX], &ocminmax_l[
CMIN],&ignorecourant),
"step_ch.c:fluxcalc()",
"vchar() dir=1or2", 1);
2962 get_state(primcent[0][1],ptrgeomc,&state);
2963 MYFUN(
vchar(primcent[0][1], &state, dir, ptrgeomc, &ocminmax_r[CMAX], &ocminmax_r[CMIN],&ignorecourant),
"step_ch.c:fluxcalc()",
"vchar() dir=1or2", 2);
2964 cminmax_calc(ocminmax_l[CMIN],ocminmax_r[CMIN],ocminmax_l[CMAX],ocminmax_r[CMAX],&ocminmax[CMIN],&ocminmax[CMAX],&ctopptr2[2]);
2968 c2d[
CMIN][1] = fabs(
MAX(c2d[
CMIN][1],ocminmax[CMIN]));
2969 c2d[
CMAX][1] = fabs(
MAX(c2d[
CMAX][1],ocminmax[CMAX]));
2970 ctoporig[1] =
MAX(c2d[CMIN][1],c2d[CMAX][1]);
2977 dir=1;
if(i==389)
PLOOP(pliter,pl)
if(pl!=
U1)
MACP0A1(F1,i,j,k,pl)=0.0;
2978 dir=1;
if(i==419)
PLOOP(pliter,pl)
if(pl!=
U1)
MACP0A1(F1,i,j,k,pl)=0.0;
2979 dir=2;
if(i==0)
PLOOP(pliter,pl)
if(pl!=
U2)
MACP0A1(F2,i,j,k,pl)=0.0;
3003 emf2d[shifti][shiftj] = (
3006 + prim[shifti][shiftj][
B2]*uconf2[shifti][shiftj][1]/uconf2[shifti][shiftj][
TT]
3007 - prim[shifti][shiftj][
B1]*uconf1[shifti][shiftj][2]/uconf1[shifti][shiftj][
TT]
3011 get_state(prim[shifti][shiftj], ptrgeomcorn3, &state);
3012 dir=1;
MYFUN(
vchar(prim[shifti][shiftj], &state, dir, ptrgeomcorn3, &cminmax[shifti][shiftj][
CMAX][dir], &cminmax[shifti][shiftj][
CMIN][dir],&ignorecourant),
"step_ch.c:fluxcalc()",
"vchar() dir=1or2", 10);
3013 dir=2;
MYFUN(
vchar(prim[shifti][shiftj], &state, dir, ptrgeomcorn3, &cminmax[shifti][shiftj][
CMAX][dir], &cminmax[shifti][shiftj][
CMIN][dir],&ignorecourant),
"step_ch.c:fluxcalc()",
"vchar() dir=1or2", 11);
3025 ctop[0] =
MAX((-cminmax[0][0][
CMIN][1]),(-cminmax[1][0][CMIN][1]));
3026 ctop[0] =
MAX(ctop[0],(-cminmax[0][1][CMIN][1]));
3027 ctop[0] =
MAX(ctop[0],(-cminmax[1][0][CMIN][1]));
3028 ctop[0] =
MAX(ctop[0],(-cminmax[1][1][CMIN][1]));
3029 ctop[0] =
MAX(ctop[0],0.0);
3031 ctop[0] =
MAX(ctop[0],(cminmax[0][0][
CMAX][1]));
3032 ctop[0] =
MAX(ctop[0],(cminmax[1][0][CMAX][1]));
3033 ctop[0] =
MAX(ctop[0],(cminmax[0][1][CMAX][1]));
3034 ctop[0] =
MAX(ctop[0],(cminmax[1][1][CMAX][1]));
3037 ctop[1] =
MAX((-cminmax[0][0][CMIN][2]),(-cminmax[1][0][CMIN][2]));
3038 ctop[1] =
MAX(ctop[1],(-cminmax[0][1][CMIN][2]));
3039 ctop[1] =
MAX(ctop[1],(-cminmax[1][0][CMIN][2]));
3040 ctop[1] =
MAX(ctop[1],(-cminmax[1][1][CMIN][2]));
3041 ctop[1] =
MAX(ctop[1],0.0);
3043 ctop[1] =
MAX(ctop[1],(cminmax[0][0][CMAX][2]));
3044 ctop[1] =
MAX(ctop[1],(cminmax[1][0][CMAX][2]));
3045 ctop[1] =
MAX(ctop[1],(cminmax[0][1][CMAX][2]));
3046 ctop[1] =
MAX(ctop[1],(cminmax[1][1][CMAX][2]));
3059 ucon_calc(primcent[1][1], ptrgeomf1, uconf1[1][1],others);
3062 ucon_calc(primcent[1][1], ptrgeomf2, uconf2[1][1],others);
3065 + prim[1][1][
B2]*uconf2[1][1][1]/uconf2[1][1][
TT]
3066 - prim[1][1][
B1]*uconf1[1][1][2]/uconf1[1][1][
TT]
3074 ucon_calc(primcent[0][1], ptrgeomf1, uconf1[0][1],others);
3077 ucon_calc(primcent[0][1], ptrgeomf2, uconf2[0][1],others);
3080 + prim[0][1][
B2]*uconf2[0][1][1]/uconf2[0][1][
TT]
3081 - prim[1][1][
B1]*uconf1[0][1][2]/uconf1[0][1][
TT]
3089 ucon_calc(primcent[1][0], ptrgeomf1, uconf1[1][0],others);
3092 ucon_calc(primcent[1][0], ptrgeomf2, uconf2[1][0],others);
3095 + prim[1][1][
B2]*uconf2[1][0][1]/uconf2[1][0][
TT]
3096 - prim[1][0][
B1]*uconf1[1][0][2]/uconf1[1][0][
TT]
3104 ucon_calc(primcent[0][0], ptrgeomf1, uconf1[0][0],others);
3107 ucon_calc(primcent[0][0], ptrgeomf2, uconf2[0][0],others);
3110 + prim[0][1][
B2]*uconf2[0][0][1]/uconf2[0][0][
TT]
3111 - prim[1][0][
B1]*uconf1[0][0][2]/uconf1[0][0][
TT]
3117 ctop[0] = ctoporig[0];
3118 ctop[1] = ctoporig[1];
3126 dB[0] = prim[1][1][
B1]-prim[1][0][
B1];
3128 dB[1] = prim[1][1][
B2]-prim[0][1][
B2];
3132 + 0.25*(emf2d[0][0]+emf2d[0][1]+emf2d[1][0]+emf2d[1][1])
3133 - 0.50*(ctop[0]*dB[1] - ctop[1]*dB[0])
3138 if(i==390 && j==1 && k==0){
3139 dualfprintf(
fail_file,
"NEW: emf2d[1][1]=%21.15g emf2d[1][0]=%21.15g emf2d[0][1]=%21.15g emf2d[0][0]=%21.15g ctop[0]=%21.15g ctop[1]=%21.15g dB[0]=%21.15g dB[1]=%21.15g emffinal=%21.15g gdetcorn3=%21.15g\n",emf2d[1][1],emf2d[1][0],emf2d[0][1],emf2d[0][0],ctop[0],ctop[1],dB[0],dB[1],emffinal,ptrgeomcorn3->gdet);
3140 dualfprintf(
fail_file,
"NEW: c2d[CMIN][0]=%21.15g c2d[CMAX][0]=%21.15g c2d[CMIN][1]=%21.15g c2d[CMAX][1]=%21.15g\n",c2d[CMIN][0],c2d[CMAX][0],c2d[CMIN][1],c2d[CMAX][1]);
3144 emffinal *= (ptrgeomcorn3->gdet);
3148 if(i==389) emffinal=0.0;
3149 if(i==419) emffinal=0.0;
3151 if(i==419+1) emffinal=0.0;
3152 if(j==0) emffinal=0.0;
3153 if(j==
N2) emffinal=0.0;
3172 dtij[dir] =
cour *
dx[dir] / ctopptr[dir];
3180 if(dtij[dir]<*ndt1 && i>=is && i<=ie && j>=js && j<=je && k>=ks && k<=ke){
3182 dualfprintf(
fail_file,
"NEW: Got lower dir=%d i=%d j=%d k=%d ndt=%21.15g\n",dir,i,j,k,*ndt1);
3186 dtij[dir] =
cour *
dx[dir] / ctopptr[dir];
3193 if(dtij[dir]<*ndt2 && i>=is && i<=ie && j>=js && j<=je && k>=ks && k<=ke){
3195 dualfprintf(
fail_file,
"NEW: Got lower dir=%d i=%d j=%d k=%d ndt=%21.15g\n",dir,i,j,k,*ndt2);
3215 dualfprintf(
fail_file,
"BEFORE CLEAN\n");
3216 cleanup_fluxes(Nvec,ptrfluxvec);