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
2 changes: 1 addition & 1 deletion process/core/caller.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@
from process.models.tfcoil.superconducting import SuperconductingTFTurnType

if TYPE_CHECKING:
from process.core.model import DataStructure
from process.core.data_structure.base import DataStructure
from process.main import Models

logger = logging.getLogger(__name__)
Expand Down
1 change: 1 addition & 0 deletions process/core/data_structure/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
"""Contains classes related to the PROCESS data structure."""
92 changes: 92 additions & 0 deletions process/core/data_structure/base.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,92 @@
"""The PROCESS data structure dataclass."""

from dataclasses import dataclass, fields

from process.data_structure.blanket_variables import BlanketData
from process.data_structure.build_variables import BuildData
from process.data_structure.buildings_variables import BuildingsData
from process.data_structure.ccfe_hcpb_variables import CCFEHCPBData
from process.data_structure.constraint_variables import ConstraintData
from process.data_structure.cost_2015_variables import Cost2015Data
from process.data_structure.cost_variables import CostData
from process.data_structure.cs_fatigue_variables import CSFatigueData
from process.data_structure.current_drive_variables import CurrentDriveData
from process.data_structure.dcll_variables import DCLLData
from process.data_structure.divertor_variables import DivertorData
from process.data_structure.first_wall_variables import FirstWallData
from process.data_structure.fwbs_variables import FWBSData
from process.data_structure.global_variables import GlobalData
from process.data_structure.heat_transport_variables import HeatTransportData
from process.data_structure.ife_variables import IFEData
from process.data_structure.impurity_radiation_variables import ImpurityRadiationData
from process.data_structure.neoclassics_variables import NeoclassicsData
from process.data_structure.numerics import NumericsData
from process.data_structure.pf_power_variables import PFPowerData
from process.data_structure.pfcoil_variables import PFCoilData
from process.data_structure.physics_variables import PhysicsData
from process.data_structure.power_variables import PowerData
from process.data_structure.primary_pumping_variables import PrimaryPumpingData
from process.data_structure.pulse_variables import PulseData
from process.data_structure.rebco_variables import RebcoData
from process.data_structure.reinke_variables import ReinkeData
from process.data_structure.scan_variables import ScanData
from process.data_structure.stellarator_configuration import StellaratorConfigData
from process.data_structure.stellarator_variables import StellaratorData
from process.data_structure.structure_variables import StructureData
from process.data_structure.superconducting_tf_coil_variables import (
SuperconductingTFData,
)
from process.data_structure.tfcoil_variables import TFData
from process.data_structure.times_variables import TimesData
from process.data_structure.vacuum_variables import VacuumData
from process.data_structure.water_usage_variables import WaterUseData

initialise_later = object()


@dataclass(kw_only=True)
class DataStructure:
"""Dataclass holding the data structure"""

water_use: WaterUseData = initialise_later
costs_2015: Cost2015Data = initialise_later
cs_fatigue: CSFatigueData = initialise_later
vacuum: VacuumData = initialise_later
costs: CostData = initialise_later
first_wall: FirstWallData = initialise_later
fwbs: FWBSData = initialise_later
blanket: BlanketData = initialise_later
structure: StructureData = initialise_later
times: TimesData = initialise_later
reinke: ReinkeData = initialise_later
ccfe_hcpb: CCFEHCPBData = initialise_later
pulse: PulseData = initialise_later
build: BuildData = initialise_later
primary_pumping: PrimaryPumpingData = initialise_later
buildings: BuildingsData = initialise_later
constraints: ConstraintData = initialise_later
dcll: DCLLData = initialise_later
current_drive: CurrentDriveData = initialise_later
heat_transport: HeatTransportData = initialise_later
ife: IFEData = initialise_later
divertor: DivertorData = initialise_later
pf_coil: PFCoilData = initialise_later
power: PowerData = initialise_later
stellarator: StellaratorData = initialise_later
stellarator_config: StellaratorConfigData = initialise_later
pf_power: PFPowerData = initialise_later
neoclassics: NeoclassicsData = initialise_later
impurity_radiation: ImpurityRadiationData = initialise_later
physics: PhysicsData = initialise_later
rebco: RebcoData = initialise_later
tfcoil: TFData = initialise_later
superconducting_tfcoil: SuperconductingTFData = initialise_later
globals: GlobalData = initialise_later
scan: ScanData = initialise_later
numerics: NumericsData = initialise_later

