Source code for roxieapi.cadata.StrandDefinition
import math
from pydantic.dataclasses import dataclass
from roxieapi.cadata.Definition import Definition
[docs]
@dataclass
class StrandDefinition(Definition):
"""Class for strand definition.
Attributes:
d_strand (float): The strand diameter (mm).
f_cu_nocu (float): The Copper to superconductor ratio.
rrr (float): The Residual Resistivity ratio.
temp_ref (float): The Reference Temperature (K) for Bref. This value is never used in the code and serves
only for reference for Bref and Jc@BrTr.
b_ref (float): The Reference Field for the definition of a linear approximation of the Jc curve.
j_c_at_b_ref_t_ref (float): The Critical current density at Bref for the definition of a linear approximation
of the Jc curve. (LINMARG)
dj_c_over_db (float): dJc/dB at Bref and Tref for the definition of a linear approximation of the Jc curve.
(LINMARG)
"""
d_strand: float = 0.0
f_cu_nocu: float = 0.0
rrr: float = 0.0
temp_ref: float = 0.0
b_ref: float = 0.0
j_c_at_b_ref_t_ref: float = 0.0
dj_c_over_db: float = 0.0
[docs]
@staticmethod
def get_magnum_to_roxie_dct() -> dict:
return {
"name": "Name",
"d_strand": "diam.",
"f_cu_nocu": "cu/sc",
"rrr": "RRR",
"temp_ref": "Tref",
"b_ref": "Bref",
"j_c_at_b_ref_t_ref": "Jc@BrTr",
"dj_c_over_db": "dJc/dB",
"comment": "Comment",
}
[docs]
def compute_surface_cu(self):
"""Method computing copper surface of a strand as S = f_co * pi * d_strand^2 / 4
:return: a copper surface of a strand in mm^2
"""
return self.compute_f_cu() * self.compute_surface()
[docs]
def compute_surface_nocu(self):
"""Method computing non-copper surface of a strand as S = f_nocu * pi * d_strand^2 / 4
:return: a non-copper surface of a strand in mm^2
"""
return self.compute_f_nocu() * self.compute_surface()
[docs]
def compute_f_nocu(self):
"""Method fraction of non-copper in a strand
:return: a fraction of non-copper in a strand (no unit)
"""
return 1 / (1 + self.f_cu_nocu)
[docs]
def compute_f_cu(self):
"""Method fraction of copper in a strand
:return: a fraction of copper in a strand (no unit)
"""
return self.f_cu_nocu / (1 + self.f_cu_nocu)
[docs]
def compute_surface(self):
"""Method computing surface of a strand as S = pi * d_strand^2 / 4
:return: a surface of a strand in mm^2
"""
return math.pi * self.d_strand**2 / 4