Coverage for fiqus/data/DataConductor.py: 100%

256 statements  

« prev     ^ index     » next       coverage.py v7.4.4, created at 2026-01-09 01:49 +0000

1from pydantic import BaseModel, Field 

2from typing import Union, Literal, Optional, List 

3 

4# ------------------- Jc fits ---------------------------# 

5class ConstantJc(BaseModel): 

6 """ 

7 Level 3: Class for setting constant Jc 

8 """ 

9 

10 type: Literal["Constant Jc"] 

11 Jc_constant: Optional[float] = None # [A/m^2] 

12 

13 

14class Ic_A_NbTi(BaseModel): 

15 """ 

16 Level 3: Class for setting IcNbTi fit 

17 """ 

18 

19 type: Literal["Ic_A_NbTi"] 

20 Jc_5T_4_2K: Optional[float] = None # [A/m^2] 

21 

22 

23class Bottura(BaseModel): 

24 """ 

25 Level 3: Class for setting Bottura fit 

26 """ 

27 

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 # [-] 

36 

37 

38class CUDI1(BaseModel): 

39 """ 

40 Level 3: Class for Nb-Ti fit based on "Fit 1" in CUDI manual 

41 """ 

42 

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] 

48 

49 

50class CUDI3(BaseModel): 

51 """ 

52 Level 3: Class for Nb-Ti fit based on "Fit 3" in CUDI manual 

53 """ 

54 

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 # [-] 

64 

65 

66class Summers(BaseModel): 

67 """ 

68 Level 3: Class for cable Summer's Nb3Sn fit 

69 """ 

70 

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] 

75 

76 

77class Bordini(BaseModel): 

78 """ 

79 Level 3: Class for cable Bordini's Nb3Sn fit 

80 """ 

81 

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 # [-] 

87 

88 

89class Nb3Sn_HFM(BaseModel): 

90 """ 

91 Level 3: Class for cable HFM Nb3Sn fit 

92 """ 

93 

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 # [-] 

102 

103 

104class ProDefined(BaseModel): 

105 """ 

106 Level 3: Class for cable Bordini's Nb3Sn fit 

107 """ 

108 

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 # [-] 

118 

119class Succi_fixed(BaseModel): 

120 """ 

121 Level 3: Class for cable Succi's YBCO fit 

122 """ 

123 

124 type: Literal["Succi_fixed"] 

125 Jc_factor: Optional[float] = Field(gt=0.0, 

126 default = 1.0, 

127 description = "This factor multiplies the Jc returned by the function." 

128 ) 

129 # all other parameters of the Succi fit are hardcoded 

130class Fujikura(BaseModel): 

131 """ 

132 Level 3: Class for cable Fujikura's fit 

133 """ 

134 

135 type: Literal["Fujikura"] 

136 Jc_factor: Optional[float] = Field(gt=0.0, 

137 default = 1.0, 

138 description = "This factor multiplies the Jc returned by the function." 

139 ) 

140 

141class BSCCO_2212_LBNL(BaseModel): 

142 """ 

143 Level 3: Class for cable Bi-2212 fit developed in LBNL 

144 """ 

145 

146 # only ad-hoc fit [T. Shen, D. Davis, E. Ravaioli with LBNL, Berkeley, CA] 

147 type: Literal["BSCCO_2212_LBNL"] 

148 f_scaling_Jc_BSCCO2212: Optional[float] = None # [-] used for the ad-hoc fit 

149 

150 

151# ------------------- Cable types ---------------------------# 

152class Mono(BaseModel): 

153 """ 

154 Mono cable type: This is basically type of cable consisting of one strand - not really a cable 

155 """ 

156 

157 type: Literal["Mono"] 

158 bare_cable_width: Optional[float] = None 

159 bare_cable_height_low: Optional[float] = None 

160 bare_cable_height_high: Optional[float] = None 

161 bare_cable_height_mean: Optional[float] = None 

162 th_insulation_along_width: Optional[float] = None 

163 th_insulation_along_height: Optional[float] = None 

164 # Fractions given with respect to the insulated conductor 