def __post_init__(self):
"""Set up the data structure"""
for f in fields(self):
if getattr(self, f.name) is initialise_later:
setattr(self, f.name, f.type())
2 changes: 1 addition & 1 deletion process/core/init.py
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@

logger = logging.getLogger(__name__)
if TYPE_CHECKING:
from process.core.model import DataStructure
from process.core.data_structure.base import DataStructure


def init_process(data: DataStructure):
Expand Down
2 changes: 1 addition & 1 deletion process/core/input.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@
if TYPE_CHECKING:
from collections.abc import Callable

from process.core.model import DataStructure
from process.core.data_structure.base import DataStructure

NumberType = int | float
ValidInputTypes = NumberType | str
Expand Down
2 changes: 1 addition & 1 deletion process/core/io/mfile/base.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@

import numpy as np

from process.core.model import DataStructure
from process.core.data_structure.base import DataStructure
from process.core.solver import iteration_variables

logger = logging.getLogger(__name__)
Expand Down
2 changes: 1 addition & 1 deletion process/core/io/vary_run/config.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
import click
from numpy.random import default_rng

from process.core.data_structure.base import DataStructure
from process.core.io.in_dat import InDat
from process.core.io.mfile import MFile
from process.core.io.vary_run.tools import (
Expand All @@ -25,7 +26,6 @@
process_warnings,
set_variable_in_indat,
)
from process.core.model import DataStructure
from process.data_structure.numerics import SolverOutputCondition

logger = logging.getLogger(__name__)
Expand Down
94 changes: 5 additions & 89 deletions process/core/model.py
Original file line number Diff line number Diff line change
@@ -1,96 +1,12 @@
"""Module containing routines to set up the data structure and models"""

import abc
from dataclasses import dataclass, fields

from process.data_structure.blanket_variables import BlanketData
from process.data_structure.build_variables import BuildData
from process.data_structure.buildings_variables import BuildingsData
from process.data_structure.ccfe_hcpb_variables import CCFEHCPBData
from process.data_structure.constraint_variables import ConstraintData
from process.data_structure.cost_2015_variables import Cost2015Data
from process.data_structure.cost_variables import CostData
from process.data_structure.cs_fatigue_variables import CSFatigueData
from process.data_structure.current_drive_variables import CurrentDriveData
from process.data_structure.dcll_variables import DCLLData
from process.data_structure.divertor_variables import DivertorData
from process.data_structure.first_wall_variables import FirstWallData
from process.data_structure.fwbs_variables import FWBSData
from process.data_structure.global_variables import GlobalData
from process.data_structure.heat_transport_variables import HeatTransportData
from process.data_structure.ife_variables import IFEData
from process.data_structure.impurity_radiation_variables import ImpurityRadiationData
from process.data_structure.neoclassics_variables import NeoclassicsData
from process.data_structure.numerics import NumericsData
from process.data_structure.pf_power_variables import PFPowerData
from process.data_structure.pfcoil_variables import PFCoilData
from process.data_structure.physics_variables import PhysicsData
from process.data_structure.power_variables import PowerData
from process.data_structure.primary_pumping_variables import PrimaryPumpingData
from process.data_structure.pulse_variables import PulseData
from process.data_structure.rebco_variables import RebcoData
from process.data_structure.reinke_variables import ReinkeData
from process.data_structure.scan_variables import ScanData
from process.data_structure.stellarator_configuration import StellaratorConfigData
from process.data_structure.stellarator_variables import StellaratorData
from process.data_structure.structure_variables import StructureData
from process.data_structure.superconducting_tf_coil_variables import (
SuperconductingTFData,
)
from process.data_structure.tfcoil_variables import TFData
from process.data_structure.times_variables import TimesData
from process.data_structure.vacuum_variables import VacuumData
from process.data_structure.water_usage_variables import WaterUseData

