beamcalc Subroutine

public subroutine beamcalc(nd, nt, ealphadt, ebeam, ecritd, ecritt, tausbme, ftritbm, ibeam, ti, vol, svdt, palfdb, palftb, nhot, ehot)

Uses

Neutral beam alpha power and ion energy author: P J Knight, CCFE, Culham Science Centre ealphadt : input real : alpha particle birth energy (D-T) (keV) ebeam : input real : beam energy (keV) ecritd : input real : critical energy for electron/ion slowing down of the beam ion (deuterium neutral beam) (keV) ecritt : input real : critical energy for beam slowing down (tritium neutral beam) (keV) ftritbm: input real : beam tritium fraction (0.0 = deuterium beam) ibeam : input real : beam current (A) nd : input real : thermal deuterium density (/m3) nt : input real : thermal tritium density (/m3) svdt : input real : profile averaged for D-T (m3/s) tausbme: input real : beam ion slowing down time on electrons (s) ti : input real : thermal ion temperature (keV) vol : input real : plasma volume (m3) (95% flux surface) ehot : output real : average hot beam ion energy (keV) nhot : output real : hot beam ion density (/m3) palfdb : output real : alpha power from deut. beam-background fusion (MW) palftb : output real : alpha power from trit. beam-background fusion (MW) This routine calculates the neutral beam alpha power and ion energy. !

Arguments

Type IntentOptional AttributesName
real(kind=kind(1.0D0)), intent(in) :: nd
real(kind=kind(1.0D0)), intent(in) :: nt
real(kind=kind(1.0D0)), intent(in) :: ealphadt
real(kind=kind(1.0D0)), intent(in) :: ebeam
real(kind=kind(1.0D0)), intent(in) :: ecritd
real(kind=kind(1.0D0)), intent(in) :: ecritt
real(kind=kind(1.0D0)), intent(in) :: tausbme
real(kind=kind(1.0D0)), intent(in) :: ftritbm
real(kind=kind(1.0D0)), intent(in) :: ibeam
real(kind=kind(1.0D0)), intent(in) :: ti
real(kind=kind(1.0D0)), intent(in) :: vol
real(kind=kind(1.0D0)), intent(in) :: svdt
real(kind=kind(1.0D0)), intent(out) :: palfdb
real(kind=kind(1.0D0)), intent(out) :: palftb
real(kind=kind(1.0D0)), intent(out) :: nhot
real(kind=kind(1.0D0)), intent(out) :: ehot

Contents

Source Code


