Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
19 commits
Select commit Hold shift + click to select a range
4150ef8
Rename `fradpwr` to `f_p_plasma_separatrix_rad_max` across multiple f…
chris-ashe Jun 2, 2026
5e95e98
Rename `fdene` to `f_nd_plasma_electron_limit_max` for clarity and co…
chris-ashe Jun 2, 2026
eff9cc8
Fix constraint_equation_6 to use beta_poloidal_eps for improved accuracy
chris-ashe Jun 2, 2026
bb3fa74
Rename `aplasmin` to `rminor_min` for consistency and clarity across …
chris-ashe Jun 2, 2026
09aaecf
Refactor beta variable names and descriptions for clarity and consist…
chris-ashe Jun 2, 2026
ba69dba
Update constraint_equation_25 to use b_tf_inboard_peak_with_ripple fo…
chris-ashe Jun 2, 2026
8a907d1
Refactor temperature calculations in constraint equations to use cons…
chris-ashe Jun 2, 2026
36dbe90
Rename `nflutf` to `flu_tf_neutron_fast_peak` for clarity and consist…
chris-ashe Jun 2, 2026
21987fe
Rename `nflutfmax` to `flu_tf_neutron_fast_max` for clarity and consi…
chris-ashe Jun 2, 2026
f8b6509
Rename `pseprmax` to `p_plasma_separatrix_rmajor_max_mw` for clarity …
chris-ashe Jun 2, 2026
04d2d3f
Rename `avail_min` to `f_t_plant_available_min` for clarity and consi…
chris-ashe Jun 2, 2026
e7f54af
Update f_alpha_energy_confinement_min description for clarity and con…
chris-ashe Jun 2, 2026
1a744a5
Rename `f_alpha_energy_confinement` to `f_t_alpha_energy_confinement`…
chris-ashe Jun 2, 2026
1468fe5
Rename `f_alpha_energy_confinement_min` to `f_t_alpha_energy_confinem…
chris-ashe Jun 2, 2026
8c1a3a5
Rename `zeff_max` to `n_charge_plasma_effective_vol_avg_max` for clar…
chris-ashe Jun 2, 2026
f2f9814
Rename `psepbqarmax` to `p_div_bt_q_aspect_rmajor_max_mw` for clarity…
chris-ashe Jun 2, 2026
16e1fd8
Update constraint_equation_68 to use p_div_bt_q_aspect_rmajor_mw; imp…
chris-ashe Jun 2, 2026
68421ee
Update some docstrings
chris-ashe Jun 3, 2026
1cadd90
Post rebase fixes
chris-ashe Jun 8, 2026
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
4 changes: 2 additions & 2 deletions documentation/source/fusion-devices/stellarator.md
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,7 @@ ixc = 10 * "ISS04 Renormalization Factor" (can also be fixed)
ixc = 50 * Coil current density, aka winding pack thickness (required!)
ixc = 59 * Winding Pack copper fraction
ixc = 56 * Exponential Quench Dumping Time
ixc = 109 * Thermal alpha particle pressure (iterated to consistency, use together with `f_alpha_energy_confinement_min`)
ixc = 109 * Thermal alpha particle pressure (iterated to consistency, use together with `f_t_alpha_energy_confinement_min`)
ixc = 169 * Achievable Temperature of the ECRH at the ignition point
```

Expand Down Expand Up @@ -131,7 +131,7 @@ The density limit relevant to certain stellarators experiments has been proposed

$n_{max} = 0.25(PB_0/R_0a^2_p)^{1/2}$

where $n$ is the line-averaged electron density in units of $10^{20} m^{-3}$, $p$ is the absorbed heating power (MW), $B_0$ is the on-axis field (t), $R_0$ is the major radius (m), and $a_p$ is the plasma minor radius (m). To enforce the Sudo density limit, turn on constraint equation no. 5 (`fdene != 1` can be used to scale the constraint bound).
where $n$ is the line-averaged electron density in units of $10^{20} m^{-3}$, $p$ is the absorbed heating power (MW), $B_0$ is the on-axis field (t), $R_0$ is the major radius (m), and $a_p$ is the plasma minor radius (m). To enforce the Sudo density limit, turn on constraint equation no. 5 (`f_nd_plasma_electron_limit_max != 1` can be used to scale the constraint bound).

