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
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
real(kind=dp), | intent(in) | :: | edrive | |||
real(kind=dp), | intent(out) | :: | gain | |||
real(kind=dp), | intent(out) | :: | etadrv |
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