27 trifprintf(
"R0=%21.15g Rhor=%21.15g Rin=%21.15g Rout=%21.15g ihor=%d MBH=%g\n",
R0,Rhor,(*rin),
Rout,
setihor(),
MBH);
30 dualfprintf(
fail_file,
"Wrong Rin calculation\n");
34 dualfprintf(
fail_file,
"Very Poor Rin<0 calculation\n");
39 dualfprintf(
fail_file,
"Rin<r_- : Poor Rin calculation: %g %g\n",*rin,rminus);
43 dualfprintf(
fail_file,
"Rin>r_+ : Poor Rin calculation: %g %g\n",*rin,Rhor);
83 PLOOPBONLY(pl) trifprintf("fieldfrompotential[%d]=%d\n",pl-
B1+1,fieldfrompotential[pl-B1+1]);
87 pi2Uavg(fieldfrompotential, prim, pstag, Utemp, U);
308 struct of_geom realgeomdontuse;
309 struct of_geom *ptrrealgeom=&realgeomdontuse;
316 set_atmosphere(-1,
WHICHVEL,ptrrealgeom,pratm);
319 PLOOP(pliter,pl) pr[pl]=pratm[pl];
332 int user1_init_primitives(
int inittype,
FTYPE (*prim)[
NSTORE2][
NSTORE3][NPR],
FTYPE (*pstag)[
NSTORE2][
NSTORE3][NPR],
FTYPE (*ucons)[
NSTORE2][
NSTORE3][NPR],
FTYPE (*vpot)[
NSTORE1+
SHIFTSTORE1][
NSTORE2+
SHIFTSTORE2][
NSTORE3+
SHIFTSTORE3],
FTYPE (*Bhat)[
NSTORE2][
NSTORE3][NPR],
FTYPE (*panalytic)[
NSTORE2][
NSTORE3][NPR],
FTYPE (*pstaganalytic)[
NSTORE2][
NSTORE3][NPR],
FTYPE (*vpotanalytic)[
NSTORE1+
SHIFTSTORE1][
NSTORE2+
SHIFTSTORE2][
NSTORE3+SHIFTSTORE3],
FTYPE (*Bhatanalytic)[
NSTORE2][
NSTORE3][NPR],
337 int i = 0, j = 0, k = 0, l;
341 int init_atmosphere(
int *whichvel,
int *whichcoord,
int i,
int j,
int k,
FTYPE *pr);
349 trifprintf(
"Assign primitives\n");
355 init_3dnpr_fullloop(0.0,prim);
365 #pragma omp parallel private(i,j,k,initreturn,whichvel,whichcoord) OPENMPGLOBALPRIVATEFULL
370 #pragma omp for schedule(OPENMPSCHEDULE(),OPENMPCHUNKSIZE(blocksize))
374 initreturn=
init_dsandvels(inittype,
CENT, &whichvel, &whichcoord,
t,i,j,k,
MAC(prim,i,j,k),
MAC(pstag,i,j,k));
376 FAILSTATEMENT(
"init.c:init_primitives()",
"init_dsandvels()", 1);
378 else MYFUN(
transform_primitive_vB(whichvel, whichcoord, i,j,k, prim, pstag),
"init.c:init_primitives",
"transform_primitive_vB()",0);
398 #pragma omp parallel private(i,j,k,initreturn,whichvel,whichcoord) OPENMPGLOBALPRIVATEFULL
403 #pragma omp for schedule(OPENMPSCHEDULE(),OPENMPCHUNKSIZE(blocksize))
420 trifprintf(
"Normalize densities\n");
431 trifprintf(
"Add atmosphere\n");
433 #pragma omp parallel private(i,j,k,initreturn,whichvel,whichcoord) OPENMPGLOBALPRIVATEFULL
438 #pragma omp for schedule(OPENMPSCHEDULE(),OPENMPCHUNKSIZE(blocksize))
442 initreturn=init_atmosphere(&whichvel, &whichcoord,i,j,k,
MAC(prim,i,j,k));
444 FAILSTATEMENT(
"init.c:init_primitives()",
"init_atmosphere()", 1);
446 else if(initreturn==-1){
472 copy_prim2panalytic(prim,panalytic,pstag,pstaganalytic,vpot,vpotanalytic,Bhat,Bhatanalytic);
487 if (dump(9999) >= 1){
488 dualfprintf(
fail_file,
"unable to print dump file\n");
494 trifprintf(
"Fixup #1\n");
502 if (dump(99988) >= 1){
503 dualfprintf(
fail_file,
"unable to print dump file\n");
510 trifprintf(
"Bound #1\n");
518 if (dump(9998) >= 1){
519 dualfprintf(
fail_file,
"unable to print dump file\n");
525 trifprintf(
"pre_interpolate_and_advance #1\n");
527 pre_interpolate_and_advance(prim);
531 trifprintf(
"pre_fixup #1\n");
544 trifprintf(
"init_vpot #1\n");
545 init_vpot(prim,pstag,ucons,vpot,Bhat,F1,F2,F3,Atemp);
546 trifprintf(
"normalize_field #1\n");
550 trifprintf(
"init_zero_field #1\n");
558 #pragma omp parallel private(i,j,k) OPENMPGLOBALPRIVATEFULL
563 #pragma omp for schedule(OPENMPSCHEDULE(),OPENMPCHUNKSIZE(blocksize))
567 init_postvpot(i, j, k,
MAC(prim,i,j,k),
MAC(pstag,i,j,k),
MAC(ucons,i,j,k));
579 trifprintf(
"copy_prim2panalytic #1\n");
580 copy_prim2panalytic(prim,panalytic,pstag,pstaganalytic,vpot,vpotanalytic,Bhat,Bhatanalytic);
597 if (dump(9997) >= 1){
598 dualfprintf(
fail_file,
"unable to print dump file\n");
603 trifprintf(
"Fixup #2\n");
609 trifprintf(
"Bound #2\n");
618 if (dump(9996) >= 1){
619 dualfprintf(
fail_file,
"unable to print dump file\n");
632 trifprintf(
"EOSextra\n");
636 GLOBALMACP0A1(EOSextraglobal,i,j,k,PGASGLOBAL)=
pressure_rho0_u(
WHICHEOS,
GLOBALMAC(EOSextraglobal,i,j,k),
MACP0A1(prim,i,j,k,RHO),
MACP0A1(prim,i,j,k,
UU));
643 trifprintf(
"pre_interpolate_and_advance #2\n");
644 pre_interpolate_and_advance(prim);
647 trifprintf(
"pre_fixup #2\n");
665 extern int set_fieldfrompotential(
int *fieldfrompotential);
672 set_fieldfrompotential(fieldfrompotential);
676 toreturn=
vpot2field(time, A,
GLOBALPOINT(ptemparray),pstag,ucons,Bhat,
GLOBALPOINT(F1),
GLOBALPOINT(F2),
GLOBALPOINT(F3),
GLOBALPOINT(emf),
GLOBALPOINT(ulastglobal));
684 if(fieldfrompotential[1]==1 && fieldfrompotential[2]==1 && fieldfrompotential[3]==1){
691 copy_3d_fieldonly_fullloop(
GLOBALPOINT(ptemparray),prim);
695 struct of_geom *ptrgeom=&geomdontuse;
699 if(fieldfrompotential[pl-
B1+1]==1){
700 MACP0A1(prim,i,j,k,pl) = GLOBALMACP0A1(ptemparray,i,j,k,pl);
710 MACP0A1(ucons,i,j,k,pl) = ptrgeom->EOMFUNCMAC(pl) *
MACP0A1(prim,i,j,k,pl);
714 MACP0A1(Bhat,i,j,k,pl) = ptrgeom->EOMFUNCMAC(pl) *
MACP0A1(pstag,i,j,k,pl);
744 bl_coord_ijk_2(i, j, k,
CENT, X, V);
748 if (
MACP0A1(prim,i,j,k,RHO) > *rhomax) *rhomax =
MACP0A1(prim,i,j,k,RHO);
765 trifprintf(
"rhomax: %21.15g umax: %21.15g\n", *rhomax, *umax);
775 MACP0A1(prim,i,j,k,RHO) *= rhodisk/(*rhomax);
776 MACP0A1(prim,i,j,k,
UU) *= rhodisk/(*rhomax);
786 *umax *= rhodisk/(*rhomax);
807 bl_coord_ijk_2(i, j, k,
CENT, X, V);
813 if (
MACP0A1(prim,i,j,k,RHO) > *rhomax) *rhomax =
MACP0A1(prim,i,j,k,RHO);
827 trifprintf(
"rhomax: %21.15g umax: %21.15g\n", *rhomax, *umax);
853 bl_coord_ijk_2(i, j, k,
CENT, X, V);
859 if (pr[RHO] > *rhomax) *rhomax = pr[
RHO];
860 if (pr[
UU] > *umax ) *umax = pr[
UU];
861 if (pr[URAD0] > *uradmax ) *uradmax = pr[URAD0];
862 utot = pr[
UU]+pr[URAD0];
863 if (utot > *utotmax ) *utotmax = utot;
865 p=pressure_rho0_u_simple(i,j,k,
CENT,pr[RHO],pr[
UU]);
866 prad=pr[URAD0]*(4.0/3.0-1.0);
869 if (p > *pmax ) *pmax =
p;
870 if (prad > *pmax ) *pradmax = prad;
871 if (ptot > *ptotmax ) *ptotmax = ptot;
889 trifprintf(
"rhomax: %21.15g umax: %21.15g uradmax: %21.15g utotmax: %21.15g pmax: %21.15g pradmax: %21.15g ptotmax: %21.15g\n", *rhomax, *umax, *uradmax, *utotmax, *pmax, *pradmax, *ptotmax);
901 FTYPE bsq_ij,ptot_ij,beta_ij;
903 struct of_geom *ptrgeom=&geomdontuse;
917 if(rout<=rin) rout=2.0*
rin;
918 dualfprintf(
fail_file,
"rin=%g rout=%g THETAEQ=%g\n",rin,rout,THETAEQ);
930 bl_coord_ijk_2(i, j, k, loc, X, V);
940 if((r>rin&&r<rout)&&(fabs(th-M_PI*0.5)<THETAEQ)){
943 if (bsq_ij > bsq_max[0]) bsq_max[0] = bsq_ij;
945 ptot_ij=pressure_rho0_u_simple(i,j,k,loc,
MACP0A1(prim,i,j,k,RHO),
MACP0A1(prim,i,j,k,
UU));
949 if (ptot_ij > ptot_max[0]) ptot_max[0] = ptot_ij;
951 beta_ij=ptot_ij/(bsq_ij*0.5);
953 if (beta_ij < beta_min[0]) beta_min[0] = beta_ij;
963 if (bsq_ij > bsq_max[0]) bsq_max[0] = bsq_ij;
965 ptot_ij=pressure_rho0_u_simple(i,j,k,loc,
MACP0A1(prim,i,j,k,RHO),
MACP0A1(prim,i,j,k,
UU));
968 if (ptot_ij > ptot_max[0]) ptot_max[0] = ptot_ij;
970 beta_ij=ptot_ij/(bsq_ij*0.5);
972 if (beta_ij < beta_min[0]) beta_min[0] = beta_ij;
981 dualfprintf(
fail_file,
"Never found place to normalize field\n");
984 bl_coord_ijk_2(i, j, k, loc, X, V);
989 dualfprintf(
fail_file,
"i=%d j=%d k=%d V[1]=%21.15g dxdxp[1][1]*dx[1]=%21.15g dx[1]=%21.15g\n",i,j,k,V[1],dxdxp[1][1]*
dx[1],dx[1]);
1007 #define FIELDBETANORMMETHOD 1
1022 get_maxes(prim, &bsq_max, &myptotmax, &betamin);
1023 trifprintf(
"initial bsq_max: %21.15g ptotmax: %21.15g betamin=%21.15g\n", bsq_max,myptotmax,betamin);
1025 #if(FIELDBETANORMMETHOD==0)
1027 beta_act = myptotmax / (0.5 *
bsq_max);
1028 norm = sqrt(beta_act / beta);
1029 #elif(FIELDBETANORMMETHOD==1)
1031 norm = sqrt(beta_act / beta);
1033 trifprintf(
"initial beta: %21.15g (should be %21.15g) norm=%21.15g\n", beta_act,beta,norm);
1040 get_maxes(prim, &bsq_max, &myptotmax, &betamin);
1041 trifprintf(
"new initial bsq_max: %21.15g ptotmax: %21.15g betamin=%21.15g\n", bsq_max,myptotmax,betamin);
1043 #if(FIELDBETANORMMETHOD==0)
1044 beta_act = myptotmax / (0.5 *
bsq_max);
1045 #elif(FIELDBETANORMMETHOD==1)
1048 trifprintf(
"final beta: %21.15g (should be %21.15g)\n", beta_act,beta);
1055 #if(EOMTYPE==EOMGRMHD||EOMTYPE==EOMCOLDGRMHD||EOMTYPE==EOMENTROPYGRMHD)
1056 #define NORMALIZEFIELDMETHOD 0 // choice
1060 #define NORMALIZEFIELDMETHOD 1 // no choice
1067 FTYPE sigma_pole, bsq_pole, norm;
1072 trifprintf(
"initial sigma_pole: %21.15g bsq_pole: %21.15g\n", sigma_pole,bsq_pole);
1076 norm = sqrt(sigma0/sigma_pole);
1077 trifprintf(
"initial sigma_pole: %21.15g (should be %21.15g) norm=%21.15g\n", sigma_pole,sigma0,norm);
1081 norm = sqrt(bpole*bpole/bsq_pole);
1082 trifprintf(
"initial bsq_pole: %21.15g (should be %21.15g) norm=%21.15g\n", bsq_pole,bpole*bpole,norm);
1092 trifprintf(
"new initial sigma_pole: %21.15g bsq_pole: %21.15g\n", sigma_pole,bsq_pole);
1096 trifprintf(
"initial sigma_pole: %21.15g (should be %21.15g) norm=%21.15g\n", sigma_pole,sigma0,norm);
1099 trifprintf(
"initial bsq_pole: %21.15g (should be %21.15g) norm=%21.15g\n", bsq_pole,bpole*bpole,norm);
1118 struct of_geom *ptrgeom=&geomdontuse;
1130 FTYPE bsq_ij,sigma_ij;
1139 bl_coord_ijk_2(i, j, k, loc, X, V);
1149 sigma_ij=bsq_ij/(2.0*fabs(
MACP0A1(prim,i,j,k,RHO)+
SMALL));
1152 dualfprintf(
fail_file,
"RENORMDEN1: %d %d %d %21.15g %21.15g\n",i,j,k,sigma_ij,
MACP0A1(prim,i,j,k,RHO));
1160 dualfprintf(
fail_file,
"RENORMDEN2: %d %d %d %21.15g %21.15g\n",i,j,k,sigmahot_ij,
MACP0A1(prim,i,j,k,
UU));
1168 dualfprintf(
fail_file,
"RENORMDEN3: %d %d %d %21.15g %21.15g %21.15g\n",i,j,k,uorho,
MACP0A1(prim,i,j,k,RHO),
MACP0A1(prim,i,j,k,
UU));
1193 FTYPE bsq_ij,sigma_ij;
1195 struct of_geom *ptrgeom=&geomdontuse;
1206 sigma_pole[0] =
SMALL;
1207 bsq_pole[0] =
SMALL;
1219 bl_coord_ijk_2(i, j, k, loc, X, V);
1231 sigma_ij=bsq_ij/(2.0*fabs(
MACP0A1(prim,i,j,k,RHO))+
SMALL);
1236 if (sigma_ij > sigma_pole[0]) sigma_pole[0] = sigma_ij;
1237 if (bsq_ij > bsq_pole[0]) bsq_pole[0] = bsq_ij;
1242 mpiisum(&gotnormal);
1245 dualfprintf(
fail_file,
"Never found place to normalize field for NS\n");
1248 bl_coord_ijk_2(i, j, k, loc, X, V);
1253 dualfprintf(
fail_file,
"i=%d j=%d k=%d V[1]=%21.15g dxdxp[1][1]*dx[1]=%21.15g dx[1]=%21.15g\n",i,j,k,V[1],dxdxp[1][1]*
dx[1],dx[1]);
1277 #define TAUADJUSTATM (10.0) // timescale for boundary to adjust to using preset inflow
1278 int user1_set_atmosphere(
int atmospheretype,
int whichcond,
int whichvel,
struct of_geom *ptrgeom,
FTYPE *pr)
1289 bl_coord_ijk_2(ptrgeom->i, ptrgeom->j, ptrgeom->k, ptrgeom->p, X, V);
1294 PLOOP(pliter,pl) prlocal[pl]=pr[pl];
1299 if(atmospheretype==1){
1303 else if(atmospheretype==2){
1305 if(r>40.0) prlocal[
RHO] =
RHOMIN*pow(r,-2.0);
1306 else prlocal[
RHO] =
RHOMIN*pow(40.0,-2.0);
1320 prlocal[
UU] =
UUMIN*pow(r,-2.5);
1328 set_zamo_velocity(whichvel,ptrgeom,prlocal);
1338 else if(whichcond==0){
1339 PLOOP(pliter,pl) pr[pl] = prlocal[pl];
1344 else if(whichcond==-1){
1346 PLOOP(pliter,pl) pr[pl] = prlocal[pl];
1347 pr[
B1] = pr[
B2] = pr[
B3] = 0;