fiqus 2024.5.2__py3-none-any.whl → 2024.7.0__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.
Files changed (34) hide show
  1. fiqus/MainFiQuS.py +15 -5
  2. fiqus/data/DataConductor.py +301 -0
  3. fiqus/data/DataFiQuS.py +5 -2
  4. fiqus/data/DataFiQuSConductor.py +84 -0
  5. fiqus/data/DataFiQuSConductorAC_Strand.py +565 -0
  6. fiqus/data/DataFiQuSPancake3D.py +149 -39
  7. fiqus/data/RegionsModelFiQuS.py +4 -2
  8. fiqus/geom_generators/GeometryCCT.py +19 -17
  9. fiqus/geom_generators/GeometryConductorAC_Strand.py +1391 -0
  10. fiqus/getdp_runners/RunGetdpConductorAC_Strand.py +202 -0
  11. fiqus/getdp_runners/RunGetdpMultipole.py +4 -4
  12. fiqus/mains/MainConductorAC_Strand.py +133 -0
  13. fiqus/mesh_generators/MeshCCT.py +8 -8
  14. fiqus/mesh_generators/MeshConductorAC_Strand.py +657 -0
  15. fiqus/mesh_generators/MeshMultipole.py +11 -8
  16. fiqus/mesh_generators/MeshPancake3D.py +20 -18
  17. fiqus/plotters/PlotPythonConductorAC.py +855 -0
  18. fiqus/post_processors/PostProcessConductorAC.py +49 -0
  19. fiqus/pro_assemblers/ProAssembler.py +4 -3
  20. fiqus/pro_templates/combined/CCT_template.pro +25 -25
  21. fiqus/pro_templates/combined/ConductorAC_template.pro +1025 -0
  22. fiqus/pro_templates/combined/Multipole_template.pro +5 -5
  23. fiqus/pro_templates/combined/Pancake3D_template.pro +131 -46
  24. fiqus/pro_templates/combined/materials.pro +13 -9
  25. {fiqus-2024.5.2.dist-info → fiqus-2024.7.0.dist-info}/METADATA +2 -1
  26. {fiqus-2024.5.2.dist-info → fiqus-2024.7.0.dist-info}/RECORD +34 -22
  27. {fiqus-2024.5.2.dist-info → fiqus-2024.7.0.dist-info}/WHEEL +1 -1
  28. tests/test_geometry_generators.py +41 -0
  29. tests/test_mesh_generators.py +45 -0
  30. tests/test_solvers.py +52 -0
  31. tests/utils/fiqus_test_classes.py +42 -6
  32. tests/utils/generate_reference_files_ConductorAC.py +57 -0
  33. tests/utils/generate_reference_files_Pancake3D.py +92 -0
  34. {fiqus-2024.5.2.dist-info → fiqus-2024.7.0.dist-info}/top_level.txt +0 -0
