Coverage for fiqus/data/DataConductor.py: 100%
186 statements
« prev ^ index » next coverage.py v7.4.4, created at 2025-11-13 01:34 +0000
« prev ^ index » next coverage.py v7.4.4, created at 2025-11-13 01:34 +0000
1from pydantic import BaseModel, Field
2from typing import Union, Literal, Optional, List
4# ------------------- Jc fits ---------------------------#
5class ConstantJc(BaseModel):
6 """
7 Level 3: Class for setting constant Jc
8 """
10 type: Literal["Constant Jc"]
11 Jc_constant: Optional[float] = None # [A/m^2]
14class Ic_A_NbTi(BaseModel):
15 """
16 Level 3: Class for setting IcNbTi fit
17 """
19 type: Literal["Ic_A_NbTi"]
20 Jc_5T_4_2K: Optional[float] = None # [A/m^2]
23class Bottura(BaseModel):
24 """
25 Level 3: Class for setting Bottura fit
26 """
28 type: Literal["Bottura"]
29 Tc0_Bottura: Optional[float] = None # [K]
30 Bc20_Bottura: Optional[float] = None # [T]
31 Jc_ref_Bottura: Optional[float] = None # [A/m^2]
32 C0_Bottura: Optional[float] = None # [-]
33 alpha_Bottura: Optional[float] = None # [-]
34 beta_Bottura: Optional[float] = None # [-]
35 gamma_Bottura: Optional[float] = None # [-]
38class CUDI1(BaseModel):
39 """
40 Level 3: Class for Nb-Ti fit based on "Fit 1" in CUDI manual
41 """
43 type: Literal["CUDI1"]
44 Tc0_CUDI1: Optional[float] = None # [K]
45 Bc20_CUDI1: Optional[float] = None # [T]
46 C1_CUDI1: Optional[float] = None # [A]
47 C2_CUDI1: Optional[float] = None # [A/T]
50class CUDI3(BaseModel):
51 """
52 Level 3: Class for Nb-Ti fit based on "Fit 3" in CUDI manual
53 """
55 type: Literal["CUDI3"]
56 Tc0_CUDI3: Optional[float] = None # [K]
57 Bc20_CUDI3: Optional[float] = None # [T]
58 c1_CUDI3: Optional[float] = None # [-]
59 c2_CUDI3: Optional[float] = None # [-]
60 c3_CUDI3: Optional[float] = None # [-]
61 c4_CUDI3: Optional[float] = None # [-]
62 c5_CUDI3: Optional[float] = None # [-]
63 c6_CUDI3: Optional[float] = None # [-]
66class Summers(BaseModel):
67 """
68 Level 3: Class for cable Summer's Nb3Sn fit
69 """
71 type: Literal["Summers"]
72 Tc0_Summers: Optional[float] = None # [K]
73 Bc20_Summers: Optional[float] = None # [T]
74 Jc0_Summers: Optional[float] = None # [A*T^0.5/m^2]
77class Bordini(BaseModel):
78 """
79 Level 3: Class for cable Bordini's Nb3Sn fit
80 """
82 type: Literal["Bordini"]
83 Tc0_Bordini: Optional[float] = None # [K]
84 Bc20_Bordini: Optional[float] = None # [T]
85 C0_Bordini: Optional[float] = None # [A*T/m^2]
86 alpha_Bordini: Optional[float] = None # [-]
89class Nb3Sn_HFM(BaseModel):
90 """
91 Level 3: Class for cable HFM Nb3Sn fit
92 """
94 type: Literal["Nb3Sn_HFM"]
95 Tc0_Nb3Sn_HFM: Optional[float] = None # [K]
96 Bc20_Nb3Sn_HFM: Optional[float] = None # [T]
97 C0_Nb3Sn_HFM: Optional[float] = None # [A*T/m^2]
98 alpha_Nb3Sn_HFM: Optional[float] = None # [-]
99 nu_Nb3Sn_HFM: Optional[float] = None # [-]
100 p_Nb3Sn_HFM: Optional[float] = None # [-]
101 q_Nb3Sn_HFM: Optional[float] = None # [-]
104class ProDefined(BaseModel):
105 """
106 Level 3: Class for cable Bordini's Nb3Sn fit
107 """
109 type: Literal["ProDefined"]
110 Tc0: Optional[float] = None # [K]
111 Bc20: Optional[float] = None # [T]
112 C0: Optional[float] = None # [A*T/m^2]
113 alpha: Optional[float] = None # [-]
114 p: Optional[float] = None # [-]
115 q: Optional[float] = None # [-]
116 v: Optional[float] = None # [-]
117 B0: Optional[float] = None # [-]
120class BSCCO_2212_LBNL(BaseModel):
121 """
122 Level 3: Class for cable Bi-2212 fit developed in LBNL
123 """
125 # only ad-hoc fit [T. Shen, D. Davis, E. Ravaioli with LBNL, Berkeley, CA]
126 type: Literal["BSCCO_2212_LBNL"]
127 f_scaling_Jc_BSCCO2212: Optional[float] = None # [-] used for the ad-hoc fit
130# ------------------- Cable types ---------------------------#
131class Mono(BaseModel):
132 """
133 Mono cable type: This is basically type of cable consisting of one strand - not really a cable
134 """
136 type: Literal["Mono"]
137 bare_cable_width: Optional[float] = None
138 bare_cable_height_low: Optional[float] = None
139 bare_cable_height_high: Optional[float] = None
140 bare_cable_height_mean: Optional[float] = None
141 th_insulation_along_width: Optional[float] = None
142 th_insulation_along_height: Optional[float] = None
143 # Fractions given with respect to the insulated conductor
144 f_superconductor: Optional[float] = None
145 f_stabilizer: Optional[float] = None # (related to CuFraction in ProteCCT)
146 f_insulation: Optional[float] = None
147 f_inner_voids: Optional[float] = None
148 f_outer_voids: Optional[float] = None
149 # Available materials depend on the component and on the selected program
150 material_insulation: Optional[str] = None
151 material_inner_voids: Optional[str] = None
152 material_outer_voids: Optional[str] = None
155class Rutherford(BaseModel):
156 """
157 Rutherford cable type: for example LHC MB magnet cable
158 """
160 type: Literal["Rutherford"]
161 n_strands: Optional[int] = None
162 n_strand_layers: Optional[int] = None
163 n_strands_per_layers: Optional[int] = None
164 bare_cable_width: Optional[float] = None
165 bare_cable_height_low: Optional[float] = None
166 bare_cable_height_high: Optional[float] = None
167 bare_cable_height_mean: Optional[float] = None
168 th_insulation_along_width: Optional[float] = None
169 th_insulation_along_height: Optional[float] = None
170 width_core: Optional[float] = None
171 height_core: Optional[float] = None
172 strand_twist_pitch: Optional[float] = None
173 strand_twist_pitch_angle: Optional[float] = None
174 Rc: Optional[float] = None
175 Ra: Optional[float] = None
176 # Fractions given with respect to the insulated conductor
177 f_superconductor: Optional[float] = None
178 f_stabilizer: Optional[float] = None # (related to CuFraction in ProteCCT)
179 f_insulation: Optional[float] = None
180 f_inner_voids: Optional[float] = None
181 f_outer_voids: Optional[float] = None
182 f_core: Optional[float] = None
183 # Available materials depend on the component and on the selected program
184 material_insulation: Optional[str] = None
185 material_inner_voids: Optional[str] = None
186 material_outer_voids: Optional[str] = None
187 material_core: Optional[str] = None
188 gamma_c: Optional[float] = Field(
189 default=0.0,
190 description="parameter for DISCC cable homogenization"
191 )
194class Ribbon(BaseModel):
195 """
196 Mono cable type: This is basically type of cable consisting of one strand - not really a cable
197 """
199 type: Literal["Ribbon"]
200 n_strands: Optional[int] = (
201 None # This defines the number of "strands" in the ribbon cable, which are physically glued but electrically in series
202 )
203 bare_cable_width: Optional[float] = None
204 bare_cable_height_low: Optional[float] = None
205 bare_cable_height_high: Optional[float] = None
206 bare_cable_height_mean: Optional[float] = None
207 th_insulation_along_width: Optional[float] = (
208 None # This defines the thickness of the insulation around each strand (DIFFERENT FROM ROXIE CADATA FILE)
209 )
210 th_insulation_along_height: Optional[float] = (
211 None # This defines the thickness of the insulation around each strand (DIFFERENT FROM ROXIE CADATA FILE)
212 )
213 # Fractions given with respect to the insulated conductor
214 f_superconductor: Optional[float] = None
215 f_stabilizer: Optional[float] = None # (related to CuFraction in ProteCCT)
216 f_insulation: Optional[float] = None
217 f_inner_voids: Optional[float] = None
218 f_outer_voids: Optional[float] = None
219 f_core: Optional[float] = None
220 # Available materials depend on the component and on the selected program
221 material_insulation: Optional[str] = None
222 material_inner_voids: Optional[str] = None
223 material_outer_voids: Optional[str] = None
224 material_core: Optional[str] = None
227# ------------------- Conductors ---------------------------#
229# class MaterialSuperconductor(BaseModel):
230# """
231# Level 3: Class for strand superconductor material parameters
232# """
233# material: Optional[str] = Field(default=None, description="Material of the superconductor. E.g. NbTi, Nb3Sn, etc.")
234# n_value: Optional[float] = Field(default=None, description="n value of the superconductor (for power law fit).")
235# ec: Optional[float] = Field(default=None, description="Critical electric field of the superconductor.")
236# Cv_material: Optional[Union[str, float]] = Field(default=None, description="Material function for specific heat of the superconductor.")
238# class MaterialStabilizer(BaseModel):
239# """
240# Level 3: Class for strand stabilizer material parameters
241# """
243# rho_material: Optional[Union[str, float]] = Field(default=None, description="Material function for resistivity of the stabilizer. Constant resistivity can be given as float.")
244# RRR: Optional[float] = Field(default=None, description="Residual resistivity ratio of the stabilizer.")
245# T_ref_RRR_high: Optional[float] = Field(default=None, description="Upper reference temperature for RRR measurements.")
246# T_ref_RRR_low: Optional[float] = Field(default=None, description="Lower reference temperature for RRR measurements.")
247# k_material: Optional[Union[str, float]] = Field(default=None, description="Thermal conductivity of the stabilizer.")
248# Cv_material: Optional[Union[str, float]] = Field(default=None, description="Material function for specific heat of the stabilizer.")
251class Round(BaseModel):
252 """
253 Level 2: Class for strand parameters
254 """
256 type: Literal["Round"]
257 fil_twist_pitch: Optional[float] = None # Strand twist pitch
258 diameter: Optional[float] = None # ds_inGroup (LEDET), DConductor (BBQ), DStrand (ProteCCT)
259 diameter_core: Optional[float] = None # dcore_inGroup (LEDET)
260 diameter_filamentary: Optional[float] = None # dfilamentary_inGroup (LEDET)
261 filament_diameter: Optional[float] = None # df_inGroup (LEDET)
262 filament_hole_diameter: Optional[float] = Field(default=None, description="Specifies round or hexagonal hole diameter inside the filament. If None or 0.0, no hole is created.")
263 number_of_filaments: Optional[int] = None # nf_inGroup (LEDET)
264 f_Rho_effective: Optional[float] = None
265 Cu_noCu_in_strand: Optional[float] = None
267 # -- Superconductor parameters -- #
268 material_superconductor: Optional[str] = Field(default=None, description="Material of the superconductor. E.g. Nb-Ti, Nb3Sn, etc.")
269 n_value_superconductor: Optional[float] = Field(default=None, description="n value of the superconductor (for power law fit).")
270 ec_superconductor: Optional[float] = Field(default=None, description="Critical electric field of the superconductor in V/m.")
271 minimum_jc_fraction: Optional[float] = Field(gt=0, le=1, default=None, description="Fraction of Jc(minimum_jc_field, T) to use as minimum Jc for the power law fit to avoid division by zero when Jc(B_local, T) decreases to zero."
272 "Typical value would be 0.001 (so the Jc_minimum is 0.1% of Jc(minimum_jc_field, T))"
273 "This fraction is only allowed to be greater than 0.0 and less than or equal to 1.0")
274 minimum_jc_field: Optional[float] = Field(default=None, description="Magnetic flux density in tesla used for calculation of Jc(minimum_jc_field, T). This gets multiplied by minimum_jc_fraction and used as minimum Jc for the power law")
275 k_material_superconductor: Optional[Union[str, float]] = Field(default=None, description="Thermal conductivity of the superconductor.")
276 Cv_material_superconductor: Optional[Union[str, float]] = Field(default=None, description="Material function for specific heat of the superconductor.")
277 # -- Stabilizer parameters -- #
278 material_stabilizer: Optional[str] = Field(default=None, description="Material of the stabilizer.")
279 rho_material_stabilizer: Optional[Union[str, float]] = Field(default=None, description="Material function for resistivity of the stabilizer. Constant resistivity can be given as float.")
280 rho_material_holes: Optional[Union[str, float]] = Field(default=None, description="Material function for resistivity of the holes in the filaments."
281 "Constant resistivity can be given as float, material name as a string or None or 0.0 to use 'air' in the holes.")
282 RRR: Optional[Union[float, List[float]]] = Field(default=None, description="Residual resistivity ratio of the stabilizer. If a list of RRR is provided it needs to match in length the number of matrix regions in the geometry (typically 3)")
283 T_ref_RRR_high: Optional[float] = Field(default=None, description="Upper reference temperature for RRR measurements.")
284 T_ref_RRR_low: Optional[float] = Field(default=None, description="Lower reference temperature for RRR measurements.")
285 k_material_stabilizer: Optional[Union[str, float]] = Field(default=None, description="Thermal conductivity of the stabilizer.")
286 Cv_material_stabilizer: Optional[Union[str, float]] = Field(default=None, description="Material function for specific heat of the stabilizer.")
288 # superconductor: MaterialSuperconductor = MaterialSuperconductor()
289 # stabilizer: MaterialStabilizer = MaterialStabilizer()
292class Rectangular(BaseModel):
293 """
294 Level 2: Class for strand parameters
295 """
297 type: Literal["Rectangular"]
298 bare_width: Optional[float] = None
299 bare_height: Optional[float] = None
300 Cu_noCu_in_strand: Optional[float] = None
301 filament_diameter: Optional[float] = None # df_inGroup (LEDET)
302 f_Rho_effective: Optional[float] = None
303 fil_twist_pitch: Optional[float] = None
304 bare_corner_radius: Optional[float] = None
306 # -- Superconductor parameters -- #
307 material_superconductor: Optional[str] = Field(default=None, description="Material of the superconductor. E.g. NbTi, Nb3Sn, etc.")
308 n_value_superconductor: Optional[float] = Field(default=None, description="n value of the superconductor (for power law fit).")
309 ec_superconductor: Optional[float] = Field(default=None, description="Critical electric field of the superconductor.")
310 minimum_jc_fraction: Optional[float] = Field(gt=0, le=1, default=None, description="Fraction of Jc(minimum_jc_field, T) to use as minimum Jc for the power law"
311 " fit to avoid division by zero when Jc(B_local, T) decreases to zero."
312 "Typical value would be 0.001 (so the Jc_minimum is 0.1% of Jc(minimum_jc_field, T))"
313 "This fraction is only allowed to be greater than 0.0 and less than or equal to 1.0")
314 minimum_jc_field: Optional[float] = Field(default=None, description="Magnetic flux density in tesla used for calculation of Jc(minimum_jc_field, T)."
315 "This gets multiplied by minimum_jc_fraction and used as minimum Jc for the power law")
316 k_material_superconductor: Optional[Union[str, float]] = Field(default=None, description="Thermal conductivity of the superconductor.")
317 Cv_material_superconductor: Optional[Union[str, float]] = Field(default=None, description="Material function for specific heat of the superconductor.")
318 # -- Stabilizer parameters -- #
319 material_stabilizer: Optional[str] = Field(default=None, description="Material of the stabilizer.")
320 rho_material_stabilizer: Optional[Union[str, float]] = Field(default=None, description="Material function for resistivity of the stabilizer. Constant resistivity can be given as float.")
321 RRR: Optional[Union[float, List[float]]] = Field(default=None, description="Residual resistivity ratio of the stabilizer. If a list of RRR is provided it needs to match in length the number of matrix regions in the geometry (typically 3)")
322 T_ref_RRR_high: Optional[float] = Field(default=None, description="Upper reference temperature for RRR measurements.")
323 T_ref_RRR_low: Optional[float] = Field(default=None, description="Lower reference temperature for RRR measurements.")
324 k_material_stabilizer: Optional[Union[str, float]] = Field(default=None, description="Thermal conductivity of the stabilizer.")
325 Cv_material_stabilizer: Optional[Union[str, float]] = Field(default=None, description="Material function for specific heat of the stabilizer.")
326 number_of_filaments: Optional[int] = None
328 # superconductor: MaterialSuperconductor = MaterialSuperconductor()
329 # stabilizer: MaterialStabilizer = MaterialStabilizer()
333# ------------------- Conductors ---------------------------#
336class Conductor(BaseModel):
337 """
338 Level 1: Class for conductor parameters
339 """
341 version: Optional[str] = None
342 case: Optional[str] = None
343 state: Optional[str] = None
344 cable: Union[Rutherford, Mono, Ribbon] = {
345 "type": "Rutherford"
346 } # TODO: Busbar, Rope, Roebel, CORC, TSTC, CICC
347 strand: Union[Round, Rectangular] = {"type": "Round"} # TODO: Tape, WIC
348 Jc_fit: Union[ConstantJc, Bottura, CUDI1, CUDI3, Summers, Bordini, Nb3Sn_HFM, BSCCO_2212_LBNL, Ic_A_NbTi, ProDefined] = {
349 "type": "CUDI1"
350 } # TODO: CUDI other numbers? , Roxie?