9 #define DIAGREPORT {trifprintf("t=%21.15g to do: tener=%21.15g (dt=%21.15g): dump_cnt=%ld @ t=%21.15g (dt=%21.15g) : avg_cnt=%ld @ t=%21.15g (dt=%21.15g) : debug_cnt=%ld @ t=%21.15g (dt=%21.15g) : image_cnt=%ld @ t=%21.15g (dt=%21.15g): restart=%d @ nstep=%ld (dt=%ld) dtfake=%ld\n",t,tdumpgen[ENERDUMPTYPE],DTdumpgen[ENERDUMPTYPE],dumpcntgen[MAINDUMPTYPE],tdumpgen[MAINDUMPTYPE],DTdumpgen[MAINDUMPTYPE],dumpcntgen[AVG1DUMPTYPE],tdumpgen[AVG1DUMPTYPE],DTdumpgen[AVG1DUMPTYPE],dumpcntgen[DEBUGDUMPTYPE],tdumpgen[DEBUGDUMPTYPE],DTdumpgen[DEBUGDUMPTYPE],dumpcntgen[IMAGEDUMPTYPE],tdumpgen[IMAGEDUMPTYPE],DTdumpgen[IMAGEDUMPTYPE],whichrestart,nrestart,DTr,DTfake);}
13 static int get_dodumps(
int call_code,
int firsttime,
SFTYPE localt,
long localnstep,
long localrealnstep,
FTYPE *tdumpgen,
FTYPE *tlastgen,
FTYPE tlastareamap
14 ,
long long int nlastrestart,
long long int nrestart
15 ,
long long int nlastfake,
long long int nfake
16 ,
int *doareamap,
int *dodumpgen);
18 ,
int whichrestart,
long long int restartc,
long long int localrealnstep,
long long int nrestart,
long DTr,
long long int nlastrestart
19 ,
int whichfakevar,
long long int fakec,
long long int nfake,
long DTfakevar,
long long int nlastfake
22 ,
long *restartsteps,
int *
whichrestart,
long long int *restartc,
long localrealnstep,
long long int *nrestart,
long DTr,
long long int *nlastrestart
23 ,
long *
fakesteps,
int *whichfakevar,
long long int *fakec,
long long int *nfake,
long DTfakevar,
long long int *nlastfake
29 int diag(
int call_code,
FTYPE localt,
long localnstep,
long localrealnstep)
35 static int firsttime = 1;
37 FTYPE asym[NPR], norm[NPR], maxasym[NPR];
41 static SFTYPE tlastareamap;
46 static long long int restartc;
47 static long long int nlastrestart,nrestart;
49 static long long int fakec;
50 static long long int nlastfake,nfake;
56 int dir,interpi,enodebugi;
59 int enodebugdump(
long dump_cnt);
104 if(USEMPI &&
USEROMIO==1 && MPIVERSION==2){
122 if ((call_code ==
INIT_OUT) || (firsttime == 1)) {
125 nlastrestart = (long) (
DTr*(
SFTYPE)((localrealnstep/
DTr))-1);
127 tlastareamap = localt-
SMALL;
141 tdumpgen[dtloop]=localt;
145 nrestart = localnstep;
164 nrestart = (long)(
DTr*(
SFTYPE)((localrealnstep/
DTr)+1));
185 get_dodumps(call_code, firsttime, localt, localnstep, localrealnstep, tdumpgen, tlastgen, tlastareamap, nlastrestart, nrestart, nlastfake, nfake, &doareamap, dodumpgen);
293 dump_ener(dodumpgen[ENERDUMPTYPE],dodumpgen[RESTARTDUMPTYPE],call_code);
312 dumpcgen[whichDT] = 1 +
MAX(0,(
long long int)((localt-tdumpgen[whichDT])/
DTdumpgen[whichDT]));
339 if(dodumpgen[dumptypeiter2]){
342 long int dumpcntmain;
353 restart_write(-(
long)dumpcntmain-1);
365 long int dumpcntmain;
367 for(dumptypeiter=0;dumptypeiter<
NUMDUMPTYPES;dumptypeiter++){
369 if(dodumpgen[dumptypeiter]&&dumpfuncgen[dumptypeiter]!=NULL){
377 if((*(dumpfuncgen[dumptypeiter]))(
dumpcntgen[dumptypeiter]) >= 1){
385 ,restartsteps, &
whichrestart, &restartc, localrealnstep, &nrestart,
DTr, &nlastrestart
435 #pragma omp parallel // need no global non-arrays
440 if(dodumpgen[ENERDUMPTYPE]){
442 #pragma omp for schedule(OPENMPSCHEDULE(),OPENMPCHUNKSIZE(blocksize)) nowait
454 #pragma omp for schedule(OPENMPSCHEDULE(),OPENMPCHUNKSIZE(blocksize)) nowait
464 #pragma omp for schedule(OPENMPSCHEDULE(),OPENMPCHUNKSIZE(blocksize)) nowait
479 if(dir<=2 && pl<=
U2){
480 GLOBALMACP0A4(enodebugarray,i,j,k,dir-1,interpi,pl,enodebugi)=0;
489 if(dodumpgen[MAINDUMPTYPE]){
494 GLOBALMACP0A1(dissfunpos,i,j,k,dissloop)=0.0;
551 int whichDT,
FTYPE tt,
FTYPE localt,
FTYPE *DTdumpgenvar,
long int *dumpcntgenvar,
long long int *dumpcgen,
FTYPE *tdumpgen, FILE **dumpcnt_filegen,
FTYPE *tlastgen
552 ,
int whichrestartvar,
long long int restartc,
long long int localrealnstep,
long long int nrestart,
long DTrvar,
long long int nlastrestart
553 ,
int whichfakevar,
long long int fakec,
long long int nfake,
long DTfakevar,
long long int nlastfake
560 trifprintf(
"dumping: restart: %d localnstep: %ld nlastrestart: %ld nrestart: %ld restartc: %d\n", whichrestartvar,localrealnstep,nlastrestart,nrestart,restartc);
563 trifprintf(
"dumping: dump_cnt=%ld : tt=%21.15g tlastdump=%21.15g tdump=%21.15g dumpc=%d\n", dumpcntgenvar[whichDT],localt,tlastgen[whichDT],tdumpgen[whichDT],dumpcgen[whichDT]);
572 int whichDT,
FTYPE localt,
FTYPE *DTdumpgenvar,
long int *dumpcntgenvar,
long long int *dumpcgen,
FTYPE *tdumpgen, FILE **dumpcnt_filegen,
FTYPE *tlastgen
573 ,
long *restartstepsvar,
int *whichrestartvar,
long long int *restartc,
long localrealnstep,
long long int *nrestart,
long DTrvar,
long long int *nlastrestart
574 ,
long *fakestepsvar,
int *whichfakevar,
long long int *fakec,
long long int *nfake,
long DTfakevar,
long long int *nlastfake
586 restartstepsvar[*whichrestartvar] = localrealnstep;
587 *whichrestartvar = !(*whichrestartvar);
590 dumpcntgenvar[whichDT]=(
long int)(*whichrestartvar);
594 *nlastrestart=localrealnstep;
597 fakestepsvar[*whichfakevar] = localrealnstep;
598 *whichfakevar = !(*whichfakevar);
601 dumpcntgenvar[whichDT]=(
long int)(*whichfakevar);
603 *fakec = 1 +
MAX(0,(
long long int)(((
FTYPE)localrealnstep-(
FTYPE)(*nfake))/((
FTYPE)DTfakevar)));
605 *nlastfake=localrealnstep;
610 dumpcntgenvar[whichDT]++;
612 dumpcgen[whichDT] = 1 +
MAX(0,(
long long int)((localt-tdumpgen[whichDT])/DTdumpgenvar[whichDT]));
613 tdumpgen[whichDT] = (
ROUND2LONGLONGINT(tdumpgen[whichDT]/DTdumpgenvar[whichDT]) + dumpcgen[whichDT])*DTdumpgenvar[whichDT];
616 sprintf(temps,
"dumps/0_num%d_%s_dumps.dat",whichDT,
dumpnamelist[whichDT]);
617 sprintf(temps2,
"error opening %d %s dump count file\n",whichDT,
dumpnamelist[whichDT]);
618 sprintf(temps3,
"Couldn't close %d %s dumpcnt_file",whichDT,
dumpnamelist[whichDT]);
620 myfopen(temps,
"w",temps2,&dumpcnt_filegen[whichDT]);
621 myfprintf(dumpcnt_filegen[whichDT],
"# Number of %d %s dumps\n%ld\n",whichDT,
dumpnamelist[whichDT],dumpcntgenvar[whichDT]);
622 myfclose(&dumpcnt_filegen[whichDT],temps3);
623 tlastgen[whichDT]=localt;
631 static int get_dodumps(
int call_code,
int firsttime,
SFTYPE localt,
long localnstep,
long localrealnstep,
FTYPE *tdumpgen,
FTYPE *tlastgen,
FTYPE tlastareamap,
long long int nlastrestart,
long long int nrestart,
long long int nlastfake,
long long int nfake,
int *doareamap,
int *dodumpgen)
800 if((USEMPI &&
USEROMIO==1 && MPIVERSION==2)&&( ((nlastfake!=nfake)&&(
failed == 0) && (localrealnstep >= nfake ))||(call_code==
FINAL_OUT) ) ){
855 dualfprintf(
fail_file,
"ASYM in RHO %d %d %d : %23.16g %23.16g\n",i,j,k,
MACP0A1(prim,i,j,k,
RHO),
MACP0A1(prim,j,i,k,
RHO));
859 dualfprintf(
fail_file,
"ASYM in UU %d %d %d : %23.16g %23.16g\n",i,j,k,
MACP0A1(prim,i,j,k,
UU),
MACP0A1(prim,j,i,k,
UU));
864 dualfprintf(
fail_file,
"ASYM in U1 %d %d %d : %23.16g %23.16g\n",i,j,k,
MACP0A1(prim,i,j,k,
U1),
MACP0A1(prim,j,i,k,
U2));
872 if(i<
N1/2 && j<
N2/2 && k<
N3/2){
875 dualfprintf(
fail_file,
"ASYM nstep=%ld steppart=%d in pl=%d dir=1 :: %d %d %d : %23.16g %23.16g\n",
nstep,
steppart,pl,i,j,k,
MACP0A1(prim,i,j,k,pl),
MACP0A1(prim,i+
N1,j,k,pl));
878 dualfprintf(
fail_file,
"ASYM nstep=%ld steppart=%d in pl=%d dir=2 :: %d %d %d : %23.16g %23.16g\n",
nstep,
steppart,pl,i,j,k,
MACP0A1(prim,i,j,k,pl),
MACP0A1(prim,i,j+
N2,k,pl));
886 if(i<
N1/2 && j<
N2/2 && k<
N3/2){
888 if(GLOBALMACP0A1(udump,i,j,k,pl)!=GLOBALMACP0A1(udump,i+
N1,j,k,pl)){
889 dualfprintf(
fail_file,
"ASYMUDUMP nstep=%ld steppart=%d in pl=%d dir=1 :: %d %d %d : %23.16g %23.16g\n",
nstep,
steppart,pl,i,j,k,GLOBALMACP0A1(udump,i,j,k,pl),GLOBALMACP0A1(udump,i+
N1,j,k,pl));
891 if(GLOBALMACP0A1(udump,i,j,k,pl)!=GLOBALMACP0A1(udump,i,j+
N2,k,pl)){
892 dualfprintf(
fail_file,
"ASYMUDUMP nstep=%ld steppart=%d in pl=%d dir=2 :: %d %d %d : %23.16g %23.16g\n",
nstep,
steppart,pl,i,j,k,GLOBALMACP0A1(udump,i,j,k,pl),GLOBALMACP0A1(udump,i,j+
N2,k,pl));
916 dualfprintf(
fail_file,
"ASYM in RHO %d %d %d : %23.16g %23.16g\n",i,j,k,
MACP0A1(prim,i,j,k,
RHO),
MACP0A1(prim,j,i,k,
RHO));
920 dualfprintf(
fail_file,
"ASYM in UU %d %d %d : %23.16g %23.16g\n",i,j,k,
MACP0A1(prim,i,j,k,
UU),
MACP0A1(prim,j,i,k,
UU));
925 dualfprintf(
fail_file,
"ASYM in U1 %d %d %d : %23.16g %23.16g\n",i,j,k,
MACP0A1(prim,i,j,k,
U1),
MACP0A1(prim,j,i,k,
U2));
933 if(i<
N1/2 && j<
N2/2 && k<
N3/2){
936 dualfprintf(
fail_file,
"ASYM nstep=%ld steppart=%d in pl=%d dir=1 :: %d %d %d : %23.16g %23.16g\n",
nstep,
steppart,pl,i,j,k,
MACP0A1(prim,i,j,k,pl),
MACP0A1(prim,i+
N1,j,k,pl));
939 dualfprintf(
fail_file,
"ASYM nstep=%ld steppart=%d in pl=%d dir=2 :: %d %d %d : %23.16g %23.16g\n",
nstep,
steppart,pl,i,j,k,
MACP0A1(prim,i,j,k,pl),
MACP0A1(prim,i,j+
N2,k,pl));
960 FTYPE vmin1, vmax1, vmin2, vmax2;
968 int lowersizex1,uppersizex1;
969 int lowersizex2,uppersizex2;
970 int lowersizex3,uppersizex3;
972 static FILE* fileptr;
973 static int firsttime=1;
975 static int doclose=0;
977 struct of_geom *ptrgeom=&geomdontuse;
981 trifprintf(
"\nStart area_map function ... ");
986 else lowersizex1=size/2;
988 else uppersizex1=size/2;
991 else lowersizex2=size/2;
993 else uppersizex2=size/2;
996 else lowersizex3=size/2;
998 else uppersizex3=size/2;
1003 if((fileptr=fopen(
"areamap",
"wt"))==NULL){
1004 dualfprintf(
fail_file,
"Cannot open ./areamap on proc=%d\n",myid);
1026 dualfprintf(
fail_file,
"variable %d \n", pl);
1030 for(l=i-lowersizex1;l<=i+uppersizex1;l++){
1035 for(m=j-lowersizex2;m<=j+uppersizex2;m++){
1037 dualfprintf(
fail_file,
"j = %d \t ",mm);
1038 for(l=i-lowersizex1;l<=i+uppersizex1;l++){
1049 fprintf(fileptr,
"%21.15g %lld %lld %lld %21.15g %21.15g %21.15g %21.15g %21.15g %21.15g %d %d %d %d %d %d %21.15g %21.15g %21.15g %21.15g %21.15g %21.15g\n",
1050 t,
totalsize[1],
totalsize[2],
totalsize[3],
startx[1],
startx[2],
startx[3],
dx[1],
dx[2],
dx[3],lowersizex1,uppersizex1,lowersizex2,uppersizex2,
startpos[1]+i,
startpos[2]+j,
gam,
a,
R0,
Rin,
Rout,
hslope);
1053 for(m=j-size/2;m<=j+size/2;m++){
1056 for(l=i-size/2;l<=i+size/2;l++){
1061 bl_coord_ijk_2(l, m, k, loc, X,V);
1066 if (
vchar_all(
MAC(prim,l,m,k), &q, 1, ptrgeom, &vmax1, &vmin1,&ignorecourant) >= 1)
1067 FAILSTATEMENT(
"diag.c:areamap()",
"vchar_all() dir=1or2", 1);
1068 if (
vchar_all(
MAC(prim,l,m,k), &q, 2, ptrgeom, &vmax2, &vmin2,&ignorecourant) >= 1)
1069 FAILSTATEMENT(
"diag.c:areamap()",
"vchar_all() dir=1or2", 2);
1082 "%21.15g %21.15g %21.15g %21.15g %21.15g %21.15g %21.15g %21.15g "
1084 "%21.15g %21.15g %21.15g %21.15g "
1085 "%21.15g %21.15g %21.15g %21.15g "
1086 "%21.15g %21.15g %21.15g %21.15g "
1087 "%21.15g %21.15g %21.15g %21.15g "
1088 "%21.15g %21.15g %21.15g %21.15g "
1107 vmin1,vmax1,vmin2,vmax2,
1115 if(doclose)
if(fileptr!=NULL) fclose(fileptr);
1121 trifprintf(
"end area_map function.\n");
1129 #define JETBSQORHO (3.162)
1137 int i,
j, k, pl, pliter, l, dir,fl,enerregion;
1138 SFTYPE surface,mysurface,surf2;
1141 int start1,start2,start3,stop1,stop2,stop3;
1145 FTYPE ftemp0,ftemp1,ftemp2,ftemp3,ftemp4,ftemp5,ftemp6;
1146 FTYPE pgas,bsq,bsqorho;
1152 FTYPE Ftemp[NPR],Ftempdiag[NPR];
1155 int *localdoflux, *localenerpos;
1156 SFTYPE (*localpcum)[NPR];
1157 SFTYPE (*localpdot)[NPR];
1160 struct of_geom *ptrgeom=&geomdontuse;
1172 localpcum=
pcumreg[enerregion];
1173 localpdot=
pdotreg[enerregion];
1177 localpdot[dir][pl]=0;
1181 if (localdoflux[dir] >= 0) {
1190 surface =
dx[2]*
dx[3];
1192 start1=stop1=localdoflux[dir];
1194 start2=localenerpos[
X2DN];
1195 stop2=localenerpos[
X2UP];
1197 start3=localenerpos[
X3DN];
1198 stop3=localenerpos[
X3UP];
1206 surface =
dx[1]*
dx[3];
1208 start2=stop2=localdoflux[dir];
1210 start1=localenerpos[
X1DN];
1211 stop1=localenerpos[
X1UP];
1213 start3=localenerpos[
X3DN];
1214 stop3=localenerpos[
X3UP];
1222 surface =
dx[1]*
dx[2];
1224 start3=stop3=localdoflux[dir];
1226 start1=localenerpos[
X1DN];
1227 stop1=localenerpos[
X1UP];
1229 start2=localenerpos[
X2DN];
1230 stop2=localenerpos[
X2UP];
1237 dualfprintf(
fail_file,
"no such direction: %d\n",dir);
1243 localpdot[dir][pl]=0;
1246 GENLOOP(i,j,k,start1,stop1,start2,stop2,start3,stop3){
1267 mysurface = surface /(q.ucov[
TT]);
1269 else mysurface = surface;
1284 UtoU_evolve2diag(
UEVOLVE,
UDIAG,ptrgeom,Ftemp,Ftempdiag);
1292 localpdot[dir][pl] += Ftempdiag[pl];
1300 localpdot[dir][
UU] += Ftempdiag[
RHO];
1315 PDIAGLOOP(pl) localpcum[dir][pl]+=localpdot[dir][pl]*Dt;
1323 surface =
dx[2]*
dx[3];
1328 for(j=0;j<
N2;j++) for(k=0;k<
N3;k++){
1333 UtoU_evolve2diag(UEVOLVE,UDIAG,ptrgeom,Ftemp,Ftempdiag);
1358 #define JETBSQORHO (3.162)
1366 int i,
j, k, pl, pliter, l, dir,fl,enerregion;
1367 SFTYPE surface,mysurface,surf2;
1369 int start1,start2,start3,stop1,stop2,stop3;
1373 FTYPE ftemp0,ftemp1,ftemp2,ftemp3,ftemp4,ftemp5,ftemp6;
1374 FTYPE pgas,bsq,bsqorho;
1380 FTYPE Ftemp[NPR],Ftempdiag[NPR];
1383 int *localdoflux, *localenerpos;
1386 struct of_geom *ptrgeom=&geomdontuse;
1402 FLLOOP(fl) localpdotterms[dir][fl][pl]=0;
1407 if (localdoflux[dir] >= 0) {
1416 surface = dx[2]*dx[3];
1418 start1=stop1=localdoflux[dir];
1420 start2=localenerpos[
X2DN];
1421 stop2=localenerpos[
X2UP];
1423 start3=localenerpos[
X3DN];
1424 stop3=localenerpos[
X3UP];
1431 surface = dx[1]*dx[3];
1433 start2=stop2=localdoflux[dir];
1435 start1=localenerpos[
X1DN];
1436 stop1=localenerpos[
X1UP];
1438 start3=localenerpos[
X3DN];
1439 stop3=localenerpos[
X3UP];
1446 surface = dx[1]*dx[2];
1448 start3=stop3=localdoflux[dir];
1450 start1=localenerpos[
X1DN];
1451 stop1=localenerpos[
X1UP];
1453 start2=localenerpos[
X2DN];
1454 stop2=localenerpos[
X2UP];
1460 dualfprintf(
fail_file,
"no such direction: %d\n",dir);
1466 FLLOOP(fl) localpdotterms[dir][fl][pl]=0;
1470 GENLOOP(i,j,k,start1,stop1,start2,stop2,start3,stop3){
1499 for (l = 0; l <
NDIM; l++)
1501 for (l = 0; l <
NDIM; l++)
1503 for (l = 0; l <
NDIM; l++)
1505 for (l = 0; l <
NDIM; l++)
1512 pgas = pressure_rho0_u_simple(i,j,k,loc,pr[
RHO],pr[
UU]);
1513 bsq=0;
for(l=0;l<
NDIM;l++) bsq+=(q.
bcon[l])*(q.
bcov[l]);
1521 mysurface = surface /(q.
ucov[
TT]);
1523 else mysurface = surface;
1543 bsqorho=bsq/pr[
RHO];
1552 condjet2=((q.
ucon[1]>0.0)&&(-q.
ucov[0]-1.0>0.0));
1561 surgdet=(ptrgeom->gdet)*mysurface;
1566 ftemp0=pr[pl]*(q.
ucon[fluxdir])*surgdet;
1567 localpdotterms[dir][0][pl]+=ftemp0;
1572 else if((pl>=UU)&&(pl<=
U3)){
1575 ftemp0=pgas*(q.
ucon[fluxdir])*(q.
ucov[l])*surgdet;
1576 localpdotterms[dir][0][pl]+=ftemp0;
1580 localpdotterms[dir][1][pl]+=ftemp1;
1585 localpdotterms[dir][2][pl]+=ftemp2;
1589 ftemp3=bsq*(q.
ucon[fluxdir])*(q.
ucov[l])*surgdet;
1590 localpdotterms[dir][3][pl]+=ftemp3;
1594 ftemp4=pgas*
delta(fluxdir,pl-UU)*surgdet;
1595 localpdotterms[dir][4][pl]+=ftemp4;
1599 ftemp5=0.5*bsq*
delta(fluxdir,pl-UU)*surgdet;
1600 localpdotterms[dir][5][pl]+=ftemp5;
1604 ftemp6=-(q.
bcon[fluxdir])*(q.
bcov[l])*surgdet;
1605 localpdotterms[dir][6][pl]+=ftemp6;
1610 ftemp0=(q.
bcon[1])*(q.
ucon[fluxdir])*surgdet;
1611 localpdotterms[dir][0][pl]+=ftemp0;
1615 ftemp1=-(q.
bcon[fluxdir])*(q.
ucon[1])*surgdet;
1616 localpdotterms[dir][1][pl]+=ftemp1;
1621 ftemp0=(q.
bcon[2])*(q.
ucon[fluxdir])*surgdet;
1622 localpdotterms[dir][0][pl]+=ftemp0;
1626 ftemp1=-(q.
bcon[fluxdir])*(q.
ucon[2])*surgdet;
1627 localpdotterms[dir][1][pl]+=ftemp1;
1632 ftemp0=(q.
bcon[3])*(q.
ucon[fluxdir])*surgdet;
1633 localpdotterms[dir][0][pl]+=ftemp0;
1636 ftemp1=-(q.
bcon[fluxdir])*(q.
ucon[3])*surgdet;
1637 localpdotterms[dir][1][pl]+=ftemp1;
1656 #define DEBUGFRLOOP 1
1662 int i,
j,k,pl,pliter,l;
1665 MPI_Request rrequest;
1666 MPI_Request srequest;
1672 static int firsttime=1;
1682 dualfprintf(
fail_file,
"Cannot get frtot memory\n");
1694 frdottemp[
i][pl]=
frdot[
i][pl];
1698 MPI_Irecv(frdottemp,N1*NPR,MPI_SFTYPE,MPIid[l],
TAGSTARTFRDOT + l, MPI_COMM_GRMHD,&rrequest);
1699 MPI_Wait(&rrequest,&mpichstatus);
1702 frtot[(ospos1+
i)*NPR+pl]+=frdottemp[i][pl];
1704 if((ospos1+i)*NPR+pl>=
totalsize[1]*NPR){
1705 dualfprintf(
fail_file,
"outside bounds: %d\n",(ospos1+i)*NPR+pl);
1713 MPI_Isend(
frdot,N1*NPR,MPI_SFTYPE,MPIid[0],
TAGSTARTFRDOT + myid, MPI_COMM_GRMHD,&srequest);
1714 MPI_Wait(&srequest,&mpichstatus);
1721 frout=fopen(
"frdot.out",
"at");
1723 dualfprintf(
fail_file,
"Cannot open frdot.out\n");
1727 fprintf(frout,
"%21.15g %ld %lld %lld %lld %21.15g %21.15g %21.15g %21.15g %21.15g %21.15g\n",
1728 t,
realnstep,
totalsize[1],
totalsize[2],
totalsize[3],
startx[1],
startx[2],
startx[3],dx[1],dx[2],dx[3]);
1733 fprintf(frout,
"%21.15g %d ",
t,i);
1735 fprintf(frout,
"%21.15g ",frtot[i*NPR+pl]);
1737 fprintf(frout,
"\n");
1740 if(frout!=NULL) fclose(frout);
1758 GLOBALMACP0A1(normalvarstavg,i,j,k,ii)=0.0;
1759 GLOBALMACP0A1(anormalvarstavg,i,j,k,ii)=0.0;
1761 for(ii=0;ii<
NDIM;ii++){
1762 #if(CALCFARADAYANDCURRENTS)
1763 GLOBALMACP0A1(jcontavg,i,j,k,ii)=0.0;
1764 GLOBALMACP0A1(jcovtavg,i,j,k,ii)=0.0;
1765 GLOBALMACP0A1(ajcontavg,i,j,k,ii)=0.0;
1766 GLOBALMACP0A1(ajcovtavg,i,j,k,ii)=0.0;
1768 GLOBALMACP0A1(massfluxtavg,i,j,k,ii)=0.0;
1769 GLOBALMACP0A1(amassfluxtavg,i,j,k,ii)=0.0;
1772 GLOBALMACP0A1(othertavg,i,j,k,ii)=0.0;
1773 GLOBALMACP0A1(aothertavg,i,j,k,ii)=0.0;
1775 #if(CALCFARADAYANDCURRENTS)
1777 GLOBALMACP0A1(fcontavg,i,j,k,ii)=0.0;
1778 GLOBALMACP0A1(fcovtavg,i,j,k,ii)=0.0;
1779 GLOBALMACP0A1(afcontavg,i,j,k,ii)=0.0;
1780 GLOBALMACP0A1(afcovtavg,i,j,k,ii)=0.0;
1784 GLOBALMACP0A1(tudtavg,i,j,k,ii)=0.0;
1785 GLOBALMACP0A1(atudtavg,i,j,k,ii)=0.0;
1798 GLOBALMACP0A1(normalvarstavg,i,j,k,ii)=GLOBALMACP0A1(normalvarstavg,i,j,k,ii)*IDT;
1799 GLOBALMACP0A1(anormalvarstavg,i,j,k,ii)=GLOBALMACP0A1(anormalvarstavg,i,j,k,ii)*IDT;
1801 for(ii=0;ii<
NDIM;ii++){
1802 #if(CALCFARADAYANDCURRENTS)
1803 GLOBALMACP0A1(jcontavg,i,j,k,ii)=GLOBALMACP0A1(jcontavg,i,j,k,ii)*IDT;
1804 GLOBALMACP0A1(jcovtavg,i,j,k,ii)=GLOBALMACP0A1(jcovtavg,i,j,k,ii)*IDT;
1805 GLOBALMACP0A1(ajcontavg,i,j,k,ii)=GLOBALMACP0A1(ajcontavg,i,j,k,ii)*IDT;
1806 GLOBALMACP0A1(ajcovtavg,i,j,k,ii)=GLOBALMACP0A1(ajcovtavg,i,j,k,ii)*IDT;
1808 GLOBALMACP0A1(massfluxtavg,i,j,k,ii)*=IDT;
1809 GLOBALMACP0A1(amassfluxtavg,i,j,k,ii)*=IDT;
1812 GLOBALMACP0A1(othertavg,i,j,k,ii)*=IDT;
1813 GLOBALMACP0A1(aothertavg,i,j,k,ii)*=IDT;
1815 #if(CALCFARADAYANDCURRENTS)
1817 GLOBALMACP0A1(fcontavg,i,j,k,ii)=GLOBALMACP0A1(fcontavg,i,j,k,ii)*IDT;
1818 GLOBALMACP0A1(fcovtavg,i,j,k,ii)=GLOBALMACP0A1(fcovtavg,i,j,k,ii)*IDT;
1819 GLOBALMACP0A1(afcontavg,i,j,k,ii)=GLOBALMACP0A1(afcontavg,i,j,k,ii)*IDT;
1820 GLOBALMACP0A1(afcovtavg,i,j,k,ii)=GLOBALMACP0A1(afcovtavg,i,j,k,ii)*IDT;
1824 GLOBALMACP0A1(tudtavg,i,j,k,ii)=GLOBALMACP0A1(tudtavg,i,j,k,ii)*IDT;
1825 GLOBALMACP0A1(atudtavg,i,j,k,ii)=GLOBALMACP0A1(atudtavg,i,j,k,ii)*IDT;
1838 FTYPE ftemp0,ftemp1,ftemp2,ftemp3,ftemp4,ftemp5,ftemp6;
1850 struct of_geom *ptrgeom=&geomdontuse;
1858 bl_coord_ijk_2(i, j, k, loc, X,V);
1863 FAILSTATEMENT(
"diag.c:set_varstavg()",
"get_state() dir=0", 1);
1865 if (
vchar_all(
GLOBALMAC(pdump,i,j,k), &q, 1, ptrgeom, &vmax[1], &vmin[1],&ignorecourant) >= 1)
1866 FAILSTATEMENT(
"diag.c:set_varstavg()",
"vchar_all() dir=1or2or3", 1);
1867 if (
vchar_all(
GLOBALMAC(pdump,i,j,k), &q, 2, ptrgeom, &vmax[2], &vmin[2],&ignorecourant) >= 1)
1868 FAILSTATEMENT(
"diag.c:set_varstavg()",
"vchar_all() dir=1or2or3", 2);
1869 if (
vchar_all(
GLOBALMAC(pdump,i,j,k), &q, 3, ptrgeom, &vmax[3], &vmin[3],&ignorecourant) >= 1)
1870 FAILSTATEMENT(
"diag.c:set_varstavg()",
"vchar_all() dir=1or2or3", 3);
1875 for (iii = 0; iii <
NDIM; iii++)
1877 for (iii = 0; iii <
NDIM; iii++)
1879 for (iii = 0; iii <
NDIM; iii++)
1881 for (iii = 0; iii <
NDIM; iii++)
1884 if (
vchar_all(
GLOBALMAC(pdump,i,j,k), &q, 1, ptrgeom, &vmax[1], &vmin[1],&ignorecourant) >= 1){
1888 if (
vchar_all(
GLOBALMAC(pdump,i,j,k), &q, 2, ptrgeom, &vmax[2], &vmin[2],&ignorecourant) >= 1){
1892 if (
vchar_all(
GLOBALMAC(pdump,i,j,k), &q, 2, ptrgeom, &vmax[3], &vmin[3],&ignorecourant) >= 1){
1908 for(iii=0;iii<NPR;iii++){
1909 GLOBALMACP0A1(normalvarstavg,i,j,k,ii++)+=GLOBALMACP0A1(pdump,i,j,k,iii)*tfrac;
1910 GLOBALMACP0A1(anormalvarstavg,i,j,k,aii++)+=fabs(GLOBALMACP0A1(pdump,i,j,k,iii))*tfrac;
1912 GLOBALMACP0A1(normalvarstavg,i,j,k,ii++)+=divb*tfrac;
1913 GLOBALMACP0A1(anormalvarstavg,i,j,k,aii++)+=fabs(divb)*tfrac;
1915 for (iii = 0; iii <
NDIM; iii++) GLOBALMACP0A1(normalvarstavg,i,j,k,ii++)+=q.
ucon[iii]*tfrac;
1916 for (iii = 0; iii <
NDIM; iii++) GLOBALMACP0A1(anormalvarstavg,i,j,k,aii++)+=fabs(q.
ucon[iii])*tfrac;
1918 for (iii = 0; iii <
NDIM; iii++) GLOBALMACP0A1(normalvarstavg,i,j,k,ii++)+=q.
ucov[iii]*tfrac;
1919 for (iii = 0; iii <
NDIM; iii++) GLOBALMACP0A1(anormalvarstavg,i,j,k,aii++)+=fabs(q.
ucov[iii])*tfrac;
1921 for (iii = 0; iii <
NDIM; iii++) GLOBALMACP0A1(normalvarstavg,i,j,k,ii++)+=q.
bcon[iii]*tfrac;
1922 for (iii = 0; iii <
NDIM; iii++) GLOBALMACP0A1(anormalvarstavg,i,j,k,aii++)+=fabs(q.
bcon[iii])*tfrac;
1924 for (iii = 0; iii <
NDIM; iii++) GLOBALMACP0A1(normalvarstavg,i,j,k,ii++)+=q.
bcov[iii]*tfrac;
1925 for (iii = 0; iii <
NDIM; iii++) GLOBALMACP0A1(anormalvarstavg,i,j,k,aii++)+=fabs(q.
bcov[iii])*tfrac;
1927 GLOBALMACP0A1(normalvarstavg,i,j,k,ii++)+=vmin[1]*tfrac;
1928 GLOBALMACP0A1(anormalvarstavg,i,j,k,aii++)+=fabs(vmin[1])*tfrac;
1930 GLOBALMACP0A1(normalvarstavg,i,j,k,ii++)+=vmax[1]*tfrac;
1931 GLOBALMACP0A1(anormalvarstavg,i,j,k,aii++)+=fabs(vmax[1])*tfrac;
1933 GLOBALMACP0A1(normalvarstavg,i,j,k,ii++)+=vmin[2]*tfrac;
1934 GLOBALMACP0A1(anormalvarstavg,i,j,k,aii++)+=fabs(vmin[2])*tfrac;
1936 GLOBALMACP0A1(normalvarstavg,i,j,k,ii++)+=vmax[2]*tfrac;
1937 GLOBALMACP0A1(anormalvarstavg,i,j,k,aii++)+=fabs(vmax[2])*tfrac;
1939 GLOBALMACP0A1(normalvarstavg,i,j,k,ii++)+=vmin[3]*tfrac;
1940 GLOBALMACP0A1(anormalvarstavg,i,j,k,aii++)+=fabs(vmin[3])*tfrac;
1942 GLOBALMACP0A1(normalvarstavg,i,j,k,ii++)+=vmax[3]*tfrac;
1943 GLOBALMACP0A1(anormalvarstavg,i,j,k,aii++)+=fabs(vmax[3])*tfrac;
1946 #if(CALCFARADAYANDCURRENTS)
1947 lower_vec(
GLOBALMAC(jcon,i,j,k),ptrgeom,jcov);
1948 for(ii=0;ii<
NDIM;ii++){
1949 GLOBALMACP0A1(jcontavg,i,j,k,ii)+=GLOBALMACP0A1(jcon,i,j,k,ii)*tfrac;
1950 GLOBALMACP0A1(jcovtavg,i,j,k,ii)+=jcov[ii]*tfrac;
1951 GLOBALMACP0A1(ajcontavg,i,j,k,ii)+=fabs(GLOBALMACP0A1(jcon,i,j,k,ii))*tfrac;
1952 GLOBALMACP0A1(ajcovtavg,i,j,k,ii)+=fabs(jcov[ii])*tfrac;
1956 for(ii=0;ii<
NDIM;ii++){
1957 ftemp=(ptrgeom->gdet)*GLOBALMACP0A1(pdump,i,j,k,
RHO)*(q.
ucon[ii]);
1958 GLOBALMACP0A1(massfluxtavg,i,j,k,ii)+=ftemp*tfrac;
1959 GLOBALMACP0A1(amassfluxtavg,i,j,k,ii)+=fabs(ftemp)*tfrac;
1965 GLOBALMACP0A1(othertavg,i,j,k,ii++)=ftemp*tfrac;
1966 GLOBALMACP0A1(aothertavg,i,j,k,aii++)=fabs(ftemp)*tfrac;
1968 #if(CALCFARADAYANDCURRENTS)
1971 GLOBALMACP0A1(fcontavg,i,j,k,ii)+=GLOBALMACP0A1(fcon,i,j,k,ii)*tfrac;
1972 GLOBALMACP0A1(fcovtavg,i,j,k,ii)+=fcov[ii]*tfrac;
1973 GLOBALMACP0A1(afcontavg,i,j,k,ii)+=fabs(GLOBALMACP0A1(fcon,i,j,k,ii))*tfrac;
1974 GLOBALMACP0A1(afcovtavg,i,j,k,ii)+=fabs(fcov[ii])*tfrac;
1978 pgas = pressure_rho0_u_simple(i,j,k,loc,GLOBALMACP0A1(pdump,i,j,k,
RHO),GLOBALMACP0A1(pdump,i,j,k,
UU));
1979 bsq=0;
for(iii=0;iii<
NDIM;iii++) bsq+=(q.
bcon[iii])*(q.
bcov[iii]);
1983 for(iii=0;iii<
NDIM;iii++)
for(l=0;l<
NDIM;l++){
1984 ftemp0=pgas*(q.
ucon[iii])*(q.
ucov[l]);
1985 GLOBALMACP0A1(tudtavg,i,j,k,ii)+=ftemp0*tfrac;
1986 GLOBALMACP0A1(atudtavg,i,j,k,ii)+=fabs(ftemp0)*tfrac;
1990 for(iii=0;iii<
NDIM;iii++)
for(l=0;l<
NDIM;l++){
1991 ftemp1=GLOBALMACP0A1(pdump,i,j,k,
RHO)*(q.
ucon[iii])*(q.
ucov[l]);
1992 GLOBALMACP0A1(tudtavg,i,j,k,ii)+=ftemp1*tfrac;
1993 GLOBALMACP0A1(atudtavg,i,j,k,ii)+=fabs(ftemp1)*tfrac;
1997 for(iii=0;iii<
NDIM;iii++)
for(l=0;l<
NDIM;l++){
1998 ftemp2=GLOBALMACP0A1(pdump,i,j,k,
UU)*(q.
ucon[iii])*(q.
ucov[l]);
1999 GLOBALMACP0A1(tudtavg,i,j,k,ii)+=ftemp2*tfrac;
2000 GLOBALMACP0A1(atudtavg,i,j,k,ii)+=fabs(ftemp2)*tfrac;
2004 for(iii=0;iii<
NDIM;iii++)
for(l=0;l<
NDIM;l++){
2005 ftemp3=bsq*(q.
ucon[iii])*(q.
ucov[l]);
2006 GLOBALMACP0A1(tudtavg,i,j,k,ii)+=ftemp3*tfrac;
2007 GLOBALMACP0A1(atudtavg,i,j,k,ii)+=fabs(ftemp3)*tfrac;
2011 for(iii=0;iii<
NDIM;iii++)
for(l=0;l<
NDIM;l++){
2012 ftemp4=pgas*
delta(iii,l);
2013 GLOBALMACP0A1(tudtavg,i,j,k,ii)+=ftemp4*tfrac;
2014 GLOBALMACP0A1(atudtavg,i,j,k,ii)+=fabs(ftemp4)*tfrac;
2018 for(iii=0;iii<
NDIM;iii++)
for(l=0;l<
NDIM;l++){
2019 ftemp5=0.5*bsq*
delta(iii,l);
2020 GLOBALMACP0A1(tudtavg,i,j,k,ii)+=ftemp5*tfrac;
2021 GLOBALMACP0A1(atudtavg,i,j,k,ii)+=fabs(ftemp5)*tfrac;
2025 for(iii=0;iii<
NDIM;iii++)
for(l=0;l<
NDIM;l++){
2027 GLOBALMACP0A1(tudtavg,i,j,k,ii)+=ftemp6*tfrac;
2028 GLOBALMACP0A1(atudtavg,i,j,k,ii)+=fabs(ftemp6)*tfrac;
2042 static FTYPE lastdt;
2044 static FTYPE tavgi,tavgf;
2045 static int tavgflag=1;
2078 FTYPE ftempdiag[NPR];
2081 SFTYPE (*localsourceaddterms)[NPR];
2102 UtoU_evolve2diag(UEVOLVE,UDIAG,ptrgeom,ftemp,ftempdiag);
2106 localsourceadd[pl]+=ftempdiag[pl];
2118 int sc,pl,enerregion;
2120 FTYPE ftempdiag[NPR];
2123 SFTYPE (*localsourceaddterms)[NPR];
2142 UtoU_evolve2diag(UEVOLVE,UDIAG,ptrgeom,ftemp,ftempdiag);
2146 localsourceaddterms[sc][pl]+=ftempdiag[pl];
2203 #define AVOIDFULLINVERSION 1
2219 struct of_state q,qsimple,qfull,qenergy;
2222 FTYPE Ugeomfree[NPR];
2229 #if(DOENTROPY==DONOENTROPY || ENTROPY==-100)
2230 dualfprintf(
fail_file,
"Should not be doing diss_compute() unless DOENTROPY!=DONOENTROPY\n");
2291 UtoU(inputtype,
UNOTHING,ptrgeom,U,Ugeomfree);
2299 entropy=pr[
RHO]*Ugeomfree[ENTROPY]/Ugeomfree[
RHO];
2327 #if(AVOIDFULLINVERSION==0)
2331 int allowlocalfailurefixandnoreport=1;
2332 Utoprimdiss(showmessages,allowlocalfailurefixandnoreport, evolvetype, inputtype, U, ptrgeom, prother[
DISSFULLINVCO],&otherfail, &newtonstats,newtonstats,&lpflagrad);
2353 if (get_stateforUdiss(pr, ptrgeom, &qenergy) >= 1)
FAILSTATEMENT(
"utoprim.c:utoprim()",
"get_state()", 1);
2437 dualfprintf(
fail_file,
"In setting up choseninv: No such loopinv=%d\n",loopinv);
2442 if(! (choseninv==DISSSIMPLEINVCO||choseninv==DISSFULLINVCO)){
2443 dualfprintf(
fail_file,
"In setting up choseninv: Chose bad choseninv=%d\n",choseninv);
2465 dissenergy[loopinv]=pr[
UU]-prother[choseninv][
UU];
2469 dissenergy[loopinv]=
MAX(dissenergy[loopinv],0.0);
2476 dissenergy[loopinv]*=(-qsimple.
ucov[
TT]);
2480 dissenergy[loopinv]*=(-qfull.
ucov[
TT]);
2487 dissenergy[loopinv]= entropydiss-
entropy;
2490 dissenergy[loopinv]=
MAX(dissenergy[loopinv],0.0);
2496 dissenergy[loopinv]= entropydiss-
entropy;
2499 dissenergy[loopinv]=
MAX(dissenergy[loopinv],0.0);
2508 if(loopinv==DISSSIMPLEINVLAB2){
2509 dissenergy[loopinv]=
MAX(dissenergy[loopinv],0.0);
2520 dissenergy[loopinv]=
MAX(dissenergy[loopinv],0.0);
2532 dissenergy[loopinv]=
MAX(dissenergy[loopinv],0.0);
2537 dualfprintf(
fail_file,
"In computing dissenergy: No such loopinv=%d\n",loopinv);
2551 diss[loopinv]+=dissenergy[loopinv]*ptrgeom->gdet *
dVF;
2558 GLOBALMACP0A1(dissfunpos,ptrgeom->i,ptrgeom->j,ptrgeom->k,loopinv)+=dissenergy[loopinv]*ptrgeom->gdet *
dVF;
2576 if (get_stateforUdiss(pr, ptrgeom, &q) >= 1)
FAILSTATEMENT(
"utoprim.c:utoprim()",
"get_state()", 1);
2577 if (
primtoU(UEVOLVE, pr, &q, ptrgeom, Unew, NULL) >= 1)
FAILSTATEMENT(
"utoprim.c:utoprim()",
"primtoU()", 1);
2578 U[ENTROPY] = Unew[ENTROPY];