39 void UtoU_fromunothing(
int returntype,
struct of_geom *ptrgeom,
FTYPE *Uin,
FTYPE *Uout);
40 VARSTATIC FTYPE fluxinput[NPR],fluxinputma[NPR],fluxinputrad[NPR],fluxinputem[NPR];
41 VARSTATIC FTYPE fluxinputabs[NPR],fluxinputmaabs[NPR],fluxinputradabs[NPR],fluxinputemabs[NPR];
49 PLOOP(pliter,pl) fluxinput[pl]=fluxinputma[pl]=fluxinputrad[pl]=fluxinputem[pl]=0.0;
50 PLOOP(pliter,pl) fluxinputabs[pl]=fluxinputmaabs[pl]=fluxinputradabs[pl]=fluxinputemabs[pl]=0.0;
55 primtoflux_ma(1,&returntype, pr, q, dir, geom, fluxinputma, fluxinputmaabs, &fluxdiag, &fluxdiagabs);
56 fluxinputma[
UU+dir]+=fluxdiag;
57 fluxinputmaabs[
UU+dir]+=fluxdiagabs;
60 fluxinput[pl] += fluxinputma[pl];
61 fluxinputabs[pl] += fluxinputmaabs[pl];
66 primtoflux_rad(&returntype, pr, q, dir, geom, fluxinputrad, fluxinputradabs);
69 fluxinput[pl] += fluxinputrad[pl];
70 fluxinputabs[pl] += fluxinputradabs[pl];
75 primtoflux_em(&returntype, pr, q, dir, geom, fluxinputem, fluxinputemabs);
78 fluxinput[pl] += fluxinputem[pl];
79 fluxinputabs[pl] += fluxinputemabs[pl];
89 UtoU_fromunothing(returntype,geom,fluxinput,flux);
90 if(fluxabs!=NULL) UtoU_fromunothing(returntype,geom,fluxinputabs,fluxabs);
119 PLOOP(pliter,pl) flux[pl]=fluxma[pl]=fluxem[pl]=0.0;
120 PLOOP(pliter,pl) fluxmaabs[pl]=fluxemabs[pl]=0.0;
121 if(fluxabs!=NULL)
PLOOP(pliter,pl) fluxabs[pl]=0.0;
127 primtoflux_ma(needentropy,&returntype, pr, q, dir, geom, fluxma, fluxmaabs, NULL, NULL);
132 flux[pl] += fluxma[pl];
133 if(fluxabs!=NULL) fluxabs[pl] += fluxmaabs[pl];
138 primtoflux_em(&returntype, pr, q, dir, geom, fluxem, fluxemabs);
141 flux[pl] += fluxem[pl];
142 if(fluxabs!=NULL) fluxabs[pl] += fluxemabs[pl];
163 PLOOP(pliter,pl) flux[pl]=fluxrad[pl]=0.0;
164 if(fluxabs!=NULL)
PLOOP(pliter,pl) fluxabs[pl]=0.0;
169 primtoflux_rad(&returntype, pr, q, dir, geom, fluxrad, fluxradabs);
172 flux[pl] += fluxrad[pl];
173 if(fluxabs!=NULL) fluxabs[pl] += fluxradabs[pl];
198 void UtoU_ma_fromunothing(
int returntype,
struct of_geom *ptrgeom,
FTYPE *Uin,
FTYPE *Uout);
199 void UtoU_rad_fromunothing(
int returntype,
struct of_geom *ptrgeom,
FTYPE *Uin,
FTYPE *Uout);
200 void UtoU_em_fromunothing(
int returntype,
struct of_geom *ptrgeom,
FTYPE *Uin,
FTYPE *Uout);
201 VARSTATIC FTYPE fluxinput[NPR],fluxinputma[NPR],fluxinputrad[NPR],fluxinputem[NPR];
207 PLOOP(pliter,pl) fluxinputma[pl]=fluxinputrad[pl]=fluxinputem[pl]=0.0;
210 primtoflux_ma(1,&returntype, pr, q, fundir, geom, fluxinputma, NULL, &fluxdiag, NULL);
216 else fluxinputma[
UU]+=fluxdiag;
229 fluxinputma[
UU]+=0.5*fluxdiag;
236 UtoU_ma_fromunothing(returntype,geom,fluxinputma,fluxma);
242 primtoflux_rad(&returntype, pr, q, fundir, geom, fluxinputrad, NULL);
245 UtoU_rad_fromunothing(returntype,geom,fluxinputrad,fluxrad);
247 PLOOP(pliter,pl) fluxma[pl]+=fluxrad[pl];
251 primtoflux_em(&returntype, pr, q, fundir, geom, fluxinputem, NULL);
253 UtoU_em_fromunothing(returntype,geom,fluxinputem,fluxem);
295 mhd_calc_ma(pr, dir, geom, q, &flux[
UU], &fluxabs[UU], &fluxdiagpress[UU], &fluxdiagpressabs[UU]);
296 if(fluxdiag!=NULL) *fluxdiag = fluxdiagpress[UU+dir];
297 if(fluxdiagabs!=NULL) *fluxdiagabs = fluxdiagpressabs[UU+dir];
309 yflflux_calc(geom,pr, dir, q, &flux[YFL1], &fluxabs[YFL1],YFL1);
316 yflflux_calc(geom,pr, dir, q, &flux[YFL2], &fluxabs[YFL2],YFL2);
323 yflflux_calc(geom,pr, dir, q, &flux[YFL3], &fluxabs[YFL3],YFL3);
334 ylflux_calc(geom,pr, dir, q, &flux[YL], &fluxabs[YL],YL);
340 ynuflux_calc(geom, pr, dir, q, &flux[YNU], &fluxabs[YNU],YNU);
344 #if(DOENTROPY!=DONOENTROPY)
353 flux[
UU]=flux[ENTROPY];
354 fluxabs[
UU]=fluxabs[ENTROPY];
355 if(fluxdiag!=NULL) *fluxdiag = 0.0;
356 if(fluxdiagabs!=NULL) *fluxdiagabs = 0.0;
380 #error "primtoflux_rad not setup for SPLITNPR"
384 mhd_calc_rad(pr, dir, geom, q, &flux[URAD0], &fluxabs[URAD0]);
392 yflflux_calc(geom,pr, dir, q, &flux[YFL4], &fluxabs[YFL4],YFL4);
399 yflflux_calc(geom,pr, dir, q, &flux[YFL5], &fluxabs[YFL5],YFL5);
441 if(geom->i==26 && geom->j==40 && dir==1){
442 dualfprintf(
fail_file,
"INprimetoflux_em: %21.15g %21.15g %21.15g\n",flux[B1],flux[
B2],flux[
B3]);
454 *massflux = pr[
RHO] * q->
ucon[dir];
455 *massfluxabs=fabs(*massflux);
470 if(pnum==YFL1 || pnum==YFL2 || pnum==YFL3) udir=q->
ucon[dir];
471 if(pnum==YFL4 || pnum==YFL5) udir=q->
uradcon[dir];
473 prforadvect = pr[pnum];
478 *advectedscalarflux = prforadvect * pr[
RHO]*udir;
484 *advectedscalarflux = prforadvect * udir;
488 *advectedscalarfluxabs = fabs(*advectedscalarflux);
504 #if(WHICHEOS==KAZFULL)
505 yl2advect_kazfull(
GLOBALMAC(EOSextraglobal,ptrgeom->i,ptrgeom->j,ptrgeom->k),pr[YL],pr[YNU],&prforadvect);
507 prforadvect = pr[pnum];
511 *advectedscalarflux = prforadvect * massflux;
513 *advectedscalarfluxabs = fabs(*advectedscalarflux);
530 #if(WHICHEOS==KAZFULL)
531 ynu2advect_kazfull(
GLOBALMAC(EOSextraglobal,ptrgeom->i,ptrgeom->j,ptrgeom->k),pr[YL],pr[YNU],&prforadvect);
533 prforadvect = pr[pnum];
537 *advectedscalarflux = prforadvect * massflux;
539 *advectedscalarfluxabs = fabs(*advectedscalarflux);
560 *advectedscalarflux = pr[pnum] * massflux;
561 *advectedscalarfluxabs = fabs(*advectedscalarflux);
590 *entropyfluxabs = fabs(*entropyflux);
605 dualf[0]=dualffull[1];
606 dualf[1]=dualffull[2];
607 dualf[2]=dualffull[3];
609 dualfabs[0]=fabs(dualf[0]);
610 dualfabs[1]=fabs(dualf[1]);
611 dualfabs[2]=fabs(dualf[2]);
636 #if(MAXWELL==GENMAXWELL)
642 #elif(MAXWELL==PRIMMAXWELL)
648 dualffull[0] = - pr[
B1+dir-1] ;
649 dualffull[1] = (pr[
B1] * q->
ucon[dir] - pr[
B1+dir-1] * q->
ucon[1])/q->
ucon[0];
650 dualffull[2] = (pr[
B2] * q->
ucon[dir] - pr[
B1+dir-1] * q->
ucon[2])/q->
ucon[0];
651 dualffull[3] = (pr[
B3] * q->
ucon[dir] - pr[
B1+dir-1] * q->
ucon[3])/q->
ucon[0];
655 dualffull[1] = pr[
B1];
656 dualffull[2] = pr[
B2];
657 dualffull[3] = pr[
B3];
674 #if(MAXWELL==GENMAXWELL)
676 DLOOP(j,k) Mcon[j][k] = q->bcon[j] * q->ucon[k] - q->bcon[k] * q->ucon[j];
678 #elif(MAXWELL==PRIMMAXWELL)
686 Mcon[k][0] = pr[
B1+k-1] ;
687 Mcon[0][k] = - Mcon[k][0] ;
691 SLOOPA(k) vcon[k]= q->ucon[k]/q->ucon[
TT];
696 Mcon[1][2] = (pr[
B1] * vcon[2] - pr[
B2] * vcon[1]);
697 Mcon[1][3] = (pr[
B1] * vcon[3] - pr[
B3] * vcon[1]);
698 Mcon[2][3] = (pr[
B2] * vcon[3] - pr[
B3] * vcon[2]);
699 Mcon[2][1] = -Mcon[1][2];
700 Mcon[3][1] = -Mcon[1][3];
701 Mcon[3][2] = -Mcon[2][3];
702 Mcon[1][1] = Mcon[2][2] = Mcon[3][3] = 0.0;
732 MYFUN(
primtoflux(returntype,pr, q, 0, geom, U, Uabs) ,
"phys.c:primtoU()",
"primtoflux_calc() dir=0", 1);
740 void UtoU_gen(
int whichmaem,
int inputtype,
int returntype,
struct of_geom *ptrgeom,
FTYPE *Uin,
FTYPE *Uout)
742 void UtoU_gen_gengdet(
int removemass,
int whichmaem,
int inputtype,
int returntype,
struct of_geom *ptrgeom,
FTYPE *Uin,
FTYPE *Uout);
743 void UtoU_gen_allgdet(
int removemass,
int whichmaem,
int inputtype,
int returntype,
struct of_geom *ptrgeom,
FTYPE *Uin,
FTYPE *Uout);
746 #if((REMOVERESTMASSFROMUU==1)&&(DOEVOLVERHO))
753 #if(WHICHEOM!=WITHGDET)
754 UtoU_gen_gengdet(removemass, whichmaem, inputtype, returntype,ptrgeom,Uin, Uout);
756 UtoU_gen_allgdet(removemass, whichmaem, inputtype, returntype,ptrgeom,Uin, Uout);
762 void UtoU_gen_fromunothing(
int whichmaem,
int returntype,
struct of_geom *ptrgeom,
FTYPE *Uin,
FTYPE *Uout)
764 void UtoU_gen_gengdet_fromunothing(
int removemass,
int whichmaem,
int returntype,
struct of_geom *ptrgeom,
FTYPE *Uin,
FTYPE *Uout);
765 void UtoU_gen_allgdet_fromunothing(
int removemass,
int whichmaem,
int returntype,
struct of_geom *ptrgeom,
FTYPE *Uin,
FTYPE *Uout);
769 #if((REMOVERESTMASSFROMUU==1)&&(DOEVOLVERHO))
777 #if(WHICHEOM!=WITHGDET)
778 UtoU_gen_gengdet_fromunothing(removemass, whichmaem, returntype,ptrgeom,Uin, Uout);
780 UtoU_gen_allgdet_fromunothing(removemass, whichmaem, returntype,ptrgeom,Uin, Uout);
794 void UtoU_gen_gengdet(
int removemass,
int whichmaem,
int inputtype,
int returntype,
struct of_geom *ptrgeom,
FTYPE *Uin,
FTYPE *Uout)
796 void UtoU_gen_gengdet_fromunothing(
int removemass,
int whichmaem,
int returntype,
struct of_geom *ptrgeom,
FTYPE *Ugeomfree,
FTYPE *Uout);
803 if(inputtype==returntype){
805 PLOOP(pliter,pl) Uout[pl]=Uin[pl];
815 PLOOP(pliter,pl) Ugeomfree[pl]=Uin[pl];
828 #if((REMOVERESTMASSFROMUU==1)&&(DOEVOLVERHO))
831 Ugeomfree[
UU] += - Ugeomfree[
RHO] ;
839 PLOOP(pliter,pl) Ugeomfree[pl] *= ptrgeom->igdetnosing;
844 dualfprintf(
fail_file,"UtoU: No such inputtype=%d\n",inputtype);
852 UtoU_gen_gengdet_fromunothing(removemass, whichmaem, returntype,ptrgeom,Ugeomfree, Uout);
862 void UtoU_gen_gengdet_fromunothing(
int removemass,
int whichmaem,
int returntype,struct
of_geom *ptrgeom,
FTYPE *Ugeomfree,
FTYPE *Uout)
873 #if((REMOVERESTMASSFROMUU==1)&&(DOEVOLVERHO))
877 Ugeomfree[
UU] += Ugeomfree[
RHO];
883 PLOOP(pliter,pl) Uout[pl]=Ugeomfree[pl]*ptrgeom->
gdet;
886 PLOOP(pliter,pl) Uout[pl]=Ugeomfree[pl];
889 dualfprintf(fail_file,"UtoU: No such returntype=%d\n",returntype);
900 void UtoU_gen_allgdet(
int removemass,
int whichmaem,
int inputtype,
int returntype,struct
of_geom *ptrgeom,
FTYPE *Uin,
FTYPE *Uout)
904 void UtoU_gen_allgdet_fromunothing(
int removemass,
int whichmaem,
int returntype,
struct of_geom *ptrgeom,
FTYPE *Ugeomfree,
FTYPE *Uout);
908 #if(WHICHEOM!=WITHGDET)
909 dualfprintf(fail_file,
"Using UtoU_gen_allgdet() but WHICHEOM!=WITHGDET\n");
915 #if((REMOVERESTMASSFROMUU==1)&&(DOEVOLVERHO))
917 #endif// otherwise removemass = 0 effectively
934 PLOOP(pliter,pl) Ugeomfree[pl] = Uin[pl]*ptrgeom->igdetnosing;
936 #if((REMOVERESTMASSFROMUU==1)&&(DOEVOLVERHO))
939 Ugeomfree[
UU] += - Ugeomfree[
RHO] ;
944 PLOOP(pliter,pl) Ugeomfree[pl] = Uin[pl];
947 dualfprintf(fail_file,"UtoU: No such inputtype=%d\n",inputtype);
955 UtoU_gen_allgdet_fromunothing(removemass, whichmaem, returntype,ptrgeom,Ugeomfree, Uout);
962 void UtoU_gen_allgdet_fromunothing(
int removemass,
int whichmaem,
int returntype,struct
of_geom *ptrgeom,
FTYPE *Ugeomfree,
FTYPE *Uout)
973 #if((REMOVERESTMASSFROMUU==1)&&(DOEVOLVERHO))
977 Ugeomfree[
UU] += Ugeomfree[
RHO];
980 PLOOP(pliter,pl) Uout[pl]=Ugeomfree[pl]*ptrgeom->gdet;
983 PLOOP(pliter,pl) Uout[pl]=Ugeomfree[pl];
986 dualfprintf(fail_file,"UtoU: No such returntype=%d\n",returntype);
994 void UtoU_evolve2diag(
int inputtype,
int returntype,struct
of_geom *ptrgeom,
FTYPE *Uin,
FTYPE *Uout)
996 void UtoU_gen(
int whichmaem,
int inputtype,
int returntype,
struct of_geom *ptrgeom,
FTYPE *Uin,
FTYPE *Uout);
999 #if(WHICHEOM==WITHGDET)
1003 UtoU_gen(
ISMAANDEM, inputtype, returntype, ptrgeom, Uin, Uout);
1009 void UtoU(
int inputtype,
int returntype,
struct of_geom *ptrgeom,
FTYPE *Uin,
FTYPE *Uout)
1011 void UtoU_gen(
int whichmaem,
int inputtype,
int returntype,
struct of_geom *ptrgeom,
FTYPE *Uin,
FTYPE *Uout);
1013 UtoU_gen(
ISMAANDEM, inputtype, returntype, ptrgeom, Uin, Uout);
1017 void UtoU_ma(
int inputtype,
int returntype,
struct of_geom *ptrgeom,
FTYPE *Uin,
FTYPE *Uout)
1019 void UtoU_gen(
int whichmaem,
int inputtype,
int returntype,
struct of_geom *ptrgeom,
FTYPE *Uin,
FTYPE *Uout);
1021 UtoU_gen(
ISMAONLY, inputtype, returntype, ptrgeom, Uin, Uout);
1025 void UtoU_rad(
int inputtype,
int returntype,
struct of_geom *ptrgeom,
FTYPE *Uin,
FTYPE *Uout)
1027 void UtoU_gen(
int whichmaem,
int inputtype,
int returntype,
struct of_geom *ptrgeom,
FTYPE *Uin,
FTYPE *Uout);
1029 UtoU_gen(
ISRADONLY, inputtype, returntype, ptrgeom, Uin, Uout);
1033 void UtoU_em(
int inputtype,
int returntype,
struct of_geom *ptrgeom,
FTYPE *Uin,
FTYPE *Uout)
1035 void UtoU_gen(
int whichmaem,
int inputtype,
int returntype,
struct of_geom *ptrgeom,
FTYPE *Uin,
FTYPE *Uout);
1037 UtoU_gen(
ISEMONLY, inputtype, returntype, ptrgeom, Uin, Uout);
1042 void UtoU_fromunothing(
int returntype,
struct of_geom *ptrgeom,
FTYPE *Uin,
FTYPE *Uout)
1044 void UtoU_gen_fromunothing(
int whichmaem,
int returntype,
struct of_geom *ptrgeom,
FTYPE *Uin,
FTYPE *Uout);
1046 UtoU_gen_fromunothing(
ISMAANDEM, returntype, ptrgeom, Uin, Uout);
1050 void UtoU_ma_fromunothing(
int returntype,
struct of_geom *ptrgeom,
FTYPE *Uin,
FTYPE *Uout)
1052 void UtoU_gen_fromunothing(
int whichmaem,
int returntype,
struct of_geom *ptrgeom,
FTYPE *Uin,
FTYPE *Uout);
1054 UtoU_gen_fromunothing(
ISMAONLY, returntype, ptrgeom, Uin, Uout);
1058 void UtoU_rad_fromunothing(
int returntype,
struct of_geom *ptrgeom,
FTYPE *Uin,
FTYPE *Uout)
1060 void UtoU_gen_fromunothing(
int whichmaem,
int returntype,
struct of_geom *ptrgeom,
FTYPE *Uin,
FTYPE *Uout);
1062 UtoU_gen_fromunothing(
ISRADONLY, returntype, ptrgeom, Uin, Uout);
1066 void UtoU_em_fromunothing(
int returntype,
struct of_geom *ptrgeom,
FTYPE *Uin,
FTYPE *Uout)
1068 void UtoU_gen_fromunothing(
int whichmaem,
int returntype,
struct of_geom *ptrgeom,
FTYPE *Uin,
FTYPE *Uout);
1070 UtoU_gen_fromunothing(
ISEMONLY, returntype, ptrgeom, Uin, Uout);
1096 bcon[
TT] = pr[
B1] * ucov[1] + pr[
B2] * ucov[2] + pr[
B3] * ucov[3];
1097 for (j = 1; j <= 3; j++)
1098 bcon[j] = (pr[
B1 - 1 + j] + bcon[TT] * ucon[j]) / ucon[
TT];
1126 denom=1.0/(1.0+ud1*uu1+ud2*uu2+ud3*uu3);
1128 B[1]=uu0*(-(bu2*ud2+bu3*ud3)*uu1+bu1*(1.0+ud2*uu2+ud3*uu3))*denom;
1129 B[2]=uu0*(-(bu1*ud1+bu3*ud3)*uu2+bu2*(1.0+ud1*uu1+ud3*uu3))*denom;
1130 B[3]=uu0*(-(bu2*ud2+bu2*ud2)*uu3+bu3*(1.0+ud2*uu2+ud1*uu1))*denom;
1147 PLOOP(pliter,pl) prim[pl]=0.0;
1185 #if(REMOVERESTMASSFROMUU==2)
1188 mhd_calc_0(pr, dir, geom, q, mhd, mhdabs);
1201 #if(REMOVERESTMASSFROMUU==2)
1204 mhd_calc_0_ma(pr, dir, q, mhd, mhdabs, mhddiagpress, mhddiagpressabs);
1216 #if(MAXWELL==GENMAXWELL)
1218 #elif(MAXWELL==PRIMMAXWELL)
1221 #error No such MAXWELL
1227 if(geom->i==26 && geom->j==40 && dir==1){
1228 dualfprintf(fail_file,
"INEM1: ucondir=%21.15g %21.15g\n",q->
ucon[dir],mhd[3]);
1249 mhd_calc_0_ma(pr, dir, q, mhdma, mhdmaabs, mhddiagpress, mhddiagpressabs);
1254 DLOOPA(j) mhd[j] = (mhdma[j] + mhddiagpress[j]) + mhdem[j];
1255 if(mhdabs!=NULL)
DLOOPA(j) mhdabs[j] = (mhdmaabs[j] + mhddiagpressabs[j]) + mhdemabs[j];
1289 DLOOPA(j) mhd[
j] = eta * q->ucon[dir] * q->ucov[
j];
1290 if(mhdabs!=NULL)
DLOOPA(j) mhdabs[
j] = fabs(mhd[j]);
1292 if(mhddiagpress!=NULL)
DLOOPA(j) mhddiagpress[
j] = 0.0;
1293 #if(SPLITPRESSURETERMINFLUXMA==0)
1295 if(mhdabs!=NULL) mhdabs[dir] += fabs(ptot);
1298 if(mhddiagpress!=NULL) mhddiagpress[dir] = ptot;
1299 if(mhddiagpressabs!=NULL) mhddiagpressabs[dir] = fabs(ptot);
1321 if(mhdabs!=NULL)
DLOOPA(j) mhdabs[
j] = fabs(mhd[j]);
1323 if(mhdabs!=NULL) mhdabs[dir] += fabs(ptot);
1349 DLOOPA(j) mhd[
j] = (mhdma[
j] + mhddiagpress[
j]) + mhdem[j];
1351 if(mhdabs!=NULL)
DLOOPA(j) mhdabs[
j] = (mhdmaabs[
j] + mhddiagpressabs[
j]) + mhdemabs[j];
1401 if(mhddiagpress!=NULL)
DLOOPA(j) mhddiagpress[
j] = 0.0;
1402 if(mhddiagpressabs!=NULL)
DLOOPA(j) mhddiagpressabs[
j] = 0.0;
1407 term1 = (P+u) * q->
ucon[dir] *q->
ucov[j];
1409 mhd[j] = term1 + term2 ;
1410 if(mhdabs!=NULL) mhdabs[
j] = fabs(term1) + fabs(term2) ;
1414 if(mhdabs!=NULL)
SLOOPA(j) mhdabs[
j] = fabs(mhd[j]);
1416 #if(SPLITPRESSURETERMINFLUXMA==0)
1419 if(mhdabs!=NULL) mhdabs[dir] += fabs(ptot);
1422 if(mhddiagpress!=NULL) mhddiagpress[dir] = ptot;
1423 if(mhddiagpressabs!=NULL) mhddiagpressabs[dir] = fabs(ptot);
1429 if(geom->i==26 && geom->j==40 && dir==1){
1430 dualfprintf(fail_file,
"INMA: ucondir=%21.15g %21.15g\n",q->
ucon[dir],mhd[3]);
1448 void ffdestresstensor_dir(
int dir,
FTYPE (*Mcon)[NDIM],
struct of_geom *geom,
FTYPE *TEMdir);
1464 Mcon_calc(pr, q, Mcon);
1467 ffdestresstensor_dir(dir, Mcon, geom, mhd);
1479 Bcon[
TT]=0.0;
SLOOPA(jj) Bcon[jj] = pr[
B1+jj-1];
1484 SLOOPA(kk) Bcov[jj] += Bcon[kk]*(geom->gcov[
GIND(jj,kk)]);
1486 Bsq=0.0;
SLOOPA(kk) Bsq += Bcon[kk]*Bcov[kk];
1487 udotB=0.0;
SLOOPA(kk) udotB += Bcon[kk]*(q->
ucov[kk]);
1491 DLOOPA(mu) mhd[
mu] = ( Bsq*(q->
ucon[dir])*(q->
ucov[mu]) - Bcon[dir]*Bcov[
mu] - udotB*(Bcon[dir]*(q->
ucov[
mu]) + Bcov[mu]*(q->
ucon[dir])) );
1493 mhd[dir] += 0.5*(Bsq + udotB*udotB);
1495 oneovergammasq=1.0/((q->
ucon[
TT])*(q->
ucon[TT]));
1497 DLOOPA(mu) mhd[
mu] *= oneovergammasq ;
1502 if(mhdabs!=NULL)
DLOOPA(mu) mhdabs[
mu] = fabs(mhd[mu]);
1508 if(geom->i==26 && geom->j==40 && dir==1){
1509 dualfprintf(fail_file,
"INEM2: ucondir=%21.15g Bcondir=%21.15g (%21.15g %21.15g %21.15g) mhd3=%21.15g\n",q->
ucon[dir],Bcon[dir],Bsq,udotB,oneovergammasq,mhd[3]);
1510 DLOOPA(mu) dualfprintf(fail_file,
"mu=%d ucov[mu]=%21.15g Bcov[mu]=%21.15g\n",mu,q->
ucov[mu],Bcov[mu]);
1533 plus1gv00=geom->gcovpert[TT];
1546 *plus1ud0=(plus1gv00*BB+(2.0*alpha+alpha*alpha)*(BB+AA)+AA)/((1.0+alpha)*(BB+AA)+BB*sqrt(-(BB+AA)));
1568 plus1gv00=geom->gcovpert[
TT];
1570 vsq=geom->gcovpert[
TT];
1571 SLOOPA(j) vsq+=2.0*geom->gcov[
GIND(TT,j)]*vcon[
j];
1572 SLOOP(j,k) vsq+=geom->gcov[
GIND(j,k)]*vcon[
j]*vcon[k];
1574 gvtt=geom->gcov[
GIND(TT,TT)];
1577 SLOOPA(j) alpha+=geom->gcov[
GIND(j,TT)]*q->ucon[
j];
1581 *plus1ud0=alpha + ((1.0-gvtt)*plus1gv00 - uu0*uu0*vsq*gvtt*gvtt)/(1.0-gvtt*uu0);
1606 SLOOPA(j) ud0tilde += pr[
U1+j-1]*(geom->gcov[
GIND(TT,j)]);
1608 alpha = geom->alphalapse;
1609 alphasq = alpha*alpha;
1611 *plus1ud0 = ud0tilde + (geom->gcovpert[
TT] - alphasq*( (geom->betasqoalphasq) + qsq))/(1.0+gamma*alpha);
1619 int source(
FTYPE *pi,
FTYPE *pr,
FTYPE *pf,
int *didreturnpf,
int *eomtype,
struct of_geom *ptrgeom,
struct of_state *q,
FTYPE *ui,
FTYPE *uf,
FTYPE *CUf,
FTYPE *CUimp,
FTYPE dissmeasure,
FTYPE *dUriemann,
FTYPE (*dUcomp)[NPR],
FTYPE *dU)
1633 SCLOOP(sc) dUcomp[sc][pl] = 0.;
1638 #if((WHICHEOM==WITHNOGDET)&&(NOGDETB1>0)||(NOGDETB2>0)||(NOGDETB3>0))
1639 #error Not correct SPLITNPR use#1
1660 dUother[pl] = (dUriemann[pl] + dUcomp[
GEOMSOURCE][pl])*(ptrgeom->IEOMFUNCNOSINGMAC(pl));
1662 Ugeomfreei[pl] = ui[pl]*(ptrgeom->IEOMFUNCNOSINGMAC(pl));
1664 Ugeomfreef[pl] = uf[pl]*(ptrgeom->IEOMFUNCNOSINGMAC(pl));
1676 dUother[pl]=
dUfromUFSET(CUf,
dt,Ugeomfreei[pl],Ugeomfreef[pl],pf[pl]);
1683 sourcephysics(pi, pr, pf, didreturnpf, eomtype, ptrgeom, q, Ugeomfreei, Ugeomfreef, CUf, CUimp, dissmeasure, dUother, dUcomp);
1695 SCLOOP(sc)
PLOOP(pliter,pl) dU[pl]+=dUcomp[sc][pl];
1710 MYFUN(
get_state(pr, ptrgeom, &q) ,
"phys.c:bsq_calc()",
"get_state() dir=0", 1);
1746 Bcon[
TT]=0.0;
SLOOPA(jj) Bcon[jj] = pr[
B1+jj-1];
1751 SLOOPA(kk) Bcov[jj] += Bcon[kk]*(ptrgeom->gcov[
GIND(jj,kk)]);
1753 Bsq=0.0;
SLOOPA(kk) Bsq += Bcon[kk]*Bcov[kk];
1754 udotB=0.0;
SLOOPA(kk) udotB += Bcon[kk]*(q->
ucov[kk]);
1756 *bsq = (Bsq + udotB*udotB);
1758 oneovergammasq=1.0/((q->
ucon[
TT])*(q->
ucon[TT]));
1760 *bsq *= oneovergammasq;
1771 ucov[0] = geom->gcov[
GIND(0,0)]*ucon[0]
1772 + geom->gcov[
GIND(0,1)]*ucon[1]
1773 + geom->gcov[
GIND(0,2)]*ucon[2]
1774 + geom->gcov[
GIND(0,3)]*ucon[3] ;
1775 ucov[1] = geom->gcov[
GIND(0,1)]*ucon[0]
1776 + geom->gcov[
GIND(1,1)]*ucon[1]
1777 + geom->gcov[
GIND(1,2)]*ucon[2]
1778 + geom->gcov[
GIND(1,3)]*ucon[3]
1780 ucov[2] = geom->gcov[
GIND(0,2)]*ucon[0]
1781 + geom->gcov[
GIND(1,2)]*ucon[1]
1782 + geom->gcov[
GIND(2,2)]*ucon[2]
1784 + geom->gcov[
GIND(2,3)]*ucon[3]
1787 ucov[3] = geom->gcov[
GIND(0,3)]*ucon[0]
1788 + geom->gcov[
GIND(1,3)]*ucon[1]
1790 + geom->gcov[
GIND(2,3)]*ucon[2]
1792 + geom->gcov[
GIND(3,3)]*ucon[3] ;
1804 myfcon[0][0]=myfcon[1][1]=myfcon[2][2]=myfcon[3][3]=0;
1805 myfcon[0][1]=fcon[0];
1806 myfcon[0][2]=fcon[1];
1807 myfcon[0][3]=fcon[2];
1808 myfcon[1][2]=fcon[3];
1809 myfcon[1][3]=fcon[4];
1810 myfcon[2][3]=fcon[5];
1812 myfcon[1][0]=-fcon[0];
1813 myfcon[2][0]=-fcon[1];
1814 myfcon[3][0]=-fcon[2];
1815 myfcon[2][1]=-fcon[3];
1816 myfcon[3][1]=-fcon[4];
1817 myfcon[3][2]=-fcon[5];
1821 for(jp=0;jp<
NDIM;jp++)
for(kp=0;kp<
NDIM;kp++){
1822 myfcov[
j][k]+=myfcon[jp][kp]*geom->gcov[
GIND(j,jp)]*geom->gcov[
GIND(k,kp)];
1825 fcov[0]=myfcov[0][1];
1826 fcov[1]=myfcov[0][2];
1827 fcov[2]=myfcov[0][3];
1828 fcov[3]=myfcov[1][2];
1829 fcov[4]=myfcov[1][3];
1830 fcov[5]=myfcov[2][3];
1838 ucon[0] = geom->gcon[
GIND(0,0)]*ucov[0]
1839 + geom->gcon[
GIND(0,1)]*ucov[1]
1840 + geom->gcon[
GIND(0,2)]*ucov[2]
1841 + geom->gcon[
GIND(0,3)]*ucov[3] ;
1842 ucon[1] = geom->gcon[
GIND(0,1)]*ucov[0]
1843 + geom->gcon[
GIND(1,1)]*ucov[1]
1844 + geom->gcon[
GIND(1,2)]*ucov[2]
1845 + geom->gcon[
GIND(1,3)]*ucov[3] ;
1846 ucon[2] = geom->gcon[
GIND(0,2)]*ucov[0]
1847 + geom->gcon[
GIND(1,2)]*ucov[1]
1848 + geom->gcon[
GIND(2,2)]*ucov[2]
1849 + geom->gcon[
GIND(2,3)]*ucov[3] ;
1850 ucon[3] = geom->gcon[
GIND(0,3)]*ucov[0]
1851 + geom->gcon[
GIND(1,3)]*ucov[1]
1852 + geom->gcon[
GIND(2,3)]*ucov[2]
1853 + geom->gcon[
GIND(3,3)]*ucov[3] ;
1866 int get_state_thermodynamics(
int needentropy,
struct of_geom *ptrgeom,
FTYPE *pr,
struct of_state *q);
1872 #if(EOMRADTYPE!=EOMRADNONE)
1876 get_state_bconbcovonly(pr, ptrgeom, q);
1880 get_state_thermodynamics(1,ptrgeom, pr, q);
1893 #if(EOMRADTYPE!=EOMRADNONE)
1910 get_state_bconbcovonly(pr, ptrgeom, q);
1921 int get_state_thermodynamics(
int needentropy,
struct of_geom *ptrgeom,
FTYPE *pr,
struct of_state *q);
1924 get_state_thermodynamics(needentropy, ptrgeom, pr, q);
1936 int get_state_thermodynamics(
int needentropy,
struct of_geom *ptrgeom,
FTYPE *pr,
struct of_state *q);
1941 #if(EOMRADTYPE!=EOMRADNONE)
1945 get_state_thermodynamics(1,ptrgeom, pr, q);
1963 #if(EOMRADTYPE!=EOMRADNONE)
1967 get_state_bconbcovonly(pr, ptrgeom, q);
1986 int get_state_thermodynamics(
int needentropy,
struct of_geom *ptrgeom,
FTYPE *pr,
struct of_state *q);
1994 #if(MERGEDC2EA2CMETHOD)
2000 get_state_Blower(pr, ptrgeom, q);
2005 #if(EOMRADTYPE!=EOMRADNONE)
2009 #if(MERGEDC2EA2CMETHOD)
2010 get_state_vcon_gdetBcon_overut(pr, ptrgeom, q);
2013 #if(COMPUTE4FIELDforFLUX)
2014 get_state_bconbcovonly(pr, ptrgeom, q);
2019 get_state_thermodynamics(1,ptrgeom, pr, q);
2033 int get_state_thermodynamics(
int needentropy,
struct of_geom *ptrgeom,
FTYPE *pr,
struct of_state *q);
2039 #if(EOMRADTYPE!=EOMRADNONE)
2045 #if(COMPUTE4FIELDatALL)
2046 get_state_bconbcovonly(pr, ptrgeom, q);
2051 get_state_thermodynamics(1,ptrgeom, pr, q);
2063 int get_state_thermodynamics(
int needentropy,
struct of_geom *ptrgeom,
FTYPE *pr,
struct of_state *q);
2069 #if(EOMRADTYPE!=EOMRADNONE)
2073 #if(COMPUTE4FIELDatALL)
2074 get_state_bconbcovonly(pr, ptrgeom, q);
2079 get_state_thermodynamics(1,ptrgeom, pr, q);
2091 int get_state_thermodynamics(
int needentropy,
struct of_geom *ptrgeom,
FTYPE *pr,
struct of_state *q);
2097 #if(EOMRADTYPE!=EOMRADNONE)
2101 #if(COMPUTE4FIELDatALL)
2102 get_state_bconbcovonly(pr, ptrgeom, q);
2107 get_state_thermodynamics(1,ptrgeom, pr, q);
2119 int get_state_thermodynamics(
int needentropy,
struct of_geom *ptrgeom,
FTYPE *pr,
struct of_state *q);
2127 #if(MERGEDC2EA2CMETHOD)
2133 get_state_Blower(pr, ptrgeom, q);
2138 #if(EOMRADTYPE!=EOMRADNONE)
2142 #if(MERGEDC2EA2CMETHOD)
2143 get_state_vcon_gdetBcon_overut(pr, ptrgeom, q);
2146 #if(COMPUTE4FIELDatALL)
2147 get_state_bconbcovonly(pr, ptrgeom, q);
2152 get_state_thermodynamics(1,ptrgeom, pr, q);
2167 int get_state_thermodynamics(
int needentropy,
struct of_geom *ptrgeom,
FTYPE *pr,
struct of_state *q);
2173 #if(EOMRADTYPE!=EOMRADNONE)
2177 #if(COMPUTE4FIELDatALL)
2178 get_state_bconbcovonly(pr, ptrgeom, q);
2183 get_state_thermodynamics(1,ptrgeom, pr, q);
2198 lower_vec(q->
bcon, ptrgeom, q->
bcov);
2215 lower_vec(q->
ucon, ptrgeom, q->
ucov);
2217 #if(REMOVERESTMASSFROMUU==1 || REMOVERESTMASSFROMUU==2)
2243 #if(MERGEDC2EA2CMETHOD)
2246 q->vcon[
TT]=1.0;
SLOOPA(jj) q->vcon[jj]=q->
ucon[jj]*overut;
2262 Bcon[
TT]=0.0;
SLOOPA(jj) Bcon[jj]=pr[
B1-1+jj];
2264 #if(MERGEDC2EA2CMETHOD)
2266 lower_vec(Bcon, ptrgeom, q->Blower);
2275 int get_state_thermodynamics(
int needentropy,
struct of_geom *ptrgeom,
FTYPE *pr,
struct of_state *q)
2279 q->
pressure = pressure_rho0_u_simple(ptrgeom->i,ptrgeom->j,ptrgeom->k,ptrgeom->p,pr[
RHO],pr[
UU]);
2281 #if(DOENTROPY!=DONOENTROPY)
2297 #if(DOENTROPY!=DONOENTROPY)
2310 #if(MERGEDC2EA2CMETHOD)
2324 #if(MERGEDC2EA2CMETHOD)
2325 q->gdet=ptrgeom->gdet;
2326 PALLLOOP(pl) q->EOMFUNCMAC(pl)=ptrgeom->EOMFUNCMAC(pl);
2339 entropy=entropyflux/q->
ucon[dir];
2351 pr[ENTROPY]=compute_u_from_entropy_simple(ptrgeom->i,ptrgeom->j,ptrgeom->k,ptrgeom->p,pr[
RHO],entropy);
2368 MYFUN(
gamma_calc_fromuconrel(uconrel,geom,&gamma,&qsq),
"ucon_calc_rel4vel_fromuconrel: gamma_calc_fromuconrel failed\n",
"phys.c",1);
2375 ucon[
TT] = gamma/(geom->alphalapse) ;
2377 SLOOPA(j) ucon[
j] = uconrel[
j] - ucon[
TT]*(geom->beta[
j]);
2392 SLOOPA(j) uconrel[
j] = ucon[
j] + ucon[
TT]*(geom->beta[
j]);
2427 else if(whichvel==
VEL3){
2434 dualfprintf(fail_file,
"No such whichvel=%d for ucon_calc_whichvel()\n",whichvel);
2450 #if(WHICHVEL!=VELREL4)
2451 dualfprintf(fail_file,
"gamma_calc() designed for WHICHVEL=VELREL4\n");
2479 qsq_calc(uconrel,geom,qsq);
2482 #if(JONCHECKS && PRODUCTION==0)
2490 dualfprintf(fail_file,
"gamma_calc failed: i=%d j=%d k=%d qsq=%21.15g\n",geom->i,geom->j,geom->k,*qsq);
2491 SLOOPA(j) dualfprintf(fail_file,
"uconrel[%d]=%21.15g\n",j,uconrel[j]);
2492 DLOOP(j,k) dualfprintf(fail_file,
"gcov[%d][%d]=%21.15g\n",j,k,geom->gcov[
GIND(j,k)]);
2500 *qsq = (*qsq)*((*qsq)>=0.0);
2503 *gamma = sqrt(1. + (*qsq)) ;
2519 + geom->gcov[
GIND(1,1)]*uconrel[1]*uconrel[1]
2520 + geom->gcov[
GIND(2,2)]*uconrel[2]*uconrel[2]
2521 + geom->gcov[
GIND(3,3)]*uconrel[3]*uconrel[3]
2523 + 2.*(geom->gcov[
GIND(1,2)]*uconrel[1]*uconrel[2]
2524 + geom->gcov[
GIND(1,3)]*uconrel[1]*uconrel[3]
2525 + geom->gcov[
GIND(2,3)]*uconrel[2]*uconrel[3])
2527 + 2.*(geom->gcov[
GIND(1,2)]*uconrel[1]*uconrel[2]
2528 + geom->gcov[
GIND(1,3)]*uconrel[1]*uconrel[3])
2559 get_3velterm(vcon, geom, &velterm);
2561 negdiscr = geom->gcov[
GIND(0,0)] + velterm ;
2564 #if(JONCHECKS && WHICHVEL==VEL3)
2568 if (negdiscr > 0.) {
2573 dualfprintf(fail_file,
"negdisc=%21.15g, should be negative\n",negdiscr);
2574 for(k=
U1;k<=
U3;k++){
2575 dualfprintf(fail_file,
"uconfailed on pr[%d]=%21.15g\n",k,pr[k]);
2577 bl_coord_ijk_2(geom->i,geom->j,geom->k,geom->p,X, V);
2578 dualfprintf(fail_file,
"i=%d j=%d k=%d pcurr=%d\nx1=%21.15g x2=%21.15g x3=%21.15g \nV1=%21.15g V2=%21.15g V3=%21.15g \ng=%21.15g\n",
startpos[1]+geom->i,
startpos[2]+geom->j,
startpos[3]+geom->k,geom->p,X[1],X[2],X[3],V[1],V[2],V[3],geom->gdet);
2579 dualfprintf(fail_file,
"\ngcon\n");
2580 dualfprintf(fail_file,
"{");
2581 for(j=0;j<
NDIM;j++){
2582 dualfprintf(fail_file,
"{");
2583 for(k=0;k<
NDIM;k++){
2584 dualfprintf(fail_file,
"%21.15g",geom->gcon[
GIND(j,k)]);
2585 if(k!=NDIM-1) dualfprintf(fail_file,
" , ");
2587 dualfprintf(fail_file,
"}");
2588 if(j!=NDIM-1) dualfprintf(fail_file,
" , ");
2590 dualfprintf(fail_file,
"}");
2591 dualfprintf(fail_file,
"\ngcov\n");
2592 dualfprintf(fail_file,
"{");
2593 for(j=0;j<
NDIM;j++){
2594 dualfprintf(fail_file,
"{");
2595 for(k=0;k<
NDIM;k++){
2596 dualfprintf(fail_file,
"%21.15g",geom->gcov[
GIND(j,k)]);
2597 if(k!=NDIM-1) dualfprintf(fail_file,
" , ");
2599 dualfprintf(fail_file,
"}");
2600 if(j!=NDIM-1) dualfprintf(fail_file,
" , ");
2602 dualfprintf(fail_file,
"}");
2610 ucon[
TT] = 1. / sqrt(-negdiscr);
2624 + geom->gcov[
GIND(1,1)] * vcon[1] * vcon[1]
2625 + geom->gcov[
GIND(2,2)] * vcon[2] * vcon[2]
2626 + geom->gcov[
GIND(3,3)] * vcon[3] * vcon[3]
2627 + 2. * (geom->gcov[
GIND(0,1)]* vcon[1]
2628 + geom->gcov[
GIND(0,2)] * vcon[2]
2629 + geom->gcov[
GIND(0,3)] * vcon[3]
2630 + geom->gcov[
GIND(1,2)] * vcon[1] * vcon[2]
2631 + geom->gcov[
GIND(1,3)] * vcon[1] * vcon[3]
2632 + geom->gcov[
GIND(2,3)] * vcon[2] * vcon[3]
2648 void ffdestresstensor(
FTYPE (*Mcon)[NDIM],
struct of_geom *geom,
FTYPE (*T)[NDIM]);
2653 #if(EOMTYPE!=EOMFFDE && EOMTYPE!=EOMFFDE2)
2654 dualfprintf(fail_file,
"Only call limit_3vel_ffde() if doing EOMTYPE==EOMFFDE || EOMTYPE==EOMFFDE2\n");
2671 ffdestresstensor(dualf, geom, T);
2699 int allowlocalfailurefixandnoreport=1;
2700 struct of_newtonstats newtonstats; setnewtonstatsdefault(&newtonstats);
2702 newtonstats.nstroke=newtonstats.lntries=0;
2705 FTYPE dissmeasure=-1.0;
2711 MYFUN(
Utoprimgen(showmessages,checkoninversiongas,checkoninversionrad,allowlocalfailurefixandnoreport, finalstep,&eomtype,whichcap,whichmethod,modprim,
EVOLVEUTOPRIM,
UNOTHING,U, NULL, geom, dissmeasure, pr, pr,&newtonstats),
"step_ch.c:advance()",
"Utoprimgen", 1);
2742 get_4velterms(ucon, geom, &AA, &BB, &CCM1, &discr);
2750 dualfprintf(fail_file,
"failure: spacelike four-velocity %21.15g\n",
2752 dualfprintf(fail_file,
"i=%d j=%d k=%d p=%d\n",
startpos[1]+geom->i,
startpos[2]+geom->j,
startpos[3]+geom->k,geom->p) ;
2753 coord(geom->i,geom->j,geom->k,geom->p,X);
2754 dualfprintf(fail_file,
"%21.15g %21.15g %21.15g\n",X[1],X[2],X[3]) ;
2756 for(k=0;k<NPR;k++) dualfprintf(fail_file,
"%d %21.15g\n",k,pr[k]) ;
2762 sqrtdiscr=sqrt(discr);
2764 ucon[
TT] = (-BB - sqrtdiscr)/(2.*AA) ;
2765 ucon2[
TT] = (-BB + sqrtdiscr)/(2.*AA) ;
2785 get_4velterms(ucon, geom, &AA, &BB, &CCM1, &discr);
2793 dualfprintf(fail_file,
"failure: spacelike four-velocity %21.15g\n",
2795 dualfprintf(fail_file,
"i=%d j=%d k=%d p=%d\n",
startpos[1]+geom->i,
startpos[2]+geom->j,
startpos[3]+geom->k,geom->p) ;
2796 coord(geom->i,geom->j,geom->k,geom->p,X);
2797 dualfprintf(fail_file,
"%21.15g %21.15g %21.15g\n",X[1],X[2],X[3]) ;
2799 for(k=0;k<NPR;k++) dualfprintf(fail_file,
"%d %21.15g\n",k,pr[k]) ;
2805 ucon[
TT] = (-BB - sqrt(discr))/(2.*AA) ;
2816 *AA = geom->gcov[
GIND(TT,TT)] ;
2819 *BB = 2.*(geom->gcov[
GIND(TT,1)]*ucon[1] +
2820 geom->gcov[
GIND(TT,2)]*ucon[2] +
2821 geom->gcov[
GIND(TT,3)]*ucon[3]) ;
2824 *CCM1 = geom->gcov[
GIND(1,1)]*ucon[1]*ucon[1] +
2825 geom->gcov[
GIND(2,2)]*ucon[2]*ucon[2] +
2826 geom->gcov[
GIND(3,3)]*ucon[3]*ucon[3] +
2827 2.*(geom->gcov[
GIND(1,2)]*ucon[1]*ucon[2] +
2828 geom->gcov[
GIND(1,3)]*ucon[1]*ucon[3] +
2829 geom->gcov[
GIND(2,3)]*ucon[2]*ucon[3]) ;
2835 *discr = (*BB)*(*BB) - 4.*(*AA)*CC ;
2862 return(1. - sqrt(rin/R)) ;
2877 int l1[24]={1, 2, 3, 1, 2, 3, 4, 2, 1, 4, 2, 1, 1, 3, 4, 1, 3, 4, 4, 3, 2, 4, 3, 2};
2878 int l2[24]={2, 1, 1, 3, 3, 2, 2, 4, 4, 1, 1, 2, 3, 1, 1, 4, 4, 3, 3, 4, 4, 2, 2, 3};
2879 int l3[24]={3, 3, 2, 2, 1, 1, 1, 1, 2, 2, 4, 4, 4, 4, 3, 3, 1, 1, 2, 2, 3, 3, 4, 4};
2880 int l4[24]={4, 4, 4, 4, 4, 4, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1};
2883 if((1+mu==l1[i])&&(1+nu==l2[i])&&(1+kappa==l3[i])&&(1+lambda==l4[i])){
2884 lc4sign=(i%2) ? -1 : 1;
2885 if(updown==1)
return(-1.0/detg*lc4sign);
2886 else if(updown==0)
return(detg*lc4sign);
2897 int nu,
mu,kappa,lambda;
2899 for(nu=0;nu<
NDIM;nu++)
for(mu=0;mu<
NDIM;mu++){
2900 faraday[
mu][
nu]=0.0;
2901 for(kappa=0;kappa<
NDIM;kappa++)
for(lambda=0;lambda<
NDIM;lambda++){
2902 faraday[
mu][
nu]+=
lc4(which,geom->gdet,mu,nu,kappa,lambda)*u[kappa]*b[lambda];
2916 if(a>0.0)
return 1.0;
2917 else if(a<0.0)
return -1.0;
2925 #if(SUPERLONGDOUBLE)
2929 return(copysign(1.0,a));
2938 if(a>0.0)
return 1.0;
2939 else if(a<0.0)
return -1.0;
2973 FTYPE ftemp1,ftemp2,ftemp3;
2985 SLOOPA(j) vu[j]=q->ucon[j]/q->ucon[TT];
2992 ftemp1+=vu[
j]*geom->gcov[
GIND(dir,j)];
2993 ftemp2+=vu[
j]*geom->gcov[
GIND(TT,j)];
2994 ftemp3+=vu[
j]*vu[
j]*geom->gcov[
GIND(j,j)];
2998 BB=2.0*(ftemp1+geom->gcov[
GIND(0,dir)])/geom->gcov[
GIND(dir,dir)];
2999 CC=(geom->gcov[
GIND(TT,TT)] + 2.0*ftemp2 + ftemp3 + 2.0*vu[diro1]*vu[diro2]*geom->gcov[
GIND(diro1,diro2)])/geom->gcov[
GIND(dir,dir)];
3003 *vmax=0.5*(-BB+sqrt(disc));
3004 *vmin=0.5*(-BB-sqrt(disc));
3007 dualfprintf(fail_file,
"disc=%21.15g < 0\n",disc);
3024 MYFUN(sol(pr,q,dir,geom,&vmax,&vmin),
"phys.c:limitv3()",
"sol()", 1);
3027 ratv=(*v>0) ? *v/vmax : *v/vmin;
3047 if((vcon)&&(vresultcon)){
3050 if((!vcon)&&(!vresultcon)){
3053 else if((!vcon)&&(vresultcon)){
3056 else if((vcon)&&(!vresultcon)){
3060 DLOOP(j,k) vresult[
j]+=proj[
j][k]*v[k];
3074 gconttsq = (geom->gcon[
GIND(TT,TT)]*geom->gcon[
GIND(TT,TT)]);
3075 *gconttplus1= (geom->gcovpert[
TT]) * gconttsq + (1.0-gconttsq);
3076 SLOOPA(j) *gconttplus1 += 2.0*geom->gcov[
GIND(TT,j)]*(geom->gcon[
GIND(j,TT)]*geom->gcon[
GIND(j,TT)]);
3077 SLOOP(j,k) *gconttplus1 += geom->gcov[
GIND(j,k)]*geom->gcon[
GIND(j,TT)]*geom->gcon[
GIND(k,TT)];
3086 FTYPE gcovttplus1, gconttplus1;
3099 gcovttplus1 = geom->gcovpert[
TT];
3105 get_3velterm(vcon, geom, &velterm);
3111 *quasivsq = (gcovttplus1 + velterm) / (-geom->gcov[
GIND(TT,TT)] - velterm) + gconttplus1 ;
3121 FTYPE AA,BB,CCM1,CCPLUSAA ;
3125 FTYPE gcovttplus1,gconttplus1;
3136 get_4velterms(ucon, geom, &AA, &BB, &CCM1, &discr);
3139 dualfprintf(fail_file,
"Problem with utsqm1_4vel\n");
3144 gcovttplus1 = geom->gcovpert[
TT];
3150 CCPLUSAA = gcovttplus1 + CCM1;
3158 *quasivsq = ( BB*(BB + sqrt(discr)) + fabs(BB*BB - 4.0*AA*CCPLUSAA) ) /(4.0*AA*AA) + gconttplus1;
3178 alphasq=1./(-geom->gcon[
GIND(TT,TT)]);
3182 qsq_calc(uconrel,geom,&qsq);
3188 *quasivsq = qsq/alphasq;
3208 return(quasivsq_4vel(ucon, geom, quasivsq));
3210 #elif(WHICHVEL==VEL3)
3215 return(quasivsq_3vel(vcon, geom, quasivsq));
3217 #elif(WHICHVEL==VELREL4)
3222 return(quasivsq_rel4vel(uconrel, geom, quasivsq));
3241 if(quasivsq_compute(pr, geom, &quasivsqold)>=1){
3242 dualfprintf(fail_file,
"Problem with limit_quasivsq using quasivsq_compute\n");
3254 limit_quasivsq_4vel(quasivsqold,quasivsqnew, geom, ucon);
3259 #elif(WHICHVEL==VEL3)
3264 limit_quasivsq_3vel(quasivsqold,quasivsqnew, geom, vcon);
3269 #elif(WHICHVEL==VELREL4)
3274 limit_quasivsq_rel4vel(quasivsqold,quasivsqnew, geom, uconrel);
3292 pref = sqrt(quasivsqnew/(quasivsqold+
SMALL));
3307 pref = sqrt(quasivsqnew/(quasivsqold+
SMALL));
3322 pref = sqrt(quasivsqnew/(quasivsqold+
SMALL));
3343 lower_vec(Bccon,geom,Bccov);
3348 ftemp=(Bccov[
TT]+omegaf*Bccov[
PH])/Bsq;
3353 ftemp2=omegaf*(Bccov[
RR]*Bccon[
RR]+Bccov[
TH]*Bccon[
TH])/Bsq;
3355 vcon[1] = -Bccon[1]*ftemp;
3356 vcon[2] = -Bccon[2]*ftemp;
3359 vcon[3] = ftemp2 - (Bccon[3]*Bccov[
TT]/Bsq);
3384 lower_vec(Bccon,geom,Bccov);
3391 ftemp=(Bccov[
TT]+omegaf*Bccov[
PH])/Bsq;
3396 ftemp2=omegaf*(Bccov[
RR]*Bccon[
RR]+Bccov[
TH]*Bccon[
TH])/Bsq;
3398 vcon[1] = (v0oB-ftemp)*Bccon[1];
3399 vcon[2] = (v0oB-ftemp)*Bccon[2];
3402 vcon[3] = ftemp2 + Bccon[3]*(v0oB-Bccov[
TT]/Bsq);
3434 lower_vec(Bccon,geom,Bccov);
3441 vcon[1] = v0*Bccon[1]/absB;
3442 vcon[2] = v0*Bccon[2]/absB;
3443 vcon[3] = omegaf+v0*Bccon[3]/absB;
3457 FTYPE absB_poloidal;
3463 lower_vec(Bccon,geom,Bccov);
3465 Bsq_poloidal=0.0+
SMALL;
3466 SLOOPA(j)
if( j <= 2 ) Bsq_poloidal+=Bccon[
j]*Bccov[
j];
3468 absB_poloidal=sqrt(Bsq_poloidal);
3470 vcon[1] = v0*Bccon[1]/absB_poloidal;
3471 vcon[2] = v0*Bccon[2]/absB_poloidal;
3472 vcon[3] = omegaf+v0*Bccon[3]/absB_poloidal;
3498 lower_vec(Bccon,geom,Bccov);
3499 lower_vec(normalvec,geom,normalveccov);
3502 SLOOPA(j) Bsq_normal+=Bccon[
j]*normalveccov[
j];
3504 absB_normal=sqrt(Bsq_normal);
3506 vcon[1] = v0*Bccon[1]/absB_normal;
3507 vcon[2] = v0*Bccon[2]/absB_normal;
3508 vcon[3] = omegaf+v0*Bccon[3]/absB_normal;
3517 void ffdestresstensor(
FTYPE (*Mcon)[NDIM],
struct of_geom *geom,
FTYPE (*T)[NDIM])
3527 lower_A(Mcon, geom, Mcov) ;
3530 DLOOP(j,k) T[j][k] = 0. ;
3541 DLOOP(j,k) Msq += Mcov[j][k]*Mcon[j][k] ;
3544 for(i = 0; i <
NDIM; i++) {
3545 T[
j][k] += Mcon[
j][
i]*Mcov[k][
i] ;
3548 DLOOPA(j) T[j][j] -= 0.25 * Msq ;
3554 void ffdestresstensor_dir(
int dir,
FTYPE (*Mcon)[NDIM], struct
of_geom *geom,
FTYPE *TEMdir)
3564 lower_A(Mcon, geom, Mcov) ;
3567 DLOOPA(k) TEMdir[k] = 0. ;
3578 DLOOP(j,k) Msq += Mcov[j][k]*Mcon[j][k] ;
3581 for(i = 0; i <
NDIM; i++) {
3582 TEMdir[k] += Mcon[dir][
i]*Mcov[k][
i] ;
3585 TEMdir[dir] -= 0.25 * Msq ;
3598 localgcon[
GIND(j,k)]=geom->gcon[
GIND(j,k)];
3603 Acon[0][1] += (localgcon[
GIND(0,j)])*(localgcon[
GIND(1,k)])*Acov[j][k] ;
3604 Acon[0][2] += (localgcon[
GIND(0,j)])*(localgcon[
GIND(2,k)])*Acov[j][k] ;
3605 Acon[0][3] += (localgcon[
GIND(0,j)])*(localgcon[
GIND(3,k)])*Acov[j][k] ;
3606 Acon[1][2] += (localgcon[
GIND(1,j)])*(localgcon[
GIND(2,k)])*Acov[j][k] ;
3607 Acon[2][3] += (localgcon[
GIND(2,j)])*(localgcon[
GIND(3,k)])*Acov[j][k] ;
3608 Acon[3][1] += (localgcon[
GIND(3,j)])*(localgcon[
GIND(1,k)])*Acov[j][k] ;
3616 Acon[1][0] = - Acon[0][1] ;
3617 Acon[2][0] = - Acon[0][2] ;
3618 Acon[3][0] = - Acon[0][3] ;
3619 Acon[2][1] = - Acon[1][2] ;
3620 Acon[3][2] = - Acon[2][3] ;
3621 Acon[1][3] = - Acon[3][1] ;
3633 localgcov[
GIND(j,k)]=geom->gcov[
GIND(j,k)];
3638 Acov[0][1] += (localgcov[
GIND(0,j)])*(localgcov[
GIND(1,k)])*Acon[j][k] ;
3639 Acov[0][2] += (localgcov[
GIND(0,j)])*(localgcov[
GIND(2,k)])*Acon[j][k] ;
3640 Acov[0][3] += (localgcov[
GIND(0,j)])*(localgcov[
GIND(3,k)])*Acon[j][k] ;
3641 Acov[1][2] += (localgcov[
GIND(1,j)])*(localgcov[
GIND(2,k)])*Acon[j][k] ;
3642 Acov[2][3] += (localgcov[
GIND(2,j)])*(localgcov[
GIND(3,k)])*Acon[j][k] ;
3643 Acov[3][1] += (localgcov[
GIND(3,j)])*(localgcov[
GIND(1,k)])*Acon[j][k] ;
3651 Acov[1][0] = - Acov[0][1] ;
3652 Acov[2][0] = - Acov[0][2] ;
3653 Acov[3][0] = - Acov[0][3] ;
3654 Acov[2][1] = - Acov[1][2] ;
3655 Acov[3][2] = - Acov[2][3] ;
3656 Acov[1][3] = - Acov[3][1] ;
3670 int nu,
mu,kappa,lambda;
3674 if((which==0)||(which==1)){
3676 if(which==0) whichlc=0;
3677 if(which==1) whichlc=1;
3679 if((which==2)||(which==3)){
3681 if(which==2) whichlc=0;
3682 if(which==3) whichlc=1;
3685 for(nu=0;nu<
NDIM;nu++)
for(mu=0;mu<
NDIM;mu++){
3687 for(kappa=0;kappa<
NDIM;kappa++)
for(lambda=0;lambda<
NDIM;lambda++){
3688 outvar[
mu][
nu]+=prefactor*
lc4(whichlc,geom->gdet,mu,nu,kappa,lambda)*invar[kappa][lambda];
3703 dualffull[
j][0] = Bcon[
j];
3704 dualffull[0][
j] = -Bcon[
j];
3710 SLOOP(j,k) dualffull[
j][k] = Bcon[
j] * vcon[k] - Bcon[k] * vcon[
j] ;
3718 int set_zamo_velocity(
int whichvel,
struct of_geom *ptrgeom,
FTYPE *pr)
3725 etacov[
TT]=-ptrgeom->alphalapse;
3730 raise_vec(etacov,ptrgeom,etacon);
3734 SLOOPA(jj) pr[
U1+jj-1] = etacon[jj];
3736 else if(whichvel==
VEL3){
3737 SLOOPA(jj) pr[
U1+jj-1] = etacon[jj]/etacon[TT];
3757 alpha = ptrgeom->alphalapse;
3763 raise_vec(ucov,ptrgeom,ucon);
3769 *plus1ud0 = fabs(gconpert)*alpha/(ialpha+1.0);
3775 int set_zamo_ucon(struct
of_geom *ptrgeom,
FTYPE *ucon)
3780 set_zamo_ucovuconplus1ud0(ptrgeom, ucov,ucon,&plus1ud0);
3796 *entropy = compute_entropy_simple(ptrgeom->i,ptrgeom->j,ptrgeom->k,ptrgeom->p,pr[
RHO],pr[
UU]);
3814 FTYPE pressure_rho0_u_simple(
int i,
int j,
int k,
int loc,
FTYPE rho,
FTYPE u)
3828 return(GLOBALMACP0A1(EOSextraglobal,i,j,k,PGASGLOBAL));
3846 FTYPE u_rho0_T_simple(
int i,
int j,
int k,
int loc,
FTYPE rho,
FTYPE T)
3854 FTYPE cs2_compute_simple(
int i,
int j,
int k,
int loc,
FTYPE rho,
FTYPE u)
3863 FTYPE compute_entropy_simple(
int i,
int j,
int k,
int loc,
FTYPE rho,
FTYPE u)
3871 #if(WHICHEOS!=KAZFULL)
3891 FTYPE chi = u + GLOBALMACP0A1(EOSextraglobal,i,j,k,PGASGLOBAL);
3897 #if(WHICHEOS!=KAZFULL)
3908 void get_EOS_parms_simple(
int*numparms,
int i,
int j,
int k,
int loc,
FTYPE *parlist)
3917 void fix_primitive_eos_scalars_simple(
int i,
int j,
int k,
int loc,
FTYPE *pr)
3925 FTYPE compute_temp_simple(
int i,
int j,
int k,
int loc,
FTYPE rho,
FTYPE u)
3933 int get_extrasprocessed_simple(
int doall,
int i,
int j,
int k,
int loc,
FTYPE *pr,
FTYPE *extras,
FTYPE *processed)
3936 return(get_extrasprocessed(
WHICHEOS,1,
GLOBALMAC(EOSextraglobal,i,j,k),
GLOBALMAC(pdump,i,j,k), extras, processed));
3942 FTYPE compute_u_from_entropy_simple(
int i,
int j,
int k,
int loc,
FTYPE rho,
FTYPE entropy)
3949 return(compute_u_from_entropy(
WHICHEOS,
GLOBALMAC(EOSextraglobal,i,j,k), rho, entropy));
3953 FTYPE compute_qdot_simple(
int i,
int j,
int k,
int loc,
FTYPE rho,
FTYPE u)
3960 FTYPE dpdrho0_rho0_u_simple(
int i,
int j,
int k,
int loc,
FTYPE rho,
FTYPE u)
3967 FTYPE dpdu_rho0_u_simple(
int i,
int j,
int k,
int loc,
FTYPE rho,
FTYPE u)