diff --git a/documentation/proc-pages/eng-models/tf-coil.md b/documentation/proc-pages/eng-models/tf-coil.md index f2ceaedb9a..1faabbbce0 100644 --- a/documentation/proc-pages/eng-models/tf-coil.md +++ b/documentation/proc-pages/eng-models/tf-coil.md @@ -77,7 +77,7 @@ $$ The TF coil radial thickness (dr_tf_inboard) can parametrized in two ways in PROCESS:

-

- **Direct parametrization**: the TF radial inboard thickness width is set as an input variable : `dr_tf_inboard` (iteration variable 57). The WP radial thickness (`dr_tf_wp`) is calculated from `dr_tf_inboard` and the two case radial thicknesses. This parametrization is used by default. + **Direct parametrization**: the TF radial inboard thickness width is set as an input variable : `dr_tf_inboard` (iteration variable 13). The WP radial thickness (`dr_tf_wp`) is calculated from `dr_tf_inboard` and the two case radial thicknesses. This parametrization is used by default.

-

**WP thickness parametrization**: the TF inboard radial thickness is calculated from the the case and the WP radial thickness. This option is selected by using the WP thickness (`dr_tf_wp`, iteration variable 140) as an iteration variable. Doing so, any `dr_tf_inboard` values will be overwritten and for this reason `dr_tf_wp` and `dr_tf_inboard` cannot be used as iteration variables simultaneously. Although not set by default for backward compatibility, this parametrization provides a more stable optimization procedure (negative WP area layer cannot be obtained by construction) and is hence encouraged. @@ -1243,86 +1243,101 @@ Another subroutine, `tfspcall` is called outside `stfcoil` to estimate to check ### General parameters -| Parameter | description | Default | -| - | - | - | -| `n_tf_coils` | Number of TF coils | 16 | -| `i_tf_sup` | Swich selecting the conductor technology:
- 0 : Water cooled copper (GLIDCOP)
- 1 : Superconducting TF magnets
- 2 : Helium cooled Aluminium magnets | 1 | -| `i_tf_sc_mat` | Swich for superconducting material
1 : Nb$_3$Sn superconductor, ITER critical surface parameterization[^1], standard critical values
2 : Bi-2212 high temperature superconductor
3 : NbTi superconductor
4 : Nb$_3$Sn superconductor, ITER critical surface parameterization[^1], user-defined critical parameters
5 : WST Nb$_3$Sn parameterization
6 : REBCO HTS tape in CroCo strand
7 : Durham Ginzburg-Landau critical surface model for Nb-Ti
8 : Durham Ginzburg-Landau critical surface model for REBCO
9 : Hazelton experimental data combined with Zhai conceptual model for REBCO | 1 | +| Parameter | description | Default | +| ------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------- | +| `n_tf_coils` | Number of TF coils | 16 | +| `i_tf_sup` | Switch selecting the conductor technology:
- 0 : Water cooled copper (GLIDCOP)
- 1 : Superconducting TF magnets
- 2 : Helium cooled Aluminium magnets | 1 | +| `i_tf_sc_mat` | Switch for superconducting material
1 : Nb$_3$Sn superconductor, ITER critical surface parameterization[^1], standard critical values
2 : Bi-2212 high temperature superconductor
3 : NbTi superconductor
4 : Nb$_3$Sn superconductor, ITER critical surface parameterization[^1], user-defined critical parameters
5 : WST Nb$_3$Sn parameterization
6 : REBCO HTS tape in CroCo strand
7 : Durham Ginzburg-Landau critical surface model for Nb-Ti
8 : Durham Ginzburg-Landau critical surface model for REBCO
9 : Hazelton experimental data combined with Zhai conceptual model for REBCO | 1 |
### Mid-plane geometry parameters -| Parameter | description | Iteration variable | Default | Unit | -| - | - | - | - | - | -| `i_tf_inside_cs` | TF coil inboard leg radial placement switch.
- 0 : Outside of central solenoid
- 1 : Inside of central solenoid | - | 0 | - | -| `dr_tf_inboard` | TF coil maximum radial size
calculated if `dr_tf_wp` is used as iteration variable | ixc = 13 | No default | m | -| `tfootfi` | Outboard/inboard TF coil thickness ratio | - | 1 | - | -| `dr_tf_wp` | Winding pack radial thickness
calculated if `dr_tf_inboard` is used as iteration variable. Include the ground insulation and the insertion gap. | ixc = 140 | No default | m | -| `dr_tf_nose_case` | Nose/inner case radial thickness | ixc = 57 | 0.3 | m | -| `dx_tf_side_case` | Minimal sidewall casing thickness | - | - | m | -| `casths_fraction` | Minimal sidewall casing thickness as a fraction of the TF coil toroidal thickness. Overwites the `dx_tf_side_case` input value | - | 0.03 | - | -| `dr_tf_plasma_case` | Minimal plasma side casing thickness | - | - | m | -| `f_dr_tf_plasma_case` | Minimal plasma side casing thickness as a fraction of the TF thickness (`dr_tf_inboard`). Overwites the `dr_tf_plasma_case` input value | - | 0.05 | - | -| `i_tf_case_geom` | Plasma side casing geometry option:
- 0 : rounder front casing (ITER)
- 1 : Straight casing | - | 0 | - | -| `i_tf_wp_geom` | Winding pack geometry option:
- 0 : rectangular
- 1 : double rectangle
- 2 : trapezoidal | - | Integer turn : 0
otherwise : 1 | - | -| `tinstf` | WP ground insulation thickness | - | 0.018 | m | -| `tfinsgap` | WP insertion gap thickness | - | 0.01 | m | +| Parameter | description | Iteration variable | Default | Unit | +| --------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------ | ------------------------------------ | ---- | +| `i_tf_inside_cs` | TF coil inboard leg radial placement switch.
- 0 : Outside of central solenoid
- 1 : Inside of central solenoid | - | 0 | - | +| `dr_tf_inboard` | TF coil maximum radial size
calculated if `dr_tf_wp` is used as iteration variable | ixc = 13 | No default | m | +| `tfootfi` | Outboard/inboard TF coil thickness ratio | - | 1 | - | +| `dr_tf_wp` | Winding pack radial thickness
calculated if `dr_tf_inboard` is used as iteration variable. Include the ground insulation and the insertion gap. | ixc = 140 | No default | m | +| `dr_tf_nose_case` | Nose/inner case radial thickness | ixc = 57 | 0.3 | m | +| `dx_tf_side_case` | Minimal sidewall casing thickness | - | - | m | +| `casths_fraction` | Minimal sidewall casing thickness as a fraction of the TF coil toroidal thickness. Overwites the `dx_tf_side_case` input value | - | 0.03 | - | +| `casthi` | Minimal plasma side casing thickness | - | - | m | +| `casthi_fraction` | Minimal plasma side casing thickness as a fraction of the TF thickness (`dr_tf_inboard`). Overwites the `casthi` input value | - | 0.05 | - | +| `i_tf_case_geom` | Plasma side casing geometry option:
- 0 : rounder front casing (ITER)
- 1 : Straight casing | - | 0 | - | +| `i_tf_wp_geom` | Winding pack geometry option:
- 0 : rectangular
- 1 : double rectangle
- 2 : trapezoidal | - | Integer turn : 0
otherwise : 1 | - | +| `tinstf` | WP ground insulation thickness | - | 0.018 | m | +| `tfinsgap` | WP insertion gap thickness | - | 0.01 | m | +| Parameter | description | Iteration variable | Default | Unit | +| - | - | - | - | - | +| `i_tf_inside_cs` | TF coil inboard leg radial placement switch.
- 0 : Outside of central solenoid
- 1 : Inside of central solenoid | - | 0 | - | +| `dr_tf_inboard` | TF coil maximum radial size
calculated if `dr_tf_wp` is used as iteration variable | ixc = 13 | No default | m | +| `tfootfi` | Outboard/inboard TF coil thickness ratio | - | 1 | - | +| `dr_tf_wp` | Winding pack radial thickness
calculated if `dr_tf_inboard` is used as iteration variable. Include the ground insulation and the insertion gap. | ixc = 140 | No default | m | +| `dr_tf_nose_case` | Nose/inner case radial thickness | ixc = 57 | 0.3 | m | +| `dx_tf_side_case` | Minimal sidewall casing thickness | - | - | m | +| `casths_fraction` | Minimal sidewall casing thickness as a fraction of the TF coil toroidal thickness. Overwites the `dx_tf_side_case` input value | - | 0.03 | - | +| `dr_tf_plasma_case` | Minimal plasma side casing thickness | - | - | m | +| `f_dr_tf_plasma_case` | Minimal plasma side casing thickness as a fraction of the TF thickness (`dr_tf_inboard`). Overwites the `dr_tf_plasma_case` input value | - | 0.05 | - | +| `i_tf_case_geom` | Plasma side casing geometry option:
- 0 : rounder front casing (ITER)
- 1 : Straight casing | - | 0 | - | +| `i_tf_wp_geom` | Winding pack geometry option:
- 0 : rectangular
- 1 : double rectangle
- 2 : trapezoidal | - | Integer turn : 0
otherwise : 1 | - | +| `tinstf` | WP ground insulation thickness | - | 0.018 | m | +| `tfinsgap` | WP insertion gap thickness | - | 0.01 | m |
### Turn parameters -| Parameter | description | Iteration variable | Default | Unit | -| - | - | - | - | - | -| `i_tf_turns_integer` | Switch activating the integer turn parametrization
- 0 : Integer number of turns
- 1 : non integer number of turn | - | 0 | - | -| `n_layer` | Number of turns in the radial direction (`i_tf_turns_integer = 1` only) | - | 20 | - | -| `n_pancake` | Number of turns in the toroidal direction (`i_tf_turns_integer = 1` only) | - | 10 | - | -| `t_turn_tf` | TF turn squared size | - | No default | m | -| `t_cable_tf` | TF cable diameter size | - | No default | m | -| `f_t_turn_tf` | f-value for TF turn squared size constraint (icc = 86) | 175 | 1. | m | -| `t_turn_tf_max` | Maximum turn squared size for constraint (icc = 86) | - | 0.05 | m | -| `cpttf` | Current per turn
Overwitten if `t_turn_tf` is set by the user | ixc = 60 | $70.10^3$ | A | -| `thicndut` | Turn insulation layer thickness | - | $0.8.10^{-3}$ | m | -| `thwcndut` | Steekl jacket/conduit thickness | 58 | $8.10^{-3}$ | m | -| `dhecoil` | Helium cooling channel diameter | - | $5.10^{-3}$ | m | -| `vftf` | Cable void fraction | - | 0.4 | - | -| `fcutfsu` | Copper cable fraction
defined with the cable area minus the void and cooling channel area | ixc = 59 | 0.69 | - | +| Parameter | description | Iteration variable | Default | Unit | +| -------------------- | --------------------------------------------------------------------------------------------------------------------------- | ------------------ | ------------- | ---- | +| `i_tf_turns_integer` | Switch activating the integer turn parametrization
- 0 : Integer number of turns
- 1 : non integer number of turn | - | 0 | - | +| `n_layer` | Number of turns in the radial direction (`i_tf_turns_integer = 1` only) | - | 20 | - | +| `n_pancake` | Number of turns in the toroidal direction (`i_tf_turns_integer = 1` only) | - | 10 | - | +| `t_turn_tf` | TF turn squared size | - | No default | m | +| `t_cable_tf` | TF cable diameter size | - | No default | m | +| `f_t_turn_tf` | f-value for TF turn squared size constraint (icc = 86) | 175 | 1. | m | +| `t_turn_tf_max` | Maximum turn squared size for constraint (icc = 86) | - | 0.05 | m | +| `cpttf` | Current per turn
Overwitten if `t_turn_tf` is set by the user | ixc = 60 | $70.10^3$ | A | +| `thicndut` | Turn insulation layer thickness | - | $0.8.10^{-3}$ | m | +| `thwcndut` | Steekl jacket/conduit thickness | 58 | $8.10^{-3}$ | m | +| `dhecoil` | Helium cooling channel diameter | - | $5.10^{-3}$ | m | +| `vftf` | Cable void fraction | - | 0.4 | - | +| `fcutfsu` | Copper cable fraction
defined with the cable area minus the void and cooling channel area | ixc = 59 | 0.69 | - |
### Vertical shape -| Parameter | description | Iteration variable | Default | Unit | -| - | - | - | - | - | -| `itart` | Switch for tapered inboard TF section
0 : conventional inboard leg
1 : Tapered inboard leg (centrepost, CP) | - | 0 | - | -| `i_tf_shape` | Switch selecting the TF coil shape
1 : D-shape approximation
2 : Rectangular (picture frame) shape | - | 1 : if `itart = 0`
2 : if `itart = 1`| - | -| `r_cp_top` | CP TF coil top/bottom radius | ixc = 174 | No default | m | -| `f_r_cp` | CP TF top/mid-plane outer radius fraction | - | 1.4 | - | -| `i_r_cp_top` | Switch selecting the `r_cp_top` parametrization
0 : `r_cp_top` calculated using the X-point location
1 : Set by user
2 : Set with `f_r_cp` | - | 0 | - | +| Parameter | description | Iteration variable | Default | Unit | +| ------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------ | ------------------------------------------ | ---- | +| `itart` | Switch for tapered inboard TF section
0 : conventional inboard leg
1 : Tapered inboard leg (centrepost, CP) | - | 0 | - | +| `i_tf_shape` | Switch selecting the TF coil shape
1 : D-shape approximation
2 : Rectangular (picture frame) shape | - | 1 : if `itart = 0`
2 : if `itart = 1` | - | +| `r_cp_top` | CP TF coil top/bottom radius | ixc = 174 | No default | m | +| `f_r_cp` | CP TF top/mid-plane outer radius fraction | - | 1.4 | - | +| `i_r_cp_top` | Switch selecting the `r_cp_top` parametrization
0 : `r_cp_top` calculated using the X-point location
1 : Set by user
2 : Set with `f_r_cp` | - | 0 | - |
### TF coil joints -| Parameter | description | Iteration variable | Default | Unit | -| - | - | - | - | - | -| `i_cp_joints` | Switch selecting the TF coil demoutable joints strategy
0 : No demountable joints
1 : MAST like sliding joints | - | 0 : if `itart = 0`
1 : if `itart = 1` | - | -| `n_tf_joints` | Number of joints per coils | - | 4 | - | -| `n_tf_joints_contact` | Number of contacts per joints | - | 6 | - | -| `rho_tf_joints` | Joint surfacic resistivity | - | $2.5.10^{-10}$ | $\Omega.m$ | -| `th_joint_contact` | Joint contact thickness | - | 0.03 | m | +| Parameter | description | Iteration variable | Default | Unit | +| --------------------- | ------------------------------------------------------------------------------------------------------------------------- | ------------------ | ------------------------------------------ | ---------- | +| `i_cp_joints` | Switch selecting the TF coil demoutable joints strategy
0 : No demountable joints
1 : MAST like sliding joints | - | 0 : if `itart = 0`
1 : if `itart = 1` | - | +| `n_tf_joints` | Number of joints per coils | - | 4 | - | +| `n_tf_joints_contact` | Number of contacts per joints | - | 6 | - | +| `rho_tf_joints` | Joint surfacic resistivity | - | $2.5.10^{-10}$ | $\Omega.m$ | +| `th_joint_contact` | Joint contact thickness | - | 0.03 | m |
### TF coil inboard mid-plane stress -| Parameter | description | Iteration variable | Default | Unit | -| - | - | - | - | - | -| `f_vforce_inboard` | Fraction of the vertical force supported by the inboard leg | - | 0.5 | - | -| `i_tf_stress_model` | Switch to select the inboard mid-plane stress model
1 : Plane stress
0,2 : Generalized plane stress | - | 0 | - | -| `i_tf_bucking` | Switch to select the bucking strategy
0 : No bucking structure
1 : TF bucking structure
2 : TF bucked on CS coil
3 : TF bucked on CS coil (CS-TF layer included in the stress calc.) | - | 0 : if `i_tf_coil \= 1`
1 : if `i_tf_coil = 1` | - | +| Parameter | description | Iteration variable | Default | Unit | +| ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------ | --------------------------------------------------- | ---- | +| `f_vforce_inboard` | Fraction of the vertical force supported by the inboard leg | - | 0.5 | - | +| `i_tf_stress_model` | Switch to select the inboard mid-plane stress model
1 : Plane stress
0,2 : Generalized plane stress | - | 0 | - | +| `i_tf_bucking` | Switch to select the bucking strategy
0 : No bucking structure
1 : TF bucking structure
2 : TF bucked on CS coil
3 : TF bucked on CS coil (CS-TF layer included in the stress calc.) | - | 0 : if `i_tf_coil \= 1`
1 : if `i_tf_coil = 1` | - |
diff --git a/examples/data/large_tokamak_IN.DAT b/examples/data/large_tokamak_IN.DAT index 79989e5542..8d46e5c939 100644 --- a/examples/data/large_tokamak_IN.DAT +++ b/examples/data/large_tokamak_IN.DAT @@ -216,11 +216,6 @@ te = 12.0 ixc = 10 boundu(10) = 1.2 -* dr_tf_inboard [m] -ixc = 13 -boundl(13) = 0.7 -dr_tf_inboard = 1.2 - * dr_cs [m] ixc = 16 boundl(16) = 0.3 diff --git a/examples/data/scan_example_file_IN.DAT b/examples/data/scan_example_file_IN.DAT index e593b683de..69bca4042a 100644 --- a/examples/data/scan_example_file_IN.DAT +++ b/examples/data/scan_example_file_IN.DAT @@ -216,11 +216,6 @@ te = 12.0 ixc = 10 boundu(10) = 1.2 -* dr_tf_inboard [m] -ixc = 13 -boundl(13) = 0.7 -dr_tf_inboard = 1.2 - * dr_cs [m] ixc = 16 boundl(16) = 0.3 diff --git a/process/init.py b/process/init.py index db043dad10..41c70f73ed 100644 --- a/process/init.py +++ b/process/init.py @@ -307,6 +307,14 @@ def check_process(inputs): # noqa: ARG001 nvar=fortran.numerics.nvar, ) + # Check that dr_tf_wp (ixc = 140) and dr_tf_inboard (ixc = 13) are not being used simultaneously as iteration variables + if (fortran.numerics.ixc[: fortran.numerics.nvar] == 13).any() and ( + fortran.numerics.ixc[: fortran.numerics.nvar] == 140 + ).any(): + raise ProcessValidationError( + "Iteration variables 13 and 140 cannot be used simultaneously", + ) + if ( fortran.numerics.icc[: fortran.numerics.neqns + fortran.numerics.nineqns] == 0 ).any(): diff --git a/tests/integration/data/large_tokamak_IN.DAT b/tests/integration/data/large_tokamak_IN.DAT index b3936cba9f..b30ffc9947 100644 --- a/tests/integration/data/large_tokamak_IN.DAT +++ b/tests/integration/data/large_tokamak_IN.DAT @@ -216,11 +216,6 @@ te = 12.0 ixc = 10 boundu(10) = 1.2 -* dr_tf_inboard [m] -ixc = 13 -boundl(13) = 0.7 -dr_tf_inboard = 1.2 - * dr_cs [m] ixc = 16 boundl(16) = 0.3 diff --git a/tests/integration/data/large_tokamak_eval.IN.DAT b/tests/integration/data/large_tokamak_eval.IN.DAT index 263c1dba13..5b8fd51475 100644 --- a/tests/integration/data/large_tokamak_eval.IN.DAT +++ b/tests/integration/data/large_tokamak_eval.IN.DAT @@ -381,7 +381,7 @@ tdmptf = 17.97282589344206 * fast discharge time for TF coil in event of quenc n_tf_coils = 16 * Number of TF coils (default = 50 for stellarators); Number of TF coils outer legs for ST tftmp = 4.75 * peak helium coolant temperature in TF coils and PF coils (K) dr_tf_nose_case = 0.2816873221155309 * inboard TF coil case outer (non-plasma side) thickness (m) (`iteration variable 57`) -dr_tf_wp = 0.5153787768966674 * radial thickness of winding pack (m) (`iteration variable 140`) (issue #514) +dr_tf_wp = 0.5153787768966674 * radial thickness of winding pack (m) (issue #514) thwcndut = 0.008012110032981922 * TF coil conduit case thickness (m) (`iteration variable 58`) tinstf = 0.008 * Thickness of the ground insulation layer surrounding (m) tmargmin_cs = 1.5 * minimum allowable temperature margin ; CS (K) diff --git a/tests/regression/input_files/large_tokamak.IN.DAT b/tests/regression/input_files/large_tokamak.IN.DAT index 6827b4b361..3761746ac1 100644 --- a/tests/regression/input_files/large_tokamak.IN.DAT +++ b/tests/regression/input_files/large_tokamak.IN.DAT @@ -216,11 +216,6 @@ te = 12.0 ixc = 10 boundu(10) = 1.2 -* dr_tf_inboard [m] -ixc = 13 -boundl(13) = 0.7 -dr_tf_inboard = 1.2 - * dr_cs [m] ixc = 16 boundl(16) = 0.3 diff --git a/tests/regression/input_files/large_tokamak_eval.IN.DAT b/tests/regression/input_files/large_tokamak_eval.IN.DAT index f5314205c9..ca544d56b5 100644 --- a/tests/regression/input_files/large_tokamak_eval.IN.DAT +++ b/tests/regression/input_files/large_tokamak_eval.IN.DAT @@ -383,7 +383,7 @@ tdmptf = 17.97282589344206 * fast discharge time for TF coil in event of quenc n_tf_coils = 16 * Number of TF coils (default = 50 for stellarators); Number of TF coils outer legs for ST tftmp = 4.75 * peak helium coolant temperature in TF coils and PF coils (K) dr_tf_nose_case = 0.2816873221155309 * inboard TF coil case outer (non-plasma side) thickness (m) (`iteration variable 57`) -dr_tf_wp = 0.5153787768966674 * radial thickness of winding pack (m) (`iteration variable 140`) (issue #514) +dr_tf_wp = 0.5153787768966674 * radial thickness of winding pack (m) (issue #514) thwcndut = 0.008012110032981922 * TF coil conduit case thickness (m) (`iteration variable 58`) tinstf = 0.008 * Thickness of the ground insulation layer surrounding (m) tmargmin_cs = 1.5 * minimum allowable temperature margin ; CS (K) diff --git a/tests/regression/input_files/large_tokamak_nof.IN.DAT b/tests/regression/input_files/large_tokamak_nof.IN.DAT index 6cb9bceaee..dca55ebd70 100644 --- a/tests/regression/input_files/large_tokamak_nof.IN.DAT +++ b/tests/regression/input_files/large_tokamak_nof.IN.DAT @@ -198,11 +198,6 @@ te = 12.0 ixc = 10 boundu(10) = 1.2 -* dr_tf_inboard [m] -ixc = 13 -boundl(13) = 0.7 -dr_tf_inboard = 1.2 - * dr_cs [m] ixc = 16 boundl(16) = 0.3 diff --git a/tests/unit/data/large_tokamak_IN.DAT b/tests/unit/data/large_tokamak_IN.DAT index 3d993dc7d1..e502f45531 100644 --- a/tests/unit/data/large_tokamak_IN.DAT +++ b/tests/unit/data/large_tokamak_IN.DAT @@ -216,11 +216,6 @@ te = 12.0 ixc = 10 boundu(10) = 1.2 -* dr_tf_inboard [m] -ixc = 13 -boundl(13) = 0.7 -dr_tf_inboard = 1.2 - * dr_cs [m] ixc = 16 boundl(16) = 0.3