get_SXR Subroutine

public subroutine get_SXR(ixImin1, ixImin2, ixImin3, ixImax1, ixImax2, ixImax3, ixOmin1, ixOmin2, ixOmin3, ixOmax1, ixOmax2, ixOmax3, w, x, fl, flux, El, Eu)

Uses

  • proc~~get_sxr~~UsesGraph proc~get_sxr get_SXR module~mod_global_parameters mod_global_parameters proc~get_sxr->module~mod_global_parameters module~mod_basic_types mod_basic_types module~mod_global_parameters->module~mod_basic_types module~mod_connectivity mod_connectivity module~mod_global_parameters->module~mod_connectivity module~mod_constants mod_constants module~mod_global_parameters->module~mod_constants module~mod_physicaldata mod_physicaldata module~mod_global_parameters->module~mod_physicaldata module~mod_variables mod_variables module~mod_global_parameters->module~mod_variables mpi mpi module~mod_global_parameters->mpi module~mod_variables->module~mod_basic_types

Arguments

Type IntentOptional Attributes Name
integer, intent(in) :: ixImin1
integer, intent(in) :: ixImin2
integer, intent(in) :: ixImin3
integer, intent(in) :: ixImax1
integer, intent(in) :: ixImax2
integer, intent(in) :: ixImax3
integer, intent(in) :: ixOmin1
integer, intent(in) :: ixOmin2
integer, intent(in) :: ixOmin3
integer, intent(in) :: ixOmax1
integer, intent(in) :: ixOmax2
integer, intent(in) :: ixOmax3
double precision, intent(in) :: w(ixImin1:ixImax1,ixImin2:ixImax2,ixImin3:ixImax3,nw)
double precision, intent(in) :: x(ixImin1:ixImax1,ixImin2:ixImax2,ixImin3:ixImax3,1:ndim)
type(te_fluid), intent(in) :: fl
double precision, intent(out) :: flux(ixImin1:ixImax1,ixImin2:ixImax2,ixImin3:ixImax3)
integer, intent(in) :: El
integer, intent(in) :: Eu

Calls

proc~~get_sxr~~CallsGraph proc~get_sxr get_SXR dexp dexp proc~get_sxr->dexp

Called by

proc~~get_sxr~~CalledByGraph proc~get_sxr get_SXR proc~integrate_emission_cartesian integrate_emission_cartesian proc~integrate_emission_cartesian->proc~get_sxr proc~integrate_emission_spherical integrate_emission_spherical proc~integrate_emission_spherical->proc~get_sxr proc~integrate_sxr_datresol integrate_SXR_datresol proc~integrate_sxr_datresol->proc~get_sxr proc~get_image get_image proc~get_image->proc~integrate_emission_cartesian proc~get_image->proc~integrate_emission_spherical proc~get_image_datresol get_image_datresol proc~get_image_datresol->proc~integrate_sxr_datresol proc~get_euv_image get_EUV_image proc~get_euv_image->proc~get_image proc~get_euv_image->proc~get_image_datresol proc~get_sxr_image get_SXR_image proc~get_sxr_image->proc~get_image proc~get_sxr_image->proc~get_image_datresol proc~get_whitelight_image get_whitelight_image proc~get_whitelight_image->proc~get_image

Source Code

    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