lasdrv Subroutine

public subroutine lasdrv(edrive, gain, etadrv)

Routine to calculate parameters of a laser driver suitable for inertial fusion energy author: P J Knight, CCFE, Culham Science Centre edrive : input real : Driver energy (J) gain : output real : Target gain etadrv : output real : Driver efficiency This routine calculates the parameters of a laser driver suitable for inertial fusion energy. Gain and driver efficiency data are taken from Figures 1 and 2 of Meier and Rosenberg. Meier and Rosenberg, Fusion Technology vol.21 (1992) p.1552 F/MI/PJK/LOGBOOK12, p.86

Arguments

Type IntentOptional AttributesName
real(kind=dp), intent(in) :: edrive
real(kind=dp), intent(out) :: gain
real(kind=dp), intent(out) :: etadrv

Contents

Source Code


Source Code

  subroutine lasdrv(edrive,gain,etadrv)

    !! Routine to calculate parameters of a laser driver
    !! suitable for inertial fusion energy
    !! author: P J Knight, CCFE, Culham Science Centre
    !! edrive : input real : Driver energy (J)
    !! gain   : output real : Target gain
    !! etadrv : output real : Driver efficiency
    !! This routine calculates the parameters of a laser driver
    !! suitable for inertial fusion energy.
    !! Gain and driver efficiency data are taken from Figures 1 and 2 of
    !! Meier and Rosenberg.
    !! Meier and Rosenberg, Fusion Technology vol.21 (1992) p.1552
    !! F/MI/PJK/LOGBOOK12, p.86
    !!
    ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

    implicit none

    !  Arguments

    real(dp), intent(in) :: edrive
    real(dp), intent(out) :: etadrv,gain

    !  Local variables

    real(dp) :: e,de
    real(dp), dimension(10) :: gve,eve
    integer :: ie

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

    !  GVE(K): target gain at EDRIVE = K MegaJoules

    gve(1)  = 63.0D0
    gve(2)  = 95.0D0
    gve(3)  = 112.0D0
    gve(4)  = 125.0D0
    gve(5)  = 136.0D0
    gve(6)  = 144.0D0
    gve(7)  = 151.0D0
    gve(8)  = 157.0D0
    gve(9)  = 162.0D0
    gve(10) = 166.0D0

    !  EVE(K): driver efficiency at EDRIVE = K MegaJoules

    eve(1)  = 0.082D0
    eve(2)  = 0.079D0
    eve(3)  = 0.076D0
    eve(4)  = 0.072D0
    eve(5)  = 0.069D0
    eve(6)  = 0.064D0
    eve(7)  = 0.059D0
    eve(8)  = 0.054D0
    eve(9)  = 0.048D0
    eve(10) = 0.042D0

    e = 1.0D-6 * edrive
    ie = int(e)
    de = e - dble(ie)

    !  Assume linear interpolations and extrapolations
    !  Would be better to prevent extrapolation

    if (ie <= 1) then

       gain   = gve(2) - 1.0D-6*(edrive-2.0D6)*(gve(1)-gve(2))
       etadrv = eve(2) - 1.0D-6*(edrive-2.0D6)*(eve(1)-eve(2))

    else if (ie >= 9) then

       gain   = gve(9) + 1.0D-6*(edrive-9.0D6)*(gve(10)-gve(9))
       etadrv = eve(9) + 1.0D-6*(edrive-9.0D6)*(eve(10)-eve(9))

    else

       gain = gve(ie)   + de*(gve(ie+1)-gve(ie))
       etadrv = eve(ie) + de*(eve(ie+1)-eve(ie))

    end if

    !  Ensure sensible values

    gain = max(0.01D0,gain)
    etadrv = max(0.01D0,etadrv)

  end subroutine lasdrv