From 0ed0bce2b8ea06f7f1ae3b38eaf8301a62261a4c Mon Sep 17 00:00:00 2001 From: Timothy Nunn Date: Fri, 28 Feb 2025 10:56:19 +0000 Subject: [PATCH 1/6] Convert loadxc to Python --- process/iteration_variables.py | 366 +++++++++++++++++++++++++ process/main.py | 3 +- source/fortran/iteration_variables.f90 | 256 ----------------- source/fortran/numerics.f90 | 4 +- 4 files changed, 369 insertions(+), 260 deletions(-) create mode 100644 process/iteration_variables.py diff --git a/process/iteration_variables.py b/process/iteration_variables.py new file mode 100644 index 0000000000..f334799a82 --- /dev/null +++ b/process/iteration_variables.py @@ -0,0 +1,366 @@ +from dataclasses import dataclass +from typing import Any +from warnings import warn + +import numpy as np + +import process.fortran as fortran +from process.exceptions import ProcessValueError +from process.utilities.f2py_string_patch import ( + f2py_compatible_to_string, + string_to_f2py_compatible, +) + + +@dataclass +class IterationVariable: + name: str + """The name of the variable""" + module: Any + """The Fortran module that this variable should be set on.""" + lower_bound: float + """The default lower bound of the iteration variable""" + upper_bound: float + """The default upper bound of the iteration variable""" + target_name: str | None = None + """If specified, the iteration variable is set as `module.target_name` + rather than `module.name`. + """ + array_index: int | None = None + """If `module.name` is an array, the iteration variable can only modify + `array_index` of that array. + """ + + +ITERATION_VARIABLES = { + 1: IterationVariable("aspect", fortran.physics_variables, 1.1, 10.00), + 2: IterationVariable("bt", fortran.physics_variables, 0.010, 30.00), + 3: IterationVariable("rmajor", fortran.physics_variables, 0.1, 50.00), + 4: IterationVariable("te", fortran.physics_variables, 5.0, 150.0), + 5: IterationVariable("beta", fortran.physics_variables, 0.001, 1.0), + 6: IterationVariable("dene", fortran.physics_variables, 2.0e19, 1.0e21), + 7: IterationVariable("f_nd_beam_electron", fortran.physics_variables, 1.0e-6, 1.0), + 8: IterationVariable( + "fbeta_poloidal_eps", fortran.constraint_variables, 0.001, 1.0 + ), + 9: IterationVariable("fdene", fortran.constraint_variables, 0.001, 1.0), + 10: IterationVariable("hfact", fortran.physics_variables, 0.1, 3.0), + 11: IterationVariable("pheat", fortran.current_drive_variables, 1.0e-3, 1.0e3), + 12: IterationVariable("oacdcp", fortran.tfcoil_variables, 1.0e5, 1.50e8), + 13: IterationVariable("dr_tf_inboard", fortran.build_variables, 0.1, 5.0), + 14: IterationVariable("fwalld", fortran.constraint_variables, 0.001, 1.0), + 15: IterationVariable("fvs", fortran.constraint_variables, 0.001, 10.000), + 16: IterationVariable("dr_cs", fortran.build_variables, 0.010, 10.00), + 17: IterationVariable("t_between_pulse", fortran.times_variables, 0.1, 1.0e8), + 18: IterationVariable("q95", fortran.physics_variables, 2.0, 50.00), + 19: IterationVariable("beam_energy", fortran.current_drive_variables, 1.0, 1.0e6), + 20: IterationVariable("temp_cp_average", fortran.tfcoil_variables, 40.00, 3.0e2), + 21: IterationVariable("ft_burn", fortran.constraint_variables, 0.001, 1.0), + 23: IterationVariable("fcoolcp", fortran.tfcoil_variables, 0.1, 0.50), + 25: IterationVariable("fpnetel", fortran.constraint_variables, 0.001, 1.0), + 26: IterationVariable("ffuspow", fortran.constraint_variables, 0.001, 1.0), + 27: IterationVariable("fhldiv", fortran.constraint_variables, 0.001, 1.0), + 28: IterationVariable("fradpwr", fortran.constraint_variables, 0.001, 0.990), + 29: IterationVariable("dr_bore", fortran.build_variables, 0.1, 10.00), + 30: IterationVariable("fmva", fortran.constraint_variables, 0.010, 1.0), + 31: IterationVariable("gapomin", fortran.build_variables, 0.001, 1.0e1), + 32: IterationVariable("frminor", fortran.constraint_variables, 0.001, 1.0), + 33: IterationVariable("fportsz", fortran.constraint_variables, 0.001, 1.0), + 35: IterationVariable("fpeakb", fortran.constraint_variables, 0.001, 1.0), + 36: IterationVariable("fbeta_max", fortran.constraint_variables, 0.001, 1.0), + 37: IterationVariable("coheof", fortran.pfcoil_variables, 1.0e5, 1.0e8), + 38: IterationVariable("fjohc", fortran.constraint_variables, 0.010, 1.0), + 39: IterationVariable("fjohc0", fortran.constraint_variables, 0.001, 1.0), + 40: IterationVariable("fgamcd", fortran.constraint_variables, 0.001, 1.0), + 41: IterationVariable("fcohbop", fortran.pfcoil_variables, 0.001, 1.0), + 42: IterationVariable("dr_cs_tf_gap", fortran.build_variables, 0.001, 10.00), + 44: IterationVariable("fvsbrnni", fortran.physics_variables, 0.001, 1.0), + 45: IterationVariable("fqval", fortran.constraint_variables, 0.001, 1.0), + 46: IterationVariable("fpinj", fortran.constraint_variables, 0.001, 1.0), + 47: IterationVariable("feffcd", fortran.current_drive_variables, 0.001, 1.0), + 48: IterationVariable("fstrcase", fortran.constraint_variables, 0.001, 1.0), + 49: IterationVariable("fstrcond", fortran.constraint_variables, 0.001, 1.0), + 50: IterationVariable("fiooic", fortran.constraint_variables, 0.001, 1.0), + 51: IterationVariable("fvdump", fortran.constraint_variables, 0.001, 1.0), + 53: IterationVariable("fjprot", fortran.constraint_variables, 0.001, 1.0), + 54: IterationVariable("ftmargtf", fortran.constraint_variables, 0.001, 1.0), + 56: IterationVariable("tdmptf", fortran.tfcoil_variables, 0.1, 100.0), + 57: IterationVariable("thkcas", fortran.tfcoil_variables, 0.050, 1.0), + 58: IterationVariable("thwcndut", fortran.tfcoil_variables, 0.001, 0.1), + 59: IterationVariable("fcutfsu", fortran.tfcoil_variables, 0.001, 1.0), + 60: IterationVariable("cpttf", fortran.tfcoil_variables, 0.001, 4.0e4), + 61: IterationVariable( + "dr_shld_vv_gap_inboard", fortran.build_variables, 0.001, 10.00 + ), + 62: IterationVariable("fdtmp", fortran.constraint_variables, 0.001, 1.0), + 63: IterationVariable("ftpeak", fortran.constraint_variables, 0.001, 1.0), + 64: IterationVariable("fauxmn", fortran.constraint_variables, 0.001, 1.0), + 65: IterationVariable("t_current_ramp_up", fortran.times_variables, 0.1, 1.0e3), + 66: IterationVariable( + "ft_current_ramp_up", fortran.constraint_variables, 0.001, 1.0 + ), + 67: IterationVariable("ftcycl", fortran.constraint_variables, 0.001, 1.0), + 68: IterationVariable("fptemp", fortran.constraint_variables, 0.001, 1.0), + 69: IterationVariable("rcool", fortran.tfcoil_variables, 0.001, 0.010), + 70: IterationVariable("vcool", fortran.tfcoil_variables, 1.0, 1.0e2), + 71: IterationVariable("fq", fortran.constraint_variables, 0.001, 1.0), + 72: IterationVariable("fipir", fortran.constraint_variables, 0.001, 1.0), + 73: IterationVariable( + "dr_fw_plasma_gap_inboard", fortran.build_variables, 0.001, 10.00 + ), + 74: IterationVariable( + "dr_fw_plasma_gap_outboard", fortran.build_variables, 0.001, 10.00 + ), + 75: IterationVariable("tfootfi", fortran.build_variables, 0.200, 5.0), + 79: IterationVariable("fbeta_poloidal", fortran.constraint_variables, 0.001, 1.0), + 81: IterationVariable("edrive", fortran.ife_variables, 1.0e5, 5.0e7), + 82: IterationVariable("drveff", fortran.ife_variables, 0.010, 1.0), + 83: IterationVariable("tgain", fortran.ife_variables, 1.0, 500.0), + 84: IterationVariable("chrad", fortran.ife_variables, 0.1, 20.00), + 85: IterationVariable("pdrive", fortran.ife_variables, 1.0e6, 200.0e6), + 86: IterationVariable("frrmax", fortran.ife_variables, 0.001, 1.0), + 89: IterationVariable("ftbr", fortran.constraint_variables, 0.001, 1.0), + 90: IterationVariable("blbuith", fortran.build_variables, 0.001, 2.0), + 91: IterationVariable("blbuoth", fortran.build_variables, 0.001, 2.0), + 92: IterationVariable("fflutf", fortran.constraint_variables, 0.001, 1.0), + 93: IterationVariable("dr_shld_inboard", fortran.build_variables, 0.001, 10.00), + 94: IterationVariable("dr_shld_outboard", fortran.build_variables, 0.001, 10.00), + 95: IterationVariable("fptfnuc", fortran.constraint_variables, 0.001, 1.0), + 96: IterationVariable("fvvhe", fortran.constraint_variables, 0.001, 1.0), + 97: IterationVariable("fpsepr", fortran.constraint_variables, 0.001, 1.0), + 98: IterationVariable("li6enrich", fortran.fwbs_variables, 10.00, 100.0), + 103: IterationVariable("fl_h_threshold", fortran.constraint_variables, 0.001, 1.0), + 104: IterationVariable("fcwr", fortran.constraint_variables, 0.001, 1.0), + 105: IterationVariable("fnbshinef", fortran.constraint_variables, 0.001, 1.0), + 106: IterationVariable("ftmargoh", fortran.constraint_variables, 0.001, 1.0), + 107: IterationVariable("favail", fortran.cost_variables, 0.001, 1.0), + 108: IterationVariable("breeder_f", fortran.fwbs_variables, 0.060, 1.0), + 109: IterationVariable( + "f_nd_alpha_electron", fortran.physics_variables, 0.050, 0.150 + ), + 110: IterationVariable( + "falpha_energy_confinement", fortran.constraint_variables, 0.001, 1.0 + ), + 111: IterationVariable("fniterpump", fortran.constraint_variables, 0.001, 1.0), + 112: IterationVariable("fzeffmax", fortran.constraint_variables, 0.001, 1.0), + 113: IterationVariable("fmaxvvstress", fortran.constraint_variables, 0.001, 1.0), + 114: IterationVariable("len_fw_channel", fortran.fwbs_variables, 0.001, 1.0e3), + 115: IterationVariable("fpoloidalpower", fortran.constraint_variables, 0.001, 1.0), + 116: IterationVariable("fradwall", fortran.constraint_variables, 0.001, 1.0), + 117: IterationVariable("fpsepbqar", fortran.constraint_variables, 0.001, 1.0), + 118: IterationVariable("fpsep", fortran.constraint_variables, 0.001, 1.0), + 119: IterationVariable("tesep", fortran.physics_variables, 0.0, 1.0e1), + 122: IterationVariable("oh_steel_frac", fortran.pfcoil_variables, 0.001, 0.950), + 123: IterationVariable("foh_stress", fortran.constraint_variables, 0.001, 1.0), + 125: IterationVariable( + "fimp(03)", + fortran.impurity_radiation_module, + 1e-8, + 0.01, + target_name="impurity_arr_frac", + array_index=2, + ), + 126: IterationVariable( + "fimp(04)", + fortran.impurity_radiation_module, + 1e-8, + 0.01, + target_name="impurity_arr_frac", + array_index=3, + ), + 127: IterationVariable( + "fimp(05)", + fortran.impurity_radiation_module, + 1e-8, + 0.01, + target_name="impurity_arr_frac", + array_index=4, + ), + 128: IterationVariable( + "fimp(06)", + fortran.impurity_radiation_module, + 1e-8, + 0.01, + target_name="impurity_arr_frac", + array_index=5, + ), + 129: IterationVariable( + "fimp(07)", + fortran.impurity_radiation_module, + 1e-8, + 0.01, + target_name="impurity_arr_frac", + array_index=6, + ), + 130: IterationVariable( + "fimp(08)", + fortran.impurity_radiation_module, + 1e-8, + 0.01, + target_name="impurity_arr_frac", + array_index=7, + ), + 131: IterationVariable( + "fimp(09)", + fortran.impurity_radiation_module, + 1e-8, + 0.01, + target_name="impurity_arr_frac", + array_index=8, + ), + 132: IterationVariable( + "fimp(10)", + fortran.impurity_radiation_module, + 1e-8, + 0.01, + target_name="impurity_arr_frac", + array_index=9, + ), + 133: IterationVariable( + "fimp(11)", + fortran.impurity_radiation_module, + 1e-8, + 0.01, + target_name="impurity_arr_frac", + array_index=10, + ), + 134: IterationVariable( + "fimp(12)", + fortran.impurity_radiation_module, + 1e-8, + 0.01, + target_name="impurity_arr_frac", + array_index=11, + ), + 135: IterationVariable( + "fimp(13)", + fortran.impurity_radiation_module, + 1e-8, + 0.01, + target_name="impurity_arr_frac", + array_index=12, + ), + 136: IterationVariable( + "fimp(14)", + fortran.impurity_radiation_module, + 1e-8, + 0.01, + target_name="impurity_arr_frac", + array_index=13, + ), + 137: IterationVariable("fplhsep", fortran.physics_variables, 0.001, 1.0), + 138: IterationVariable( + "rebco_thickness", fortran.physics_variables, 0.01e-6, 100.0e-6 + ), + 139: IterationVariable("copper_thick", fortran.rebco_variables, 1.0e-6, 1.0e-3), + 140: IterationVariable("dr_tf_wp", fortran.tfcoil_variables, 0.001, 2.0), + 141: IterationVariable("fcqt", fortran.constraint_variables, 0.001, 1.0), + 142: IterationVariable("nesep", fortran.physics_variables, 1.0e17, 1.0e20), + 143: IterationVariable("f_coppera_m2", fortran.rebco_variables, 0.001, 1.0), + 144: IterationVariable("fnesep", fortran.constraint_variables, 0.001, 1.0), + 145: IterationVariable("fgwped", fortran.physics_variables, 0.1, 0.9), + 146: IterationVariable("fcpttf", fortran.constraint_variables, 0.001, 1.0), + 147: IterationVariable("freinke", fortran.constraint_variables, 0.001, 1.0), + 149: IterationVariable("fbmaxcs", fortran.pfcoil_variables, 0.001, 1.0), + 152: IterationVariable("fgwsep", fortran.physics_variables, 0.001, 0.5), + 153: IterationVariable("fpdivlim", fortran.physics_variables, 0.001, 1.0), + 154: IterationVariable("fne0", fortran.physics_variables, 0.001, 1.0), + 155: IterationVariable("pfusife", fortran.ife_variables, 5.0e2, 3.0e3), + 156: IterationVariable("rrin", fortran.ife_variables, 1.0, 1.0e1), + 157: IterationVariable("fvssu", fortran.pfcoil_variables, 1.0e-3, 1.0e1), + 158: IterationVariable("croco_thick", fortran.rebco_variables, 1.0e-3, 1.0e-1), + 159: IterationVariable("ftoroidalgap", fortran.tfcoil_variables, 1.0e-4, 1.0), + 160: IterationVariable("f_avspace", fortran.build_variables, 0.010, 1.0), + 161: IterationVariable("fbeta_min", fortran.constraint_variables, 0.010, 1.0), + 162: IterationVariable("r_cp_top", fortran.build_variables, 0.0010, 10.0), + 163: IterationVariable("f_t_turn_tf", fortran.tfcoil_variables, 0.0010, 1000.0), + 164: IterationVariable("f_crypmw", fortran.heat_transport_variables, 0.001, 1.0), + 165: IterationVariable("fstr_wp", fortran.constraint_variables, 1.0e-9, 1.0), + 166: IterationVariable("f_copperaoh_m2", fortran.rebco_variables, 0.001, 1.0), + 167: IterationVariable("fncycle", fortran.constraint_variables, 1.0e-8, 1.0), + 168: IterationVariable("fecrh_ignition", fortran.constraint_variables, 0.010, 2.0), + 169: IterationVariable( + "te0_ecrh_achievable", fortran.stellarator_variables, 1.0, 1.0e3 + ), + 170: IterationVariable("beta_div", fortran.divertor_variables, 0.49, 5.01), + 171: IterationVariable("casths_fraction", fortran.tfcoil_variables, 0.01, 0.99), + 172: IterationVariable("casths", fortran.tfcoil_variables, 0.001, 1.0), + 173: IterationVariable("f_tritium", fortran.physics_variables, 0.000, 1.000), + 174: IterationVariable("triang", fortran.physics_variables, 0.00, 1.00), + 175: IterationVariable("kappa", fortran.physics_variables, 0.00, 10.00), +} + + +def load_iteration_variables(): + """Loads the physics and engineering variables into the optimisation variable array.""" + + for i in range(fortran.numerics.nvar): + variable_index = fortran.numerics.ixc[i].item() + iteration_variable = ITERATION_VARIABLES[variable_index] + + # use ... as the default return value because None might be a valid return from Fortran? + iteration_variable_value = getattr( + iteration_variable.module, + iteration_variable.target_name or iteration_variable.name, + ..., + ) + + if iteration_variable_value is ...: + error_msg = ( + f"Could not get the value for iteration variable {variable_index} " + f"({iteration_variable.name})" + ) + raise ProcessValueError(error_msg) + + # if an array index is specified, iteration_variable_value is currently + # the array and not the value of interest + if iteration_variable.array_index is not None: + iteration_variable_value = iteration_variable_value[ + iteration_variable.array_index + ] + + fortran.numerics.xcm[i] = iteration_variable_value + fortran.numerics.name_xc[i] = string_to_f2py_compatible( + fortran.numerics.name_xc[i], iteration_variable.name + ) + + # warn of the iteration variable is also a scan variable because this will cause + # the optimiser and scan to overwrite the same variable and conflict + if iteration_variable.name in ( + f2py_compatible_to_string(fortran.global_variables.vlabel), + f2py_compatible_to_string(fortran.global_variables.vlabel_2), + ): + warn( + ( + "The sweep variable is also an iteration variable and will be " + "overwritten by the optiomiser" + ), + stacklevel=3, + ) + + # check that the iteration variable is valid (not 0, NaN, inf, or very large) + + if abs(iteration_variable_value) <= 1e-12: + error_msg = ( + f"Iteration variable {variable_index} ({iteration_variable.name}) " + "is 0 (or very close)" + ) + raise ProcessValueError( + error_msg, iteration_variable_value=iteration_variable_value + ) + + if np.isnan(iteration_variable_value) or np.isinf(iteration_variable_value): + error_msg = ( + f"Iteration variable {variable_index} ({iteration_variable.name}) is an " + "invalid number" + ) + raise ProcessValueError( + error_msg, iteration_variable_value=iteration_variable_value + ) + + fortran.numerics.scale[i] = 1.0 / iteration_variable_value + fortran.numerics.scafc[i] = iteration_variable_value + + # xcm = xcm / scale which is equivalent to 1.0 + # because xcm was previously set at x and scale = 1/x + fortran.numerics.xcm[i] = 1.0 diff --git a/process/main.py b/process/main.py index c95b612ad5..c1e022ba8e 100644 --- a/process/main.py +++ b/process/main.py @@ -80,6 +80,7 @@ process_warnings, vary_iteration_variables, ) +from process.iteration_variables import load_iteration_variables from process.pfcoil import PFCoil from process.physics import Physics from process.plasma_geometry import PlasmaGeom @@ -480,7 +481,7 @@ def run_scan(self, solver): elif fortran.numerics.ioptimz == -2: # No optimisation: compute the output variables now # Get optimisation parameters x, evaluate models - fortran.define_iteration_variables.loadxc() + load_iteration_variables() self.ifail = 6 write_output_files(models=self.models, ifail=self.ifail) self.show_errors() diff --git a/source/fortran/iteration_variables.f90 b/source/fortran/iteration_variables.f90 index 34540907ed..4dabfcd576 100755 --- a/source/fortran/iteration_variables.f90 +++ b/source/fortran/iteration_variables.f90 @@ -3941,262 +3941,6 @@ subroutine set_itv_177(ratio) DUMMY = ratio end subroutine set_itv_177 - !------------------------------------------------------ - - subroutine loadxc - !! Routine to load the physics and engineering variables into the - !! optimisation variables array - !! author: P J Knight, CCFE, Culham Science Centre - !! author: J Morris, CCFE, Culham Science Centre - !! None - !! This subroutine loads the physics and engineering variables - !! into the optimisation variables array XCM. - ! - ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - - use constants, only: nout - use error_handling, only: idiags, fdiags, report_error - use numerics, only: nvar, xcm, ixc, name_xc, lablxc, scafc, scale - use physics_variables, only: i_plasma_current - use global_variables, only: vlabel - implicit none - - ! Local variables - integer :: i - ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - if (allocated(name_xc)) deallocate(name_xc) - allocate(name_xc(nvar)) - name_xc = "" - - do i = 1,nvar - - select case (ixc(i)) - case (1); xcm(i) = itv_1() - case (2); xcm(i) = itv_2() - case (3); xcm(i) = itv_3() - case (4); xcm(i) = itv_4() - case (5); xcm(i) = itv_5() - case (6); xcm(i) = itv_6() - case (7); xcm(i) = itv_7() - case (8); xcm(i) = itv_8() - case (9); xcm(i) = itv_9() - case (10); xcm(i) = itv_10() - case (11); xcm(i) = itv_11() - case (12); xcm(i) = itv_12() - case (13); xcm(i) = itv_13() - case (14); xcm(i) = itv_14() - case (15); xcm(i) = itv_15() - case (16); xcm(i) = itv_16() - case (17); xcm(i) = itv_17() - case (18); xcm(i) = itv_18() - case (19); xcm(i) = itv_19() - case (20); xcm(i) = itv_20() - case (21); xcm(i) = itv_21() - case (22); xcm(i) = itv_22() - case (23); xcm(i) = itv_23() - case (24); xcm(i) = itv_24() - case (25); xcm(i) = itv_25() - case (26); xcm(i) = itv_26() - case (27); xcm(i) = itv_27() - case (28); xcm(i) = itv_28() - case (29); xcm(i) = itv_29() - case (30); xcm(i) = itv_30() - case (31); xcm(i) = itv_31() - case (32); xcm(i) = itv_32() - case (33); xcm(i) = itv_33() - case (34); - case (35); xcm(i) = itv_35() - case (36); xcm(i) = itv_36() - case (37); xcm(i) = itv_37() - case (38); xcm(i) = itv_38() - case (39); xcm(i) = itv_39() - case (40); xcm(i) = itv_40() - case (41); xcm(i) = itv_41() - case (42); xcm(i) = itv_42() - case (43); - case (44); xcm(i) = itv_44() - case (45); xcm(i) = itv_45() - case (46); xcm(i) = itv_46() - case (47); xcm(i) = itv_47() - case (48); xcm(i) = itv_48() - case (49); xcm(i) = itv_49() - case (50); xcm(i) = itv_50() - case (51); xcm(i) = itv_51() - case (52); xcm(i) = itv_52() - case (53); xcm(i) = itv_53() - case (54); xcm(i) = itv_54() - case (55); xcm(i) = itv_55() - case (56); xcm(i) = itv_56() - case (57); xcm(i) = itv_57() - case (58); xcm(i) = itv_58() - case (59); xcm(i) = itv_59() - case (60); xcm(i) = itv_60() - case (61); xcm(i) = itv_61() - case (62); xcm(i) = itv_62() - case (63); xcm(i) = itv_63() - case (64); xcm(i) = itv_64() - case (65); xcm(i) = itv_65() - case (66); xcm(i) = itv_66() - case (67); xcm(i) = itv_67() - case (68); xcm(i) = itv_68() - case (69); xcm(i) = itv_69() - case (70); xcm(i) = itv_70() - case (71); xcm(i) = itv_71() - case (72); xcm(i) = itv_72() - case (73); xcm(i) = itv_73() - case (74); xcm(i) = itv_74() - case (75); xcm(i) = itv_75() - case (76); xcm(i) = itv_76() - case (77); xcm(i) = itv_77() - case (78); xcm(i) = itv_78() - case (79); xcm(i) = itv_79() - case (80); xcm(i) = itv_80() - case (81); xcm(i) = itv_81() - case (82); xcm(i) = itv_82() - case (83); xcm(i) = itv_83() - case (84); xcm(i) = itv_84() - case (85); xcm(i) = itv_85() - case (86); xcm(i) = itv_86() - case (87); - case (88); - case (89); xcm(i) = itv_89() - case (90); xcm(i) = itv_90() - case (91); xcm(i) = itv_91() - case (92); xcm(i) = itv_92() - case (93); xcm(i) = itv_93() - case (94); xcm(i) = itv_94() - case (95); xcm(i) = itv_95() - case (96); xcm(i) = itv_96() - case (97); xcm(i) = itv_97() - case (98); xcm(i) = itv_98() - case (99); - case (100); - case (101); - case (102); - case (103); xcm(i) = itv_103() - case (104); xcm(i) = itv_104() - case (105); xcm(i) = itv_105() - case (106); xcm(i) = itv_106() - case (107); xcm(i) = itv_107() - case (108); xcm(i) = itv_108() - case (109); xcm(i) = itv_109() - case (110); xcm(i) = itv_110() - case (111); xcm(i) = itv_111() - case (112); xcm(i) = itv_112() - case (113); xcm(i) = itv_113() - case (114); xcm(i) = itv_114() - case (115); xcm(i) = itv_115() - case (116); xcm(i) = itv_116() - case (117); xcm(i) = itv_117() - case (118); xcm(i) = itv_118() - case (119); xcm(i) = itv_119() - case (120); xcm(i) = itv_120() - case (121); xcm(i) = itv_121() - case (122); xcm(i) = itv_122() - case (123); xcm(i) = itv_123() - case (124); xcm(i) = itv_124() - case (125); xcm(i) = itv_125() - case (126); xcm(i) = itv_126() - case (127); xcm(i) = itv_127() - case (128); xcm(i) = itv_128() - case (129); xcm(i) = itv_129() - case (130); xcm(i) = itv_130() - case (131); xcm(i) = itv_131() - case (132); xcm(i) = itv_132() - case (133); xcm(i) = itv_133() - case (134); xcm(i) = itv_134() - case (135); xcm(i) = itv_135() - case (136); xcm(i) = itv_136() - case (137); xcm(i) = itv_137() - case (138); xcm(i) = itv_138() - case (139); xcm(i) = itv_139() - case (140); xcm(i) = itv_140() - case (141); xcm(i) = itv_141() - case (142); xcm(i) = itv_142() - case (143); xcm(i) = itv_143() - case (144); xcm(i) = itv_144() - case (145); xcm(i) = itv_145() - case (146); xcm(i) = itv_146() - case (147); xcm(i) = itv_147() - case (148); xcm(i) = itv_148() - case (149); xcm(i) = itv_149() - case (150); - case (151); - case (152); xcm(i) = itv_152() - case (153); xcm(i) = itv_153() - case (154); xcm(i) = itv_154() - case (155); xcm(i) = itv_155() - case (156); xcm(i) = itv_156() - case (157); xcm(i) = itv_157() - case (158); xcm(i) = itv_158() - case (159); xcm(i) = itv_159() - case (160); xcm(i) = itv_160() - case (161); xcm(i) = itv_161() - case (162); xcm(i) = itv_162() - case (163); xcm(i) = itv_163() - case (164); xcm(i) = itv_164() - case (165); xcm(i) = itv_165() - case (166); xcm(i) = itv_166() - case (167); xcm(i) = itv_167() - case (168); xcm(i) = itv_168() - case (169); xcm(i) = itv_169() - case (170); xcm(i) = itv_170() - case (171); xcm(i) = itv_171() - case (172); xcm(i) = itv_172() - case (173); xcm(i) = itv_173() - case (174); xcm(i) = itv_174() - case (175); xcm(i) = itv_175() - ! DUMMY Cases - case (176); xcm(i) = itv_176() - case (177); xcm(i) = itv_177() - - case default - idiags(1) = i ; idiags(2) = ixc(i) - call report_error(54) - - end select - - - ! Simple list of iteration variable names - name_xc(i) = lablxc(ixc(i)) - ! Note that iteration variable 18 has more than one name: - if ((ixc(i) == 18).and.(i_plasma_current /= 2)) name_xc(i) = 'q95' - if ((ixc(i) == 18).and.(i_plasma_current == 2)) name_xc(i) = 'qbar' - - - ! MDK Check if sweep variable is also an iteration variable - if (name_xc(i) == vlabel) then - write(nout,*) 'WARNING: The sweep variable is also an iteration variable.' - write(nout,*) 'The values of the sweep variable will be overwritten by the optimiser.' - write(*,*) 'WARNING: The sweep variable is also an iteration variable.' - end if - - ! Check that no iteration variable is zero - - if (abs(xcm(i)) <= 1.0D-12) then - idiags(1) = i ; idiags(2) = ixc(i) - write(*,*) 'Iteration variable ',ixc(i),'(',trim(lablxc(ixc(i))),') is zero.' - call report_error(55) - end if - - if ((isnan(xcm(i)).or.(abs(xcm(i))>9.99D99))) then - idiags(1) = i ; idiags(2) = ixc(i) ; fdiags(1) = xcm(i) - call report_error(56) - end if - - end do - - do i = 1,nvar - if (abs(xcm(i)) > 1.0D-99) then - scale(i) = 1.0D0/xcm(i) - else - scale(i) = 1.0D0 - end if - scafc(i) = 1.0D0/scale(i) - xcm(i) = xcm(i)*scale(i) - end do - - end subroutine loadxc ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! subroutine convxc(xc,nn) diff --git a/source/fortran/numerics.f90 b/source/fortran/numerics.f90 index 707ed262e0..d81af5588e 100755 --- a/source/fortran/numerics.f90 +++ b/source/fortran/numerics.f90 @@ -383,7 +383,7 @@ module numerics !!
  • (175) EMPTY : Description ! Issue 287 iteration variables are now defined in module define_iteration_variables in iteration variables.f90 - character(len=14), dimension(:), allocatable :: name_xc + character*14, dimension(ipnvars) :: name_xc real(dp) :: sqsumsq !! sqsumsq : sqrt of the sum of the square of the constraint residuals @@ -597,8 +597,6 @@ subroutine init_numerics() xcm = 0.0D0 xcs = 0.0D0 vlam = 0.0D0 - if (allocated(name_xc)) deallocate(name_xc) - allocate(name_xc(1)) name_xc = "" end subroutine init_numerics From 09deafc0960e633f9afa14ea8568f45a8a0dc1f7 Mon Sep 17 00:00:00 2001 From: Timothy Nunn Date: Thu, 6 Mar 2025 16:19:33 +0000 Subject: [PATCH 2/6] Convert convxc to Python --- process/caller.py | 3 +- process/iteration_variables.py | 80 ++++++-- source/fortran/iteration_variables.f90 | 248 ------------------------- 3 files changed, 65 insertions(+), 266 deletions(-) diff --git a/process/caller.py b/process/caller.py index 444f167037..7e30a20618 100644 --- a/process/caller.py +++ b/process/caller.py @@ -10,6 +10,7 @@ from process import fortran as ft from process.final import finalise from process.io.mfile import MFile +from process.iteration_variables import set_scaled_iteration_variable from process.objectives import objective_function from process.utilities.f2py_string_patch import f2py_compatible_to_string @@ -229,7 +230,7 @@ def _call_models_once(self, xc: np.ndarray) -> None: ft.numerics.ncalls = ft.numerics.ncalls + 1 # Convert variables - ft.define_iteration_variables.convxc(xc, nvars) + set_scaled_iteration_variable(xc, nvars) # Perform the various function calls # Stellarator caller diff --git a/process/iteration_variables.py b/process/iteration_variables.py index f334799a82..e19ef784be 100644 --- a/process/iteration_variables.py +++ b/process/iteration_variables.py @@ -1,3 +1,4 @@ +from copy import deepcopy from dataclasses import dataclass from typing import Any from warnings import warn @@ -291,6 +292,24 @@ class IterationVariable: } +def check_iteration_variable(iteration_variable_value, name: str = ""): + """Check that the iteration variable value is valid (not a weird number or too small). + + Raises an error upon encountering an invalid value, otherwise does nothing. + """ + if abs(iteration_variable_value) <= 1e-12: + error_msg = f"Iteration variable {name} is 0 (or very close)" + raise ProcessValueError( + error_msg, iteration_variable_value=iteration_variable_value + ) + + if np.isnan(iteration_variable_value) or np.isinf(iteration_variable_value): + error_msg = f"Iteration variable {name} invalid number" + raise ProcessValueError( + error_msg, iteration_variable_value=iteration_variable_value + ) + + def load_iteration_variables(): """Loads the physics and engineering variables into the optimisation variable array.""" @@ -340,23 +359,10 @@ def load_iteration_variables(): # check that the iteration variable is valid (not 0, NaN, inf, or very large) - if abs(iteration_variable_value) <= 1e-12: - error_msg = ( - f"Iteration variable {variable_index} ({iteration_variable.name}) " - "is 0 (or very close)" - ) - raise ProcessValueError( - error_msg, iteration_variable_value=iteration_variable_value - ) - - if np.isnan(iteration_variable_value) or np.isinf(iteration_variable_value): - error_msg = ( - f"Iteration variable {variable_index} ({iteration_variable.name}) is an " - "invalid number" - ) - raise ProcessValueError( - error_msg, iteration_variable_value=iteration_variable_value - ) + check_iteration_variable( + iteration_variable_value, + name=f"{variable_index} ({iteration_variable.name})", + ) fortran.numerics.scale[i] = 1.0 / iteration_variable_value fortran.numerics.scafc[i] = iteration_variable_value @@ -364,3 +370,43 @@ def load_iteration_variables(): # xcm = xcm / scale which is equivalent to 1.0 # because xcm was previously set at x and scale = 1/x fortran.numerics.xcm[i] = 1.0 + + +def set_scaled_iteration_variable(xc, nn: int): + """Converts scaled iteration variables back to their real values and sets them in the code. + + :param xc: scaled iteration variable values + :param nn: number of iteration variables + """ + + for i in range(nn): + # there is less error handling here than in load_iteration_variables + # because many errors will be caught in load_iteration_variables which is + # run first. This verifies the variables exist and the module target is correct. + variable_index = fortran.numerics.ixc[i].item() + iteration_variable = ITERATION_VARIABLES[variable_index] + + ratio = xc[i] / fortran.numerics.scale[i] + + if iteration_variable.array_index is None: + setattr( + iteration_variable.module, + iteration_variable.target_name or iteration_variable.name, + ratio, + ) + else: + current_array = getattr( + iteration_variable.module, + iteration_variable.target_name or iteration_variable.name, + ) + new_array = deepcopy(current_array) + new_array[iteration_variable.array_index] = ratio + setattr( + iteration_variable.module, + iteration_variable.target_name or iteration_variable.name, + new_array, + ) + + check_iteration_variable( + ratio, name=f"{variable_index} ({iteration_variable.name})" + ) diff --git a/source/fortran/iteration_variables.f90 b/source/fortran/iteration_variables.f90 index 4dabfcd576..bf7225688c 100755 --- a/source/fortran/iteration_variables.f90 +++ b/source/fortran/iteration_variables.f90 @@ -3943,254 +3943,6 @@ end subroutine set_itv_177 ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - subroutine convxc(xc,nn) - - !! Routine to convert scaled iteration variables back to - !! their real values - !! author: P J Knight, CCFE, Culham Science Centre - !! author: J Morris, CCFE, Culham Science Centre - !! xc(ipnvars) : input/output real array : scaled iteration variable values - !! nn : input integer : number of iteration variables - !! This subroutine converts the scaled iteration variables back to - !! their real values. - ! - ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - - use error_handling, only: idiags, fdiags, report_error - use numerics, only: ipnvars, scale, ixc, lablxc -#ifndef dp - use, intrinsic :: iso_fortran_env, only: dp=>real64 -#endif - - implicit none - - ! Arguments - - integer, intent(in) :: nn - real(dp), dimension(:), intent(in) :: xc - - ! Local variables - - integer :: i - real(dp)::ratio - - ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - - do i = 1,nn - ratio = xc(i)/scale(i) - - select case (ixc(i)) - case (1); call set_itv_1(ratio) - case (2); call set_itv_2(ratio) - case (3); call set_itv_3(ratio) - case (4); call set_itv_4(ratio) - case (5); call set_itv_5(ratio) - case (6); call set_itv_6(ratio) - case (7); call set_itv_7(ratio) - case (8); call set_itv_8(ratio) - case (9); call set_itv_9(ratio) - case (10); call set_itv_10(ratio) - case (11); call set_itv_11(ratio) - case (12); call set_itv_12(ratio) - case (13); call set_itv_13(ratio) - case (14); call set_itv_14(ratio) - case (15); call set_itv_15(ratio) - case (16); call set_itv_16(ratio) - case (17); call set_itv_17(ratio) - case (18); call set_itv_18(ratio) - case (19); call set_itv_19(ratio) - case (20); call set_itv_20(ratio) - case (21); call set_itv_21(ratio) - case (22); - case (23); call set_itv_23(ratio) - case (24); - case (25); call set_itv_25(ratio) - case (26); call set_itv_26(ratio) - case (27); call set_itv_27(ratio) - case (28); call set_itv_28(ratio) - case (29); call set_itv_29(ratio) - case (30); call set_itv_30(ratio) - case (31); call set_itv_31(ratio) - case (32); call set_itv_32(ratio) - case (33); call set_itv_33(ratio) - case (34); - case (35); call set_itv_35(ratio) - case (36); call set_itv_36(ratio) - case (37); call set_itv_37(ratio) - case (38); call set_itv_38(ratio) - case (39); call set_itv_39(ratio) - case (40); call set_itv_40(ratio) - case (41); call set_itv_41(ratio) - case (42); call set_itv_42(ratio) - case (43); - case (44); call set_itv_44(ratio) - case (45); call set_itv_45(ratio) - case (46); call set_itv_46(ratio) - case (47); call set_itv_47(ratio) - case (48); call set_itv_48(ratio) - case (49); call set_itv_49(ratio) - case (50); call set_itv_50(ratio) - case (51); call set_itv_51(ratio) - case (52); - case (53); call set_itv_53(ratio) - case (54); call set_itv_54(ratio) - case (55); - case (56); call set_itv_56(ratio) - case (57); call set_itv_57(ratio) - case (58); call set_itv_58(ratio) - case (59); call set_itv_59(ratio) - case (60); call set_itv_60(ratio) - case (61); call set_itv_61(ratio) - case (62); call set_itv_62(ratio) - case (63); call set_itv_63(ratio) - case (64); call set_itv_64(ratio) - case (65); call set_itv_65(ratio) - case (66); call set_itv_66(ratio) - case (67); call set_itv_67(ratio) - case (68); call set_itv_68(ratio) - case (69); call set_itv_69(ratio) - case (70); call set_itv_70(ratio) - case (71); call set_itv_71(ratio) - case (72); call set_itv_72(ratio) - case (73); call set_itv_73(ratio) - case (74); call set_itv_74(ratio) - case (75); call set_itv_75(ratio) - case (76); - case (77); - case (78); - case (79); call set_itv_79(ratio) - case (80); - case (81); call set_itv_81(ratio) - case (82); call set_itv_82(ratio) - case (83); call set_itv_83(ratio) - case (84); call set_itv_84(ratio) - case (85); call set_itv_85(ratio) - case (86); call set_itv_86(ratio) - case (87); - case (88); - case (89); call set_itv_89(ratio) - case (90); call set_itv_90(ratio) - case (91); call set_itv_91(ratio) - case (92); call set_itv_92(ratio) - case (93); call set_itv_93(ratio) - case (94); call set_itv_94(ratio) - case (95); call set_itv_95(ratio) - case (96); call set_itv_96(ratio) - case (97); call set_itv_97(ratio) - case (98); call set_itv_98(ratio) - case (99); - case (100); - case (101); - case (102); - case (103); call set_itv_103(ratio) - case (104); call set_itv_104(ratio) - case (105); call set_itv_105(ratio) - case (106); call set_itv_106(ratio) - case (107); call set_itv_107(ratio) - case (108); call set_itv_108(ratio) - case (109); call set_itv_109(ratio) - case (110); call set_itv_110(ratio) - case (111); call set_itv_111(ratio) - case (112); call set_itv_112(ratio) - case (113); call set_itv_113(ratio) - case (114); call set_itv_114(ratio) - case (115); call set_itv_115(ratio) - case (116); call set_itv_116(ratio) - case (117); call set_itv_117(ratio) - case (118); call set_itv_118(ratio) - case (119); call set_itv_119(ratio) - case (120); call set_itv_120(ratio) - case (121); call set_itv_121(ratio) - case (122); call set_itv_122(ratio) - case (123); call set_itv_123(ratio) - case (124); call set_itv_124(ratio) - case (125); call set_itv_125(ratio) - case (126); call set_itv_126(ratio) - case (127); call set_itv_127(ratio) - case (128); call set_itv_128(ratio) - case (129); call set_itv_129(ratio) - case (130); call set_itv_130(ratio) - case (131); call set_itv_131(ratio) - case (132); call set_itv_132(ratio) - case (133); call set_itv_133(ratio) - case (134); call set_itv_134(ratio) - case (135); call set_itv_135(ratio) - case (136); call set_itv_136(ratio) - case (137); call set_itv_137(ratio) - case (138); call set_itv_138(ratio) - case (139); call set_itv_139(ratio) - case (140); call set_itv_140(ratio) - case (141); call set_itv_141(ratio) - case (142); call set_itv_142(ratio) - case (143); call set_itv_143(ratio) - case (144); call set_itv_144(ratio) - case (145); call set_itv_145(ratio) - case (146); call set_itv_146(ratio) - case (147); call set_itv_147(ratio) - case (148); call set_itv_148(ratio) - case (149); call set_itv_149(ratio) - case (150); - case (151); - case (152); call set_itv_152(ratio) - case (153); call set_itv_153(ratio) - case (154); call set_itv_154(ratio) - case (155); call set_itv_155(ratio) - case (156); call set_itv_156(ratio) - case (157); call set_itv_157(ratio) - case (158); call set_itv_158(ratio) - case (159); call set_itv_159(ratio) - case (160); call set_itv_160(ratio) - case (161); call set_itv_161(ratio) - case (162); call set_itv_162(ratio) - case (163); call set_itv_163(ratio) - case (164); call set_itv_164(ratio) - case (165); call set_itv_165(ratio) - case (166); call set_itv_166(ratio) - case (167); call set_itv_167(ratio) - case (168); call set_itv_168(ratio) - case (169); call set_itv_169(ratio) - case (170); call set_itv_170(ratio) - case (171); call set_itv_171(ratio) - case (172); call set_itv_172(ratio) - case (173); call set_itv_173(ratio) - case (174); call set_itv_174(ratio) - case (175); call set_itv_175(ratio) - ! DUMMY Cases - case (176); call set_itv_176(ratio) - case (177); call set_itv_177(ratio) - - case default - call report_error(57) - - end select - - ! Check that no iteration variable is zero - - if (abs(xc(i)) <= 1.0D-12) then - idiags(1) = i ; idiags(2) = ixc(i) - write(*,*) 'Iteration variable ',ixc(i),'(',trim(lablxc(ixc(i))),') is zero.' - call report_error(58) - end if - - ! Crude method of catching NaN errors - - !if ((abs(xc(i)) > 9.99D99).or.(xc(i) /= xc(i))) then - if (isnan(xc(i)).or.(abs(xc(i))>9.99D99)) then - idiags(1) = i ; idiags(2) = ixc(i) ; fdiags(1) = xc(i) - call report_error(59) - end if - - if (abs(scale(i)) < 1.0D-99) then - idiags(1) = i ; idiags(2) = ixc(i) - call report_error(60) - end if - - end do - - end subroutine convxc - - ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - subroutine boundxc !! Routine to convert variable bounds to their real values From 79b31e2220b1165cad68d560822da087e61b7c30 Mon Sep 17 00:00:00 2001 From: Timothy Nunn Date: Thu, 6 Mar 2025 16:35:45 +0000 Subject: [PATCH 3/6] Convert boundxc to Python --- process/iteration_variables.py | 13 +++++++++++ process/optimiser.py | 7 +++--- source/fortran/iteration_variables.f90 | 31 -------------------------- 3 files changed, 17 insertions(+), 34 deletions(-) diff --git a/process/iteration_variables.py b/process/iteration_variables.py index e19ef784be..f741a17054 100644 --- a/process/iteration_variables.py +++ b/process/iteration_variables.py @@ -410,3 +410,16 @@ def set_scaled_iteration_variable(xc, nn: int): check_iteration_variable( ratio, name=f"{variable_index} ({iteration_variable.name})" ) + + +def load_scaled_bounds(): + """Sets the scaled bounds of the iteration variables.""" + + for i in range(fortran.numerics.nvar.item()): + variable_index = fortran.numerics.ixc[i].item() - 1 + fortran.numerics.itv_scaled_lower_bounds[i] = ( + fortran.numerics.boundl[variable_index] * fortran.numerics.scale[i] + ) + fortran.numerics.itv_scaled_upper_bounds[i] = ( + fortran.numerics.boundu[variable_index] * fortran.numerics.scale[i] + ) diff --git a/process/optimiser.py b/process/optimiser.py index 9cafbf7b18..92996c1416 100644 --- a/process/optimiser.py +++ b/process/optimiser.py @@ -1,5 +1,6 @@ from process.evaluators import Evaluators -from process.fortran import define_iteration_variables, numerics +from process.fortran import numerics +from process.iteration_variables import load_iteration_variables, load_scaled_bounds from process.solver import get_solver @@ -25,8 +26,8 @@ def __init__(self, models, solver_name): def run(self): """Run vmcon solver and retry if it fails in certain ways.""" # Initialise iteration variables and bounds in Fortran - define_iteration_variables.loadxc() - define_iteration_variables.boundxc() + load_iteration_variables() + load_scaled_bounds() # Initialise iteration variables and bounds in Python: relies on Fortran # iteration variables being defined above diff --git a/source/fortran/iteration_variables.f90 b/source/fortran/iteration_variables.f90 index bf7225688c..e76a9a8060 100755 --- a/source/fortran/iteration_variables.f90 +++ b/source/fortran/iteration_variables.f90 @@ -3940,36 +3940,5 @@ subroutine set_itv_177(ratio) real(kind(1.d0)) :: ratio DUMMY = ratio end subroutine set_itv_177 - - ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - - subroutine boundxc - - !! Routine to convert variable bounds to their real values - !! author: P J Knight, CCFE, Culham Science Centre - !! None - !! This subroutine converts the scaled iteration variable bounds - !! back to their real values. - !! ! - ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - - use numerics, only: nvar, itv_scaled_lower_bounds, itv_scaled_upper_bounds, scale, ixc, boundl, boundu - - implicit none - - ! Local variables - - integer :: i - - ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - - do i = 1,nvar - itv_scaled_lower_bounds(i) = boundl(ixc(i))*scale(i) - itv_scaled_upper_bounds(i) = boundu(ixc(i))*scale(i) - end do - - end subroutine boundxc - - ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! end module define_iteration_variables ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! From fc3b3b80e8f45e7abd385ef1da94452de622830e Mon Sep 17 00:00:00 2001 From: Timothy Nunn Date: Thu, 6 Mar 2025 16:36:24 +0000 Subject: [PATCH 4/6] Remove iteration_variables.f90 and use new Python API for initialisation and dicts --- CMakeLists.txt | 1 - process/init.py | 174 +- process/iteration_variables.py | 25 +- scripts/create_dicts.py | 52 +- source/fortran/iteration_variables.f90 | 3944 ------------------------ 5 files changed, 28 insertions(+), 4168 deletions(-) delete mode 100755 source/fortran/iteration_variables.f90 diff --git a/CMakeLists.txt b/CMakeLists.txt index 069d1f072a..c44d8e64ff 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -87,7 +87,6 @@ LIST(APPEND PROCESS_SRCS ife_variables.f90 heat_transport_variables.f90 buildings_variables.f90 - iteration_variables.f90 water_usage_variables.f90 constraint_equations.f90 constants.f90 diff --git a/process/init.py b/process/init.py index d6cd8ce946..654efc4627 100644 --- a/process/init.py +++ b/process/init.py @@ -7,6 +7,7 @@ import process import process.fortran as fortran +import process.iteration_variables as iteration_variables import process.process_output as process_output from process.blanket_library import init_blanket_library, init_primary_pumping_variables from process.build import init_build_variables @@ -53,7 +54,7 @@ def init_process(): fortran.error_handling.initialise_error_list() # Initialise the program variables - initialise_iterative_variables() + iteration_variables.initialise_iteration_variables() # Initialise the Fortran file specifiers # (creating and opening the files in the process) @@ -267,7 +268,6 @@ def init_all_module_vars(): init_pulse_variables() init_rebco_variables() init_reinke_variables() - fortran.define_iteration_variables.init_define_iteration_variables() init_watuse_variables() init_cs_fatigue_variables() init_blanket_library() @@ -276,176 +276,6 @@ def init_all_module_vars(): fortran.init_module.init_fortran_modules() -def initialise_iterative_variables(): - """Initialise each of the iteration variables""" - fortran.define_iteration_variables.init_itv_1() - fortran.define_iteration_variables.init_itv_2() - fortran.define_iteration_variables.init_itv_3() - fortran.define_iteration_variables.init_itv_4() - fortran.define_iteration_variables.init_itv_5() - fortran.define_iteration_variables.init_itv_6() - fortran.define_iteration_variables.init_itv_7() - fortran.define_iteration_variables.init_itv_8() - fortran.define_iteration_variables.init_itv_9() - fortran.define_iteration_variables.init_itv_10() - fortran.define_iteration_variables.init_itv_11() - fortran.define_iteration_variables.init_itv_12() - fortran.define_iteration_variables.init_itv_13() - fortran.define_iteration_variables.init_itv_14() - fortran.define_iteration_variables.init_itv_15() - fortran.define_iteration_variables.init_itv_16() - fortran.define_iteration_variables.init_itv_17() - fortran.define_iteration_variables.init_itv_18() - fortran.define_iteration_variables.init_itv_19() - fortran.define_iteration_variables.init_itv_20() - fortran.define_iteration_variables.init_itv_21() - - fortran.define_iteration_variables.init_itv_23() - - fortran.define_iteration_variables.init_itv_25() - fortran.define_iteration_variables.init_itv_26() - fortran.define_iteration_variables.init_itv_27() - fortran.define_iteration_variables.init_itv_28() - fortran.define_iteration_variables.init_itv_29() - fortran.define_iteration_variables.init_itv_30() - fortran.define_iteration_variables.init_itv_31() - fortran.define_iteration_variables.init_itv_32() - fortran.define_iteration_variables.init_itv_33() - fortran.define_iteration_variables.init_itv_35() - fortran.define_iteration_variables.init_itv_36() - fortran.define_iteration_variables.init_itv_37() - fortran.define_iteration_variables.init_itv_38() - fortran.define_iteration_variables.init_itv_39() - fortran.define_iteration_variables.init_itv_40() - fortran.define_iteration_variables.init_itv_41() - fortran.define_iteration_variables.init_itv_42() - - fortran.define_iteration_variables.init_itv_44() - fortran.define_iteration_variables.init_itv_45() - fortran.define_iteration_variables.init_itv_46() - fortran.define_iteration_variables.init_itv_47() - fortran.define_iteration_variables.init_itv_48() - fortran.define_iteration_variables.init_itv_49() - fortran.define_iteration_variables.init_itv_50() - fortran.define_iteration_variables.init_itv_51() - - fortran.define_iteration_variables.init_itv_53() - fortran.define_iteration_variables.init_itv_54() - - fortran.define_iteration_variables.init_itv_56() - fortran.define_iteration_variables.init_itv_57() - fortran.define_iteration_variables.init_itv_58() - fortran.define_iteration_variables.init_itv_59() - fortran.define_iteration_variables.init_itv_60() - fortran.define_iteration_variables.init_itv_61() - fortran.define_iteration_variables.init_itv_62() - fortran.define_iteration_variables.init_itv_63() - fortran.define_iteration_variables.init_itv_64() - fortran.define_iteration_variables.init_itv_65() - fortran.define_iteration_variables.init_itv_66() - fortran.define_iteration_variables.init_itv_67() - fortran.define_iteration_variables.init_itv_68() - fortran.define_iteration_variables.init_itv_69() - fortran.define_iteration_variables.init_itv_70() - fortran.define_iteration_variables.init_itv_71() - fortran.define_iteration_variables.init_itv_72() - fortran.define_iteration_variables.init_itv_73() - fortran.define_iteration_variables.init_itv_74() - fortran.define_iteration_variables.init_itv_75() - - fortran.define_iteration_variables.init_itv_79() - - fortran.define_iteration_variables.init_itv_81() - fortran.define_iteration_variables.init_itv_82() - fortran.define_iteration_variables.init_itv_83() - - fortran.define_iteration_variables.init_itv_85() - fortran.define_iteration_variables.init_itv_86() - - fortran.define_iteration_variables.init_itv_89() - fortran.define_iteration_variables.init_itv_90() - fortran.define_iteration_variables.init_itv_91() - fortran.define_iteration_variables.init_itv_92() - fortran.define_iteration_variables.init_itv_93() - fortran.define_iteration_variables.init_itv_94() - fortran.define_iteration_variables.init_itv_95() - fortran.define_iteration_variables.init_itv_96() - fortran.define_iteration_variables.init_itv_97() - fortran.define_iteration_variables.init_itv_98() - - fortran.define_iteration_variables.init_itv_103() - fortran.define_iteration_variables.init_itv_104() - fortran.define_iteration_variables.init_itv_105() - fortran.define_iteration_variables.init_itv_106() - fortran.define_iteration_variables.init_itv_107() - fortran.define_iteration_variables.init_itv_108() - fortran.define_iteration_variables.init_itv_109() - fortran.define_iteration_variables.init_itv_110() - fortran.define_iteration_variables.init_itv_111() - fortran.define_iteration_variables.init_itv_112() - fortran.define_iteration_variables.init_itv_113() - fortran.define_iteration_variables.init_itv_114() - fortran.define_iteration_variables.init_itv_115() - fortran.define_iteration_variables.init_itv_116() - fortran.define_iteration_variables.init_itv_117() - fortran.define_iteration_variables.init_itv_118() - fortran.define_iteration_variables.init_itv_119() - fortran.define_iteration_variables.init_itv_120() - fortran.define_iteration_variables.init_itv_121() - fortran.define_iteration_variables.init_itv_122() - fortran.define_iteration_variables.init_itv_123() - fortran.define_iteration_variables.init_itv_124() - fortran.define_iteration_variables.init_itv_125() - fortran.define_iteration_variables.init_itv_126() - fortran.define_iteration_variables.init_itv_127() - fortran.define_iteration_variables.init_itv_128() - fortran.define_iteration_variables.init_itv_129() - fortran.define_iteration_variables.init_itv_130() - fortran.define_iteration_variables.init_itv_131() - fortran.define_iteration_variables.init_itv_132() - fortran.define_iteration_variables.init_itv_133() - fortran.define_iteration_variables.init_itv_134() - fortran.define_iteration_variables.init_itv_135() - fortran.define_iteration_variables.init_itv_136() - fortran.define_iteration_variables.init_itv_137() - fortran.define_iteration_variables.init_itv_138() - fortran.define_iteration_variables.init_itv_139() - fortran.define_iteration_variables.init_itv_140() - fortran.define_iteration_variables.init_itv_141() - fortran.define_iteration_variables.init_itv_142() - fortran.define_iteration_variables.init_itv_143() - fortran.define_iteration_variables.init_itv_144() - fortran.define_iteration_variables.init_itv_145() - fortran.define_iteration_variables.init_itv_146() - fortran.define_iteration_variables.init_itv_147() - fortran.define_iteration_variables.init_itv_148() - fortran.define_iteration_variables.init_itv_149() - fortran.define_iteration_variables.init_itv_152() - fortran.define_iteration_variables.init_itv_153() - fortran.define_iteration_variables.init_itv_154() - fortran.define_iteration_variables.init_itv_155() - fortran.define_iteration_variables.init_itv_156() - fortran.define_iteration_variables.init_itv_157() - fortran.define_iteration_variables.init_itv_158() - fortran.define_iteration_variables.init_itv_159() - fortran.define_iteration_variables.init_itv_160() - fortran.define_iteration_variables.init_itv_161() - fortran.define_iteration_variables.init_itv_162() - fortran.define_iteration_variables.init_itv_163() - fortran.define_iteration_variables.init_itv_164() - fortran.define_iteration_variables.init_itv_165() - fortran.define_iteration_variables.init_itv_166() - fortran.define_iteration_variables.init_itv_167() - fortran.define_iteration_variables.init_itv_168() - fortran.define_iteration_variables.init_itv_169() - fortran.define_iteration_variables.init_itv_170() - fortran.define_iteration_variables.init_itv_171() - fortran.define_iteration_variables.init_itv_172() - fortran.define_iteration_variables.init_itv_173() - fortran.define_iteration_variables.init_itv_174() - fortran.define_iteration_variables.init_itv_175() - - def check_process(inputs): # noqa: ARG001 """Routine to reset specific variables if certain options are being used diff --git a/process/iteration_variables.py b/process/iteration_variables.py index f741a17054..8f7f8b0110 100644 --- a/process/iteration_variables.py +++ b/process/iteration_variables.py @@ -69,11 +69,13 @@ class IterationVariable: 33: IterationVariable("fportsz", fortran.constraint_variables, 0.001, 1.0), 35: IterationVariable("fpeakb", fortran.constraint_variables, 0.001, 1.0), 36: IterationVariable("fbeta_max", fortran.constraint_variables, 0.001, 1.0), - 37: IterationVariable("coheof", fortran.pfcoil_variables, 1.0e5, 1.0e8), + 37: IterationVariable("j_cs_flat_top_end", fortran.pfcoil_variables, 1.0e5, 1.0e8), 38: IterationVariable("fjohc", fortran.constraint_variables, 0.010, 1.0), 39: IterationVariable("fjohc0", fortran.constraint_variables, 0.001, 1.0), 40: IterationVariable("fgamcd", fortran.constraint_variables, 0.001, 1.0), - 41: IterationVariable("fcohbop", fortran.pfcoil_variables, 0.001, 1.0), + 41: IterationVariable( + "f_j_cs_start_pulse_end_flat_top", fortran.pfcoil_variables, 0.001, 1.0 + ), 42: IterationVariable("dr_cs_tf_gap", fortran.build_variables, 0.001, 10.00), 44: IterationVariable("fvsbrnni", fortran.physics_variables, 0.001, 1.0), 45: IterationVariable("fqval", fortran.constraint_variables, 0.001, 1.0), @@ -151,7 +153,7 @@ class IterationVariable: 117: IterationVariable("fpsepbqar", fortran.constraint_variables, 0.001, 1.0), 118: IterationVariable("fpsep", fortran.constraint_variables, 0.001, 1.0), 119: IterationVariable("tesep", fortran.physics_variables, 0.0, 1.0e1), - 122: IterationVariable("oh_steel_frac", fortran.pfcoil_variables, 0.001, 0.950), + 122: IterationVariable("f_a_cs_steel", fortran.pfcoil_variables, 0.001, 0.950), 123: IterationVariable("foh_stress", fortran.constraint_variables, 0.001, 1.0), 125: IterationVariable( "fimp(03)", @@ -262,13 +264,15 @@ class IterationVariable: 145: IterationVariable("fgwped", fortran.physics_variables, 0.1, 0.9), 146: IterationVariable("fcpttf", fortran.constraint_variables, 0.001, 1.0), 147: IterationVariable("freinke", fortran.constraint_variables, 0.001, 1.0), - 149: IterationVariable("fbmaxcs", fortran.pfcoil_variables, 0.001, 1.0), + 149: IterationVariable("fb_cs_limit_max", fortran.pfcoil_variables, 0.001, 1.0), 152: IterationVariable("fgwsep", fortran.physics_variables, 0.001, 0.5), 153: IterationVariable("fpdivlim", fortran.physics_variables, 0.001, 1.0), 154: IterationVariable("fne0", fortran.physics_variables, 0.001, 1.0), 155: IterationVariable("pfusife", fortran.ife_variables, 5.0e2, 3.0e3), 156: IterationVariable("rrin", fortran.ife_variables, 1.0, 1.0e1), - 157: IterationVariable("fvssu", fortran.pfcoil_variables, 1.0e-3, 1.0e1), + 157: IterationVariable( + "fvs_cs_pf_total_ramp", fortran.pfcoil_variables, 1.0e-3, 1.0e1 + ), 158: IterationVariable("croco_thick", fortran.rebco_variables, 1.0e-3, 1.0e-1), 159: IterationVariable("ftoroidalgap", fortran.tfcoil_variables, 1.0e-4, 1.0), 160: IterationVariable("f_avspace", fortran.build_variables, 0.010, 1.0), @@ -423,3 +427,14 @@ def load_scaled_bounds(): fortran.numerics.itv_scaled_upper_bounds[i] = ( fortran.numerics.boundu[variable_index] * fortran.numerics.scale[i] ) + + +def initialise_iteration_variables(): + """Initialise the iteration variables (label and default bounds)""" + for itv_index, itv in ITERATION_VARIABLES.items(): + fortran.numerics.lablxc[itv_index - 1] = string_to_f2py_compatible( + fortran.numerics.lablxc[itv_index - 1], itv.name + ) + + fortran.numerics.boundl[itv_index - 1] = itv.lower_bound + fortran.numerics.boundu[itv_index - 1] = itv.upper_bound diff --git a/scripts/create_dicts.py b/scripts/create_dicts.py index 3736ae6260..30b92c314b 100644 --- a/scripts/create_dicts.py +++ b/scripts/create_dicts.py @@ -28,6 +28,7 @@ from python_dicts import get_python_variables from process.input import INPUT_VARIABLES +from process.iteration_variables import ITERATION_VARIABLES from process.scan import SCAN_VARIABLES INPUT_TYPE_MAP = {int: "int", float: "real", str: "string"} @@ -803,57 +804,16 @@ def dict_nsweep2varname(): def dict_ixc_full(): """Function to return a dictionary matching str(ixc_no) to a dictionary - containing the name, lower and upper bounds of that variable. Looks in - numerics.f90 at !+ad_varc lines in lablxc to get ixc_no and - variable names, and looks at boundu and boundl for upper and - lower bounds. - - Example of a lablxc line we are looking for: - lablxc(1) = 'aspect ' - - Example of a boundl line we are looking for: - boundl(1) = 0.0D0 - - Example of a boundu line we are looking for: - boundu(1) = 1.0D0 + containing the name, lower and upper bounds of that variable. Example dictionary entry: DICT_IXC_FULL['5'] = {'name' : 'beta', 'lb' : 0.001, 'ub' : 1.0} """ - with open(SOURCEDIR + "/iteration_variables.f90") as my_file: - lines = my_file.readlines() - - ixc_full = {} - - for lline in lines: - if "subroutine init_itv_" in lline and "end" not in lline: - itv_num = lline.split("_")[-1].strip("\n").replace(" ", "") - ixc_full[itv_num] = {} - - for line in lines: - if ("lablxc" in line and "=" in line) and ( - "lablxc(i)" not in line and "lablxc(ixc(i))" not in line - ): - labl_num = line.split("(")[1].split(")")[0] - labl = line.split("=")[-1].strip("\n").replace(" ", "").replace("'", "") - ixc_full[labl_num]["name"] = labl - - if ("boundl(" in line and "=" in line) and ( - "boundl(i)" not in line and "boundl(ixc(i))" not in line - ): - boundl_num = line.split("(")[1].split(")")[0] - boundl_val = line.split("=")[-1].strip("\n").lower().replace("d", "e") - ixc_full[boundl_num]["lb"] = float(boundl_val) - - if ("boundu(" in line and "=" in line) and ( - "boundu(i)" not in line and "boundu(ixc(i))" not in line - ): - boundu_num = line.split("(")[1].split(")")[0] - boundu_val = line.split("=")[-1].strip("\n").lower().replace("d", "e") - ixc_full[boundu_num]["ub"] = float(boundu_val) - - return ixc_full + return { + str(k): {"name": v.name, "lb": v.lower_bound, "ub": v.upper_bound} + for k, v in ITERATION_VARIABLES.items() + } def dict_ixc_bounds(): diff --git a/source/fortran/iteration_variables.f90 b/source/fortran/iteration_variables.f90 deleted file mode 100755 index e76a9a8060..0000000000 --- a/source/fortran/iteration_variables.f90 +++ /dev/null @@ -1,3944 +0,0 @@ -module define_iteration_variables - !! Module to define iteration variables - -#ifndef dp - use, intrinsic :: iso_fortran_env, only: dp=>real64 -#endif - implicit none - - public - - real(dp) :: DUMMY - -contains - - subroutine init_define_iteration_variables - !! Initialise module variables - implicit none - - DUMMY = 0.0D0 - end subroutine init_define_iteration_variables - - !! lablxc(ipnvars) : labels describing iteration variables
      - - !--------------------------------- - - subroutine init_itv_1 - !!
    • ( 1) aspect - use numerics, only: lablxc, boundl, boundu - implicit none - lablxc(1) = 'aspect ' - boundl(1) = 1.100D0 - boundu(1) = 10.00D0 - end subroutine init_itv_1 - - real(kind(1.d0)) function itv_1() - use physics_variables, only: aspect - implicit none - itv_1 = aspect - end function itv_1 - - subroutine set_itv_1(ratio) - use physics_variables, only: aspect - implicit none - real(kind(1.d0)) :: ratio - aspect = ratio - end subroutine set_itv_1 - - !--------------------------------- - - subroutine init_itv_2 - !!
    • ( 2) bt - use numerics, only: lablxc, boundl, boundu - implicit none - lablxc(2) = 'bt ' - boundl(2) = 0.010D0 - boundu(2) = 30.00D0 - end subroutine init_itv_2 - - real(kind(1.d0)) function itv_2() - use physics_variables, only: bt - implicit none - itv_2 = bt - end function itv_2 - - subroutine set_itv_2(ratio) - use physics_variables, only: bt - implicit none - real(kind(1.d0)) :: ratio - bt = ratio - end subroutine set_itv_2 - - !--------------------------------- - - subroutine init_itv_3 - !!
    • ( 3) rmajor - use numerics, only: lablxc, boundl, boundu - implicit none - lablxc(3) = 'rmajor ' - boundl(3) = 0.100D0 - boundu(3) = 50.00D0 - end subroutine init_itv_3 - - real(kind(1.d0)) function itv_3() - use physics_variables, only: rmajor - implicit none - itv_3 = rmajor - end function itv_3 - - subroutine set_itv_3(ratio) - use physics_variables, only: rmajor - implicit none - real(kind(1.d0)) :: ratio - rmajor = ratio - end subroutine set_itv_3 - - !--------------------------------- - - subroutine init_itv_4 - !!
    • ( 4) te - use numerics, only: lablxc, boundl, boundu - implicit none - lablxc(4) = 'te ' - boundl(4) = 5.000D0 - boundu(4) = 150.0D0 - end subroutine init_itv_4 - - real(kind(1.d0)) function itv_4() - use physics_variables, only: te - implicit none - itv_4 = te - end function itv_4 - - subroutine set_itv_4(ratio) - use physics_variables, only: te - implicit none - real(kind(1.d0)) :: ratio - te = ratio - end subroutine - - !--------------------------------- - - subroutine init_itv_5 - !!
    • ( 5) beta - use numerics, only: lablxc, boundl, boundu - implicit none - lablxc(5) = 'beta ' - boundl(5) = 0.001D0 - boundu(5) = 1.000D0 - end subroutine init_itv_5 - - real(kind(1.d0)) function itv_5() - use physics_variables, only: beta - implicit none - itv_5 = beta - end function itv_5 - - subroutine set_itv_5(ratio) - use physics_variables, only: beta - implicit none - real(kind(1.d0)) :: ratio - beta = ratio - end subroutine - - !--------------------------------- - - subroutine init_itv_6 - !!
    • ( 6) dene - use numerics, only: lablxc, boundl, boundu - implicit none - lablxc(6) = 'dene ' - boundl(6) = 2.00D19 - boundu(6) = 1.00D21 - end subroutine init_itv_6 - - real(kind(1.d0)) function itv_6() - use physics_variables, only: dene - implicit none - itv_6 = dene - end function itv_6 - - subroutine set_itv_6(ratio) - use physics_variables, only: dene - implicit none - real(kind(1.d0)) :: ratio - dene = ratio - end subroutine set_itv_6 - - !--------------------------------- - - subroutine init_itv_7 - !!
    • ( 7) f_nd_beam_electron - use numerics, only: lablxc, boundl, boundu - implicit none - lablxc(7) = 'f_nd_beam_electron ' - boundl(7) = 1.00D-6 - boundu(7) = 1.000D0 - end subroutine init_itv_7 - - real(kind(1.d0)) function itv_7() - use physics_variables, only: f_nd_beam_electron - implicit none - itv_7 = f_nd_beam_electron - end function itv_7 - - subroutine set_itv_7(ratio) - use physics_variables, only: f_nd_beam_electron - implicit none - real(kind(1.d0)) :: ratio - f_nd_beam_electron = ratio - end subroutine set_itv_7 - - !--------------------------------- - - subroutine init_itv_8 - !!
    • ( 8) fbeta_poloidal_eps (f-value for equation 6) - use numerics, only: lablxc, boundl, boundu - implicit none - lablxc(8) = 'fbeta_poloidal_eps ' - boundl(8) = 0.001D0 - boundu(8) = 1.000D0 - end subroutine init_itv_8 - - real(kind(1.d0)) function itv_8() - use constraint_variables, only: fbeta_poloidal_eps - implicit none - itv_8 = fbeta_poloidal_eps - end function itv_8 - - subroutine set_itv_8(ratio) - use constraint_variables, only: fbeta_poloidal_eps - implicit none - real(kind(1.d0)) :: ratio - fbeta_poloidal_eps = ratio - end subroutine set_itv_8 - - !--------------------------------- - - subroutine init_itv_9 - !!
    • ( 9) fdene (f-value for equation 5) - use numerics, only: lablxc, boundl, boundu - implicit none - lablxc(9) = 'fdene ' - boundl(9) = 0.001D0 - boundu(9) = 1.000D0 - end subroutine init_itv_9 - - real(kind(1.d0)) function itv_9() - use constraint_variables, only: fdene - implicit none - itv_9 = fdene - end function itv_9 - - subroutine set_itv_9(ratio) - use constraint_variables, only: fdene - implicit none - real(kind(1.d0)) :: ratio - fdene = ratio - end subroutine set_itv_9 - - !--------------------------------- - - subroutine init_itv_10 - !!
    • (10) hfact - use numerics, only: lablxc, boundl, boundu - implicit none - lablxc(10) = 'hfact ' - boundl(10) = 0.100D0 - boundu(10) = 3.000D0 - end subroutine init_itv_10 - - real(kind(1.d0)) function itv_10() - use physics_variables, only: hfact - implicit none - itv_10 = hfact - end function itv_10 - - subroutine set_itv_10(ratio) - use physics_variables, only: hfact - implicit none - real(kind(1.d0)) :: ratio - hfact = ratio - end subroutine set_itv_10 - - !--------------------------------- - - subroutine init_itv_11 - !!
    • (11) pheat - use numerics, only: lablxc, boundl, boundu - implicit none - lablxc(11) = 'pheat ' - boundl(11) = 1.00D-3 - boundu(11) = 1.000D3 - end subroutine init_itv_11 - - real(kind(1.d0)) function itv_11() - use current_drive_variables, only: pheat - implicit none - itv_11 = pheat - end function itv_11 - - subroutine set_itv_11(ratio) - use current_drive_variables, only: pheat - implicit none - real(kind(1.d0)) :: ratio - pheat = ratio - end subroutine set_itv_11 - - !--------------------------------- - - subroutine init_itv_12 - !!
    • (12) oacdcp - use numerics, only: lablxc, boundl, boundu - implicit none - lablxc(12) = 'oacdcp ' - boundl(12) = 1.000D5 - boundu(12) = 1.500D8 - end subroutine init_itv_12 - - real(kind(1.d0)) function itv_12() - use tfcoil_variables, only: oacdcp - implicit none - itv_12 = oacdcp - end function itv_12 - - subroutine set_itv_12(ratio) - use tfcoil_variables, only: oacdcp - implicit none - real(kind(1.d0)) :: ratio - oacdcp = ratio - end subroutine set_itv_12 - - !--------------------------------- - - subroutine init_itv_13 - !!
    • (13) dr_tf_inboard (NOT RECOMMENDED) - use numerics, only: lablxc, boundl, boundu - implicit none - lablxc(13) = 'dr_tf_inboard ' - boundl(13) = 0.100D0 - boundu(13) = 5.000D0 - end subroutine init_itv_13 - - real(kind(1.d0)) function itv_13() - use build_variables, only: dr_tf_inboard - use error_handling, only: report_error - use stellarator_variables, only: istell - implicit none - itv_13 = dr_tf_inboard - if (istell /= 0) then - call report_error(46) - end if - end function itv_13 - - subroutine set_itv_13(ratio) - use build_variables, only: dr_tf_inboard - implicit none - real(kind(1.d0)) :: ratio - dr_tf_inboard = ratio - end subroutine set_itv_13 - - !--------------------------------- - - subroutine init_itv_14 - !!
    • (14) fwalld (f-value for equation 8) - use numerics, only: lablxc, boundl, boundu - implicit none - lablxc(14) = 'fwalld ' - boundl(14) = 0.001D0 - boundu(14) = 1.000D0 - end subroutine init_itv_14 - - real(kind(1.d0)) function itv_14() - use constraint_variables, only: fwalld - implicit none - itv_14 = fwalld - end function itv_14 - - subroutine set_itv_14(ratio) - use constraint_variables, only: fwalld - implicit none - real(kind(1.d0)) :: ratio - fwalld = ratio - end subroutine set_itv_14 - - !--------------------------------- - - subroutine init_itv_15 - !!
    • (15) fvs (f-value for equation 12) - use numerics, only: lablxc, boundl, boundu - implicit none - lablxc(15) = 'fvs ' - boundl(15) = 0.001D0 - boundu(15) = 10.000 - end subroutine init_itv_15 - - real(kind(1.d0)) function itv_15() - use constraint_variables, only: fvs - implicit none - itv_15 = fvs - end function itv_15 - - subroutine set_itv_15(ratio) - use constraint_variables, only: fvs - implicit none - real(kind(1.d0)) :: ratio - fvs = ratio - end subroutine set_itv_15 - - !--------------------------------- - - subroutine init_itv_16 - !!
    • (16) dr_cs - use numerics, only: lablxc, boundl, boundu - implicit none - lablxc(16) = 'dr_cs ' - boundl(16) = 0.010D0 - boundu(16) = 10.00D0 - end subroutine init_itv_16 - - real(kind(1.d0)) function itv_16() - use build_variables, only: dr_cs - implicit none - itv_16 = dr_cs - end function itv_16 - - subroutine set_itv_16(ratio) - use build_variables, only: dr_cs - implicit none - real(kind(1.d0)) :: ratio - dr_cs = ratio - end subroutine set_itv_16 - - !--------------------------------- - - subroutine init_itv_17 - !!
    • (17) t_between_pulse - use numerics, only: lablxc, boundl, boundu - implicit none - lablxc(17) = 't_between_pulse ' - boundl(17) = 0.100D0 - boundu(17) = 1.000D8 - end subroutine init_itv_17 - - real(kind(1.d0)) function itv_17() - use times_variables, only: t_between_pulse - implicit none - itv_17 = t_between_pulse - end function itv_17 - - subroutine set_itv_17(ratio) - use times_variables, only: t_between_pulse - implicit none - real(kind(1.d0)) :: ratio - t_between_pulse = ratio - end subroutine set_itv_17 - - !--------------------------------- - - subroutine init_itv_18 - !!
    • (18) q95 - use numerics, only: lablxc, boundl, boundu - implicit none - lablxc(18) = 'q95 ' - boundl(18) = 2.000D0 - boundu(18) = 50.00D0 - end subroutine init_itv_18 - - real(kind(1.d0)) function itv_18() - use physics_variables, only: q95 - implicit none - itv_18 = q95 - end function itv_18 - - subroutine set_itv_18(ratio) - use physics_variables, only: q95 - implicit none - real(kind(1.d0)) :: ratio - q95 = ratio - end subroutine set_itv_18 - - !--------------------------------- - - subroutine init_itv_19 - !!
    • (19) beam_energy - use numerics, only: lablxc, boundl, boundu - implicit none - lablxc(19) = 'beam_energy ' - boundl(19) = 1.000D0 - boundu(19) = 1.000D6 - end subroutine init_itv_19 - - real(kind(1.d0)) function itv_19() - use current_drive_variables, only: beam_energy - implicit none - itv_19 = beam_energy - end function itv_19 - - subroutine set_itv_19(ratio) - use current_drive_variables, only: beam_energy - implicit none - real(kind(1.d0)) :: ratio - beam_energy = ratio - end subroutine - - !--------------------------------- - - subroutine init_itv_20 - !!
    • (20) temp_cp_average - use numerics, only: lablxc, boundl, boundu - implicit none - lablxc(20) = 'temp_cp_average ' - boundl(20) = 40.00D0 - boundu(20) = 3.000D2 - end subroutine init_itv_20 - - real(kind(1.d0)) function itv_20() - use tfcoil_variables, only: temp_cp_average - implicit none - itv_20 = temp_cp_average - end function itv_20 - - subroutine set_itv_20(ratio) - use tfcoil_variables, only: temp_cp_average - implicit none - real(kind(1.d0)) :: ratio - temp_cp_average = ratio - end subroutine set_itv_20 - - !--------------------------------- - - subroutine init_itv_21 - !!
    • (21) ft_burn (f-value for equation 13) - use numerics, only: lablxc, boundl, boundu - implicit none - lablxc(21) = 'ft_burn ' - boundl(21) = 0.001D0 - boundu(21) = 1.000D0 - end subroutine init_itv_21 - - real(kind(1.d0)) function itv_21() - use constraint_variables, only: ft_burn - implicit none - itv_21 = ft_burn - end function itv_21 - - subroutine set_itv_21(ratio) - use constraint_variables, only: ft_burn - implicit none - real(kind(1.d0)) :: ratio - ft_burn = ratio - end subroutine set_itv_21 - - !!
    • (22) NOT USED - !--------------------------------- - - real(kind(1.d0)) function itv_22() - implicit none - write(*,*) 'Iteration variable 22 is no longer in use.' - end function itv_22 - - !--------------------------------- - - subroutine init_itv_23 - !!
    • (23) fcoolcp - use numerics, only: lablxc, boundl, boundu - implicit none - lablxc(23) = 'fcoolcp ' - boundl(23) = 0.100D0 - boundu(23) = 0.500D0 - end subroutine init_itv_23 - - real(kind(1.d0)) function itv_23() - use tfcoil_variables, only: fcoolcp - implicit none - itv_23 = fcoolcp - end function itv_23 - - subroutine set_itv_23(ratio) - use tfcoil_variables, only: fcoolcp - implicit none - real(kind(1.d0)) :: ratio - fcoolcp = ratio - end subroutine set_itv_23 - - !!
    • (24) NOT USED - !--------------------------------- - - real(kind(1.d0)) function itv_24() - implicit none - write(*,*) 'Iteration variable 24 is no longer in use.' - end function itv_24 - - !--------------------------------- - - subroutine init_itv_25 - !!
    • (25) fpnetel (f-value for equation 16) - use numerics, only: lablxc, boundl, boundu - implicit none - lablxc(25) = 'fpnetel ' - boundl(25) = 0.001D0 - boundu(25) = 1.000D0 - end subroutine init_itv_25 - - real(kind(1.d0)) function itv_25() - use constraint_variables, only: fpnetel - implicit none - itv_25 = fpnetel - end function itv_25 - - subroutine set_itv_25(ratio) - use constraint_variables, only: fpnetel - implicit none - real(kind(1.d0)) :: ratio - fpnetel = ratio - end subroutine set_itv_25 - - !--------------------------------- - - subroutine init_itv_26 - !!
    • (26) ffuspow (f-value for equation 9) - use numerics, only: lablxc, boundl, boundu - implicit none - lablxc(26) = 'ffuspow ' - boundl(26) = 0.001D0 - boundu(26) = 1.000D0 - end subroutine init_itv_26 - - real(kind(1.d0)) function itv_26() - use constraint_variables, only: ffuspow - implicit none - itv_26 = ffuspow - end function itv_26 - - subroutine set_itv_26(ratio) - use constraint_variables, only: ffuspow - implicit none - real(kind(1.d0)) :: ratio - ffuspow = ratio - end subroutine set_itv_26 - - !--------------------------------- - - subroutine init_itv_27 - !!
    • (27) fhldiv (f-value for equation 18) - use numerics, only: lablxc, boundl, boundu - implicit none - lablxc(27) = 'fhldiv ' - boundl(27) = 0.001D0 - boundu(27) = 1.000D0 - end subroutine init_itv_27 - - real(kind(1.d0)) function itv_27() - use constraint_variables, only: fhldiv - implicit none - itv_27 = fhldiv - end function itv_27 - - subroutine set_itv_27(ratio) - use constraint_variables, only: fhldiv - implicit none - real(kind(1.d0)) :: ratio - fhldiv = ratio - end subroutine set_itv_27 - - !--------------------------------- - - subroutine init_itv_28 - !!
    • (28) fradpwr (f-value for equation 17), total radiation fraction - use numerics, only: lablxc, boundl, boundu - implicit none - lablxc(28) = 'fradpwr ' - boundl(28) = 0.001D0 - boundu(28) = 0.990D0 - end subroutine init_itv_28 - - real(kind(1.d0)) function itv_28() - use constraint_variables, only: fradpwr - implicit none - itv_28 = fradpwr - end function itv_28 - - subroutine set_itv_28(ratio) - use constraint_variables, only: fradpwr - implicit none - real(kind(1.d0)) :: ratio - fradpwr = ratio - end subroutine set_itv_28 - - !--------------------------------- - - subroutine init_itv_29 - !!
    • (29) dr_bore - use numerics, only: lablxc, boundl, boundu - implicit none - lablxc(29) = 'dr_bore ' - boundl(29) = 0.100D0 - boundu(29) = 10.00D0 - end subroutine init_itv_29 - - real(kind(1.d0)) function itv_29() - use build_variables, only: dr_bore - implicit none - itv_29 = dr_bore - end function itv_29 - - subroutine set_itv_29(ratio) - use build_variables, only: dr_bore - implicit none - real(kind(1.d0)) :: ratio - dr_bore = ratio - end subroutine set_itv_29 - - !--------------------------------- - - subroutine init_itv_30 - !!
    • (30) fmva (f-value for equation 19) - use numerics, only: lablxc, boundl, boundu - implicit none - lablxc(30) = 'fmva ' - boundl(30) = 0.010D0 - boundu(30) = 1.000D0 - end subroutine init_itv_30 - - real(kind(1.d0)) function itv_30() - use constraint_variables, only: fmva - implicit none - itv_30 = fmva - end function itv_30 - - subroutine set_itv_30(ratio) - use constraint_variables, only: fmva - implicit none - real(kind(1.d0)) :: ratio - fmva = ratio - end subroutine set_itv_30 - - !--------------------------------- - - subroutine init_itv_31 - !!
    • (31) gapomin - use numerics, only: lablxc, boundl, boundu - implicit none - lablxc(31) = 'gapomin ' - boundl(31) = 0.001D0 - boundu(31) = 1.000D1 - end subroutine init_itv_31 - - real(kind(1.d0)) function itv_31() - use build_variables, only: gapomin - implicit none - itv_31 = gapomin - end function itv_31 - - subroutine set_itv_31(ratio) - use build_variables, only: gapomin - implicit none - real(kind(1.d0)) :: ratio - gapomin = ratio - end subroutine set_itv_31 - - !--------------------------------- - - subroutine init_itv_32 - !!
    • (32) frminor (f-value for equation 21) - use numerics, only: lablxc, boundl, boundu - implicit none - lablxc(32) = 'frminor ' - boundl(32) = 0.001D0 - boundu(32) = 1.000D0 - end subroutine init_itv_32 - - real(kind(1.d0)) function itv_32() - use constraint_variables, only: frminor - implicit none - itv_32 = frminor - end function itv_32 - - subroutine set_itv_32(ratio) - use constraint_variables, only: frminor - implicit none - real(kind(1.d0)) :: ratio - frminor = ratio - end subroutine set_itv_32 - - !--------------------------------- - - subroutine init_itv_33 - !!
    • (33) fportsz (f-value for equation 20) - use numerics, only: lablxc, boundl, boundu - implicit none - lablxc(33) = 'fportsz ' - boundl(33) = 0.001D0 - boundu(33) = 1.000D0 - end subroutine init_itv_33 - - real(kind(1.d0)) function itv_33() - use constraint_variables, only: fportsz - implicit none - itv_33 = fportsz - end function itv_33 - - subroutine set_itv_33(ratio) - use constraint_variables, only: fportsz - implicit none - real(kind(1.d0)) :: ratio - fportsz = ratio - end subroutine set_itv_33 - - !--------------------------------- - - real(kind(1.d0)) function itv_34() - implicit none - write(*,*) 'Iteration variable 34 is no longer in use.' - end function itv_34 - - !--------------------------------- - - subroutine init_itv_35 - !!
    • (35) fpeakb (f-value for equation 25) - use numerics, only: lablxc, boundl, boundu - implicit none - lablxc(35) = 'fpeakb ' - boundl(35) = 0.001D0 - boundu(35) = 1.000D0 - end subroutine init_itv_35 - - real(kind(1.d0)) function itv_35() - use constraint_variables, only: fpeakb - implicit none - itv_35 = fpeakb - end function itv_35 - - subroutine set_itv_35(ratio) - use constraint_variables, only: fpeakb - implicit none - real(kind(1.d0)) :: ratio - fpeakb = ratio - end subroutine set_itv_35 - - !--------------------------------- - - subroutine init_itv_36 - !!
    • (36) fbeta_max (f-value for equation 24) - use numerics, only: lablxc, boundl, boundu - implicit none - lablxc(36) = 'fbeta_max ' - boundl(36) = 0.001D0 - boundu(36) = 1.000D0 - end subroutine init_itv_36 - - real(kind(1.d0)) function itv_36() - use constraint_variables, only: fbeta_max - implicit none - itv_36 = fbeta_max - end function itv_36 - - subroutine set_itv_36(ratio) - use constraint_variables, only: fbeta_max - implicit none - real(kind(1.d0)) :: ratio - fbeta_max = ratio - end subroutine set_itv_36 - - !--------------------------------- - - subroutine init_itv_37 - !!
    • (37) j_cs_flat_top_end - use numerics, only: lablxc, boundl, boundu - implicit none - lablxc(37) = 'j_cs_flat_top_end ' - boundl(37) = 1.000D5 - boundu(37) = 1.000D8 - end subroutine init_itv_37 - - real(kind(1.d0)) function itv_37() - use pfcoil_variables, only: j_cs_flat_top_end - implicit none - itv_37 = j_cs_flat_top_end - end function itv_37 - - subroutine set_itv_37(ratio) - use pfcoil_variables, only: j_cs_flat_top_end - implicit none - real(kind(1.d0)) :: ratio - j_cs_flat_top_end = ratio - end subroutine set_itv_37 - - !--------------------------------- - - subroutine init_itv_38 - !!
    • (38) fjohc (f-value for equation 26) - use numerics, only: lablxc, boundl, boundu - implicit none - lablxc(38) = 'fjohc ' - boundl(38) = 0.010D0 - boundu(38) = 1.000D0 - end subroutine init_itv_38 - - real(kind(1.d0)) function itv_38() - use constraint_variables, only: fjohc - implicit none - itv_38 = fjohc - end function itv_38 - - subroutine set_itv_38(ratio) - use constraint_variables, only: fjohc - implicit none - real(kind(1.d0)) :: ratio - fjohc = ratio - end subroutine set_itv_38 - - !--------------------------------- - - subroutine init_itv_39 - !!
    • (39) fjohc0 (f-value for equation 27) - use numerics, only: lablxc, boundl, boundu - implicit none - lablxc(39) = 'fjohc0 ' - boundl(39) = 0.001D0 - boundu(39) = 1.000D0 - end subroutine init_itv_39 - - real(kind(1.d0)) function itv_39() - use constraint_variables, only: fjohc0 - implicit none - itv_39 = fjohc0 - end function itv_39 - - subroutine set_itv_39(ratio) - use constraint_variables, only: fjohc0 - implicit none - real(kind(1.d0)) :: ratio - fjohc0 = ratio - end subroutine set_itv_39 - - !--------------------------------- - - subroutine init_itv_40 - !!
    • (40) fgamcd (f-value for equation 37) - use numerics, only: lablxc, boundl, boundu - implicit none - lablxc(40) = 'fgamcd ' - boundl(40) = 0.001D0 - boundu(40) = 1.000D0 - end subroutine init_itv_40 - - real(kind(1.d0)) function itv_40() - use constraint_variables, only: fgamcd - implicit none - itv_40 = fgamcd - end function itv_40 - - subroutine set_itv_40(ratio) - use constraint_variables, only: fgamcd - implicit none - real(kind(1.d0)) :: ratio - fgamcd = ratio - end subroutine set_itv_40 - - !--------------------------------- - - subroutine init_itv_41 - !!
    • (41) f_j_cs_start_pulse_end_flat_top - use numerics, only: lablxc, boundl, boundu - implicit none - lablxc(41) = 'f_j_cs_start_pulse_end_flat_top ' - boundl(41) = 0.001D0 - boundu(41) = 1.000D0 - end subroutine init_itv_41 - - real(kind(1.d0)) function itv_41() - use pfcoil_variables, only: f_j_cs_start_pulse_end_flat_top - implicit none - itv_41 = f_j_cs_start_pulse_end_flat_top - end function itv_41 - - subroutine set_itv_41(ratio) - use pfcoil_variables, only: f_j_cs_start_pulse_end_flat_top - implicit none - real(kind(1.d0)) :: ratio - f_j_cs_start_pulse_end_flat_top = ratio - end subroutine set_itv_41 - - !--------------------------------- - - subroutine init_itv_42 - !!
    • (42) dr_cs_tf_gap - use numerics, only: lablxc, boundl, boundu - implicit none - lablxc(42) = 'dr_cs_tf_gap ' - boundl(42) = 0.001D0 - boundu(42) = 10.00D0 - end subroutine init_itv_42 - - real(kind(1.d0)) function itv_42() - use build_variables, only: dr_cs_tf_gap - implicit none - itv_42 = dr_cs_tf_gap - end function - - subroutine set_itv_42(ratio) - use build_variables, only: dr_cs_tf_gap - implicit none - real(kind(1.d0)) :: ratio - dr_cs_tf_gap = ratio - end subroutine set_itv_42 - - !!
    • (43) NOT USED - !--------------------------------- - - real(kind(1.d0)) function itv_43() - implicit none - write(*,*) 'Iteration variable 43 is no longer in use.' - end function itv_43 - - !--------------------------------- - - subroutine init_itv_44 - !!
    • (44) fvsbrnni - use numerics, only: lablxc, boundl, boundu - implicit none - lablxc(44) = 'fvsbrnni ' - boundl(44) = 0.001D0 - boundu(44) = 1.000D0 - end subroutine init_itv_44 - - real(kind(1.d0)) function itv_44() - use physics_variables, only: fvsbrnni - implicit none - itv_44 = fvsbrnni - end function itv_44 - - subroutine set_itv_44(ratio) - use physics_variables, only: fvsbrnni - implicit none - real(kind(1.d0)) :: ratio - fvsbrnni = ratio - end subroutine set_itv_44 - - !--------------------------------- - - subroutine init_itv_45 - !!
    • (45) fqval (f-value for equation 28) - use numerics, only: lablxc, boundl, boundu - implicit none - lablxc(45) = 'fqval ' - boundl(45) = 0.001D0 - boundu(45) = 1.000D0 - end subroutine init_itv_45 - - real(kind(1.d0)) function itv_45() - use constraint_variables, only: fqval - implicit none - itv_45 = fqval - end function itv_45 - - subroutine set_itv_45(ratio) - use constraint_variables, only: fqval - implicit none - real(kind(1.d0)) :: ratio - fqval = ratio - end subroutine set_itv_45 - - !--------------------------------- - - subroutine init_itv_46 - !!
    • (46) fpinj (f-value for equation 30) - use numerics, only: lablxc, boundl, boundu - implicit none - lablxc(46) = 'fpinj ' - boundl(46) = 0.001D0 - boundu(46) = 1.000D0 - end subroutine init_itv_46 - - real(kind(1.d0)) function itv_46() - use constraint_variables, only: fpinj - implicit none - itv_46 = fpinj - end function - - subroutine set_itv_46(ratio) - use constraint_variables, only: fpinj - implicit none - real(kind(1.d0)) :: ratio - fpinj = ratio - end subroutine set_itv_46 - - !--------------------------------- - - subroutine init_itv_47 - !!
    • (47) feffcd - use numerics, only: lablxc, boundl, boundu - implicit none - lablxc(47) = 'feffcd ' - boundl(47) = 0.001D0 - boundu(47) = 1.000D0 - end subroutine init_itv_47 - - real(kind(1.d0)) function itv_47() - use current_drive_variables, only: feffcd - implicit none - itv_47 = feffcd - end function itv_47 - - subroutine set_itv_47(ratio) - use current_drive_variables, only: feffcd - implicit none - real(kind(1.d0)) :: ratio - feffcd = ratio - end subroutine set_itv_47 - - !--------------------------------- - - subroutine init_itv_48 - !!
    • (48) fstrcase (f-value for equation 31) - use numerics, only: lablxc, boundl, boundu - implicit none - lablxc(48) = 'fstrcase ' - boundl(48) = 0.001D0 - boundu(48) = 1.000D0 - end subroutine init_itv_48 - - real(kind(1.d0)) function itv_48() - use constraint_variables, only: fstrcase - implicit none - itv_48 = fstrcase - end function itv_48 - - subroutine set_itv_48(ratio) - use constraint_variables, only: fstrcase - implicit none - real(kind(1.d0)) :: ratio - fstrcase = ratio - end subroutine set_itv_48 - - !--------------------------------- - - subroutine init_itv_49 - !!
    • (49) fstrcond (f-value for equation 32) - use numerics, only: lablxc, boundl, boundu - implicit none - lablxc(49) = 'fstrcond ' - boundl(49) = 0.001D0 - boundu(49) = 1.000D0 - end subroutine init_itv_49 - - real(kind(1.d0)) function itv_49() - use constraint_variables, only: fstrcond - implicit none - itv_49 = fstrcond - end function itv_49 - - subroutine set_itv_49(ratio) - use constraint_variables, only: fstrcond - implicit none - real(kind(1.d0)) :: ratio - fstrcond = ratio - end subroutine set_itv_49 - - !--------------------------------- - - subroutine init_itv_50 - !!
    • (50) fiooic (f-value for equation 33) - use numerics, only: lablxc, boundl, boundu - implicit none - lablxc(50) = 'fiooic ' - boundl(50) = 0.001D0 - boundu(50) = 1.000D0 - end subroutine init_itv_50 - - real(kind(1.d0)) function itv_50() - use constraint_variables, only: fiooic - implicit none - itv_50 = fiooic - end function itv_50 - - subroutine set_itv_50(ratio) - use constraint_variables, only: fiooic - implicit none - real(kind(1.d0)) :: ratio - fiooic = ratio - end subroutine set_itv_50 - - !--------------------------------- - - subroutine init_itv_51 - !!
    • (51) fvdump (f-value for equation 34) - use numerics, only: lablxc, boundl, boundu - implicit none - lablxc(51) = 'fvdump ' - boundl(51) = 0.001D0 - boundu(51) = 1.000D0 - end subroutine init_itv_51 - - real(kind(1.d0)) function itv_51() - use constraint_variables, only: fvdump - implicit none - itv_51 = fvdump - end function - - subroutine set_itv_51(ratio) - use constraint_variables, only: fvdump - implicit none - real(kind(1.d0)) :: ratio - fvdump = ratio - end subroutine set_itv_51 - - !!
    • (52) NOT USED - !--------------------------------- - - real(kind(1.d0)) function itv_52() - implicit none - write(*,*) 'Iteration variable 52 is no longer in use.' - end function itv_52 - - !--------------------------------- - - subroutine init_itv_53 - !!
    • (53) fjprot (f-value for equation 35) - use numerics, only: lablxc, boundl, boundu - implicit none - lablxc(53) = 'fjprot ' - boundl(53) = 0.001D0 - boundu(53) = 1.000D0 - end subroutine init_itv_53 - - real(kind(1.d0)) function itv_53() - use constraint_variables, only: fjprot - implicit none - itv_53 = fjprot - end function itv_53 - - subroutine set_itv_53(ratio) - use constraint_variables, only: fjprot - implicit none - real(kind(1.d0)) :: ratio - fjprot = ratio - end subroutine - - !--------------------------------- - - subroutine init_itv_54 - !!
    • (54) ftmargtf (f-value for equation 36) - use numerics, only: lablxc, boundl, boundu - implicit none - lablxc(54) = 'ftmargtf ' - boundl(54) = 0.001D0 - boundu(54) = 1.000D0 - end subroutine init_itv_54 - - real(kind(1.d0)) function itv_54() - use constraint_variables, only: ftmargtf - implicit none - itv_54 = ftmargtf - end function itv_54 - - subroutine set_itv_54(ratio) - use constraint_variables, only: ftmargtf - implicit none - real(kind(1.d0)) :: ratio - ftmargtf = ratio - end subroutine set_itv_54 - - !!
    • (55) NOT USED - !--------------------------------- - - real(kind(1.d0)) function itv_55() - implicit none - write(*,*) 'Iteration variable 55 is no longer in use.' - end function itv_55 - - !--------------------------------- - - subroutine init_itv_56 - !!
    • (56) tdmptf - use numerics, only: lablxc, boundl, boundu - implicit none - lablxc(56) = 'tdmptf ' - boundl(56) = 0.100D0 - boundu(56) = 100.0D0 - end subroutine init_itv_56 - - real(kind(1.d0)) function itv_56() - use tfcoil_variables, only: tdmptf - implicit none - itv_56 = tdmptf - end function itv_56 - - subroutine set_itv_56(ratio) - use tfcoil_variables, only: tdmptf - implicit none - real(kind(1.d0)) :: ratio - tdmptf = ratio - end subroutine set_itv_56 - - !--------------------------------- - - subroutine init_itv_57 - !!
    • (57) thkcas - use numerics, only: lablxc, boundl, boundu - implicit none - lablxc(57) = 'thkcas ' - boundl(57) = 0.050D0 - boundu(57) = 1.000D0 - end subroutine init_itv_57 - - real(kind(1.d0)) function itv_57() - use error_handling, only: report_error - use stellarator_variables, only: istell - use tfcoil_variables, only: thkcas - implicit none - itv_57 = thkcas - if (istell /= 0) then - call report_error(48) - end if - end function itv_57 - - subroutine set_itv_57(ratio) - use tfcoil_variables, only: thkcas - implicit none - real(kind(1.d0)) :: ratio - thkcas = ratio - end subroutine - - !--------------------------------- - - subroutine init_itv_58 - !!
    • (58) thwcndut - use numerics, only: lablxc, boundl, boundu - implicit none - lablxc(58) = 'thwcndut ' - boundl(58) = 0.001D0 - boundu(58) = 0.100D0 - end subroutine init_itv_58 - - real(kind(1.d0)) function itv_58() - use tfcoil_variables, only: thwcndut - implicit none - itv_58 = thwcndut - end function itv_58 - - subroutine set_itv_58(ratio) - use tfcoil_variables, only: thwcndut - implicit none - real(kind(1.d0)) :: ratio - thwcndut = ratio - end subroutine set_itv_58 - - !--------------------------------- - - subroutine init_itv_59 - !!
    • (59) fcutfsu - use numerics, only: lablxc, boundl, boundu - implicit none - lablxc(59) = 'fcutfsu ' - boundl(59) = 0.001D0 - boundu(59) = 1.000D0 - end subroutine init_itv_59 - - real(kind(1.d0)) function itv_59() - use tfcoil_variables, only: fcutfsu - implicit none - itv_59 = fcutfsu - end function itv_59 - - subroutine set_itv_59(ratio) - use tfcoil_variables, only: fcutfsu - implicit none - real(kind(1.d0)) :: ratio - fcutfsu = ratio - end subroutine set_itv_59 - - !--------------------------------- - - subroutine init_itv_60 - !!
    • (60) cpttf - use numerics, only: lablxc, boundl, boundu - implicit none - lablxc(60) = 'cpttf ' - boundl(60) = 0.001D0 - boundu(60) = 4.000D4 - end subroutine init_itv_60 - - real(kind(1.d0)) function itv_60() - use error_handling, only: report_error - use stellarator_variables, only: istell - use tfcoil_variables, only: i_tf_sup, cpttf - implicit none - itv_60 = cpttf - if ((istell /= 0).or.(i_tf_sup /= 1)) then - call report_error(49) - end if - end function itv_60 - - subroutine set_itv_60(ratio) - use tfcoil_variables, only: cpttf - implicit none - real(kind(1.d0)) :: ratio - cpttf = ratio - end subroutine set_itv_60 - - !--------------------------------- - - subroutine init_itv_61 - !!
    • (61) dr_shld_vv_gap_inboard - use numerics, only: lablxc, boundl, boundu - implicit none - lablxc(61) = 'dr_shld_vv_gap_inboard ' - boundl(61) = 0.001D0 - boundu(61) = 10.00D0 - end subroutine init_itv_61 - - real(kind(1.d0)) function itv_61() - use build_variables, only: dr_shld_vv_gap_inboard - implicit none - itv_61 = dr_shld_vv_gap_inboard - end function itv_61 - - subroutine set_itv_61(ratio) - use build_variables, only: dr_shld_vv_gap_inboard - implicit none - real(kind(1.d0)) :: ratio - dr_shld_vv_gap_inboard = ratio - end subroutine set_itv_61 - - !--------------------------------- - - subroutine init_itv_62 - !!
    • (62) fdtmp (f-value for equation 38) - use numerics, only: lablxc, boundl, boundu - implicit none - lablxc(62) = 'fdtmp ' - boundl(62) = 0.001D0 - boundu(62) = 1.000D0 - end subroutine init_itv_62 - - real(kind(1.d0)) function itv_62() - use constraint_variables, only: fdtmp - implicit none - itv_62 = fdtmp - end function itv_62 - - subroutine set_itv_62(ratio) - use constraint_variables, only: fdtmp - implicit none - real(kind(1.d0)) :: ratio - fdtmp = ratio - end subroutine set_itv_62 - - !--------------------------------- - - subroutine init_itv_63 - !!
    • (63) ftpeak (f-value for equation 39) - use numerics, only: lablxc, boundl, boundu - implicit none - lablxc(63) = 'ftpeak ' - boundl(63) = 0.001D0 - boundu(63) = 1.000D0 - end subroutine init_itv_63 - - real(kind(1.d0)) function itv_63() - use constraint_variables, only: ftpeak - implicit none - itv_63 = ftpeak - end function itv_63 - - subroutine set_itv_63(ratio) - use constraint_variables, only: ftpeak - implicit none - real(kind(1.d0)) :: ratio - ftpeak = ratio - end subroutine set_itv_63 - - !--------------------------------- - - subroutine init_itv_64 - !!
    • (64) fauxmn (f-value for equation 40) - use numerics, only: lablxc, boundl, boundu - implicit none - lablxc(64) = 'fauxmn ' - boundl(64) = 0.001D0 - boundu(64) = 1.000D0 - end subroutine init_itv_64 - - real(kind(1.d0)) function itv_64() - use constraint_variables, only: fauxmn - implicit none - itv_64 = fauxmn - end function itv_64 - - subroutine set_itv_64(ratio) - use constraint_variables, only: fauxmn - implicit none - real(kind(1.d0)) :: ratio - fauxmn = ratio - end subroutine set_itv_64 - - !--------------------------------- - - subroutine init_itv_65 - !!
    • (65) t_current_ramp_up - use numerics, only: lablxc, boundl, boundu - implicit none - lablxc(65) = 't_current_ramp_up ' - boundl(65) = 0.100D0 - boundu(65) = 1.000D3 - end subroutine init_itv_65 - - real(kind(1.d0)) function itv_65() - use error_handling, only: report_error - use pulse_variables, only: i_pulsed_plant - use times_variables, only: t_current_ramp_up - implicit none - itv_65 = t_current_ramp_up - if (i_pulsed_plant /= 1) then - call report_error(50) - end if - end function itv_65 - - subroutine set_itv_65(ratio) - use times_variables, only: t_current_ramp_up - implicit none - real(kind(1.d0)) :: ratio - t_current_ramp_up = ratio - end subroutine set_itv_65 - - !--------------------------------- - - subroutine init_itv_66 - !!
    • (66) ft_current_ramp_up (f-value for equation 41) - use numerics, only: lablxc, boundl, boundu - implicit none - lablxc(66) = 'ft_current_ramp_up ' - boundl(66) = 0.001D0 - boundu(66) = 1.000D0 - end subroutine init_itv_66 - - real(kind(1.d0)) function itv_66() - use constraint_variables, only: ft_current_ramp_up - implicit none - itv_66 = ft_current_ramp_up - end function itv_66 - - subroutine set_itv_66(ratio) - use constraint_variables, only: ft_current_ramp_up - implicit none - real(kind(1.d0)) :: ratio - ft_current_ramp_up = ratio - end subroutine set_itv_66 - - !--------------------------------- - - subroutine init_itv_67 - !!
    • (67) ftcycl (f-value for equation 42) - use numerics, only: lablxc, boundl, boundu - implicit none - lablxc(67) = 'ftcycl ' - boundl(67) = 0.001D0 - boundu(67) = 1.000D0 - end subroutine init_itv_67 - - real(kind(1.d0)) function itv_67() - use constraint_variables, only: ftcycl - implicit none - itv_67 = ftcycl - end function itv_67 - - subroutine set_itv_67(ratio) - use constraint_variables, only: ftcycl - implicit none - real(kind(1.d0)) :: ratio - ftcycl = ratio - end subroutine set_itv_67 - - !--------------------------------- - - subroutine init_itv_68 - !!
    • (68) fptemp (f-value for equation 44) - use numerics, only: lablxc, boundl, boundu - implicit none - lablxc(68) = 'fptemp ' - boundl(68) = 0.001D0 - boundu(68) = 1.000D0 - end subroutine init_itv_68 - - real(kind(1.d0)) function itv_68() - use constraint_variables, only: fptemp - implicit none - itv_68 = fptemp - end function itv_68 - - subroutine set_itv_68(ratio) - use constraint_variables, only: fptemp - implicit none - real(kind(1.d0)) :: ratio - fptemp= ratio - end subroutine set_itv_68 - - !--------------------------------- - - subroutine init_itv_69 - !!
    • (69) rcool - use numerics, only: lablxc, boundl, boundu - implicit none - lablxc(69) = 'rcool ' - boundl(69) = 0.001D0 - boundu(69) = 0.010D0 - end subroutine init_itv_69 - - real(kind(1.d0)) function itv_69() - use tfcoil_variables, only: rcool - implicit none - itv_69 = rcool - end function itv_69 - - subroutine set_itv_69(ratio) - use tfcoil_variables, only: rcool - implicit none - real(kind(1.d0)) :: ratio - rcool = ratio - end subroutine set_itv_69 - - !--------------------------------- - - subroutine init_itv_70 - !!
    • (70) vcool - use numerics, only: lablxc, boundl, boundu - implicit none - lablxc(70) = 'vcool ' - boundl(70) = 1.000D0 - boundu(70) = 1.000D2 - end subroutine init_itv_70 - - real(kind(1.d0)) function itv_70() - use tfcoil_variables, only: vcool - implicit none - itv_70 = vcool - end function itv_70 - - subroutine set_itv_70(ratio) - use tfcoil_variables, only: vcool - implicit none - real(kind(1.d0)) :: ratio - vcool = ratio - end subroutine set_itv_70 - - !--------------------------------- - - subroutine init_itv_71 - !!
    • (71) fq (f-value for equation 45) - use numerics, only: lablxc, boundl, boundu - implicit none - lablxc(71) = 'fq ' - boundl(71) = 0.001D0 - boundu(71) = 1.000D0 - end subroutine init_itv_71 - - real(kind(1.d0)) function itv_71() - use constraint_variables, only: fq - implicit none - itv_71 = fq - end function itv_71 - - subroutine set_itv_71(ratio) - use constraint_variables, only: fq - implicit none - real(kind(1.d0)) :: ratio - fq = ratio - end subroutine set_itv_71 - - !--------------------------------- - - subroutine init_itv_72 - !!
    • (72) fipir (f-value for equation 46) - use numerics, only: lablxc, boundl, boundu - implicit none - lablxc(72) = 'fipir ' - boundl(72) = 0.001D0 - boundu(72) = 1.000D0 - end subroutine init_itv_72 - - real(kind(1.d0)) function itv_72() - use constraint_variables, only: fipir - implicit none - itv_72 = fipir - end function itv_72 - - subroutine set_itv_72(ratio) - use constraint_variables, only: fipir - implicit none - real(kind(1.d0)) :: ratio - fipir = ratio - end subroutine set_itv_72 - - !--------------------------------- - - subroutine init_itv_73 - !!
    • (73) dr_fw_plasma_gap_inboard - use numerics, only: lablxc, boundl, boundu - implicit none - lablxc(73) = 'dr_fw_plasma_gap_inboard ' - boundl(73) = 0.001D0 - boundu(73) = 10.00D0 - end subroutine init_itv_73 - - real(kind(1.d0)) function itv_73() - use build_variables, only: dr_fw_plasma_gap_inboard - implicit none - itv_73 = dr_fw_plasma_gap_inboard - end function itv_73 - - subroutine set_itv_73(ratio) - use build_variables, only: dr_fw_plasma_gap_inboard - implicit none - real(kind(1.d0)) :: ratio - dr_fw_plasma_gap_inboard = ratio - end subroutine set_itv_73 - - !--------------------------------- - - subroutine init_itv_74 - !!
    • (74) dr_fw_plasma_gap_outboard - use numerics, only: lablxc, boundl, boundu - implicit none - lablxc(74) = 'dr_fw_plasma_gap_outboard ' - boundl(74) = 0.001D0 - boundu(74) = 10.00D0 - end subroutine init_itv_74 - - real(kind(1.d0)) function itv_74() - use build_variables, only: dr_fw_plasma_gap_outboard - implicit none - itv_74 = dr_fw_plasma_gap_outboard - end function itv_74 - - subroutine set_itv_74(ratio) - use build_variables, only: dr_fw_plasma_gap_outboard - implicit none - real(kind(1.d0)) :: ratio - dr_fw_plasma_gap_outboard = ratio - end subroutine set_itv_74 - - !--------------------------------- - - subroutine init_itv_75 - !!
    • (75) tfootfi - use numerics, only: lablxc, boundl, boundu - implicit none - lablxc(75) = 'tfootfi ' - boundl(75) = 0.200D0 - boundu(75) = 5.000D0 - end subroutine init_itv_75 - - real(kind(1.d0)) function itv_75() - use build_variables, only: tfootfi - implicit none - itv_75 = tfootfi - end function itv_75 - - subroutine set_itv_75(ratio) - use build_variables, only: tfootfi - implicit none - real(kind(1.d0)) :: ratio - tfootfi = ratio - end subroutine set_itv_75 - - !!
    • (76) NOT USED - !--------------------------------- - - real(kind(1.d0)) function itv_76() - implicit none - write(*,*) 'Iteration variable 76 is no longer in use.' - end function itv_76 - - !!
    • (77) NOT USED - !--------------------------------- - - real(kind(1.d0)) function itv_77() - implicit none - write(*,*) 'Iteration variable 77 is no longer in use.' - end function itv_77 - - !!
    • (78) NOT USED - !--------------------------------- - - real(kind(1.d0)) function itv_78() - implicit none - write(*,*) 'Iteration variable 78 is no longer in use.' - end function itv_78 - - !--------------------------------- - - subroutine init_itv_79 - !!
    • (79) fbeta_poloidal (f-value for equation 48) - use numerics, only: lablxc, boundl, boundu - implicit none - lablxc(79) = 'fbeta_poloidal ' - boundl(79) = 0.001D0 - boundu(79) = 1.000D0 - end subroutine init_itv_79 - - real(kind(1.d0)) function itv_79() - use constraint_variables, only: fbeta_poloidal - implicit none - itv_79 = fbeta_poloidal - end function itv_79 - - subroutine set_itv_79(ratio) - use constraint_variables, only: fbeta_poloidal - implicit none - real(kind(1.d0)) :: ratio - fbeta_poloidal = ratio - end subroutine set_itv_79 - - !!
    • (80) NOT USED - !--------------------------------- - - real(kind(1.d0)) function itv_80() - implicit none - write(*,*) 'Iteration variable 80 is no longer in use.' - end function itv_80 - - !--------------------------------- - - subroutine init_itv_81 - !!
    • (81) edrive - use numerics, only: lablxc, boundl, boundu - implicit none - lablxc(81) = 'edrive ' - boundl(81) = 1.000d5 - boundu(81) = 5.000d7 - end subroutine init_itv_81 - - real(kind(1.d0)) function itv_81() - use ife_variables, only: edrive - implicit none - itv_81 = edrive - end function itv_81 - - subroutine set_itv_81(ratio) - use ife_variables, only: edrive - implicit none - real(kind(1.d0)) :: ratio - edrive = ratio - end subroutine set_itv_81 - - !--------------------------------- - - subroutine init_itv_82 - !!
    • (82) drveff - use numerics, only: lablxc, boundl, boundu - implicit none - lablxc(82) = 'drveff ' - boundl(82) = 0.010D0 - boundu(82) = 1.000D0 - end subroutine init_itv_82 - - real(kind(1.d0)) function itv_82() - use ife_variables, only: drveff - implicit none - itv_82 = drveff - end function itv_82 - - subroutine set_itv_82(ratio) - use ife_variables, only: drveff - implicit none - real(kind(1.d0)) :: ratio - drveff = ratio - end subroutine set_itv_82 - - !--------------------------------- - - subroutine init_itv_83 - !!
    • (83) tgain - use numerics, only: lablxc, boundl, boundu - implicit none - lablxc(83) = 'tgain ' - boundl(83) = 1.000D0 - boundu(83) = 500.0D0 - end subroutine init_itv_83 - - real(kind(1.d0)) function itv_83() - use ife_variables, only: tgain - implicit none - itv_83 = tgain - end function itv_83 - - subroutine set_itv_83(ratio) - use ife_variables, only: tgain - implicit none - real(kind(1.d0)) :: ratio - tgain = ratio - end subroutine set_itv_83 - - !--------------------------------- - - subroutine init_itv_84 - !!
    • (84) chrad - use numerics, only: lablxc, boundl, boundu - implicit none - lablxc(84) = 'chrad ' - boundl(84) = 0.100D0 - boundu(84) = 20.00D0 - end subroutine init_itv_84 - - real(kind(1.d0)) function itv_84() - use ife_variables, only: chrad - implicit none - itv_84 = chrad - end function itv_84 - - subroutine set_itv_84(ratio) - use ife_variables, only: chrad - implicit none - real(kind(1.d0)) :: ratio - chrad = ratio - end subroutine set_itv_84 - - !--------------------------------- - - subroutine init_itv_85 - !!
    • (85) pdrive - use numerics, only: lablxc, boundl, boundu - implicit none - lablxc(85) = 'pdrive ' - boundl(85) = 1.000D6 - boundu(85) = 200.0D6 - end subroutine init_itv_85 - - real(kind(1.d0)) function itv_85() - use ife_variables, only: pdrive - implicit none - itv_85 = pdrive - end function itv_85 - - subroutine set_itv_85(ratio) - use ife_variables, only: pdrive - implicit none - real(kind(1.d0)) :: ratio - pdrive = ratio - end subroutine set_itv_85 - - !--------------------------------- - - subroutine init_itv_86 - !!
    • (86) frrmax (f-value for equation 50) - use numerics, only: lablxc, boundl, boundu - implicit none - lablxc(86) = 'frrmax ' - boundl(86) = 0.001D0 - boundu(86) = 1.000D0 - end subroutine init_itv_86 - - real(kind(1.d0)) function itv_86() - use ife_variables, only: frrmax - implicit none - itv_86 = frrmax - end function itv_86 - - subroutine set_itv_86(ratio) - use ife_variables, only: frrmax - implicit none - real(kind(1.d0)) :: ratio - frrmax = ratio - end subroutine set_itv_86 - - !!
    • (87) NOT USED - !--------------------------------- - - !!
    • (88) NOT USED - - !--------------------------------- - - subroutine init_itv_89 - !!
    • (89) ftbr (f-value for equation 52) - use numerics, only: lablxc, boundl, boundu - implicit none - lablxc(89) = 'ftbr ' - boundl(89) = 0.001D0 - boundu(89) = 1.000D0 - end subroutine init_itv_89 - - real(kind(1.d0)) function itv_89() - use constraint_variables, only: ftbr - implicit none - itv_89 = ftbr - end function itv_89 - - subroutine set_itv_89(ratio) - use constraint_variables, only: ftbr - implicit none - real(kind(1.d0)) :: ratio - ftbr = ratio - end subroutine set_itv_89 - - !--------------------------------- - - subroutine init_itv_90 - !!
    • (90) blbuith - use numerics, only: lablxc, boundl, boundu - implicit none - lablxc(90) = 'blbuith ' - boundl(90) = 0.001D0 - boundu(90) = 2.000D0 - end subroutine init_itv_90 - - real(kind(1.d0)) function itv_90() - use build_variables, only: blbuith - implicit none - itv_90 = blbuith - end function itv_90 - - subroutine set_itv_90(ratio) - use build_variables, only: blbuith - implicit none - real(kind(1.d0)) :: ratio - blbuith = ratio - end subroutine set_itv_90 - - !--------------------------------- - - subroutine init_itv_91 - !!
    • (91) blbuoth - use numerics, only: lablxc, boundl, boundu - implicit none - lablxc(91) = 'blbuoth ' - boundl(91) = 0.001D0 - boundu(91) = 2.000D0 - end subroutine init_itv_91 - - real(kind(1.d0)) function itv_91() - use build_variables, only: blbuoth - implicit none - itv_91 = blbuoth - end function itv_91 - - subroutine set_itv_91(ratio) - use build_variables, only: blbuoth - implicit none - real(kind(1.d0)) :: ratio - blbuoth = ratio - end subroutine set_itv_91 - - !--------------------------------- - - subroutine init_itv_92 - !!
    • (92) fflutf (f-value for equation 53) - use numerics, only: lablxc, boundl, boundu - implicit none - lablxc(92) = 'fflutf ' - boundl(92) = 0.001D0 - boundu(92) = 1.000D0 - end subroutine init_itv_92 - - real(kind(1.d0)) function itv_92() - use constraint_variables, only: fflutf - implicit none - itv_92 = fflutf - end function itv_92 - - subroutine set_itv_92(ratio) - use constraint_variables, only: fflutf - implicit none - real(kind(1.d0)) :: ratio - fflutf = ratio - end subroutine set_itv_92 - - !--------------------------------- - - subroutine init_itv_93 - !!
    • (93) dr_shld_inboard - use numerics, only: lablxc, boundl, boundu - implicit none - lablxc(93) = 'dr_shld_inboard ' - boundl(93) = 0.001D0 - boundu(93) = 10.00D0 - end subroutine init_itv_93 - - real(kind(1.d0)) function itv_93() - use build_variables, only: dr_shld_inboard - implicit none - itv_93 = dr_shld_inboard - end function itv_93 - - subroutine set_itv_93(ratio) - use build_variables, only: dr_shld_inboard - implicit none - real(kind(1.d0)) :: ratio - dr_shld_inboard = ratio - end subroutine set_itv_93 - - !--------------------------------- - - subroutine init_itv_94 - !!
    • (94) dr_shld_outboard - use numerics, only: lablxc, boundl, boundu - implicit none - lablxc(94) = 'dr_shld_outboard ' - boundl(94) = 0.001D0 - boundu(94) = 10.00D0 - end subroutine init_itv_94 - - real(kind(1.d0)) function itv_94() - use build_variables, only: dr_shld_outboard - implicit none - itv_94 = dr_shld_outboard - end function itv_94 - - subroutine set_itv_94(ratio) - use build_variables, only: dr_shld_outboard - implicit none - real(kind(1.d0)) :: ratio - dr_shld_outboard = ratio - end subroutine set_itv_94 - - !--------------------------------- - - subroutine init_itv_95 - !!
    • (95) fptfnuc (f-value for equation 54) - use numerics, only: lablxc, boundl, boundu - implicit none - lablxc(95) = 'fptfnuc ' - boundl(95) = 0.001D0 - boundu(95) = 1.000D0 - end subroutine init_itv_95 - - real(kind(1.d0)) function itv_95() - use constraint_variables, only: fptfnuc - implicit none - itv_95 = fptfnuc - end function itv_95 - - subroutine set_itv_95(ratio) - use constraint_variables, only: fptfnuc - implicit none - real(kind(1.d0)) :: ratio - fptfnuc = ratio - end subroutine set_itv_95 - - !--------------------------------- - - subroutine init_itv_96 - !!
    • (96) fvvhe (f-value for equation 55) - use numerics, only: lablxc, boundl, boundu - implicit none - lablxc(96) = 'fvvhe ' - boundl(96) = 0.001D0 - boundu(96) = 1.000D0 - end subroutine init_itv_96 - - real(kind(1.d0)) function itv_96() - use constraint_variables, only: fvvhe - implicit none - itv_96 = fvvhe - end function itv_96 - - subroutine set_itv_96(ratio) - use constraint_variables, only: fvvhe - implicit none - real(kind(1.d0)) :: ratio - fvvhe = ratio - end subroutine set_itv_96 - - !--------------------------------- - - subroutine init_itv_97 - !!
    • (97) fpsepr (f-value for equation 56) - use numerics, only: lablxc, boundl, boundu - implicit none - lablxc(97) = 'fpsepr ' - boundl(97) = 0.001D0 - boundu(97) = 1.000D0 - end subroutine init_itv_97 - - real(kind(1.d0)) function itv_97() - use constraint_variables, only: fpsepr - implicit none - itv_97 = fpsepr - end function itv_97 - - subroutine set_itv_97(ratio) - use constraint_variables, only: fpsepr - implicit none - real(kind(1.d0)) :: ratio - fpsepr = ratio - end subroutine set_itv_97 - - !--------------------------------- - - subroutine init_itv_98 - !!
    • (98) f_blkt_li6_enrichment - use numerics, only: lablxc, boundl, boundu - implicit none - lablxc(98) = 'f_blkt_li6_enrichment ' - boundl(98) = 10.00D0 - boundu(98) = 100.0D0 - end subroutine init_itv_98 - - real(kind(1.d0)) function itv_98() - use fwbs_variables, only: f_blkt_li6_enrichment - implicit none - itv_98 = f_blkt_li6_enrichment - end function itv_98 - - subroutine set_itv_98(ratio) - use fwbs_variables, only: f_blkt_li6_enrichment - implicit none - real(kind(1.d0)) :: ratio - f_blkt_li6_enrichment = ratio - end subroutine set_itv_98 - - !!
    • (99) NOT USED - !--------------------------------- - - !!
    • (100) NOT USED - !!
    • (101) NOT USED - - !--------------------------------- - - - - !--------------------------------- - - subroutine init_itv_103 - !!
    • (103) fl_h_threshold (f-value for equation 15) - use numerics, only: lablxc, boundl, boundu - implicit none - lablxc(103) = 'fl_h_threshold ' - boundl(103) = 0.001D0 - boundu(103) = 1.000D0 - end subroutine init_itv_103 - - real(kind(1.d0)) function itv_103() - use constraint_variables, only: fl_h_threshold - implicit none - itv_103 = fl_h_threshold - end function itv_103 - - subroutine set_itv_103(ratio) - use constraint_variables, only: fl_h_threshold - implicit none - real(kind(1.d0)) :: ratio - fl_h_threshold = ratio - end subroutine set_itv_103 - - !--------------------------------- - - subroutine init_itv_104 - !!
    • (104)fr_conducting_wall (f-value for equation 23) - use numerics, only: lablxc, boundl, boundu - implicit none - lablxc(104) = 'fcwr ' - boundl(104) = 0.001D0 - boundu(104) = 1.000D0 - end subroutine init_itv_104 - - real(kind(1.d0)) function itv_104() - use constraint_variables, only:fr_conducting_wall - implicit none - itv_104 =fr_conducting_wall - end function itv_104 - - subroutine set_itv_104(ratio) - use constraint_variables, only:fr_conducting_wall - implicit none - real(kind(1.d0)) :: ratio - fr_conducting_wall = ratio - end subroutine set_itv_104 - - !--------------------------------- - - subroutine init_itv_105 - !!
    • (105) fnbshinef (f-value for equation 59) - use numerics, only: lablxc, boundl, boundu - implicit none - lablxc(105) = 'fnbshinef ' - boundl(105) = 0.001D0 - boundu(105) = 1.000D0 - end subroutine init_itv_105 - - real(kind(1.d0)) function itv_105() - use constraint_variables, only: fnbshinef - implicit none - itv_105 = fnbshinef - end function itv_105 - - subroutine set_itv_105(ratio) - use constraint_variables, only: fnbshinef - implicit none - real(kind(1.d0)) :: ratio - fnbshinef = ratio - end subroutine set_itv_105 - - !--------------------------------- - - subroutine init_itv_106 - !!
    • (106) ftmargoh (f-value for equation 60) - use numerics, only: lablxc, boundl, boundu - implicit none - lablxc(106) = 'ftmargoh ' - boundl(106) = 0.001D0 - boundu(106) = 1.000D0 - end subroutine init_itv_106 - - real(kind(1.d0)) function itv_106() - use constraint_variables, only: ftmargoh - implicit none - itv_106 = ftmargoh - end function itv_106 - - subroutine set_itv_106(ratio) - use constraint_variables, only: ftmargoh - implicit none - real(kind(1.d0)) :: ratio - ftmargoh = ratio - end subroutine set_itv_106 - - !--------------------------------- - - subroutine init_itv_107 - !!
    • (107) favail (f-value for equation 61) - use numerics, only: lablxc, boundl, boundu - implicit none - lablxc(107) = 'favail ' - boundl(107) = 0.001D0 - boundu(107) = 1.000D0 - end subroutine init_itv_107 - - real(kind(1.d0)) function itv_107() - use cost_variables, only: favail - implicit none - itv_107 = favail - end function itv_107 - - subroutine set_itv_107(ratio) - use cost_variables, only: favail - implicit none - real(kind(1.d0)) :: ratio - favail = ratio - end subroutine set_itv_107 - - !--------------------------------- - - subroutine init_itv_108 - !!
    • (108) breeder_f: Volume of Li4SiO4 / (Volume of Be12Ti + Li4SiO4) - use numerics, only: lablxc, boundl, boundu - implicit none - lablxc(108) = 'breeder_f ' - boundl(108) = 0.060D0 - boundu(108) = 1.000D0 - end subroutine init_itv_108 - - real(kind(1.d0)) function itv_108() - use fwbs_variables, only: breeder_f - implicit none - itv_108 = breeder_f - end function itv_108 - - subroutine set_itv_108(ratio) - use fwbs_variables, only: breeder_f - implicit none - real(kind(1.d0)) :: ratio - breeder_f = ratio - end subroutine set_itv_108 - - !--------------------------------- - - subroutine init_itv_109 - !!
    • (109) f_nd_alpha_electron: thermal alpha density / electron density - use numerics, only: lablxc, boundl, boundu - implicit none - lablxc(109) = 'f_nd_alpha_electron ' - boundl(109) = 0.050D0 - boundu(109) = 0.150D0 - end subroutine init_itv_109 - - real(kind(1.d0)) function itv_109() - use physics_variables, only: f_nd_alpha_electron - implicit none - itv_109 = f_nd_alpha_electron - end function itv_109 - - subroutine set_itv_109(ratio) - use physics_variables, only: f_nd_alpha_electron - implicit none - real(kind(1.d0)) :: ratio - f_nd_alpha_electron = ratio - end subroutine set_itv_109 - - !--------------------------------- - - subroutine init_itv_110 - !!
    • (110) falpha_energy_confinement: Lower limit on f_alpha_energy_confinement the ratio of alpha - use numerics, only: lablxc, boundl, boundu - implicit none - !! particle to energy confinement times (f-value for equation 62) - lablxc(110) = 'falpha_energy_confinement ' - boundl(110) = 0.001D0 - boundu(110) = 1.000D0 - end subroutine init_itv_110 - - real(kind(1.d0)) function itv_110() - use constraint_variables, only: falpha_energy_confinement - implicit none - itv_110 = falpha_energy_confinement - end function itv_110 - - subroutine set_itv_110(ratio) - use constraint_variables, only: falpha_energy_confinement - implicit none - real(kind(1.d0)) :: ratio - falpha_energy_confinement = ratio - end subroutine set_itv_110 - - !--------------------------------- - - subroutine init_itv_111 - !!
    • (111) fniterpump: f-value for constraint that number - use numerics, only: lablxc, boundl, boundu - implicit none - !! of vacuum pumps < TF coils (f-value for equation 63) - lablxc(111) = 'fniterpump ' - boundl(111) = 0.001D0 - boundu(111) = 1.000D0 - end subroutine init_itv_111 - - real(kind(1.d0)) function itv_111() - use constraint_variables, only: fniterpump - implicit none - itv_111 = fniterpump - end function itv_111 - - subroutine set_itv_111(ratio) - use constraint_variables, only: fniterpump - implicit none - real(kind(1.d0)) :: ratio - fniterpump = ratio - end subroutine set_itv_111 - - !--------------------------------- - - subroutine init_itv_112 - !!
    • (112) fzeffmax: f-value for max Zeff (f-value for equation 64) - use numerics, only: lablxc, boundl, boundu - implicit none - lablxc(112) = 'fzeffmax ' - boundl(112) = 0.001D0 - boundu(112) = 1.000D0 - end subroutine init_itv_112 - - real(kind(1.d0)) function itv_112() - use constraint_variables, only: fzeffmax - implicit none - itv_112 = fzeffmax - end function itv_112 - - subroutine set_itv_112(ratio) - use constraint_variables, only: fzeffmax - implicit none - real(kind(1.d0)) :: ratio - fzeffmax = ratio - end subroutine set_itv_112 - - !--------------------------------- - - subroutine init_itv_113 - !!
    • (113) ftaucq: f-value for maximum VV stress (f-value for equation 65) - use numerics, only: lablxc, boundl, boundu - implicit none - lablxc(113) = 'fmaxvvstress ' - boundl(113) = 0.001D0 - boundu(113) = 1.000D0 - end subroutine init_itv_113 - - real(kind(1.d0)) function itv_113() - use constraint_variables, only: fmaxvvstress - implicit none - itv_113 = fmaxvvstress - end function itv_113 - - subroutine set_itv_113(ratio) - use constraint_variables, only: fmaxvvstress - implicit none - real(kind(1.d0)) :: ratio - fmaxvvstress = ratio - end subroutine set_itv_113 - - !--------------------------------- - - subroutine init_itv_114 - !!
    • (114) len_fw_channel: Length of a single first wall channel - use numerics, only: lablxc, boundl, boundu - implicit none - lablxc(114) = 'len_fw_channel ' - boundl(114) = 0.001D0 - boundu(114) = 1.000D3 - end subroutine init_itv_114 - - real(kind(1.d0)) function itv_114() - use fwbs_variables, only: len_fw_channel - implicit none - itv_114 = len_fw_channel - end function itv_114 - - subroutine set_itv_114(ratio) - use fwbs_variables, only: len_fw_channel - implicit none - real(kind(1.d0)) :: ratio - len_fw_channel = ratio - end subroutine set_itv_114 - - !--------------------------------- - - subroutine init_itv_115 - !!
    • (115) fpoloidalpower: f-value for max rate of change of - use numerics, only: lablxc, boundl, boundu - implicit none - !! energy in poloidal field (f-value for equation 66) - lablxc(115) = 'fpoloidalpower' - boundl(115) = 0.001D0 - boundu(115) = 1.000D0 - end subroutine init_itv_115 - - real(kind(1.d0)) function itv_115() - use constraint_variables, only: fpoloidalpower - implicit none - itv_115 = fpoloidalpower - end function itv_115 - - subroutine set_itv_115(ratio) - use constraint_variables, only: fpoloidalpower - implicit none - real(kind(1.d0)) :: ratio - fpoloidalpower = ratio - end subroutine set_itv_115 - - !--------------------------------- - - subroutine init_itv_116 - !!
    • (116) fradwall: f-value for radiation wall load limit (eq. 67) - use numerics, only: lablxc, boundl, boundu - implicit none - lablxc(116) = 'fradwall ' - boundl(116) = 0.001D0 - boundu(116) = 1.000D0 - end subroutine init_itv_116 - - real(kind(1.d0)) function itv_116() - use constraint_variables, only: fradwall - implicit none - itv_116 = fradwall - end function itv_116 - - subroutine set_itv_116(ratio) - use constraint_variables, only: fradwall - implicit none - real(kind(1.d0)) :: ratio - fradwall = ratio - end subroutine set_itv_116 - - !--------------------------------- - - subroutine init_itv_117 - !!
    • (117) fpsepbqar: f-value for Psep*Bt/qar upper limit (eq. 68) - use numerics, only: lablxc, boundl, boundu - implicit none - lablxc(117) = 'fpsepbqar ' - boundl(117) = 0.001D0 - boundu(117) = 1.000D0 - end subroutine init_itv_117 - - real(kind(1.d0)) function itv_117() - use constraint_variables, only: fpsepbqar - implicit none - itv_117 = fpsepbqar - end function itv_117 - - subroutine set_itv_117(ratio) - use constraint_variables, only: fpsepbqar - implicit none - real(kind(1.d0)) :: ratio - fpsepbqar = ratio - end subroutine set_itv_117 - - !--------------------------------- - - subroutine init_itv_118 - !!
    • (118) fpsep: f-value to ensure separatrix power is less than - use numerics, only: lablxc, boundl, boundu - implicit none - !! value from Kallenbach divertor (f-value for equation 69) - lablxc(118) = 'fpsep ' - boundl(118) = 0.001D0 - boundu(118) = 1.000D0 - end subroutine init_itv_118 - - real(kind(1.d0)) function itv_118() - use constraint_variables, only: fpsep - implicit none - itv_118 = fpsep - end function itv_118 - - subroutine set_itv_118(ratio) - use constraint_variables, only: fpsep - implicit none - real(kind(1.d0)) :: ratio - fpsep = ratio - end subroutine set_itv_118 - - !--------------------------------- - - subroutine init_itv_119 - !!
    • (119) tesep: separatrix temperature calculated by the Kallenbach divertor model - use numerics, only: lablxc, boundl, boundu - implicit none - lablxc(119) = 'tesep ' - boundl(119) = 0.000D0 - boundu(119) = 1.000D1 - end subroutine init_itv_119 - - real(kind(1.d0)) function itv_119() - use physics_variables, only: tesep - implicit none - itv_119 = tesep - end function itv_119 - - subroutine set_itv_119(ratio) - use physics_variables, only: tesep - implicit none - real(kind(1.d0)) :: ratio - tesep = ratio - end subroutine set_itv_119 - - !--------------------------------- - - subroutine init_itv_120 - !!
    • (120) ttarget: Plasma temperature adjacent to divertor sheath [eV] - use numerics, only: lablxc, boundl, boundu - implicit none - lablxc(120) = 'ttarget ' - boundl(120) = 1.000D0 - boundu(120) = 1.000D4 - end subroutine init_itv_120 - - real(kind(1.d0)) function itv_120() - ! From Kallenbach model, should be reserved if the model is going to be added back - end function itv_120 - - subroutine set_itv_120(ratio) - implicit none - real(kind(1.d0)) :: ratio - ! From Kallenbach model, should be reserved if the model is going to be added back - end subroutine set_itv_120 - - !--------------------------------- - - subroutine init_itv_121 - !!
    • (121) neratio: ratio of mean SOL density at OMP to separatrix density at OMP - use numerics, only: lablxc, boundl, boundu - implicit none - lablxc(121) = 'neratio ' - boundl(121) = 0.001D0 - boundu(121) = 1.000D0 - end subroutine init_itv_121 - - real(kind(1.d0)) function itv_121() - ! From Kallenbach model, should be reserved if the model is going to be added back - end function itv_121 - - subroutine set_itv_121(ratio) - implicit none - real(kind(1.d0)) :: ratio - ! From Kallenbach model, should be reserved if the model is going to be added back - end subroutine set_itv_121 - - !--------------------------------- - - subroutine init_itv_122 - !!
    • (122) f_a_cs_steel : streel fraction of Central Solenoid - use numerics, only: lablxc, boundl, boundu - implicit none - lablxc(122) = 'f_a_cs_steel ' - boundl(122) = 0.001D0 - boundu(122) = 0.950D0 - end subroutine init_itv_122 - - real(kind(1.d0)) function itv_122() - use pfcoil_variables, only: f_a_cs_steel - implicit none - itv_122 = f_a_cs_steel - end function itv_122 - - subroutine set_itv_122(ratio) - use pfcoil_variables, only: f_a_cs_steel - implicit none - real(kind(1.d0)) :: ratio - f_a_cs_steel = ratio - end subroutine set_itv_122 - - !--------------------------------- - - subroutine init_itv_123 - !!
    • (123) foh_stress : f-value for CS coil Tresca yield criterion (f-value for eq. 72) - use numerics, only: lablxc, boundl, boundu - implicit none - lablxc(123) = 'foh_stress ' - boundl(123) = 0.001D0 - boundu(123) = 1.000D0 - end subroutine init_itv_123 - - real(kind(1.d0)) function itv_123() - use constraint_variables, only: foh_stress - implicit none - itv_123 = foh_stress - end function itv_123 - - subroutine set_itv_123(ratio) - use constraint_variables, only: foh_stress - implicit none - real(kind(1.d0)) :: ratio - foh_stress = ratio - end subroutine set_itv_123 - - !--------------------------------- - - subroutine init_itv_124 - !!
    • (124) qtargettotal : Power density on target including surface recombination [W/m2] - use numerics, only: lablxc, boundl, boundu - implicit none - lablxc(124) = 'qtargettotal ' - boundl(124) = 0.001D0 - boundu(124) = 1.000D7 - end subroutine init_itv_124 - - real(kind(1.d0)) function itv_124() - ! From Kallenbach model, should be reserved if the model is going to be added back - end function itv_124 - - subroutine set_itv_124(ratio) - implicit none - real(kind(1.d0)) :: ratio - ! From Kallenbach model, should be reserved if the model is going to be added back - end subroutine set_itv_124 - - !--------------------------------- - - subroutine init_itv_125 - !!
    • (125) fimp(3) : Beryllium density fraction relative to electron density - use numerics, only: lablxc, boundl, boundu - implicit none - lablxc(125) = 'fimp(03) ' - boundl(125) = 1.00D-8 - boundu(125) = 0.010D0 - end subroutine init_itv_125 - - real(kind(1.d0)) function itv_125() - use impurity_radiation_module, only: impurity_arr_frac - implicit none - itv_125 = impurity_arr_frac(3) - end function itv_125 - - subroutine set_itv_125(ratio) - use impurity_radiation_module, only: impurity_arr_frac - implicit none - real(kind(1.d0)) :: ratio - impurity_arr_frac(3) = ratio - end subroutine set_itv_125 - - !--------------------------------- - - subroutine init_itv_126 - !!
    • (126) fimp(4) : Carbon density fraction relative to electron density - use numerics, only: lablxc, boundl, boundu - implicit none - lablxc(126) = 'fimp(04) ' - boundl(126) = 1.00D-8 - boundu(126) = 0.010D0 - end subroutine init_itv_126 - - real(kind(1.d0)) function itv_126() - use impurity_radiation_module, only: impurity_arr_frac - implicit none - itv_126 = impurity_arr_frac(4) - end function itv_126 - - subroutine set_itv_126(ratio) - use impurity_radiation_module, only: impurity_arr_frac - implicit none - real(kind(1.d0)) :: ratio - impurity_arr_frac(4) = ratio - end subroutine set_itv_126 - - !--------------------------------- - - subroutine init_itv_127 - !!
    • (127) fimp(5) : Nitrogen fraction relative to electron density - use numerics, only: lablxc, boundl, boundu - implicit none - lablxc(127) = 'fimp(05) ' - boundl(127) = 1.00D-8 - boundu(127) = 0.010D0 - end subroutine init_itv_127 - - real(kind(1.d0)) function itv_127() - use impurity_radiation_module, only: impurity_arr_frac - implicit none - itv_127 = impurity_arr_frac(5) - end function itv_127 - - subroutine set_itv_127(ratio) - use impurity_radiation_module, only: impurity_arr_frac - implicit none - real(kind(1.d0)) :: ratio - impurity_arr_frac(5) = ratio - end subroutine set_itv_127 - - !--------------------------------- - - subroutine init_itv_128 - !!
    • (128) fimp(6) : Oxygen density fraction relative to electron density - use numerics, only: lablxc, boundl, boundu - implicit none - lablxc(128) = 'fimp(06) ' - boundl(128) = 1.00D-8 - boundu(128) = 0.010D0 - end subroutine init_itv_128 - - real(kind(1.d0)) function itv_128() - use impurity_radiation_module, only: impurity_arr_frac - implicit none - itv_128 = impurity_arr_frac(6) - end function itv_128 - - subroutine set_itv_128(ratio) - use impurity_radiation_module, only: impurity_arr_frac - implicit none - real(kind(1.d0)) :: ratio - impurity_arr_frac(6) = ratio - end subroutine set_itv_128 - - !--------------------------------- - - subroutine init_itv_129 - !!
    • (129) fimp(7) : Neon density fraction relative to electron density - use numerics, only: lablxc, boundl, boundu - implicit none - lablxc(129) = 'fimp(07) ' - boundl(129) = 1.00D-8 - boundu(129) = 0.010D0 - end subroutine init_itv_129 - - real(kind(1.d0)) function itv_129() - use impurity_radiation_module, only: impurity_arr_frac - implicit none - itv_129 = impurity_arr_frac(7) - end function itv_129 - - subroutine set_itv_129(ratio) - use impurity_radiation_module, only: impurity_arr_frac - implicit none - real(kind(1.d0)) :: ratio - impurity_arr_frac(7) = ratio - end subroutine set_itv_129 - - !--------------------------------- - - subroutine init_itv_130 - !!
    • (130) fimp(8) : Silicon density fraction relative to electron density - use numerics, only: lablxc, boundl, boundu - implicit none - lablxc(130) = 'fimp(08) ' - boundl(130) = 1.00D-8 - boundu(130) = 0.010D0 - end subroutine init_itv_130 - - real(kind(1.d0)) function itv_130() - use impurity_radiation_module, only: impurity_arr_frac - implicit none - itv_130 = impurity_arr_frac(8) - end function itv_130 - - subroutine set_itv_130(ratio) - use impurity_radiation_module, only: impurity_arr_frac - implicit none - real(kind(1.d0)) :: ratio - impurity_arr_frac(8) = ratio - end subroutine set_itv_130 - - !--------------------------------- - - subroutine init_itv_131 - !!
    • (131) fimp(9) : Argon density fraction relative to electron density - use numerics, only: lablxc, boundl, boundu - implicit none - lablxc(131) = 'fimp(09) ' - boundl(131) = 1.00D-8 - boundu(131) = 0.010D0 - end subroutine init_itv_131 - - real(kind(1.d0)) function itv_131() - use impurity_radiation_module, only: impurity_arr_frac - implicit none - itv_131 = impurity_arr_frac(9) - end function itv_131 - - subroutine set_itv_131(ratio) - use impurity_radiation_module, only: impurity_arr_frac - implicit none - real(kind(1.d0)) :: ratio - impurity_arr_frac(9) = ratio - end subroutine set_itv_131 - - !--------------------------------- - - subroutine init_itv_132 - !!
    • (132) fimp(10) : Iron density fraction relative to electron density - use numerics, only: lablxc, boundl, boundu - implicit none - lablxc(132) = 'fimp(10) ' - boundl(132) = 1.00D-8 - boundu(132) = 0.010D0 - end subroutine init_itv_132 - - real(kind(1.d0)) function itv_132() - use impurity_radiation_module, only: impurity_arr_frac - implicit none - itv_132 = impurity_arr_frac(10) - end function itv_132 - - subroutine set_itv_132(ratio) - use impurity_radiation_module, only: impurity_arr_frac - implicit none - real(kind(1.d0)) :: ratio - impurity_arr_frac(10) = ratio - end subroutine set_itv_132 - - !--------------------------------- - - subroutine init_itv_133 - !!
    • (133) fimp(11) : Nickel density fraction relative to electron density - use numerics, only: lablxc, boundl, boundu - implicit none - lablxc(133) = 'fimp(11) ' - boundl(133) = 1.00D-8 - boundu(133) = 0.010D0 - end subroutine init_itv_133 - - real(kind(1.d0)) function itv_133() - use impurity_radiation_module, only: impurity_arr_frac - implicit none - itv_133 = impurity_arr_frac(11) - end function itv_133 - - subroutine set_itv_133(ratio) - use impurity_radiation_module, only: impurity_arr_frac - implicit none - real(kind(1.d0)) :: ratio - impurity_arr_frac(11) = ratio - end subroutine set_itv_133 - - !--------------------------------- - - subroutine init_itv_134 - !!
    • (134) fimp(12) : Krypton density fraction relative to electron density - use numerics, only: lablxc, boundl, boundu - implicit none - lablxc(134) = 'fimp(12) ' - boundl(134) = 1.00D-8 - boundu(134) = 0.010D0 - end subroutine init_itv_134 - - real(kind(1.d0)) function itv_134() - use impurity_radiation_module, only: impurity_arr_frac - implicit none - itv_134 = impurity_arr_frac(12) - end function itv_134 - - subroutine set_itv_134(ratio) - use impurity_radiation_module, only: impurity_arr_frac - implicit none - real(kind(1.d0)) :: ratio - impurity_arr_frac(12) = ratio - end subroutine set_itv_134 - - !--------------------------------- - - subroutine init_itv_135 - !!
    • (135) fimp(13) : Xenon density fraction relative to electron density - use numerics, only: lablxc, boundl, boundu - implicit none - lablxc(135) = 'fimp(13) ' - boundl(135) = 1.00D-8 - boundu(135) = 0.010D0 - end subroutine init_itv_135 - - real(kind(1.d0)) function itv_135() - use impurity_radiation_module, only: impurity_arr_frac - implicit none - itv_135 = impurity_arr_frac(13) - end function itv_135 - - subroutine set_itv_135(ratio) - use impurity_radiation_module, only: impurity_arr_frac - implicit none - real(kind(1.d0)) :: ratio - impurity_arr_frac(13) = ratio - end subroutine set_itv_135 - - !--------------------------------- - - subroutine init_itv_136 - !!
    • (136) fimp(14) : Tungsten density fraction relative to electron density - use numerics, only: lablxc, boundl, boundu - implicit none - lablxc(136) = 'fimp(14) ' - boundl(136) = 1.00D-8 - boundu(136) = 0.010D0 - end subroutine init_itv_136 - - real(kind(1.d0)) function itv_136() - use impurity_radiation_module, only: impurity_arr_frac - implicit none - itv_136 = impurity_arr_frac(14) - end function itv_136 - - subroutine set_itv_136(ratio) - use impurity_radiation_module, only: impurity_arr_frac - implicit none - real(kind(1.d0)) :: ratio - impurity_arr_frac(14) = ratio - end subroutine set_itv_136 - - !--------------------------------- - - subroutine init_itv_137 - !!
    • (137) fplhsep (f-value for equation 73) - use numerics, only: lablxc, boundl, boundu - implicit none - lablxc(137) = 'fplhsep ' - boundl(137) = 0.001D0 - boundu(137) = 1.000D0 - end subroutine init_itv_137 - - real(kind(1.d0)) function itv_137() - use physics_variables, only: fplhsep - implicit none - itv_137 = fplhsep - end function itv_137 - - subroutine set_itv_137(ratio) - use physics_variables, only: fplhsep - implicit none - real(kind(1.d0)) :: ratio - fplhsep = ratio - end subroutine set_itv_137 - - !--------------------------------- - - subroutine init_itv_138 - !!
    • (138) rebco_thickness : thickness of REBCO layer in tape (m) - use numerics, only: lablxc, boundl, boundu - implicit none - lablxc(138) = 'rebco_thickness' - boundl(138) = 0.01D-6 - boundu(138) = 100.0D-6 - end subroutine init_itv_138 - - real(kind(1.d0)) function itv_138() - use physics_variables, only: fplhsep - implicit none - itv_138 = fplhsep - end function itv_138 - - subroutine set_itv_138(ratio) - use physics_variables, only: fplhsep - implicit none - real(kind(1.d0)) :: ratio - fplhsep = ratio - end subroutine set_itv_138 - - !--------------------------------- - - subroutine init_itv_139 - !!
    • (139) copper_thick : thickness of copper layer in tape (m) - use numerics, only: lablxc, boundl, boundu - implicit none - lablxc(139) = 'copper_thick ' - boundl(139) = 1.00D-6 - boundu(139) = 1.00D-3 - end subroutine init_itv_139 - - real(kind(1.d0)) function itv_139() - use rebco_variables, only: copper_thick - implicit none - itv_139 = copper_thick - end function itv_139 - - subroutine set_itv_139(ratio) - use rebco_variables, only: copper_thick - implicit none - real(kind(1.d0)) :: ratio - copper_thick = ratio - end subroutine set_itv_139 - - !--------------------------------- - - subroutine init_itv_140 - !!
    • (140) dr_tf_wp : radial thickness of TFC winding pack (m) - use numerics, only: lablxc, boundl, boundu - implicit none - lablxc(140) = 'dr_tf_wp ' - boundl(140) = 0.001D0 - boundu(140) = 2.000D0 - end subroutine init_itv_140 - - real(kind(1.d0)) function itv_140() - use tfcoil_variables, only: dr_tf_wp - implicit none - itv_140 = dr_tf_wp - end function itv_140 - - subroutine set_itv_140(ratio) - use tfcoil_variables, only: dr_tf_wp - implicit none - real(kind(1.d0)) :: ratio - dr_tf_wp = ratio - end subroutine set_itv_140 - - !--------------------------------- - - subroutine init_itv_141 - !!
    • (141) fcqt : TF coil quench temperature < tmax_croco (f-value for equation 74) - use numerics, only: lablxc, boundl, boundu - implicit none - lablxc(141) = 'fcqt ' - boundl(141) = 0.001D0 - boundu(141) = 1.000D0 - end subroutine init_itv_141 - - real(kind(1.d0)) function itv_141() - use constraint_variables, only: fcqt - implicit none - itv_141 = fcqt - end function itv_141 - - subroutine set_itv_141(ratio) - use constraint_variables, only: fcqt - implicit none - real(kind(1.d0)) :: ratio - fcqt = ratio - end subroutine set_itv_141 - - !--------------------------------- - - subroutine init_itv_142 - !!
    • (142) nesep : electron density at separatrix [m-3] - use numerics, only: lablxc, boundl, boundu - implicit none - lablxc(142) = 'nesep ' - boundl(142) = 1.00D17 - boundu(142) = 1.00D20 - end subroutine init_itv_142 - - real(kind(1.d0)) function itv_142() - use physics_variables, only: nesep - implicit none - itv_142 = nesep - end function itv_142 - - subroutine set_itv_142(ratio) - use physics_variables, only: nesep - implicit none - real(kind(1.d0)) :: ratio - nesep = ratio - end subroutine set_itv_142 - - !--------------------------------- - - subroutine init_itv_143 - !!
    • (143) f_copperA_m2 : TF coil current / copper area < Maximum value - !! (f-value for equation 75) - use numerics, only: lablxc, boundl, boundu - implicit none - lablxc(143) = 'f_coppera_m2 ' - boundl(143) = 0.001D0 - boundu(143) = 1.000D0 - end subroutine init_itv_143 - - real(kind(1.d0)) function itv_143() - use rebco_variables, only: f_coppera_m2 - implicit none - itv_143 = f_copperA_m2 - end function itv_143 - - subroutine set_itv_143(ratio) - use rebco_variables, only: f_coppera_m2 - implicit none - real(kind(1.d0)) :: ratio - f_coppera_m2 = ratio - end subroutine set_itv_143 - - !--------------------------------- - - subroutine init_itv_144 - !!
    • (144) fnesep : Eich critical electron density at separatrix - use numerics, only: lablxc, boundl, boundu - implicit none - !! (f-value for constraint equation 76) [m-3] - lablxc(144) = 'fnesep ' - boundl(144) = 0.001D0 - boundu(144) = 1.000D0 - end subroutine init_itv_144 - - real(kind(1.d0)) function itv_144() - use constraint_variables, only: fnesep - implicit none - itv_144 = fnesep - end function itv_144 - - subroutine set_itv_144(ratio) - use constraint_variables, only: fnesep - implicit none - real(kind(1.d0)) :: ratio - fnesep = ratio - end subroutine set_itv_144 - - !--------------------------------- - - subroutine init_itv_145 - !!
    • (145) fgwped : fraction of Greenwald density to set as pedestal-top density - use numerics, only: lablxc, boundl, boundu - implicit none - lablxc(145) = 'fgwped ' - boundl(145) = 0.100D0 - boundu(145) = 0.9D0 - end subroutine init_itv_145 - - real(kind(1.d0)) function itv_145() - use physics_variables, only: fgwped - implicit none - itv_145 = fgwped - end function itv_145 - - subroutine set_itv_145(ratio) - use physics_variables, only: fgwped - implicit none - real(kind(1.d0)) :: ratio - fgwped = ratio - end subroutine set_itv_145 - - !--------------------------------- - - subroutine init_itv_146 - !!
    • (146) fcpttf : F-value for TF coil current per turn limit (constraint equation 77) - use numerics, only: lablxc, boundl, boundu - implicit none - lablxc(146) = 'fcpttf ' - boundl(146) = 0.001D0 - boundu(146) = 1.000D0 - end subroutine init_itv_146 - - real(kind(1.d0)) function itv_146() - use constraint_variables, only: fcpttf - implicit none - itv_146 = fcpttf - end function itv_146 - - subroutine set_itv_146(ratio) - use constraint_variables, only: fcpttf - implicit none - real(kind(1.d0)) :: ratio - fcpttf = ratio - end subroutine set_itv_146 - - !--------------------------------- - - subroutine init_itv_147 - !!
    • (147) freinke : F-value for Reinke detachment criterion (constraint equation 78) - use numerics, only: lablxc, boundl, boundu - implicit none - lablxc(147) = 'freinke ' - boundl(147) = 0.001D0 - boundu(147) = 1.000D0 - end subroutine init_itv_147 - - real(kind(1.d0)) function itv_147() - use constraint_variables, only: freinke - implicit none - itv_147 = freinke - end function itv_147 - - subroutine set_itv_147(ratio) - use constraint_variables, only: freinke - implicit none - real(kind(1.d0)) :: ratio - freinke = ratio - end subroutine set_itv_147 - - !--------------------------------- - - subroutine init_itv_148 - !!
    • (148) fzactual : fraction of impurity at SOL with Reinke detachment criterion - use numerics, only: lablxc, boundl, boundu - implicit none - lablxc(148) = 'fzactual ' - boundl(148) = 1.00D-8 - boundu(148) = 1.000D0 - end subroutine init_itv_148 - - real(kind(1.d0)) function itv_148() - ! From Kallenbach model, should be reserved if the model is going to be added back - end function itv_148 - - subroutine set_itv_148(ratio) - implicit none - real(kind(1.d0)) :: ratio - - ! From Kallenbach model, should be reserved if the model is going to be added back - end subroutine set_itv_148 - - !--------------------------------- - - subroutine init_itv_149 - !!
    • (149) fb_cs_limit_max : F-value for max peak CS field (con. 79, itvar 149) - use numerics, only: lablxc, boundl, boundu - implicit none - lablxc(149) = 'fb_cs_limit_max ' - boundl(149) = 0.001D0 - boundu(149) = 1.000D0 - end subroutine init_itv_149 - - real(kind(1.d0)) function itv_149() - use pfcoil_variables, only: fb_cs_limit_max - implicit none - itv_149 = fb_cs_limit_max - end function itv_149 - - subroutine set_itv_149(ratio) - use pfcoil_variables, only: fb_cs_limit_max - implicit none - real(kind(1.d0)) :: ratio - fb_cs_limit_max = ratio - end subroutine set_itv_149 - - !--------------------------------- - - real(kind(1.d0)) function itv_150() - implicit none - write(*,*) 'Iteration variable 150 no longer in use' - end function itv_150 - - !--------------------------------- - - real(kind(1.d0)) function itv_151() - implicit none - write(*,*) 'Iteration variable 150 no longer in use' - end function itv_151 - - !--------------------------------- - - subroutine init_itv_152 - !!
    • (152) fgwsep : Ratio of separatrix density to Greenwald density - use numerics, only: lablxc, boundl, boundu - implicit none - lablxc(152) = 'fgwsep ' - boundl(152) = 0.001D0 - boundu(152) = 0.5D0 - end subroutine init_itv_152 - - real(kind(1.d0)) function itv_152() - use physics_variables, only: fgwsep - implicit none - itv_152 = fgwsep - end function itv_152 - - subroutine set_itv_152(ratio) - use physics_variables, only: fgwsep - implicit none - real(kind(1.d0)) :: ratio - fgwsep = ratio - end subroutine set_itv_152 - - !--------------------------------- - - subroutine init_itv_153 - !!
    • (153) fpdivlim : F-value for minimum pdivt (con. 80) - use numerics, only: lablxc, boundl, boundu - implicit none - lablxc(153) = 'fpdivlim ' - boundl(153) = 0.001D0 - boundu(153) = 1.000D0 - end subroutine init_itv_153 - - real(kind(1.d0)) function itv_153() - use physics_variables, only: fpdivlim - implicit none - itv_153 = fpdivlim - end function itv_153 - - subroutine set_itv_153(ratio) - use physics_variables, only: fpdivlim - implicit none - real(kind(1.d0)) :: ratio - fpdivlim = ratio - end subroutine set_itv_153 - - !--------------------------------- - - subroutine init_itv_154 - !!
    • (154) fne0 : F-value for ne(0) > ne(ped) (con. 81) - use numerics, only: lablxc, boundl, boundu - implicit none - lablxc(154) = 'fne0 ' - boundl(154) = 0.001D0 - boundu(154) = 1.000D0 - end subroutine init_itv_154 - - real(kind(1.d0)) function itv_154() - use physics_variables, only: fne0 - implicit none - itv_154 = fne0 - end function itv_154 - - subroutine set_itv_154(ratio) - use physics_variables, only: fne0 - implicit none - real(kind(1.d0)) :: ratio - fne0 = ratio - end subroutine set_itv_154 - - !--------------------------------- - - subroutine init_itv_155 - !!
    • (155) pfusife : IFE input fusion power (MW) (ifedrv=3 only) - use numerics, only: lablxc, boundl, boundu - implicit none - lablxc(155) = 'pfusife ' - boundl(155) = 5.000d2 - boundu(155) = 3.000d3 - end subroutine init_itv_155 - - real(kind(1.d0)) function itv_155() - use ife_variables, only: pfusife - implicit none - itv_155 = pfusife - end function itv_155 - - subroutine set_itv_155(ratio) - use ife_variables, only: pfusife - implicit none - real(kind(1.d0)) :: ratio - pfusife = ratio - end subroutine set_itv_155 - - !--------------------------------- - - subroutine init_itv_156 - !!
    • (156) rrin : Input IFE repetition rate (Hz) (ifedrv=3 only) - use numerics, only: lablxc, boundl, boundu - implicit none - lablxc(156) = 'rrin ' - boundl(156) = 1.000d0 - boundu(156) = 1.000d1 - end subroutine init_itv_156 - - real(kind(1.d0)) function itv_156() - use ife_variables, only: rrin - implicit none - itv_156 = rrin - end function itv_156 - - subroutine set_itv_156(ratio) - use ife_variables, only: rrin - implicit none - real(kind(1.d0)) :: ratio - rrin = ratio - end subroutine set_itv_156 - - !--------------------------------- - - subroutine init_itv_157 - !!
    • (157) fvs_cs_pf_total_ramp : F-value for available to required start up flux (con. 51) - use numerics, only: lablxc, boundl, boundu - implicit none - lablxc(157) = 'fvs_cs_pf_total_ramp ' - boundl(157) = 1.00d-3 - boundu(157) = 1.000d1 - end subroutine init_itv_157 - - real(kind(1.d0)) function itv_157() - use pfcoil_variables, only: fvs_cs_pf_total_ramp - implicit none - itv_157 = fvs_cs_pf_total_ramp - end function itv_157 - - subroutine set_itv_157(ratio) - use pfcoil_variables, only: fvs_cs_pf_total_ramp - implicit none - real(kind(1.d0)) :: ratio - fvs_cs_pf_total_ramp = ratio - end subroutine set_itv_157 - - !--------------------------------- - - subroutine init_itv_158 - !!
    • (158) croco_thick : Thickness of CroCo copper tube (m) - use numerics, only: lablxc, boundl, boundu - implicit none - lablxc(158) = 'croco_thick ' - boundl(158) = 1.0d-3 - boundu(158) = 1.0d-1 - end subroutine init_itv_158 - - real(kind(1.d0)) function itv_158() - use rebco_variables, only: croco_thick - implicit none - itv_158 = croco_thick - end function itv_158 - - subroutine set_itv_158(ratio) - use rebco_variables, only: croco_thick - implicit none - real(kind(1.d0)) :: ratio - croco_thick = ratio - end subroutine set_itv_158 - - !--------------------------------- - - subroutine init_itv_159 - !!
    • (159) ftoroidalgap : F-value for toroidalgap > tftort constraint (con. 82) - use numerics, only: lablxc, boundl, boundu - lablxc(159) = 'ftoroidalgap ' - boundl(159) = 1.0D-4 - boundu(159) = 1.0D0 - end subroutine init_itv_159 - - real(kind(1.d0)) function itv_159() - use tfcoil_variables, only: ftoroidalgap - implicit none - itv_159 = ftoroidalgap - end function itv_159 - - subroutine set_itv_159(ratio) - use tfcoil_variables, only: ftoroidalgap - implicit none - real(kind(1.d0)) :: ratio - ftoroidalgap = ratio - end subroutine set_itv_159 - - !--------------------------------- - - subroutine init_itv_160 - !!
    • (160) f_avspace (f-value for equation 83) - use numerics, only: lablxc, boundu, boundl - lablxc(160) = 'f_avspace ' - boundl(160) = 0.010D0 - boundu(160) = 1.000D0 - end subroutine init_itv_160 - - real(kind(1.d0)) function itv_160() - use build_variables, only: f_avspace - implicit none - itv_160 = f_avspace - end function itv_160 - - subroutine set_itv_160(ratio) - use build_variables, only: f_avspace - implicit none - real(kind(1.d0)) :: ratio - f_avspace = ratio - end subroutine set_itv_160 - - !--------------------------------- - - subroutine init_itv_161 - !!
    • (161) fbeta_min (f-value for equation 84) - use constraint_variables, only: fbeta_min - use numerics, only: lablxc, boundl, boundu - implicit none - lablxc(161) = 'fbeta_min ' - boundl(161) = 0.010D0 - boundu(161) = 1.000D0 - end subroutine init_itv_161 - - real(kind(1.d0)) function itv_161() - use constraint_variables, only: fbeta_min - implicit none - itv_161 = fbeta_min - end function itv_161 - - subroutine set_itv_161(ratio) - use constraint_variables, only: fbeta_min - real(kind(1.d0)) :: ratio - fbeta_min = ratio - end subroutine set_itv_161 - - !--------------------------------- - - subroutine init_itv_162 - !!
    • (162) r_cp_top : Top outer radius of the centropost (ST only) (m) - use numerics, only: lablxc, boundl, boundu - implicit none - lablxc(162) = 'r_cp_top ' - boundl(162) = 0.0010D0 - boundu(162) = 10.000D0 - end subroutine init_itv_162 - - real(kind(1.d0)) function itv_162() - use build_variables, only: r_cp_top - implicit none - itv_162 = r_cp_top - end function itv_162 - - subroutine set_itv_162(ratio) - use build_variables, only: r_cp_top - real(kind(1.d0)) :: ratio - r_cp_top = ratio - end subroutine set_itv_162 - - !--------------------------------- - - subroutine init_itv_163 - !!
    • (163)f_t_turn_tf : Top outer radius of the centropost (ST only) (m) - use numerics, only: lablxc, boundl, boundu - implicit none - lablxc(163) = 'f_t_turn_tf ' - boundl(163) = 0.0010D0 - boundu(163) = 1000.0D0 - end subroutine init_itv_163 - - real(kind(1.d0)) function itv_163() - use tfcoil_variables, only: f_t_turn_tf - implicit none - itv_163 = f_t_turn_tf - end function itv_163 - - subroutine set_itv_163(ratio) - use tfcoil_variables, only: f_t_turn_tf - real(kind(1.d0)) :: ratio - f_t_turn_tf = ratio - end subroutine set_itv_163 - - !--------------------------------- - - subroutine init_itv_164 - !!
    • (164) f-value for maximum cryogenic plant power - use numerics, only: lablxc, boundl, boundu - implicit none - lablxc(164) = 'f_crypmw ' - boundl(164) = 0.001D0 - boundu(164) = 1.000D0 - end subroutine init_itv_164 - - real(kind(1.d0)) function itv_164() - use heat_transport_variables, only: f_crypmw - implicit none - itv_164 = f_crypmw - end function itv_164 - - subroutine set_itv_164(ratio) - use heat_transport_variables, only: f_crypmw - implicit none - real(kind(1.d0)) :: ratio - f_crypmw = ratio - end subroutine set_itv_164 - - !--------------------------------- - - subroutine init_itv_165 - !!
    • (165) f-value for maximum TF coil strain - use numerics, only: lablxc, boundl, boundu - implicit none - lablxc(165) = 'fstr_wp ' - boundl(165) = 1.0d-9 - boundu(165) = 1.0d0 - end subroutine init_itv_165 - - real(kind(1.d0)) function itv_165() - use constraint_variables, only: fstr_wp - implicit none - itv_165 = fstr_wp - end function itv_165 - - subroutine set_itv_165(ratio) - use constraint_variables, only: fstr_wp - implicit none - real(kind(1.d0)) :: ratio - fstr_wp = ratio - end subroutine set_itv_165 - - !--------------------------------- - - subroutine init_itv_166 - !!
    • (166) f_copperaoh_m2 : CS coil current / copper area < Maximum value - !! (f-value for equation 89) - use numerics, only: lablxc, boundl, boundu - implicit none - lablxc(166) = 'f_copperaoh_m2' - boundl(166) = 0.001D0 - boundu(166) = 1.000D0 - end subroutine init_itv_166 - - real(kind(1.d0)) function itv_166() - use rebco_variables, only: f_copperaoh_m2 - implicit none - itv_166 = f_copperaoh_m2 - end function itv_166 - - subroutine set_itv_166(ratio) - use rebco_variables, only: f_copperaoh_m2 - implicit none - real(kind(1.d0)) :: ratio - f_copperaoh_m2 = ratio - end subroutine set_itv_166 - - !--------------------------------- - - subroutine init_itv_167 - !!
    • (167) fncycle : f-value for minimum CS coil stress load cycles - use numerics, only: lablxc, boundl, boundu - implicit none - lablxc(167) = 'fncycle ' - boundl(167) = 1.0d-8 - boundu(167) = 1.0d0 - end subroutine init_itv_167 - - real(kind(1.d0)) function itv_167() - use constraint_variables, only: fncycle - implicit none - itv_167 = fncycle - end function itv_167 - - subroutine set_itv_167(ratio) - use constraint_variables, only: fncycle - implicit none - real(kind(1.d0)) :: ratio - fncycle = ratio - end subroutine set_itv_167 - - !--------------------------------- - - subroutine init_itv_168 - !!
    • (168) fecrh_ignition (f-value for equation 91) - use numerics, only: lablxc, boundl, boundu - implicit none - lablxc(168) = 'fecrh_ignition ' - boundl(168) = 0.010D0 - boundu(168) = 2.000D0 - end subroutine init_itv_168 - - real(kind(1.d0)) function itv_168() - use constraint_variables, only: fecrh_ignition - implicit none - itv_168 = fecrh_ignition - end function itv_168 - - subroutine set_itv_168(ratio) - use constraint_variables, only: fecrh_ignition - implicit none - real(kind(1.d0)) :: ratio - fecrh_ignition = ratio - end subroutine set_itv_168 - - !--------------------------------- - - subroutine init_itv_169 - !!
    • (169) te0_ecrh_achievable (iteration parameter for equation 91) - use numerics, only: lablxc, boundl, boundu - implicit none - lablxc(169) = 'te0_ecrh_achievable' - boundl(169) = 1.0d0 - boundu(169) = 1.0d3 - end subroutine init_itv_169 - - real(kind(1.d0)) function itv_169() - use stellarator_variables, only: te0_ecrh_achievable - implicit none - itv_169 = te0_ecrh_achievable - end function itv_169 - - subroutine set_itv_169(ratio) - use stellarator_variables, only: te0_ecrh_achievable - implicit none - real(kind(1.d0)) :: ratio - te0_ecrh_achievable = ratio - end subroutine set_itv_169 - - subroutine init_itv_170 - !!
    • (170) beta_div : field line angle wrt divertor target plate (degrees) - use numerics, only: lablxc, boundl, boundu - implicit none - lablxc(170) = 'beta_div ' - boundl(170) = 0.49 - boundu(170) = 5.01 - end subroutine init_itv_170 - - real(kind(1.d0)) function itv_170() - use divertor_variables, only: beta_div - implicit none - itv_170 = beta_div - end function itv_170 - - subroutine set_itv_170(ratio) - use divertor_variables, only: beta_div - implicit none - real(kind(1.d0)) :: ratio - beta_div = ratio - end subroutine set_itv_170 - - subroutine init_itv_171 - !!
    • (171) casths_fraction: TF side case fraction of toroidal thickness - use numerics, only: lablxc, boundl, boundu - implicit none - lablxc(171) = 'casths_fraction ' - boundl(171) = 0.01 - boundu(171) = 0.99 - end subroutine init_itv_171 - - real(kind(1.d0)) function itv_171() - use tfcoil_variables, only: casths_fraction - implicit none - itv_171 = casths_fraction - end function itv_171 - - subroutine set_itv_171(ratio) - use tfcoil_variables, only: casths_fraction - implicit none - real(kind(1.d0)) :: ratio - casths_fraction = ratio - end subroutine set_itv_171 - - !--------------------------------- - - subroutine init_itv_172 - !!
    • (172) casths: TF side case thickness [m] - use numerics, only: lablxc, boundl, boundu - implicit none - lablxc(172) = 'casths ' - boundl(172) = 0.001 - boundu(172) = 1.0 - end subroutine init_itv_172 - - real(kind(1.d0)) function itv_172() - use tfcoil_variables, only: casths - implicit none - itv_172 = casths - end function itv_172 - - subroutine set_itv_172(ratio) - use tfcoil_variables, only: casths - implicit none - real(kind(1.d0)) :: ratio - casths = ratio - end subroutine set_itv_172 - - subroutine init_itv_173 - !!
    • (173) f_tritium : Tritium fraction in fuel - use numerics, only: lablxc, boundl, boundu - implicit none - lablxc(173) = 'f_tritium ' - boundl(173) = 0.000 - boundu(173) = 1.000 - end subroutine init_itv_173 - - real(kind(1.d0)) function itv_173() - use physics_variables, only: f_tritium - itv_173 = f_tritium - end function itv_173 - - subroutine set_itv_173(ratio) - use physics_variables, only: f_tritium - real(kind(1.d0)) :: ratio - f_tritium = ratio - end subroutine set_itv_173 - - subroutine init_itv_174 - !!
    • (174) triang : Plasma triangularity - use numerics, only: lablxc, boundl, boundu - implicit none - lablxc(174) = 'triang ' - boundl(174) = 0.00 - boundu(174) = 1.00 - end subroutine init_itv_174 - - real(kind(1.d0)) function itv_174() - use physics_variables, only: triang - itv_174 = triang - end function itv_174 - - subroutine set_itv_174(ratio) - use physics_variables, only: triang - real(kind(1.d0)) :: ratio - triang = ratio - end subroutine set_itv_174 - - !--------------------------------- - - subroutine init_itv_175 - !!
    • (175) kappa : Plasma elongation - use numerics, only: lablxc, boundl, boundu - implicit none - lablxc(175) = 'kappa ' - boundl(175) = 0.00 - boundu(175) = 10.00 - end subroutine init_itv_175 - - real(kind(1.d0)) function itv_175() - use physics_variables, only: kappa - itv_175 = kappa - end function itv_175 - - subroutine set_itv_175(ratio) - use physics_variables, only: kappa - real(kind(1.d0)) :: ratio - kappa = ratio - end subroutine set_itv_175 - - !--------------------------------- - ! DUMMY variables below here - !--------------------------------- - - subroutine init_itv_176 - !!
    • (174) DUMMY : Description - use numerics, only: lablxc, boundl, boundu - implicit none - lablxc(176) = 'DUMMY ' - boundl(176) = 1.0d-99 - boundu(176) = 1.0d99 - end subroutine init_itv_176 - - real(kind(1.d0)) function itv_176() - implicit none - itv_176 = DUMMY - end function itv_176 - - subroutine set_itv_176(ratio) - implicit none - real(kind(1.d0)) :: ratio - DUMMY = ratio - end subroutine set_itv_176 - - !--------------------------------- - - subroutine init_itv_177 - !!
    • (175) DUMMY : Description - use numerics, only: lablxc, boundl, boundu - implicit none - lablxc(177) = 'DUMMY ' - boundl(177) = 1.0d-99 - boundu(177) = 1.0d99 - end subroutine init_itv_177 - - real(kind(1.d0)) function itv_177() - implicit none - itv_177 = DUMMY - end function itv_177 - - subroutine set_itv_177(ratio) - implicit none - real(kind(1.d0)) :: ratio - DUMMY = ratio - end subroutine set_itv_177 -end module define_iteration_variables -! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! From 81c9a017e766c82c4b8afc3a8bb6ac1bc64e31fb Mon Sep 17 00:00:00 2001 From: Timothy Nunn Date: Wed, 12 Mar 2025 10:11:03 +0000 Subject: [PATCH 5/6] Correct warning message in Fotran-Python string handler --- process/utilities/f2py_string_patch.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/process/utilities/f2py_string_patch.py b/process/utilities/f2py_string_patch.py index ed4b2b83ac..aa60cf4d08 100644 --- a/process/utilities/f2py_string_patch.py +++ b/process/utilities/f2py_string_patch.py @@ -43,12 +43,14 @@ def string_to_f2py_compatible( if string: if len(string) > target_size and except_length: raise RuntimeError( - f"String string of length {len(string)} is trying to initiate as {target} with length {target_size}" + f"String {string} of length {len(string)} is trying to initiate as {target} with length {target_size}" ) if len(string) > target_size: warnings.warn( - f"String string of length {len(string)} is trying to initiate as {target} with length \ - {target_size}. String string will be truncated!", + ( + f"String {string} of length {len(string)} is trying to initiate as {target} with length" + f"{target_size}. String string will be truncated!" + ), stacklevel=2, ) From ac5eca1fe39ef9a2f84a1f7acebd5af7d64d1473 Mon Sep 17 00:00:00 2001 From: Timothy Nunn Date: Wed, 12 Mar 2025 11:43:52 +0000 Subject: [PATCH 6/6] Comment and style updates --- process/iteration_variables.py | 25 ++++++++++++++----------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/process/iteration_variables.py b/process/iteration_variables.py index 8f7f8b0110..5d7f73f298 100644 --- a/process/iteration_variables.py +++ b/process/iteration_variables.py @@ -30,6 +30,8 @@ class IterationVariable: array_index: int | None = None """If `module.name` is an array, the iteration variable can only modify `array_index` of that array. + + NOTE: The indexes start at 0 (despite indexing Fortran arrays). """ @@ -51,7 +53,7 @@ class IterationVariable: 13: IterationVariable("dr_tf_inboard", fortran.build_variables, 0.1, 5.0), 14: IterationVariable("fwalld", fortran.constraint_variables, 0.001, 1.0), 15: IterationVariable("fvs", fortran.constraint_variables, 0.001, 10.000), - 16: IterationVariable("dr_cs", fortran.build_variables, 0.010, 10.00), + 16: IterationVariable("dr_cs", fortran.build_variables, 0.01, 10.00), 17: IterationVariable("t_between_pulse", fortran.times_variables, 0.1, 1.0e8), 18: IterationVariable("q95", fortran.physics_variables, 2.0, 50.00), 19: IterationVariable("beam_energy", fortran.current_drive_variables, 1.0, 1.0e6), @@ -61,7 +63,7 @@ class IterationVariable: 25: IterationVariable("fpnetel", fortran.constraint_variables, 0.001, 1.0), 26: IterationVariable("ffuspow", fortran.constraint_variables, 0.001, 1.0), 27: IterationVariable("fhldiv", fortran.constraint_variables, 0.001, 1.0), - 28: IterationVariable("fradpwr", fortran.constraint_variables, 0.001, 0.990), + 28: IterationVariable("fradpwr", fortran.constraint_variables, 0.001, 0.99), 29: IterationVariable("dr_bore", fortran.build_variables, 0.1, 10.00), 30: IterationVariable("fmva", fortran.constraint_variables, 0.010, 1.0), 31: IterationVariable("gapomin", fortran.build_variables, 0.001, 1.0e1), @@ -88,7 +90,7 @@ class IterationVariable: 53: IterationVariable("fjprot", fortran.constraint_variables, 0.001, 1.0), 54: IterationVariable("ftmargtf", fortran.constraint_variables, 0.001, 1.0), 56: IterationVariable("tdmptf", fortran.tfcoil_variables, 0.1, 100.0), - 57: IterationVariable("thkcas", fortran.tfcoil_variables, 0.050, 1.0), + 57: IterationVariable("thkcas", fortran.tfcoil_variables, 0.05, 1.0), 58: IterationVariable("thwcndut", fortran.tfcoil_variables, 0.001, 0.1), 59: IterationVariable("fcutfsu", fortran.tfcoil_variables, 0.001, 1.0), 60: IterationVariable("cpttf", fortran.tfcoil_variables, 0.001, 4.0e4), @@ -131,7 +133,9 @@ class IterationVariable: 95: IterationVariable("fptfnuc", fortran.constraint_variables, 0.001, 1.0), 96: IterationVariable("fvvhe", fortran.constraint_variables, 0.001, 1.0), 97: IterationVariable("fpsepr", fortran.constraint_variables, 0.001, 1.0), - 98: IterationVariable("li6enrich", fortran.fwbs_variables, 10.00, 100.0), + 98: IterationVariable( + "f_blkt_li6_enrichment", fortran.fwbs_variables, 10.00, 100.0 + ), 103: IterationVariable("fl_h_threshold", fortran.constraint_variables, 0.001, 1.0), 104: IterationVariable("fcwr", fortran.constraint_variables, 0.001, 1.0), 105: IterationVariable("fnbshinef", fortran.constraint_variables, 0.001, 1.0), @@ -139,7 +143,7 @@ class IterationVariable: 107: IterationVariable("favail", fortran.cost_variables, 0.001, 1.0), 108: IterationVariable("breeder_f", fortran.fwbs_variables, 0.060, 1.0), 109: IterationVariable( - "f_nd_alpha_electron", fortran.physics_variables, 0.050, 0.150 + "f_nd_alpha_electron", fortran.physics_variables, 0.05, 0.15 ), 110: IterationVariable( "falpha_energy_confinement", fortran.constraint_variables, 0.001, 1.0 @@ -336,7 +340,8 @@ def load_iteration_variables(): raise ProcessValueError(error_msg) # if an array index is specified, iteration_variable_value is currently - # the array and not the value of interest + # the whole array and not just the element we are interested in. Lets extract + # the correct element if iteration_variable.array_index is not None: iteration_variable_value = iteration_variable_value[ iteration_variable.array_index @@ -356,7 +361,7 @@ def load_iteration_variables(): warn( ( "The sweep variable is also an iteration variable and will be " - "overwritten by the optiomiser" + "overwritten by the optimiser" ), stacklevel=3, ) @@ -369,11 +374,9 @@ def load_iteration_variables(): ) fortran.numerics.scale[i] = 1.0 / iteration_variable_value - fortran.numerics.scafc[i] = iteration_variable_value + fortran.numerics.scafc[i] = 1.0 / fortran.numerics.scale[i] - # xcm = xcm / scale which is equivalent to 1.0 - # because xcm was previously set at x and scale = 1/x - fortran.numerics.xcm[i] = 1.0 + fortran.numerics.xcm[i] = iteration_variable_value * fortran.numerics.scale[i] def set_scaled_iteration_variable(xc, nn: int):