Source Code

  subroutine beamcalc(nd,nt,ealphadt,ebeam,ecritd,ecritt,tausbme, &
       ftritbm,ibeam,ti,vol,svdt,palfdb,palftb,nhot,ehot)

    !! Neutral beam alpha power and ion energy
    !! author: P J Knight, CCFE, Culham Science Centre
    !! ealphadt : input real :  alpha particle birth energy (D-T) (keV)
    !! ebeam  : input real :  beam energy (keV)
    !! ecritd : input real :  critical energy for electron/ion slowing down of
    !! the beam ion (deuterium neutral beam) (keV)
    !! ecritt : input real :  critical energy for beam slowing down
    !! (tritium neutral beam) (keV)
    !! ftritbm: input real :  beam tritium fraction (0.0 = deuterium beam)
    !! ibeam  : input real :  beam current (A)
    !! nd     : input real :  thermal deuterium density (/m3)
    !! nt     : input real :  thermal tritium density   (/m3)
    !! svdt   : input real :  profile averaged <sigma v> for D-T (m3/s)
    !! tausbme: input real :  beam ion slowing down time on electrons (s)
    !! ti     : input real :  thermal ion temperature (keV)
    !! vol    : input real :  plasma volume (m3) (95% flux surface)
    !! ehot   : output real : average hot beam ion energy (keV)
    !! nhot   : output real : hot beam ion density (/m3)
    !! palfdb : output real : alpha power from deut. beam-background fusion (MW)
    !! palftb : output real : alpha power from trit. beam-background fusion (MW)
    !! This routine calculates the neutral beam alpha power and ion energy.
    !!     !
    ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

        use constants, only: echarge, mproton

        implicit none

        ! Arguments
        real(kind(1.0D0)), intent(in) :: ealphadt, ebeam, ecritd, ecritt, &
            ftritbm, ibeam, nd, nt, svdt, tausbme, ti, vol
        real(kind(1.0D0)), intent(out) :: ehot, nhot, palfdb, palftb

        ! Local variables
        integer :: iabm
        real(kind(1.0D0)) :: ebmratd, ebmratt, ehotd, ehott, ifbmd, ifbmt, &
            ndhot, nhotmsd, nhotmst, nthot, presd, prest, s0d, s0t, svdhotn, &
            svthotn, tauseffd, tausefft, vcds, vcritd, vcritt, vcts, xcoefd, &
            xcoeft
        real(kind(1.0D0)) :: atmd, atmt, epsabs, epsrel

        ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

        ! Initialise shared variables
        atmd = 2.0D0   !  atomic mass of deuterium
        atmt = 3.0D0   !  atomic mass of tritium
        epsabs = 1.0D-7  !  absolute error
        epsrel = 1.0D-7  !  relative error

        ! D and T beam current fractions
        ifbmd = ibeam * (1.0D0 - ftritbm)
        ifbmt = ibeam * ftritbm

        ebmratd = ebeam/ecritd
        vcritd = sqrt(2.0D0*echarge*1000.0D0*ecritd/(mproton*atmd))
        tauseffd = tausbme/3.0D0 * log(1.0D0+(ebmratd)**1.5D0)
        nhotmsd = (1.0D0-ftritbm) * ibeam * tauseffd/(echarge * vol)

        ebmratt = ebeam/ecritt
        vcritt = sqrt(2.0D0*echarge*1000.0D0*ecritt/(mproton*atmt))
        tausefft = tausbme/3.0D0 * log(1.0D0+(ebmratt)**1.5D0)
        nhotmst = ftritbm * ibeam * tausefft/(echarge * vol)

        nhot = nhotmsd + nhotmst
        ndhot = nhotmsd
        nthot = nhotmst

        ! Average hot ion energy from Deng & Emmert, UWFDM-718, Jan 87
        vcds = 2.0D0 * ecritd * echarge * 1000.0D0/(2.0D0 * mproton)
        vcts = 2.0D0 * ecritt * echarge * 1000.0D0/(3.0D0 * mproton)

        s0d = ifbmd/(echarge * vol)
        s0t = ifbmt/(echarge * vol)

        xcoefd = atmd * mproton * tausbme * vcds * s0d / &
            (echarge * 1000.0D0 * 3.0D0)
        xcoeft = atmt * mproton * tausbme * vcts * s0t / &
            (echarge * 1000.0D0 * 3.0D0)

        presd = xcoefd * xbrak(ebeam,ecritd)
        prest = xcoeft * xbrak(ebeam,ecritt)

        ehotd = 1.5D0 * presd/ndhot
        ehott = 1.5D0 * prest/nthot
        ehot = (ndhot*ehotd + nthot*ehott)/nhot

        iabm = 2 ; svdhotn = 1.0D-4 * sgvhot(iabm,vcritd,ebeam)
        iabm = 3 ; svthotn = 1.0D-4 * sgvhot(iabm,vcritt,ebeam)

        palfdb = palphabm(ealphadt,ndhot,nt,svdhotn,vol,ti,svdt)
        palftb = palphabm(ealphadt,nthot,nd,svthotn,vol,ti,svdt)

    contains

        ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

        function xbrak(e0,ec)
            !! Hot ion energy parameter
            !! author: P J Knight, CCFE, Culham Science Centre
            !! e0 : input real :  neutral beam energy (keV)
            !! ec : input real :  critical energy for electron/ion slowing down of
            !! the beam ion (keV)
            !! This routine calculates something to do with the hot ion energy...
            !!             !
            ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

            implicit none

            real(dp) :: xbrak

            ! Arguments
            real(dp), intent(in) :: e0, ec

      real(dp) :: ans,t1,t2,t3,t4,xarg,xc,xcs

            ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

            xcs = e0/ec
            xc = sqrt(xcs)

            t1 = xcs/2.0D0
            t2 = (log((xcs + 2.0D0*xc + 1.0D0)/(xcs - xc + 1.0D0)))/6.0D0

            xarg = (2.0D0*xc -1.0D0)/sqrt(3.0D0)
            t3 = (atan(xarg))/sqrt(3.0D0)
            t4 = 0.3022999D0

            ans = t1 + t2 - t3 - t4
            xbrak = ans

        end function xbrak

        ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

    function palphabm(ealphadt,nbm,nblk,sigv,vol,ti,svdt)

      !! Alpha power from beam-background fusion
      !! author: P J Knight, CCFE, Culham Science Centre
      !! ealphadt : input real :  alpha particle birth energy (D-T) (keV)
      !! nblk   : input real :  thermal ion density (/m3)
      !! nbm    : input real :  hot beam ion density (/m3)
      !! sigv   : input real :  hot beam fusion reaction rate (m3/s)
      !! svdt   : input real :  profile averaged <sigma v> for D-T (m3/s)
      !! ti     : input real :  thermal ion temperature (keV)
      !! vol    : input real :  plasma volume (m3)
      !! This routine calculates the alpha power from
      !! beam-background fusion.
      !!       !
      ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

      implicit none

      real(dp) :: palphabm

      !  Arguments

      real(dp), intent(in) :: ealphadt,nblk,nbm,sigv,svdt,ti,vol

      !  Local variables

      real(dp) :: ratio

      ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

      ratio = svdt / bosch_hale(ti,1)

      palphabm = echarge/1000.0D0 * nbm * nblk * sigv * ealphadt * vol * ratio

    end function palphabm

    ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

    function sgvhot(iabm,vcrx,ebeam)

      !! Hot beam fusion reaction rate
      !! author: P J Knight, CCFE, Culham Science Centre
      !! ebeam  : input real :  neutral beam energy (keV)
      !! iabm   : input integer : switch denoting type of ion (2=D,3=T)
      !! vcrx   : input real :  critical velocity for electron/ion slowing down of
      !! the beam ion (m/s)
      !! This routine calculates the hot beam fusion reaction rate in m3/s.
      !!       !
      ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

      use error_handling, only: idiags, report_error
      use maths_library, only: quanc8

      implicit none

      real(dp) :: sgvhot

      !  Arguments
      integer, intent(in) :: iabm
      real(dp), intent(in) :: ebeam, vcrx

      !  Local variables

      integer :: nofun
      real(dp) :: abm,abserr,epsabs1,flag,svint,t1,t2, &
           vbeam,vbeams,xv

      ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

      epsabs1 = 1.0D-33

      if (iabm == 2) then
         abm = atmd
      else if (iabm == 3) then
         abm = atmt
      else
         idiags(1) = iabm ; call report_error(84)
      end if

      !  Initialise global variables

      vcritx = vcrx

      !  Beam velocity

      vbeams = ebeam * echarge * 1000.0D0 * 2.0D0/(abm * mproton)
      vbeam = sqrt(vbeams)

      xv = vbeam/vcrx
      t1 = 3.0D0 * vcrx/log(1.0D0+(xv**3))

      call quanc8(fsv,0.0D0,xv,epsabs1,epsrel,svint,abserr,nofun,flag)
      t2 = svint

      sgvhot = t1 * t2

    end function sgvhot

    end subroutine beamcalc