14 int sourcephysics(
FTYPE *pi,
FTYPE *
pr,
FTYPE *pf,
int *didreturnpf,
int *eomtype,
struct of_geom *ptrgeom,
struct of_state *q,
FTYPE *Ugeomfreei,
FTYPE *Ugeomfreef,
FTYPE *CUf,
FTYPE *CUimp,
FTYPE dissmeasure,
FTYPE *dUother,
FTYPE (*dUcomp)[NPR])
19 extern int koral_source_rad(
int whichsourcemethod,
FTYPE *pi,
FTYPE *pr,
FTYPE *pf,
int *didreturnpf,
int *eomtype,
FTYPE *Ui,
FTYPE *Uf,
FTYPE *CUf,
FTYPE *CUimp,
struct of_geom *geom,
struct of_state *q,
FTYPE dissmeasure,
FTYPE *dUother,
FTYPE (*dUcomp)[NPR]);
30 return(coolfunc_thindisk(h_over_r, pr, ptrgeom, q,dUcomp));
35 return(compute_sources_EOS(
WHICHEOS,
GLOBALMAC(EOSextraglobal,ptrgeom->i,ptrgeom->j,ptrgeom->k),pr, ptrgeom, q, Ugeomfreei, dUother, dUcomp));
38 return(coolfunc_rebecca_thindisk(h_over_r, pr, ptrgeom, q,dUcomp));
48 return(
koral_source_rad(
WHICHRADSOURCEMETHOD, pi, pr, pf, didreturnpf, eomtype, Ugeomfreei, Ugeomfreef, CUf, CUimp, ptrgeom, q, dissmeasure, dUother, dUcomp));
51 dualfprintf(
fail_file,
"cooling=%d does not exist in sourcephysics()\n",
cooling);
69 #define THETACOOL (h_over_r)
71 #define NOCOOLTHETAFACT (3.0)
72 #define COOLTAPER1(th) (exp(-pow((th)-M_PI*0.5,2.0)/(2.0*pow(nocoolthetafactor*h_over_r,2.0))))
73 #define SLOPE2 (1.0/(M_PI*0.5-nocoolthetafactor*h_over_r))
74 #define COOLTAPER2(th) (((th)<M_PI*0.5-nocoolthetafactor*h_over_r) ? (SLOPE2*(th)) : ( ((th)>M_PI*0.5+nocoolthetafactor*h_over_r) ? (-SLOPE2*((th)-M_PI)) : 1.0 ) )
75 #define SLOPE3 (1.0/(nocoolthetafactor*h_over_r))
76 #define WIDTHTAPER (nocoolthetafactor*h_over_r)
77 #define TAPERPOS1 (M_PI*0.5-nocoolthetafactor*h_over_r-WIDTHTAPER)
78 #define TAPERPOS2 (M_PI*0.5-nocoolthetafactor*h_over_r)
79 #define TAPERPOS3 (M_PI*0.5+nocoolthetafactor*h_over_r)
80 #define TAPERPOS4 (M_PI*0.5+nocoolthetafactor*h_over_r+WIDTHTAPER)
81 #define TAPERFUN1(th) (0.0)
82 #define TAPERFUN2(th) (SLOPE3*((th)-TAPERPOS1))
83 #define TAPERFUN3(th) (1.0)
84 #define TAPERFUN4(th) (-SLOPE3*((th)-TAPERPOS4))
85 #define TAPERFUN5(th) (0.0)
86 #define COOLTAPER3(th) (((th)<TAPERPOS1 ? TAPERFUN1(th) : ( ((th)<TAPERPOS2) ? TAPERFUN2(th) : ( ((th)<TAPERPOS3) ? TAPERFUN3(th): ( ((th)<TAPERPOS4) ? TAPERFUN4(th) : TAPERFUN5(th) )))) )
92 FTYPE X[
NDIM],
V[
NDIM],r,th,
R,Wcirc,cs_circ,rho,u,P,w,wcirc,dUcool;
98 FTYPE nocoolthetafactor,thetacool,taucool;
114 P=pressure_rho0_u_simple(ii,jj,kk,pp,rho,u);
117 bl_coord_ijk_2(ii,jj,kk,pp,X, V) ;
127 Wcirc = pow(R,-1.5) ;
128 cs_circ = thetacool/sqrt(R) ;
130 wcirc = rho*(1. + cs_circ*cs_circ) ;
135 dUcool = -(Wcirc/taucool)*( (w - wcirc)*(q->
ucon[
TT])*(q->
ucov[j])) ;
163 #define REBECCATHETACOOL (h_over_r)
164 #define REBECCATAUCOOL (2.0*M_PI)
165 #define REBECCANOCOOLTHETAFACT (1.0)
171 FTYPE X[
NDIM],
V[
NDIM],r,th,
R,Wcirc,cs_circ,rho,u,P,w,wcirc,dUcool;
180 FTYPE nocoolthetafactor,thetacool,taucool;
197 P=pressure_rho0_u_simple(ii,jj,kk,pp,rho,u);
200 bl_coord_ijk_2(ii,jj,kk,
CENT,X, V) ;
204 rpho=2.0*(1.0+cos(2.0/3.0*(acos(-
a))));
217 enk=u*(
gam-1.)/(pow(rho,
gam));
225 Wcirc = 1./(
a + pow(R,1.5)) ;
226 cs_circ = thetacool/sqrt(R) ;
229 wcirc = rho*(1. + cs_circ*cs_circ/(
gam - 1.)) ;
240 if(
t > 0. &&
dt < taucool/Wcirc && log(enk/enk0) > 0.) {
251 dUcool=-u*(Wcirc/taucool)*log(enk/enk0)*photoncapture;
293 FTYPE rhocode,ucode,Pcode,Rcode,Tcode;
296 FTYPE swsq,cv,ca,cvp,cap,mue,nf,ca2,cv2,cvp2,cap2;
297 FTYPE Tk,Tmev,lambda,xi,lambdap5,lambda2,lambda3,lambda4,lambda6,lambda8,lambda9;
298 FTYPE xi2,xi3,Tk2,lgTk,lgden;
301 FTYPE glambda,fpair,qpair,Qpair,Qpaircode;
302 FTYPE pgam2,pgam,pgamp5,pgam3o2,pgam7o2,pgam6;
303 FTYPE ft,fl,xp,yp,minfun,minf,fxy2,fxy,Qv,Qplasma,Qplasmacode;
304 FTYPE xnucode,Qecap,etae,Qecapcode,Qbrem,Qbremcode;
305 FTYPE Ev,Tv,Tvp,Kt,HOR,ntau,EXT;
306 FTYPE Qntot,cofactor;
307 FTYPE Tfeok,height,zhere,ztogo;
318 Pcode=pressure_rho0_u_simple(ii,jj,kk,pp,rhocode,ucode);
321 bl_coord_ijk_2(ii,jj,kk,pp,X, V) ;
346 Tfeok=5.9302E9*(pow(1.+1.018*pow(rho/1E6/mue,2./3.),0.5)-1.0)/Tk;
359 lambda=Tk/(5.9302E9);
360 xi=pow(rho*rhounit/mue/1E9,1.0/3.0)/lambda;
362 lambdap5=sqrt(lambda);
363 lambda2=lambda*lambda;
364 lambda3=lambda2*lambda;
365 lambda4=lambda2*lambda2;
366 lambda6=lambda2*lambda4;
367 lambda8=lambda4*lambda4;
368 lambda9=lambda8*lambda;
375 lgden=log10(2.0*rho/mue);
377 phys2code=1.0/(
edotunit/pow(Lunit,3.0));
385 b1=(Tk<1E10) ? 9.383
E-1 : 1.2383;
386 b2=(Tk<1E10) ? -4.141
E-1 : -0.8141;
387 b3=(Tk<1E10) ? 5.829
E-2 : 0.0;
388 c1=(Tk<1E10) ? 5.5924 : 4.9924;
392 glambda=1.0-13.04*lambda2+133.5*lambda4+1534.0*lambda6+918.6*lambda8;
393 fpair=(a0+a1*xi+a2*xi2)*exp(-c1*xi)/(xi3+b1/lambda+b2/lambda2+b3/lambda3);
394 qpair=pow(10.7480*lambda2+0.3967*lambdap5+1.0050,(-1.00))*pow(1.0+(rho*rhounit/mue)*pow(7.692E7*lambda3+9.715E6*lambdap5,(-1.0)),(-0.3));
395 Qpair=0.5*((cv2+ca2)+nf*(cvp2+cap2))*(1.0+((cv2-ca2)+nf*(cvp2+cap2))*qpair/((cv2+ca2)+nf*(cvp2+cap2)))*glambda*exp(-2.0/lambda)*fpair;
396 Qpaircode=Qpair*phys2code;
404 pgam2=1.1095E11*rho/mue/(Tk2*pow(1+pow(1.019
E-6*rho/mue,(2./3.)),(1./2.)));
407 pgam3o2=pow(pgamp5,3.0);
408 pgam7o2=pow(pgamp5,7.0);
409 pgam6=pgam2*pgam2*pgam2;
411 ft=2.4+0.6*pgamp5+0.51*pgam+1.25*pgam3o2;
412 fl=(8.6*pgam2+1.35*pgam7o2)/(225.-17.*pgam+pgam2);
413 xp=1./6.*(+17.5+lgden-3.*lgTk);
414 yp=1./6.*(-24.5+lgden+3.*lgTk);
415 minfun=yp-1.6+1.25*xp;
416 minf=(minfun>0.0) ? 0.0 : minfun;
417 fxy2=1.05+(0.39-1.25*xp-0.35*sin(4.5*xp)-0.3*exp(-pow(4.5*xp+0.9,2.0)))*exp(-pow(minf/(0.57-0.25*xp),2.0));
418 fxy=(fabs(xp)>0.7 || yp<0) ? 1.0 : fxy2;
419 Qv=3.00E21*lambda9*pgam6*exp(-pgam)*(ft+fl)*fxy;
420 Qplasma=(cv2+nf*cvp2)*Qv;
421 Qplasmacode=Qplasma*phys2code;
431 xnucode=30.97*pow(Tk/1E10,9.0/8.0)*pow(rho*rhounit/1.E10,-3.0/4.0)*exp(-6.096/(Tk/1E10));
432 if(xnucode>1.0) xnucode=1.0;
435 Qecap=9.2E33*(rho/1E10)*pow(Tk/1E11,6.0);
439 Qecap=1.1E31*pow(etae*Tk/1E11,9.0);
441 Qecapcode=Qecap*xnucode*phys2code;
446 Qbrem=3.4E33*pow(Tk/1E11,8.0)*pow(rho/1E13,1.0/3.0);
448 else Qbrem=1.5E33*pow(Tk/1E11,5.5)*pow(rho/1E13,2.0);
449 Qbremcode=Qbrem*phys2code;
469 zhere=fabs(R*cos(th));
471 height=fabs(ztogo-zhere);
472 ntau=2.5E-7*pow(Tk/1E11,5.0)*height;
473 ntau+=(4.5E-7*xnucode+2.7E-7)*pow(Tk/1E11,2.0)*(rho/1E10)*height;
494 cofactor=-(q->
ucov[
j]) ;
548 FTYPE rph,photoncapture;
557 bl_coord_ijk_2(ii,jj,kk,pp,X, V) ;
569 rph = 2.0*
MBH*(1.0 + cos(2.0/3.0*(acos(-
a/
MBH))));
570 photoncapture = (r>rph) ? 1.0 : 0.0;
573 dUdtau = compute_qdot_simple(ii,jj,kk,pp,rho,u);
581 cofactor=(q->
ucov[
j]) ;
583 dUcomp[
RADSOURCE2][j+1]=-dUdtau*cofactor*photoncapture;
607 FTYPE rhoscal,uuscal ;
608 FTYPE drhodt,dudt,W,isqr,ir ;
619 bl_coord_ijk_2(ii,jj,kk,pp,X, V) ;
627 uuscal = rhoscal*ir ;
631 alpha = 1./sqrt(-geom->gcon[
GIND(0,0)]) ;
632 ucon_norm[
TT] = 1./alpha ;
633 SLOOPA(j) ucon_norm[
j] = geom->gcon[
GIND(0,j)]*alpha ;
634 ucov_norm[
TT] = -alpha ;
641 dpdrho0 = dpdrho0_rho0_u_simple(ii,jj,kk,pp,pr[
RHO],pr[
UU]);
643 dU[
RHO] += (ucon_norm[
TT]) *drhodt ;
644 dU[
UU] += (((1.0+dpdrho0)*ucon_norm[
TT]*ucov_norm[
TT]) + dpdrho0) *drhodt ;
645 dU[
U1] += ((1.0+dpdrho0)*ucon_norm[TT]*ucov_norm[1] ) *drhodt ;
646 dU[
U2] += ((1.0+dpdrho0)*ucon_norm[TT]*ucov_norm[2] ) *drhodt ;
647 dU[
U3] += ((1.0+dpdrho0)*ucon_norm[TT]*ucov_norm[3] ) *drhodt ;
651 dudt = -0.05*(pr[
UU] -
UUMIN*uuscal)/
dt ;
653 dpdu = dpdu_rho0_u_simple(ii,jj,kk,pp,pr[
RHO],pr[
UU]);
655 dU[
UU] += ((1.0+dpdu)*ucon_norm[
TT]*ucov_norm[
TT] + dpdu) * dudt ;
656 dU[
U1] += ((1.0+dpdu)*ucon_norm[
TT]*ucov_norm[1]) * dudt ;
657 dU[
U2] += ((1.0+dpdu)*ucon_norm[
TT]*ucov_norm[2]) * dudt ;
658 dU[
U3] += ((1.0+dpdu)*ucon_norm[
TT]*ucov_norm[3]) * dudt ;