component_masses Subroutine

public subroutine component_masses()

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 --------------------

Arguments

None

Contents

Source Code


Source Code

    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