165 f_superconductor: Optional[float] = None 

166 f_stabilizer: Optional[float] = None # (related to CuFraction in ProteCCT) 

167 f_insulation: Optional[float] = None 

168 f_inner_voids: Optional[float] = None 

169 f_outer_voids: Optional[float] = None 

170 # Available materials depend on the component and on the selected program 

171 material_insulation: Optional[str] = None 

172 material_inner_voids: Optional[str] = None 

173 material_outer_voids: Optional[str] = None 

174 

175 

176class Rutherford(BaseModel): 

177 """ 

178 Rutherford cable type: for example LHC MB magnet cable 

179 """ 

180 

181 type: Literal["Rutherford"] 

182 n_strands: Optional[int] = None 

183 n_strand_layers: Optional[int] = None 

184 n_strands_per_layers: Optional[int] = None 

185 bare_cable_width: Optional[float] = None 

186 bare_cable_height_low: Optional[float] = None 

187 bare_cable_height_high: Optional[float] = None 

188 bare_cable_height_mean: Optional[float] = None 

189 th_insulation_along_width: Optional[float] = None 

190 th_insulation_along_height: Optional[float] = None 

191 width_core: Optional[float] = None 

192 height_core: Optional[float] = None 

193 strand_twist_pitch: Optional[float] = None 

194 strand_twist_pitch_angle: Optional[float] = None 

195 Rc: Optional[float] = None 

196 Ra: Optional[float] = None 

197 # Fractions given with respect to the insulated conductor 

198 f_superconductor: Optional[float] = None 

199 f_stabilizer: Optional[float] = None # (related to CuFraction in ProteCCT) 

200 f_insulation: Optional[float] = None 

201 f_inner_voids: Optional[float] = None 

202 f_outer_voids: Optional[float] = None 

203 f_core: Optional[float] = None 

204 # Available materials depend on the component and on the selected program 

205 material_insulation: Optional[str] = None 

206 material_inner_voids: Optional[str] = None 

207 material_outer_voids: Optional[str] = None 

208 material_core: Optional[str] = None 

209 gamma_c: Optional[float] = Field( 

210 default=0.0, 

211 description="parameter for DISCC cable homogenization" 

212 ) 

213 

214 

215class Ribbon(BaseModel): 

216 """ 

217 Mono cable type: This is basically type of cable consisting of one strand - not really a cable 

218 """ 

219 

220 type: Literal["Ribbon"] 

221 n_strands: Optional[int] = ( 

222 None # This defines the number of "strands" in the ribbon cable, which are physically glued but electrically in series 

223 ) 

224 bare_cable_width: Optional[float] = None 

225 bare_cable_height_low: Optional[float] = None 

226 bare_cable_height_high: Optional[float] = None 

227 bare_cable_height_mean: Optional[float] = None 

228 th_insulation_along_width: Optional[float] = ( 

229 None # This defines the thickness of the insulation around each strand (DIFFERENT FROM ROXIE CADATA FILE) 

230 ) 

231 th_insulation_along_height: Optional[float] = ( 

232 None # This defines the thickness of the insulation around each strand (DIFFERENT FROM ROXIE CADATA FILE) 

233 ) 

234 # Fractions given with respect to the insulated conductor 

235 f_superconductor: Optional[float] = None 

236 f_stabilizer: Optional[float] = None # (related to CuFraction in ProteCCT) 

237 f_insulation: Optional[float] = None 

238 f_inner_voids: Optional[float] = None 

239 f_outer_voids: Optional[float] = None 

240 f_core: Optional[float] = None 

241 # Available materials depend on the component and on the selected program 

242 material_insulation: Optional[str] = None 

243 material_inner_voids: Optional[str] = None 

244 material_outer_voids: Optional[str] = None 

245 material_core: Optional[str] = None 

246 

247class TSTC(BaseModel): 

248 """ 

249 Twisted Stacked-Tape Cable (TSTC) type: 

250 """ 

251 type: Literal["TSTC"] 

