Calculations for component masses author: J. Morris, CCFE, Culham Science Centre Calculations for component masses
CCFE and KIT HCPB -------- CCFE HCPB only ------------------- KIT HCPB only --------------- added --------------------
subroutine component_masses
!! Calculations for component masses
!! author: J. Morris, CCFE, Culham Science Centre
!! Calculations for component masses
!
! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
! variables used in ccfe hcpb but not kit hcpb:
use constants, only: pi
use build_variables, only: fwareaib, fwith, fwareaob, fwoth, fwarea
use divertor_variables, only: divsur, divclfr, divplt, fdiva, divmas, divdens
use physics_variables, only: rminor, rmajor, idivrt, sarea
! variables below used in kit hcpb but not ccfe hcpb:
use build_variables, only: blnkith, blbuith, blbmith, blbpith, blnkoth, &
blbuoth, blbmoth, blbpoth
! fwbs_variables:
use fwbs_variables, only: volblkt, vfblkt, & !! CCFE and KIT HCPB --------
whtblbe, whtblss, denstl, whtblkt, &
volshld, vfshld, coolmass, fwclfr, & !! CCFE HCPB only -------------------
breeder_f, breeder_multiplier, whtbltibe12, whtblli4sio4, wtblli2o, &
vfcblkt, vfpblkt, whtshld, wpenshld, fwmass, fw_armour_vol, &
fw_armour_thickness, fw_armour_mass, armour_fw_bl_mass, &
volblkti, volblkto, iblnkith, fblhebmi, & !! KIT HCPB only ---------------
fblhebpi,fblhebmo, fblhebpo, fblss, fblbe, &
whtblbreed, densbreed, fblbreed, &
iblanket, denw, vffwi, vffwo, volfw, & !! added --------------------
fblss_ccfe, fblli2sio4, fbltibe12
implicit none
! Only ccfe hcpb has local varibles i.e. coolvol
! Local variables
! Coolant volume (m3)
real(dp) :: coolvol
! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
! CCFE HCPB modal calculates the coolant mass,
! have added an if staement using the iblanket switch for this.
! N.B. iblanket=1 for CCFE HCPB and iblanket=3 for the same with TBR using Shimwell.
if ((iblanket==1).or.(iblanket==3)) then
! Start adding components of the coolant mass:
! Divertor coolant volume (m3)
coolvol = divsur * divclfr * divplt
! Blanket coolant volume (m3)
coolvol = coolvol + volblkt*vfblkt
! Shield coolant volume (m3)
coolvol = coolvol + volshld*vfshld
! First wall coolant volume (m3)
coolvol = coolvol + fwareaib*fwith*vffwi + fwareaob*fwoth*vffwo
! Mass of He coolant = volume * density at typical coolant temperatures and pressures (kg)
coolmass = coolvol*1.517D0
! Average first wall coolant fraction, only used by old routines in fispact.f90, safety.f90
fwclfr = (fwareaib*fwith*vffwi + fwareaob*fwoth*vffwo) / (fwarea*0.5D0*(fwith+fwoth))
endif
! CCFE HCPB calculates the mass of the divertor, blanket (including seprate masses for each material),
! shield, FW and FW armour.
! KIT HCPB calculates the mass of the blanket (including seprate masses for each material)
! and the void fraction for the blanket.
! N.B. iblanket=1 for CCFE HCPB and iblanket=3 for the same with TBR using Shimwell.
if ((iblanket==1).or.(iblanket==3)) then
! Component masses
! Divertor mass (kg)
divsur = fdiva * 2.0D0 * pi * rmajor * rminor
if (idivrt == 2) divsur = divsur * 2.0D0
divmas = divsur * divdens * (1.0D0 - divclfr) * divplt
! Shield mass (kg)
whtshld = volshld * denstl * (1.0D0 - vfshld)
! Penetration shield mass (set = internal shield) (kg)
wpenshld = whtshld
! First wall volume (m^3)
volfw = (fwareaib*fwith*(1.0D0-vffwi) + fwareaob*fwoth*(1.0D0-vffwo))
! First wall mass, excluding armour (kg)
fwmass = denstl * volfw
! First wall armour volume (m^3)
fw_armour_vol = sarea*fw_armour_thickness
! First wall armour mass (kg)
fw_armour_mass = fw_armour_vol*denw
endif
if ((iblanket==1).or.(iblanket==3)) then
if (breeder_f < 1.0D-10) breeder_f = 1.0D-10
if (breeder_f > 1.0D0 ) breeder_f = 1.0D0
! fbltibe12 = fblli2sio4 * (1 - breeder_f)/breeder_f
! New combined variable breeder_multiplier
! Lithium orthosilicate fraction:
fblli2sio4 = breeder_f * breeder_multiplier
! Titanium beryllide fraction, and mass (kg):
fbltibe12 = breeder_multiplier - fblli2sio4
whtbltibe12 = volblkt * fbltibe12 * 2260.0D0
! Blanket Lithium orthosilicate mass (kg)
! Ref: www.rockwoodlithium.com...
whtblli4sio4 = volblkt * fblli2sio4 * 2400.0D0
! TODO sort this out so that costs model uses new variables.
! #327 For backwards compatibility, set the old blanket masses the same:
whtblbe = whtbltibe12
wtblli2o = whtblli4sio4
! Steel fraction by volume is the remainder:
fblss_ccfe = 1.0D0 - fblli2sio4 - fbltibe12 - vfcblkt - vfpblkt
! Steel mass (kg)
whtblss = volblkt * fblss_ccfe * denstl
! Total blanket mass (kg)
whtblkt = whtbltibe12 + whtblli4sio4 + whtblss
! Total mass of first wall and blanket
armour_fw_bl_mass = fw_armour_mass + fwmass + whtblkt
endif
if (iblanket==2) then
! Mass of steel in blanket (kg)
if (iblnkith==1) then
whtblss = denstl * ( volblkti/blnkith * ( blbuith * fblss + blbmith * (1.0D0-fblhebmi) + &
blbpith * (1.0D0-fblhebpi) ) + volblkto/blnkoth * ( blbuoth * fblss + &
blbmoth * (1.0D0-fblhebmo) + blbpoth * (1.0D0-fblhebpo) ) )
else
whtblss = denstl * ( volblkto/blnkoth * ( blbuoth * fblss + &
blbmoth * (1.0D0-fblhebmo) + blbpoth * (1.0D0-fblhebpo) ) )
end if
! Mass of beryllium in blanket (kg)
if (iblnkith==1) then
whtblbe = 1850.0D0 * fblbe * ( (volblkti * blbuith/blnkith) + &
(volblkto * blbuoth/blnkoth) )
else
whtblbe = 1850.0D0 * fblbe * (volblkto * blbuoth/blnkoth)
end if
! Mass of breeder material in blanket (kg)
if (iblnkith==1) then
whtblbreed = densbreed * fblbreed * ( (volblkti * blbuith/blnkith) + &
(volblkto * blbuoth/blnkoth) )
else
whtblbreed = densbreed * fblbreed * (volblkto * blbuoth/blnkoth)
end if
! Mass of blanket (kg)
whtblkt = whtblss + whtblbe + whtblbreed
! Void fraction of blanket inboard portion
if (iblnkith==1) then
vfblkti = volblkti/volblkt * ( (blbuith/blnkith) * (1.0D0 - fblbe - fblbreed - fblss) &
+ (blbmith/blnkith) * fblhebmi + (blbpith/blnkith) * fblhebpi )
else
vfblkti = 0.0D0
end if
! Void fraction of blanket outboard portion
vfblkto = volblkto/volblkt * ( (blbuoth/blnkoth) * (1.0D0 - fblbe - fblbreed - fblss) &
+ (blbmoth/blnkoth) * fblhebmo + (blbpoth/blnkoth) * fblhebpo )
! Void fraction of blanket
vfblkt = vfblkti + vfblkto
endif
end subroutine component_masses