12 static void set_grid_metrics_withsymmetrization(
void);
14 static void set_idxvol(
void);
15 static void symmetrize_connection(
void);
16 static void symmetrize_gcov(
void);
19 static void symmetrize_X_V_dxdxp_idxdxp(
void);
24 #define ATTEMPTSYMMETRIZATION 0
30 #if(NEWMETRICSTORAGE==1)
33 *localgcov=mygeom->gcov;
34 *localgcon=mygeom->gcon;
35 *localgcovpert=mygeom->gcovpert;
36 *localgdet=&(mygeom->gdet);
38 *localgdetvol=&(mygeom->gdetvol);
40 *localalphalapse=&(mygeom->alphalapse);
41 *localbetasqoalphasq=&(mygeom->betasqoalphasq);
42 *localbeta=mygeom->beta;
43 *localeomfunc=&(mygeom->EOMFUNCMAC(0));
53 int assignmetricstorage_old(
int loc,
int i,
int j,
int k,
FTYPE **localgcov,
FTYPE **localgcon,
FTYPE **localgcovpert,
FTYPE **localgdet,
FTYPE **localgdetvol,
FTYPE **localalphalapse,
FTYPE **localbetasqoalphasq,
FTYPE **localbeta,
FTYPE **localeomfunc)
55 #if(NEWMETRICSTORAGE==0)
69 #if(WHICHEOM!=WITHGDET)
83 int assignmetricstorage_oldlast(
int loc,
int i,
int j,
int k,
FTYPE **localgcov,
FTYPE **localgcon,
FTYPE **localgcovpert,
FTYPE **localgdet,
FTYPE **localgdetvol,
FTYPE **localalphalapse,
FTYPE **localbetasqoalphasq,
FTYPE **localbeta,
FTYPE **localeomfunc)
85 #if(NEWMETRICSTORAGE==0)
122 extern void set_rvsr(
void);
123 extern void control_time_store_metric(
int whichtime,
FTYPE *Cunew);
124 extern void set_drsing(
void);
125 extern void set_rvsr(
void);
126 extern int bound_spacetime_inside_horizon(
void);
127 extern int store_old_metric(
void);
138 control_time_store_metric(whichtime,Cunew);
142 if(whichtime==0 &&
dt==0.0){
161 trifprintf(
"set_drsing() START\n");
163 trifprintf(
"set_drsing() END\n");
164 trifprintf(
"drsing=%21.15g\n",
drsing);
169 trifprintf(
"Setting r(i)\n");
171 trifprintf(
"Done setting r(i)\n");
176 trifprintf(
"Will attempt to symmetrize coordinate/metric/connection type quantities\n");
185 #if(DOSTOREPOSITIONDATA)
186 trifprintf(
"set_position_stores() BEGIN\n");
189 trifprintf(
"set_position_stores() END\n");
190 #endif // end if DOSTOREPOSITIONDATA==1
205 if(whichtime==0) trifprintf(
"set_grid_metrics() BEGIN\n");
211 set_grid_metrics_withsymmetrization();
215 if(whichtime==0) trifprintf(
"set_grid_metrics() END\n");
225 trifprintf(
"set_connection() BEGIN\n");
227 trifprintf(
"set_connection() will take a while with CONNDERTYPE==DIFFNUMREC. Be patient ...\n");
231 if(whichtime==0) trifprintf(
"set_connection() END\n");
241 if(whichtime==0) trifprintf(
"set_idxvol() BEGIN\n");
243 if(whichtime==0) trifprintf(
"set_idxvol() END\n");
250 if(whichtime==0) trifprintf(
"bound_spacetime_inside_horizon() BEGIN\n");
251 bound_spacetime_inside_horizon();
252 if(whichtime==0) trifprintf(
"bound_spacetime_inside_horizon() END\n");
262 if(whichtime==0) trifprintf(
"store_old_metric() START\n");
263 trifprintf(
"Storing old metric initially\n");
265 if(whichtime==0) trifprintf(
"store_old_metric() END\n");
271 if(whichtime==0) trifprintf(
"set_tlab2ortho() BEGIN\n");
273 if(whichtime==0) trifprintf(
"set_tlab2ortho() END\n");
301 for (loc =
NPG - 1; loc >= 0; loc--) {
305 #pragma omp for schedule(OPENMPSCHEDULE(),OPENMPCHUNKSIZE(blocksize)) nowait
313 coord(i, j, k, loc, GLOBALMACP1A0(Xstore,loc,i,j,k));
323 #pragma omp parallel // no ucon or EOS stuff needed
330 for (loc =
NPG - 1; loc >= 0; loc--) {
333 #pragma omp for schedule(OPENMPSCHEDULE(),OPENMPCHUNKSIZE(blocksize)) nowait
339 #if(MCOORD==CARTMINKMETRIC)
347 bl_coord(GLOBALMACP1A0(Xstore,loc,i,j,k),GLOBALMACP1A0(Vstore,loc,i,j,k));
358 #pragma omp parallel // no ucon or EOS stuff needed
365 for (loc =
NPG - 1; loc >= 0; loc--) {
368 #pragma omp for schedule(OPENMPSCHEDULE(),OPENMPCHUNKSIZE(blocksize)) nowait
374 #if(MCOORD==CARTMINKMETRIC)
376 if(i!=0 || j!=0 || k!=0)
continue;
382 dxdxprim(GLOBALMACP1A0(Xstore,loc,i,j,k),GLOBALMACP1A0(Vstore,loc,i,j,k),
GLOBALMETMACP1A0(dxdxpstore,loc,i,j,k));
386 matrix_inverse(
PRIMECOORDS,
GLOBALMETMACP1A0(dxdxpstore,loc,i,j,k),
GLOBALMETMACP1A0(idxdxpstore,loc,i,j,k));
402 static void symmetrize_X_V_dxdxp_idxdxp(
void)
420 for (loc =
NPG - 1; loc >= 0; loc--) {
426 #pragma omp for schedule(OPENMPSCHEDULE(),OPENMPCHUNKSIZE(blocksize))
431 #if(MCOORD==CARTMINKMETRIC)
433 if(i!=0 || j!=0 || k!=0)
continue;
439 GLOBALMACP1A1(Vstore,loc,i,j,k,
TH)=M_PI-
GLOBALMACP1A1(Vstore,loc,i,
N2-j,k,
TH);
440 GLOBALMACP1A1(Xstore,loc,i,j,k,
TH)=
endx[
TH]-(
GLOBALMACP1A1(Xstore,loc,i,
N2-j,k,
TH)-
startx[
TH]);
449 #pragma omp for schedule(OPENMPSCHEDULE(),OPENMPCHUNKSIZE(blocksize))
454 #if(MCOORD==CARTMINKMETRIC)
456 if(i!=0 || j!=0 || k!=0)
continue;
461 GLOBALMACP1A1(Vstore,loc,i,j,k,
TH)=M_PI-
GLOBALMACP1A1(Vstore,loc,i,
N2-1-j,k,
TH);
462 GLOBALMACP1A1(Xstore,loc,i,j,k,
TH)=
endx[
TH]-(
GLOBALMACP1A1(Xstore,loc,i,
N2-1-j,k,
TH)-
startx[
TH]);
485 for (loc =
NPG - 1; loc >= 0; loc--) {
492 #pragma omp for schedule(OPENMPSCHEDULE(),OPENMPCHUNKSIZE(blocksize))
497 #if(MCOORD==CARTMINKMETRIC)
499 if(i!=0 || j!=0 || k!=0)
continue;
505 GLOBALMETMACP1A2(dxdxpstore,loc,i,j,k,jj,kk) =
GLOBALMETMACP1A2(dxdxpstore,loc,i,
N2-j,k,jj,kk);
506 GLOBALMETMACP1A2(idxdxpstore,loc,i,j,k,jj,kk) =
GLOBALMETMACP1A2(idxdxpstore,loc,i,
N2-j,k,jj,kk);
510 if(jj==2 && kk!=2 || jj!=2 && kk==2){
523 #pragma omp for schedule(OPENMPSCHEDULE(),OPENMPCHUNKSIZE(blocksize))
528 #if(MCOORD==CARTMINKMETRIC)
530 if(i!=0 || j!=0 || k!=0)
continue;
535 GLOBALMETMACP1A2(dxdxpstore,loc,i,j,k,jj,kk) =
GLOBALMETMACP1A2(dxdxpstore,loc,i,
N2-1-j,k,jj,kk);
536 GLOBALMETMACP1A2(idxdxpstore,loc,i,j,k,jj,kk) =
GLOBALMETMACP1A2(idxdxpstore,loc,i,
N2-1-j,k,jj,kk);
540 if(jj==2 && kk!=2 || jj!=2 && kk==2){
596 struct of_geom *ptrgeom=&geomdontuse;
597 struct of_geom geomdontusetest;
598 struct of_geom *ptrgeomtest=&geomdontusetest;
603 void assign_eomfunc(
struct of_geom *geom,
FTYPE *EOMFUNCNAME);
611 #pragma omp for schedule(OPENMPSCHEDULE(),OPENMPCHUNKSIZE(blocksize))
616 #if(MCOORD==CARTMINKMETRIC)
618 if(i!=0 || j!=0 || k!=0)
continue;
622 for (loc =
NPG - 1; loc >= 0; loc--) {
624 bl_coord_ijk_2(i,j,k,loc,X, V);
642 if(debugfail>=2) dualfprintf(
fail_file,
"Caught gdet_func_metric() problem in set_grid.c:set_grid_metrics() i=%d j=%d k=%d\n",i,j,k);
645 #if(WHICHEOM!=WITHGDET)
647 eomfunc_func(ptrgeom,1,
MCOORD,X,localeomfunc);
651 beta_func(ptrgeom,1,
MCOORD,X,localgcov,localgcon,*localalphalapse,localbeta);
654 gdetvol_func(ptrgeom,localgdet,localeomfunc,localgdetvol);
658 #if(NEWMETRICSTORAGE)
675 GLOBALMETMACP0A1(gdetgeom,i,j,k,loc).gdet=
GLOBALMETMACP1A0(gdetgeomnormal,loc,i,j,k).gdet=
GLOBALMETMACP1A0(compgeom,loc,i,j,k).gdet;
678 GLOBALMETMACP0A1(gdetgeom,i,j,k,loc).igdetnosing=
GLOBALMETMACP1A0(gdetgeomnormal,loc,i,j,k).igdetnosing=
GLOBALMETMACP1A0(compgeom,loc,i,j,k).igdetnosing;
682 GLOBALMETMACP0A1(gdetgeom,i,j,k,loc).EOMFUNCMAC(pl)=
GLOBALMETMACP1A0(gdetgeomnormal,loc,i,j,k).EOMFUNCMAC(pl)=
GLOBALMETMACP1A0(compgeom,loc,i,j,k).EOMFUNCMAC(pl);
683 GLOBALMETMACP0A1(gdetgeom,i,j,k,loc).IEOMFUNCNOSINGMAC(pl)=
GLOBALMETMACP1A0(gdetgeomnormal,loc,i,j,k).IEOMFUNCNOSINGMAC(pl)=
GLOBALMETMACP1A0(compgeom,loc,i,j,k).IEOMFUNCNOSINGMAC(pl);
711 static void set_grid_metrics_withsymmetrization(
void)
749 struct of_geom *ptrgeom=&geomdontuse;
759 #pragma omp for schedule(OPENMPSCHEDULE(),OPENMPCHUNKSIZE(blocksize))
764 #if(MCOORD==CARTMINKMETRIC)
766 if(i!=0 || j!=0 || k!=0)
continue;
770 for (loc =
NPG - 1; loc >= 0; loc--) {
772 bl_coord_ijk_2(i,j,k,loc,X, V);
789 if(debugfail>=2) dualfprintf(
fail_file,
"Caught gdet_func_metric() problem in set_grid.c:set_grid_metrics_gcov() i=%d j=%d k=%d gcovtt=%21.15g gcovperttt=%21.15g\n",i,j,k,localgcov[
GIND(
TT,
TT)],localgcovpert[
TT]);
818 struct of_geom *ptrgeom=&geomdontuse;
819 struct of_geom geomdontusetest;
820 struct of_geom *ptrgeomtest=&geomdontusetest;
825 void assign_eomfunc(
struct of_geom *geom,
FTYPE *EOMFUNCNAME);
833 #pragma omp for schedule(OPENMPSCHEDULE(),OPENMPCHUNKSIZE(blocksize))
838 #if(MCOORD==CARTMINKMETRIC)
840 if(i!=0 || j!=0 || k!=0)
continue;
844 for (loc =
NPG - 1; loc >= 0; loc--) {
846 bl_coord_ijk_2(i,j,k,loc,X, V);
863 #if(WHICHEOM!=WITHGDET)
864 eomfunc_func(ptrgeom,1,
MCOORD,X,localeomfunc);
868 beta_func(ptrgeom,1,
MCOORD,X,localgcov,localgcon,*localalphalapse,localbeta);
871 gdetvol_func(ptrgeom,localgdet,localeomfunc,localgdetvol);
875 #if(NEWMETRICSTORAGE)
890 GLOBALMETMACP0A1(gdetgeom,i,j,k,loc).gdet=
GLOBALMETMACP1A0(gdetgeomnormal,loc,i,j,k).gdet=
GLOBALMETMACP1A0(compgeom,loc,i,j,k).gdet;
893 GLOBALMETMACP0A1(gdetgeom,i,j,k,loc).igdetnosing=
GLOBALMETMACP1A0(gdetgeomnormal,loc,i,j,k).igdetnosing=
GLOBALMETMACP1A0(compgeom,loc,i,j,k).igdetnosing;
897 GLOBALMETMACP0A1(gdetgeom,i,j,k,loc).EOMFUNCMAC(pl)=
GLOBALMETMACP1A0(gdetgeomnormal,loc,i,j,k).EOMFUNCMAC(pl)=
GLOBALMETMACP1A0(compgeom,loc,i,j,k).EOMFUNCMAC(pl);
898 GLOBALMETMACP0A1(gdetgeom,i,j,k,loc).IEOMFUNCNOSINGMAC(pl)=
GLOBALMETMACP1A0(gdetgeomnormal,loc,i,j,k).IEOMFUNCNOSINGMAC(pl)=
GLOBALMETMACP1A0(compgeom,loc,i,j,k).IEOMFUNCNOSINGMAC(pl);
932 dualfprintf(
fail_file,
"i=%d j=%d beta[PH]=%21.15g\n",i,j,ptrgeomtest->beta[
PH]);
952 static void symmetrize_gcov(
void)
956 #if(NEWMETRICSTORAGE==1)
970 for (loc =
NPG - 1; loc >= 0; loc--) {
977 #pragma omp for schedule(OPENMPSCHEDULE(),OPENMPCHUNKSIZE(blocksize))
982 #if(MCOORD==CARTMINKMETRIC)
984 if(i!=0 || j!=0 || k!=0)
continue;
989 DLOOP(jj,kk)
GLOBALMETMACP1A0(compgeom,loc,i,j,k).
gcov[
GIND(jj,kk)] =
GLOBALMETMACP1A0(compgeom,loc,i,
N2-j,k).
gcov[
GIND(jj,kk)];
991 for(jj=0;jj<
NDIM;jj++){
992 for(kk=0;kk<=jj;kk++){
993 if(jj==2 && kk!=2 || jj!=2 && kk==2){
1008 #pragma omp for schedule(OPENMPSCHEDULE(),OPENMPCHUNKSIZE(blocksize))
1013 #if(MCOORD==CARTMINKMETRIC)
1015 if(i!=0 || j!=0 || k!=0)
continue;
1020 DLOOP(jj,kk)
GLOBALMETMACP1A0(compgeom,loc,i,j,k).
gcov[
GIND(jj,kk)] =
GLOBALMETMACP1A0(compgeom,loc,i,
N2-1-j,k).
gcov[
GIND(jj,kk)];
1022 for(jj=0;jj<
NDIM;jj++){
1023 for(kk=0;kk<=jj;kk++){
1024 if(jj==2 && kk!=2 || jj!=2 && kk==2){
1058 #pragma omp parallel
1063 struct of_geom *ptrgeom=&geomdontuse;
1065 int dim1, dim2, dim3;
1070 #pragma omp for schedule(OPENMPSCHEDULE(),OPENMPCHUNKSIZE(blocksize))
1075 #if(MCOORD==CARTMINKMETRIC)
1077 if(i!=0 || j!=0 || k!=0)
continue;
1081 #if( CONNAXISYMM == 1 )
1083 if( k != 0 )
continue;
1092 conn_func(
MCOORD,X, ptrgeom,
GLOBALMETMAC(
conn,i,j,k),
GLOBALMETMAC(conn2,i,j,k));
1102 struct of_geom *ptrgeomf1=&geomf1dontuse;
1104 struct of_geom *ptrgeomf2=&geomf2dontuse;
1111 FTYPE shouldbe = (ptrgeomf2->gdet - ptrgeomf1->gdet)/
dx[1]/(ptrgeom->gdet);
1116 FTYPE diffbe = fabs(shouldbe-isbe)/(fabs(shouldbe)+fabs(isbe)+
SMALL);
1119 dualfprintf(
fail_file,
"Connection will lead to errors in constant pressure regions: dir=%d i=%d j=%d k=%d : %21.15g %21.15g : %21.15g\n",1,i,j,k,shouldbe,isbe,diffbe);
1127 FTYPE shouldbe = (ptrgeomf2->gdet - ptrgeomf1->gdet)/
dx[2]/(ptrgeom->gdet);
1132 FTYPE diffbe = fabs(shouldbe-isbe)/(fabs(shouldbe)+fabs(isbe)+
SMALL);
1135 dualfprintf(
fail_file,
"Connection will lead to errors in constant pressure regions: dir=%d i=%d j=%d k=%d : %21.15g %21.15g : %21.15g\n",2,i,j,k,shouldbe,isbe,diffbe);
1147 #if( CONNAXISYMM == 1 )
1149 #pragma omp parallel
1154 struct of_geom *ptrgeom=&geomdontuse;
1156 int dim1, dim2, dim3;
1161 #pragma omp for schedule(OPENMPSCHEDULE(),OPENMPCHUNKSIZE(blocksize))
1164 if( k == 0 )
continue;
1166 for( dim1 = 0; dim1 <
NDIM; dim1++ ) {
1167 for( dim2 = 0; dim2 <
NDIM; dim2++ ) {
1168 for( dim3 = 0; dim3 <
NDIM; dim3++ ) {
1173 for( dim1 = 0; dim1 <
NDIM; dim1++ ) {
1187 static void symmetrize_connection(
void)
1194 #pragma omp parallel
1201 #pragma omp for schedule(OPENMPSCHEDULE(),OPENMPCHUNKSIZE(blocksize))
1206 #if(MCOORD==CARTMINKMETRIC)
1208 if(i!=0 || j!=0 || k!=0)
continue;
1213 DLOOP(jj,kk)
DLOOPA(pp)
GLOBALMETMACP0A3(
conn,i,j,k,jj,kk,pp) =
GLOBALMETMACP0A3(conn,i,
N2-1-j,k,jj,kk,pp);
1215 if(jj==2 && kk!=2 && pp!=2 || jj!=2 && kk==2 && pp!=2 || jj!=2 && kk!=2 && pp==2 || jj==2 && kk==2 && pp==2){
1237 static void set_idxvol(
void)
1241 #pragma omp parallel
1247 #pragma omp for schedule(OPENMPSCHEDULE(),OPENMPCHUNKSIZE(blocksize))
1252 #if(MCOORD==CARTMINKMETRIC)
1254 if(i!=0 || j!=0 || k!=0)
continue;
1259 mks_unitheta_idxvol_func(i,j,k,
GLOBALMETMAC(idxvol,i,j,k));
1283 struct of_geom *ptrgeom=&geomdontuse;
1286 #pragma omp parallel
1292 #pragma omp for schedule(OPENMPSCHEDULE(),OPENMPCHUNKSIZE(blocksize))
1297 #if(MCOORD==CARTMINKMETRIC)
1299 if(i!=0 || j!=0 || k!=0)
continue;
1304 calc_ORTHOes(primcoord, ptrgeom,
GLOBALMETMACP2A0(tlab2ortho,ll,
LAB2ORTHO,i,j,k),
GLOBALMETMACP2A0(tlab2ortho,ll,
ORTHO2LAB,i,j,k));