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

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions examples/single_model_evaluation.ex.py
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,7 @@ def print_values():
process.data_structure.impurity_radiation_module.f_nd_impurity_electron_array[13] = (
5.0e-5
)
single_run.models.physics.physics()
single_run.models.physics.run()
print_values()

# %% [markdown]
Expand All @@ -97,7 +97,7 @@ def run_impurities(w_imp_fracs):
process.data_structure.impurity_radiation_module.f_nd_impurity_electron_array[
13
] = imp_frac
single_run.models.physics.physics()
single_run.models.physics.run()

# Evaluate constraint equation 15 (L-H threshold constraint)
con15_value = ConstraintManager.evaluate_constraint(15).normalised_residual
Expand Down
51 changes: 18 additions & 33 deletions process/core/caller.py
Original file line number Diff line number Diff line change
Expand Up @@ -259,43 +259,43 @@ def _call_models_once(self, xc: np.ndarray):
# Perform the various function calls
# Stellarator caller
if data_structure.stellarator_variables.istell != 0:
self.models.stellarator.run(output=False)
self.models.stellarator.run()
# TODO Is this return safe?
return

# Inertial Fusion Energy calls
if data_structure.ife_variables.ife != 0:
self.models.ife.run(output=False)
self.models.ife.run()
return

# Tokamak calls
# Plasma geometry model
self.models.plasma_geom.plasma_geometry()
self.models.plasma_geom.run()

# Machine Build Model
# Radial build
self.models.build.run()

self.models.physics.physics()
self.models.physics.run()

# Toroidal field coil model

# Toroidal field coil resistive model
if data_structure.tfcoil_variables.i_tf_sup == 0:
self.models.copper_tf_coil.run(output=False)
self.models.copper_tf_coil.run()

# Toroidal field coil superconductor model
if data_structure.tfcoil_variables.i_tf_sup == 1:
self.models.sctfcoil.run(output=False)
self.models.sctfcoil.run()

if data_structure.tfcoil_variables.i_tf_sup == 2:
self.models.aluminium_tf_coil.run(output=False)
self.models.aluminium_tf_coil.run()

# Poloidal field and central solenoid model
self.models.pfcoil.run()

# Pulsed reactor model
self.models.pulse.run(output=False)
self.models.pulse.run()

# First wall model
self.models.fw.run()
Expand All @@ -316,52 +316,37 @@ def _call_models_once(self, xc: np.ndarray):
"""
if data_structure.fwbs_variables.i_blanket_type == 1:
# CCFE HCPB model
self.models.ccfe_hcpb.run(output=False)
self.models.ccfe_hcpb.run()

elif data_structure.fwbs_variables.i_blanket_type == 5:
# DCLL model
self.models.dcll.run(output=False)
self.models.dcll.run()

self.models.divertor.run(output=False)
self.models.divertor.run()

self.models.cryostat.run()

# Structure Model
self.models.structure.run(output=False)
self.models.structure.run()

# Tight aspect ratio machine model
if (
data_structure.physics_variables.itart == 1
and data_structure.tfcoil_variables.i_tf_sup != 1
):
self.models.tfcoil.cntrpst()
self.models.tfcoil.run()

# Toroidal field coil power model
self.models.power.tfpwr(output=False)

# Poloidal field coil power model
self.models.power.pfpwr(output=False)

# Plant heat transport part 1
self.models.power.component_thermal_powers()

# Cryoplant loads
self.models.power.calculate_cryo_loads()
# Power model
self.models.power.run()

# Vacuum model
self.models.vacuum.run(output=False)
self.models.vacuum.run()

# Buildings model
self.models.buildings.run(output=False)

# Plant AC power requirements
self.models.power.acpow(output=False)

# Plant heat transport pt 2 & 3
self.models.power.plant_electric_production()
self.models.buildings.run()

# Availability model
self.models.availability.run(output=False)
self.models.availability.run()

# Water usage in secondary cooling system
self.models.water_use.run()
Expand Down
84 changes: 26 additions & 58 deletions process/core/output.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,12 +22,12 @@ def write(models, _outfile):

# Call stellarator output routine instead if relevant
if data_structure.stellarator_variables.istell != 0:
models.stellarator.run(output=True)
models.stellarator.output()
return

# Call IFE output routine instead if relevant
if data_structure.ife_variables.ife != 0:
models.ife.run(output=True)
models.ife.output()
return

# Costs model
Expand All @@ -37,70 +37,56 @@ def write(models, _outfile):
# 0 | 1990 costs model
# 1 | 2015 Kovari model
# 2 | Custom model
models.costs.run()
models.costs.output()

# Availability model
models.availability.run(output=True)
models.availability.output()

# Writing the output from physics.f90 into OUT.DAT + MFILE.DAT
models.physics.calculate_effective_charge_ionisation_profiles()
models.physics.outplas()
# Physics model
models.physics.output()

# Detailed physics, currently only done at final point as values are not used
# by any other functions
models.physics_detailed.run()
models.physics_detailed.output_detailed_physics()
models.physics_detailed.output()

# TODO what is this? Not in caller.f90?
models.current_drive.output_current_drive()
# TODO what is this? Not in caller.py?
models.current_drive.output()

# Pulsed reactor model
models.pulse.run(output=True)
models.physics.outtim()
models.pulse.output()

models.divertor.run(output=True)
models.divertor.output()

# Machine Build Model
# Radial build
models.build.calculate_radial_build(output=True)

# Vertical build
models.build.calculate_vertical_build(output=True)
models.build.output()

# Cryostat build
models.cryostat.cryostat_output()
models.cryostat.output()

# Toroidal field coil copper model
if data_structure.tfcoil_variables.i_tf_sup == 0:
models.copper_tf_coil.run(output=True)
models.copper_tf_coil.output()

# Toroidal field coil superconductor model
if data_structure.tfcoil_variables.i_tf_sup == 1:
models.sctfcoil.run(output=True)
models.sctfcoil.output_tf_superconductor_info()
models.sctfcoil.output()

# Toroidal field coil aluminium model
if data_structure.tfcoil_variables.i_tf_sup == 2:
models.aluminium_tf_coil.run(output=True)
models.aluminium_tf_coil.output()

# Tight aspect ratio machine model
if (
data_structure.physics_variables.itart == 1
and data_structure.tfcoil_variables.i_tf_sup != 1
):
models.tfcoil.iprint = 1
models.tfcoil.cntrpst()
models.tfcoil.iprint = 0
models.tfcoil.output()

# Poloidal field coil model
models.pfcoil.output()

# Structure Model
models.structure.run(output=True)

# Poloidal field coil inductance calculation
models.pfcoil.output_induct()
models.structure.output()

# Blanket model
# Blanket switch values
Expand All @@ -112,48 +98,30 @@ def write(models, _outfile):
# 4 | KIT HCLL model
# 5 | DCLL model

models.shield.output_shld_areas_and_volumes()
models.vacuum_vessel.output_vv_areas_and_volumes()
models.shield.output()
models.vacuum_vessel.output()

# First wall geometry
models.fw.output_fw_geometry()

# First wall surface loads
models.fw.output_fw_surface_loads()

# First wall pumping
models.fw.output_fw_pumping()
models.fw.output()

if data_structure.fwbs_variables.i_blanket_type == 1:
# CCFE HCPB model
models.ccfe_hcpb.run(output=True)
models.ccfe_hcpb.output()

elif data_structure.fwbs_variables.i_blanket_type == 5:
# DCLL model
models.dcll.run(output=True)
models.dcll.output()

# FISPACT and LOCA model (not used)- removed

# Toroidal field coil power model
models.power.tfpwr(output=True)

# Poloidal field coil power model !
models.power.pfpwr(output=True)
# Power model
models.power.output()

# Vacuum model
models.vacuum.run(output=True)
models.vacuum.output()

# Buildings model
models.buildings.run(output=True)

# Plant AC power requirements
models.power.acpow(output=True)

# Plant heat transport pt 2 & 3
models.power.output_cryogenics()
models.power.output_plant_thermal_powers()
models.power.output_plant_electric_powers()
models.power.output_power_profiles_over_time()
models.buildings.output()

# Water usage in secondary cooling system
models.water_use.output()
Expand Down
6 changes: 5 additions & 1 deletion process/models/availability.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
from process.core import constants
from process.core import process_output as po
from process.core.exceptions import ProcessValueError
from process.core.model import Model
from process.data_structure import constraint_variables as ctv
from process.data_structure import cost_variables as cv
from process.data_structure import divertor_variables as dv
Expand Down Expand Up @@ -35,7 +36,7 @@
}


class Availability:
class Availability(Model):
"""Module containing plant availability routines