@@ -5,11 +5,11 @@ Group {
5
5
  // Physical regions:
6
6
  <<rm.air.vol.name>> = Region[ <<rm.air.vol.number>> ]; // Air
7
7
  <<rm.air_far_field.vol.names[0]>> = Region[ <<rm.air_far_field.vol.numbers[0]>> ]; // AirInf
8
- {% for name, number in zip(rm.powered.vol.names, rm.powered.vol.numbers) %}
8
+ {% for name, number in zip(rm.powered['Multipole'].vol.names, rm.powered['Multipole'].vol.numbers) %}
9
9
  <<name>> = Region[ <<number>> ];
10
10
  {% endfor %}
11
11
 
12
- {% for name, number in zip(rm.induced.vol.names, rm.induced.vol.numbers) %}
12
+ {% for name, number in zip(rm.induced['Multipole'].vol.names, rm.induced['Multipole'].vol.numbers) %}
13
13
  <<name>> = Region[ <<number>> ];
14
14
  {% endfor %}
15
15
 
@@ -21,9 +21,9 @@ Group {
21
21
  // Surface_bn0 = Region[ 1101 ];
22
22
  <<rm.air_far_field.surf.name>> = Region[ <<rm.air_far_field.surf.number>> ];
23
23
 
24
- <<nc.omega>><<nc.powered>> = Region[ {<<rm.powered.vol.names|join(', ')>>} ];
24
+ <<nc.omega>><<nc.powered>> = Region[ {<<rm.powered['Multipole'].vol.names|join(', ')>>} ];
25
25
  <<nc.omega>><<nc.iron>> = Region[ {<<rm.iron.vol.names|join(', ')>>} ];
26
- <<nc.omega>><<nc.induced>> = Region[ {<<rm.induced.vol.names|join(', ')>>} ];
26
+ <<nc.omega>><<nc.induced>> = Region[ {<<rm.induced['Multipole'].vol.names|join(', ')>>} ];
27
27
  <<nc.omega>><<nc.air_far_field>> = Region[ <<rm.air_far_field.vol.names[0]>> ];
28
28
  <<nc.omega>><<nc.conducting>> = Region[ {<<nc.omega>><<nc.powered>>, <<nc.omega>><<nc.iron>>, <<nc.omega>><<nc.induced>>} ];
29
29
  <<nc.omega>> = Region[ {<<rm.air.vol.name>>, <<rm.air_far_field.vol.names[0]>>, <<nc.omega>><<nc.powered>>, <<nc.omega>><<nc.iron>>, <<nc.omega>><<nc.induced>>} ];
@@ -52,7 +52,7 @@ Function {
52
52
  // Help "Current injected in coil [A]"];
53
53
 
54
54
  // NbTurns = 1 ; // number of turns in the coil
55
- {% for name, current in zip(rm.powered.vol.names, rm.powered.vol.currents) %}
55
+ {% for name, current in zip(rm.powered['Multipole'].vol.names, rm.powered['Multipole'].vol.currents) %}
56
56
  js_fct[ <<name>> ] = <<current>>/SurfaceArea[];
57
57
  {% endfor %}
58
58
  //js_fct[ PowPos ] = Current/SurfaceArea[];
@@ -302,7 +302,7 @@ Integral {
302
302
  // Division by area to compute Watts per meter squared
303
303
  // SurfaceArea function does not allow DOM_*** as argument, so we need to use
304
304
  // the actual ids
305
- [ CFUN_PvsT_cryocooler_SHI_SRDE_418D4[{LOCALQUANT_T}]/SurfaceArea[]{<< rm.powered.surf_in.numbers | join(', ') >>, << rm.powered.surf_out.numbers | join(', ') >> }, {LOCALQUANT_T} ];
305
+ [ CFUN_P2vsT2_cryocooler_SHI_SRDE_418D4_T[{LOCALQUANT_T}]/SurfaceArea[]{<< rm.powered['Pancake3D'].surf_in.numbers | join(', ') >>, << rm.powered['Pancake3D'].surf_out.numbers | join(', ') >> }, {LOCALQUANT_T} ];
306
306
  In Region[{DOM_bottomTerminalSurface, DOM_topTerminalSurface}];
307
307
  Jacobian JAC_sur;
308
308
  Integration Int;
@@ -444,14 +444,19 @@ EndFor
444
444
  {# ================================================================================== #}
445
445
  {# ================================================================================== #}
446
446
  {# ================================================================================== #}
447
- {% macro RESOLUTION_tolerances(systemNames, systemTolerances, postOperationTolerances, type) %}
447
+ {% macro RESOLUTION_tolerances(systemTolerances, postOperationTolerances, type) %}
448
+ {% set map_quantity_to_system_name = {
449
+ "coupledSolutionVector": "SYSTEM_stronglyCoupled",
450
+ "thermalSolutionVector": "SYSTEM_thermal",
451
+ "electromagneticSolutionVector": "SYSTEM_electromagnetic",
452
+ }
453
+ %}
448
454
  {% for tolerance in systemTolerances %}
449
455
  {% if loop.first %}
450
456
  System{
451
457
  {% endif %}
452
- {% for systemName in systemNames %}
453
458
  {
454
- <<systemName>>,
459
+ <<map_quantity_to_system_name[tolerance["quantity"]]>>,
455
460
  <<tolerance["relative"]>>,
456
461
  <<tolerance["absolute"]>>,
457
462
  {% if type == "nonlinearSolver" %}
@@ -463,7 +468,6 @@ System{
463
468
  // ERROR: wrong type for RESOLUTION_tolerances!
464
469
  {% endif %}
465
470
  }
466
- {% endfor %}
467
471
  {% if loop.last %}
468
472
  }
469
473
  {% endif %}
@@ -500,7 +504,6 @@ IterativeLoopN[
500
504
  INPUT_NLSMaxNumOfIter,
501
505
  INPUT_NLSRelaxFactor,
502
506
  <<RESOLUTION_tolerances(
503
- systemNames,
504
507
  dm.magnet.solve.nls.systemTolerances,
505
508
  dm.magnet.solve.nls.postOperationTolerances,
506
509
  type="nonlinearSolver")|indent(4)>>
@@ -581,6 +584,11 @@ SetExtrapolationOrder[INPUT_extrapolationOrder];
581
584
  {# ================================================================================== #}
582
585
  {# ================================================================================== #}
583
586
  {% macro RESOLUTION_SaveSolutions(systemNames, solveAfterThisTimes) %}
587
+ {% for quantity in dm.magnet.postproc.timeSeriesPlots %}
588
+ {% if quantity.quantity == "maximumTemperature" %}
589
+ PostOperation[POSTOP_maximumTemperature];
590
+ {% endif %}
591
+ {% endfor %}
584
592
  {% if dm.magnet.solve.save %}
585
593
  {% for quantity in dm.magnet.solve.save %}
586
594
  {% if quantity.timesToBeSaved %}
@@ -667,7 +675,6 @@ TimeLoopAdaptive[
667
675
  "<<dm.magnet.solve.t.adaptive.integrationMethod>>",
668
676
  List[INPUT_tAdaptiveBreakPoints],
669
677
  <<RESOLUTION_tolerances(
670
- systemNames,
671
678
  dm.magnet.solve.t.adaptive.systemTolerances,
672
679
  dm.magnet.solve.t.adaptive.postOperationTolerances,
673
680
  type="timeLoop")|indent(4)>>
@@ -712,7 +719,9 @@ TimeLoopAdaptive[
712
719
  format="Default",
713
720
  name="None",
714
721
  fileName="None",
715
- lastTimeStepOnly=False) %}
722
+ lastTimeStepOnly=False,
723
+ appendToExistingFile=False,
724
+ noTitle=False) %}
716
725
  Print[
717
726
  <<quantity>>,
718
727
  {% if onElementsOf != "None" %}
@@ -772,6 +781,12 @@ Print[
772
781
  {% if lastTimeStepOnly == True %}
773
782
  LastTimeStepOnly 1,
774
783
  {% endif %}
784
+ {% if appendToExistingFile == True %}
785
+ AppendToExistingFile 1,
786
+ {% endif %}
787
+ {% if noTitle == True %}
788
+ NoTitle,
789
+ {% endif %}
775
790
  {% if name != "None" %}
776
791
  Name "<<name>>"
777
792
  {% elif fileName != "None" %}
@@ -797,8 +812,8 @@ Group{
797
812
  DOM_terminalContactLayerSurface_0 = Region[{ <<rm.insulator.surf.numbers[-1]>> }];
798
813
 
799
814
  {% for i in range(1, NofSets+2) %}
800
- DOM_windingMinus_<<i>> = Region[{ <<rm.powered.vol.numbers[:-2][(i-1)%NofSets]>> }];
801
- DOM_windingPlus_<<i>> = Region[{ <<rm.powered.vol.numbers[:-2][(i-1+HalfNofSets)%NofSets]>> }];
815
+ DOM_windingMinus_<<i>> = Region[{ <<rm.powered["Pancake3D"].vol.numbers[:-2][(i-1)%NofSets]>> }];
816
+ DOM_windingPlus_<<i>> = Region[{ <<rm.powered["Pancake3D"].vol.numbers[:-2][(i-1+HalfNofSets)%NofSets]>> }];
802
817
 
803
818
  DOM_allInsulationSurface_<<i>> = Region[{ <<rm.insulator.surf.numbers[(2 * (i-1))%(2 * NofSets)]>> }];
804
819
  DOM_allInsulationSurface_<<i>> += Region[{ <<rm.insulator.surf.numbers[(2 * (i-1))%(2 * NofSets) + 1]>> }];
@@ -810,18 +825,18 @@ Group{
810
825
  {% endfor %}
811
826
 
812
827
  // Add terminals to winding region logic:
813
- // <<rm.powered.vol_in.number>>: inner terminal
814
- // <<rm.powered.vol_out.number>>: outer terminal
815
- // <<rm.powered.vol.numbers[-2]>>: inner layer transition angle
816
- // <<rm.powered.vol.numbers[-1]>>: outer layer transition angle
828
+ // <<rm.powered["Pancake3D"].vol_in.number>>: inner terminal
829
+ // <<rm.powered["Pancake3D"].vol_out.number>>: outer terminal
830
+ // <<rm.powered["Pancake3D"].vol.numbers[-2]>>: inner layer transition angle
831
+ // <<rm.powered["Pancake3D"].vol.numbers[-1]>>: outer layer transition angle
817
832
  {% for i in range(1, NofSets+2) %}
818
- DOM_windingMinus_<<i>> += Region[{ <<rm.powered.vol_in.number>> }];
819
- DOM_windingMinus_<<i>> += Region[{ <<rm.powered.vol.numbers[-2]>> }];
833
+ DOM_windingMinus_<<i>> += Region[{ <<rm.powered["Pancake3D"].vol_in.number>> }];
834
+ DOM_windingMinus_<<i>> += Region[{ <<rm.powered["Pancake3D"].vol.numbers[-2]>> }];
820
835
  {% endfor %}
821
836
 
822
837
  {% for i in range(1, NofSets+1) %}
823
- DOM_windingPlus_<<i>> += Region[{ <<rm.powered.vol_out.number>> }];
824
- DOM_windingPlus_<<i>> += Region[{ <<rm.powered.vol.numbers[-1]>> }];
838
+ DOM_windingPlus_<<i>> += Region[{ <<rm.powered["Pancake3D"].vol_out.number>> }];
839
+ DOM_windingPlus_<<i>> += Region[{ <<rm.powered["Pancake3D"].vol.numbers[-1]>> }];
825
840
  {% endfor %}
826
841
 
827
842
  DOM_allInsulationSurface = Region[{ <<rm.insulator.surf.numbers|join(', ')>> }];
@@ -837,13 +852,13 @@ Group{
837
852
  {% endif %}
838
853
 
839
854
  // create windings region:
840
- DOM_allWindings = Region[{ <<rm.powered.vol.numbers[:-2]|join(', ')>> }];
855
+ DOM_allWindings = Region[{ <<rm.powered["Pancake3D"].vol.numbers[:-2]|join(', ')>> }];
841
856
 
842
857
  // create terminals region:
843
- DOM_terminals = Region[{ <<rm.powered.vol_in.number>>, <<rm.powered.vol_out.number>>}];
858
+ DOM_terminals = Region[{ <<rm.powered["Pancake3D"].vol_in.number>>, <<rm.powered["Pancake3D"].vol_out.number>>}];
844
859
 
845
860
  // create layer transition angle region:
846
- DOM_transitionNotchVolumes = Region[{<<rm.powered.vol.numbers[-2]>>, <<rm.powered.vol.numbers[-1]>>}];
861
+ DOM_transitionNotchVolumes = Region[{<<rm.powered["Pancake3D"].vol.numbers[-2]>>, <<rm.powered["Pancake3D"].vol.numbers[-1]>>}];
847
862
 
848
863
  // create powered region:
849
864
  DOM_powered = Region[{ DOM_allWindings, DOM_terminals, DOM_transitionNotchVolumes }];
@@ -899,9 +914,9 @@ Group{
899
914
 
900
915
  // boundary surface between the all conducting and non-conducting domains:
901
916
  {% if dm.magnet.geometry.ii.tsa or dm.magnet.solve.ii.resistivity != "perfectlyInsulating" %}
902
- DOM_pancakeBoundary = Region[{ <<rm.powered.surf.numbers[0]>> }];
917
+ DOM_pancakeBoundary = Region[{ <<rm.powered["Pancake3D"].surf.numbers[0]>> }];
903
918
  {% else %}
904
- DOM_pancakeBoundary = Region[{ <<rm.powered.surf.numbers[1]>> }];
919
+ DOM_pancakeBoundary = Region[{ <<rm.powered["Pancake3D"].surf.numbers[1]>> }];
905
920
  {% endif %}
906
921
 
907
922
  // support of magnetic scalar potential, i.e., all non-conducting doms:
@@ -921,9 +936,9 @@ Group{
921
936
  DOM_total = Region[{ DOM_allConducting, DOM_Phi }];
922
937
 
923
938
  // top and bottom surfaces of the terminals for constant temperature BC:
924
- DOM_bottomTerminalSurface = Region[{ << rm.powered.surf_in.numbers | join(', ') >> }];
939
+ DOM_bottomTerminalSurface = Region[{ << rm.powered['Pancake3D'].surf_in.numbers | join(', ') >> }];
925
940
 
926
- DOM_topTerminalSurface = Region[{ << rm.powered.surf_out.numbers | join(', ') >> }];
941
+ DOM_topTerminalSurface = Region[{ << rm.powered['Pancake3D'].surf_out.numbers | join(', ') >> }];
927
942
  }
928
943
 
929
944
  //======================================================================================
@@ -1123,7 +1138,8 @@ if (
1123
1138
  "Silver": 2,
1124
1139
  "Indium": 3,
1125
1140
  "StainlessSteel": 4,
1126
- "HTSSuperPower": 5
1141
+ "HTSSuperPower": 5,
1142
+ "HTSFujikura": 6,
1127
1143
  } %}
1128
1144
  rhoWindingAndDerivative[] = WindingWithSuperConductorRhoAndDerivativeV1[
1129
1145
  $Time,
@@ -1131,7 +1147,9 @@ if (
1131
1147
  $3,
1132
1148
  $2,
1133
1149
  $1
1134
- ]{
1150
+ ]{ <<dm.magnet.solve.wi.superConductor.IcReferenceTemperature>>,
1151
+ <<dm.magnet.solve.wi.superConductor.IcReferenceBmagnitude>>,
1152
+ <<dm.magnet.solve.wi.superConductor.IcReferenceBangle>>,
1135
1153
  <<numberOfIcValues>>, // N of Ic Values
1136
1154
  {% for lengthValue in listOfLengthValues %}
1137
1155
  <<lengthValue>>,
@@ -1156,10 +1174,10 @@ if (
1156
1174
  <<dm.magnet.solve.wi.shuntLayer.material.relativeHeight>>,
1157
1175
  <<dm.magnet.solve.wi.shuntLayer.material.rrr>>,
1158
1176
  <<dm.magnet.solve.wi.shuntLayer.material.rrrRefT>>,
1159
- 5, // material integer: HTSSuperPower
1160
- <<dm.magnet.solve.wi.relativeThicknessOfSuperConductor>>, // relative thickness of HTSSuperPower
1161
- <<dm.magnet.solve.wi.superConductor.electricFieldCriterion>>, // electric field criterion of HTSSuperPower
1162
- <<dm.magnet.solve.wi.superConductor.nValue>>, // n value of HTSSuperPower
1177
+ <<materialCodes[dm.magnet.solve.wi.superConductor.name]>>, // material integer: HTS
1178
+ <<dm.magnet.solve.wi.relativeThicknessOfSuperConductor>>, // relative thickness of HTS
1179
+ <<dm.magnet.solve.wi.superConductor.electricFieldCriterion>>, // electric field criterion of HTS
1180
+ <<dm.magnet.solve.wi.superConductor.nValue>>, // n value of HTS
1163
1181
  <<dm.magnet.solve.wi.superConductor.minimumPossibleResistivity>>, // winding minimum possible resistivity (or superconductor minimum? bug)
1164
1182
  <<dm.magnet.solve.wi.superConductor.maximumPossibleResistivity>>, // winding maximum possible resistivity (or superconductor maximum? bug)
1165
1183
  <<dm.magnet.solve.localDefects.jCritical.startTurn if dm.magnet.solve.localDefects.jCritical is not none else "0">>, // local defect start turn
@@ -2546,11 +2564,11 @@ FunctionSpace{
2546
2564
  NameOfConstraint CONSTRAINT_zeroPhiAtOuterPoint;
2547
2565
  }
2548
2566
  {% if dm.magnet.geometry.ii.tsa and dm.magnet.solve.ii.resistivity != "perfectlyInsulating" %}
2549
- // {
2550
- // NameOfCoef phin_bnd;
2551
- // EntityType NodesOf;
2552
- // NameOfConstraint CONSTRAINT_zeroPhiAtOuterPoint;
2553
- // }
2567
+ {
2568
+ NameOfCoef phin_bnd;
2569
+ EntityType NodesOf;
2570
+ NameOfConstraint CONSTRAINT_zeroPhiAtOuterPoint;
2571
+ }
2554
2572
  {% endif %}
2555
2573
  }
2556
2574
  }
@@ -2939,6 +2957,17 @@ PostProcessing{
2939
2957
  }
2940
2958
  }
2941
2959
 
2960
+ {
2961
+ Name RESULT_maximumTemperature; // voltages in cuts
2962
+ Value{
2963
+ Term {
2964
+ Type Global;
2965
+ [ #999 ];
2966
+ In DOM_thermal;
2967
+ }
2968
+ }
2969
+ }
2970
+
2942
2971
  {
2943
2972
  Name RESULT_currentThroughCoil; // currents in cuts
2944
2973
  Value{
@@ -3308,6 +3337,37 @@ PostOperation{
3308
3337
  )|indent(12)>>
3309
3338
  }
3310
3339
  }
3340
+ {% if dm.magnet.solve.type in ["weaklyCoupled", "stronglyCoupled", "thermal"] %}
3341
+ {
3342
+ Name POSTOP_maximumTemperature;
3343
+ NameOfPostProcessing POSTPRO_<<dm.magnet.solve.type>>;
3344
+ Operation {
3345
+ Print[ RESULT_temperature,
3346
+ OnElementsOf DOM_thermal,
3347
+ StoreMaxInRegister 999,
3348
+ Format Table,
3349
+ LastTimeStepOnly 1,
3350
+ SendToServer "No"
3351
+ ] ;
3352
+ // We can print the maximum temperature at any region that is part
3353
+ // of the thermal domain since the `StoreMaxInRegister` command
3354
+ // already searches all of the thermal region for the maximum and
3355
+ //populates the same value for all physical regions of the thermal
3356
+ // domain.
3357
+ // Printing in just one domain makes the parsing of the output easier.
3358
+ <<POSTOPERATION_printResults(
3359
+ quantity="RESULT_maximumTemperature",
3360
+ onRegion="Region[%d]" % rm.powered['Pancake3D'].vol_in.number,
3361
+ format="TimeTable",
3362
+ name="Maximum temperature [K]",
3363
+ appendToExistingFile=True,
3364
+ lastTimeStepOnly=True,
3365
+ fileName="maximumTemperature(TimeSeriesPlot)",
3366
+ noTitle=True
3367
+ )|indent(12)>>
3368
+ }
3369
+ }
3370
+ {% endif %}
3311
3371
  {
3312
3372
  Name POSTOP_currentThroughCoil;
3313
3373
  NameOfPostProcessing POSTPRO_<<dm.magnet.solve.type>>;
@@ -3383,21 +3443,23 @@ PostOperation{
3383
3443
  Name POSTOP_timeSeriesPlot_<<timeSeriesPlot.quantity>>;
3384
3444
  NameOfPostProcessing POSTPRO_<<dm.magnet.solve.type>>;
3385
3445
  Operation{
3386
- {% if timeSeriesPlot.quantity in ["currentThroughCoil", "voltageBetweenTerminals"] %}
3446
+ {% if timeSeriesPlot.quantity == "maximumTemperature" %}
3447
+
3448
+ {% elif timeSeriesPlot.quantity in ["currentThroughCoil", "voltageBetweenTerminals"] %}
3387
3449
  <<POSTOPERATION_printResults(
3388
3450
  quantity=timeSeriesPlot.getdpQuantityName,
3389
3451
  onRegion="DOM_terminalCut",
3390
3452
  format="TimeTable",
3391
3453
  fileName=timeSeriesPlot.fileName
3392
3454
  )|indent(12)>>
3393
- {% elif timeSeriesPlot.quantity in ["totalResistiveHeating", "magneticEnergy"] %}
3394
- <<POSTOPERATION_printResults(
3395
- quantity=timeSeriesPlot.getdpQuantityName,
3396
- onGlobal=True,
3397
- format="TimeTable",
3398
- fileName=timeSeriesPlot.fileName
3399
- )|indent(12)>>
3400
- {% elif timeSeriesPlot.position.x is none %}
3455
+ {% elif timeSeriesPlot.quantity in ["totalResistiveHeating", "magneticEnergy"] %}
3456
+ <<POSTOPERATION_printResults(
3457
+ quantity=timeSeriesPlot.getdpQuantityName,
3458
+ onGlobal=True,
3459
+ format="TimeTable",
3460
+ fileName=timeSeriesPlot.fileName
3461
+ )|indent(12)>>
3462
+ {% elif timeSeriesPlot.position.x is none %}
3401
3463
  <<POSTOPERATION_printResults(
3402
3464
  quantity=timeSeriesPlot.getdpQuantityName,
3403
3465
  onGlobal=True,
@@ -3446,7 +3508,7 @@ PostOperation{
3446
3508
  {% endif %}
3447
3509
  // convergence criteria as postoperations:
3448
3510
  {% for tolerance in (dm.magnet.solve.nls.postOperationTolerances + dm.magnet.solve.t.adaptive.postOperationTolerances)|unique(attribute="quantity") %}
3449
- {% if tolerance.quantity in ["totalResistiveHeating", "magneticEnergy"] %}
3511
+ {% if tolerance.quantity == "totalResistiveHeating" %}
3450
3512
  {
3451
3513
  Name POSTOP_CONV_totalResistiveHeating;
3452
3514
  NameOfPostProcessing POSTPRO_<<dm.magnet.solve.type>>;
@@ -3464,6 +3526,29 @@ PostOperation{
3464
3526
  Print[RESULT_<<tolerance.quantity>>, OnRegion DOM_terminalCut];
3465
3527
  }
3466
3528
  }
3529
+ {% elif tolerance.quantity == "maximumTemperature" %}
3530
+ {
3531
+ Name POSTOP_CONV_maximumTemperature;
3532
+ NameOfPostProcessing POSTPRO_<<dm.magnet.solve.type>>;
3533
+ Operation {
3534
+ Print[ RESULT_temperature,
3535
+ OnElementsOf DOM_thermal,
3536
+ StoreMaxInRegister 999,
3537
+ Format Table,
3538
+ LastTimeStepOnly 1,
3539
+ SendToServer "No"
3540
+ ] ;
3541
+
3542
+ <<POSTOPERATION_printResults(
3543
+ quantity="RESULT_maximumTemperature",
3544
+ onRegion="DOM_thermal",
3545
+ format="TimeTable",
3546
+ name="Maximum temperature [K]",
3547
+ appendToExistingFile=True,
3548
+ lastTimeStepOnly=True,
3549
+ )|indent(12)>>
3550
+ }
3551
+ }
3467
3552
  {% else %}
3468
3553
  {
3469
3554
  Name POSTOP_CONV_<<tolerance.quantity>>;
@@ -1,6 +1,6 @@
1
1
  // Quench Heater Circuits:
2
- {% macro MATERIAL_QuenchHeater_SSteel_t_T(rho_SS="None", t_on="None", U_0="None", C="None", R_warm="None", w_SS="None", h_SS="None", l_SS="None", mode="None", time="$Time", T="$1") -%}
3
- CFUN_QHCircuit_t_T[<<time>>, <<T>>]{<<rho_SS>>, <<t_on>>, <<U_0>>, <<C>>, <<R_warm>>, <<w_SS>>, <<h_SS>>, <<l_SS>>, <<mode>>}
2
+ {% macro MATERIAL_QuenchHeater_SSteel_t_T(t_on="None", U_0="None", C="None", R_warm="None", w_SS="None", h_SS="None", l_SS="None", mode="None", time="$Time", T="$1") -%}
3
+ CFUN_QHCircuit_t_rhoSS[<<time>>, CFUN_rhoSS_T[<<T>>]]{<<t_on>>, <<U_0>>, <<C>>, <<R_warm>>, <<w_SS>>, <<h_SS>>, <<l_SS>>, <<mode>>}
4
4
  {%- endmacro %} // mode: 1 -> Power, 2 -> Current, 3 -> Resistance
5
5
 
6
6
  // Critical Currents:
@@ -12,24 +12,28 @@ CFUN_IcNbTi_T_a[<<T>>, <<area>>]{<<BMagnitude>>}
12
12
  {%- endmacro %}
13
13
 
14
14
  // Critical Current Densities:
15
- {% macro MATERIAL_CriticalCurrentDensity_NiobiumTitanium_T(C1="None", C2="None", Tc0="None", Bc20="None", wireDiameter="None", Cu_noCu="None", T="$1", BMagnitude="5") -%}
15
+ {% macro MATERIAL_CriticalCurrentDensity_NiobiumTitanium_CUDI1_T(C1="None", C2="None", Tc0="None", Bc20="None", wireDiameter="None", Cu_noCu="None", T="$1", BMagnitude="5") -%}
16
16
  CFUN_Jc_NbTi_Cudi_fit1_T[<<T>>]{<<BMagnitude>>, <<Tc0>>, <<Bc20>>, <<C1>>, <<C2>>, <<wireDiameter>>, <<Cu_noCu>>}
17
17
  {%- endmacro %}
18
18
 
19
- {% macro MATERIAL_CriticalCurrentDensity_Niobium3Tin_T(Jc0="None", Tc0="None", Bc20="None", T="$1", BMagnitude="5") -%}
19
+ {% macro MATERIAL_CriticalCurrentDensity_Niobium3Tin_Summers_T(Jc0="None", Tc0="None", Bc20="None", T="$1", BMagnitude="5") -%}
20
20
  CFUN_Jc_Nb3Sn_Summers_T[<<T>>]{<<BMagnitude>>, <<Jc0>>, <<Tc0>>, <<Bc20>>}
21
21
  {%- endmacro %}
22
22
 
23
- {% macro MATERIAL_CriticalCurrentDensity_BSCCO2212_T(f_scaling="None", T="$1", BMagnitude="5") -%}
23
+ {% macro MATERIAL_CriticalCurrentDensity_Niobium3Tin_Bordini_T(Tc0="None", Bc20="None", C0="None", alpha="None", T="$1", BMagnitude="5") -%}
24
+ CFUN_Jc_Bordini_T[<<T>>]{<<BMagnitude>>, <<Tc0>>, <<Bc20>>, <<C0>>, <<alpha>>}
25
+ {%- endmacro %}
26
+
27
+ {% macro MATERIAL_CriticalCurrentDensity_BSCCO2212_BSCCO_2212_LBNL_T(f_scaling="None", T="$1", BMagnitude="5") -%}
24
28
  CFUN_Jc_T_B_BSCCO2212_block20T_new_T[<<T>>]{<<BMagnitude>>, <<f_scaling>>}
25
29
  {%- endmacro %}
26
30
 
27
31
  // Resistivities:
28
32
  {% macro MATERIAL_Resistivity_Copper_T_B(RRR="None", rrrRefT="None", T="$1", BMagnitude="Norm[$2]") -%}
29
- CFUN_rhoCu_T_B[<<T>>, <<BMagnitude>>]{<<RRR>>, <<rrrRefT>>}
33
+ CFUN_rhoCu_T_B[<<T>>, <<BMagnitude>>]{<<RRR>>}
30
34
  {%- endmacro %}
31
35
  {% macro MATERIAL_Resistivity_Copper_T(RRR="None", rrrRefT="None", T="$1", BMagnitude="5") -%}
32
- CFUN_rhoCu_T[<<T>>]{<<BMagnitude>>, <<RRR>>, <<rrrRefT>>}
36
+ CFUN_rhoCu_T[<<T>>]{<<BMagnitude>>, <<RRR>>}
33
37
  {%- endmacro %}
34
38
 
35
39
  {% macro MATERIAL_Resistivity_Hastelloy_T(RRR="None", rrrRefT="None", T="$1", BMagnitude="Norm[$2]") -%}
@@ -53,11 +57,11 @@ CFUN_rhoSS_T[<<T>>]
53
57
 
54
58
  // Thermal Conductivities:
55
59
  {% macro MATERIAL_ThermalConductivity_Copper_T_B(RRR="None", rrrRefT="None", T="$1", BMagnitude="Norm[$2]") -%}
56
- CFUN_kCu_T_rho0_rho[<<T>>, CFUN_rhoCu_T[<<T>>]{0, <<RRR>>, <<rrrRefT>>}, CFUN_rhoCu_T_B[<<T>>, <<BMagnitude>>]{<<RRR>>, <<rrrRefT>>}]{<<RRR>>}
60
+ CFUN_kCu_T_rho0_rho[<<T>>, CFUN_rhoCu_T[<<T>>]{0, <<RRR>>}, CFUN_rhoCu_T_B[<<T>>, <<BMagnitude>>]{<<RRR>>}]{<<RRR>>}
57
61
  {%- endmacro %}
58
62
 
59
63
  {% macro MATERIAL_ThermalConductivity_Copper_T(RRR="None", rrrRefT="None", T="$1", BMagnitude="5") -%}
60
- CFUN_kCu_T_rho0_rho[<<T>>, CFUN_rhoCu_T[<<T>>]{0, <<RRR>>, <<rrrRefT>>}, CFUN_rhoCu_T[<<T>>]{<<BMagnitude>>, <<RRR>>, <<rrrRefT>>}]{<<RRR>>}
64
+ CFUN_kCu_T_rho0_rho[<<T>>, CFUN_rhoCu_T[<<T>>]{0, <<RRR>>}, CFUN_rhoCu_T[<<T>>]{<<BMagnitude>>, <<RRR>>}]{<<RRR>>}
61
65
  {%- endmacro %}
62
66
 
63
67
  {% macro MATERIAL_ThermalConductivity_Hastelloy_T(RRR="None", rrrRefT="None", T="$1", BMagnitude="Norm[$2]") -%}
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: fiqus
3
- Version: 2024.5.2
3
+ Version: 2024.7.0
4
4
  Summary: Source code for STEAM FiQuS tool
5
5
  Home-page: https://gitlab.cern.ch/steam/fiqus
6
6
  Author: STEAM Team
@@ -72,6 +72,7 @@ Source code for STEAM **FiQuS** (**Fi**nite Element **Qu**ench **S**imulator).
72
72
  # Publications
73
73
 
74
74
  - S. Atalay et al, "An open-source 3D FE quench simulation tool for no-insulation HTS pancake coils", in Superconductor Science and Technology, doi: [10.1088/1361-6668/ad3f83](https://doi.org/10.1088/1361-6668/ad3f83)
75
+ - J. Dular et al, "Coupled Axial and Transverse Currents Method for Finite Element Modelling of Periodic Superconductors", arXiv preprint, doi:[10.48550/arXiv.2404.09775](https://doi.org/10.48550/arXiv.2404.09775).
75
76
  - A. Vitrano et al, "An Open-Source Finite Element Quench Simulation Tool for Superconducting Magnets," in IEEE Transactions on Applied Superconductivity, vol. 33, no. 5, pp. 1-6, Aug. 2023, Art no. 4702006, doi: [10.1109/TASC.2023.3259332](https://ieeexplore.ieee.org/abstract/document/10077402).
76
77
  - M. Wozniak et al, "Fast Quench Propagation Conductor for Protecting Canted Cos-Theta Magnets," in IEEE Transactions on Applied Superconductivity, vol. 33, no. 5, pp. 1-5, Aug. 2023, Art no. 4701705, doi: [10.1109/TASC.2023.3247997](https://ieeexplore.ieee.org/document/10050158).
77
78
 
@@ -1,29 +1,36 @@
1
- fiqus/MainFiQuS.py,sha256=BrMO50mlcU8WKbLnjqWL1IuzBnkxELiOMerLtKuIHPk,13700
1
+ fiqus/MainFiQuS.py,sha256=iLfsYTqQ93AVT4E1b81z-cx6LsdBJBXjOhMQkt-k4dM,14343
2
2
  fiqus/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
3
- fiqus/data/DataFiQuS.py,sha256=dJe8BOx5xbLDRc6DRNQoJVleUQfSMZV28UlID9OGiA4,6396
3
+ fiqus/data/DataConductor.py,sha256=iBtmUOfz68yPqTq_5-dprigb4BgP_BCbFzSMSKoqN_c,13919
4
+ fiqus/data/DataFiQuS.py,sha256=-lxp98aU3f-sHdbLYlBipBVr1w6zQi0kK7pWZQM3D5Y,6599
4
5
  fiqus/data/DataFiQuSCCT.py,sha256=j3K9ODSwOuP-tkie0o4fvkouEyDHhlX3Y2DH1zO58Eo,7287
6
+ fiqus/data/DataFiQuSConductor.py,sha256=uxPR3cN38Kf93EN339JegM5GCg5wBtbfzCI-qeByMAQ,2710
7
+ fiqus/data/DataFiQuSConductorAC_Strand.py,sha256=dKfhrlQFQTRjwGc57hwZgir6YshO4bttQQyJRwi1EoE,28474
5
8
  fiqus/data/DataFiQuSMultipole.py,sha256=cKa4JTzYUfUcbruoyALE1tgIDTy8zYhRFJuKZnnFuhc,2403
6
- fiqus/data/DataFiQuSPancake3D.py,sha256=mZK2tLn6437WmPO5AJJ78cHmNr_GUwWga-Uk46APglA,110178
9
+ fiqus/data/DataFiQuSPancake3D.py,sha256=-xW4neYKIf9_10kRM1h9Vq1GQcrTQV1ABxiHw4ZT3tk,115543
7
10
  fiqus/data/DataMultipole.py,sha256=Ai-z_Ux2iLxZPnHvCDneeUWxeOlfQEbVa74r_Il9ym0,2304
8
11
  fiqus/data/DataRoxieParser.py,sha256=ysQfTnJ7nUHbjwgVWLtD_k0jggyEeNCXwRpm6ghVE8E,9036
9
12
  fiqus/data/DataWindingsCCT.py,sha256=qqqxO4VG6rsKpNEImkA1hjrUMyS4UFNfVG_ioQd4ML8,1709
10
- fiqus/data/RegionsModelFiQuS.py,sha256=YRgLy9NLYqhxP2NoRH2e_Ta7_vr03INIgyIZNRduz2A,7162
13
+ fiqus/data/RegionsModelFiQuS.py,sha256=cOFyZNZEgE1xdvUfAvCpzBKp0dhjUORhGd6b0d1kDLY,7242
11
14
  fiqus/data/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
12
- fiqus/geom_generators/GeometryCCT.py,sha256=eUhcmver2rqVeo77qQ4OFC0tXV6uROzOpyRmLlTuiRg,49745
15
+ fiqus/geom_generators/GeometryCCT.py,sha256=Xp-lRlYeKX1ZkrbSbmzrGCq_dFgiC4XqW8qtCw3Xadk,49972
16
+ fiqus/geom_generators/GeometryConductorAC_Strand.py,sha256=GDMbPuYvE4Pwxy-qPlmTSurd1p92Nk6xDjgYZuXex2Q,76016
13
17
  fiqus/geom_generators/GeometryMultipole.py,sha256=App1thx8KZ1kGwGaIxgRhJfIbG-VrjJZmwSv3s2P9w0,24171
14
18
  fiqus/geom_generators/GeometryPancake3D.py,sha256=KefA9iK_pYeJKOZjfIYw8klYA1ToLXnfq6WiMwypPpk,167791
15
19
  fiqus/geom_generators/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
16
20
  fiqus/getdp_runners/RunGetdpCCT.py,sha256=EPkckG8PPrBgACKG5oHSJrsBmBYvd9yJ8BvnaTeO3l4,3012
17
- fiqus/getdp_runners/RunGetdpMultipole.py,sha256=lbM9mZl-dCHQ8wTHlhVUzuzrYzU3-DzbhxhBE3KmEpo,4172
21
+ fiqus/getdp_runners/RunGetdpConductorAC_Strand.py,sha256=N_CZp2rua6TtJK__dv0WMHD2QlxGCigWGzRmz-EzDpU,10198
22
+ fiqus/getdp_runners/RunGetdpMultipole.py,sha256=6g5F1YBi0DzWWMBg0fVAIN0zbvgnIwY231NXShM_wK8,4224
18
23
  fiqus/getdp_runners/RunGetdpPancake3D.py,sha256=9iBAKEeHOlpE9nWLf7bmpj2xMOMslBRq62ZnP-e1I7s,9744
19
24
  fiqus/getdp_runners/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
20
25
  fiqus/mains/MainCCT.py,sha256=egzRdGq-kCs-ZNIRGsBhmN7MCcF1Lp1n8r0XKBFImsA,4414
26
+ fiqus/mains/MainConductorAC_Strand.py,sha256=TEPft6rzq4wxOc3ljJj1AkLe9oiVccSyFiM4lrRziE0,5147
21
27
  fiqus/mains/MainMultipole.py,sha256=2ntN2ACDIncQv-1yX5S6KlFG2nIK40-hpUxVnAogS-I,5075
22
28
  fiqus/mains/MainPancake3D.py,sha256=nfyTW_Km39G5NqzgRpg5vjWUBpDyqIs54xkmNpyANe4,21524
23
29
  fiqus/mains/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
24
- fiqus/mesh_generators/MeshCCT.py,sha256=cRiXyjOtzbFvaZ0Uf9wRWDENcVV9OMo5o3ugaMqwbjI,11338
25
- fiqus/mesh_generators/MeshMultipole.py,sha256=c042LJdesRy3Kd1smXGuMVkx5codZAlfAAVNxnO3KR4,14221
26
- fiqus/mesh_generators/MeshPancake3D.py,sha256=gJs750xwV0WpYfrZMCcu1f7VMQB335L8jNhdZBoO3bA,120547
30
+ fiqus/mesh_generators/MeshCCT.py,sha256=j2Qj69tdFb-weQnNgv5zi6dkL3ZJxGRdzKqzjlYdIy8,11436
31
+ fiqus/mesh_generators/MeshConductorAC_Strand.py,sha256=PjERjIQNRNej6eTLH8bSVA94VKcRtCOAfNQyCgwVWn8,43122
32
+ fiqus/mesh_generators/MeshMultipole.py,sha256=hyDKt_3K_jo8pvfoA8I3gAsU4vnlfX3pie5afMkOq-A,14508
33
+ fiqus/mesh_generators/MeshPancake3D.py,sha256=ClWH7sX00V6-LNptmWYY1nzeSyZCvGN_RKDnpdtsenc,120973
27
34
  fiqus/mesh_generators/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
28
35
  fiqus/parsers/ParserDAT.py,sha256=eLbpr74BDoSw6UAeP_qkM55ZLRYPdk8t-RhTXU_oHE4,675
29
36
  fiqus/parsers/ParserGetDPOnSection.py,sha256=pTk2EqO1sitoNIztekyEtIy5xpFKou_L3KGsIjJV3R0,8408
@@ -33,35 +40,40 @@ fiqus/parsers/ParserPOS.py,sha256=hO4mLneIuSvX-Gaqeke27OLgnCfzNvg4E_9r6nFr6Wg,10
33
40
  fiqus/parsers/ParserRES.py,sha256=782GouJaw0j5u1RLGag6FauSUTuKV7gKa1G4EowSKBE,5984
34
41
  fiqus/parsers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
35
42
  fiqus/plotters/PlotPythonCCT.py,sha256=YgphOuiTk0klqZh4d4u81hahtiDp-tx149EpBjyKH-Y,6333
43
+ fiqus/plotters/PlotPythonConductorAC.py,sha256=Vk4_Cdq7coL1moJWGYxHn9eGDfDdXL1la90x0-Inzus,46320
36
44
  fiqus/plotters/PlotPythonMultipole.py,sha256=SjJQKHX5mUoMW3yli97W6Kja0Hux8C16YE1U22hQRHY,481
37
45
  fiqus/plotters/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
38
46
  fiqus/post_processors/PostProcessCCT.py,sha256=-lao2mxHRJNuLSqP2pdiXAIvLxdAw0e5NNEbTfhDQs0,28443
47
+ fiqus/post_processors/PostProcessConductorAC.py,sha256=77E9nUOZUktgX8J_g03ASVyoZIKeZPcCl1y9s-CEs2Y,2184
39
48
  fiqus/post_processors/PostProcessMultipole.py,sha256=Jm4mbe8HUHHMbFT51PLXYM7We0Siltuw4ZclJ1A5Vus,15649
40
49
  fiqus/post_processors/PostProcessPancake3D.py,sha256=owXLKxAZ-tZw6oW0RemjH8HJTnINZuZnAgY0x-WLVgU,13195
41
50
  fiqus/post_processors/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
42
51
  fiqus/pre_processors/PreProcessCCT.py,sha256=BDRei7uLdOHxNnsg-r17HcjtvvrST8HUj_lQ1GSmVZo,9217
43
52
  fiqus/pre_processors/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
44
- fiqus/pro_assemblers/ProAssembler.py,sha256=2v_hRnaRVGE9urOdsHKg7wywZmoeDs-g-95yLV0eIF4,2770
53
+ fiqus/pro_assemblers/ProAssembler.py,sha256=LyGpydWUJmw9hKpWsI72qyoG8y4Su2hKn3adykISMWc,2906
45
54
  fiqus/pro_assemblers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
46
55
  fiqus/pro_material_functions/ironBHcurves.pro,sha256=0Tz1KzZ63G_zaS6dYQ5NYwa9EAtJna0jR61OxsM9J_E,17835
47
56
  fiqus/pro_templates/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
48
- fiqus/pro_templates/combined/CCT_template.pro,sha256=9bx82kbZh7fjnrUY7eoPsIyE1Ac5DgnxmOA1zma2wdo,13524
49
- fiqus/pro_templates/combined/Multipole_template.pro,sha256=XZDeo_TBncTxxglamHEPwvL1WXhRJEB-DL-hVxs-d1c,7956
50
- fiqus/pro_templates/combined/Pancake3D_template.pro,sha256=mSFzh1givrhSdSPAqJfKs3sCVMpFQGTXioXaWheaN08,146568
57
+ fiqus/pro_templates/combined/CCT_template.pro,sha256=8dyBKotys4kr7FyUZJFZr0CMBjEupPJ3XIPPOQwJ2Ps,13832
58
+ fiqus/pro_templates/combined/ConductorAC_template.pro,sha256=ocZgeGgqj49DYDbX9QUFtag9-i3dWsL2_MYkJgNN6BA,61725
59
+ fiqus/pro_templates/combined/Multipole_template.pro,sha256=Tuheajy32uZFyTe-OsvCyIRsDiOyYm0yoOe4LxfcSi8,8060
60
+ fiqus/pro_templates/combined/Pancake3D_template.pro,sha256=i0lr2hROYJVRff0S7PgJNfxxG0EHy_HrPCEbYftaKjs,150118
51
61
  fiqus/pro_templates/combined/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
52
- fiqus/pro_templates/combined/materials.pro,sha256=qUMlz0d6GjnSP8z9Jl2fjd4-7SUGArk7hfSaLvwlVrc,5525
62
+ fiqus/pro_templates/combined/materials.pro,sha256=TMqOu93KqSn0FWy6As6oTLqYChXXz-pGq6AVhweLpg8,5709
53
63
  fiqus/pro_templates/separated/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
54
64
  fiqus/utils/Utils.py,sha256=di-IYXD36cArEvkki8XbStXkpmmFL8EPOjMBAsNrT7I,18489
55
65
  fiqus/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
56
66
  tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
57
67
  tests/test_FiQuS.py,sha256=KN8qkXuUrkHg82rB_wsUEq_diP5mPOQpOpA0WBHMwpo,15537
58
- tests/test_geometry_generators.py,sha256=RAxyK-Fu3gOvVkCJeB8CA4DSfvAqpJ0lQV8MSzgKliY,2034
59
- tests/test_mesh_generators.py,sha256=JXksFjJArezAq7fTUgkybpj9ulXmVUphudzJ1YqBV_I,2112
60
- tests/test_solvers.py,sha256=GNmIxT5d1IdQk9gwRTCudqJO5-D9bzodTDPiY0TDYPQ,4224
68
+ tests/test_geometry_generators.py,sha256=GtoykfajdGMO5GQHWjFLNbaCHCKQLFOzfsiHhfJja0Q,3908
69
+ tests/test_mesh_generators.py,sha256=Ea0lZmTn0MeryrdQoZ1HUNpYmEFjourvH5eGK6T6szI,3988
70
+ tests/test_solvers.py,sha256=nJXLELUZWAiLRqVkpD2FtYXhuStKRHYvuGkztiI1AUc,6407
61
71
  tests/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
62
- tests/utils/fiqus_test_classes.py,sha256=nTABZ4uw0SGUVRG1HecQ2xHU1LMbgxfrwRpAPkO91Bo,24891
72
+ tests/utils/fiqus_test_classes.py,sha256=Il8T-Bz1WNJhOrTBFHNoRRr_QXQzzprZu9Y8SXRbLJ0,26948
73
+ tests/utils/generate_reference_files_ConductorAC.py,sha256=_jEE6xcqiz52bnmY6Is11QmG-bZ2vdH0k99p733t4N4,1676
74
+ tests/utils/generate_reference_files_Pancake3D.py,sha256=ufELeL8WMoWZFcOkVxR7w5OHCgIQ4Z3cLcXM-LtgvmM,3314
63
75
  tests/utils/helpers.py,sha256=BQxdHr8N4rGXc2C_YNEeOXxTIDJSUeRyyxLkvWfhiJY,4149
64
- fiqus-2024.5.2.dist-info/METADATA,sha256=JJo4w4RYXb9Y7xDLW21a7n4mlDWIolDF30D7BjFA3f0,4698
65
- fiqus-2024.5.2.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
66
- fiqus-2024.5.2.dist-info/top_level.txt,sha256=oGzSIyoVc1zYg14o67zI3QFwWsJvqNzNT0-te9WbUQc,12
67
- fiqus-2024.5.2.dist-info/RECORD,,
76
+ fiqus-2024.7.0.dist-info/METADATA,sha256=n5SENlrvP0jQQaWKzwYqS5WXRPzFziT8CxzCP8t-9cY,4914
77
+ fiqus-2024.7.0.dist-info/WHEEL,sha256=yQN5g4mg4AybRjkgi-9yy4iQEFibGQmlz78Pik5Or-A,92
78
+ fiqus-2024.7.0.dist-info/top_level.txt,sha256=oGzSIyoVc1zYg14o67zI3QFwWsJvqNzNT0-te9WbUQc,12
79
+ fiqus-2024.7.0.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: bdist_wheel (0.43.0)
2
+ Generator: bdist_wheel (0.41.2)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5
 
@@ -45,6 +45,47 @@ class TestGeometryGenerators(FiQuSGeometryTests):
45
45
  data_model=data_model, file_name=model_name, file_extension="vi"
46
46
  )
47
47
  self.compare_json_or_yaml_files(vi_file, reference_vi_file)
48
+
49
+ def test_ConductorAC_Strand(self):
50
+ """
51
+ Checks if ConductorAC geometry generators work correctly by comparing the number
52
+ of entities in the generated geometry file to the reference file that was
53
+ checked manually.
54
+ """
55
+ model_names = [
56
+ "TEST_CAC_Strand_adaptiveMesh",
57
+ "TEST_CAC_Strand_hexFilaments",
58
+ "TEST_CAC_wireInChannel",
59
+ ]
60
+
61
+ for model_name in model_names:
62
+ with self.subTest(model_name=model_name):
63
+ data_model = self.get_data_model(model_name)
64
+
65
+ # data_model can be modified here if necessary
66
+ # Example:
67
+
68
+ # data_model.magnet.geometry.N = 3
69
+
70
+ self.generate_geometry(data_model, model_name)
71
+
72
+ # Compare the number of entities with the reference file:
73
+ geometry_file = self.get_path_to_generated_file(
74
+ data_model=data_model, file_name=model_name, file_extension="brep"
75
+ )
76
+ reference_file = self.get_path_to_reference_file(
77
+ data_model=data_model, file_name=model_name, file_extension="brep"
78
+ )
79
+ self.compare_number_of_entities(geometry_file, reference_file)
80
+
81
+ # Compare the Geometry YAML files:
82
+ geometry_yaml_file = self.get_path_to_generated_file(
83
+ data_model=data_model, file_name='GeometryModel', file_extension="yaml"
84
+ )
85
+ reference_geometry_yaml_file = self.get_path_to_reference_file(
86
+ data_model=data_model, file_name='GeometryModel', file_extension="yaml"
87
+ )
88
+ self.compare_json_or_yaml_files(geometry_yaml_file, reference_geometry_yaml_file, tolerance=1e-9)
48
89
 
49
90
  if __name__ == "__main__":
50
91
  unittest.main()