fiqus 2025.1.1__py3-none-any.whl → 2025.2.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.
- fiqus/mesh_generators/MeshPancake3D.py +7 -4
- fiqus/pro_templates/combined/Multipole_template.pro +17 -9
- fiqus/pro_templates/combined/Pancake3D_template.pro +128 -24
- {fiqus-2025.1.1.dist-info → fiqus-2025.2.0.dist-info}/METADATA +5 -4
- {fiqus-2025.1.1.dist-info → fiqus-2025.2.0.dist-info}/RECORD +8 -8
- {fiqus-2025.1.1.dist-info → fiqus-2025.2.0.dist-info}/LICENSE.txt +0 -0
- {fiqus-2025.1.1.dist-info → fiqus-2025.2.0.dist-info}/WHEEL +0 -0
- {fiqus-2025.1.1.dist-info → fiqus-2025.2.0.dist-info}/top_level.txt +0 -0
|
@@ -199,7 +199,7 @@ class regions:
|
|
|
199
199
|
:param filename: Name of the regions file (with extension).
|
|
200
200
|
:type filename: str
|
|
201
201
|
"""
|
|
202
|
-
FilesAndFolders.write_data_to_yaml(filename, self.rm.
|
|
202
|
+
FilesAndFolders.write_data_to_yaml(filename, self.rm.model_dump())
|
|
203
203
|
|
|
204
204
|
|
|
205
205
|
class curveType(Enum):
|
|
@@ -970,9 +970,12 @@ class Mesh(Base):
|
|
|
970
970
|
# Start logger:
|
|
971
971
|
gmsh.logger.start()
|
|
972
972
|
|
|
973
|
+
gmsh.option.setNumber("Mesh.Algorithm", 6)
|
|
974
|
+
gmsh.option.setNumber("Mesh.Algorithm3D", 1)
|
|
975
|
+
|
|
973
976
|
# Mesh:
|
|
974
977
|
gmsh.model.mesh.generate()
|
|
975
|
-
gmsh.model.mesh.optimize()
|
|
978
|
+
gmsh.model.mesh.optimize("Netgen")
|
|
976
979
|
|
|
977
980
|
# Print the log:
|
|
978
981
|
log = gmsh.logger.get()
|
|
@@ -2899,12 +2902,12 @@ class Mesh(Base):
|
|
|
2899
2902
|
self.mesh_data_file, Pancake3DMesh
|
|
2900
2903
|
)
|
|
2901
2904
|
|
|
2902
|
-
if previousGeo.
|
|
2905
|
+
if previousGeo.model_dump() != self.geo.model_dump():
|
|
2903
2906
|
raise ValueError(
|
|
2904
2907
|
"Geometry data has been changed. Please regenerate the geometry or load"
|
|
2905
2908
|
" the previous geometry data."
|
|
2906
2909
|
)
|
|
2907
|
-
elif previousMesh.
|
|
2910
|
+
elif previousMesh.model_dump() != self.mesh.model_dump():
|
|
2908
2911
|
raise ValueError(
|
|
2909
2912
|
"Mesh data has been changed. Please regenerate the mesh or load the"
|
|
2910
2913
|
" previous mesh data."
|
|
@@ -497,15 +497,23 @@ Function {
|
|
|
497
497
|
{% endfor %}
|
|
498
498
|
{% endif %}
|
|
499
499
|
|
|
500
|
-
{% for name, current in zip(rm_EM.powered['r1_a1'].vol.names + rm_EM.powered['r1_a2'].vol.names + rm_EM.powered['r2_a1'].vol.names + rm_EM.powered['r2_a2'].vol.names,
|
|
501
|
-
rm_EM.powered['r1_a1'].vol.currents + rm_EM.powered['r1_a2'].vol.currents + rm_EM.powered['r2_a1'].vol.currents + rm_EM.powered['r2_a2'].vol.currents
|
|
502
|
-
|
|
500
|
+
{% for name, current, number in zip(rm_EM.powered['r1_a1'].vol.names + rm_EM.powered['r1_a2'].vol.names + rm_EM.powered['r2_a1'].vol.names + rm_EM.powered['r2_a2'].vol.names,
|
|
501
|
+
rm_EM.powered['r1_a1'].vol.currents + rm_EM.powered['r1_a2'].vol.currents + rm_EM.powered['r2_a1'].vol.currents + rm_EM.powered['r2_a2'].vol.currents,
|
|
502
|
+
rm_EM.powered['r1_a1'].vol.numbers + rm_EM.powered['r1_a2'].vol.numbers + rm_EM.powered['r2_a1'].vol.numbers + rm_EM.powered['r2_a2'].vol.numbers
|
|
503
|
+
) %}
|
|
504
|
+
js_fct[ <<name>> ] = <<current>>/SurfaceArea[]{ <<number>> };
|
|
503
505
|
{% endfor %}
|
|
504
506
|
|
|
505
507
|
{% endif %}
|
|
506
508
|
|
|
507
509
|
{% if dm.magnet.solve.thermal.solve_type %}
|
|
508
510
|
|
|
511
|
+
{% for name, number in zip(rm_TH.powered['r1_a1'].vol.names + rm_TH.powered['r1_a2'].vol.names + rm_TH.powered['r2_a1'].vol.names + rm_TH.powered['r2_a2'].vol.names,
|
|
512
|
+
rm_TH.powered['r1_a1'].vol.numbers + rm_TH.powered['r1_a2'].vol.numbers + rm_TH.powered['r2_a1'].vol.numbers + rm_TH.powered['r2_a2'].vol.numbers
|
|
513
|
+
) %}
|
|
514
|
+
area_fct[ <<name>> ] = SurfaceArea[]{ <<number>> };
|
|
515
|
+
{% endfor %}
|
|
516
|
+
|
|
509
517
|
{% if dm.magnet.geometry.thermal.use_TSA %}
|
|
510
518
|
{% for nr, tags in enumerate(rm_TH.boundaries.thermal.temperature.bc.numbers) %}
|
|
511
519
|
bnd_dirichlet_<<nr + 1>>() = {<<tags|join(', ')>>};
|
|
@@ -696,9 +704,9 @@ Function {
|
|
|
696
704
|
|
|
697
705
|
// joule losses of bare part
|
|
698
706
|
{% if dm.magnet.solve.electromagnetics.solve_type %}
|
|
699
|
-
jouleLosses[] = CFUN_quenchState_Ic[criticalCurrentDensity[$1, $2] *
|
|
707
|
+
jouleLosses[] = CFUN_quenchState_Ic[criticalCurrentDensity[$1, $2] * area_fct[]]{source_current} * rho[$1, $2] * SquNorm[source_current/area_fct[]];
|
|
700
708
|
{% else %}
|
|
701
|
-
jouleLosses[] = CFUN_quenchState_Ic[criticalCurrentDensity[$1] *
|
|
709
|
+
jouleLosses[] = CFUN_quenchState_Ic[criticalCurrentDensity[$1] * area_fct[]]{source_current} * rho[$1] * SquNorm[source_current/area_fct[]];
|
|
702
710
|
{% endif %}
|
|
703
711
|
|
|
704
712
|
{% if dm.magnet.geometry.thermal.with_wedges %}
|
|
@@ -1664,10 +1672,10 @@ PostProcessing {
|
|
|
1664
1672
|
{ Name jOverJc ;
|
|
1665
1673
|
Value {
|
|
1666
1674
|
{% if dm.magnet.solve.electromagnetics.solve_type %}
|
|
1667
|
-
Term { [ source_current/
|
|
1675
|
+
Term { [ source_current/area_fct[] * 1/(criticalCurrentDensity[{T}, GetVariable[ElementNum[], QuadraturePointIndex[]]{$Bnorm}] + 1) ] ;
|
|
1668
1676
|
In <<nc.omega>>_TH ; Jacobian Jac_Vol_TH ; }
|
|
1669
1677
|
{% else %}
|
|
1670
|
-
Term { [ source_current/
|
|
1678
|
+
Term { [ source_current/area_fct[] * 1/(criticalCurrentDensity[{T}] + 1) ] ;
|
|
1671
1679
|
In <<nc.omega>>_TH ; Jacobian Jac_Vol_TH ; }
|
|
1672
1680
|
{% endif %}
|
|
1673
1681
|
}
|
|
@@ -1676,11 +1684,11 @@ PostProcessing {
|
|
|
1676
1684
|
// Temperature average as integral quantity
|
|
1677
1685
|
{ Name T_avg ;
|
|
1678
1686
|
Value {
|
|
1679
|
-
Integral { [ {T} /
|
|
1687
|
+
Integral { [ {T} / area_fct[] ] ;
|
|
1680
1688
|
In Region[ {<<nc.omega>><<nc.powered>>_TH{% if dm.magnet.geometry.thermal.with_iron_yoke %}, <<nc.omega>><<nc.iron>>{% endif %}{% if dm.magnet.geometry.thermal.with_wedges %}, <<nc.omega>><<nc.induced>>_TH{% endif %} } ] ; Jacobian Jac_Vol_TH ; Integration Int_conducting_TH; }
|
|
1681
1689
|
|
|
1682
1690
|
{% if not dm.magnet.geometry.thermal.use_TSA %}
|
|
1683
|
-
Integral { [ {T} /
|
|
1691
|
+
Integral { [ {T} / area_fct[] ] ;
|
|
1684
1692
|
In <<nc.omega>><<nc.insulator>>_TH ; Jacobian Jac_Vol_TH ; Integration Int_insulating_TH; }
|
|
1685
1693
|
{% endif %}
|
|
1686
1694
|
}
|
|
@@ -606,9 +606,6 @@ Integral {
|
|
|
606
606
|
{% set cryocooler_quantity = "LOCALQUANT_T" %}
|
|
607
607
|
{% endif %}
|
|
608
608
|
Integral {
|
|
609
|
-
// Division by area to compute Watts per meter squared
|
|
610
|
-
// SurfaceArea function does not allow DOM_*** as argument, so we need to use
|
|
611
|
-
// the actual ids
|
|
612
609
|
[ cryocoolerCoolingPower[{<<cryocooler_quantity>>}], {<<cryocooler_quantity>>} ];
|
|
613
610
|
In DOM_terminalSurfaces;
|
|
614
611
|
Jacobian JAC_sur;
|
|
@@ -723,7 +720,11 @@ Integral {
|
|
|
723
720
|
{% set quantityName = "LOCALQUANT_electricScalarPotentialThinShell" %}
|
|
724
721
|
{% set temperatureArgument = "LOCALQUANT_TThinShell" %}
|
|
725
722
|
{% set functionKey = "electricScalarPotential" %}
|
|
723
|
+
{% if dm.magnet.solve.contactLayer.resistivity == "perfectlyInsulating" %}
|
|
726
724
|
{% set integrationDomain = "DOM_terminalContactLayerSurface_WithoutNotch" %}
|
|
725
|
+
{% else %}
|
|
726
|
+
{% set integrationDomain = "DOM_allInsulationSurface_WithoutNotch" %}
|
|
727
|
+
{% endif %}
|
|
727
728
|
{% elif type == "resistiveHeating" %}
|
|
728
729
|
{% set temperatureArgument = "LOCALQUANT_TThinShell" %}
|
|
729
730
|
{% if dm.magnet.solve.contactLayer.resistivity == "perfectlyInsulating" %}
|
|
@@ -1403,6 +1404,7 @@ Group{
|
|
|
1403
1404
|
DOM_terminalContactLayerSurface_WithoutNotch = Region[{ <<rm.insulator.surf.numbers[1::3]|join(', ')>> }];
|
|
1404
1405
|
DOM_terminalContactLayerSurface_Notch = Region[{ <<rm.insulator.surf.numbers[2::3]|join(', ')>> }];
|
|
1405
1406
|
DOM_terminalContactLayerSurface = Region[{ DOM_terminalContactLayerSurface_WithoutNotch, DOM_terminalContactLayerSurface_Notch }];
|
|
1407
|
+
DOM_allInsulationSurface_WithoutNotch = Region[ {DOM_insulationSurface, DOM_terminalContactLayerSurface_WithoutNotch} ];
|
|
1406
1408
|
|
|
1407
1409
|
{% if dm.magnet.solve.convectiveCooling.heatTransferCoefficient %}
|
|
1408
1410
|
DOM_allWindingSurface = Region[{ <<rm.powered["Pancake3D"].surf_th.numbers[2::]|join(', ')>> }];
|
|
@@ -1439,7 +1441,7 @@ Group{
|
|
|
1439
1441
|
DOM_resistiveHeating = Region[{ DOM_allWindings }];
|
|
1440
1442
|
{% endif %}
|
|
1441
1443
|
DOM_thermal = Region[{ {% if dm.magnet.solve.solveHeatEquationTerminalsTransitionNotch %}DOM_powered{% else %}DOM_allWindings{% endif %}}];
|
|
1442
|
-
|
|
1444
|
+
{% else %}
|
|
1443
1445
|
DOM_thermal = Region[{ {% if dm.magnet.solve.solveHeatEquationTerminalsTransitionNotch %}DOM_powered, DOM_allInsulations{% else %}DOM_allWindings, DOM_allInsulations{% endif %}}];
|
|
1444
1446
|
DOM_allConducting = Region[{ DOM_powered, DOM_terminalContactLayer}];
|
|
1445
1447
|
{% if dm.magnet.solve.resistiveHeatingTerminals %}
|
|
@@ -1679,7 +1681,7 @@ if (
|
|
|
1679
1681
|
{% if dm.magnet.solve.terminals.cryocoolerOptions.lumpedMass.volume %}
|
|
1680
1682
|
// Cryocooler TSA parameters start ==================================================
|
|
1681
1683
|
INPUT_NumOfCryocoolerTSAElements = <<dm.magnet.solve.terminals.cryocoolerOptions.lumpedMass.numberOfThinShellElements>>;
|
|
1682
|
-
cryocooler_thickness[] = <<dm.magnet.solve.terminals.cryocoolerOptions.lumpedMass.volume>>/
|
|
1684
|
+
cryocooler_thickness[] = <<dm.magnet.solve.terminals.cryocoolerOptions.lumpedMass.volume>>/ GetVariable[]{$areaCryocooler} ;
|
|
1683
1685
|
th_cryocooler_k[] = cryocooler_thickness[]/INPUT_NumOfCryocoolerTSAElements;
|
|
1684
1686
|
// Cryocooler TSA parameters end ====================================================
|
|
1685
1687
|
{% endif %}
|
|
@@ -2113,6 +2115,38 @@ if (
|
|
|
2113
2115
|
{% endif %}
|
|
2114
2116
|
{% endif %}
|
|
2115
2117
|
// Insulation resistivity ends =====================================================
|
|
2118
|
+
|
|
2119
|
+
{% if dm.magnet.solve.voltageTapPositions %}
|
|
2120
|
+
// Insulation conductivity starts ===================================================
|
|
2121
|
+
{% if dm.magnet.solve.terminals.terminalContactLayer.resistivity and dm.magnet.geometry.contactLayer.thinShellApproximation and dm.magnet.solve.contactLayer.resistivity != "perfectlyInsulating" %}
|
|
2122
|
+
// Linear:
|
|
2123
|
+
INPUT_insulationConductivity = 1./<<dm.magnet.solve.contactLayer.resistivity>>; // conductivity of the insulation, [S/m]
|
|
2124
|
+
|
|
2125
|
+
// Thin-shell insulation:
|
|
2126
|
+
{% for a in range(1,3) %}
|
|
2127
|
+
{% for b in range(1,3) %}
|
|
2128
|
+
electricScalarPotentialMassFunctionNoDta<<a>>b<<b>>[DOM_insulationSurface] = TSA_constantMaterial_constantThickness_mass[]{
|
|
2129
|
+
th_terminal_k, INPUT_insulationConductivity, <<a>>, <<b>>
|
|
2130
|
+
};
|
|
2131
|
+
|
|
2132
|
+
electricScalarPotentialStiffnessFunctiona<<a>>b<<b>>[DOM_insulationSurface] = TSA_constantMaterial_constantThickness_stiffness[]{
|
|
2133
|
+
th_terminal_k, INPUT_insulationConductivity, <<a>>, <<b>>
|
|
2134
|
+
};
|
|
2135
|
+
{% endfor %}
|
|
2136
|
+
{% endfor %}
|
|
2137
|
+
|
|
2138
|
+
|
|
2139
|
+
|
|
2140
|
+
{% elif not dm.magnet.solve.contactLayer.resistivity %}
|
|
2141
|
+
// Nonlinear:
|
|
2142
|
+
|
|
2143
|
+
// Thin-shell insulation:
|
|
2144
|
+
{# Non-linear TSA conductivity not considered yet. #}
|
|
2145
|
+
<<0/0>>;
|
|
2146
|
+
|
|
2147
|
+
{% endif %}
|
|
2148
|
+
// Insulation conductivity ends =====================================================
|
|
2149
|
+
{% endif %}
|
|
2116
2150
|
|
|
2117
2151
|
// Transition layer resistivity starts =============================================
|
|
2118
2152
|
{% if dm.magnet.solve.terminals.terminalContactLayer.resistivity %}
|
|
@@ -2625,10 +2659,10 @@ if (
|
|
|
2625
2659
|
// SurfaceArea function does not allow DOM_*** as argument, so we need to use
|
|
2626
2660
|
// the actual ids
|
|
2627
2661
|
cryocoolerCoolingPower[] =
|
|
2628
|
-
(<<dm.magnet.solve.terminals.cryocoolerOptions.coolingPowerMultiplier>> * CFUN_P2vsT2_cryocooler_SHI_SRDE_418D4_T[$1] - <<dm.magnet.solve.terminals.cryocoolerOptions.staticHeatLoadPower>>)/
|
|
2662
|
+
(<<dm.magnet.solve.terminals.cryocoolerOptions.coolingPowerMultiplier>> * CFUN_P2vsT2_cryocooler_SHI_SRDE_418D4_T[$1] - <<dm.magnet.solve.terminals.cryocoolerOptions.staticHeatLoadPower>>)/ GetVariable[]{$areaCryocooler} ;
|
|
2629
2663
|
|
|
2630
2664
|
cryocoolerCoolingPowerDerivativeT[] =
|
|
2631
|
-
<<dm.magnet.solve.terminals.cryocoolerOptions.coolingPowerMultiplier>> * CFUN_P2vsT2_cryocooler_SHI_SRDE_418D4_dT_T[$1]/
|
|
2665
|
+
<<dm.magnet.solve.terminals.cryocoolerOptions.coolingPowerMultiplier>> * CFUN_P2vsT2_cryocooler_SHI_SRDE_418D4_dT_T[$1]/ GetVariable[]{$areaCryocooler};
|
|
2632
2666
|
{% endif %}
|
|
2633
2667
|
}
|
|
2634
2668
|
|
|
@@ -3259,7 +3293,11 @@ FunctionSpace{
|
|
|
3259
3293
|
Name BASISFUN_sn~{i};
|
|
3260
3294
|
NameOfCoef sn~{i};
|
|
3261
3295
|
Function BF_Node;
|
|
3296
|
+
{% if dm.magnet.solve.contactLayer.resistivity == "perfectlyInsulating" %}
|
|
3262
3297
|
Support DOM_terminalContactLayerSurface;
|
|
3298
|
+
{% else %}
|
|
3299
|
+
Support DOM_allInsulationSurface;
|
|
3300
|
+
{% endif %}
|
|
3263
3301
|
Entity NodesOf[ All ];
|
|
3264
3302
|
}
|
|
3265
3303
|
EndFor
|
|
@@ -3531,6 +3569,9 @@ Resolution{
|
|
|
3531
3569
|
}
|
|
3532
3570
|
|
|
3533
3571
|
Operation{
|
|
3572
|
+
{% if dm.magnet.solve.terminals.cooling == "cryocooler" %}
|
|
3573
|
+
Evaluate[SetVariable[SurfaceArea[]{<< rm.powered['Pancake3D'].surf_in.numbers | join(', ') >>, << rm.powered['Pancake3D'].surf_out.numbers | join(', ') >> }]{$areaCryocooler}];
|
|
3574
|
+
{% endif %}
|
|
3534
3575
|
{% if dm.magnet.solve.type == "weaklyCoupled" %}
|
|
3535
3576
|
{% set systemNames = ["SYSTEM_electromagnetic", "SYSTEM_thermal"] %}
|
|
3536
3577
|
{% set solveAfterThisTimes = [0, 0]%}
|
|
@@ -3657,8 +3698,46 @@ PostProcessing{
|
|
|
3657
3698
|
}
|
|
3658
3699
|
}
|
|
3659
3700
|
}
|
|
3660
|
-
|
|
3661
|
-
|
|
3701
|
+
{% if dm.magnet.geometry.contactLayer.thinShellApproximation %}
|
|
3702
|
+
{
|
|
3703
|
+
Name RESULT_arcLengthContactLayer;
|
|
3704
|
+
Value{
|
|
3705
|
+
Local{
|
|
3706
|
+
[Pancake3DGetContinuousArcLength_contactLayer[XYZ[]]{
|
|
3707
|
+
<<dm.magnet.geometry.winding.innerRadius>>,
|
|
3708
|
+
<<windingThickness>>,
|
|
3709
|
+
<<gapThickness>>,
|
|
3710
|
+
<<dm.magnet.geometry.winding.theta_i>>,
|
|
3711
|
+
<<dm.magnet.mesh.winding.azimuthalNumberOfElementsPerTurn[0]>>,
|
|
3712
|
+
<<dm.magnet.geometry.numberOfPancakes>>,
|
|
3713
|
+
<<dm.magnet.geometry.winding.height>>,
|
|
3714
|
+
<<dm.magnet.geometry.gapBetweenPancakes>>
|
|
3715
|
+
}];
|
|
3716
|
+
In DOM_allInsulationSurface;
|
|
3717
|
+
Jacobian JAC_sur;
|
|
3718
|
+
}
|
|
3719
|
+
}
|
|
3720
|
+
}
|
|
3721
|
+
{
|
|
3722
|
+
Name RESULT_turnNumberContactLayer;
|
|
3723
|
+
Value{
|
|
3724
|
+
Local{
|
|
3725
|
+
[Pancake3DGetContinuousTurnNumber_contactLayer[XYZ[]]{
|
|
3726
|
+
<<dm.magnet.geometry.winding.innerRadius>>,
|
|
3727
|
+
<<windingThickness>>,
|
|
3728
|
+
<<gapThickness>>,
|
|
3729
|
+
<<dm.magnet.geometry.winding.theta_i>>,
|
|
3730
|
+
<<dm.magnet.mesh.winding.azimuthalNumberOfElementsPerTurn[0]>>,
|
|
3731
|
+
<<dm.magnet.geometry.numberOfPancakes>>,
|
|
3732
|
+
<<dm.magnet.geometry.winding.height>>,
|
|
3733
|
+
<<dm.magnet.geometry.gapBetweenPancakes>>
|
|
3734
|
+
}];
|
|
3735
|
+
In DOM_allInsulationSurface;
|
|
3736
|
+
Jacobian JAC_sur;
|
|
3737
|
+
}
|
|
3738
|
+
}
|
|
3739
|
+
}
|
|
3740
|
+
{% endif %}
|
|
3662
3741
|
{
|
|
3663
3742
|
Name RESULT_turnNumber;
|
|
3664
3743
|
Value{
|
|
@@ -3915,7 +3994,7 @@ PostProcessing{
|
|
|
3915
3994
|
Term {
|
|
3916
3995
|
Type Global;
|
|
3917
3996
|
[ #999 ];
|
|
3918
|
-
In
|
|
3997
|
+
In DOM_powered;
|
|
3919
3998
|
}
|
|
3920
3999
|
}
|
|
3921
4000
|
}
|
|
@@ -3970,9 +4049,6 @@ PostProcessing{
|
|
|
3970
4049
|
Value{
|
|
3971
4050
|
Integral{
|
|
3972
4051
|
Type Global;
|
|
3973
|
-
// Division by area to compute Watts per meter squared
|
|
3974
|
-
// SurfaceArea function does not allow DOM_*** as argument, so we need to use
|
|
3975
|
-
// the actual ids
|
|
3976
4052
|
{% if dm.magnet.solve.terminals.cryocoolerOptions.lumpedMass.volume %}
|
|
3977
4053
|
{% set cryocooler_quantity = "LOCALQUANT_cryocooler_TThinShell~{INPUT_NumOfCryocoolerTSAElements}" %}
|
|
3978
4054
|
{% else %}
|
|
@@ -4001,7 +4077,7 @@ PostProcessing{
|
|
|
4001
4077
|
{% set cryocooler_quantity = "LOCALQUANT_T" %}
|
|
4002
4078
|
{% endif %}
|
|
4003
4079
|
|
|
4004
|
-
[ {<<cryocooler_quantity>>}/
|
|
4080
|
+
[ {<<cryocooler_quantity>>}/ GetVariable[]{$areaCryocooler}];
|
|
4005
4081
|
In DOM_terminalSurfaces;
|
|
4006
4082
|
Jacobian JAC_sur;
|
|
4007
4083
|
Integration Int;
|
|
@@ -4058,7 +4134,7 @@ PostProcessing{
|
|
|
4058
4134
|
{% if dm.magnet.solve.contactLayer.resistivity == "perfectlyInsulating" %}
|
|
4059
4135
|
In DOM_terminalContactLayerSurface_WithoutNotch;
|
|
4060
4136
|
{% else %}
|
|
4061
|
-
In
|
|
4137
|
+
In DOM_allInsulationSurface_WithoutNotch;
|
|
4062
4138
|
{% endif %}
|
|
4063
4139
|
Integration Int;
|
|
4064
4140
|
Jacobian JAC_sur;
|
|
@@ -4075,7 +4151,7 @@ PostProcessing{
|
|
|
4075
4151
|
{% if dm.magnet.solve.contactLayer.resistivity == "perfectlyInsulating" %}
|
|
4076
4152
|
In DOM_terminalContactLayerSurface_WithoutNotch;
|
|
4077
4153
|
{% else %}
|
|
4078
|
-
In
|
|
4154
|
+
In DOM_allInsulationSurface_WithoutNotch;
|
|
4079
4155
|
{% endif %}
|
|
4080
4156
|
Integration Int;
|
|
4081
4157
|
Jacobian JAC_sur;
|
|
@@ -4235,6 +4311,34 @@ PostOperation{
|
|
|
4235
4311
|
)|indent(12)>>
|
|
4236
4312
|
}
|
|
4237
4313
|
}
|
|
4314
|
+
{% if dm.magnet.geometry.contactLayer.thinShellApproximation %}
|
|
4315
|
+
{
|
|
4316
|
+
Name POSTOP_arcLengthContactLayer;
|
|
4317
|
+
NameOfPostProcessing POSTPRO_<<dm.magnet.solve.type>>;
|
|
4318
|
+
Operation{
|
|
4319
|
+
<<POSTOPERATION_printResults(
|
|
4320
|
+
quantity="RESULT_arcLengthContactLayer",
|
|
4321
|
+
onElementsOf="DOM_allInsulationSurface",
|
|
4322
|
+
name="Arc Length Contact Layer [m]",
|
|
4323
|
+
fileName="arcLengthContactLayer",
|
|
4324
|
+
lastTimeStepOnly=True
|
|
4325
|
+
)|indent(12)>>
|
|
4326
|
+
}
|
|
4327
|
+
}
|
|
4328
|
+
{
|
|
4329
|
+
Name POSTOP_turnNumberContactLayer;
|
|
4330
|
+
NameOfPostProcessing POSTPRO_<<dm.magnet.solve.type>>;
|
|
4331
|
+
Operation{
|
|
4332
|
+
<<POSTOPERATION_printResults(
|
|
4333
|
+
quantity="RESULT_turnNumberContactLayer",
|
|
4334
|
+
onElementsOf="DOM_allInsulationSurface",
|
|
4335
|
+
name="Turn number contact layer [m]",
|
|
4336
|
+
fileName="turnNumberContactLayer",
|
|
4337
|
+
lastTimeStepOnly=True
|
|
4338
|
+
)|indent(12)>>
|
|
4339
|
+
}
|
|
4340
|
+
}
|
|
4341
|
+
{% endif %}
|
|
4238
4342
|
{
|
|
4239
4343
|
Name POSTOP_turnNumber;
|
|
4240
4344
|
NameOfPostProcessing POSTPRO_<<dm.magnet.solve.type>>;
|
|
@@ -4452,7 +4556,7 @@ PostOperation{
|
|
|
4452
4556
|
NameOfPostProcessing POSTPRO_<<dm.magnet.solve.type>>;
|
|
4453
4557
|
Operation {
|
|
4454
4558
|
Print[ RESULT_temperature,
|
|
4455
|
-
OnElementsOf
|
|
4559
|
+
OnElementsOf DOM_powered,
|
|
4456
4560
|
StoreMaxInRegister 999,
|
|
4457
4561
|
Format Table,
|
|
4458
4562
|
LastTimeStepOnly 1,
|
|
@@ -4629,14 +4733,14 @@ PostOperation{
|
|
|
4629
4733
|
{% endif %}
|
|
4630
4734
|
// convergence criteria as postoperations:
|
|
4631
4735
|
{% for tolerance in (dm.magnet.solve.nonlinearSolver.postOperationTolerances + dm.magnet.solve.time.adaptiveSteppingSettings.postOperationTolerances)|unique(attribute="quantity") %}
|
|
4632
|
-
{% if tolerance.quantity
|
|
4736
|
+
{% if tolerance.quantity in ["totalResistiveHeating", "magneticEnergy"] %}
|
|
4633
4737
|
{
|
|
4634
4738
|
// Does this work properly without explicitly specifying AtGaussPoints? Expectation: yes, since it should do the integration over the whole by Gaussian Integration
|
|
4635
|
-
Name
|
|
4739
|
+
Name POSTOP_CONV_<<tolerance.quantity>>;
|
|
4636
4740
|
NameOfPostProcessing POSTPRO_<<dm.magnet.solve.type>>;
|
|
4637
4741
|
LastTimeStepOnly 1;
|
|
4638
4742
|
Operation {
|
|
4639
|
-
Print[
|
|
4743
|
+
Print[RESULT_<<tolerance.quantity>>, OnGlobal];
|
|
4640
4744
|
}
|
|
4641
4745
|
}
|
|
4642
4746
|
{% elif tolerance.quantity in ["voltageBetweenTerminals", "currentThroughCoil"] %}
|
|
@@ -4655,7 +4759,7 @@ PostOperation{
|
|
|
4655
4759
|
NameOfPostProcessing POSTPRO_<<dm.magnet.solve.type>>;
|
|
4656
4760
|
Operation {
|
|
4657
4761
|
Print[ RESULT_temperature,
|
|
4658
|
-
OnElementsOf
|
|
4762
|
+
OnElementsOf DOM_powered,
|
|
4659
4763
|
StoreMaxInRegister 999,
|
|
4660
4764
|
Format Table,
|
|
4661
4765
|
LastTimeStepOnly 1,
|
|
@@ -4664,7 +4768,7 @@ PostOperation{
|
|
|
4664
4768
|
|
|
4665
4769
|
<<POSTOPERATION_printResults(
|
|
4666
4770
|
quantity="RESULT_maximumTemperature",
|
|
4667
|
-
onRegion="
|
|
4771
|
+
onRegion="DOM_powered",
|
|
4668
4772
|
format="TimeTable",
|
|
4669
4773
|
name="Maximum temperature [K]",
|
|
4670
4774
|
appendToExistingFile=True,
|
|
@@ -4777,8 +4881,8 @@ PostOperation{
|
|
|
4777
4881
|
)|indent(12)>>
|
|
4778
4882
|
{% endfor %}
|
|
4779
4883
|
|
|
4780
|
-
|
|
4781
|
-
//
|
|
4884
|
+
Print[RESULT_electricScalarPotential, OnElementsOf Region[{DOM_terminals, DOM_allWindings {% if not dm.magnet.geometry.contactLayer.thinShellApproximation %}, DOM_insulation{% endif %} }], File "electricScalarPotential.pos"];
|
|
4885
|
+
//Print[RESULT_currentFromElectricScalarPotential, OnElementsOf DOM_allWindings, File "currentFromElectricScalarPotential.pos", AtGaussPoints 6];
|
|
4782
4886
|
}
|
|
4783
4887
|
}
|
|
4784
4888
|
{% endif %}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: fiqus
|
|
3
|
-
Version: 2025.
|
|
3
|
+
Version: 2025.2.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
|
|
@@ -86,13 +86,14 @@ Source code for STEAM **FiQuS** (**Fi**nite Element **Qu**ench **S**imulator).
|
|
|
86
86
|
|
|
87
87
|
## Describing FiQuS Modules
|
|
88
88
|
- 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)
|
|
89
|
-
- J. Dular et al, "Coupled Axial and Transverse Currents Method for Finite Element Modelling of Periodic Superconductors",
|
|
89
|
+
- J. Dular et al, "Coupled Axial and Transverse Currents Method for Finite Element Modelling of Periodic Superconductors", in Superconductor Science and Technology, doi: [10.1088/1361-6668/ad650d](https://doi.org/10.1088/1361-6668/ad650d).
|
|
90
|
+
- E. Schnaubelt et al, "Transient Finite Element Simulation of Accelerator Magnets Using Thermal Thin Shell Approximation", arXiV preprint, doi: [10.48550/arXiv.2501.15871](https://doi.org/10.48550/arXiv.2501.15871).
|
|
90
91
|
- 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).
|
|
91
92
|
|
|
92
93
|
## Using FiQuS
|
|
93
94
|
|
|
94
|
-
- J. Dular et al, "Simulation of Rutherford Cable AC Loss and Magnetization with the Coupled Axial and Transverse Currents Method",
|
|
95
|
-
- M. Wozniak et al, "Influence of Critical Current Distribution on Operation, Quench Detection and Protection of HTS Pancake Coils,
|
|
95
|
+
- J. Dular et al, "Simulation of Rutherford Cable AC Loss and Magnetization with the Coupled Axial and Transverse Currents Method", in IEEE Transactions on Applied Superconductivity, [10.1109/TASC.2024.3520941](https://doi.org/10.1109/TASC.2024.3520941).
|
|
96
|
+
- M. Wozniak et al, "Influence of Critical Current Distribution on Operation, Quench Detection and Protection of HTS Pancake Coils, in IEEE Transactions on Applied Superconductivity, [10.1109/TASC.2025.3532246](https://doi.org/10.1109/TASC.2025.3532246).
|
|
96
97
|
- Laura AM D’Angelo et al, "Efficient Reduced Magnetic Vector Potential Formulation for the Magnetic Field Simulation of Accelerator Magnets", in IEEE Transactions on Magnetics, vol. 60, no. 3, pp. 1-8, Jan. 2024, Art no. 7000808, doi: [10.1109/TMAG.2024.3352113](https://ieeexplore.ieee.org/abstract/document/10387412).
|
|
97
98
|
- M. Wozniak et al, "Quench Co-Simulation of Canted Cos-Theta Magnets," in IEEE Transactions on Applied Superconductivity, vol. 34, no. 3, pp. 1-5, Dec. 2023, Art no. 4900105, doi: [10.1109/TASC.2023.3338142](https://ieeexplore.ieee.org/document/10337614).
|
|
98
99
|
- 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).
|
|
@@ -32,7 +32,7 @@ fiqus/mains/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
|
32
32
|
fiqus/mesh_generators/MeshCCT.py,sha256=e2oERrb2Vp7W8eAptijFq1vi-cUbYS_T3jCDqH3foIg,11227
|
|
33
33
|
fiqus/mesh_generators/MeshConductorAC_Strand.py,sha256=bz8kzFDd_XnRA892ifuCp11zMTZMQ5NdsNKSslP7gZc,42466
|
|
34
34
|
fiqus/mesh_generators/MeshMultipole.py,sha256=mjdjzw5RGlggoXAVvUqFM43yGXSwDNbta0z1l76c7uc,97181
|
|
35
|
-
fiqus/mesh_generators/MeshPancake3D.py,sha256=
|
|
35
|
+
fiqus/mesh_generators/MeshPancake3D.py,sha256=u31glrOUPGityJ5S0z4n3SvI_Vqqyh62jv7OXIq3-lY,126975
|
|
36
36
|
fiqus/mesh_generators/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
37
37
|
fiqus/parsers/ParserCOND.py,sha256=nQyRRZf2Jbvf6ri5rdhq2P6b52Qbp2tTHuDRT4ChxHI,41376
|
|
38
38
|
fiqus/parsers/ParserDAT.py,sha256=SPJHDbPuk1e7F9FZ3i7oRvOvYGO4LIkpy-ROGJBUEQ0,659
|
|
@@ -59,8 +59,8 @@ fiqus/pro_material_functions/ironBHcurves.pro,sha256=-4xfRg4BYefTEoNawPo3nbsrJJm
|
|
|
59
59
|
fiqus/pro_templates/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
60
60
|
fiqus/pro_templates/combined/CCT_template.pro,sha256=6r_fz9bH7AReCfDn33lyu472kjB0rkTma9_r4vBqV0U,13558
|
|
61
61
|
fiqus/pro_templates/combined/ConductorAC_template.pro,sha256=8aZwuRveHY2R0bEvC9Ysz_SISPLU7eNvi5szO_RUEtA,60694
|
|
62
|
-
fiqus/pro_templates/combined/Multipole_template.pro,sha256=
|
|
63
|
-
fiqus/pro_templates/combined/Pancake3D_template.pro,sha256=
|
|
62
|
+
fiqus/pro_templates/combined/Multipole_template.pro,sha256=Hbmh9NbZNAGsf9kUzdFEnoOnCRnIbmxdqa93jQCFsGw,97959
|
|
63
|
+
fiqus/pro_templates/combined/Pancake3D_template.pro,sha256=OjWWWAZel5Yk_k4FEFFNkkSFkCv1N0rM2-DRvilH6dc,215797
|
|
64
64
|
fiqus/pro_templates/combined/TSA_materials.pro,sha256=I8zVOP2ZEFqR0y3JcpSQJWaE6I4UeeMU22PtSD8ExCc,12244
|
|
65
65
|
fiqus/pro_templates/combined/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
66
66
|
fiqus/pro_templates/combined/materials.pro,sha256=D-cBOIMaQyYffIfoR4yRiK69Z6sxHu2QtyjhDIKFiXc,7038
|
|
@@ -78,8 +78,8 @@ tests/utils/fiqus_test_classes.py,sha256=i7G0wWA7MNdj-pAnXnGrpnv3KXx9JMDRUbKwFMR
|
|
|
78
78
|
tests/utils/generate_reference_files_ConductorAC.py,sha256=F5KK1AmHg1AmjZL6wRoR4R4kPpQu5KyLZtk1EnDsS1I,1619
|
|
79
79
|
tests/utils/generate_reference_files_Pancake3D.py,sha256=9sULcDOmbotrbYHz8DqGv6Km7ThfltnCHFojHUx193U,3126
|
|
80
80
|
tests/utils/helpers.py,sha256=bX3jz6Cux175TVWMpeaMo1SspQAewCSzKsC4ZwRBRR4,4052
|
|
81
|
-
fiqus-2025.
|
|
82
|
-
fiqus-2025.
|
|
83
|
-
fiqus-2025.
|
|
84
|
-
fiqus-2025.
|
|
85
|
-
fiqus-2025.
|
|
81
|
+
fiqus-2025.2.0.dist-info/LICENSE.txt,sha256=gcuuhKKc5-dwvyvHsXjlC9oM6N5gZ6umYbC8ewW1Yvg,35821
|
|
82
|
+
fiqus-2025.2.0.dist-info/METADATA,sha256=WYaVeRxe2Y8fnmJr9LBx5ROdrKbmHSl_wLwxKru2weQ,8143
|
|
83
|
+
fiqus-2025.2.0.dist-info/WHEEL,sha256=tZoeGjtWxWRfdplE7E3d45VPlLNQnvbKiYnx7gwAy8A,92
|
|
84
|
+
fiqus-2025.2.0.dist-info/top_level.txt,sha256=oGzSIyoVc1zYg14o67zI3QFwWsJvqNzNT0-te9WbUQc,12
|
|
85
|
+
fiqus-2025.2.0.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|