252 stack_layout: Optional[List[Literal[-1,0,1]]] = Field(default=None,description="2D: Tape stack layout ordered TOP->BOTTOM. The numbers represent: 1 = a CC tape, -1 = a flipped CC tape, 0 = a shunt.") 

253 nb_tapes: Optional[int] = Field(default=None, description="3D: Number of tapes in the stack") 

254 tape_width: Optional[float] = Field(default=None, description="3D and 2D: Width of each tape") 

255 tape_thickness: Optional[float] = Field(default=None, description="3D and 2D: Thickness of each tape") 

256 twist_pitch: Optional[float] = Field(default=None, description="3D: Length over which tapes are twisted by full rotation") 

257 pitch_fraction: Optional[float] = Field(default=1.0, description="3D: Fraction of the twist pitch to be modelled (1.0 = full pitch, 0.5 = half pitch, etc.)") 

258 bare_cable_width: Optional[float] = Field(default=None, description="Cable width, typically the same as CC width") 

259 bare_cable_height_low: Optional[float] = Field(default=None, description="Narrow end (if applicable) cable height (thickness), typically the same as (CC thickness + Cu stabilizer thickness) * number of tapes.") 

260 bare_cable_height_high: Optional[float] = Field(default=None, description="Wide end (if applicable) cable height (thickness), typically the same as (CC thickness + Cu stabilizer thickness) * number of tapes.") 

261 bare_cable_height_mean: Optional[float] = Field(default=None, description="Average (if applicable) cable height (thickness), typically the same as (CC thickness + Cu stabilizer thickness) * number of tapes.") 

262 th_insulation_along_width: Optional[float] = Field(default=None, description="Insulation thickness along the width ") 

263 th_insulation_along_height: Optional[float] = Field(default=None, description="Insulation thickness along the height ") 

264 f_superconductor: Optional[float] = Field(default=None, description="Fraction of superconductor related to the total area of the cable (winding cell)") 

265 f_stabilizer: Optional[float] = Field(default=None, description="Fraction of stabilizer related to the total area of the cable (winding cell)") 

266 f_silver: Optional[float] = Field(default=None, description="Fraction of silver related to the total area of the cable (winding cell)") 

267 f_substrate: Optional[float] = Field(default=None, description="Fraction of substrate (including buffer layers and silver overlay) related to the total area of the cable (winding cell)") 

268 f_shunt: Optional[float] = Field(default=None, description="Fraction of substrate (including buffer layers and silver overlay) related to the total area of the cable (winding cell)") 

269 f_insulation: Optional[float] = Field(default=None, description="Fraction of cable insulation related to the total area of the cable (winding cell)") 

270 f_inner_voids: Optional[float] = Field(default=None, description="Fraction of additional material (typically insulation) related to the total area of the cable (winding cell)") 

271 f_outer_voids: Optional[float] = Field(default=None, description="Fraction of additional material (typically helium impregnating the windings) related to the total area of the cable (winding cell)") 

272 

273# ------------------- Conductors ---------------------------# 

274 

275# class MaterialSuperconductor(BaseModel): 

276# """ 

277# Level 3: Class for strand superconductor material parameters 

278# """ 

279# material: Optional[str] = Field(default=None, description="Material of the superconductor. E.g. NbTi, Nb3Sn, etc.") 

280# n_value: Optional[float] = Field(default=None, description="n value of the superconductor (for power law fit).") 

281# ec: Optional[float] = Field(default=None, description="Critical electric field of the superconductor.") 

282# Cv_material: Optional[Union[str, float]] = Field(default=None, description="Material function for specific heat of the superconductor.") 

283 

284# class MaterialStabilizer(BaseModel): 

285# """ 

286# Level 3: Class for strand stabilizer material parameters 

287# """ 

288 

289# rho_material: Optional[Union[str, float]] = Field(default=None, description="Material function for resistivity of the stabilizer. Constant resistivity can be given as float.") 

290# RRR: Optional[float] = Field(default=None, description="Residual resistivity ratio of the stabilizer.") 

291# T_ref_RRR_high: Optional[float] = Field(default=None, description="Upper reference temperature for RRR measurements.") 

