Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
82 changes: 55 additions & 27 deletions process/costs.py
Original file line number Diff line number Diff line change
Expand Up @@ -1438,11 +1438,19 @@ def acc2221(self):

# Superconductor ($/m)

costtfsc = (
cost_variables.ucsc[tfcoil_variables.i_tf_sc_mat - 1]
* tfcoil_variables.whtconsc
/ (tfcoil_variables.tfleng * tfcoil_variables.n_tf_turn)
)
if cost_variables.supercond_cost_model == 0:

costtfsc = (
cost_variables.ucsc[tfcoil_variables.i_tf_sc_mat - 1]
* tfcoil_variables.whtconsc
/ (tfcoil_variables.tfleng * tfcoil_variables.n_tf_turn)
)
else:
costtfsc = (
cost_variables.sc_mat_cost_0[tfcoil_variables.i_tf_sc_mat - 1]
* tfcoil_variables.j_crit_str_0[tfcoil_variables.i_tf_sc_mat - 1]
/ tfcoil_variables.j_crit_str_tf
)

# Copper ($/m)

Expand Down Expand Up @@ -1565,18 +1573,28 @@ def acc2222(self):

for i in range(0, npf):
# Superconductor ($/m)
if pfcoil_variables.ipfres == 0:
costpfsc = (
cost_variables.ucsc[pfcoil_variables.isumatpf - 1]
* (1.0e0 - pfcoil_variables.fcupfsu)
* (1.0e0 - pfcoil_variables.vf[i])
* abs(pfcoil_variables.ric[i] / pfcoil_variables.turns[i])
* 1.0e6
/ pfcoil_variables.rjconpf[i]
* tfcoil_variables.dcond[pfcoil_variables.isumatpf - 1]
)
if cost_variables.supercond_cost_model == 0:
if pfcoil_variables.ipfres == 0:
costpfsc = (
cost_variables.ucsc[pfcoil_variables.isumatpf - 1]
* (1.0e0 - pfcoil_variables.fcupfsu)
* (1.0e0 - pfcoil_variables.vf[i])
* abs(pfcoil_variables.ric[i] / pfcoil_variables.turns[i])
* 1.0e6
/ pfcoil_variables.rjconpf[i]
* tfcoil_variables.dcond[pfcoil_variables.isumatpf - 1]
)
else:
costpfsc = 0.0e0
else:
costpfsc = 0.0e0
if pfcoil_variables.ipfres == 0:
costpfsc = (
cost_variables.sc_mat_cost_0[pfcoil_variables.isumatpf - 1]
* tfcoil_variables.j_crit_str_0[pfcoil_variables.isumatpf - 1]
/ pfcoil_variables.j_crit_str_pf
)
else:
costpfsc = 0.0

# Copper ($/m)
if pfcoil_variables.ipfres == 0:
Expand Down Expand Up @@ -1621,18 +1639,28 @@ def acc2222(self):

if build_variables.iohcl == 1:
# Superconductor ($/m)
# Issue #328 Use CS conductor cross-sectional area (m2)
if pfcoil_variables.ipfres == 0:
costpfsc = (
cost_variables.ucsc[pfcoil_variables.isumatoh - 1]
* pfcoil_variables.awpoh
* (1 - pfcoil_variables.vfohc)
* (1 - pfcoil_variables.fcuohsu)
/ pfcoil_variables.turns[pfcoil_variables.nohc - 1]
* tfcoil_variables.dcond[pfcoil_variables.isumatoh - 1]
)
if cost_variables.supercond_cost_model == 0:
# Issue #328 Use CS conductor cross-sectional area (m2)
if pfcoil_variables.ipfres == 0:
costpfsc = (
cost_variables.ucsc[pfcoil_variables.isumatoh - 1]
* pfcoil_variables.awpoh
* (1 - pfcoil_variables.vfohc)
* (1 - pfcoil_variables.fcuohsu)
/ pfcoil_variables.turns[pfcoil_variables.nohc - 1]
* tfcoil_variables.dcond[pfcoil_variables.isumatoh - 1]
)
else:
costpfsc = 0.0e0
else:
costpfsc = 0.0e0
if pfcoil_variables.ipfres == 0:
costpfsc = (
cost_variables.sc_mat_cost_0[pfcoil_variables.isumatoh - 1]
* tfcoil_variables.j_crit_str_0[pfcoil_variables.isumatoh - 1]
/ pfcoil_variables.j_crit_str_cs
)
else:
costpfsc = 0.0e0

# Copper ($/m)

Expand Down
13 changes: 13 additions & 0 deletions process/pfcoil.py
Original file line number Diff line number Diff line change
Expand Up @@ -638,6 +638,13 @@ def pfcoil(self):
tfv.tcritsc,
)

# Strand critical current calculation for costing in $/kAm
# = superconducting filaments jc * (1 - strand copper fraction)
if pfv.isumatoh in {2, 6, 8}:
pfv.j_crit_str_pf = jsc
else:
pfv.j_crit_str_pf = jsc * (1 - pfv.fcupfsu)

# Length of conductor

