12 void reset_dothisenerregion(
int initialcall)
41 int recompute_fluxpositions(
int initialcall,
int timeorder,
int numtimeorders,
long int thenstep,
FTYPE thetime )
43 int normalinitialcall;
51 normalinitialcall=initialcall;
53 else if(initialcall==3){
55 normalinitialcall=initialcall;
58 compinitialcall=initialcall;
59 normalinitialcall=initialcall;
62 if(normalinitialcall==1){
75 reset_dothisenerregion(normalinitialcall);
78 setflux(normalinitialcall,timeorder,numtimeorders,thenstep,thetime);
79 sethorizonflux(normalinitialcall,timeorder,numtimeorders,thenstep,thetime);
80 settrueglobalregion(normalinitialcall,timeorder,numtimeorders,thenstep,thetime);
82 if(
DOJETDIAG) setjetflux(normalinitialcall,timeorder,numtimeorders,thenstep,thetime);
89 setgridsectioning(compinitialcall,timeorder, numtimeorders,
nstep,
t);
103 int setgeneral_enerregion(
int (*enerregiondef)[
NDIM],
int doprintout,
int whichregion,
int whichbndregion)
108 int enerregion,enerregionglobal;
115 int updowniteri,updowniterj,updowniterk;
117 int *localenerpos,*localenerposglobal;
118 int *localdoflux,*localdofluxglobal;
119 static int firsttime=1;
122 int SHIFTdimen[
NDIM];
126 if(omp_in_parallel()){
127 dualfprintf(
fail_file,
"setgeneral_enerregion() called in parallel region\n");
138 ENERREGIONLOOP(enerregion) previouslysetglobal_enerregiondef[enerregion]=0;
162 enerregion=whichregion;
166 if(previouslysetglobal_enerregiondef[whichregion]==1){
171 for(updowniter=0;updowniter<
NUMUPDOWN;updowniter++){
173 totaldiff +=
abs(global_enerregiondef[enerregion][updowniter][dimen] - enerregiondef[updowniter][dimen]);
181 if(global_enerregiondef[enerregion][updowniter][dimen] - enerregiondef[updowniter][dimen]>Nbndvec[dimen]){
183 dualfprintf(
fail_file,
"SUPERWARNING!!! : Exposing more cells than bounded on inner boundary: enerregion=%d updowniter=%d dimen=%d\n",enerregion,updowniter,dimen);
186 if(enerregiondef[updowniter][dimen]-global_enerregiondef[enerregion][updowniter][dimen]>Nbndvec[dimen]){
188 dualfprintf(
fail_file,
"SUPERWARNING!!! : Exposing more cells than bounded on outer boundary: enerregion=%d updowniter=%d dimen=%d\n",enerregion,updowniter,dimen);
201 for(updowniter=0;updowniter<
NUMUPDOWN;updowniter++){
203 global_enerregiondef[enerregion][updowniter][dimen] = enerregiondef[updowniter][dimen];
208 previouslysetglobal_enerregiondef[whichregion]=1;
231 if(whichbndregion!=NULLENERREGIONS){
233 if(whichregion==NULLENERREGIONS){
234 dualfprintf(
fail_file,
"For now assume normal enerregion must exist for bnd region to exist. This is so enerregiondef[][] remains well-defined, which applies to both versions.\n");
239 enerregionglobal=whichbndregion;
240 localenerposglobal=
enerposreg[enerregionglobal];
241 localdofluxglobal=
dofluxreg[enerregionglobal];
273 for(updowniter=0;updowniter<
NUMUPDOWN;updowniter++){
274 local_enerregiondef[updowniter][dimen] = enerregiondef[updowniter][dimen] -
startpos[dimen];
280 if(whichregion!=NULLENERREGIONS){
283 int rindflux=local_enerregiondef[
POINTDOWN][dimen];
284 if( Nvec[dimen]>1 && rindflux >= 0 && rindflux < Nvec[dimen] ){
286 if(doprintout) logfprintf(
"proc: %d doing enerregion=%d flux %d rind=%d\n",myid,enerregion,
DIRFROMDIMEN(dimen,dirsign),rind);
292 if(whichbndregion!=NULLENERREGIONS){
293 rindglobal=localenerposglobal[
DIRFROMDIMEN(dimen,dirsign)] =
MAX( -Nbndvec[dimen], local_enerregiondef[
POINTDOWN][dimen]-Nbndvec[dimen] );
294 int rindglobalflux=local_enerregiondef[
POINTDOWN][dimen]-Nbndvec[dimen];
295 if( Nvec[dimen]>1 && rindglobalflux >= -Nbndvec[dimen] && rindglobalflux < Nvec[dimen]+Nbndvec[dimen] ){
296 localdofluxglobal[
DIRFROMDIMEN(dimen,dirsign)]=rindglobalflux;
297 if(doprintout) logfprintf(
"proc: %d doing enerregion=%d sectionflux %d rindglobal=%d\n",myid,enerregionglobal,
DIRFROMDIMEN(dimen,dirsign),rindglobal);
304 if(whichregion!=NULLENERREGIONS){
305 rind = localenerpos[
DIRFROMDIMEN(dimen,dirsign)] =
MIN( Nvec[dimen]-1, local_enerregiondef[
POINTUP][dimen] );
306 int rindflux = local_enerregiondef[
POINTUP][dimen];
308 if( Nvec[dimen]>1 && rindflux >= 0 && rindflux < Nvec[dimen] ){
309 localdoflux[
DIRFROMDIMEN(dimen,dirsign)]=rindflux + SHIFTdimen[dimen];
310 if(doprintout) logfprintf(
"proc: %d doing enerregion=%d flux %d rind=%d\n",myid,enerregion,
DIRFROMDIMEN(dimen,dirsign),rind);
315 if(whichbndregion!=NULLENERREGIONS){
316 rindglobal = localenerposglobal[
DIRFROMDIMEN(dimen,dirsign)] =
MIN( Nvec[dimen]-1+Nbndvec[dimen], local_enerregiondef[
POINTUP][dimen]+Nbndvec[dimen] );
317 int rindglobalflux = local_enerregiondef[
POINTUP][dimen]+Nbndvec[dimen];
318 if( Nvec[dimen]>1 && rindglobalflux >= -Nbndvec[dimen] && rindglobalflux < Nvec[dimen]+Nbndvec[dimen] ){
320 localdofluxglobal[
DIRFROMDIMEN(dimen,dirsign)]=rindglobalflux;
321 if(doprintout) logfprintf(
"proc: %d doing enerregion=%d flux %d using rindglobal=%d\n",myid,enerregionglobal,
DIRFROMDIMEN(dimen,dirsign),rindglobal);
331 if(whichregion!=NULLENERREGIONS){
333 if(localenerpos[
X1UP]<localenerpos[
X1DN] && Nvec[1]>1 || localenerpos[
X2UP]<localenerpos[
X2DN] && Nvec[2]>1 || localenerpos[
X3UP]<localenerpos[
X3DN] && Nvec[3]>1){
342 if(whichbndregion!=NULLENERREGIONS){
344 if(localenerposglobal[
X1UP]<localenerposglobal[
X1DN] && Nvec[1]>1 || localenerposglobal[
X2UP]<localenerposglobal[
X2DN] && Nvec[2]>1 || localenerposglobal[
X3UP]<localenerposglobal[
X3DN] && Nvec[3]>1){
361 if(doprintout && totaldiff>0){
364 if(whichregion!=NULLENERREGIONS){
365 DIRLOOP(dir) logfprintf("proc: %d enerregion=%d:
doflux[%d]=%d
enerpos[%d]=%d\n",myid,enerregion,dir,localdoflux[dir],dir,localenerpos[dir]);
367 if(whichbndregion!=NULLENERREGIONS){
368 DIRLOOP(dir) logfprintf("proc: %d enerregion=%d:
doflux[%d]=%d
enerpos[%d]=%d\n",myid,enerregionglobal,dir,localdofluxglobal[dir],dir,localenerposglobal[dir]);
379 if(doprintout && totaldiff>0){
380 if(whichregion!=NULLENERREGIONS){
381 DIRLOOP(dir) logfprintf("proc: myid=%d ::
t=%21.15g
nstep=%ld enerregion=%d section: totaldiff=%d localdoflux[%d]=%d localenerpos[%d]=%d\n",myid,
t,
nstep,enerregion,totaldiff,dir,localdoflux[dir],dir,localenerpos[dir]);
384 for(updowniteri=NUMUPDOWN-1;updowniteri>=0;updowniteri--) for(updowniterj=NUMUPDOWN-1;updowniterj>=0;updowniterj--) for(updowniterk=NUMUPDOWN-1;updowniterk>=0;updowniterk--){
385 ti=enerregiondef[updowniteri][1] + (updowniteri==
POINTUP);
386 tj=enerregiondef[updowniterj][2] + (updowniterj==
POINTUP);
387 tk=enerregiondef[updowniterk][3] + (updowniterk==
POINTUP);
390 logfprintf(
"t = %21.15g, ud_{i,j,k} = %d %d %d :: CORNT_enerregiondef_{i,j,k} = %d %d %d :: V_{1,2,3} = %21.15g %21.15g %21.15g \n", t, updowniteri, updowniterj, updowniterk, ti, tj, tk, V[1], V[2], V[3] );
405 int setflux(
int initialcall,
int timeorder,
int numtimeorders,
long int thenstep,
FTYPE thetime )
416 setflux_set_enerregiondef(initialcall, timeorder, numtimeorders, thenstep, thetime, enerregiondef );
420 setgeneral_enerregion(enerregiondef, doprintout, enerregion, NULLENERREGIONS);
427 int setflux_set_enerregiondef(
int initialcall,
int timeorder,
int numtimeorders,
long int thenstep,
FTYPE thetime,
int (*enerregiondef)[NDIM] )
447 int sethorizonflux(
int initialcall,
int timeorder,
int numtimeorders,
long int thenstep,
FTYPE thetime )
458 sethorizonflux_set_enerregiondef(initialcall, timeorder, numtimeorders, thenstep, thetime, enerregiondef );
462 setgeneral_enerregion(enerregiondef, doprintout, enerregion, NULLENERREGIONS);
470 int sethorizonflux_set_enerregiondef(
int initialcall,
int timeorder,
int numtimeorders,
long int thenstep,
FTYPE thetime,
int (*enerregiondef)[NDIM] )
489 int settrueglobalregion(
int initialcall,
int timeorder,
int numtimeorders,
long int thenstep,
FTYPE thetime )
491 int enerregion,enerbndregion;
503 settrueglobalregion_set_enerregiondef(initialcall, timeorder, numtimeorders, thenstep, thetime, enerregiondef );
507 setgeneral_enerregion(enerregiondef, doprintout, enerregion, enerbndregion);
514 int settrueglobalregion_set_enerregiondef(
int initialcall,
int timeorder,
int numtimeorders,
long int thenstep,
FTYPE thetime,
int (*enerregiondef)[NDIM] )
549 int setjetflux(
int initialcall,
int timeorder,
int numtimeorders,
long int thenstep,
FTYPE thetime )
554 FTYPE startth,endth,thetajet;
562 dualfprintf(
fail_file,
"setjetflux() not setup to work for non-full-Pi grids\n");
580 if((fabs(startth-thetajet)/thetajet<1
E-8)||
581 (fabs(endth-thetajet)/thetajet<1
E-8)||
582 (fabs(startth-(M_PI-thetajet))/thetajet<1
E-8)||
583 (fabs(endth-(M_PI-thetajet))/thetajet<1
E-8)
585 dualfprintf(
fail_file,
"thetajet is on top of grid, move h_over_r_jet a bit\n");
602 if((startth<=thetajet)&&(endth<=thetajet)){
612 else if((startth<thetajet)&&(endth>thetajet)){
623 for(j=0;j<=
OUTM2;j++){
637 else if((startth>=thetajet)&&(endth>=thetajet)){
648 trifprintf(
"problem with INNERJET setjetflux()\n");
657 if(doprintout) trifprintf(
"proc: %d doing inner jet flux X1DN\n",myid);
664 if(doprintout) trifprintf(
"proc: %d doing inner jet flux X1UP\n",myid);
671 if(doprintout) trifprintf(
"proc: %d doing inner jet flux X2DN\n",myid);
678 if(doprintout) trifprintf(
"proc: %d doing inner jet flux X2UP\n",myid);
684 if(doprintout) trifprintf(
"proc: %d doing inner jet flux X3DN\n",myid);
691 if(doprintout) trifprintf(
"proc: %d doing inner jet flux X3UP\n",myid);
711 if((startth<=M_PI-thetajet)&&(endth<=M_PI-thetajet)){
721 else if((startth<M_PI-thetajet)&&(endth>M_PI-thetajet)){
730 for(j=0;j<=
OUTM2;j++){
734 if(th>M_PI-thetajet){
747 else if((startth>=M_PI-thetajet)&&(endth>=M_PI-thetajet)){
758 trifprintf(
"problem with OUTERJET setjetflux()\n");
764 if(doprintout) trifprintf(
"proc: %d doing outer jet flux X1DN\n",myid);
770 if(doprintout) trifprintf(
"proc: %d doing outer jet flux X1UP\n",myid);
776 if(doprintout) trifprintf(
"proc: %d doing outer jet flux X2DN\n",myid);
782 if(doprintout) trifprintf(
"proc: %d doing outer jet flux X2UP\n",myid);
789 if(doprintout) trifprintf(
"proc: %d doing outer jet flux X3DN\n",myid);
795 if(doprintout) trifprintf(
"proc: %d doing outer jet flux X3UP\n",myid);