20 #define MYII ptrgeom->i
21 #define MYJJ ptrgeom->j
22 #define MYKK ptrgeom->k
46 #else // else if not storing fluxstate
159 mks_source_conn(pr,ptrgeom, q, dU);
160 PLOOP(pliter,pl) dU[pl]*=ptrgeom->EOMFUNCMAC(pl);
189 PLOOP(pliter,pl) dUconn[pl]=0;
192 #if(MCOORD!=CARTMINKMETRIC)
211 dUconn[
UU+l] += mhd[
j][k] * connterm;
212 dUconn[URAD0+l] += mhdrad[
j][k] * connterm;
221 #if(REMOVERESTMASSFROMUU==2)
236 PLOOP(pliter,pl) dU[pl]+=ptrgeom->EOMFUNCMAC(pl)*dUconn[pl];
246 #if(WHICHEOM!=WITHGDET)
263 if(todo[
RHO]!=todo[
UU]){
264 dualfprintf(
fail_file,
"Mixed form of REMOVERESTMASSFROMUU and NOGDET's not allowed.\n");
281 #endif // end if (WHICHEOM!=WITHGDET)
295 #if(NEWMETRICSTORAGE==0)
296 void get_geometry_old(
int ii,
int jj,
int kk,
int pp,
struct of_geom *geom)
304 #if(MCOORD!=CARTMINKMETRIC)
316 #if(GETGEOMUSEPOINTER==0)
354 void get_geometry_gdetonly_old(
int ii,
int jj,
int kk,
int pp,
struct of_geom *geom)
362 #if(MCOORD!=CARTMINKMETRIC)
391 void get_geometry_geomeonly_old(
int ii,
int jj,
int kk,
int pp,
struct of_geom *geom)
399 #if(WHICHEOM!=WITHGDET)
413 #endif // end if old metric method
430 allgeom->i=ptrgeom->i;
431 allgeom->j=ptrgeom->j;
432 allgeom->k=ptrgeom->k;
433 allgeom->p=ptrgeom->p;
435 #if(GETGEOMUSEPOINTER==0 || NEWMETRICSTORAGE==1)
436 for(j=0;j<=NDIM*NDIM-1;j++){
437 allgeom->gcov[
GIND(0,j)]=ptrgeom->gcov[
GIND(0,j)];
438 allgeom->gcon[
GIND(0,j)]=ptrgeom->gcon[
GIND(0,j)];
441 allgeom->gcovpert[
j]=ptrgeom->gcovpert[
j];
444 allgeom->gcov=ptrgeom->gcov;
445 allgeom->gcon=ptrgeom->gcon;
446 allgeom->gcovpert=ptrgeom->gcovpert;
449 allgeom->gdet=ptrgeom->gdet;
450 PLOOP(pliter,pl) allgeom->EOMFUNCMAC(pl)=ptrgeom->EOMFUNCMAC(pl);
451 allgeom->alphalapse = ptrgeom->alphalapse;
453 PALLLOOP(pl) allgeom->IEOMFUNCNOSINGMAC(pl) = ptrgeom->IEOMFUNCNOSINGMAC(pl);
454 allgeom->igdetnosing = ptrgeom->igdetnosing;
471 #if(WHICHEOM==WITHGDET)
477 if(
nogdetlist[pl]==0) geom->EOMFUNCMAC(pl)=geom->gdet;
487 if(
nogdetlist[pl]==0) geom->IEOMFUNCNOSINGMAC(pl)=geom->igdetnosing;
517 #if(CALCFARADAYANDCURRENTS==0)
518 dualfprintf(
fail_file,
"Shouldn't be here in current_doprecalc()\n");
525 #pragma omp parallel OPENMPGLOBALPRIVATEFORSTATEANDGEOM // requires full state (OPTMARK: But shouldn't have to since just need field part of state)
530 struct of_geom *ptrgeom=&geomdontuse;
539 if(which==
CURTYPET){ face=
CENT; idel=0; jdel=0; kdel=0; Dt=
dt*0.5; }
553 if(which==
CURTYPET){ face=
CENT; idel=0; jdel=0; kdel=0; Dt=
dt*0.5; }
554 else if(which==
CURTYPEX){ face=
CENT; idel=1; jdel=0; kdel=0; Dt=
dt; }
555 else if(which==
CURTYPEY){ face=
CENT; idel=0; jdel=1; kdel=0; Dt=
dt; }
556 else if(which==
CURTYPEZ){ face=
CENT; idel=0; jdel=0; kdel=1; Dt=
dt; }
560 dualfprintf(
fail_file,
"No such WHICHCURRENTCALC=%d\n",WHICHCURRENTCALC);
567 #pragma omp for schedule(OPENMPSCHEDULE(),OPENMPCHUNKSIZE(blocksize))
572 MYFUN(
get_state(
MAC(
p,i,j,k), ptrgeom, &q),
"phys.c:current_doprecalc()",
"get_state()", 1);
573 current_precalc(which,ptrgeom,&q,Dt,
GLOBALMAC(cfaraday,i,j,k));
591 #if(CALCFARADAYANDCURRENTS==0)
592 dualfprintf(
fail_file,
"Shouldn't be here in current_doprecalc()\n");
602 faraday[4][0]=faraday[0][0];
603 faraday[4][1]=faraday[0][1];
604 faraday[4][2]=faraday[0][2];
608 faraday[4][0]=faraday[5][0];
609 faraday[4][1]=faraday[5][1];
610 faraday[4][2]=faraday[5][2];
613 faraday[5][0]=faraday[0][0];
614 faraday[5][1]=faraday[0][1];
615 faraday[5][2]=faraday[0][2];
620 faraday[0][0]=-1.0/geom->gdet * (-q->
bcov[3]*q->
ucov[2]+q->
bcov[2]*q->
ucov[3]);
621 faraday[0][1]=-1.0/geom->gdet * (q->
bcov[3]*q->
ucov[1]-q->
bcov[1]*q->
ucov[3]);
622 faraday[0][2]=-1.0/geom->gdet * (-q->
bcov[2]*q->
ucov[1]+q->
bcov[1]*q->
ucov[2]);
629 faraday[1][0]=-1.0/geom->gdet * (q->
bcov[3]*q->
ucov[2]-q->
bcov[2]*q->
ucov[3]);
630 faraday[1][1]=-1.0/geom->gdet * (-q->
bcov[3]*q->
ucov[0]+q->
bcov[0]*q->
ucov[3]);
631 faraday[1][2]=-1.0/geom->gdet * (q->
bcov[2]*q->
ucov[0]-q->
bcov[0]*q->
ucov[2]);
638 faraday[2][0]=-1.0/geom->gdet * (-q->
bcov[3]*q->
ucov[1]+q->
bcov[1]*q->
ucov[3]);
639 faraday[2][1]=-1.0/geom->gdet * (q->
bcov[3]*q->
ucov[0]-q->
bcov[0]*q->
ucov[3]);
640 faraday[2][2]=-1.0/geom->gdet * (-q->
bcov[1]*q->
ucov[0]+q->
bcov[0]*q->
ucov[1]);
646 faraday[3][0]=1.0/geom->gdet * (-q->
bcov[3]*q->
ucov[2]+q->
bcov[2]*q->
ucov[3]);
647 faraday[3][1]=1.0/geom->gdet * (q->
bcov[2]*q->
ucov[0]-q->
bcov[0]*q->
ucov[2]);
648 faraday[3][2]=1.0/geom->gdet * (-q->
bcov[1]*q->
ucov[0]+q->
bcov[0]*q->
ucov[1]);
653 GLOBALMACP0A1(fcon,geom->i,geom->j,geom->k,0)=-1.0/geom->gdet * (q->
bcov[3]*q->
ucov[2]-q->
bcov[2]*q->
ucov[3]);
654 GLOBALMACP0A1(fcon,geom->i,geom->j,geom->k,1)=-1.0/geom->gdet * (-q->
bcov[3]*q->
ucov[1]+q->
bcov[1]*q->
ucov[3]);
655 GLOBALMACP0A1(fcon,geom->i,geom->j,geom->k,2)=-1.0/geom->gdet * (q->
bcov[2]*q->
ucov[1]-q->
bcov[1]*q->
ucov[2]);
656 GLOBALMACP0A1(fcon,geom->i,geom->j,geom->k,3)=-1.0/geom->gdet * (q->
bcov[3]*q->
ucov[0]-q->
bcov[0]*q->
ucov[3]);
657 GLOBALMACP0A1(fcon,geom->i,geom->j,geom->k,4)=-1.0/geom->gdet * (-q->
bcov[2]*q->
ucov[0]+q->
bcov[0]*q->
ucov[2]);
658 GLOBALMACP0A1(fcon,geom->i,geom->j,geom->k,5)=-1.0/geom->gdet * (q->
bcov[1]*q->
ucov[0]-q->
bcov[0]*q->
ucov[1]);
661 dualfprintf(
fail_file,
"No such which in current_doprecalc()\n");
673 #if(CALCFARADAYANDCURRENTS==0)
674 dualfprintf(
fail_file,
"Shouldn't be here in current_doprecalc()\n");
679 current_calc_0(cfaraday);
682 current_calc_1(WHICHCURRENTCALC,cfaraday);
699 #if(CALCFARADAYANDCURRENTS==0)
700 dualfprintf(
fail_file,
"Shouldn't be here in current_doprecalc()\n");
709 struct of_geom *ptrgeomt=&geomtdontuse;
712 struct of_geom *ptrgeomr=&geomrdontuse;
715 struct of_geom *ptrgeomh=&geomhdontuse;
718 struct of_geom *ptrgeomp=&geompdontuse;
721 struct of_geom *ptrgeomrp1=&geomrp1dontuse;
724 struct of_geom *ptrgeomhp1=&geomhp1dontuse;
727 struct of_geom *ptrgeompp1=&geompp1dontuse;
729 FTYPE idtc,idx1,idx2,idx3;
734 idtc=2.0/(lastdt+
dt);
741 #pragma omp for schedule(OPENMPSCHEDULE(),OPENMPCHUNKSIZE(blocksize))
757 timeterm[1]=+(
GLOBALMACP0A2(cfaraday,i,j,k,0,0)-
GLOBALMACP0A2(cfaraday,i,j,k,4,0))*idtc;
758 timeterm[2]=+(
GLOBALMACP0A2(cfaraday,i,j,k,0,1)-
GLOBALMACP0A2(cfaraday,i,j,k,4,1))*idtc;
759 timeterm[3]=+(
GLOBALMACP0A2(cfaraday,i,j,k,0,2)-
GLOBALMACP0A2(cfaraday,i,j,k,4,2))*idtc;
769 GLOBALMACP0A1(jcon,i,j,k,0)=
770 +1./ptrgeomt->gdet*(ptrgeomrp1->gdet*
GLOBALMACP0A2(cfaraday,
ip1mac(i),j,k,1,0)-ptrgeomr->gdet*
GLOBALMACP0A2(cfaraday,i,j,k,1,0))*idx1
771 +1./ptrgeomt->gdet*(ptrgeomhp1->gdet*
GLOBALMACP0A2(cfaraday,i,
jp1mac(j),k,2,0)-ptrgeomh->gdet*
GLOBALMACP0A2(cfaraday,i,j,k,2,0))*idx2
772 +1./ptrgeomt->gdet*(ptrgeompp1->gdet*
GLOBALMACP0A2(cfaraday,i,j,
kp1mac(k),3,0)-ptrgeomp->gdet*
GLOBALMACP0A2(cfaraday,i,j,k,3,0))*idx3
776 GLOBALMACP0A1(jcon,i,j,k,1)=
778 +1./ptrgeomt->gdet*(ptrgeomhp1->gdet*
GLOBALMACP0A2(cfaraday,i,
jp1mac(j),k,2,1)-ptrgeomh->gdet*
GLOBALMACP0A2(cfaraday,i,j,k,2,1))*idx2
779 +1./ptrgeomt->gdet*(ptrgeompp1->gdet*
GLOBALMACP0A2(cfaraday,i,j,
kp1mac(k),3,1)-ptrgeomp->gdet*
GLOBALMACP0A2(cfaraday,i,j,k,3,1))*idx3
783 GLOBALMACP0A1(jcon,i,j,k,2)=
785 +1./ptrgeomt->gdet*(ptrgeomrp1->gdet*
GLOBALMACP0A2(cfaraday,
ip1mac(i),j,k,1,1)-ptrgeomr->gdet*
GLOBALMACP0A2(cfaraday,i,j,k,1,1))*idx1
786 +1./ptrgeomt->gdet*(ptrgeompp1->gdet*
GLOBALMACP0A2(cfaraday,i,j,
kp1mac(k),3,2)-ptrgeomp->gdet*
GLOBALMACP0A2(cfaraday,i,j,k,3,2))*idx3
790 GLOBALMACP0A1(jcon,i,j,k,3)=
792 +1./ptrgeomt->gdet*(ptrgeomrp1->gdet*
GLOBALMACP0A2(cfaraday,
ip1mac(i),j,k,1,2)-ptrgeomr->gdet*
GLOBALMACP0A2(cfaraday,i,j,k,1,2))*idx1
793 +1./ptrgeomt->gdet*(ptrgeomhp1->gdet*
GLOBALMACP0A2(cfaraday,i,
jp1mac(j),k,2,2)-ptrgeomh->gdet*
GLOBALMACP0A2(cfaraday,i,j,k,2,2))*idx2
817 static long long calls=0;
820 #if(CALCFARADAYANDCURRENTS==0)
821 dualfprintf(
fail_file,
"Shouldn't be here in current_doprecalc()\n");
831 struct of_geom *ptrgeomt=&geomtdontuse;
834 struct of_geom *ptrgeomc=&geomcdontuse;
837 struct of_geom *ptrgeomrp1=&geomrp1dontuse;
840 struct of_geom *ptrgeomhp1=&geomhp1dontuse;
843 struct of_geom *ptrgeompp1=&geompp1dontuse;
846 struct of_geom *ptrgeomrm1=&geomrm1dontuse;
849 struct of_geom *ptrgeomhm1=&geomhm1dontuse;
852 struct of_geom *ptrgeompm1=&geompm1dontuse;
854 FTYPE idtc,idx1,idx2,idx3;
867 idtc=2.0/(lastdt+
dt);
870 idx1=1.0/(2.0*
dx[1]);
871 idx2=1.0/(2.0*
dx[2]);
872 idx3=1.0/(2.0*
dx[3]);
878 #pragma omp for schedule(OPENMPSCHEDULE(),OPENMPCHUNKSIZE(blocksize))
905 AA=(dtr*(fl-f0)+dtl*(fr-f0))/(dtl*dtr*(dtl+dtr));
906 BB=(-dtr*dtr*(fl-f0)+dtl*dtl*(fr-f0))/(dtl*dtr*(dtl+dtr));
914 AA=(dtr*(fl-f0)+dtl*(fr-f0))/(dtl*dtr*(dtl+dtr));
915 BB=(-dtr*dtr*(fl-f0)+dtl*dtl*(fr-f0))/(dtl*dtr*(dtl+dtr));
923 AA=(dtr*(fl-f0)+dtl*(fr-f0))/(dtl*dtr*(dtl+dtr));
924 BB=(-dtr*dtr*(fl-f0)+dtl*dtl*(fr-f0))/(dtl*dtr*(dtl+dtr));
943 timeterm[1]=(
GLOBALMACP0A2(cfaraday,i,j,k,0,0)-
GLOBALMACP0A2(cfaraday,i,j,k,4,0))*idtc;
944 timeterm[2]=(
GLOBALMACP0A2(cfaraday,i,j,k,0,1)-
GLOBALMACP0A2(cfaraday,i,j,k,4,1))*idtc;
945 timeterm[3]=(
GLOBALMACP0A2(cfaraday,i,j,k,0,2)-
GLOBALMACP0A2(cfaraday,i,j,k,4,2))*idtc;
959 GLOBALMACP0A1(jcon,i,j,k,0)=
960 +1./ptrgeomt->gdet*(ptrgeomrp1->gdet*
GLOBALMACP0A2(cfaraday,
ip1mac(i),j,k,1,0)-ptrgeomrm1->gdet*
GLOBALMACP0A2(cfaraday,
im1mac(i),j,k,1,0))*idx1
961 +1./ptrgeomt->gdet*(ptrgeomhp1->gdet*
GLOBALMACP0A2(cfaraday,i,
jp1mac(j),k,2,0)-ptrgeomhm1->gdet*
GLOBALMACP0A2(cfaraday,i,
jm1mac(j),k,2,0))*idx2
962 +1./ptrgeomt->gdet*(ptrgeompp1->gdet*
GLOBALMACP0A2(cfaraday,i,j,
kp1mac(k),3,0)-ptrgeompm1->gdet*
GLOBALMACP0A2(cfaraday,i,j,
km1mac(k),3,0))*idx3
966 GLOBALMACP0A1(jcon,i,j,k,1)=
968 +1./ptrgeomt->gdet*(ptrgeomhp1->gdet*
GLOBALMACP0A2(cfaraday,i,
jp1mac(j),k,2,1)-ptrgeomhm1->gdet*
GLOBALMACP0A2(cfaraday,i,
jm1mac(j),k,2,1))*idx2
969 +1./ptrgeomt->gdet*(ptrgeompp1->gdet*
GLOBALMACP0A2(cfaraday,i,j,
kp1mac(k),3,1)-ptrgeompm1->gdet*
GLOBALMACP0A2(cfaraday,i,j,
km1mac(k),3,1))*idx3
973 GLOBALMACP0A1(jcon,i,j,k,2)=
975 +1./ptrgeomt->gdet*(ptrgeomrp1->gdet*
GLOBALMACP0A2(cfaraday,
ip1mac(i),j,k,1,1)-ptrgeomrm1->gdet*
GLOBALMACP0A2(cfaraday,
im1mac(i),j,k,1,1))*idx1
976 +1./ptrgeomt->gdet*(ptrgeompp1->gdet*
GLOBALMACP0A2(cfaraday,i,j,
kp1mac(k),3,2)-ptrgeompm1->gdet*
GLOBALMACP0A2(cfaraday,i,j,
km1mac(k),3,2))*idx3
980 GLOBALMACP0A1(jcon,i,j,k,3)=
982 +1./ptrgeomt->gdet*(ptrgeomrp1->gdet*
GLOBALMACP0A2(cfaraday,
ip1mac(i),j,k,1,2)-ptrgeomrm1->gdet*
GLOBALMACP0A2(cfaraday,
im1mac(i),j,k,1,2))*idx1
983 +1./ptrgeomt->gdet*(ptrgeomhp1->gdet*
GLOBALMACP0A2(cfaraday,i,
jp1mac(j),k,2,2)-ptrgeomhm1->gdet*
GLOBALMACP0A2(cfaraday,i,
jm1mac(j),k,2,2))*idx2
1009 #pragma omp parallel
1014 struct of_geom *ptrgeom=&geomdontuse;
1016 FTYPE vxm,vxp,vym,vyp;
1022 #pragma omp for schedule(OPENMPSCHEDULE(),OPENMPCHUNKSIZE(blocksize))
1049 bl_coord_ijk_2(i, j, k,
CENT, X, V);
1053 MACP0A1(pvort,i,j,k,whichpl) = (vyp-vym)/(2.0*
dx[1])/dxdxp[1][1];
1055 MACP0A1(pvort,i,j,k,whichpl) += -(vxp-vxm)/(2.0*
dx[2])/dxdxp[2][2];