Expand All @@ -46,6 +47,9 @@ class Availability:
def __init__(self):
self.outfile = constants.NOUT # output file unit

def output(self):
self.run(output=True)

def run(self, output: bool = False):
"""Run appropriate availability model

Expand Down
9 changes: 8 additions & 1 deletion process/models/blankets/blanket_library.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
from process.core import process_output as po
from process.core.coolprop_interface import FluidProperties
from process.core.exceptions import ProcessValueError
from process.core.model import Model
from process.data_structure import (
blanket_library,
build_variables,
Expand Down Expand Up @@ -36,12 +37,18 @@
# FCI Flow Channel Insert


class BlanketLibrary:
class BlanketLibrary(Model):
def __init__(self, fw):
self.outfile = constants.NOUT

self.fw = fw

def output(self):
"""This model doesn't have any output"""

def run(self):
"""This model doesn't need to be run"""

def component_volumes(self):
"""Calculate the blanket, shield, vacuum vessel and cryostat volumes

Expand Down
7 changes: 5 additions & 2 deletions process/models/blankets/dcll.py
Original file line number Diff line number Diff line change
Expand Up @@ -86,10 +86,13 @@ class DCLL(InboardBlanket, OutboardBlanket):
Design 167, 112380


Note: request for when CCFE Bluemira nutronics work is added: output maximum values, as well as average values, for wall neutronics calculation if possible.
Note: request for when CCFE Bluemira neutronics work is added: output maximum values, as well as average values, for wall neutronics calculation if possible.
"""

def run(self, output: bool):
def output(self):
self.run(output=True)

def run(self, output: bool = False):
self.component_volumes()
dia_blkt_channel = self.pipe_hydraulic_diameter(i_channel_shape=1)
fwbs_variables.radius_blkt_channel = dia_blkt_channel / 2
Expand Down
5 changes: 4 additions & 1 deletion process/models/blankets/hcpb.py
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,10 @@ class CCFE_HCPB(OutboardBlanket, InboardBlanket):
doi: https://doi.org/10.1016/j.fusengdes.2016.01.007.
"""

def run(self, output: bool):
def output(self):
self.run(output=True)

def run(self, output: bool = False):
# Coolant type
fwbs_variables.i_blkt_coolant_type = 1
# Note that the first wall coolant is now input separately.
Expand Down
Loading
Loading