292# T_ref_RRR_low: Optional[float] = Field(default=None, description="Lower reference temperature for RRR measurements.") 

293# k_material: Optional[Union[str, float]] = Field(default=None, description="Thermal conductivity of the stabilizer.") 

294# Cv_material: Optional[Union[str, float]] = Field(default=None, description="Material function for specific heat of the stabilizer.") 

295 

296 

297class Round(BaseModel): 

298 """ 

299 Level 2: Class for strand parameters 

300 """ 

301 

302 type: Literal["Round"] 

303 fil_twist_pitch: Optional[float] = None # Strand twist pitch 

304 diameter: Optional[float] = None # ds_inGroup (LEDET), DConductor (BBQ), DStrand (ProteCCT) 

305 diameter_core: Optional[float] = None # dcore_inGroup (LEDET) 

306 diameter_filamentary: Optional[float] = None # dfilamentary_inGroup (LEDET) 

307 filament_diameter: Optional[float] = None # df_inGroup (LEDET) 

308 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.") 

309 number_of_filaments: Optional[int] = None # nf_inGroup (LEDET) 

310 f_Rho_effective: Optional[float] = None 

311 Cu_noCu_in_strand: Optional[float] = None 

312 

313 # -- Superconductor parameters -- # 

314 material_superconductor: Optional[str] = Field(default=None, description="Material of the superconductor. E.g. Nb-Ti, Nb3Sn, etc.") 

315 n_value_superconductor: Optional[float] = Field(default=None, description="n value of the superconductor (for power law fit).") 

316 ec_superconductor: Optional[float] = Field(default=None, description="Critical electric field of the superconductor in V/m.") 

317 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." 

318 "Typical value would be 0.001 (so the Jc_minimum is 0.1% of Jc(minimum_jc_field, T))" 

319 "This fraction is only allowed to be greater than 0.0 and less than or equal to 1.0") 

320 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") 

321 k_material_superconductor: Optional[Union[str, float]] = Field(default=None, description="Thermal conductivity of the superconductor.") 

322 Cv_material_superconductor: Optional[Union[str, float]] = Field(default=None, description="Material function for specific heat of the superconductor.") 

323 # -- Stabilizer parameters -- # 

324 material_stabilizer: Optional[str] = Field(default=None, description="Material of the stabilizer.") 

325 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.") 

326 rho_material_holes: Optional[Union[str, float]] = Field(default=None, description="Material function for resistivity of the holes in the filaments." 

327 "Constant resistivity can be given as float, material name as a string or None or 0.0 to use 'air' in the holes.") 

328 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)") 

329 T_ref_RRR_high: Optional[float] = Field(default=None, description="Upper reference temperature for RRR measurements.") 

330 T_ref_RRR_low: Optional[float] = Field(default=None, description="Lower reference temperature for RRR measurements.") 

331 k_material_stabilizer: Optional[Union[str, float]] = Field(default=None, description="Thermal conductivity of the stabilizer.") 

332 Cv_material_stabilizer: Optional[Union[str, float]] = Field(default=None, description="Material function for specific heat of the stabilizer.") 

333 

334 # superconductor: MaterialSuperconductor = MaterialSuperconductor() 

335 # stabilizer: MaterialStabilizer = MaterialStabilizer() 

336 

337 

338class Rectangular(BaseModel): 

339 """ 

340 Level 2: Class for strand parameters 

341 """ 

342 

343 type: Literal["Rectangular"] 

344 bare_width: Optional[float] = None 

345 bare_height: Optional[float] = None 

346 Cu_noCu_in_strand: Optional[float] = None 

347 filament_diameter: Optional[float] = None # df_inGroup (LEDET) 

348 f_Rho_effective: Optional[float] = None 

349 fil_twist_pitch: Optional[float] = None 

350 bare_corner_radius: Optional[float] = None 

351 

352 # -- Superconductor parameters -- # 

353 material_superconductor: Optional[str] = Field(default=None, description="Material of the superconductor. E.g. NbTi, Nb3Sn, etc.") 