Note that the Sudo limit is a radiation based density limit and it is unclear how well this limit extrapolates to reactor parameters, especially as no impurity dependence e.g. is present in the Sudo model.
PROCESS features an impurity dependent radiation module already which can be used with `icc=17` and by setting the `f_nd_impurity_electrons` vector.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -705,7 +705,7 @@ The constraint uses the loss power and thermal densities hence the inclusion of

This constraint can be activated by stating `icc = 62` in the input file.

The value of `f_alpha_energy_confinement_min` can be set to the desired minimum total ratio between the alpha confinement and energy confinement times.
The value of `f_t_alpha_energy_confinement_min` can be set to the desired minimum total ratio between the alpha confinement and energy confinement times.

[^1]: N. A. Uckan, International Atomic Energy Agency, Vienna (Austria) and ITER Physics Group, "ITER physics design guidelines: 1989", no. No. 10. Feb. 1990.
[^2]: T.C. Hender et al., 'Physics Assessment of the European Reactor Study', AEA FUS 172, 1992.
Expand Down
2 changes: 1 addition & 1 deletion documentation/source/physics-models/plasma_density.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ calculated in the run routine `density_limit.run()`, which is called by `physics

This constraint can be activated by stating `icc = 5` in the input file.

The value of `i_density_limit` can be set to apply the relevant limit. The variable `fdene` can be set to scale the constraint bound: `nd_plasma_electrons_vol_avg` / `nd_plasma_electrons_max` <= `fdene` (or `nd_plasma_electron_line` / `nd_plasma_electrons_max` <= `fdene` if `i_density_limit = 7`).
The value of `i_density_limit` can be set to apply the relevant limit. The variable `f_nd_plasma_electron_limit_max` can be set to scale the constraint bound: `nd_plasma_electrons_vol_avg` / `nd_plasma_electrons_max` <= `f_nd_plasma_electron_limit_max` (or `nd_plasma_electron_line` / `nd_plasma_electrons_max` <= `f_nd_plasma_electron_limit_max` if `i_density_limit = 7`).

For the `i_density_limit = 1-5,8` scalings we scale the function output by the separatrix to volume averaged electron density so that we can set the limit on the volume averaged. **Therefore it is recommended to only use these scalings with an H-mode profile (`i_plasma_pedestal == 1`) otherwise the separatrix density (`nd_plasma_separatrix_electron`) will not be calculated.**

Expand Down
6 changes: 3 additions & 3 deletions examples/data/large_tokamak_eval_IN.DAT
Original file line number Diff line number Diff line change
Expand Up @@ -92,16 +92,16 @@ dr_shld_blkt_gap = 0.02 * gap between vacuum vessel and blanket (m)
*---------------Constraint Variables---------------*

b_tf_inboard_max = 14.0 * maximum peak toroidal field (T) (`constraint equation 25`)
fdene = 1.2 * density limit constraint scale (constraint equation 5)
f_nd_plasma_electron_limit_max = 1.2 * density limit constraint scale (constraint equation 5)
fiooic = 0.65 * margin for TF coil operating current / critical current ratio
fjohc = 0.6 * margin for central solenoid current at end-of-flattop
fjohc0 = 0.6 * margin for central solenoid current at beginning of pulse
p_plant_electric_net_required_mw = 400.0 * required net electric power (MW) (`constraint equation 16`)
p_fusion_total_max_mw = 3000 * maximum fusion power (MW) (`constraint equation 9`)
psepbqarmax = 10.0 * maximum ratio of Psep*Bt/qAR (MWT/m) (`constraint equation 68`)
p_div_bt_q_aspect_rmajor_max_mw = 10.0 * maximum ratio of Psep*Bt/qAR (MWT/m) (`constraint equation 68`)
t_burn_min = 7200.0 * minimum burn time (s) (KE - no longer itv;; see issue #706)
pflux_fw_neutron_max_mw = 2.0 * allowable neutron wall-load (MW/m2) (`constraint equation 8`)
f_alpha_energy_confinement_min = 5.0 * Lower limit on f_alpha_energy_confinement the ratio of alpha particle to energy confinement
f_t_alpha_energy_confinement_min = 5.0 * Lower limit on f_t_alpha_energy_confinementnt the ratio of alpha particle to energy confinement

*-------------------Constraints--------------------*

Expand Down
8 changes: 4 additions & 4 deletions examples/data/large_tokamak_varied_min_net_electric_IN.DAT
Original file line number Diff line number Diff line change
Expand Up @@ -104,10 +104,10 @@ tmargmin = 1.5
icc = 60
temp_cs_superconductor_margin_min = 1.5

* Lower limit on f_alpha_energy_confinement (ratio alpha particle/energy confinement times) *
* Lower limit on f_t_alpha_energy_confinement (ratio alpha particle/energy confinement times) *
*-------------------------------------------------------------------------------*
icc = 62
f_alpha_energy_confinement_min = 5.0
f_t_alpha_energy_confinement_min = 5.0

* dump time constraint for VV stresses *
*--------------------------------------*
Expand All @@ -128,7 +128,7 @@ icc = 81
*------------------*

icc = 68
psepbqarmax = 10.0
p_div_bt_q_aspect_rmajor_max_mw = 10.0

* TF coil stress limits *
*-----------------------*
Expand Down Expand Up @@ -572,4 +572,4 @@ f_a_tf_turn_cable_space_extra_void = 0.3
i_tf_sc_mat = 1

* max fluence in the TF coil
nflutfmax = 1e22
flu_tf_neutron_fast_maxutron_fast_max = 1e22
8 changes: 4 additions & 4 deletions examples/data/large_tokamak_varyrun_IN.DAT
Original file line number Diff line number Diff line change
Expand Up @@ -104,10 +104,10 @@ tmargmin = 1.5
icc = 60
temp_cs_superconductor_margin_min = 1.5

* Lower limit on f_alpha_energy_confinement (ratio alpha particle/energy confinement times) *
* Lower limit on f_t_alpha_energy_confinement (ratio alpha particle/energy confinement times) *
*-------------------------------------------------------------------------------*
icc = 62
f_alpha_energy_confinement_min = 5.0
f_t_alpha_energy_confinement_min = 5.0

* dump time constraint for VV stresses *
*--------------------------------------*
Expand All @@ -128,7 +128,7 @@ icc = 81
*------------------*

icc = 68
psepbqarmax = 10.0
p_div_bt_q_aspect_rmajor_max_mw = 10.0

* TF coil stress limits *
*-----------------------*
Expand Down Expand Up @@ -572,4 +572,4 @@ f_a_tf_turn_cable_space_extra_void = 0.3
i_tf_sc_mat = 1

* max fluence in the TF coil
nflutfmax = 1e22
flu_tf_neutron_fast_maxutron_fast_max = 1e22
3 changes: 1 addition & 2 deletions process/core/constants.py
Original file line number Diff line number Diff line change
Expand Up @@ -269,8 +269,7 @@
"""Density of Tungsten [kg/m3]"""

TEMP_ROOM = 293.15
""" Room temperature in Kelvin
Assume the room is at 20 degrees Celsius
""" Room temperature in Kelvin. Assuming the room is at 20 degrees Celsius
"""

RMU0 = 1.256637062e-6
Expand Down
28 changes: 19 additions & 9 deletions process/core/input.py
Original file line number Diff line number Diff line change
Expand Up @@ -165,15 +165,15 @@ def __post_init__(self):
"alstroh": InputVariable("pf_coil", float, range=(1000000.0, 100000000000.0)),
"amortization": InputVariable("costs", float, range=(1.0, 50.0)),
"anginc": InputVariable("divertor", float, range=(0.0, 1.5707)),
"aplasmin": InputVariable("build", float, range=(0.01, 10.0)),
"rminor_min": InputVariable("build", float, range=(0.01, 10.0)),
"aux_build_h": InputVariable("buildings", float, range=(1.0, 100.0)),
"aux_build_l": InputVariable("buildings", float, range=(10.0, 1000.0)),
"aux_build_w": InputVariable("buildings", float, range=(10.0, 1000.0)),
"auxcool_h": InputVariable("buildings", float, range=(1.0, 100.0)),
"auxcool_l": InputVariable("buildings", float, range=(10.0, 1000.0)),
"auxcool_w": InputVariable("buildings", float, range=(10.0, 1000.0)),
"p_hcd_injected_min_mw": InputVariable("constraints", float, range=(0.01, 100.0)),
"avail_min": InputVariable("costs", float, range=(0.0, 1.0)),
"f_t_plant_available_min": InputVariable("costs", float, range=(0.0, 1.0)),
"b_crit_upper_nbti": InputVariable("tfcoil", float, range=(0.0, 30.0)),
"p_plant_electric_base": InputVariable(
"heat_transport", float, range=(1000000.0, 10000000000.0)
Expand Down Expand Up @@ -381,7 +381,7 @@ def __post_init__(self):
"tfcoil", float, range=(100000000.0, 10000000000000.0)
),
"f_a_tf_cool_outboard": InputVariable("tfcoil", float, range=(0.0, 1.0)),
"f_alpha_energy_confinement_min": InputVariable(
"f_t_alpha_energy_confinement_min": InputVariable(
"constraints", float, range=(1.0, 100.0)
),
"f_asym": InputVariable("stellarator", float, range=(0.9, 2.0)),
Expand Down Expand Up @@ -428,7 +428,9 @@ def __post_init__(self):
"fcuohsu": InputVariable("pf_coil", float, range=(0.0, 1.0)),
"fcupfsu": InputVariable("pf_coil", float, range=(0.0, 1.0)),
"f_a_tf_turn_cable_copper": InputVariable("tfcoil", float, range=(0.0, 1.0)),
"fdene": InputVariable("constraints", float, range=(0.001, 10.0)),
"f_nd_plasma_electron_limit_max": InputVariable(
"constraints", float, range=(0.001, 10.0)
),
"fiooic": InputVariable("constraints", float, range=(0.001, 1.0)),
"fjohc": InputVariable("constraints", float, range=(0.001, 1.0)),
"fjohc0": InputVariable("constraints", float, range=(0.001, 1.0)),
Expand Down Expand Up @@ -460,7 +462,9 @@ def __post_init__(self):
"heat_transport", float, range=(0.0, 0.2)
),
"fracture_toughness": InputVariable("cs_fatigue", float, range=(0.1, 100000000.0)),
"fradpwr": InputVariable("constraints", float, range=(0.0, 1.0)),
"f_p_plasma_separatrix_rad_max": InputVariable(
"constraints", float, range=(0.0, 1.0)
),
"f_radius_beam_tangency_rmajor": InputVariable(
"current_drive", float, range=(0.5, 2.0)
),
Expand Down Expand Up @@ -584,7 +588,7 @@ def __post_init__(self):
"i_nd_plasma_pedestal_separatrix": InputVariable(
data_structure.physics_variables, int, choices=[0, 1]
),
"nflutfmax": InputVariable("constraints", float, range=(0.0, 1e24)),
"flu_tf_neutron_fast_max": InputVariable("constraints", float, range=(0.0, 1e24)),
"j_tf_coil_full_area": InputVariable("tfcoil", float, range=(10000.0, 1000000000.0)),
"f_a_cs_turn_steel": InputVariable("pf_coil", float, range=(0.001, 0.999)),
"f_z_cs_tf_internal": InputVariable("pf_coil", float, range=(0.0, 2.0)),
Expand Down Expand Up @@ -632,8 +636,12 @@ def __post_init__(self):
"pres_div_chamber_burn": InputVariable("vacuum", float, range=(0.0, 10.0)),
"pres_fw_coolant": InputVariable("fwbs", float, range=(100000.0, 100000000.0)),
"prn1": InputVariable("divertor", float, range=(0.0, 1.0)),
"psepbqarmax": InputVariable("constraints", float, range=(1.0, 50.0)),
"pseprmax": InputVariable("constraints", float, range=(1.0, 60.0)),
"p_div_bt_q_aspect_rmajor_max_mw": InputVariable(
"constraints", float, range=(1.0, 50.0)
),
"p_plasma_separatrix_rmajor_max_mw": InputVariable(
"constraints", float, range=(1.0, 60.0)
),
"ptargf": InputVariable("ife", float, range=(0.1, 100.0)),
"temp_cp_max": InputVariable("tfcoil", float, range=(4.0, 573.15)),
"ptfnucmax": InputVariable("constraints", float, range=(1e-06, 1.0)),
Expand Down Expand Up @@ -934,7 +942,9 @@ def __post_init__(self):
"wsvfac": InputVariable("buildings", float, range=(0.9, 3.0)),
"xi_ebw": InputVariable("current_drive", float, range=(0.0, 1.0)),
"xpertin": InputVariable("divertor", float, range=(0.0, 10.0)),
"zeff_max": InputVariable("constraints", float, range=(1.0, 10.0)),
"n_charge_plasma_effective_vol_avg_max": InputVariable(
"constraints", float, range=(1.0, 10.0)
),
"blktmodel": InputVariable("fwbs", int, choices=[0, 1]),
"blkttype": InputVariable("fwbs", int, choices=[1, 2, 3]),
"breedmat": InputVariable("fwbs", int, choices=[1, 2, 3]),
Expand Down
12 changes: 10 additions & 2 deletions process/core/io/obsolete_vars.py
Original file line number Diff line number Diff line change
Expand Up @@ -182,7 +182,7 @@
"d_vv_in": "dr_vv_inboard",
"d_vv_out": "dr_vv_outboard",
"iblnkith": "i_blkt_inboard",
"taulimit": "f_alpha_energy_confinement_min",
"taulimit": "f_t_alpha_energy_confinement_min",
"isc": "i_confinement_time",
"iradloss": "i_rad_loss",
"iinvqd": None,
Expand Down Expand Up @@ -360,7 +360,7 @@
"tmax_croco": "temp_croco_quench_max",
"vdalw": "v_tf_coil_dump_quench_max_kv",
"vvhealw": None,
"zeffmax": "zeff_max",
"zeffmax": "n_charge_plasma_effective_vol_avg_max",
"f_a_fw_hcd": "f_a_fw_outboard_hcd",
"fpumpblkt": "f_p_blkt_coolant_pump_total_heat",
"fpumpshld": "f_p_shld_coolant_pump_total_heat",
Expand Down Expand Up @@ -457,6 +457,14 @@
"dr_hts_tape": "dr_tf_hts_tape",
"coppera_m2_max": "tf_coppera_m2_max",
"f_ster_div_single": None,
"fradpwr": "f_p_plasma_separatrix_rad_max",
"aplasmin": "rminor_min",
"nflutfmax": "flu_tf_neutron_fast_max",
"pseprmax": "p_plasma_separatrix_rmajor_max_mw",
"avail_min": "f_t_plant_available_min",
"f_alpha_energy_confinement_min": "f_t_alpha_energy_confinement_min",
"zeff_max": "n_charge_plasma_effective_vol_avg_max",
"psepbqarmax": "p_div_bt_q_aspect_rmajor_max_mw",
}

OBS_VARS_HELP = {
Expand Down
2 changes: 1 addition & 1 deletion process/core/io/plot/scans.py
Original file line number Diff line number Diff line change
Expand Up @@ -107,7 +107,7 @@ def plot_scan(
28: "b_plasma_toroidal_on_axis",
29: "radius_plasma_core_norm",
30: "", # OBSOLETE
31: "f_alpha_energy_confinement_min",
31: "f_t_alpha_energy_confinement_min",
32: "epsvmc",
33: "ttarget",
34: "qtargettotal",
Expand Down
4 changes: 2 additions & 2 deletions process/core/io/plot/summary.py
Original file line number Diff line number Diff line change
Expand Up @@ -2817,7 +2817,7 @@ def plot_main_plasma_information(
f"Lawson Triple product: {mfile.get('nttau', scan=scan):.4e} keV·s/m³\n"
f"Transport loss power assumed in scaling law: {mfile.get('p_plasma_loss_mw', scan=scan):.4f} MW\n"
f"Plasma thermal energy (inc. $\\alpha$), $W$: {mfile.get('e_plasma_beta', scan=scan) / 1e9:.4f} GJ\n"
f"Alpha particle confinement time: {mfile.get('t_alpha_confinement', scan=scan):.4f} s | $\\tau_{{\\alpha}}/\\tau_{{e}}$: {mfile.get('f_alpha_energy_confinement', scan=scan):.4f}"
f"Alpha particle confinement time: {mfile.get('t_alpha_confinement', scan=scan):.4f} s | $\\tau_{{\\alpha}}/\\tau_{{e}}$: {mfile.get('f_t_alpha_energy_confinement', scan=scan):.4f}"
)

axis.text(
Expand Down Expand Up @@ -15563,7 +15563,7 @@ def main_plot(
temp_quench_max=m_file.get("temp_tf_conductor_quench_max", scan=scan),
cu_rrr=m_file.get("rrr_tf_cu", scan=scan),
t_quench_detection=m_file.get("t_tf_quench_detection", scan=scan),
fluence=m_file.get("nflutfmax", scan=scan),
fluence=m_file.get("flu_tf_neutron_fast_max", scan=scan),
j_operating=m_file.get("j_tf_wp", scan=scan),
a_tf_turn_cable_space=m_file.get(
"a_tf_turn_cable_space_no_void", scan=scan
Expand Down
2 changes: 1 addition & 1 deletion process/core/io/variable_metadata.py
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ class VariableMetadata:
description="Average electron temperature",
units="keV",
),
"f_alpha_energy_confinement_min": VariableMetadata(
"f_t_alpha_energy_confinement_min": VariableMetadata(
latex=r"$max : \frac{\tau_\mathrm{\alpha}}{\tau_\mathrm{E}}$",
description="Ratio of alpha heating time to energy confinement time",
units="",
Expand Down
6 changes: 3 additions & 3 deletions process/core/scan.py
Original file line number Diff line number Diff line change
Expand Up @@ -92,8 +92,8 @@ def _missing_(cls, var):
"b_plasma_toroidal_on_axis", "Tor._field_on_axis_(T)", 28
)
coreradius = ScanVariable("coreradius", "Core_radius", 29)
f_alpha_energy_confinement_min = ScanVariable(
"f_alpha_energy_confinement_min", "t_alpha_confinement/taueff_lower_limit", 31
f_t_alpha_energy_confinement_min = ScanVariable(
"f_t_alpha_energy_confinement_min", "t_alpha_confinement/taueff_lower_limit", 31
)
epsvmc = ScanVariable("epsvmc", "VMCON error tolerance", 32)
boundu129 = ScanVariable("boundu(129)", " Neon upper limit", 38)
Expand Down Expand Up @@ -1126,7 +1126,7 @@ def scan_select(self, nwp, swp, iscn):
case 29:
self.data.impurity_radiation.radius_plasma_core_norm = swp[iscn - 1]
case 31:
self.data.constraints.f_alpha_energy_confinement_min = swp[iscn - 1]
self.data.constraints.f_t_alpha_energy_confinement_min = swp[iscn - 1]
case 32:
numerics.epsvmc = swp[iscn - 1]
case 38:
Expand Down
Loading
Loading