initialise_later = object()
from __future__ import annotations

import abc
from typing import TYPE_CHECKING

@dataclass(kw_only=True)
class DataStructure:
"""Dataclass holding the data structure"""

water_use: WaterUseData = initialise_later
costs_2015: Cost2015Data = initialise_later
cs_fatigue: CSFatigueData = initialise_later
vacuum: VacuumData = initialise_later
costs: CostData = initialise_later
first_wall: FirstWallData = initialise_later
fwbs: FWBSData = initialise_later
blanket: BlanketData = initialise_later
structure: StructureData = initialise_later
times: TimesData = initialise_later
reinke: ReinkeData = initialise_later
ccfe_hcpb: CCFEHCPBData = initialise_later
pulse: PulseData = initialise_later
build: BuildData = initialise_later
primary_pumping: PrimaryPumpingData = initialise_later
buildings: BuildingsData = initialise_later
constraints: ConstraintData = initialise_later
dcll: DCLLData = initialise_later
current_drive: CurrentDriveData = initialise_later
heat_transport: HeatTransportData = initialise_later
ife: IFEData = initialise_later
divertor: DivertorData = initialise_later
pf_coil: PFCoilData = initialise_later
power: PowerData = initialise_later
stellarator: StellaratorData = initialise_later
stellarator_config: StellaratorConfigData = initialise_later
pf_power: PFPowerData = initialise_later
neoclassics: NeoclassicsData = initialise_later
impurity_radiation: ImpurityRadiationData = initialise_later
physics: PhysicsData = initialise_later
rebco: RebcoData = initialise_later
tfcoil: TFData = initialise_later
superconducting_tfcoil: SuperconductingTFData = initialise_later
globals: GlobalData = initialise_later
scan: ScanData = initialise_later
numerics: NumericsData = initialise_later

def __post_init__(self):
"""Set up the data structure"""
for f in fields(self):
if getattr(self, f.name) is initialise_later:
setattr(self, f.name, f.type())
if TYPE_CHECKING:
from process.core.data_structure.base import DataStructure


class Model(abc.ABC):
Expand Down
3 changes: 2 additions & 1 deletion process/core/scan.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,8 @@
from process.models.availability import AvailabilityModel

if TYPE_CHECKING:
from process.core.model import DataStructure, Model
from process.core.data_structure.base import DataStructure
from process.core.model import Model


logger = logging.getLogger(__name__)
Expand Down
8 changes: 6 additions & 2 deletions process/core/solver/constraints.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,8 @@
from tabulate import tabulate

