Skip to content
Snippets Groups Projects
Commit ac3abe44 authored by François Henrotte's avatar François Henrotte
Browse files

added comments, removed transfinite feature for AirRing and all its surfaces, except SlidingMaster

parent 6ad6df83
No related branches found
No related tags found
No related merge requests found
Pipeline #5220 passed
......@@ -235,9 +235,9 @@ For num In { 0:#lines()-1 }
EndIf
EndFor
Transfinite Surface{ surfaces() } ;
// Transfinite Surface{ surfaces() } ;
Transfinite Surface{ SlidingMaster() } ;
Transfinite Surface{ SlidingSlave() };
Transfinite Volume{ 10 };
// Identify 'SlidingSubmaster' Curve
......
/*
3D Magnetostatics with
Tutorial: 3D Magnetostatics with rotation and periodic boundary conditions
Features:
- OpenCascade solid modelling
- geometrical identfication of faces
- geometrical identification of faces
- antiperiodic boundary conditions
- sliding surface
- sliding surface to account for rotor rotation
To compute the solution interactively from the Gmsh GUI:
File > Open > microstrip.pro
Run (button at the bottom of the left panel)
*/
Include "rfpm_common.pro";
......@@ -25,6 +31,8 @@ AngularStep = deg * DefineNumber[2, Name "Options/1Angular step [deg]",
Visible Flag_QuasiStatic];
NumStep = DefineNumber[20, Name "Options/1Number of steps",
Visible Flag_QuasiStatic];
Gauge = DefineNumber[1, Name "Options/Gauging",
Choices{ 0="MUMPS", 1="Tree"}];
rpm = 2. * Pi / 60. ;
w1 = 1000 * rpm ;
......@@ -90,20 +98,24 @@ Function{
}
Function {
// Sliding surface:
// a1 is the angular span of Region and RegionRef.
// a0 is the mesh step of the meshes of
// a2[] is the angular position (in radian) of the rotor
// relative to its reference position (as in the msh file)
// assumed to be aligned with the stator.
// a3[] is the shear angle of region AIRBM
// (smaller than half the discretization step of the sliding surface
// to adapt to a2[] values that are not multiple of this step).
// AlignWithMaster[] maps a point of coordinates {X[], Y[], Z[]} onto
// its image in the open set RegionRef-SubRegionRef by the symmetry mapping.
// Coef[] is evaluated on Master nodes
// fFloor[] is a safe version of Floor[] for real represented int variables
// fRem[a,b] substracts from a multiple of b so that the result is in [0,1[
// Functions for the Sliding surface technique:
// - a1 is the angular span (in radian) of the sliding regions SlidingMaster
// and SlidingSlave.
// - a0 is the mesh step of the sliding region in the direction of rotation.
// - a2[] is the angular position (in radian) of the rotor relative to its
// reference position (that in the msh file) assumed to be aligned with the
// stator.
// - a3[] is the shear angle of the AirRing region to adapt to a2[] values
// that are not multiple of a0. On has fabs(a3[]) < a0/2.
// - AlignWithMaster[] maps a point of coordinates {X[], Y[], Z[]} onto its
// image by periodicity in the open set SlidingMaster - SlidingSubMaster.
// - Coef[] = -1 or 1 is the coefficient of (anti-)periodicity condition.
// This function is evaluated on SlidingMaster nodes
// - fFloor[] is a robust version of Floor[] for float-represented integer
// variables.
// - fRem[a,b] substracts from a multiple of b so that the result is in [0,b[
// It is a robust version of the remainder of the integer division for
// float-represented integer variables.
Periodicity = -1. ; // -1 for antiperiodicity, 1 for periodicity
RotatePZ[] = Rotate[ XYZ[], 0, 0, $1 ] ;
......@@ -174,6 +186,11 @@ Constraint {
}
}
}
// A correct spanning-tree is essential to the validity of the model.
// The spanning-tree must be autosimilar by rotation on the sliding surfaces
// (SubRegion2 clause, only the edges aligned with the Z axis are placed in
// the tree), and be also a spanning-tree and Dirichlet and Link surfaces and
// their boundaries (SubRegion clause).
{ Name GaugeCondition_a ; Type Assign ;
Case {
{ Region Vol_Tree ; Value 0. ;
......@@ -296,22 +313,12 @@ PostOperation Fields UsingPost MagSta_a {
File "tmp.geo", LastTimeStepOnly] ;
}
PostOperation {
{ Name pos; NameOfPostProcessing MagSta_a;
Operation {
Print[ b, OnElementsOf Dom_Hcurl_a, File "b.pos" ];
// Print[W_mag_Airgap[AIRGAP], OnGlobal, Format TimeTable,
// File StrCat[resPath, "Energy_airgap.pos"]];
// Print[Flux[PM], OnGlobal, Format TimeTable,
// File >> StrCat[resPath, "Flux.pos"]];
}
}
}
PostOperation Check_Periodicity UsingPost MagSta_a {
If(Gauge == 1)
// Print the tree for debugging purposes (the group name
// Print the tree for debugging purposes.
// The group to print is the ExtendedGroup of type EdgesOfTreeIn
// automatically generated by getDP at Pre-Processing.
// The group name name (here '_CO_Entity_39') is indicated in the message console.
PrintGroup[ _CO_Entity_39 , In Vol_Tree, File "Tree.pos"];
Echo[ Str["l=PostProcessing.NbViews-1;",
......@@ -326,10 +333,6 @@ PostOperation Check_Periodicity UsingPost MagSta_a {
"View[l].ArrowSizeMax = 100;",
"View[l].CenterGlyphs = 0;",
"View[l].GlyphLocation = 1;",
"View[l].RangeType = 1;",
"View[l].SaturateValues = 1;",
"View[l].CustomMax = 2;",
"View[l].CustomMin = 0;",
"View[l].ScaleType = 1;",
"View[l].LineWidth = 3;",
"View[l].VectorType = 4;" ] ,
......@@ -341,10 +344,6 @@ PostOperation Check_Periodicity UsingPost MagSta_a {
"View[l].ArrowSizeMax = 100;",
"View[l].CenterGlyphs = 0;",
"View[l].GlyphLocation = 1;",
"View[l].RangeType = 1;",
"View[l].SaturateValues = 1;",
"View[l].CustomMax = 2;",
"View[l].CustomMin = 0;",
"View[l].ScaleType = 1;",
"View[l].LineWidth = 3;",
"View[l].VectorType = 4;" ] ,
......@@ -361,3 +360,5 @@ PostOperation Check_Periodicity UsingPost MagSta_a {
"View[l].VectorType = 4;" ] ,
File "tmp.geo", LastTimeStepOnly] ;
}
......@@ -10,8 +10,6 @@ EndIf
// Number of elements on the sliding surface in rotation direction
NbrDiv = 50*mm/lc;
Gauge = DefineNumber[1, Name "Options/Gauging", Choices{ 0="MUMPS", 1="Tree"}];
ModelAngleMin = 0. ;
ModelAngleMax = 60. ;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment