ukaea / PROCESS

PROCESS is a systems code at UKAEA that calculates in a self-consistent manner the parameters of a fusion power plant with a specified performance, ensuring that its operating limits are not violated, and with the option to optimise to a given function of these parameters.
https://ukaea.github.io/PROCESS/
MIT License
30 stars 11 forks source link

Costing superconductors in all coils using dollars per kAm rather than dollars per kg #1038

Closed jonmaddock closed 2 weeks ago

jonmaddock commented 4 years ago

In GitLab by @schislet on Apr 14, 2020, 09:01

Associated branch: https://git.ccfe.ac.uk/process/process/-/tree/issue-1037

Summary

The superconducting industry uses the metric $/kAm as the costing figure of merit for superconductors rather than $/kg. A switch has been added into costs.f90 such that when supercond_cost_model = 1, the superconductor costs are calculated using this metric rather than the existing $/kg metric (which is selected by default for supercond_cost_model = 0).

The cost of the superconductor is a function of the operating field, temperature and strain (though we shall assume that the strain on the superconductor itself is zero):

[Strand/Tape Cost ($/kAm) under operating conditions] = [Strand/Tape Cost ($/kAm) under reference conditions] * [Strand/Tape Jc under reference conditions] / [Strand/Tape Jc under operating conditions]

The strand/tape costs ($/kAm) under reference conditions were taken from Cooley 2005 [1] and Cooley 2016 [and back converted into 1990 US$ assuming standard CPI inflation. At 6 T and 4.2 K these are 4.8 $/kAm for Nb3Sn strands (calculated from table 3 of [1]), 1.0 $/kAm for Nb-Ti (calculated from table 2 of [1]) and 47.4 $/kAm for REBCO (calculated from slide 3 of [2]).

The strand/Tape Jcs under reference conditions were calculated by manually calling the critical current scaling laws contained between superconductors.90 and sctfcoil.f90 at 6 T and 4.2 K. The Jcs were collected into the list variable j_crit_str_0.

The strand/tape Jcs under operating conditions are acquired from the variables j_crit_str_pf, j_crit_str_cs and j_crit_str_tf which pull the strand Jcs from sctfcoil.f90 and pfcoil.f90 when they are invoked inside the pfcoil and ohcalc subroutines in pfcoil.f90 and inside the tfspcall subroutine inside sctfcoil.f90.

From there

[Cost ($/m)] = [Cost ($/kAm) under operating conditions] * [Cable peak operating current (kA)]

The cable peak operating currents are acquired from abs(ric(i)/turns(i)) for the pf conductor, abs(ric(nohc)/turns(nohc)) for the cs conductor and cpttf for the tf conductor (converted to kA).

[1] Cooley_2005_Cost_of_strands_0953-2048_18_4_R01.pdf

[2] Cooley_2016.pdf

Checklist

After implementing issue do the following

jonmaddock commented 4 years ago

In GitLab by @schislet on Apr 16, 2020, 11:51

marked the task Run test suite as completed

jonmaddock commented 4 years ago

In GitLab by @schislet on Apr 16, 2020, 11:51

marked the task Does it change the output? If so, give justifications. as completed

jonmaddock commented 4 years ago

In GitLab by @schislet on Apr 16, 2020, 11:51

marked the task Does it change the output? If so, give justifications. as incomplete

jonmaddock commented 4 years ago

In GitLab by @schislet on Apr 16, 2020, 11:51

marked the task Does it change the output? If so, give justifications. as completed

jonmaddock commented 4 years ago

In GitLab by @schislet on Apr 16, 2020, 15:27

marked the task Does it change the baseline 2019 run? (you may need to run on Freia) as completed

jonmaddock commented 3 years ago

In GitLab by @schislet on Mar 18, 2021, 15:44

closed

jonmaddock commented 3 years ago

In GitLab by @schislet on Mar 20, 2021, 10:32

reopened

jonmaddock commented 3 years ago

In GitLab by @schislet on Mar 20, 2021, 10:54

marked the task Run test suite as incomplete

jonmaddock commented 3 years ago

In GitLab by @schislet on Mar 20, 2021, 10:54

marked the task Does it change the output? If so, give justifications. as incomplete

jonmaddock commented 3 years ago

In GitLab by @schislet on Mar 20, 2021, 10:54

marked the task Does it change the baseline 2019 run? (you may need to run on Freia) as incomplete

jonmaddock commented 3 years ago

In GitLab by @schislet on Mar 23, 2021, 18:19

@mkovari @skahn @stuartmuldrew This is the cost model that I have been using in my work. I've created the issue mainly so that I can merge the changes so they won't get lost, but it's also here if you want to include something like this more broadly. The costs herein are certainly more up to date than the $/kg superconductor unit costs that currently exist for the costs.f90 module.

jonmaddock commented 3 years ago

In GitLab by @mkovari on Mar 24, 2021, 09:17

Not sure what cost_model=3 refers to.

  ! Cost switch values
  ! No.  |  model
  ! ---- | ------
  ! 0    |  1990 costs model
  ! 1    |  2015 Kovari model
  ! 2    |  2019 STEP model

  if (cost_model == 0) then
    call costs(nout,0)
  else if (cost_model == 1) then
    call costs_2015(0,0)
  else if (cost_model == 2) then
    call costs_step(nout,0)
  end if
jonmaddock commented 3 years ago

In GitLab by @schislet on Mar 24, 2021, 11:30

Cost model == 3 is an option I wrote for using the 1990 cost model but with superconductors costed in $/kAm.

On second thought i'll introduce a different switch (with the default to be not to use this model for back compatibility) as everything else is identical between cost models 0 and 3.

jonmaddock commented 3 years ago

In GitLab by @schislet on Mar 24, 2021, 11:45

I've added the switch variable supercond_cost_model instead of using cost_model = 3. When supercond_cost_model = 0 (which is the default) the costs are calculated from $/kg, when supercond_cost_model = 1 the costs are calculated from $/kAm. So far the model is only available when using the 1990 costs module. @mkovari

jonmaddock commented 3 years ago

In GitLab by @schislet on Apr 3, 2021, 12:08

marked the task Run test suite as completed

jonmaddock commented 3 years ago

In GitLab by @schislet on Apr 3, 2021, 12:09

created merge request !407 to address this issue

mkovari commented 1 week ago

Hi Jack, I notice that you have created this variable:

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

I would have thought that the cost in $/(kA m) was based on the critical current for standard test conditions, not the operating conditions, which obviously the manufacturer doesn't know.

Have I got the wrong end of the stick?

j-a-foster commented 1 week ago

That's calcuated in pfcoil.py based on the temperature and field calculated during a run. The variable j_crit_str_0 in tfcoil_variables.f90 is the reference conditions.

mkovari commented 1 week ago

OK, I see.