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

1from pydantic import BaseModel 

2from typing import (List, Dict, Optional) 

3 

4 

5class Region(BaseModel): 

6 name: Optional[str] = None 

7 number: Optional[int] = None 

8 

9 

10class Regions(BaseModel): 

11 names: Optional[List[str]] = None 

12 numbers: Optional[List[int]] = None 

13 

14 

15class TwoParBoundaryRegions(BaseModel): 

16 names: Optional[List[List[str]]] = None 

17 numbers: Optional[List[List[int]]] = None 

18 values: Optional[List[List[float]]] = None 

19 

20 

21class OneParBoundaryRegions(BaseModel): 

22 names: Optional[List[List[str]]] = None 

23 numbers: Optional[List[List[int]]] = None 

24 value: Optional[List[float]] = None 

25 

26 

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 

33 

34 

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 

40 

41 

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 

47 

48 

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 

54 

55 

56class AirRegion(BaseModel): 

57 name: Optional[str] = None 

58 number: Optional[int] = None 

59 sigma: Optional[float] = None 

60 mu_r: Optional[float] = None 

61 

62 

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 

68 

69 

70class NonPermeableSourceRegion(BaseModel): 

71 name: Optional[str] = None 

72 number: Optional[int] = None 

73 sigma: Optional[float] = None 

74 mu_r: Optional[float] = None 

75 

76 

77class SourceFreeRegion(BaseModel): 

78 name: Optional[str] = None 

79 number: Optional[int] = None 

80 sigma: Optional[float] = None 

81 mu_r: Optional[float] = None 

82 

83 

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 

95 

96 

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) 

102 

103 

104class Insulator(BaseModel): 

105 vol: InsulatorRegions = InsulatorRegions() # volume region 

106 surf: Regions = Regions() # surface region 

107 curve: Regions = Regions() # curve region 

108 

109 

110class Iron(BaseModel): 

111 vol: IronRegions = IronRegions() # volume region 

112 surf: Regions = Regions() # surface region 

113 

114 

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) 

121 

122 

123class AirFarField(BaseModel): 

124 vol: AirFarFieldRegions = AirFarFieldRegions() # volume region 

125 surf: Region = Region() # surface region 

126 

127 

128class NonPermeableSource(BaseModel): 

129 vol: NonPermeableSourceRegion = NonPermeableSourceRegion() # volume region 

130 surf: Region = Region() # surface region 

131 

132 

133class SourceFree(BaseModel): 

134 vol: SourceFreeRegion = SourceFreeRegion() # volume region 

135 surf: Region = Region() # surface region 

136 

137 

138class RobinCondition(BaseModel): 

139 bc: TwoParBoundaryRegions = TwoParBoundaryRegions() 

140 groups: Dict[str, List[int]] = {} 

141 

142 

143class NeumannCondition(BaseModel): 

144 bc: OneParBoundaryRegions = OneParBoundaryRegions() 

145 groups: Dict[str, List[int]] = {} 

146 

147 

148class DirichletCondition(BaseModel): 

149 bc: OneParBoundaryRegions = OneParBoundaryRegions() 

150 groups: Dict[str, List[int]] = {} 

151 

152 

153class ThermalBoundaryConditions(BaseModel): 

154 temperature: DirichletCondition = DirichletCondition() 

155 heat_flux: NeumannCondition = NeumannCondition() 

156 cooling: RobinCondition = RobinCondition() 

157 

158 

159class SymmetryBoundaryConditions(BaseModel): 

160 normal_free: Region = Region() 

161 tangential_free: Region = Region() 

162 

163 

164class BoundaryConditions(BaseModel): 

165 thermal: ThermalBoundaryConditions = ThermalBoundaryConditions() 

166 symmetry: SymmetryBoundaryConditions = SymmetryBoundaryConditions() 

167 

168 

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

174 

175 

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() 

183 

184 

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() 

194 

195 

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)