354 n_value_superconductor: Optional[float] = Field(default=None, description="n value of the superconductor (for power law fit).") 

355 ec_superconductor: Optional[float] = Field(default=None, description="Critical electric field of the superconductor.") 

356 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" 

357 " fit to avoid division by zero when Jc(B_local, T) decreases to zero." 

358 "Typical value would be 0.001 (so the Jc_minimum is 0.1% of Jc(minimum_jc_field, T))" 

359 "This fraction is only allowed to be greater than 0.0 and less than or equal to 1.0") 

360 minimum_jc_field: Optional[float] = Field(default=None, description="Magnetic flux density in tesla used for calculation of Jc(minimum_jc_field, T)." 

361 "This gets multiplied by minimum_jc_fraction and used as minimum Jc for the power law") 

362 k_material_superconductor: Optional[Union[str, float]] = Field(default=None, description="Thermal conductivity of the superconductor.") 

363 Cv_material_superconductor: Optional[Union[str, float]] = Field(default=None, description="Material function for specific heat of the superconductor.") 

364 # -- Stabilizer parameters -- # 

365 material_stabilizer: Optional[str] = Field(default=None, description="Material of the stabilizer.") 

366 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.") 

367 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)") 

368 T_ref_RRR_high: Optional[float] = Field(default=None, description="Upper reference temperature for RRR measurements.") 

369 T_ref_RRR_low: Optional[float] = Field(default=None, description="Lower reference temperature for RRR measurements.") 

370 k_material_stabilizer: Optional[Union[str, float]] = Field(default=None, description="Thermal conductivity of the stabilizer.") 

371 Cv_material_stabilizer: Optional[Union[str, float]] = Field(default=None, description="Material function for specific heat of the stabilizer.") 

372 number_of_filaments: Optional[int] = None 

373 

374 # superconductor: MaterialSuperconductor = MaterialSuperconductor() 

375 # stabilizer: MaterialStabilizer = MaterialStabilizer() 

376 

377class Copper_thickness(BaseModel): 

378 left: Optional[float] = Field(default=None, description="On the left side.") 

379 right: Optional[float] = Field(default=None, description="On the right side.") 

380 top: Optional[float] = Field(default=None, description="On the top side.") 

381 bottom: Optional[float] = Field(default=None, description="On the bottom side.") 

382 

383class Silver_thickness(BaseModel): 

384 top: Optional[float] = Field(default=None, description="On the top side.") 

385 bottom: Optional[float] = Field(default=None, description="On the bottom side.") 

386 

387class CC(BaseModel): 

388 """ 

389 Level 2: Class for coated conductor parameters 

390 """ 

391 type: Literal["CC"] 

392 

393 # Core layer sizes 

394 HTS_thickness: Optional[float] = Field(default=None, description="HTS thickness in meters.") 

395 HTS_width: Optional[float] = Field(default=None, description="HTS width in meters.") 

396 number_of_filaments: Optional[int] = Field(default=1, ge=1, description="Number of HTS filaments. If 1, no striation case") 

397 gap_between_filaments: Optional[float] = Field(default=None, description="Gap between HTS filaments in meters. Only applies when number_of_filaments > 1.") 

398 substrate_thickness: Optional[float] = Field(default=None, description="Substrate layer thickness in meters.") 

399 

400 # Plating/stabilizer 

401 copper_thickness: Copper_thickness = Field(default=Copper_thickness(), description="Copper thickness in meters") 

402 silver_thickness: Silver_thickness = Field(default=Silver_thickness(), description="Silver thickness in meters") 

403 

404 # -- Superconductor parameters -- # 

405 material_superconductor: Optional[str] = Field(default=None, description="Material of the superconductor. E.g. NbTi, Nb3Sn, etc.") 

406 n_value_superconductor: Optional[float] = Field(default=None, description="n value of the superconductor (for power law fit).") 

407 ec_superconductor: Optional[float] = Field(default=None, description="Critical electric field of the superconductor.") 

408 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" 

409 " fit to avoid division by zero when Jc(B_local, T) decreases to zero." 

