subroutine get_SXR(ixImin1,ixImin2,ixImin3,ixImax1,ixImax2,ixImax3,ixOmin1,&
ixOmin2,ixOmin3,ixOmax1,ixOmax2,ixOmax3,w,x,fl,flux,El,Eu)
!synthesize thermal SXR from El keV to Eu keV released by cm^-3/m^-3
! volume of plasma in 1 s
!flux (cgs): photons cm^-3 s^-1
!flux (SI): photons m^-3 s^-1
use mod_global_parameters
integer, intent(in) :: ixImin1,ixImin2,ixImin3,ixImax1,ixImax2,&
ixImax3,ixOmin1,ixOmin2,ixOmin3,ixOmax1,ixOmax2,ixOmax3
integer, intent(in) :: El,Eu
double precision, intent(in) :: x(ixImin1:ixImax1,ixImin2:ixImax2,&
ixImin3:ixImax3,1:ndim)
double precision, intent(in) :: w(ixImin1:ixImax1,ixImin2:ixImax2,&
ixImin3:ixImax3,nw)
type(te_fluid), intent(in) :: fl
double precision, intent(out) :: flux(ixImin1:ixImax1,ixImin2:ixImax2,&
ixImin3:ixImax3)
integer :: ix1,ix2,ix3,ixO1,ixO2,ixO3
integer :: iE,numE
double precision :: I0,kb,keV,dE,Ei
double precision :: pth(ixImin1:ixImax1,ixImin2:ixImax2,ixImin3:ixImax3),&
Te(ixImin1:ixImax1,ixImin2:ixImax2,ixImin3:ixImax3),&
kbT(ixImin1:ixImax1,ixImin2:ixImax2,ixImin3:ixImax3)
double precision :: Ne(ixImin1:ixImax1,ixImin2:ixImax2,ixImin3:ixImax3),&
gff(ixImin1:ixImax1,ixImin2:ixImax2,ixImin3:ixImax3),&
fi(ixImin1:ixImax1,ixImin2:ixImax2,ixImin3:ixImax3)
double precision :: EM(ixImin1:ixImax1,ixImin2:ixImax2,ixImin3:ixImax3)
I0=3.01d-15 ! I0*4*pi*AU**2, I0 from Pinto (2015)
kb=const_kb
keV=1.0d3*const_ev
dE=0.1
numE=floor((Eu-El)/dE)
call fl%get_pthermal(w,x,ixImin1,ixImin2,ixImin3,ixImax1,ixImax2,ixImax3,&
ixOmin1,ixOmin2,ixOmin3,ixOmax1,ixOmax2,ixOmax3,pth)
call fl%get_rho(w,x,ixImin1,ixImin2,ixImin3,ixImax1,ixImax2,ixImax3,&
ixOmin1,ixOmin2,ixOmin3,ixOmax1,ixOmax2,ixOmax3,Ne)
call fl%get_var_Rfactor(w,x,ixImin1,ixImin2,ixImin3,ixImax1,ixImax2,&
ixImax3,ixOmin1,ixOmin2,ixOmin3,ixOmax1,ixOmax2,ixOmax3,Te)
Te(ixOmin1:ixOmax1,ixOmin2:ixOmax2,ixOmin3:ixOmax3)=pth(ixOmin1:ixOmax1,&
ixOmin2:ixOmax2,ixOmin3:ixOmax3)/(Ne(ixOmin1:ixOmax1,ixOmin2:ixOmax2,&
ixOmin3:ixOmax3)*Te(ixOmin1:ixOmax1,ixOmin2:ixOmax2,&
ixOmin3:ixOmax3))*unit_temperature
if (SI_unit) then
Ne(ixOmin1:ixOmax1,ixOmin2:ixOmax2,ixOmin3:ixOmax3)=Ne(ixOmin1:ixOmax1,&
ixOmin2:ixOmax2,ixOmin3:ixOmax3)*unit_numberdensity/1.d6 !m-3,m-3,m-3 -> cm-3
EM(ixOmin1:ixOmax1,ixOmin2:ixOmax2,&
ixOmin3:ixOmax3)=(Ne(ixOmin1:ixOmax1,ixOmin2:ixOmax2,&
ixOmin3:ixOmax3))**2*1.d6 !cm-3,cm-3,cm-3 m-3,m-3,m-3
else
Ne(ixOmin1:ixOmax1,ixOmin2:ixOmax2,ixOmin3:ixOmax3)=Ne(ixOmin1:ixOmax1,&
ixOmin2:ixOmax2,ixOmin3:ixOmax3)*unit_numberdensity
EM(ixOmin1:ixOmax1,ixOmin2:ixOmax2,&
ixOmin3:ixOmax3)=(Ne(ixOmin1:ixOmax1,ixOmin2:ixOmax2,&
ixOmin3:ixOmax3))**2
endif
kbT(ixOmin1:ixOmax1,ixOmin2:ixOmax2,&
ixOmin3:ixOmax3)=kb*Te(ixOmin1:ixOmax1,ixOmin2:ixOmax2,&
ixOmin3:ixOmax3)/keV
flux(ixOmin1:ixOmax1,ixOmin2:ixOmax2,ixOmin3:ixOmax3)=0.0d0
do iE=0,numE-1
Ei=dE*iE+El*1.d0
gff(ixOmin1:ixOmax1,ixOmin2:ixOmax2,ixOmin3:ixOmax3)=1.d0
do ix3=ixOmin3,ixOmax3
do ix2=ixOmin2,ixOmax2
do ix1=ixOmin1,ixOmax1
if (kbT(ix1,ix2,ix3)>0.01*Ei) then
if(kbT(ix1,ix2,ix3)<Ei) gff(ix1,ix2,ix3)=(kbT(ix1,ix2,&
ix3)/Ei)**0.4
fi(ix1,ix2,ix3)=(EM(ix1,ix2,ix3)*gff(ix1,ix2,&
ix3))*dexp(-Ei/(kbT(ix1,ix2,ix3)))/(Ei*dsqrt(kbT(ix1,ix2,ix3)))
else
fi(ix1,ix2,ix3)=zero
endif
enddo
enddo
enddo
flux(ixOmin1:ixOmax1,ixOmin2:ixOmax2,&
ixOmin3:ixOmax3)=flux(ixOmin1:ixOmax1,ixOmin2:ixOmax2,&
ixOmin3:ixOmax3)+fi(ixOmin1:ixOmax1,ixOmin2:ixOmax2,&
ixOmin3:ixOmax3)*dE
enddo
flux(ixOmin1:ixOmax1,ixOmin2:ixOmax2,&
ixOmin3:ixOmax3)=flux(ixOmin1:ixOmax1,ixOmin2:ixOmax2,&
ixOmin3:ixOmax3)*I0
end subroutine get_SXR