pycanha_core.tmm — Core Thermal Model Classes#
These are the C++ base classes exposed via the compiled bindings. They are
the foundation of the pycanha.tmm wrappers.
Enumerations#
Nodes#
- class pycanha_core.tmm.Node(*args, **kwargs)#
Bases:
objectThermal node representing a lumped thermal element.
A node stores temperature, thermal capacity, heat loads, optical properties, area, and position. It can be standalone or associated with a Nodes container.
- property C#
Thermal capacity [J/K].
- property T#
Node temperature [K].
- __init__(self, node_num: int) None#
- __init__(self, other: pycanha_core.pycanha_core.tmm.Node) None
Overloaded function.
__init__(self, node_num: int) -> None
Create a standalone node with the given user node number.
__init__(self, other: pycanha_core.pycanha_core.tmm.Node) -> None
Copy constructor.
- property a#
Node area [m^2].
- property aph#
Solar absorptivity [-].
- property capacity#
Alias for C (thermal capacity) [J/K].
- property eps#
IR emissivity [-].
- property fx#
Node X coordinate [m].
- property fy#
Node Y coordinate [m].
- property fz#
Node Z coordinate [m].
- property literal_C#
Literal (formula) representation of thermal capacity.
- property node_num#
User-assigned node number.
- parent_pointer(self) pycanha_core.pycanha_core.tmm.Nodes#
Return the parent Nodes container, or None if standalone.
- property qa#
Albedo heat load [W].
- property qe#
Earth IR heat load [W].
- property qi#
Internal dissipation heat load [W].
- property qr#
Other (residual) heat load [W].
- property qs#
Solar heat load [W].
- property type#
Node type (DIFFUSIVE or BOUNDARY).
- class pycanha_core.tmm.Nodes(*args, **kwargs)#
Bases:
objectCollection of thermal nodes.
Stores nodes efficiently using dense vectors for temperature and capacity, and sparse vectors for heat loads and other attributes. Nodes are auto-sorted: diffusive nodes first, then boundary nodes.
- add_node(self, node: pycanha_core.pycanha_core.tmm.Node) None#
Add a node to the container.
- property estimated_number_of_nodes#
Hint for pre-allocating internal storage.
- get_C_value_pointer(self, node_num: int) int#
Memory address of the thermal capacity value for formula binding.
- get_T_value_pointer(self, node_num: int) int#
Memory address of the temperature value for formula binding.
- get_aph_value_pointer(self, node_num: int) int#
Memory address of the solar absorptivity value for formula binding.
- get_eps_value_pointer(self, node_num: int) int#
Memory address of the IR emissivity value for formula binding.
- get_fx_value_pointer(self, node_num: int) int#
Memory address of the X coordinate value for formula binding.
- get_fy_value_pointer(self, node_num: int) int#
Memory address of the Y coordinate value for formula binding.
- get_fz_value_pointer(self, node_num: int) int#
Memory address of the Z coordinate value for formula binding.
- get_idx_from_node_num(self, node_num: int) int | None#
Get internal index from user node number, or None if not found.
- get_node_from_idx(self, idx: int) pycanha_core.pycanha_core.tmm.Node#
Get a Node object by internal index.
- get_node_from_node_num(self, node_num: int) pycanha_core.pycanha_core.tmm.Node#
Get a Node object by user node number.
- get_node_num_from_idx(self, idx: int) int | None#
Get user node number from internal index, or None if invalid.
- get_qa_value_pointer(self, node_num: int) int#
Memory address of the albedo heat load value for formula binding.
- get_qe_value_pointer(self, node_num: int) int#
Memory address of the Earth IR heat load value for formula binding.
- get_qi_value_pointer(self, node_num: int) int#
Memory address of the internal heat load value for formula binding.
- get_qr_value_pointer(self, node_num: int) int#
Memory address of the residual heat load value for formula binding.
- get_qs_value_pointer(self, node_num: int) int#
Memory address of the solar heat load value for formula binding.
- get_type(self, node_num: int) pycanha_core.pycanha_core.tmm.NodeType#
Get the type of a node (DIFFUSIVE or BOUNDARY).
- property num_bound_nodes#
Number of boundary nodes.
- property num_diff_nodes#
Number of diffusive nodes.
- property num_nodes#
Total number of nodes.
- set_literal_C(self, node_num: int, literal: str) bool#
Set literal (formula) representation of thermal capacity.
- set_type(self, node_num: int, node_type: pycanha_core.pycanha_core.tmm.NodeType) bool#
Set the type of a node (DIFFUSIVE or BOUNDARY).
Couplings#
- class pycanha_core.tmm.Coupling(*args, **kwargs)#
Bases:
objectThermal coupling (conductance) between two nodes.
- __init__(self, node_1: int, node_2: int, value: float) None#
Create a coupling between two nodes with a conductance value.
- property node_1#
First node number.
- property node_2#
Second node number.
- property value#
Conductance value [W/K] or radiative exchange factor [m^2].
- class pycanha_core.tmm.ConductiveCouplings(*args, **kwargs)#
Bases:
objectContainer for conductive (linear) couplings GL.
Heat flow: Q = GL * (T1 - T2).
- __init__(self, nodes: pycanha_core.pycanha_core.tmm.Nodes) None#
Create conductive couplings linked to a Nodes container.
- add_coupling(self, node_num_1: int, node_num_2: int, value: float) None#
- add_coupling(self, coupling: pycanha_core.pycanha_core.tmm.Coupling) None
Overloaded function.
add_coupling(self, node_num_1: int, node_num_2: int, value: float) -> None
Add a conductive coupling [W/K] between two nodes.
add_coupling(self, coupling: pycanha_core.pycanha_core.tmm.Coupling) -> None
Add a conductive coupling from a Coupling object.
- class pycanha_core.tmm.RadiativeCouplings(*args, **kwargs)#
Bases:
objectContainer for radiative (T^4) couplings GR.
Heat flow: Q = GR * sigma * (T1^4 - T2^4).
- __init__(self, nodes: pycanha_core.pycanha_core.tmm.Nodes) None#
Create radiative couplings linked to a Nodes container.
- add_coupling(self, node_num_1: int, node_num_2: int, value: float) None#
- add_coupling(self, coupling: pycanha_core.pycanha_core.tmm.Coupling) None
Overloaded function.
add_coupling(self, node_num_1: int, node_num_2: int, value: float) -> None
Add a radiative coupling [m^2] between two nodes.
add_coupling(self, coupling: pycanha_core.pycanha_core.tmm.Coupling) -> None
Add a radiative coupling from a Coupling object.
- class pycanha_core.tmm.Couplings(*args, **kwargs)#
Bases:
objectGeneric coupling manager using user node numbers.
Wraps CouplingMatrices and translates between user node numbers and internal indices. Supports multiple add strategies: overwrite, sum, new-only.
- __init__(self, nodes: pycanha_core.pycanha_core.tmm.Nodes) None#
Create a Couplings manager linked to a Nodes container.
- add_coupling(self, node_num_1: int, node_num_2: int, value: float) None#
- add_coupling(self, coupling: pycanha_core.pycanha_core.tmm.Coupling) None
Overloaded function.
add_coupling(self, node_num_1: int, node_num_2: int, value: float) -> None
Add a coupling between two nodes.
add_coupling(self, coupling: pycanha_core.pycanha_core.tmm.Coupling) -> None
Add a coupling from a Coupling object.
- add_new_coupling(self, node_num_1: int, node_num_2: int, value: float) None#
- add_new_coupling(self, coupling: pycanha_core.pycanha_core.tmm.Coupling) None
Overloaded function.
add_new_coupling(self, node_num_1: int, node_num_2: int, value: float) -> None
Add a coupling only if it does not already exist.
add_new_coupling(self, coupling: pycanha_core.pycanha_core.tmm.Coupling) -> None
Add a coupling from a Coupling object only if new.
- add_ovw_coupling(self, node_num_1: int, node_num_2: int, value: float) None#
- add_ovw_coupling(self, coupling: pycanha_core.pycanha_core.tmm.Coupling) None
Overloaded function.
add_ovw_coupling(self, node_num_1: int, node_num_2: int, value: float) -> None
Add or overwrite a coupling between two nodes.
add_ovw_coupling(self, coupling: pycanha_core.pycanha_core.tmm.Coupling) -> None
Add or overwrite a coupling from a Coupling object.
- add_ovw_coupling_verbose(self, node_num_1: int, node_num_2: int, value: float) None#
- add_ovw_coupling_verbose(self, coupling: pycanha_core.pycanha_core.tmm.Coupling) None
Overloaded function.
add_ovw_coupling_verbose(self, node_num_1: int, node_num_2: int, value: float) -> None
Add or overwrite a coupling (verbose logging).
add_ovw_coupling_verbose(self, coupling: pycanha_core.pycanha_core.tmm.Coupling) -> None
Add or overwrite a coupling from a Coupling object (verbose).
- add_sum_coupling(self, node_num_1: int, node_num_2: int, value: float) None#
- add_sum_coupling(self, coupling: pycanha_core.pycanha_core.tmm.Coupling) None
Overloaded function.
add_sum_coupling(self, node_num_1: int, node_num_2: int, value: float) -> None
Add a coupling, summing with any existing value.
add_sum_coupling(self, coupling: pycanha_core.pycanha_core.tmm.Coupling) -> None
Add a coupling from a Coupling object, summing with existing.
- add_sum_coupling_verbose(self, node_num_1: int, node_num_2: int, value: float) None#
- add_sum_coupling_verbose(self, coupling: pycanha_core.pycanha_core.tmm.Coupling) None
Overloaded function.
add_sum_coupling_verbose(self, node_num_1: int, node_num_2: int, value: float) -> None
Add a coupling, summing with existing (verbose logging).
add_sum_coupling_verbose(self, coupling: pycanha_core.pycanha_core.tmm.Coupling) -> None
Add a coupling from a Coupling object, summing (verbose).
- coupling_exists(self, node_num_1: int, node_num_2: int) bool#
Check whether a coupling exists between two nodes.
- get_coupling_from_coupling_idx(self, idx: int) pycanha_core.pycanha_core.tmm.Coupling#
Get a Coupling object from a flat coupling index.
- get_coupling_matrices(self) pycanha_core.pycanha_core.tmm.CouplingMatrices#
Return a reference to the underlying CouplingMatrices.
- get_coupling_value(self, node_num_1: int, node_num_2: int) float#
Get the conductance value between two nodes.
- get_coupling_value_address(self, node_num_1: int, node_num_2: int) int#
Memory address (as int) of the coupling value.
- class pycanha_core.tmm.CouplingMatrices(*args, **kwargs)#
Bases:
objectSparse coupling matrices (dd, db, bb blocks).
Stores conductance values in three sparse matrices: diffusive-diffusive, diffusive-boundary, and boundary-boundary. Indexed by internal node indices.
- add_new_coupling_from_node_idxs(self, idx1: int, idx2: int, value: float) None#
Add a coupling only if it does not already exist.
- add_ovw_coupling_from_node_idxs(self, idx1: int, idx2: int, value: float) None#
Add or overwrite a coupling value by internal indices.
- add_ovw_coupling_from_node_idxs_verbose(self, idx1: int, idx2: int, value: float) None#
Add or overwrite a coupling value by internal indices (verbose).
- add_sum_coupling_from_node_idxs(self, idx1: int, idx2: int, value: float) None#
Add a coupling value, summing with any existing value.
- add_sum_coupling_from_node_idxs_verbose(self, idx1: int, idx2: int, value: float) None#
Add a coupling value, summing with any existing value (verbose).
- coupling_exists_from_idxs(self, idx1: int, idx2: int) bool#
Check whether a coupling exists between two internal indices.
- get_conductor_value_address_from_idx(self, idx1: int, idx2: int) int#
Memory address (as int) of the conductance value.
- get_conductor_value_from_idx(self, idx1: int, idx2: int) float#
Get conductance value by internal indices.
- get_conductor_value_pointer_from_idx(self, idx1: int, idx2: int) int#
Memory address of the conductance value for formula binding.
- get_idxs_and_coupling_value_from_coupling_idx(self, coupling_idx: int) std::tuple<long, long, double>#
Get (idx1, idx2, value) tuple from a flat coupling index.
- property num_bound_bound_couplings#
Number of non-zero boundary-boundary couplings.
- property num_bound_nodes#
Number of boundary nodes in the matrices.
- property num_diff_bound_couplings#
Number of non-zero diffusive-boundary couplings.
- property num_diff_diff_couplings#
Number of non-zero diffusive-diffusive couplings.
- property num_diff_nodes#
Number of diffusive nodes in the matrices.
- property num_nodes#
Total number of nodes in the matrices.
- property num_total_couplings#
Total number of non-zero couplings.
- set_conductor_value_from_idx(self, idx1: int, idx2: int, value: float) None#
Set conductance value by internal indices.
- sparse_bb_copy(self) scipy.sparse.csr_matrix[float]#
Return a copy of the boundary-boundary coupling matrix.
Network and model#
- class pycanha_core.tmm.ThermalNetwork(*args, **kwargs)#
Bases:
objectThermal network combining nodes, conductive couplings, and radiative couplings.
- __init__(self) None#
- __init__(self, nodes: pycanha_core.pycanha_core.tmm.Nodes, conductive: pycanha_core.pycanha_core.tmm.ConductiveCouplings, radiative: pycanha_core.pycanha_core.tmm.RadiativeCouplings) None
Overloaded function.
__init__(self) -> None
Create an empty thermal network.
__init__(self, nodes: pycanha_core.pycanha_core.tmm.Nodes, conductive: pycanha_core.pycanha_core.tmm.ConductiveCouplings, radiative: pycanha_core.pycanha_core.tmm.RadiativeCouplings) -> None
Create a thermal network from existing components.
- add_node(self, node: pycanha_core.pycanha_core.tmm.Node) None#
Add a node to the network.
- property conductive_couplings#
Reference to the ConductiveCouplings container.
- flow_conductive(self, node_num_1: int, node_num_2: int) float#
- flow_conductive(self, node_nums_1: collections.abc.Sequence[int], node_nums_2: collections.abc.Sequence[int]) float
Overloaded function.
flow_conductive(self, node_num_1: int, node_num_2: int) -> float
Compute conductive heat flow [W] between two nodes.
flow_conductive(self, node_nums_1: collections.abc.Sequence[int], node_nums_2: collections.abc.Sequence[int]) -> float
Compute total conductive heat flow [W] between two groups of nodes.
- flow_radiative(self, node_num_1: int, node_num_2: int) float#
- flow_radiative(self, node_nums_1: collections.abc.Sequence[int], node_nums_2: collections.abc.Sequence[int]) float
Overloaded function.
flow_radiative(self, node_num_1: int, node_num_2: int) -> float
Compute radiative heat flow [W] between two nodes.
flow_radiative(self, node_nums_1: collections.abc.Sequence[int], node_nums_2: collections.abc.Sequence[int]) -> float
Compute total radiative heat flow [W] between two groups of nodes.
- property nodes#
Reference to the Nodes container.
- property nodes_ptr#
Shared pointer to the Nodes container.
- property radiative_couplings#
Reference to the RadiativeCouplings container.
- class pycanha_core.tmm.ThermalData(*args, **kwargs)#
Bases:
objectStorage for simulation data models and auxiliary lookup tables.
- __init__(self) None#
- __init__(self, network: pycanha_core.pycanha_core.tmm.ThermalNetwork) None
Overloaded function.
__init__(self) -> None
Create an empty ThermalData store.
__init__(self, network: pycanha_core.pycanha_core.tmm.ThermalNetwork) -> None
Create a ThermalData store associated with a network.
- associate(self, network: pycanha_core.pycanha_core.tmm.ThermalNetwork) None#
Associate this ThermalData with a ThermalNetwork.
- property models#
Reference to the transient output model store.
- property network#
Reference to the associated ThermalNetwork.
- property network_ptr#
Shared pointer to the associated ThermalNetwork.
- property size#
Total number of stored data objects.
- property tables#
Reference to the lookup-table store.
- class pycanha_core.tmm.ThermalMathematicalModel(*args, **kwargs)#
Bases:
objectTop-level thermal mathematical model.
Aggregates a thermal network (nodes and couplings), parameters, formulas, thermal data tables, and solver callbacks. Non-copyable.
- __init__(self, model_name: str) None#
- __init__(self, model_name: str, nodes: pycanha_core.pycanha_core.tmm.Nodes, conductive: pycanha_core.pycanha_core.tmm.ConductiveCouplings, radiative: pycanha_core.pycanha_core.tmm.RadiativeCouplings) None
- __init__(self, model_name: str, nodes: pycanha_core.pycanha_core.tmm.Nodes, conductive: pycanha_core.pycanha_core.tmm.ConductiveCouplings, radiative: pycanha_core.pycanha_core.tmm.RadiativeCouplings, parameters: pycanha_core.pycanha_core.parameters.Parameters, formulas: pycanha_core.pycanha_core.parameters.Formulas, thermal_data: pycanha_core.pycanha_core.tmm.ThermalData) None
Overloaded function.
__init__(self, model_name: str) -> None
Create a model with an empty network.
__init__(self, model_name: str, nodes: pycanha_core.pycanha_core.tmm.Nodes, conductive: pycanha_core.pycanha_core.tmm.ConductiveCouplings, radiative: pycanha_core.pycanha_core.tmm.RadiativeCouplings) -> None
Create a model from existing network components.
__init__(self, model_name: str, nodes: pycanha_core.pycanha_core.tmm.Nodes, conductive: pycanha_core.pycanha_core.tmm.ConductiveCouplings, radiative: pycanha_core.pycanha_core.tmm.RadiativeCouplings, parameters: pycanha_core.pycanha_core.parameters.Parameters, formulas: pycanha_core.pycanha_core.parameters.Formulas, thermal_data: pycanha_core.pycanha_core.tmm.ThermalData) -> None
Create a model from all existing components.
- add_conductive_coupling(self, node_1: int, node_2: int, value: float) None#
- add_conductive_coupling(self, coupling: pycanha_core.pycanha_core.tmm.Coupling) None
Overloaded function.
add_conductive_coupling(self, node_1: int, node_2: int, value: float) -> None
Add a conductive coupling [W/K] between two nodes.
add_conductive_coupling(self, coupling: pycanha_core.pycanha_core.tmm.Coupling) -> None
Add a conductive coupling from a Coupling object.
- add_node(self, node: pycanha_core.pycanha_core.tmm.Node) None#
- add_node(self, node_num: int) None
Overloaded function.
add_node(self, node: pycanha_core.pycanha_core.tmm.Node) -> None
Add a Node object to the model.
add_node(self, node_num: int) -> None
Add a default node by user node number.
- add_radiative_coupling(self, node_1: int, node_2: int, value: float) None#
- add_radiative_coupling(self, coupling: pycanha_core.pycanha_core.tmm.Coupling) None
Overloaded function.
add_radiative_coupling(self, node_1: int, node_2: int, value: float) -> None
Add a radiative coupling [m^2] between two nodes.
add_radiative_coupling(self, coupling: pycanha_core.pycanha_core.tmm.Coupling) -> None
Add a radiative coupling from a Coupling object.
- add_temperature_variable(self, name: str, x_data: numpy.ndarray[dtype=float64, shape=(*), order='C'], y_data: numpy.ndarray[dtype=float64, shape=(*), order='C'], interpolation: pycanha_core.pycanha_core.tmm.InterpolationMethod = InterpolationMethod.LINEAR, extrapolation: pycanha_core.pycanha_core.tmm.ExtrapolationMethod = ExtrapolationMethod.CONSTANT) None#
Add a temperature-driven variable (evaluated from a lookup table of temperature).
- add_time_variable(self, name: str, x_data: numpy.ndarray[dtype=float64, shape=(*), order='C'], y_data: numpy.ndarray[dtype=float64, shape=(*), order='C'], interpolation: pycanha_core.pycanha_core.tmm.InterpolationMethod = InterpolationMethod.LINEAR, extrapolation: pycanha_core.pycanha_core.tmm.ExtrapolationMethod = ExtrapolationMethod.CONSTANT) None#
Add a time-driven variable (parameter updated from a lookup table of time).
- property c_callbacks_active#
Enable/disable C function-pointer callbacks.
- property callbacks_active#
Master switch to enable/disable all callbacks.
- property conductive_couplings#
Reference to the ConductiveCouplings.
- property formulas#
Reference to the Formulas collection.
- get_temperature_variable(self, name: str) pycanha_core.pycanha_core.tmm.TemperatureVariable#
Get a read-only reference to a temperature variable by name.
- get_time_variable(self, name: str) pycanha_core.pycanha_core.tmm.TimeVariable#
Get a read-only reference to a time variable by name.
- has_temperature_variable(self, name: str) bool#
Check whether a temperature variable with the given name exists.
- property internal_callbacks_active#
Enable/disable internal (C++) callbacks.
- property name#
Model name.
- property network#
Reference to the ThermalNetwork.
- property network_ptr#
Shared pointer to the ThermalNetwork.
- property nodes#
Reference to the Nodes container.
- property nodes_ptr#
Shared pointer to the Nodes container.
- property parameters#
Reference to the Parameters store.
- property python_apply_formulas#
Python callable invoked to apply formulas during callbacks.
- property python_callbacks_active#
Enable/disable Python callbacks.
- property python_extern_callback_solver_loop#
Python callable invoked each solver iteration.
- property python_extern_callback_transient_after_timestep#
Python callable invoked after each transient timestep.
- property python_extern_callback_transient_time_change#
Python callable invoked when simulation time changes.
- property python_formulas_active#
Enable/disable Python formula evaluation during callbacks.
- property radiative_couplings#
Reference to the RadiativeCouplings.
- property thermal_data#
Reference to the ThermalData store.
- property time#
Current simulation time [s].
- class pycanha_core.tmm.ESATANReader(*args, **kwargs)#
Bases:
objectReader for ESATAN TMD thermal model files.
- __init__(self, model: pycanha_core.pycanha_core.tmm.ThermalMathematicalModel) None#
Create a reader bound to a ThermalMathematicalModel.
- property verbose#
Enable verbose logging during file reading.