Source code for piel.models.physical.electrical.cable

from typing import Optional, Literal

from ..geometry import calculate_cross_sectional_area_m2, awg_to_cross_sectional_area_m2
from ..thermal import heat_transfer_1d_W
from ....materials.thermal_conductivity.types import MaterialReferenceType
from piel.materials.thermal_conductivity.utils import get_thermal_conductivity_fit
from .types import *
from ..types import TemperatureRangeTypes


[docs]def calculate_coaxial_cable_geometry( length_m: float = 1, sheath_top_diameter_m: float = 1.651e-3, sheath_bottom_diameter_m: float = 1.468e-3, core_diameter_dimension: Literal["awg", "metric"] = "metric", core_diameter_awg: Optional[float] = None, core_diameter_m: float = 2e-3, **kwargs ) -> CoaxialCableGeometryType: """ Calculate the geometry of a coaxial cable. Defaults are based on the parameters of a TODO Args: length_m: Length of the cable in meters. sheath_top_diameter_m: Diameter of the top of the sheath in meters. sheath_bottom_diameter_m: Diameter of the bottom of the sheath in meters. core_diameter_dimension: Dimension of the core diameter. core_diameter_awg: Core diameter in AWG. core_diameter_m: Core diameter in meters. **kwargs: Returns: CoaxialCableGeometryType: The geometry of the coaxial cable. """ if core_diameter_dimension == "awg": core_diameter_m = awg_to_cross_sectional_area_m2(core_diameter_awg) core_cross_sectional_area_m2 = calculate_cross_sectional_area_m2(diameter_m=core_diameter_m) sheath_cross_sectional_area_m2 = calculate_cross_sectional_area_m2( diameter_m=sheath_top_diameter_m) - calculate_cross_sectional_area_m2(diameter_m=sheath_bottom_diameter_m) total_cross_sectional_area_m2 = core_cross_sectional_area_m2 + sheath_cross_sectional_area_m2 # TODO dielectric return CoaxialCableGeometryType( length_m=length_m, core_cross_sectional_area_m2=core_cross_sectional_area_m2, sheath_cross_sectional_area_m2=sheath_cross_sectional_area_m2, total_cross_sectional_area_m2=total_cross_sectional_area_m2, **kwargs )
[docs]def define_coaxial_cable_materials( core_material: MaterialReferenceType, sheath_material: MaterialReferenceType, dielectric_material: MaterialReferenceType, ) -> CoaxialCableMaterialSpecificationType: """ Define the materials of a coaxial cable. Args: core_material: The material of the core. sheath_material: The material of the sheath. dielectric_material: The material of the dielectric. Returns: CoaxialCableMaterialSpecificationType: The material specification of the coaxial cable. """ return CoaxialCableMaterialSpecificationType( core=core_material, sheath=sheath_material, dielectric=dielectric_material )
[docs]def calculate_coaxial_cable_heat_transfer( temperature_range_K: TemperatureRangeTypes, geometry_class: Optional[CoaxialCableGeometryType], material_class: Optional[CoaxialCableMaterialSpecificationType], core_material: Optional[MaterialReferenceType] = None, sheath_material: Optional[MaterialReferenceType] = None, dielectric_material: Optional[MaterialReferenceType] = None, ) -> CoaxialCableHeatTransferType: """ Calculate the heat transfer of a coaxial cable. Args: temperature_range_K: The temperature range in Kelvin. geometry_class: The geometry of the cable. material_class: The material of the cable. core_material: The material of the core. sheath_material: The material of the sheath. dielectric_material: The material of the dielectric. Returns: CoaxialCableHeatTransferType: The heat transfer of the cable. """ if material_class is not None: provided_materials = material_class.supplied_parameters() elif material_class is None: material_class = CoaxialCableMaterialSpecificationType( core=core_material, sheath=sheath_material, dielectric=dielectric_material ) provided_materials = material_class.supplied_parameters() else: raise ValueError("No material class or material parameters provided.") heat_transfer_parameters = dict() total_heat_transfer_W = 0 for material_i in provided_materials: thermal_conductivity_fit_i = get_thermal_conductivity_fit( temperature_range_K=temperature_range_K, material=getattr(material_class, material_i) ) # CURRENT TODO compute the thermal conductivity fit accordingly. Implement a material reference to thermal conductivtiy data mapping. heat_transfer_i = heat_transfer_1d_W( thermal_conductivity_fit=thermal_conductivity_fit_i, temperature_range_K=temperature_range_K, cross_sectional_area_m2=geometry_class.total_cross_sectional_area_m2, length_m=geometry_class.length_m ) heat_transfer_parameters[material_i] = heat_transfer_i total_heat_transfer_W += heat_transfer_i heat_transfer_parameters["total"] = total_heat_transfer_W return CoaxialCableHeatTransferType( **heat_transfer_parameters, )
[docs]def calculate_dc_cable_geometry( length_m: float = 1, core_diameter_dimension: Literal["awg", "metric"] = "metric", core_diameter_awg: Optional[float] = None, core_diameter_m: float = 2e-3, *args, **kwargs ) -> DCCableGeometryType: """ Calculate the geometry of a DC cable. Defaults are based on the parameters of a TODO Args: length_m: Length of the cable in meters. core_diameter_dimension: Dimension of the core diameter. core_diameter_awg: Core diameter in AWG. core_diameter_m: Core diameter in meters. **kwargs: Returns: CoaxialCableGeometryType: The geometry of the coaxial cable. """ if core_diameter_dimension == "awg": core_diameter_m = awg_to_cross_sectional_area_m2(core_diameter_awg) core_cross_sectional_area_m2 = calculate_cross_sectional_area_m2(diameter_m=core_diameter_m) total_cross_sectional_area_m2 = core_cross_sectional_area_m2 return DCCableGeometryType( length_m=length_m, core_cross_sectional_area_m2=core_cross_sectional_area_m2, total_cross_sectional_area_m2=total_cross_sectional_area_m2, *args, **kwargs, )
[docs]def define_dc_cable_materials( core_material: MaterialReferenceType, ) -> DCCableMaterialSpecificationType: """ Define the materials of a coaxial cable. Args: core_material: The material of the core. Returns: DCCableMaterialSpecificationType: The material specification of the dc cable. """ return DCCableMaterialSpecificationType( core=core_material, )
[docs]def calculate_dc_cable_heat_transfer( temperature_range_K: TemperatureRangeTypes, geometry_class: Optional[DCCableGeometryType], material_class: Optional[DCCableMaterialSpecificationType], core_material: Optional[MaterialReferenceType] = None, ) -> DCCableHeatTransferType: """ Calculate the heat transfer of a coaxial cable. Args: temperature_range_K: The temperature range in Kelvin. geometry_class: The geometry of the cable. material_class: The material of the cable. core_material: The material of the core. Returns: DCCableHeatTransferType: The heat transfer of the cable. """ if material_class is not None: provided_materials = material_class.supplied_parameters() elif material_class is None: material_class = DCCableMaterialSpecificationType( core=core_material, ) provided_materials = material_class.supplied_parameters() else: raise ValueError("No material class or material parameters provided.") heat_transfer_parameters = dict() total_heat_transfer_W = 0 for material_i in provided_materials: thermal_conductivity_fit_i = get_thermal_conductivity_fit( temperature_range_K=temperature_range_K, material=getattr(material_class, material_i) ) # CURRENT TODO compute the thermal conductivity fit accordingly. Implement a material reference to thermal conductivtiy data mapping. heat_transfer_i = heat_transfer_1d_W( thermal_conductivity_fit=thermal_conductivity_fit_i, temperature_range_K=temperature_range_K, cross_sectional_area_m2=geometry_class.total_cross_sectional_area_m2, length_m=geometry_class.length_m ) heat_transfer_parameters[material_i] = heat_transfer_i total_heat_transfer_W += heat_transfer_i heat_transfer_parameters["total"] = total_heat_transfer_W return DCCableHeatTransferType( **heat_transfer_parameters, )