from process.core import constants, process_output
from process.core.data_structure.base import DataStructure
from process.core.exceptions import ProcessError, ProcessValueError
from process.core.model import DataStructure
from process.data_structure.build_variables import TFCSRadialConfiguration
from process.data_structure.stellarator_variables import StellaratorModel
from process.models.physics.density_limit import DensityLimitModel
Expand Down Expand Up @@ -2112,7 +2112,11 @@ def constraints_output(data: DataStructure, solver_name: str):
f"(ineq_symbol_con{nums.icc[i]:03d})",
f"'{constraint.symbol}'",
),
("units", f"(ineq_units_con{nums.icc[i]:03d})", f"'{constraint.units}'"),
(
"units",
f"(ineq_units_con{nums.icc[i]:03d})",
f"'{constraint.units}'",
),
(
"physical bound",
f"(ineq_bound_con{nums.icc[i]:03d})",
Expand Down
2 changes: 1 addition & 1 deletion process/core/solver/evaluators.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
import numpy as np

from process.core.caller import Caller
from process.core.model import DataStructure
from process.core.data_structure.base import DataStructure

logger = logging.getLogger(__name__)

Expand Down
2 changes: 1 addition & 1 deletion process/core/solver/iteration_variables.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
from process.core.exceptions import ProcessValueError

if TYPE_CHECKING:
from process.core.model import DataStructure
from process.core.data_structure.base import DataStructure

logger = logging.getLogger(__name__)

Expand Down
2 changes: 1 addition & 1 deletion process/core/solver/objectives.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@

import numpy as np

from process.core.data_structure.base import DataStructure
from process.core.exceptions import ProcessValueError
from process.core.model import DataStructure
from process.data_structure.numerics import FiguresOfMerit
from process.models.availability import AvailabilityModel

Expand Down
2 changes: 1 addition & 1 deletion process/core/solver/solver.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,8 @@
from scipy.optimize import fsolve

from process.core import constants, process_output
from process.core.data_structure.base import DataStructure
from process.core.exceptions import ProcessValueError
from process.core.model import DataStructure
from process.core.solver.evaluators import Evaluators
from process.data_structure.numerics import SolverOutputCondition

Expand Down
3 changes: 2 additions & 1 deletion process/main.py
Original file line number Diff line number Diff line change
Expand Up @@ -39,13 +39,14 @@

import process # noqa: F401
from process.core import constants, init
from process.core.data_structure.base import DataStructure
from process.core.io import obsolete_vars as ov
from process.core.io.cli_tools import LazyGroup, help_opt, indat_opt
from process.core.io.mfile import MFile
from process.core.io.plot import plot_sankey_plotly, plot_summary
from process.core.io.vary_run import RunProcessConfig, vary_iteration_variables
from process.core.log import logging_model_handler, show_errors
from process.core.model import DataStructure, Model
from process.core.model import Model
from process.core.process_output import OutputFileManager, oheadr
from process.core.scan import Scan
from process.data_structure.blanket_variables import BlktModelTypes
Expand Down
3 changes: 2 additions & 1 deletion process/models/pfcoil.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,9 @@

from process.core import constants
from process.core import process_output as op
from process.core.data_structure.base import DataStructure
from process.core.exceptions import ProcessValueError
from process.core.model import DataStructure, Model
from process.core.model import Model
from process.data_structure.pfcoil_variables import (
N_PF_COILS_IN_GROUP_MAX,
N_PF_GROUPS_MAX,
Expand Down
2 changes: 1 addition & 1 deletion process/models/physics/fusion_reactions.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
from scipy import integrate

from process.core import constants
from process.core.model import DataStructure
from process.core.data_structure.base import DataStructure
from process.data_structure.physics_variables import PhysicsData
from process.models.physics.plasma_profiles import PlasmaProfile

Expand Down
1 change: 1 addition & 0 deletions process/models/physics/impurity_radiation.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
from scipy import integrate

from process.core import constants
from process.core.data_structure.base import DataStructure
from process.core.exceptions import ProcessError, ProcessValueError
from process.data_structure.impurity_radiation_variables import (
N_IMPURITIY_LOSS_FUNCTION_POINTS,
Expand Down
2 changes: 1 addition & 1 deletion process/models/physics/radiation_power.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
import numpy as np

import process.models.physics.impurity_radiation as impurity
from process.core.model import DataStructure
from process.core.data_structure.base import DataStructure
from process.models.physics.plasma_profiles import PlasmaProfile

logger = logging.getLogger(__name__)
Expand Down
2 changes: 1 addition & 1 deletion process/models/stellarator/build.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
"""Module containing stellarator build routines"""

from process.core import process_output as po
from process.core.model import DataStructure
from process.core.data_structure.base import DataStructure


def st_build(stellarator, f_output: bool, data: DataStructure):
Expand Down
2 changes: 1 addition & 1 deletion process/models/stellarator/coils/calculate.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@

import numpy as np

from process.core.model import DataStructure
from process.core.data_structure.base import DataStructure
from process.models.stellarator.coils import forces
from process.models.stellarator.coils.coils import (
bmax_from_awp,
Expand Down
Loading
Loading