Coverage for fiqus/data/RegionsModelFiQuS.py: 100%
145 statements
« prev ^ index » next coverage.py v7.4.4, created at 2025-03-11 02:30 +0100
« prev ^ index » next coverage.py v7.4.4, created at 2025-03-11 02:30 +0100
1from pydantic import BaseModel
2from typing import List, Dict, Union, Optional
5class Region(BaseModel):
6 name: Optional[str] = None
7 number: Optional[int] = None
10class Regions(BaseModel):
11 names: Optional[List[str]] = None
12 numbers: Optional[List[int]] = None
15class TwoParBoundaryRegions(BaseModel):
16 names: Optional[List[List[str]]] = None
17 numbers: Optional[List[List[int]]] = None
18 values: Optional[List[List[Union[float, str]]]] = None
21class OneParBoundaryRegions(BaseModel):
22 names: Optional[List[List[str]]] = None
23 numbers: Optional[List[List[int]]] = None
24 value: Optional[List[float]] = None
27class PoweredRegions(BaseModel):
28 names: Optional[List[str]] = None
29 numbers: Optional[List[int]] = None
30 currents: Optional[List[float]] = None
31 sigmas: Optional[List[float]] = None
32 mu_rs: Optional[List[float]] = None
35class InducedRegions(BaseModel):
36 names: Optional[List[str]] = None
37 numbers: Optional[List[int]] = None
38 sigmas: Optional[List[float]] = None
39 mu_rs: Optional[List[float]] = None
42class InsulatorRegions(BaseModel):
43 names: Optional[List[str]] = None
44 numbers: Optional[List[int]] = None
45 sigmas: Optional[List[float]] = None
46 mu_rs: Optional[List[float]] = None
49class IronRegions(BaseModel):
50 names: Optional[List[str]] = None
51 numbers: Optional[List[int]] = None
52 sigmas: Optional[List[float]] = None
53 mu_rs: Optional[List[float]] = None
56class AirRegion(BaseModel):
57 name: Optional[str] = None
58 number: Optional[int] = None
59 sigma: Optional[float] = None
60 mu_r: Optional[float] = None
63class AirFarFieldRegions(BaseModel):
64 names: Optional[List[str]] = None
65 numbers: Optional[List[int]] = None
66 radius_in: Optional[float] = None
67 radius_out: Optional[float] = None
70class NonPermeableSourceRegion(BaseModel):
71 name: Optional[str] = None
72 number: Optional[int] = None
73 sigma: Optional[float] = None
74 mu_r: Optional[float] = None
77class SourceFreeRegion(BaseModel):
78 name: Optional[str] = None
79 number: Optional[int] = None
80 sigma: Optional[float] = None
81 mu_r: Optional[float] = None
84class Powered(BaseModel):
85 vol: PoweredRegions = PoweredRegions() # volume region
86 vol_in: Region = Region() # input terminal volume region
87 vol_out: Region = Region() # input terminal volume region
88 conductors: Dict[str, List[str]] = {} # conductor types
89 surf: Regions = Regions() # surface region
90 surf_th: Regions = Regions() # surface region
91 surf_in: Regions = Regions() # input terminal surface region
92 surf_out: Regions = Regions() # output terminal surface region
93 cochain: Regions = Regions() # winding cochain (cut)
94 curve: Regions = Regions() # powered volumes lines
97class Induced(BaseModel):
98 vol: InducedRegions = InducedRegions() # volume region
99 surf_th: Regions = Regions() # surface region
100 surf_in: Regions = Regions() # input terminal surface region
101 surf_out: Regions = Regions() # output terminal surface region
102 cochain: Regions = Regions() # winding cochain (cut)
105class Insulator(BaseModel):
106 vol: InsulatorRegions = InsulatorRegions() # volume region
107 surf: Regions = Regions() # surface region
108 curve: Regions = Regions() # curve region
111class Iron(BaseModel):
112 vol: IronRegions = IronRegions() # volume region
113 surf: Regions = Regions() # surface region
116class Air(BaseModel):
117 vol: AirRegion = AirRegion() # volume region
118 surf: Region = Region() # surface region
119 line: Region = Region() # line region
120 point: Regions = Regions() # point region
121 cochain: Regions = Regions() # air cochain (cut)
124class AirFarField(BaseModel):
125 vol: AirFarFieldRegions = AirFarFieldRegions() # volume region
126 surf: Region = Region() # surface region
129class NonPermeableSource(BaseModel):
130 vol: NonPermeableSourceRegion = NonPermeableSourceRegion() # volume region
131 surf: Region = Region() # surface region
134class SourceFree(BaseModel):
135 vol: SourceFreeRegion = SourceFreeRegion() # volume region
136 surf: Region = Region() # surface region
139class RobinCondition(BaseModel):
140 bc: TwoParBoundaryRegions = TwoParBoundaryRegions()
141 groups: Dict[str, List[int]] = {}
144class NeumannCondition(BaseModel):
145 bc: OneParBoundaryRegions = OneParBoundaryRegions()
146 groups: Dict[str, List[int]] = {}
149class DirichletCondition(BaseModel):
150 bc: OneParBoundaryRegions = OneParBoundaryRegions()
151 groups: Dict[str, List[int]] = {}
154class ThermalBoundaryConditions(BaseModel):
155 temperature: DirichletCondition = DirichletCondition()
156 heat_flux: NeumannCondition = NeumannCondition()
157 cooling: RobinCondition = RobinCondition()
160class SymmetryBoundaryConditions(BaseModel):
161 normal_free: Region = Region()
162 tangential_free: Region = Region()
165class BoundaryConditions(BaseModel):
166 thermal: ThermalBoundaryConditions = ThermalBoundaryConditions()
167 symmetry: SymmetryBoundaryConditions = SymmetryBoundaryConditions()
170class InsulationType(BaseModel):
171 layers_number: List[int] = []
172 thin_shells: List[List[int]] = []
173 layers_material: List[List[str]] = []
174 thicknesses: List[List[float]] = []
175 label: List[List[Union[int, None]]] = (
176 []
177 ) # useful to indicate which quench heater a SS element refers to
180class ThinShell(BaseModel):
181 groups: Dict[str, List[int]] = {}
182 mid_turns_layers_poles: Optional[List[int]] = None
183 second_group_is_next: Dict[str, List[int]] = {}
184 normals_directed: Dict[str, List[int]] = {}
185 insulation_types: InsulationType = InsulationType()
186 quench_heaters: InsulationType = InsulationType()
189class PostProc(BaseModel):
190 vol: Regions = Regions() # postprocessing volumes general
191 surf: Regions = Regions() # postprocessing volumes general
192 line: Regions = Regions() # postprocessing volumes general
193 point: Regions = Regions() # postprocessing volumes general
196class RegionsModel(BaseModel):
197 powered: Dict[str, Powered] = {}
198 induced: Dict[str, Induced] = {}
199 insulator: Insulator = Insulator()
200 iron: Iron = Iron()
201 air: Air = Air()
202 air_far_field: AirFarField = AirFarField()
203 thin_shells: ThinShell = ThinShell()
204 projection_points: Region = Region()
205 boundaries: BoundaryConditions = BoundaryConditions()
206 postproc_th: PostProc = PostProc()
207 postproc_em: PostProc = PostProc()
210# if __name__ == "__main__":
211# write = True
212# read = False
213#
214# def read_regions(regions_file_name):
215# with open(regions_file_name, 'r') as stream:
216# yaml_str = ruamel.yaml.safe_load(stream)
217# return RegionsModel(**yaml_str)
218#
219# def flist(x):
220# retval = ruamel.yaml.comments.CommentedSeq(x)
221# retval.fa.set_flow_style() # fa -> format attribute
222# return retval
223#
224# if write:
225# model = RegionsModel()
226# model.powered.vol = [1, 2]
227# data_dict = model.dict()
228# yaml = ruamel.yaml.YAML()
229# yaml.default_flow_style = False
230# yaml.emitter.alt_null = 'Null'
231#
232# def my_represent_none(self, data):
233# return self.represent_scalar('tag:yaml.org,2002:null', 'null')
234#
235# yaml.representer.add_representer(type(None), my_represent_none)
236# with open('cct_regions_empty.yaml', 'w') as yaml_file:
237# yaml.dump(model.dict(), yaml_file)
238# if read:
239# regions_file_name = 'cct1_regions_manual.yaml'
240# regions = read_regions(regions_file_name)