rll = 2.0e0 * constants.pi * pfv.rpf[i] * pfv.turns[i]
Expand Down Expand Up @@ -1193,6 +1200,12 @@ def ohcalc(self):
tfv.bcritsc,
tfv.tcritsc,
)
# Strand critical current calculation for costing in $/kAm
# = superconducting filaments jc * (1 - strand copper fraction)
if pfv.isumatoh in {2, 6, 8}:
pfv.j_crit_str_cs = pfv.jscoh_eof
else:
pfv.j_crit_str_cs = pfv.jscoh_eof * (1 - pfv.fcuohsu)

pfv.rjohc = jcritwp * pfv.awpoh / pfv.areaoh

Expand Down
32 changes: 32 additions & 0 deletions process/sctfcoil.py
Original file line number Diff line number Diff line change
Expand Up @@ -665,6 +665,10 @@ def supercon(
# Critical current in cable
icrit = j_crit_cable * acs

# Strand critical current calculation for costing in $/kAm
# = Superconducting filaments jc * (1 - strand copper fraction)
tfcoil_variables.j_crit_str_tf = j_crit_sc * (1.0e0 - fcu)

elif isumat == 2: # Bi-2212 high temperature superconductor parameterization
# Current density in a strand of Bi-2212 conductor
# N.B. jcrit returned by superconductors.bi2212 is the critical current density
Expand All @@ -679,6 +683,10 @@ def supercon(
# Critical current in cable
icrit = j_crit_cable * acs * fcond

# Strand critical current calulation for costing in $ / kAm
# Copper in the strand is already accounted for
tfcoil_variables.j_crit_str_tf = j_crit_sc

elif isumat == 3: # NbTi data
bc20m = 15.0e0
tc0m = 9.3e0
Expand All @@ -689,6 +697,10 @@ def supercon(
# Critical current in cable
icrit = j_crit_cable * acs

# Strand critical current calulation for costing in $ / kAm
# = superconducting filaments jc * (1 -strand copper fraction)
tfcoil_variables.j_crit_str_tf = j_crit_sc * (1.0e0 - fcu)

elif isumat == 4: # ITER Nb3Sn parameterization, but user-defined parameters
bc20m = bcritsc
tc0m = tcritsc
Expand All @@ -704,6 +716,10 @@ def supercon(
# Critical current in cable
icrit = j_crit_cable * acs

# Strand critical current calulation for costing in $ / kAm
# = superconducting filaments jc * (1 -strand copper fraction)
tfcoil_variables.j_crit_str_tf = j_crit_sc * (1.0e0 - fcu)

elif isumat == 5: # WST Nb3Sn parameterisation
bc20m = 32.97e0
tc0m = 16.06e0
Expand All @@ -721,6 +737,10 @@ def supercon(
# Critical current in cable
icrit = j_crit_cable * acs

# Strand critical current calulation for costing in $ / kAm
# = superconducting filaments jc * (1 -strand copper fraction)
tfcoil_variables.j_crit_str_tf = j_crit_sc * (1.0e0 - fcu)

elif isumat == 6: # "REBCO" 2nd generation HTS superconductor in CrCo strand
raise ValueError(
"sctfcoil.supercon has been called but tfcoil_variables.i_tf_sc_mat=6"
Expand All @@ -737,6 +757,10 @@ def supercon(
# Critical current in cable
icrit = j_crit_cable * acs

# Strand critical current calulation for costing in $ / kAm
# = superconducting filaments jc * (1 -strand copper fraction)
tfcoil_variables.j_crit_str_tf = j_crit_sc * (1.0e0 - fcu)

elif isumat == 8: # Durham Ginzburg-Landau critical surface model for REBCO
bc20m = 430
tc0m = 185
Expand All @@ -755,6 +779,10 @@ def supercon(
# Critical current in cable (copper added at this stage in HTS cables)
icrit = j_crit_cable * acs

# Strand critical current calulation for costing in $ / kAm
# Already includes buffer and support layers so no need to include fcu here
tfcoil_variables.j_crit_str_tf = j_crit_sc

elif (
isumat == 9
): # Hazelton experimental data + Zhai conceptual model for REBCO
Expand All @@ -777,6 +805,10 @@ def supercon(
# Critical current in cable (copper added at this stage in HTS cables)
icrit = j_crit_cable * acs

# Strand critical current calulation for costing in $ / kAm
# = superconducting filaments jc * (1 -strand copper fraction)
tfcoil_variables.j_crit_str_tf = j_crit_sc * (1.0e0 - fcu)

else:
error_handling.idiags[0] = isumat
error_handling.report_error(105)
Expand Down
12 changes: 12 additions & 0 deletions source/fortran/cost_variables.f90
Original file line number Diff line number Diff line change
Expand Up @@ -339,6 +339,12 @@ module cost_variables
real(dp) :: startuppwr
!! cost associated with additional HCD system power required on start-up ($)

integer :: supercond_cost_model
!! Switch for superconductor cost model:
!!
!! - =0 use $/kg
!! - =1 use $/kAm

real(dp) :: tlife
!! Full power year plant lifetime (years)

Expand Down Expand Up @@ -540,6 +546,9 @@ module cost_variables
real(dp), dimension(9) :: ucsc
!! cost of superconductor ($/kg)

real(dp), dimension(9) :: sc_mat_cost_0
!!cost of superconductor ($/kA m) at 6.4 T, 4.2 K

real(dp), parameter :: ucsh = 115.0D0
!! cost of shops and warehouses (M$/m3)

Expand Down Expand Up @@ -742,6 +751,9 @@ subroutine init_cost_variables
ucsc = &
(/600.0D0, 600.0D0, 300.0D0, 600.0D0, 600.0D0, 600.0D0, 300.0D0, 1200.0D0, &
1200.0D0/)
sc_mat_cost_0 = &
(/4.8D0, 2.0D0, 1.0D0, 4.8D0, 4.8D0, 47.4D0, 1.0D0, 47.4D0, 47.4D0/)
supercond_cost_model = 0
ucshld = 32.0D0
uctfbr = 1.22D0
uctfbus = 100.0D0
Expand Down
5 changes: 4 additions & 1 deletion source/fortran/input.f90
Original file line number Diff line number Diff line change
Expand Up @@ -256,7 +256,7 @@ subroutine parse_input_file(in_file,out_file,show_changes)
ucblli, ucpfcb, tlife, ipnet, fcdfuel, ucbus, ucpfb, uchts, &
maintenance_fwbs, fwbs_prob_fail, uclh, ucblss, ucblvd, ucsc, ucturb, &
ucpens, cland, ucwindpf, i_cp_lifetime, cplife_input, &
startupratio, tmain, u_unplanned_cp
startupratio, tmain, u_unplanned_cp, supercond_cost_model
use current_drive_variables, only: pinjfixmw, etaech, pinjalw, etanbi, &
ftritbm, gamma_ecrh, pheat, beamwd, enbeam, pheatfix, bscfmax, &
forbitloss, nbshield, tbeamin, feffcd, iefrf, iefrffix, irfcd, cboot, &
Expand Down Expand Up @@ -1854,6 +1854,9 @@ subroutine parse_input_file(in_file,out_file,show_changes)
case ('isumatpf')
call parse_int_variable('isumatpf', isumatpf, 1, 9, &
'PF coil superconductor material')
case ('supercond_cost_model')
call parse_int_variable('supercond_cost_model', supercond_cost_model, 0, 1, &
'Superconductor cost model')
case ('i_pf_current')
call parse_int_variable('i_pf_current', i_pf_current, 0, 2, &
'Switch for controlling the current of the PF coils')
Expand Down
10 changes: 10 additions & 0 deletions source/fortran/pfcoil_variables.f90
Original file line number Diff line number Diff line change
Expand Up @@ -161,6 +161,14 @@ module pfcoil_variables
!! - =8 Durham Ginzburg-Landau critical surface model for REBCO
!! - =9 Hazelton experimental data + Zhai conceptual model for REBCO

real(dp) :: j_crit_str_cs
!! superconductor strand critical current density under operating
!! conditions in central solenoid (A/m2). Necessary for the cost calculation in $/kA m

real(dp) :: j_crit_str_pf
!! superconductor strand critical current density under operating
!! conditions in PF coils (A/m2). Necessary for the cost calculation in $/kA m

integer :: i_pf_current
!! Switch for controlling the current of the PF coils:
!!
Expand Down Expand Up @@ -440,6 +448,8 @@ subroutine init_pfcoil_variables
itr_sum = 0.0D0
isumatoh = 1
isumatpf = 1
j_crit_str_cs = 0.0D0
j_crit_str_pf = 0.0D0
i_pf_current = 1
i_sup_pf_shape = 0
jscoh_bop = 0.0D0
Expand Down
15 changes: 15 additions & 0 deletions source/fortran/tfcoil_variables.f90
Original file line number Diff line number Diff line change
Expand Up @@ -308,6 +308,14 @@ module tfcoil_variables
real(dp) :: jbus
!! bussing current density (A/m2)

real(dp) :: j_crit_str_tf
!! j_crit_str : superconductor strand critical current density under operating
!! conditions (A/m2). Necessary for the cost calculation in $/kAm

real(dp), dimension(9) :: j_crit_str_0
!! j_crit_str_pf_0 : superconductor strand critical current density at 6 T and 4.2 K (A/m2)
!! Necessary for the cost calculation in $/kAm

real(dp) :: jwdgcrt
!! critical current density for winding pack (A/m2)

Expand Down Expand Up @@ -896,6 +904,13 @@ subroutine init_tfcoil_variables
n_tf_stress_layers = 0
n_tf_wp_layers = 5
jbus = 1.25D6
j_crit_str_tf = 0.0D0
j_crit_str_0 = &
(/596905475.80390120D0,1925501534.8512938D0,&
724544682.96063495D0,549858624.45072436D0, &
669284509.85818779D0,0.0D0,&
898964415.36996782D0,1158752995.2559297D0, &
865652122.9071957D0/)
jwdgcrt = 0.0D0
jwdgpro = 0.0D0
jwptf = 0.0D0
Expand Down
Loading