24 void parainitchecks(
void)
35 dualfprintf(
fail_file,
"WARNING: PARAGENDQALLOWEXTREMUM==0 for hybrid method, will be less accurate for turbulent regions\n");
38 dualfprintf(
fail_file,
"ERROR: PARAGENDQALLOWEXTREMUM==1 but not WENO-based limiter -- will be less stable in stiff regions (e.g. near horizon). Use PARALINE instead.\n");
43 dualfprintf(
fail_file,
"WARNING: PARAFLAT inefficient compared to PARALINE, suggested to use PARALINE instead\n");
61 FTYPE Dqm, Dqc, Dqp, aDqm,aDqp,aDqc,s,l,r,qa, qd,
qe;
67 for(mm=-1 ; mm<=1 ; mm++) {
68 Dqm = 2.0 *(y[mm]-y[mm-1]);
69 Dqp = 2.0 *(y[mm+1]-y[mm]);
70 Dqc = 0.5 *(y[mm+1]-y[mm-1]);
76 if (s <=0.) dq[mm]=0.;
77 else dq[mm]=
min(aDqc,
min(aDqm,aDqp))*
sign(Dqc);
82 l=0.5*(y[0]+y[-1])-(dq[0]-dq[-1])/6.0;
83 r=0.5*(y[1]+y[0])-(dq[1]-dq[0])/6.0;
87 qe=6.0*(y[0]-0.5*(l+r));
95 if (qd*(qd-qe)<0.0) l=3.0*y[0]-2.0*r;
96 else if (qd*(qd+qe)<0.0) r=3.0*y[0]-2.0*l;
113 FTYPE Dqm, Dqc, Dqp, Dqvanl,aDqm,aDqp,aDqc,aDqvanl,s,l,r,qa, qd,
qe;
119 for(mm=-1 ; mm<=1 ; mm++) {
120 Dqm = 2.0 *(y[mm]-y[mm-1]);
121 Dqp = 2.0 *(y[mm+1]-y[mm]);
122 Dqc = 0.5 *(y[mm+1]-y[mm-1]);
128 #if(PARA2LIM == VANL)
129 Dqvanl=2.0*Dqm*Dqp/(Dqm+Dqp);
130 aDqvanl=fabs(Dqvanl);
131 if (s <=0.) dq[mm]=0.;
133 #elif(PARA2LIM == PMC)
134 if (s <=0.) dq[mm]=0.;
135 else dq[mm]=
min(aDqc,
min(aDqm,aDqp))*
sign(Dqc);
136 #elif(PARA2LIM == MC)
142 l=0.5*(y[0]+y[-1])-(dq[0]-dq[-1])/6.0;
143 r=0.5*(y[1]+y[0])-(dq[1]-dq[0])/6.0;
152 qa=(r-y[0])*(y[0]-l);
154 qe=6.0*(y[0]-0.5*(l+r));
162 else if (qd*(qd-qe)<0.0) l=3.0*y[0]-2.0*r;
163 else if (qd*(qd+qe)<0.0) r=3.0*y[0]-2.0*l;
182 FTYPE Dqm, Dqc, Dqp, Dqvanl,aDqm,aDqp,aDqc,aDqvanl,s,l,r,qa, qd,
qe;
188 for(mm=-1 ; mm<=1 ; mm++) {
189 Dqm = 2.0 *(y[mm]-y[mm-1]);
190 Dqp = 2.0 *(y[mm+1]-y[mm]);
191 Dqc = 0.5 *(y[mm+1]-y[mm-1]);
197 #if(PARA2LIM == VANL)
198 Dqvanl=2.0*Dqm*Dqp/(Dqm+Dqp);
199 aDqvanl=fabs(Dqvanl);
201 if (s <=0.) dq[mm]=0.;
202 else dq[mm] = -aDqvanl*
sign(Dqc);
204 #elif(PARA2LIM == MC)
205 if (s <=0.) dq[mm]=0.;
206 else dq[mm]=-
min(aDqc,
min(aDqm,aDqp))*
sign(Dqc);
207 #elif(PARA2LIM == MINM)
208 if (s<=0.) dq[mm] = 0.;
209 else if (aDqm<aDqp) dq[mm] = -aDqm*
sign(Dqc);
210 else dq[mm]=-aDqp*
sign(Dqc);
211 #elif(PARA2LIM == NLIM) //w/o slope limiter
219 l=0.5*(y[0]+y[-1])-(dq[0]-dq[-1])/6.0;
220 r=0.5*(y[1]+y[0])-(dq[1]-dq[0])/6.0;
229 qa=(r-y[0])*(y[0]-l);
231 qe=6.0*(y[0]-0.5*(l+r));
257 if (qd*(qd-qe)<0.0) *lout=3.0*y[0]-2.0*r;
260 if (qd*(qd+qe)<0.0) *rout=3.0*y[0]-2.0*l;
276 FTYPE Dqm, Dqc, Dqp, Dqvanl,aDqm,aDqp,aDqc,aDqvanl,s,l,r,qa, qd,
qe;
283 for(mm=-1 ; mm<=1 ; mm++) {
284 Dqm = 2.0 *(y[mm]-y[mm-1]);
285 Dqp = 2.0 *(y[mm+1]-y[mm]);
286 Dqc = 0.5 *(y[mm+1]-y[mm-1]);
293 #if(PARA2LIM == VANL)
294 Dqvanl=2.0*Dqm*Dqp/(Dqm+Dqp);
295 aDqvanl=fabs(Dqvanl);
297 if (s <=0.) dq[mm]=0.;
301 #elif(PARA2LIM == MC)
308 if (s <=0.) dq[mm]=0.;
309 else dq[mm]=
min(aDqc,
min(aDqm,aDqp))*
sign(Dqc);
314 #elif(PARA2LIM == MINM_STEEPENER)
317 if (s<=0.) dq[mm] = 0.;
318 else if (aDqm<aDqp) dq[mm] = aDqm*
sign(Dqc);
319 else dq[mm]=aDqp*
sign(Dqc);
322 #elif(PARA2LIM == MINM) // no steepener, normal MINM
326 dq[mm] =
MINMOD(0.5*Dqm,0.5*Dqp);
329 if (s<=0.) dq[mm] = 0.;
330 else if (aDqm<aDqp) dq[mm] = aDqm*
sign(Dqc);
331 else dq[mm]=aDqp*
sign(Dqc);
334 if (s<=0.) dq[mm] = 0.;
335 else if (aDqm<aDqp) dq[mm] = 0.5*aDqm*
sign(Dqc);
336 else dq[mm]=0.5*aDqp*
sign(Dqc);
339 #elif(PARA2LIM == NLIM) //w/o slope limiter
349 (fabs(dq[-1]-dq[0])/(fabs(dq[-1])+fabs(dq[0])+
SMALL)>0.1)||
350 (fabs(dq[1]-dq[0])/(fabs(dq[1])+fabs(dq[0])+
SMALL)>0.1)
353 *lout =y[0] - 0.5* (*dq);
354 *rout=y[0] + 0.5* (*dq);
364 l=0.5*(y[0]+y[-1])-(dq[0]-dq[-1])/8.0;
365 r=0.5*(y[1]+y[0])-(dq[1]-dq[0])/8.0;
375 qa=(r-y[0])*(y[0]-l);
377 qe=6.0*(y[0]-0.5*(l+r));
405 #define DO4MONO 0 // whether to add-back-in some trend that one removed -- not working yet in this code
407 #define OVERRIDEWITHMINM 1
411 void parajon(
int ii,
int jj,
int kk,
int loc,
int realisinterp,
int dir,
int pl,
FTYPE *y,
FTYPE *lout,
FTYPE *rout)
416 FTYPE Dqm, Dqc, Dqp, Dqvanl,aDqm,aDqp,aDqc,aDqvanl,s,l,r,qa, qd,
qe;
418 void jonparasmooth_compute(
int realisinterp,
int dqrange,
int pl,
FTYPE *y,
FTYPE *dq1,
FTYPE *dq2,
FTYPE *lout,
FTYPE *rout,
int *smooth);
428 FTYPE Dqm4mono,Dqc4mono,Dqp4mono;
430 FTYPE aDqm4mono,aDqc4mono,aDqp4mono;
439 whichdq=a_whichdq+dqrange;
442 y4mono=a_y4mono+dqrange;
445 for(mm=-2 ; mm<=2 ; mm++) {
450 y4mono[mm] = y[mm]*GLOBALMACP1A0(pother,RHOCENTA+pl,iii,jjj,kkk);
457 for(mm=-1 ; mm<=1 ; mm++) {
458 Dqm = 2.0 *(y[mm]-y[mm-1]);
459 Dqp = 2.0 *(y[mm+1]-y[mm]);
460 Dqc = 0.5 *(y[mm+1]-y[mm-1]);
465 Dqm4mono = 2.0 *(y4mono[mm]-y4mono[mm-1]);
466 Dqp4mono = 2.0 *(y4mono[mm+1]-y4mono[mm]);
467 Dqc4mono = 0.5 *(y4mono[mm+1]-y4mono[mm-1]);
477 if(fabs(Dqc4mono)<=fabs(Dqm4mono) && fabs(Dqc4mono)<=fabs(Dqp4mono)){
481 else if(fabs(Dqm4mono)<=fabs(Dqp4mono) && fabs(Dqm4mono)<=fabs(Dqc4mono)){
485 else if(fabs(Dqp4mono)<=fabs(Dqm4mono) && fabs(Dqp4mono)<=fabs(Dqc4mono)){
500 aDqm4mono = fabs(Dqm4mono) ;
501 aDqp4mono = fabs(Dqp4mono) ;
502 aDqc4mono = fabs(Dqc4mono) ;
504 s4mono = Dqm4mono*Dqp4mono;
509 #if(OVERRIDEWITHMINM || PARA2LIM == MINM) // no steepener, normal MINM
511 if (s4mono<=0.) dq[mm] = 0.;
512 else if (aDqm4mono<aDqp4mono) dq[mm] = 0.5*Dqm;
514 #elif(PARA2LIM == VANL)
516 Dqvanl=2.0*Dqm*Dqp/(Dqm+Dqp);
517 aDqvanl=fabs(Dqvanl);
519 if (s4mono <=0.) dq[mm]=0.;
522 #elif(PARA2LIM == MC)
524 if (s4mono <=0.) dq[mm]=0.;
525 else if (aDqm4mono<aDqp4mono && aDqm4mono<aDqc4mono) dq[mm] = Dqm;
526 else if (aDqp4mono<aDqm4mono && aDqp4mono<aDqc4mono) dq[mm] = Dqp;
529 #elif(PARA2LIM == MINM_STEEPENER)
532 if (s4mono<=0.) dq[mm] = 0.;
533 else if (aDqm4mono<aDqp4mono) dq[mm] = Dqm;
537 #elif(PARA2LIM == NLIM) //w/o slope limiter
547 for(mm=-1 ; mm<=1 ; mm++) {
548 usepara+=(whichdq[mm]==0);
553 if(usepara==3 && s0>=0.0){
555 *lout=(1./8.)*(6.0*y[0]+3.0*y[-1]-y[1]);
556 *rout=(1./8.)*(6.0*y[0]-y[-1]+3.0*y[1]);
560 *lout=y[0]-0.5*dq[0];
561 *rout=y[0]+0.5*dq[0];
573 void para4gen(
int realisinterp,
int dqrange,
int pl,
FTYPE *y,
FTYPE *lout,
FTYPE *rout,
FTYPE *dq,
int *smooth);
590 para4gen(realisinterp,dqrange, pl,y,lout,rout,dq,&smooth);
592 for(mm=-dqrange/2+1;mm<=dqrange/2;mm++){
593 ddq[mm] = dq[mm] - dq[mm-1];
595 checkparamonotonicity(smooth, dqrange, pl, y, ddq, dq, lout, rout, lout, rout);
603 #if(PARAGENDQALLOWEXTREMUM==0)
604 #define PARAGENMINMOD(a,b) MINMOD(a,b)
606 #define PARAGENMINMOD(a,b) MINMODB(a,b)
614 void para4gen(
int realisinterp,
int dqrange,
int pl,
FTYPE *y,
FTYPE *lout,
FTYPE *rout,
FTYPE *dq,
int *smooth)
617 FTYPE a_dq1[10],a_dq2[10];
619 FTYPE Dqm, Dqc, Dqp, Dqvanl,aDqm,aDqp,aDqc,aDqvanl,s,l,r;
621 FTYPE Dqparacenterleft,Dqparacenterright;
625 void jonparasmooth_compute(
int realisinterp,
int dqrange,
int pl,
FTYPE *y,
FTYPE *dq1,
FTYPE *dq2,
FTYPE *lout,
FTYPE *rout,
int *smooth);
655 Dqm = 2.0 *(y[mm]-y[mm-1]);
656 Dqp = 2.0 *(y[mm+1]-y[mm]);
659 Dqparacenterleft = (+0.5*y[0]-y[-1] +y[-2]/6.0+y[1]/3.0);
660 Dqparacenterright = (-0.5*y[0]-y[-1]/3.0+y[1] - y[2]/6.0);
667 if(fabs(Dqparacenterleft)>fabs(Dqsteep) && fabs(Dqparacenterright)>fabs(Dqsteep)){
668 *lout = y[0] - 0.5* Dqsteep;
669 *rout = y[0] + 0.5* Dqsteep;
689 for(mm=-dqrange/2 ; mm<=dqrange/2 ; mm++) {
690 dq1[mm] = (y[mm]-y[mm-1]);
691 dq2[mm] = 0.5 *(y[mm+1]-y[mm-1]);
694 dq1[mm] = (y[mm]-y[mm-1]);
704 for(mm=-dqrange/2 ; mm<=dqrange/2 ; mm++) {
707 Dqp = 2.0 *dq1[mm+1];
711 #if(PARA2LIM == VANL)
715 Dqvanl=2.0*s/(Dqm+Dqp);
722 if (s <=0.) dq[mm]=0.;
723 else dq[mm] = Dqvanl*
sign(Dqc);
729 #elif(PARA2LIM == MC)
740 if (s <=0.) dq[mm]=0.;
741 else dq[mm]=
min(aDqc,
min(aDqm,aDqp))*
sign(Dqc);
746 #elif(PARA2LIM == MINM_STEEPENER)
753 if (s<=0.) dq[mm] = 0.;
754 else if (aDqm<aDqp) dq[mm] = aDqm*
sign(Dqc);
755 else dq[mm]=aDqp*
sign(Dqc);
758 #elif(PARA2LIM == MINM) // no steepener, normal MINM
769 if (s<=0.) dq[mm] = 0.;
770 else if (aDqm<aDqp) dq[mm] = aDqm*
sign(Dqc);
771 else dq[mm]=aDqp*
sign(Dqc);
778 if (s<=0.) dq[mm] = 0.;
779 else if (aDqm<aDqp) dq[mm] = 0.5*aDqm*
sign(Dqc);
780 else dq[mm]=0.5*aDqp*
sign(Dqc);
783 #elif(PARA2LIM == NLIM) //w/o slope limiter
793 jonparasmooth_compute(realisinterp,dqrange,pl,y,dq1,dq2,lout,rout,smooth);
809 (fabs(dq[-1]-dq[0])/(fabs(dq[-1])+fabs(dq[0])+
SMALL)>0.1)||
810 (fabs(dq[1]-dq[0])/(fabs(dq[1])+fabs(dq[0])+
SMALL)>0.1)
813 *lout =y[0] - 0.5* (*dq);
814 *rout=y[0] + 0.5* (*dq);
823 #if(WHICHLIMITERTOUSEFORLR==0)
835 paracont(ddql, &y[0], &l);
836 paracont(ddqr, &y[1], &r);
855 #elif(WHICHLIMITERTOUSEFORLR==1)
859 *lout = y[0] - 0.5*dq[0];
860 *rout = y[0] + 0.5*dq[0];
881 void jonparasmooth_compute(
int realisinterp,
int dqrange,
int pl,
FTYPE *y,
FTYPE *dq1,
FTYPE *dq2,
FTYPE *lout,
FTYPE *rout,
int *smooth)
890 whichdq=a_whichdq+dqrange;
893 for(mm=-dqrange/2 ; mm<=dqrange/2 ; mm++) {
896 Dqp = 2.0 *dq1[mm+1];
899 if(fabs(Dqc)<=fabs(Dqm) && fabs(Dqc)<=fabs(Dqp)){
903 else if(fabs(Dqm)<=fabs(Dqp) && fabs(Dqm)<=fabs(Dqc)){
907 else if(fabs(Dqp)<=fabs(Dqm) && fabs(Dqp)<=fabs(Dqc)){
916 if(realisinterp==1 && pl==
RHO && dqrange>=5){
919 for(mm=-2 ; mm<=2 ; mm++) {
920 usepara+=(whichdq[mm]==0);
925 *lout=(1./8.)*(6.0*y[0]+3.0*y[-1]-y[1]);
926 *rout=(1./8.)*(6.0*y[0]-y[-1]+3.0*y[1]);
936 for(mm=-1 ; mm<=1 ; mm++) {
937 usepara+=(whichdq[mm]==0);
942 *lout=(1./8.)*(6.0*y[0]+3.0*y[-1]-y[1]);
943 *rout=(1./8.)*(6.0*y[0]-y[-1]+3.0*y[1]);
968 avgpointcoef=1.0/6.0;
969 *facecont=0.5*(y[0]+y[-1])-ddq*avgpointcoef;
971 avgpointcoef=1.0/8.0;
975 *facecont=0.5*(y[0]+y[-1])-ddq*avgpointcoef;
998 ddqtest[0]=y[-1]-2*y[-2]+y[-3];
999 ddqtest[1]=y[0]-2*y[-1]+y[-2];
1000 ddqtest[2]=y[1]-2*y[0]+y[-1];
1001 ddqtest[3]=y[2]-2*y[1]+y[0];
1007 if(fabs(ddqtest[i])>maxddq){
1015 ddqtest[
i]=ddqtest[
i]/maxddq;
1022 if(ddqtest[i]<-0.1) *smooth=0;
1028 for(i=0;i<=3;i++) dualfprintf(
fail_file,
"ddqtest[%d]=%g maxddq=%g whichmax=%d\n",i,ddqtest[i],maxddq,whichmax);
1036 *facecont = (1./16.)*(9.*y[0]+9*y[-1]-y[-2]-y[1]);
1041 if(
sign(ddqtest[0])==
sign(ddqtest[1]) &&
sign(ddqtest[1])==
sign(ddqtest[2]) &&
sign(ddqtest[2])==
sign(ddqtest[3])){
1043 dualfprintf(
fail_file,
"GOOD :: %g %g %g %g :: %d %d %d\n",
1051 dualfprintf(
fail_file,
"BAD::: %g %g %g %g :: %d %d %d\n",
1088 #if(PARAGENDQALLOWEXTREMUM)
1096 for(i=-dqrange/2+1;i<=dqrange/2;i++){
1101 if(fabs(qb)>(
FTYPE)numddq-0.1) qb=1.0;
1118 qa=(r-y[0])*(y[0]-l);
1130 qe=a6COEF*(y[0]-0.5*(l+r));
1135 qe=a6COEF*(y[0]-0.5*(l+r));
1142 #if(PARAGENDQALLOWEXTREMUM)
1143 if (qa <=0.0 && qb<=0.0 )
1153 #elif(NONMONOLIM==1)
1156 l = y[0] - 0.5* dq[0];
1157 r = y[0] + 0.5* dq[0];
1165 if (qd*(qd-qe)<0.0) l = (-(2.0+a6COEF)*r + 2.0*a6COEF*y[0])/(a6COEF-2.0);
1166 else if(qd*(qd+qe)<0.0) r = (-(2.0+a6COEF)*l + 2.0*a6COEF*y[0])/(a6COEF-2.0);
1178 #if(PARAGENDQALLOWEXTREMUM)
1180 qa=(r-y[0])*(y[0]-l);
1182 if (qa <=0. && qb<=0.0 ) {
1207 FTYPE dq0[NPR2INTERP][8];
1208 FTYPE *dq[NPR2INTERP];
1232 P[whicheom]=a_P[whicheom] + 4;
1246 #if(RADSHOCKFLAT&&EOMRADTYPE!=EOMRADNONE)
1252 #if( DOPPMREDUCE || DOPPMCONTACTSTEEP)
1264 Fi[whicheom] = Ficalc(dir,V[whicheom],P[whicheom]);
1285 para4gen(realisinterp,dqrange,pl,y,&loutpl[pl],&routpl[pl],dq[pl],&smooth);
1287 #if(DOPPMCONTACTSTEEP)
1289 if(!
RADFULLPL(pl)) parasteep(dir,pl,V[
EOMSETMHD],P[EOMSETMHD],ypl[pl],dq[pl],&loutpl[pl],&routpl[pl]);
1295 if(!
RADFULLPL(pl)) paraflatten(dir,pl,ypl[pl],Fi[EOMSETMHD],&loutpl[pl],&routpl[pl]);
1301 for(mm=-dqrange/2+1;mm<=dqrange/2;mm++){
1302 ddq[mm] = dq[pl][mm] - dq[pl][mm-1];
1304 checkparamonotonicity(smooth, dqrange, pl, ypl[pl], ddq, dq[pl], &loutpl[pl], &routpl[pl], &loutpl[pl], &routpl[pl]);
1306 #if(NONMONOLIM>0 && DOPPMREDUCE)
1309 if(!
RADFULLPL(pl)) paraflatten(dir,pl,ypl[pl],Fi[EOMSETMHD],&loutpl[pl],&routpl[pl]);
1325 *l = Fi * y[0] + ( 1.0 - Fi ) * (*l);
1326 *r = Fi * y[0] + ( 1.0 - Fi ) * (*r);
1335 FTYPE Ftilde,Ftilde1,Ftilde2;
1338 FTYPE P2diff,Pbottom;
1347 Pbottom=
sign(P2diff)/(fabs(P2diff)+
SMALL);
1348 Sp = (P[1] - P[-1]) * Pbottom ;
1354 Ftilde =
max( 0,
min( 1.0, 10.0 * (Sp -
SP0) ) );
1357 Ftilde1 = fabs(P[1] - P[-1]) / (
min(fabs(P[1]), fabs(P[-1]))+
SMALL );
1362 Ftilde2 = V[1] - V[-1];
1363 Ftilde *= ( (
FTYPE)(Ftilde2<=0.0) );
1373 FTYPE Ftilde,Ftilde1,Ftilde2;
1376 FTYPE V2diff,Vbottom;
1384 Sv = fabs(V[1] - V[-1]) / ( fabs(V[1]) + fabs(V[-1]) +
SMALL );
1389 Ftilde2 = V[1] - V[-1];
1390 Ftilde *= ( (
FTYPE)(Ftilde2>=0.0) );
1403 signdP = (P[1] - P[-1] > 0) * 2 - 1;
1405 Fi =
max( ftilde(dir, 0, V,P), ftilde(dir, -signdP, V,P) );
1419 signdV = (V[1] - V[-1] > 0) * 2 - 1;
1423 Div *= (V[1] - V[-1]);
1437 #if(RADSHOCKFLAT&&EOMRADTYPE!=EOMRADNONE)
1440 struct of_geom *ptrgeom=&geomdontuse;
1451 P[mm] += pressure_rho0_u_simple(i, j, k, loc, yrealpl[
RHO][mm],yrealpl[
UU][mm]);
1453 #if(RADSHOCKFLAT&&EOMRADTYPE!=EOMRADNONE)
1458 calc_tautot(prreal, ptrgeom, NULL, tautot, &tautotmax);
1460 P[mm] +=
MIN(tautotmax,1.0)*(4.0/3.0-1.0)*yrealpl[PRAD0][mm];
1479 #if(DOPPMSTEEPVARTYPE==0)
1481 #elif(DOPPMSTEEPVARTYPE==1)
1485 if(pl==
RHO || pl==
B1+odir1-1 || pl==
B1+odir2-1)
1489 etai=etaicalc(pl,y,V,P);
1491 parasteepgen(pl, etai, V, P, y, dq, l, r);
1512 pr_contact_compute(pl,y,dq,&prld,&prrd);
1515 mceta=4.0*
max( 0.25 - etai,0.0 );
1517 lmc = y[0] - 0.5*dq[0];
1518 rmc = y[0] + 0.5*dq[0];
1520 l0 = (*l) * mceta + lmc*(1.0-mceta);
1521 r0 = (*r) * mceta + rmc*(1.0-mceta);
1524 *l = l0 * ( 1.0 - etai ) + prld*etai;
1525 *r = r0 * ( 1.0 - etai ) + prrd*etai;
1538 *prld=y[-1]+0.5*dq[-1];
1539 *prrd=y[+1]-0.5*dq[+1];
1549 FTYPE delta2l,delta2r;
1554 FTYPE Pjump,dB,Bmean;
1560 FTYPE max3P,min3P,min3y;
1574 delta2l=ddcoef*( (y[ii+1]-y[ii]) - (y[ii] - y[ii-1]) );
1578 delta2r=ddcoef*( (y[ii+1]-y[ii]) - (y[ii] - y[ii-1]) );
1583 if(fabs(y[1]-y[-1])>
SMALL){
1584 etatilde=(-(delta2r-delta2l)/(y[1]-y[-1]));
1604 mmstart=-1; mmend=1;
1605 for(mm=mmstart;mm<=mmend;mm++){
1607 max3P=
max(max3P,fabs(P[mm]));
1608 min3P=
min(min3P,fabs(P[mm]));
1609 min3y=
min(min3y,fabs(y[mm]));
1617 Pjump=fabs(max3P - min3P)/min3P;
1623 if(pl>=
B1 && pl<=
B3){
1625 Bmean = 0.5*(y[-1] + y[1]);
1628 prjumpfactor=fabs(dB)/(fabs(Bmean)+fabs(dB)+
SMALL);
1633 prjumpfactor=fabs(y[1]-y[-1])/min3y;
1655 etatilde *= (
FTYPE)( Pjump <= 0.1*prjumpfactor);
1661 etatilde *= (
FTYPE)(prjumpfactor>=0.01);
1666 etatilde *= (
FTYPE)(delta2l*delta2r<=0.0);
1671 etai=
max(0.0,
min(20.0*(etatilde-0.05),1.0));