410 "Typical value would be 0.001 (so the Jc_minimum is 0.1% of Jc(minimum_jc_field, T))" 

411 "This fraction is only allowed to be greater than 0.0 and less than or equal to 1.0") 

412 minimum_jc_field: Optional[float] = Field(default=None, description="Magnetic flux density in tesla used for calculation of Jc(minimum_jc_field, T)." 

413 "This gets multiplied by minimum_jc_fraction and used as minimum Jc for the power law") 

414 k_material_superconductor: Optional[Union[str, float]] = Field(default=None, description="Thermal conductivity of the superconductor.") 

415 Cv_material_superconductor: Optional[Union[str, float]] = Field(default=None, description="Material function for specific heat of the superconductor.") 

416 k_material_stabilizer: Optional[Union[str, float]] = Field(default=None, description="Thermal conductivity of the stabilizer, typically copper.") 

417 Cv_material_stabilizer: Optional[Union[str, float]] = Field(default=None, description="Material function for specific heat of the stabilizer, typically copper.") 

418 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.") 

419 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)") 

420 T_ref_RRR_high: Optional[float] = Field(default=None, description="Upper reference temperature for RRR measurements.") 

421 T_ref_RRR_low: Optional[float] = Field(default=None, description="Lower reference temperature for RRR measurements.") 

422 k_material_silver: Optional[Union[str, float]] = Field(default=None, description="Thermal conductivity of the silver") 

423 Cv_material_silver: Optional[Union[str, float]] = Field(default=None, description="Material function for specific heat of the silver") 

424 rho_material_silver: Optional[Union[str, float]] = Field(default=None, description="Material function for resistivity of the silver. Constant resistivity can be given as float.") 

425 RRR_silver: Optional[Union[float, List[float]]] = Field(default=None, description="Residual resistivity ratio of the silver. If a list of RRR is provided it needs to match in length the number of matrix regions in the geometry (typically 3)") 

426 T_ref_RRR_high_silver: Optional[float] = Field(default=None, description="Upper reference temperature for RRR measurements for silver.") 

427 T_ref_RRR_low_silver: Optional[float] = Field(default=None, description="Lower reference temperature for RRR measurements for silver.") 

428 rho_material_substrate: Optional[Union[str, float]] = Field(default=None, description="Material function for resistivity of the substrate. Constant resistivity can be given as float.") 

429 k_material_substrate: Optional[Union[str, float]] = Field(default=None, description="Thermal conductivity of the substrate.") 

430 Cv_material_substrate: Optional[Union[str, float]] = Field(default=None, description="Material function for specific heat of the substrate.") 

431 

432class Homogenized(BaseModel): 

433 """ 

434 Level 2: Class for homogenized strand parameters, to be used in the Rutherford cable model 

435 """ 

436 type: Literal["Homogenized"] 

437 

438 # Strand diameter (used in the geometry step) 

439 diameter: Optional[float] = Field(default=None, description="Undeformed round strand diameter. Used in the geometry step if keep_strand_area==true, the strand is deformed while preserving its surface area. Not used otherwise.") 

440 

441 

442# ------------------- Conductors ---------------------------# 

443 

444 

445class Conductor(BaseModel): 

446 """ 

447 Level 1: Class for conductor parameters 

448 """ 

449 

450 version: Optional[str] = None 

451 case: Optional[str] = None 

452 state: Optional[str] = None 

453 cable: Union[Rutherford, Mono, Ribbon, TSTC] = { 

454 "type": "Rutherford" 

455 } # TODO: Busbar, Rope, Roebel, CORC, TSTC, CICC 

456 strand: Union[Round, Rectangular, CC, Homogenized] = {"type": "Round"} # TODO: Tape, WIC 

457 Jc_fit: Union[ConstantJc, Bottura, CUDI1, CUDI3, Summers, Bordini, Nb3Sn_HFM, BSCCO_2212_LBNL, Ic_A_NbTi, ProDefined, Succi_fixed, Fujikura] = { 

458 "type": "CUDI1" 

459 } # TODO: CUDI other numbers? , Roxie?