207 lines
5.8 KiB
Fortran
207 lines
5.8 KiB
Fortran
SUBROUTINE RTECMU
|
|
C =================
|
|
C
|
|
C Solution of the radiative transfer equation with Compton scattering
|
|
C for one frequency at a time (assuming the radiation intensity in other
|
|
C frequencies given), for a number of specific intensities (Gaussian)
|
|
C
|
|
INCLUDE 'IMPLIC.FOR'
|
|
INCLUDE 'BASICS.FOR'
|
|
INCLUDE 'MODELQ.FOR'
|
|
INCLUDE 'ALIPAR.FOR'
|
|
INCLUDE 'ITERAT.FOR'
|
|
PARAMETER (XCON=8.0935D-21,YCON=1.68638E-10)
|
|
COMMON/OPTDPT/DT(MDEPTH)
|
|
COMMON/AUXRTE/
|
|
* COMA(MDEPTH),COMB(MDEPTH),COMC(MDEPTH),VL(MDEPTH),
|
|
* COME(MDEPTH),U(MDEPTH),V(MDEPTH),BS(MDEPTH),
|
|
* AL(MDEPTH),BE(MDEPTH),GA(MDEPTH)
|
|
DIMENSION RI(MDEPTH),DTAU(MDEPTH),ST0(MDEPTH),ali(mdepth)
|
|
c PARAMETER (MW=10, nw=10, zero=0.)
|
|
PARAMETER (MW=3, nw=3, zero=0.)
|
|
DIMENSION rmu(MW),b(MW),rintmu(mw),rintpo(mw),rdwn(2*mw),
|
|
* rmmu(2*MW),wmmu(2*mw)
|
|
DIMENSION RJTOT(MDEPTH),RJNUT(MDEPTH),RDJ1(MDEPTH),
|
|
* ABSCAD(MDEPTH),ABRAD(MDEPTH),PLTOT(MDEPTH),
|
|
* retot(mdepth),re1(mdepth),re2(mdepth),
|
|
* recm(mdepth),recm0(mdepth),scom(mdepth)
|
|
c
|
|
c set-up Gaussian angle points
|
|
c
|
|
call gauleg(zero,un,rmu,b,nw,mw)
|
|
do i=1,nw
|
|
rmmu(i)=-rmu(nw-i+1)
|
|
rmmu(i+nw)=rmu(i)
|
|
wmmu(i)=b(nw-i+1)
|
|
wmmu(i+nw)=b(i)
|
|
end do
|
|
C
|
|
SUMW=0.
|
|
DO ID=1,ND
|
|
RJTOT(ID)=0.
|
|
RJNUT(ID)=0.
|
|
ABSCAD(ID)=0.
|
|
ABPLAD(ID)=0.
|
|
ABRAD(ID)=0.
|
|
pltot(id)=0.
|
|
retot(id)=0.
|
|
re1(id)=0.
|
|
re2(id)=0.
|
|
recm(id)=0.
|
|
recm0(id)=0.
|
|
END DO
|
|
C
|
|
c --------------------- loop over frequencies
|
|
c
|
|
do ij=1,nfreq
|
|
IJI=NFREQ-KIJ(IJ)+1
|
|
FR=FREQ(IJ)
|
|
xcomp=xcon*fr
|
|
CALL OPACF1(IJ)
|
|
if(icompt.gt.0) then
|
|
CALL RTECF0(IJ)
|
|
else
|
|
do id=1,nd
|
|
if(id.lt.nd) dt(id)=deldmz(id)*(absot(id+1)+absot(id))
|
|
comb(id)=elec(id)*sige/abso1(id)
|
|
vl(id)=emis1(id)/abso1(id)
|
|
coma(id)=0.
|
|
comc(id)=0.
|
|
bs(id)=0.
|
|
end do
|
|
end if
|
|
c
|
|
SUMW=SUMW+W(IJ)
|
|
do id=1,nd
|
|
x0=elec(id)*sige/abso1(id)
|
|
vl(id)=emis1(id)/abso1(id)
|
|
st0(id)=vl(id)+(comb(id)+bs(id))*rad(iji,id)
|
|
RDJ1(ID)=0.
|
|
ABSCAD(ID)=ABSCAD(ID)+SCAT1(ID)*W(IJ)
|
|
scom(id)=(comb(id)-x0*(un-two*xcomp)+bs(id))*rad(iji,id)
|
|
end do
|
|
rdh1=0.
|
|
rdhd=0.
|
|
c
|
|
if(iji.gt.1) then
|
|
do id=1,nd
|
|
st0(id)=st0(id)+coma(id)*rad(iji-1,id)
|
|
scom(id)=scom(id)+coma(id)*rad(iji-1,id)
|
|
end do
|
|
end if
|
|
if(iji.lt.nfreq) then
|
|
do id=1,nd
|
|
st0(id)=st0(id)+comc(id)*rad(iji+1,id)
|
|
scom(id)=scom(id)+comc(id)*rad(iji+1,id)
|
|
end do
|
|
end if
|
|
c
|
|
if(ifz0.lt.0) then
|
|
fr15=fr*1.d-15
|
|
bnu=bn*fr15*fr15*fr15
|
|
pland=0.
|
|
x=hk*fr/temp(nd)
|
|
ex=exp(-x)
|
|
pland=bnu*ex/(un-ex)
|
|
dplan=0.
|
|
x=hk*fr/temp(nd-1)
|
|
ex=exp(-x)
|
|
dplan=bnu*ex/(un-ex)
|
|
dplan=(pland-dplan)/dt(nd-1)
|
|
end if
|
|
C
|
|
c --------------------- loop over angles
|
|
c
|
|
do i=1,2*nw
|
|
do id=1,nd-1
|
|
dtau(id)=dt(id)/abs(rmmu(i))
|
|
end do
|
|
c
|
|
c boundary conditions
|
|
c
|
|
rup=extint(ij,i)
|
|
C
|
|
C diffusion approximation for semi-infinite atmospheres
|
|
C
|
|
if(ifz0.lt.0) rdown=pland+rmmu(i)*dplan
|
|
c
|
|
c the case of finite slab - irradiation of the back side
|
|
c
|
|
if(rmmu(i).gt.0.) rdown=rdwn(nw-i+1)
|
|
c
|
|
c solution of the transfer equation
|
|
c
|
|
call rtesol(dtau,st0,rup,rdown,rmmu(i),ri,ali)
|
|
c
|
|
if(rmmu(i).gt.0.) then
|
|
if(ri(1).lt.1.e-35) ri(1)=1.e-35
|
|
rintmu(i-nw)=ri(1)
|
|
rintpo(i-nw)=0.
|
|
rdh1=rdh1+rmmu(i)*wmmu(i)*ri(1)*half
|
|
end if
|
|
rdwn(i)=ri(nd)
|
|
rdhd=rdhd+abs(rmmu(i)*wmmu(i))*ri(nd)*half
|
|
DO ID=1,ND
|
|
RDJ1(ID)=RDJ1(ID)+WMMU(I)*RI(ID)*HALF
|
|
END DO
|
|
end do
|
|
C
|
|
c --------------------- end of loop over angles
|
|
c
|
|
BBN=1.4743E-2*(FR*1.E-15)**3
|
|
DO ID=1,ND
|
|
pla=0.
|
|
x=hk*fr/temp(nd)
|
|
ex=exp(-x)
|
|
pla=bbn*ex/(un-ex)*w(ij)
|
|
RJTOT(ID)=RJTOT(ID)+RDJ1(ID)*W(IJ)
|
|
RJNUT(ID)=RJNUT(ID)+RDJ1(ID)*FREQ(IJ)*W(IJ)
|
|
ABRAD(ID)=ABRAD(ID)+RDJ1(ID)*W(IJ)*(ABSO1(ID)-SCAT1(ID))
|
|
ABPLAD(ID)=ABPLAD(ID)+PLA*(ABSO1(ID)-SCAT1(ID))
|
|
PLTOT(ID)=PLTOT(ID)+PLA
|
|
retot(id)=retot(id)+abso1(id)*(st0(id)-rdj1(id))*w(ij)
|
|
re1(id)=re1(id)+(abso1(id)-scat1(id))*rdj1(id)*w(ij)
|
|
re2(id)=re2(id)+emis1(id)*w(ij)
|
|
recm(id)=recm(id)+(st0(id)-vl(id)-
|
|
* scat1(id)/abso1(id)*rdj1(id))*w(ij)
|
|
recm0(id)=recm0(id)+scom(id)*w(ij)
|
|
END DO
|
|
c
|
|
c wll=2.997925e18/fr
|
|
c WRITE(14,641) wll,rdh1,(RINTMU(I),RINTPO(I),I=1,NW)
|
|
END DO
|
|
C
|
|
c --------------------- end of loop over frequencies
|
|
c
|
|
c 641 FORMAT(1H ,f15.3,1pe15.5/(1P5E15.5))
|
|
c
|
|
tautot=dm(nd)*elec(nd)*sige/dens(nd)
|
|
DO ID=1,ND
|
|
ABSCAD(ID)=elec(ID)*sige/DENS(ID)
|
|
ABRAD(ID)=ABRAD(ID)/DENS(ID)/RJTOT(ID)
|
|
ABPLAD(ID)=ABPLAD(ID)/DENS(ID)/PLTOT(ID)
|
|
XNU=RJNUT(ID)/RJTOT(ID)
|
|
re1(id)=re1(id)/dens(id)
|
|
re2(id)=re2(id)/dens(id)
|
|
retot(id)=retot(id)/dens(id)
|
|
taurr=dm(id)*abscad(id)
|
|
xl=abplad(id)*(temp(id)/teff)**4
|
|
xr1=0.75*(1./sqrt(3.)+taurr*(1.-0.5*taurr/tautot))
|
|
xr3a=4.*temp(id)*ycon
|
|
xr3b=xnu*xcon
|
|
xr3=xr3a-xr3b
|
|
xr4=abscad(id)*xr3
|
|
xx1=xr1*(abrad(id)-xr4)
|
|
xx2=0.25/dm(nd)
|
|
xr=xx1+xx2
|
|
xtj=sig4p*4.*teff**4*xr1
|
|
XH1=ABPLAD(ID)*PLTOT(ID)
|
|
XH2=ABRAD(ID)*RJTOT(ID)
|
|
XH12=XH1-XH2
|
|
XH3=XR4*RJTOT(ID)
|
|
XH123=XH12+XH3
|
|
XHR=SIG4P*TEFF**4/DM(ND)
|
|
END DO
|
|
RETURN
|
|
END
|