Coverage for fiqus/data/RegionsModelFiQuS.py: 100%
135 statements
« prev ^ index » next coverage.py v6.4.4, created at 2024-05-20 03:24 +0200
« prev ^ index » next coverage.py v6.4.4, created at 2024-05-20 03:24 +0200
1from pydantic import BaseModel
2from typing import (List, Dict, 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[float]]] = 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_in: Regions = Regions() # input terminal surface region
100 surf_out: Regions = Regions() # output terminal surface region
101 cochain: Regions = Regions() # winding cochain (cut)
104class Insulator(BaseModel):
105 vol: InsulatorRegions = InsulatorRegions() # volume region
106 surf: Regions = Regions() # surface region
107 curve: Regions = Regions() # curve region
110class Iron(BaseModel):
111 vol: IronRegions = IronRegions() # volume region
112 surf: Regions = Regions() # surface region
115class Air(BaseModel):
116 vol: AirRegion = AirRegion() # volume region
117 surf: Region = Region() # surface region
118 line: Region = Region() # line region
119 point: Regions = Regions() # point region
120 cochain: Regions = Regions() # air cochain (cut)
123class AirFarField(BaseModel):
124 vol: AirFarFieldRegions = AirFarFieldRegions() # volume region
125 surf: Region = Region() # surface region
128class NonPermeableSource(BaseModel):
129 vol: NonPermeableSourceRegion = NonPermeableSourceRegion() # volume region
130 surf: Region = Region() # surface region
133class SourceFree(BaseModel):
134 vol: SourceFreeRegion = SourceFreeRegion() # volume region
135 surf: Region = Region() # surface region
138class RobinCondition(BaseModel):
139 bc: TwoParBoundaryRegions = TwoParBoundaryRegions()
140 groups: Dict[str, List[int]] = {}
143class NeumannCondition(BaseModel):
144 bc: OneParBoundaryRegions = OneParBoundaryRegions()
145 groups: Dict[str, List[int]] = {}
148class DirichletCondition(BaseModel):
149 bc: OneParBoundaryRegions = OneParBoundaryRegions()
150 groups: Dict[str, List[int]] = {}
153class ThermalBoundaryConditions(BaseModel):
154 temperature: DirichletCondition = DirichletCondition()
155 heat_flux: NeumannCondition = NeumannCondition()
156 cooling: RobinCondition = RobinCondition()
159class SymmetryBoundaryConditions(BaseModel):
160 normal_free: Region = Region()
161 tangential_free: Region = Region()
164class BoundaryConditions(BaseModel):
165 thermal: ThermalBoundaryConditions = ThermalBoundaryConditions()
166 symmetry: SymmetryBoundaryConditions = SymmetryBoundaryConditions()
169class InsulationType(BaseModel):
170 layers_number: List[int] = []
171 thin_shells: List[List[int]] = []
172 layers_material: List[List[str]] = []
173 thicknesses: List[List[float]] = []
176class ThinShell(BaseModel):
177 groups: Dict[str, List[int]] = {}
178 mid_turns_layers_poles: Optional[List[int]] = None
179 second_group_is_next: Dict[str, List[int]] = {}
180 normals_directed: Dict[str, List[int]] = {}
181 insulation_types: InsulationType = InsulationType()
182 quench_heaters: InsulationType = InsulationType()
185class RegionsModel(BaseModel):
186 powered: Powered = Powered()
187 induced: Induced = Induced()
188 insulator: Insulator = Insulator()
189 iron: Iron = Iron()
190 air: Air = Air()
191 air_far_field: AirFarField = AirFarField()
192 thin_shells: ThinShell = ThinShell()
193 boundaries: BoundaryConditions = BoundaryConditions()
196# if __name__ == "__main__":
197# write = True
198# read = False
199#
200# def read_regions(regions_file_name):
201# with open(regions_file_name, 'r') as stream:
202# yaml_str = ruamel.yaml.safe_load(stream)
203# return RegionsModel(**yaml_str)
204#
205# def flist(x):
206# retval = ruamel.yaml.comments.CommentedSeq(x)
207# retval.fa.set_flow_style() # fa -> format attribute
208# return retval
209#
210# if write:
211# model = RegionsModel()
212# model.powered.vol = [1, 2]
213# data_dict = model.dict()
214# yaml = ruamel.yaml.YAML()
215# yaml.default_flow_style = False
216# yaml.emitter.alt_null = 'Null'
217#
218# def my_represent_none(self, data):
219# return self.represent_scalar('tag:yaml.org,2002:null', 'null')
220#
221# yaml.representer.add_representer(type(None), my_represent_none)
222# with open('cct_regions_empty.yaml', 'w') as yaml_file:
223# yaml.dump(model.dict(), yaml_file)
224# if read:
225# regions_file_name = 'cct1_regions_manual.yaml'
226# regions = read_regions(regions_file_name)