Skip to content

static_env

StaticEnv

StaticEnv()

Bases: ABC, Generic[CableT, CircuitFromCableInputSchemaT, CircuitFromCableConstructionalInputSchemaT, CircuitFromCableIdInputSchemaT, CircuitFromCableSpecsInputSchemaT]

Class that builds a static environment.

Source code in cable_thermal_model/environment/static_env.py
62
63
64
65
66
67
68
69
70
71
def __init__(self) -> None:
    """Initialize the static environment with empty circuit and cable containers."""
    self.circuits: dict[str, CableCircuit] = {}
    self.circuit_cable_indices: dict[str, list[int]] = {}
    self.cables: dict[CableKey, PosCable[CableT]] = {}
    self.number_of_cables: int = 0

    self.crossing_cables: bool = False

    self.n_phases: int = 3

get_cables

get_cables() -> dict[CableKey, PosCable[CableT]]

Returns a dict of all cables in the static environment.

Source code in cable_thermal_model/environment/static_env.py
105
106
107
def get_cables(self) -> dict[CableKey, PosCable[CableT]]:
    """Returns a dict of all cables in the static environment."""
    return self.cables

get_number_of_cables

get_number_of_cables() -> int

Returns the total number of cables in the static environment.

Source code in cable_thermal_model/environment/static_env.py
109
110
111
def get_number_of_cables(self) -> int:
    """Returns the total number of cables in the static environment."""
    return self.number_of_cables

add_circuit_from_cable_id

add_circuit_from_cable_id(circuit_input: CircuitFromCableIdInputSchemaT) -> None

Adds the circuit to the environment based on a Cable Id.

Parameters:

Name Type Description Default
circuit_input CircuitFromCableIdInputSchemaT

CircuitFromCableIdInputSchemaT containing the input parameters for the circuit.

required
Source code in cable_thermal_model/environment/static_env.py
151
152
153
154
155
156
157
158
159
160
161
def add_circuit_from_cable_id(
    self,
    circuit_input: CircuitFromCableIdInputSchemaT,
) -> None:
    """Adds the circuit to the environment based on a Cable Id.

    Args:
        circuit_input: CircuitFromCableIdInputSchemaT containing the input parameters for the circuit.

    """
    self._add_circuit(circuit_input)

add_circuit_from_cable_specs

add_circuit_from_cable_specs(circuit_input: CircuitFromCableSpecsInputSchemaT) -> None

Adds the circuit to the environment based on Cable Specs.

Parameters:

Name Type Description Default
circuit_input CircuitFromCableSpecsInputSchemaT

CircuitFromCableSpecsInputSchemaT containing the input parameters for the circuit.

required
Source code in cable_thermal_model/environment/static_env.py
163
164
165
166
167
168
169
170
171
172
173
def add_circuit_from_cable_specs(
    self,
    circuit_input: CircuitFromCableSpecsInputSchemaT,
) -> None:
    """Adds the circuit to the environment based on Cable Specs.

    Args:
        circuit_input: CircuitFromCableSpecsInputSchemaT containing the input parameters for the circuit.

    """
    self._add_circuit(circuit_input)

add_circuit_from_cable_constructional_information

add_circuit_from_cable_constructional_information(circuit_input: CircuitFromCableConstructionalInputSchemaT) -> None

Adds the circuit to the environment based on a Cable Constructional Input Schema.

Parameters:

Name Type Description Default
circuit_input CircuitFromCableConstructionalInputSchemaT

CircuitFromCableConstructionalInputSchemaT containing the input parameters for the circuit.

required
Source code in cable_thermal_model/environment/static_env.py
175
176
177
178
179
180
181
182
183
184
185
def add_circuit_from_cable_constructional_information(
    self,
    circuit_input: CircuitFromCableConstructionalInputSchemaT,
) -> None:
    """Adds the circuit to the environment based on a Cable Constructional Input Schema.

    Args:
        circuit_input: CircuitFromCableConstructionalInputSchemaT containing the input parameters for the circuit.

    """
    self._add_circuit(circuit_input)

add_circuit_from_cable

add_circuit_from_cable(circuit_input: CircuitFromCableInputSchemaT) -> None

Add a cable circuit consisting of one or three cables to the environment based on a given cable instance.

Parameters:

