fiqus 2025.12.0__py3-none-any.whl → 2026.1.1__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- fiqus/MainFiQuS.py +4 -8
- fiqus/data/DataConductor.py +108 -11
- fiqus/data/DataFiQuS.py +2 -1
- fiqus/data/DataFiQuSConductorAC_CC.py +345 -0
- fiqus/data/DataFiQuSConductorAC_Strand.py +3 -3
- fiqus/data/DataFiQuSMultipole.py +363 -165
- fiqus/data/DataModelCommon.py +30 -15
- fiqus/data/DataMultipole.py +33 -10
- fiqus/data/DataWindingsCCT.py +37 -37
- fiqus/data/RegionsModelFiQuS.py +1 -1
- fiqus/geom_generators/GeometryConductorAC_CC.py +1906 -0
- fiqus/geom_generators/GeometryMultipole.py +751 -54
- fiqus/getdp_runners/RunGetdpConductorAC_CC.py +123 -0
- fiqus/getdp_runners/RunGetdpMultipole.py +181 -31
- fiqus/mains/MainConductorAC_CC.py +148 -0
- fiqus/mains/MainMultipole.py +109 -17
- fiqus/mesh_generators/MeshCCT.py +209 -209
- fiqus/mesh_generators/MeshConductorAC_CC.py +1305 -0
- fiqus/mesh_generators/MeshMultipole.py +938 -263
- fiqus/parsers/ParserCOND.py +2 -1
- fiqus/parsers/ParserDAT.py +16 -16
- fiqus/parsers/ParserGetDPOnSection.py +212 -212
- fiqus/parsers/ParserGetDPTimeTable.py +134 -134
- fiqus/parsers/ParserMSH.py +53 -53
- fiqus/parsers/ParserRES.py +142 -142
- fiqus/plotters/PlotPythonCCT.py +133 -133
- fiqus/plotters/PlotPythonMultipole.py +18 -18
- fiqus/post_processors/PostProcessAC_CC.py +65 -0
- fiqus/post_processors/PostProcessMultipole.py +16 -6
- fiqus/pre_processors/PreProcessCCT.py +175 -175
- fiqus/pro_assemblers/ProAssembler.py +3 -3
- fiqus/pro_material_functions/ironBHcurves.pro +246 -246
- fiqus/pro_templates/combined/CAC_CC_template.pro +542 -0
- fiqus/pro_templates/combined/CC_Module.pro +1213 -0
- fiqus/pro_templates/combined/Multipole_template.pro +2738 -1338
- fiqus/pro_templates/combined/TSA_materials.pro +102 -2
- fiqus/pro_templates/combined/materials.pro +54 -3
- fiqus/utils/Utils.py +18 -25
- fiqus/utils/update_data_settings.py +1 -1
- {fiqus-2025.12.0.dist-info → fiqus-2026.1.1.dist-info}/METADATA +81 -77
- {fiqus-2025.12.0.dist-info → fiqus-2026.1.1.dist-info}/RECORD +52 -44
- {fiqus-2025.12.0.dist-info → fiqus-2026.1.1.dist-info}/WHEEL +1 -1
- tests/test_geometry_generators.py +47 -30
- tests/test_mesh_generators.py +69 -30
- tests/test_solvers.py +67 -29
- tests/utils/fiqus_test_classes.py +396 -147
- tests/utils/generate_reference_files_ConductorAC.py +57 -57
- tests/utils/helpers.py +76 -1
- /fiqus/pro_templates/combined/{ConductorACRutherford_template.pro → CAC_Rutherford_template.pro} +0 -0
- /fiqus/pro_templates/combined/{ConductorAC_template.pro → CAC_Strand_template.pro} +0 -0
- {fiqus-2025.12.0.dist-info → fiqus-2026.1.1.dist-info/licenses}/LICENSE.txt +0 -0
- {fiqus-2025.12.0.dist-info → fiqus-2026.1.1.dist-info}/top_level.txt +0 -0
tests/test_solvers.py
CHANGED
|
@@ -85,12 +85,12 @@ class TestSolvers(FiQuSSolverTests):
|
|
|
85
85
|
# Compare the pro files:
|
|
86
86
|
pro_file = self.get_path_to_generated_file(
|
|
87
87
|
data_model=data_model,
|
|
88
|
-
|
|
88
|
+
model_name=model_name,
|
|
89
89
|
file_extension="pro",
|
|
90
90
|
)
|
|
91
91
|
reference_pro_file = self.get_path_to_reference_file(
|
|
92
92
|
data_model=data_model,
|
|
93
|
-
|
|
93
|
+
model_name=model_name,
|
|
94
94
|
file_extension="pro",
|
|
95
95
|
)
|
|
96
96
|
self.compare_text_files(pro_file, reference_pro_file)
|
|
@@ -99,12 +99,12 @@ class TestSolvers(FiQuSSolverTests):
|
|
|
99
99
|
if solve_type in ["electromagnetic", "weaklyCoupled", "stronglyCoupled"]:
|
|
100
100
|
pos_file = self.get_path_to_generated_file(
|
|
101
101
|
data_model=data_model,
|
|
102
|
-
|
|
102
|
+
model_name="MagneticField-DefaultFormat",
|
|
103
103
|
file_extension="pos",
|
|
104
104
|
)
|
|
105
105
|
reference_pos_file = self.get_path_to_reference_file(
|
|
106
106
|
data_model=data_model,
|
|
107
|
-
|
|
107
|
+
model_name="MagneticField-DefaultFormat",
|
|
108
108
|
file_extension="pos",
|
|
109
109
|
)
|
|
110
110
|
self.compare_pos_files(pos_file, reference_pos_file, rel_tolerance=1e-3, abs_tolerance=1e-3)
|
|
@@ -112,12 +112,12 @@ class TestSolvers(FiQuSSolverTests):
|
|
|
112
112
|
if solve_type in ["weaklyCoupled", "stronglyCoupled", "thermal"]:
|
|
113
113
|
pos_file = self.get_path_to_generated_file(
|
|
114
114
|
data_model=data_model,
|
|
115
|
-
|
|
115
|
+
model_name="Temperature-DefaultFormat",
|
|
116
116
|
file_extension="pos",
|
|
117
117
|
)
|
|
118
118
|
reference_pos_file = self.get_path_to_reference_file(
|
|
119
119
|
data_model=data_model,
|
|
120
|
-
|
|
120
|
+
model_name="Temperature-DefaultFormat",
|
|
121
121
|
file_extension="pos",
|
|
122
122
|
)
|
|
123
123
|
self.compare_pos_files(pos_file, reference_pos_file, rel_tolerance=1e-3, abs_tolerance=1e-3)
|
|
@@ -152,12 +152,12 @@ class TestSolvers(FiQuSSolverTests):
|
|
|
152
152
|
# Compare the pro files:
|
|
153
153
|
pro_file = self.get_path_to_generated_file(
|
|
154
154
|
data_model=data_model,
|
|
155
|
-
|
|
155
|
+
model_name=model_name,
|
|
156
156
|
file_extension="pro",
|
|
157
157
|
)
|
|
158
158
|
reference_pro_file = self.get_path_to_reference_file(
|
|
159
159
|
data_model=data_model,
|
|
160
|
-
|
|
160
|
+
model_name=model_name,
|
|
161
161
|
file_extension="pro",
|
|
162
162
|
)
|
|
163
163
|
# This makes no sense as long as the development on the Strand model pro-template is ongoing ...
|
|
@@ -167,12 +167,12 @@ class TestSolvers(FiQuSSolverTests):
|
|
|
167
167
|
# Compare the magnetic flux density files:
|
|
168
168
|
pos_file = self.get_path_to_generated_file(
|
|
169
169
|
data_model=data_model,
|
|
170
|
-
|
|
170
|
+
model_name="b_Omega",
|
|
171
171
|
file_extension="pos",
|
|
172
172
|
)
|
|
173
173
|
reference_pos_file = self.get_path_to_reference_file(
|
|
174
174
|
data_model=data_model,
|
|
175
|
-
|
|
175
|
+
model_name="b_Omega",
|
|
176
176
|
file_extension="pos",
|
|
177
177
|
)
|
|
178
178
|
self.compare_pos_files(pos_file, reference_pos_file, rel_tolerance=1e-3, abs_tolerance=1e-10)
|
|
@@ -180,12 +180,12 @@ class TestSolvers(FiQuSSolverTests):
|
|
|
180
180
|
# Compare the current density files:
|
|
181
181
|
pos_file = self.get_path_to_generated_file(
|
|
182
182
|
data_model=data_model,
|
|
183
|
-
|
|
183
|
+
model_name="j_OmegaC",
|
|
184
184
|
file_extension="pos",
|
|
185
185
|
)
|
|
186
186
|
reference_pos_file = self.get_path_to_reference_file(
|
|
187
187
|
data_model=data_model,
|
|
188
|
-
|
|
188
|
+
model_name="j_OmegaC",
|
|
189
189
|
file_extension="pos",
|
|
190
190
|
)
|
|
191
191
|
self.compare_pos_files(pos_file, reference_pos_file, rel_tolerance=1e-3, abs_tolerance=1e-10)
|
|
@@ -218,12 +218,12 @@ class TestSolvers(FiQuSSolverTests):
|
|
|
218
218
|
# Compare the current density files:
|
|
219
219
|
pos_file = self.get_path_to_generated_file(
|
|
220
220
|
data_model=data_model,
|
|
221
|
-
|
|
221
|
+
model_name="jz",
|
|
222
222
|
file_extension="pos",
|
|
223
223
|
)
|
|
224
224
|
reference_pos_file = self.get_path_to_reference_file(
|
|
225
225
|
data_model=data_model,
|
|
226
|
-
|
|
226
|
+
model_name="jz",
|
|
227
227
|
file_extension="pos",
|
|
228
228
|
)
|
|
229
229
|
self.compare_pos_files(pos_file, reference_pos_file, rel_tolerance=1e-3, abs_tolerance=1E-10)
|
|
@@ -231,16 +231,53 @@ class TestSolvers(FiQuSSolverTests):
|
|
|
231
231
|
# Compare the power loss files:
|
|
232
232
|
pos_file = self.get_path_to_generated_file(
|
|
233
233
|
data_model=data_model,
|
|
234
|
-
|
|
234
|
+
model_name="m",
|
|
235
235
|
file_extension="pos",
|
|
236
236
|
)
|
|
237
237
|
reference_pos_file = self.get_path_to_reference_file(
|
|
238
238
|
data_model=data_model,
|
|
239
|
-
|
|
239
|
+
model_name="m",
|
|
240
240
|
file_extension="pos",
|
|
241
241
|
)
|
|
242
242
|
self.compare_pos_files(pos_file, reference_pos_file, rel_tolerance=1e-3, abs_tolerance=1E-10)
|
|
243
243
|
|
|
244
|
+
def test_ConductorAC_CC(self):
|
|
245
|
+
"""
|
|
246
|
+
Checks if ConductorAC Coated Conductor solver works correctly by comparing the results to the
|
|
247
|
+
reference results that were checked manually.
|
|
248
|
+
"""
|
|
249
|
+
if os.getenv("CERNGETDP_VERSION_CAC_CC") is not None:
|
|
250
|
+
os_name = platform.system()
|
|
251
|
+
|
|
252
|
+
if os_name == "Linux":
|
|
253
|
+
self.getdp_path = linux_getdp_prefix_path / Path(f"cac_cc/bin/getdp_{os.getenv('CERNGETDP_VERSION_CAC_CC')}")
|
|
254
|
+
else:
|
|
255
|
+
self.getdp_path = windows_getdp_prefix_path / Path(f"cac_cc/getdp_{os.getenv('CERNGETDP_VERSION_CAC_CC')}.exe")
|
|
256
|
+
else:
|
|
257
|
+
print("CERNGETDP_VERSION_CAC_CC is not set. Using default getdp path from data settings.")
|
|
258
|
+
|
|
259
|
+
model_names = [
|
|
260
|
+
"TEST_CAC_CC",
|
|
261
|
+
]
|
|
262
|
+
for model_name in model_names:
|
|
263
|
+
with self.subTest(model_name=model_name):
|
|
264
|
+
data_model: FDM = self.get_data_model(model_name)
|
|
265
|
+
|
|
266
|
+
self.solve(data_model, model_name)
|
|
267
|
+
|
|
268
|
+
# Compare the current density files:
|
|
269
|
+
pos_file = self.get_path_to_generated_file(
|
|
270
|
+
data_model=data_model,
|
|
271
|
+
model_name="last_magnetic_field",
|
|
272
|
+
file_extension="pos",
|
|
273
|
+
)
|
|
274
|
+
reference_pos_file = self.get_path_to_reference_file(
|
|
275
|
+
data_model=data_model,
|
|
276
|
+
model_name="last_magnetic_field",
|
|
277
|
+
file_extension="pos",
|
|
278
|
+
)
|
|
279
|
+
self.compare_pos_files(pos_file, reference_pos_file, rel_tolerance=1e-2, abs_tolerance=1E-10)
|
|
280
|
+
|
|
244
281
|
def test_HomogenizedConductor(self):
|
|
245
282
|
"""
|
|
246
283
|
Checks if HomogenizedConductor solver works correctly by comparing the results to the
|
|
@@ -268,12 +305,12 @@ class TestSolvers(FiQuSSolverTests):
|
|
|
268
305
|
# Compare the current density files:
|
|
269
306
|
pos_file = self.get_path_to_generated_file(
|
|
270
307
|
data_model=data_model,
|
|
271
|
-
|
|
308
|
+
model_name="js",
|
|
272
309
|
file_extension="pos",
|
|
273
310
|
)
|
|
274
311
|
reference_pos_file = self.get_path_to_reference_file(
|
|
275
312
|
data_model=data_model,
|
|
276
|
-
|
|
313
|
+
model_name="js",
|
|
277
314
|
file_extension="pos",
|
|
278
315
|
)
|
|
279
316
|
self.compare_pos_files(pos_file, reference_pos_file, rel_tolerance=1e-3, abs_tolerance=1E-10)
|
|
@@ -281,12 +318,12 @@ class TestSolvers(FiQuSSolverTests):
|
|
|
281
318
|
# Compare the power loss files:
|
|
282
319
|
pos_file = self.get_path_to_generated_file(
|
|
283
320
|
data_model=data_model,
|
|
284
|
-
|
|
321
|
+
model_name="p_tot",
|
|
285
322
|
file_extension="pos",
|
|
286
323
|
)
|
|
287
324
|
reference_pos_file = self.get_path_to_reference_file(
|
|
288
325
|
data_model=data_model,
|
|
289
|
-
|
|
326
|
+
model_name="p_tot",
|
|
290
327
|
file_extension="pos",
|
|
291
328
|
)
|
|
292
329
|
self.compare_pos_files(pos_file, reference_pos_file, rel_tolerance=1e-3, abs_tolerance=1E-10)
|
|
@@ -314,6 +351,7 @@ class TestSolvers(FiQuSSolverTests):
|
|
|
314
351
|
"TEST_MULTIPOLE_SMC_TSA",
|
|
315
352
|
"TEST_MULTIPOLE_SMC_REF",
|
|
316
353
|
"TEST_MULTIPOLE_4COND_TSA",
|
|
354
|
+
"TEST_MULTIPOLE_FALCOND_C_TSA_COLLAR_POLE"
|
|
317
355
|
]
|
|
318
356
|
for model_name in model_names:
|
|
319
357
|
with self.subTest(model_name=model_name):
|
|
@@ -324,26 +362,26 @@ class TestSolvers(FiQuSSolverTests):
|
|
|
324
362
|
# Compare the pro files:
|
|
325
363
|
pro_file = self.get_path_to_generated_file(
|
|
326
364
|
data_model=data_model,
|
|
327
|
-
|
|
365
|
+
model_name=model_name,
|
|
328
366
|
file_extension="pro",
|
|
329
367
|
)
|
|
330
368
|
reference_pro_file = self.get_path_to_reference_file(
|
|
331
369
|
data_model=data_model,
|
|
332
|
-
|
|
370
|
+
model_name=model_name,
|
|
333
371
|
file_extension="pro",
|
|
334
372
|
)
|
|
335
373
|
|
|
336
|
-
self.compare_text_files(pro_file, reference_pro_file, exclude_lines_keywords=["NameOfMesh"], exclude_first_n_lines=1)
|
|
374
|
+
self.compare_text_files(pro_file, reference_pro_file, exclude_lines_keywords=["NameOfMesh", "Include"], exclude_first_n_lines=1)
|
|
337
375
|
|
|
338
376
|
# Compare the magnetic flux density files:
|
|
339
377
|
pos_file = self.get_path_to_generated_file(
|
|
340
378
|
data_model=data_model,
|
|
341
|
-
|
|
379
|
+
model_name="b_Omega",
|
|
342
380
|
file_extension="pos",
|
|
343
381
|
)
|
|
344
382
|
reference_pos_file = self.get_path_to_reference_file(
|
|
345
383
|
data_model=data_model,
|
|
346
|
-
|
|
384
|
+
model_name="b_Omega",
|
|
347
385
|
file_extension="pos",
|
|
348
386
|
)
|
|
349
387
|
self.compare_pos_files(pos_file, reference_pos_file, rel_tolerance=1e-3, abs_tolerance=1e-2)
|
|
@@ -351,12 +389,12 @@ class TestSolvers(FiQuSSolverTests):
|
|
|
351
389
|
# Compare the temperature files:
|
|
352
390
|
pos_file = self.get_path_to_generated_file(
|
|
353
391
|
data_model=data_model,
|
|
354
|
-
|
|
392
|
+
model_name="T_Omega_c",
|
|
355
393
|
file_extension="pos",
|
|
356
394
|
)
|
|
357
395
|
reference_pos_file = self.get_path_to_reference_file(
|
|
358
396
|
data_model=data_model,
|
|
359
|
-
|
|
397
|
+
model_name="T_Omega_c",
|
|
360
398
|
file_extension="pos",
|
|
361
399
|
)
|
|
362
400
|
self.compare_pos_files(pos_file, reference_pos_file, rel_tolerance=1e-3, abs_tolerance=1e-2)
|
|
@@ -364,12 +402,12 @@ class TestSolvers(FiQuSSolverTests):
|
|
|
364
402
|
# Compare the solve yaml files
|
|
365
403
|
solve_file = self.get_path_to_generated_file(
|
|
366
404
|
data_model=data_model,
|
|
367
|
-
|
|
405
|
+
model_name="solve",
|
|
368
406
|
file_extension="yaml",
|
|
369
407
|
)
|
|
370
408
|
reference_solve_file = self.get_path_to_reference_file(
|
|
371
409
|
data_model=data_model,
|
|
372
|
-
|
|
410
|
+
model_name="solve",
|
|
373
411
|
file_extension="yaml",
|
|
374
412
|
)
|
|
375
413
|
self.compare_json_or_yaml_files(solve_file, reference_solve_file)
|