Name Type Description Default
circuit_input CircuitFromCableInputSchemaT

CircuitFromCableInputSchemaT containing the input parameters for the circuit, including a cable instance.

required
Source code in cable_thermal_model/environment/static_env.py
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
def add_circuit_from_cable(
    self,
    circuit_input: CircuitFromCableInputSchemaT,
) -> None:
    """Add a cable circuit consisting of one or three cables to the environment based on a given cable instance.

    Args:
       circuit_input: CircuitFromCableInputSchemaT containing the input
           parameters for the circuit, including a cable instance.

    """
    # If circuit_type is not provided, determine it
    if circuit_input.circuit_type is None:
        circuit_input.circuit_type = self.get_circuit_type(cable=circuit_input.cable)
    else:
        # Warning if unrealistic combination is chosen by user
        self._warn_for_unrealistic_circuits(circuit_input.cable, circuit_input.circuit_type)

    if (
        circuit_input.cable.layer_metrics.pipe
        and circuit_input.cable.layer_metrics.pipe.trefoil_circuit_in_single_pipe
        and circuit_input.circuit_type
        not in [
            CircuitType.Trefoil,
        ]
    ):
        raise NotImplementedError(
            f"Three cables in one pipe not implemented for circuit type: {circuit_input.circuit_type}"
        )

    if circuit_input.circuit_name in self.circuits:
        raise ValueError(
            f"{circuit_input.circuit_name} already exists in environment. Circuit names should be unique."
        )

    # Add circuit to domain based on cable object
    self.circuits[circuit_input.circuit_name] = CircuitBuilder().from_cable(circuit_input=circuit_input)

    if circuit_input.multiple_configurations:
        if self.circuits[circuit_input.circuit_name].bonding is not BondingType.TwoSided:
            raise NotImplementedError(
                "Circuit is not bonded on two sides, no circulating currents are assumed. "
                f"Multiple configurations are not implemented for bonding type {circuit_input.bonding_type}."
            )
        self._validate_local_configuration(
            self.circuits[circuit_input.circuit_name],
            [self._generate_circuit_configuration(config) for config in circuit_input.multiple_configurations],
        )
        weighted_screen_impedance = self._generate_weighted_screen_impedance(
            local_screen_resistance=self.circuits[circuit_input.circuit_name]
            .cables[0]
            .cable._get_resistance_screen(Ts=ELECTRIC_RESISTANCE_REFERENCE_TEMPERATURE),
            multiple_configurations=circuit_input.multiple_configurations,
        )
        self.circuits[circuit_input.circuit_name].set_weighted_screen_impedance(weighted_screen_impedance)

    circuit_cables = self.circuits[circuit_input.circuit_name].cables
    self.circuit_cable_indices[circuit_input.circuit_name] = [
        self.number_of_cables + n for n, _ in enumerate(circuit_cables)
    ]
    self._add_cables_to_cable_dict(circuit_cables)

get_circuit_type staticmethod

get_circuit_type(cable: AbstractCable) -> CircuitType

Determines probable circuit type by number of conductors in the cable.

Source code in cable_thermal_model/environment/static_env.py
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
@staticmethod
def get_circuit_type(cable: AbstractCable) -> CircuitType:
    """Determines probable circuit type by number of conductors in the cable."""
    if isinstance(cable, CableTrefoilCircuitSinglePipe):
        return CircuitType.Trefoil
    if cable.conductor.number_of_conductors == CableConductorCount.Three:
        return CircuitType.Single
    if cable.conductor.number_of_conductors == CableConductorCount.One:
        warnings.warn(
            '"trefoil" is assumed to be the circuit_type, since the cable has a single conductor. '
            'If "linear" was meant as circuit_type, please specify.',
            stacklevel=2,
        )
        return CircuitType.Trefoil

    raise NotImplementedError(f"Number of conductors '{cable.conductor.number_of_conductors}' not supported.")

get_cable

get_cable(cable_key: CableKey) -> PosCable[CableT]

Gets the Cable-object corresponding to the cable_name from the environment.

Source code in cable_thermal_model/environment/static_env.py
403
404
405
def get_cable(self, cable_key: CableKey) -> PosCable[CableT]:
    """Gets the Cable-object corresponding to the cable_name from the environment."""
    return self.cables[cable_key]