Skip to content
GitLab
Explore
Sign in
Register
Primary navigation
Search or go to…
Project
tutorials
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Model registry
Operate
Environments
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Terms and privacy
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
documentation
tutorials
Commits
5f52022f
Commit
5f52022f
authored
5 years ago
by
François Henrotte
Browse files
Options
Downloads
Patches
Plain Diff
reorganization
parent
ed717507
No related branches found
No related tags found
No related merge requests found
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
Conductors3D/w3d.geo
+5
-6
5 additions, 6 deletions
Conductors3D/w3d.geo
Conductors3D/w3d.pro
+316
-174
316 additions, 174 deletions
Conductors3D/w3d.pro
Conductors3D/w3d_common.pro
+33
-18
33 additions, 18 deletions
Conductors3D/w3d_common.pro
with
354 additions
and
198 deletions
Conductors3D/w3d.geo
+
5
−
6
View file @
5f52022f
...
...
@@ -6,19 +6,19 @@ Mesh.VolumeEdges = 0; // hide volume edges
Geometry
.
ExactExtrusion
=
0
;
// to allow rotation of extruded shapes
Solver
.
AutoMesh
=
2
;
// always remesh if necessary (don't reuse mesh on disk)
lc1
=
(
Flag_Thin
)
?
MeshSizeThinWire
*
mm
:
MeshSize
Thin
Wire
*
mm
;
lc1
=
(
Flag_Thin
)
?
MeshSizeThinWire
*
mm
:
MeshSizeWire
*
mm
;
lc2
=
box
/
10
;
// mesh size at outer surface
llWires
[]
=
{};
centerWires
[]
=
{};
surfWires
[]
=
{};
If
(
!
Flag_Thin
||
(
Flag_Thin
&&
Flag_
Corr
==
2
))
If
(
!
Flag_Thin
||
(
Flag_Thin
&&
Flag_
RegSleeve
))
// then circles are in the geometry
// their radius is R=rw if Flag_Thin != 0
// or R=rs in the "regular sleeve case" (Flag_Corr == 2)
R
=
(
!
Flag_Thin
)
?
r
w
:
r
s
;
R
=
(
Flag_Thin
)
?
r
s
:
r
w
;
For
i
In
{
1
:
NumWires
}
pC
=
newp
;
Point
(
pC
)
=
{
WX
~
{
i
}
,
WY
~
{
i
}
,
0
,
lc1
};
...
...
@@ -96,7 +96,7 @@ If( !Flag_Thin ) // Wires with finite radius
e
[]
=
Extrude
{
0
,
0
,
Lz
}
{
Surface
{
s1
}
;
/*Layers{1}; Recombine;*/
}
;
Physical
Volume
(
"AIR"
,
1
)
=
{
e
[
1
]
};
ElseIf
(
Flag_
Corr
==
2
)
// regular sleeve
ElseIf
(
Flag_
RegSleeve
)
// regular sleeve
Wires
[]
=
{};
For
i
In
{
1
:
NumWires
}
...
...
@@ -122,19 +122,18 @@ Else
e
[]
=
Extrude
{
0
,
0
,
Lz
}
{
Surface
{
s1
}
;
/*Layers{1}; Recombine;*/
}
;
s2
=
e
[
0
];
v1
=
e
[
1
];
Physical
Volume
(
"AIR"
,
1
)
=
{
v1
};
For
i
In
{
1
:
NumWires
}
e
[]
=
Extrude
{
0
,
0
,
Lz
}
{
Point
{
centerWires
[
i
-
1
]
}
;
/*Layers{1};*/
}
;
//Printf("e=", e[]);
Physical
Line
(
Sprintf
(
"LWIRE_%g"
,
i
),
50
+
i
)
=
{
e
[
1
]
};
Physical
Point
(
Sprintf
(
"PANODE_%g"
,
i
),
60
+
i
)
=
{
centerWires
[
i
-
1
]
};
Physical
Point
(
Sprintf
(
"PCATHODE_%g"
,
i
),
70
+
i
)
=
{
e
[
0
]
};
Physical
Volume
(
"AIR"
,
1
)
=
{
v1
};
// embed line conductors in mesh
Point
{
centerWires
[
i
-
1
]
}
In
Surface
{
s1
};
Point
{
e
[
0
]
}
In
Surface
{
s2
};
Curve
{
e
[
1
]
}
In
Volume
{
v1
};
EndFor
EndIf
Physical
Surface
(
"INF"
,
2
)
=
{
CombinedBoundary
{
Volume
{
:
};
}
};
...
...
This diff is collapsed.
Click to expand it.
Conductors3D/w3d.pro
+
316
−
174
View file @
5f52022f
...
...
@@ -22,7 +22,7 @@ DefineConstant[
DefineConstant
[
R_
=
{
"Dynamic"
,
Name
"GetDP/1ResolutionChoices"
,
Visible
0
},
C_
=
{
"-sol
-pos
"
,
Name
"GetDP/9ComputeCommand"
,
Visible
0
},
C_
=
{
"-sol
ve -v2
"
,
Name
"GetDP/9ComputeCommand"
,
Visible
0
},
P_
=
{
""
,
Name
"GetDP/2PostOperationChoices"
,
Visible
0
}
ResDir
=
"Res/"
];
...
...
@@ -63,43 +63,33 @@ Group{
// Abstract regions
// Cette formulation peut contenir des conducteurs volumiques Vol_C
// et liniques lVol_C.
If
(
!
Flag_Thin
)
Vol_C
=
Region
[
VWIRES
];
Vol_CC
=
Region
[
AIR
];
//lVol_C = Region[ {} ];
Else
Vol_C
=
Region
[
{
LWIRES
}
];
Vol_CC
=
Region
[
{
VWIRES
,
AIR
}
];
//lVol_C = Region[ LWIRES ];
EndIf
Vol_nu
=
Region
[
{
Vol_C
,
Vol_CC
}
];
Sur_Dirichlet_a
=
Region
[
INF
];
Electrodes
=
Region
[
{
ANODES
,
CATHODES
}
];
Vol_Tree
=
Region
[
{
Vol_nu
}
];
Sur_Tree
=
Region
[
{
Sur_Dirichlet_a
/*, SKIN*/
}
];
// If( Flag_Corr!= 0 )
// Lin_Tree = Region[ { LWIRES /*, LINTREE*/ } ];
// Else
Lin_Tree
=
Region
[
{}
];
Dom_Hcurl_a
=
Region
[
Vol_nu
];
Dom_Hgrad_u
=
Region
[
Vol_C
];
//Dom_Hregion_i = Region[ Vol_nu ];
// additional Groups for the local correction method
//Dom_Hthin_a = ElementsOf[ Vol_nu, OnOneSideOf LWIRES ];
Dom_Hthin_a
=
Region
[
Vol_nu
];
// For integration on the volume elements (excluding line elements)
// of the sleeve
Vol_Sleeve
=
ElementsOf
[
{
Vol_CC
},
OnOneSideOf
LWIRES
];
Dom_Hregion_i
=
Region
[
Vol_C
];
// additional Groups for the semi_analytic approach
Dom_Hthin_a
=
ElementsOf
[
Vol_nu
,
OnOneSideOf
LWIRES
];
//Vol_Tree = ElementsOf[ Vol_nu, Not Dom_Hthin_a ];
Vol_Tree
=
Region
[
{
Vol_nu
}
];
Sur_Tree
=
Region
[
{
Sur_Dirichlet_a
/*, SKIN*/
}
];
If
(
!
Flag_SemiAnalytic
)
Lin_Tree
=
Region
[
{}
];
Else
Lin_Tree
=
Region
[
{
LWIRES
}
];
EndIf
}
...
...
@@ -109,13 +99,13 @@ Function{
mur
=
1.
;
sigma
=
5.96e7
;
i
[]
=
Complex
[
0
,
1
];
mu
[]
=
mu0
;
nu
[]
=
1
/
mu
[];
sigma
[]
=
sigma
;
skin_depth
=
Sqrt
[
2
/
(
omega
*
sigma
*
mu0
*
mur
)
];
// Functions for the semi-analytic approach
i
[]
=
Complex
[
0
,
1
];
tau
[]
=
Complex
[
-
1
,
1
]
/
skin_depth
*
rw
;
J0
[]
=
JnComplex
[
0
,
$
1
];
J1
[]
=
JnComplex
[
1
,
$
1
];
...
...
@@ -131,7 +121,7 @@ Function{
EndFor
// shape function of the current, wI[r]
wI
[]
=
tau
[]
*
J0
[
tau
[]
*
$
1
/
rw
]
/
J1
[
tau
[]]
/
(
2
*
A_c
);
wI
[]
=
tau
[]
*
J0
[
tau
[]
*
$
1
/
rw
]
/
J1
[
tau
[]]
/
(
2
*
A_c
);
//radial analytical solutions with a zero flux condition imposed at $1(=r)=rs
Analytic_A
[]
=
// per Amp
...
...
@@ -140,8 +130,8 @@ Function{
AnalyticStatic_A
[]
=
mu0
/
(
2
*
Pi
)
*
// per Amp
((
$
1
>
rw
)
?
Log
[
rs
/
$
1
]
:
Log
[
rs
/
rw
]
+
mur
*
(
1
-
(
$
1
/
rw
)
^
2
)
/
2
);
Analytic_B
[]
=
// per Amp
((
$
1
>
rw
)
?
mu0
/
(
2
*
Pi
*
$
1
)
:
mu0
*
mur
/
(
2
*
Pi
)
*
J1
[
tau
[]
*
$
1
/
rw
]
/
J1
[
tau
[]]
);
((
$
1
>
=
rw
)
?
mu0
/
(
2
*
Pi
*
$
1
)
:
mu0
*
mur
/
(
2
*
Pi
*
rw
)
*
J1
[
tau
[]
*
$
1
/
rw
]
/
J1
[
tau
[]]
);
// Impedance of thin wire p.u. length
R_DC
=
1.
/
(
sigma
*
A_c
);
...
...
@@ -155,11 +145,11 @@ Function{
If
(
NumWires
==
2
)
Exact_B
[]
=
Analytic_B
[
R_1
[]]
+
Analytic_B
[
R_2
[]]
;
Correction_B
[]
=
((
R_1
[]
<
rs
)
?
Analytic_B
[
R_1
[]]
:
((
R_2
[]
<
rs
)
?
Analytic_B
[
R_2
[]]
:
0
));
((
R_2
[]
<
rs
)
?
Analytic_B
[
R_2
[]]
:
0
));
EndIf
If
(
NumWires
==
3
)
Exact_B
[]
=
Analytic_B
[
R_1
[]]
+
Analytic_B
[
R_2
[]]
+
Analytic_B
[
R_3
[]]
;
Correction_
A
[]
=
((
R_1
[]
<
rs
)
?
Analytic_B
[
R_1
[]]
:
Correction_
B
[]
=
((
R_1
[]
<
rs
)
?
Analytic_B
[
R_1
[]]
:
((
R_2
[]
<
rs
)
?
Analytic_B
[
R_2
[]]
:
((
R_3
[]
<
rs
)
?
Analytic_B
[
R_3
[]]
:
0
)));
EndIf
...
...
@@ -180,14 +170,14 @@ Integration {
Case
{
{
Type
Gauss
;
Case
{
{
GeoElement
Point
;
NumberOfPoints
1
;
}
{
GeoElement
Line
;
NumberOfPoints
3
;
}
{
GeoElement
Triangle
;
NumberOfPoints
3
;
}
{
GeoElement
Quadrangle
;
NumberOfPoints
4
;
}
{
GeoElement
Prism
;
NumberOfPoints
21
;
}
{
GeoElement
Tetrahedron
;
NumberOfPoints
4
;
}
{
GeoElement
Hexahedron
;
NumberOfPoints
6
;
}
{
GeoElement
Pyramid
;
NumberOfPoints
8
;
}
{
GeoElement
Point
;
NumberOfPoints
1
;
}
{
GeoElement
Line
;
NumberOfPoints
3
;
}
{
GeoElement
Triangle
;
NumberOfPoints
3
;
}
{
GeoElement
Quadrangle
;
NumberOfPoints
4
;
}
{
GeoElement
Prism
;
NumberOfPoints
21
;
}
{
GeoElement
Tetrahedron
;
NumberOfPoints
4
;
}
{
GeoElement
Hexahedron
;
NumberOfPoints
6
;
}
{
GeoElement
Pyramid
;
NumberOfPoints
8
;
}
}
}
}
...
...
@@ -197,19 +187,19 @@ Integration {
Constraint
{
{
Name
Impose_U
;
Case
{
For
i
In
{
1
:
NumWires
}
If
(
Flag_
Form
==
1
)
// massive
For
i
In
{
1
:
NumWires
}
If
(
!
Flag_
Stranded
)
// massive
{
Region
ANODE
~
{
i
}
;
Value
0
;
}
EndIf
If
(
Flag_U
)
If
(
Flag_
Form
==
1
)
// massive
If
(
Flag_U
)
If
(
!
Flag_
Stranded
)
// massive
{
Region
CATHODE
~
{
i
}
;
Value
-
R_DC
*
Lz
*
WI
~
{
i
}
;
}
Else
// stranded
{
Region
VWIRE
~
{
i
}
;
Value
-
R_DC
*
Lz
*
WI
~
{
i
}
;
}
EndIf
EndIf
EndFor
}
}
...
...
@@ -217,30 +207,48 @@ Constraint{
Case
{
For
i
In
{
1
:
NumWires
}
If
(
!
Flag_U
)
If
(
Flag_Form
==
1
)
// massive
If
(
!
Flag_Stranded
)
// massive
{
Region
ANODE
~
{
i
}
;
Value
WI
~
{
i
}
;
}
{
Region
CATHODE
~
{
i
}
;
Value
WI
~
{
i
}
;
}
Else
// stranded
{
Region
VWIRE
~
{
i
}
;
Value
WI
~
{
i
}
;
}
{
Region
LWIRE
~
{
i
}
;
Value
WI
~
{
i
}
;
}
EndIf
EndIf
EndIf
EndFor
}
}
{
Name
Hcurl_a_3D
_ac
;
Type
Assign
;
{
Name
Hcurl_a_3D
;
Type
Assign
;
Case
{
{
Region
Region
[
Sur_Dirichlet_a
];
Value
0.
;
}
}
}
{
Name
GaugeCondition_a
;
Type
Assign
;
Case
{
{
Region
Vol_Tree
;
SubRegion
Region
[
{
Sur_Tree
,
Lin_Tree
}
];
Value
0.
;
}
Value
0
;
}
}
}
// Semi-analytic approach
{
Name
Impose_corr
;
Case
{
For
i
In
{
1
:
NumWires
}
{
Region
LWIRE
~
{
i
}
;
Value
1.
;
}
EndFor
}
}
{
Name
Hcurl_acorr_3D
;
Type
Assign
;
Case
{
{
Region
Region
[
Sur_Dirichlet_a
];
Value
0.
;
}
If
(
Flag_Thin
)
For
i
In
{
1
:
NumWires
}
{
Region
Region
[
LWIRE
~
{
i
}
];
Value
1
;
}
EndFor
EndIf
}
}
}
...
...
@@ -256,7 +264,7 @@ FunctionSpace {
}
Constraint
{
{
NameOfCoef
ac
;
EntityType
Auto
;
NameOfConstraint
Hcurl_a_3D
_ac
;
}
EntityType
Auto
;
NameOfConstraint
Hcurl_a_3D
;
}
{
NameOfCoef
ac
;
EntityType
EdgesOfTreeIn
;
EntitySubType
StartingOn
;
NameOfConstraint
GaugeCondition_a
;
}
}
...
...
@@ -280,10 +288,11 @@ FunctionSpace {
}
}
// Electric current per regionl for stranded conductors
{
Name
Hregion_i_3D
;
Type
Vector
;
BasisFunction
{
{
Name
sr
;
NameOfCoef
ir
;
Function
BF_RegionZ
;
Support
Dom_H
thi
n_
a
;
Entity
Vol_C
;
}
Support
Dom_H
regio
n_
i
;
Entity
Vol_C
;
}
}
GlobalQuantity
{
{
Name
Is
;
Type
AliasOf
;
NameOfCoef
ir
;
}
...
...
@@ -295,52 +304,93 @@ FunctionSpace {
}
}
// For the local correction method
{
Name
Hcurl_acorr_3D
;
Type
Form1
;
// Function spaces for the semi-analytical approach
// { Name Hcurl_acorr_3D; Type Form1;
// BasisFunction {
// { Name sw; NameOfCoef aw; Function BF_Edge;
// Support Dom_Hthin_a; Entity EdgesOf[ Vol_nu, ConnectedTo LWIRES ]; }
// }
// Constraint {
// { NameOfCoef aw;
// EntityType Auto; NameOfConstraint Hcurl_a_3D; }
// { NameOfCoef aw; EntityType EdgesOfTreeIn ; EntitySubType StartingOn ;
// NameOfConstraint GaugeCondition_a ; }
// }
// }
{
Name
Hcurl_athin_3D
;
Type
Form1
;
BasisFunction
{
{
Name
sw
;
NameOfCoef
aw
;
Function
BF_Edge
;
Support
Vol_nu
;
Entity
EdgesOf
[
Vol_nu
,
ConnectedTo
LWIRES
];
}
{
Name
si
;
NameOfCoef
ai
;
Function
BF_GroupOfEdges
;
Support
Dom_Hcurl_a
;
Entity
GroupsOfEdgesOf
[
LWIRES
];
}
{
Name
sj
;
NameOfCoef
aj
;
Function
BF_Edge
;
Support
Dom_Hcurl_a
;
Entity
EdgesOf
[
Vol_nu
,
Not
LWIRES
];
}
}
GlobalQuantity
{
{
Name
F
;
Type
AliasOf
;
NameOfCoef
ai
;
}
{
Name
I
;
Type
AssociatedWith
;
NameOfCoef
ai
;
}
}
Constraint
{
// { NameOfCoef aw; EntityType EdgesOfTreeIn ; EntitySubType StartingOn ;
// NameOfConstraint GaugeCondition_a ; }
{
NameOfCoef
I
;
EntityType
Region
;
NameOfConstraint
Impose_corr
;
}
{
NameOfCoef
aj
;
EntityType
Auto
;
NameOfConstraint
Hcurl_a_3D
;
}
{
NameOfCoef
aj
;
EntityType
EdgesOfTreeIn
;
EntitySubType
StartingOn
;
NameOfConstraint
GaugeCondition_a
;
}
}
}
{
Name
Hcurl_asleeve_3D
;
Type
Form1
;
BasisFunction
{
{
Name
si
;
NameOfCoef
ai
;
Function
BF_GroupOfEdges
;
Support
Dom_Hthin_a
;
Entity
GroupsOfEdgesOf
[
LWIRES
];
}
{
Name
sj
;
NameOfCoef
aj
;
Function
BF_Edge
;
Support
Dom_Hthin_a
;
Entity
EdgesOf
[
Vol_nu
,
ConnectedTo
LWIRES
];
}
}
GlobalQuantity
{
{
Name
F
;
Type
AliasOf
;
NameOfCoef
ai
;
}
{
Name
I
;
Type
AssociatedWith
;
NameOfCoef
ai
;
}
}
Constraint
{
{
NameOfCoef
I
;
EntityType
Region
;
NameOfConstraint
Impose_corr
;
}
{
NameOfCoef
aj
;
EntityType
Auto
;
NameOfConstraint
Hcurl_a_3D
;
}
}
}
}
Formulation
{
{
Name
MagnetoDynamics
;
Type
FemEquation
;
If
(
!
Flag_SemiAnalytic
)
// Conventional massive and stranded conductor formulation
// If Flag_Thin is true, naive thine wire formulations
If
(
!
Flag_Stranded
)
// Massive conductor
Quantity
{
{
Name
a
;
Type
Local
;
NameOfSpace
Hcurl_a_3D
;
}
If
(
Flag_Form
==
1
)
// Massive conductor
Quantity
{
{
Name
a
;
Type
Local
;
NameOfSpace
Hcurl_a_3D
;
}
{
Name
v
;
Type
Local
;
NameOfSpace
Hgrad_u_3D
;
}
{
Name
U
;
Type
Global
;
NameOfSpace
Hgrad_u_3D
[
U
];
}
{
Name
I
;
Type
Global
;
NameOfSpace
Hgrad_u_3D
[
I
];
}
}
{
Name
v
;
Type
Local
;
NameOfSpace
Hgrad_u_3D
;
}
{
Name
U
;
Type
Global
;
NameOfSpace
Hgrad_u_3D
[
U
];
}
{
Name
I
;
Type
Global
;
NameOfSpace
Hgrad_u_3D
[
I
];
}
}
Equation
{
Integral
{
[
nu
[]
*
Dof
{
d
a
}
,
{
d
a
}
];
In
Vol_nu
;
Jacobian
Vol
;
Integration
I1
;
}
Equation
{
Integral
{
[
nu
[]
*
Dof
{
d
a
}
,
{
d
a
}
];
In
Vol_nu
;
Jacobian
Vol
;
Integration
I1
;
}
Integral
{
DtDof
[
sigma
[]
*
Dof
{
a
}
,
{
a
}
];
In
Vol_C
;
Jacobian
Vol
;
Integration
I1
;
}
Integral
{
[
sigma
[]
*
Dof
{
d
v
}
,
{
a
}
];
In
Vol_C
;
Jacobian
Vol
;
Integration
I1
;
}
Integral
{
DtDof
[
sigma
[]
*
Dof
{
a
}
,
{
d
v
}
];
In
Vol_C
;
Jacobian
Vol
;
Integration
I1
;
}
Integral
{
[
sigma
[]
*
Dof
{
d
v
}
,
{
d
v
}
];
In
Vol_C
;
Jacobian
Vol
;
Integration
I1
;
}
Integral
{
DtDof
[
sigma
[]
*
Dof
{
a
}
,
{
a
}
];
In
Vol_C
;
Jacobian
Vol
;
Integration
I1
;
}
Integral
{
[
sigma
[]
*
Dof
{
d
v
}
,
{
a
}
];
In
Vol_C
;
Jacobian
Vol
;
Integration
I1
;
}
Integral
{
DtDof
[
sigma
[]
*
Dof
{
a
}
,
{
d
v
}
];
In
Vol_C
;
Jacobian
Vol
;
Integration
I1
;
}
Integral
{
[
sigma
[]
*
Dof
{
d
v
}
,
{
d
v
}
];
In
Vol_C
;
Jacobian
Vol
;
Integration
I1
;
}
GlobalTerm
{
[
Dof
{
I
}
,
{
U
}
];
In
CATHODES
;
}
}
GlobalTerm
{
[
Dof
{
I
}
,
{
U
}
];
In
CATHODES
;
}
}
Else
// stranded conductor
If
(
Flag_Corr
==
0
)
// naive thin wire model
Else
// stranded conductor
Quantity
{
{
Name
a
;
Type
Local
;
NameOfSpace
Hcurl_a_3D
;
}
{
Name
i
;
Type
Local
;
NameOfSpace
Hregion_i_3D
;
}
{
Name
Is
;
Type
Global
;
NameOfSpace
Hregion_i_3D
[
Is
];
}
{
Name
Us
;
Type
Global
;
NameOfSpace
Hregion_i_3D
[
Us
];
}
...
...
@@ -351,7 +401,7 @@ Formulation {
In
Vol_nu
;
Jacobian
Vol
;
Integration
I1
;
}
Integral
{
[
-
Dof
{
i
}
/
A_c
,
{
a
}
];
In
Vol_C
;
Jacobian
Vol
;
Integration
I1
;
}
// Integral { [ -J[] , {a} ];
// In Vol_C; Jacobian Vol; Integration I1; }
...
...
@@ -361,44 +411,53 @@ Formulation {
In
Vol_C
;
Jacobian
Vol
;
Integration
I1
;}
Integral
{
[
Dof
{
i
}
/
(
sigma
[]
*
A_c
)
,
{
i
}
];
In
Vol_C
;
Jacobian
Vol
;
Integration
I1
;}
GlobalTerm
{
[
Dof
{
Us
}
*
A_c
,
{
Is
}
];
In
Vol_C
;
}
}
Else
// use local correction method
Quantity
{
{
Name
a
;
Type
Local
;
NameOfSpace
Hcurl_a_3D
;
}
{
Name
as
;
Type
Local
;
NameOfSpace
Hcurl_acorr_3D
;
}
{
Name
i
;
Type
Local
;
NameOfSpace
Hregion_i_3D
;
}
{
Name
Is
;
Type
Global
;
NameOfSpace
Hregion_i_3D
[
Is
];
}
{
Name
Us
;
Type
Global
;
NameOfSpace
Hregion_i_3D
[
Us
];
}
GlobalTerm
{
[
Dof
{
Us
}
*
A_c
,
{
Is
}
];
In
Vol_C
;
}
}
EndIf
EndIf
Equation
{
/*
Integral { [ nu[] * Dof{d a} , {d a} ];
In Vol_nu; Jacobian Vol; Integration I1; }
Integral { [ -Dof{i}/A_c , {a} ];
In Vol_C; Jacobian Vol; Integration I1; }
*/
Integral
{
[
nu
[]
*
Dof
{
d
as
}
,
{
d
as
}
];
In
Vol_nu
;
Jacobian
Vol
;
Integration
I1
;
}
Integral
{
[
-
Dof
{
i
}
/
A_c
,
{
as
}
];
In
Vol_C
;
Jacobian
Vol
;
Integration
I1
;
}
If
(
Flag_SemiAnalytic
)
// Semi-analytic correction methods
Quantity
{
{
Name
a
;
Type
Local
;
NameOfSpace
Hcurl_athin_3D
;
}
{
Name
F
;
Type
Global
;
NameOfSpace
Hcurl_athin_3D
[
F
];
}
{
Name
I
;
Type
Global
;
NameOfSpace
Hcurl_athin_3D
[
I
];
}
/*
GlobalTerm { [ Analytic_R[] * Dof{Is} , {Is} ];
In Vol_C;}
Integral { DtDof [ Dof{a}/A_c , {i} ];
In Vol_C; Jacobian Vol; Integration I1; }
Integral { DtDof [ -Dof{as}/A_c , {i} ];
In Vol_C; Jacobian Vol; Integration I1;}
GlobalTerm { DtDof [ Analytic_L[] * Dof{Is} , {Is} ];
In Vol_C;}
GlobalTerm { [ Dof{Us} , {Is} ];
In Vol_C; }
*/
}
EndIf
{
Name
as
;
Type
Local
;
NameOfSpace
Hcurl_asleeve_3D
;
}
{
Name
Fs
;
Type
Global
;
NameOfSpace
Hcurl_asleeve_3D
[
F
];
}
{
Name
Is
;
Type
Global
;
NameOfSpace
Hcurl_asleeve_3D
[
I
];
}
}
Equation
{
Integral
{
[
nu
[]
*
Dof
{
d
a
}
,
{
d
a
}
];
In
Vol_nu
;
Jacobian
Vol
;
Integration
I1
;
}
GlobalTerm
{
[
-
Dof
{
I
}
*
1e1
,
{
F
}
];
In
Vol_nu
;
}
Integral
{
[
nu
[]
*
Dof
{
d
as
}
,
{
d
as
}
];
In
Vol_nu
;
Jacobian
Vol
;
Integration
I1
;
}
GlobalTerm
{
[
-
Dof
{
Is
}
*
1e1
,
{
Fs
}
];
In
Vol_nu
;
}
// Integral { [ -Dof{i}/A_c , {as} ];
// In Vol_C; Jacobian Vol; Integration I1; }
/*
GlobalTerm { [ Analytic_R[] * Dof{Is} , {Is} ];
In Vol_C;}
Integral { DtDof [ Dof{a}/A_c , {i} ];
In Vol_C; Jacobian Vol; Integration I1; }
Integral { DtDof [ -Dof{as}/A_c , {i} ];
In Vol_C; Jacobian Vol; Integration I1;}
GlobalTerm { DtDof [ Analytic_L[] * Dof{Is} , {Is} ];
In Vol_C;}
GlobalTerm { [ Dof{Us} , {Is} ];
In Vol_C; }
*/
}
EndIf
}
}
...
...
@@ -443,41 +502,65 @@ PostProcessing {
{
Name
b
;
Value
{
Local
{
[
{
d
a
}];
In
Dom_Hcurl_a
;
Jacobian
Vol
;
}}}
{
Name
by
;
Value
{
Local
{
[
Re
[
Cart2Pol
[
CompY
[
{
d
a
}]]
]
];
Value
{
Local
{
[
Cart2Pol
[
Norm
[
{
d
a
}]]
];
In
Dom_Hcurl_a
;
Jacobian
Vol
;
}}}
If
(
Flag_Form
==
1
)
// massive
{
Name
J
;
Value
{
Local
{
[
-
sigma
[]
*
(
Dt
[{
a
}]
+
{
d
v
}
)
];
In
Vol_C
;
Jacobian
Vol
;
}}}
{
Name
U
;
Value
{
Term
{
[
{
U
}
];
In
Electrodes
;
}}}
If
(
Flag_SemiAnalytic
)
{
Name
bs
;
Value
{
Local
{
[
{
d
as
}
];
In
Vol_nu
;
Jacobian
Vol
;
}}}
{
Name
bsy
;
Value
{
Local
{
[
Norm
[
{
d
as
}
]
];
In
Vol_nu
;
Jacobian
Vol
;
}}}
{
Name
bbsy
;
Value
{
Local
{
[
Norm
[
{
d
a
}
-
{
d
as
}
]
];
In
Vol_nu
;
Jacobian
Vol
;
}}}
{
Name
bcorry
;
Value
{
Local
{
[
Norm
[
{
d
a
}
-
{
d
as
}
]
+
Correction_B
[]
];
In
Vol_nu
;
Jacobian
Vol
;
}}}
EndIf
If
(
!
Flag_SemiAnalytic
)
If
(
!
Flag_Stranded
)
// massive
{
Name
J
;
Value
{
Local
{
[
-
sigma
[]
*
(
Dt
[{
a
}]
+
{
d
v
}
)
];
In
Vol_C
;
Jacobian
Vol
;
}}}
{
Name
U
;
Value
{
Term
{
[
{
U
}
];
In
Electrodes
;
}}}
{
Name
I
;
Value
{
Term
{
[
{
I
}
];
In
Electrodes
;
}}}
{
Name
R
;
Value
{
Term
{
[
Re
[
-
{
U
}
/
{
I
}
/
Lz
]
];
In
Electrodes
;
}}}
{
Name
L
;
// actually total flux/I
Value
{
Term
{
[
Im
[
-
{
U
}
/
{
I
}
/
omega
/
Lz
]
];
In
Electrodes
;
}}}
Else
// stranded
{
Name
J
;
Value
{
Local
{
[
{
Is
}
/
A_c
];
In
Vol_C
;
Jacobian
Vol
;
}}}
{
Name
U
;
Value
{
Term
{
[
{
Us
}
];
In
Vol_C
;
}}}
{
Name
I
;
Value
{
Term
{
[
{
Is
}
];
In
Vol_C
;
}}}
{
Name
R
;
Value
{
Term
{
[
Re
[
-
{
Us
}
/
{
Is
}
/
Lz
]
];
In
Vol_C
;
}}}
{
Name
L
;
// actually total flux/I
Value
{
Term
{
[
Im
[
-
{
Us
}
/
{
Is
}
/
omega
/
Lz
]
];
In
Vol_C
;
}}}
EndIf
EndIf
If
(
Flag_SemiAnalytic
)
{
Name
F
;
Value
{
Term
{
[
{
F
}
];
In
Vol_C
;
}}}
{
Name
I
;
Value
{
Term
{
[
{
I
}
];
In
Electrodes
;
}}}
{
Name
R
;
Value
{
Term
{
[
Re
[
-
{
U
}
/
{
I
}
/
Lz
]
];
In
Electrodes
;
}}}
{
Name
L
;
// actually total flux/I
Value
{
Term
{
[
Im
[
-
{
U
}
/
{
I
}
/
omega
/
Lz
]
];
In
Electrodes
;
}}}
Else
// stranded
Value
{
Term
{
[
{
I
}
];
In
Vol_C
;
}}}
{
Name
J
;
Value
{
Local
{
[
{
i
}
/
A_c
];
Value
{
Local
{
[
{
I
}
/
A_c
];
In
Vol_C
;
Jacobian
Vol
;
}}}
{
Name
U
;
Value
{
Term
{
[
{
Us
}
];
In
Vol_C
;
}}}
{
Name
I
;
Value
{
Term
{
[
{
Is
}
];
In
Vol_C
;
}}}
Value
{
Term
{
[
i
[]
*
omega
*
{
F
}
*
10
+
Analytic_R
[]
*
{
I
}
];
In
Vol_C
;
}}}
{
Name
R
;
Value
{
Term
{
[
Re
[
-
{
Us
}
/
{
Is
}
/
Lz
]
];
In
Vol_C
;
}}}
Value
{
Term
{
[
Analytic_R
[]
+
{
I
}
*
0
];
In
Vol_C
;
}}}
{
Name
L
;
// actually total flux/I
Value
{
Term
{
[
Im
[
-
{
Us
}
/
{
Is
}
/
omega
/
Lz
]
];
In
Vol_C
;
}}}
EndIf
If
(
(
Flag_Form
==
2
)
&&
Flag_Corr
)
{
Name
bs
;
Value
{
Local
{
[
{
d
as
}];
In
Dom_Hthin_a
;
Jacobian
Vol
;
}}}
{
Name
bcorry
;
Value
{
Local
{
[
Re
[
Cart2Pol
[
CompY
[{
d
a
}
-
{
d
as
}]]]
+
Correction_B
[]
];
In
Dom_Hthin_a
;
Jacobian
Vol
;
}}}
Value
{
Term
{
[
{
F
}
/
{
I
}
/
Lz
];
In
Vol_C
;
}}}
EndIf
}
...
...
@@ -485,28 +568,48 @@ PostProcessing {
}
PostOperation
map
UsingPost
MagnetoDynamics
{
Print
[
J
,
OnElementsOf
Vol_C
,
File
"j.pos"
];
Print
[
b
,
OnElementsOf
Vol_nu
,
File
"b.pos"
];
If
(
(
Flag_Form
==
2
)
&&
Flag_Corr
)
If
(
!
Flag_SemiAnalytic
)
Print
[
J
,
OnElementsOf
Vol_C
,
File
"j.pos"
];
Else
Print
[
bs
,
OnElementsOf
Vol_nu
,
File
"bs.pos"
];
PrintGroup
[
EdgesOf
[
Vol_nu
,
ConnectedTo
LWIRES
],
In
Vol_nu
,
File
"group.pos"
];
EndIf
PrintGroup
[
EdgesOfTreeIn
[
{
Vol_Tree
},
StartingOn
{
Sur_Tree
,
Lin_Tree
}
],
In
Vol_Tree
,
File
"Tree.pos"
];
//PrintGroup[ _CO_Entity_44, In Vol_nu, File "Tree.pos"];
}
PostOperation
integaz
UsingPost
MagnetoDynamics
{
For
i
In
{
1
:
NumWires
}
If
(
Flag_Form
==
1
)
// massive
Print
[
U
,
OnRegion
CATHODES
,
File
>
"U.dat"
,
Format
Table
,
SendToServer
Sprintf
[
"Results/1Voltage/Wire %g"
,
i
]];
Print
[
I
,
OnRegion
CATHODES
,
File
>
"I.dat"
,
Format
Table
,
SendToServer
Sprintf
[
"Results/2Current/Wire %g"
,
i
]];
Print
[
R
,
OnRegion
CATHODES
,
File
>
"Z.dat"
,
Format
Table
,
SendToServer
Sprintf
[
"Results/3Resistance p.u.l./Wire %g"
,
i
]];
Print
[
L
,
OnRegion
CATHODES
,
File
>
"Z.dat"
,
Format
Table
,
SendToServer
Sprintf
[
"Results/4Inductance p.u.l./Wire %g"
,
i
]];
Else
If
(
!
Flag_SemiAnalytic
)
If
(
!
Flag_Stranded
)
// massive
Print
[
U
,
OnRegion
CATHODES
,
File
>
"U.dat"
,
Format
Table
,
SendToServer
Sprintf
[
"Results/1Voltage/Wire %g"
,
i
]];
Print
[
I
,
OnRegion
CATHODES
,
File
>
"I.dat"
,
Format
Table
,
SendToServer
Sprintf
[
"Results/2Current/Wire %g"
,
i
]];
Print
[
R
,
OnRegion
CATHODES
,
File
>
"Z.dat"
,
Format
Table
,
SendToServer
Sprintf
[
"Results/3Resistance p.u.l./Wire %g"
,
i
]];
Print
[
L
,
OnRegion
CATHODES
,
File
>
"Z.dat"
,
Format
Table
,
SendToServer
Sprintf
[
"Results/4Inductance p.u.l./Wire %g"
,
i
]];
Else
Print
[
U
,
OnRegion
Vol_C
,
File
>
"U.dat"
,
Format
Table
,
SendToServer
Sprintf
[
"Results/1Voltage/Wire %g"
,
i
]];
Print
[
I
,
OnRegion
Vol_C
,
File
>
"I.dat"
,
Format
Table
,
SendToServer
Sprintf
[
"Results/2Current/Wire %g"
,
i
]];
Print
[
R
,
OnRegion
Vol_C
,
File
>
"Z.dat"
,
Format
Table
,
SendToServer
Sprintf
[
"Results/3Resistance p.u.l./Wire %g"
,
i
]];
Print
[
L
,
OnRegion
Vol_C
,
File
>
"Z.dat"
,
Format
Table
,
SendToServer
Sprintf
[
"Results/4Inductance p.u.l./Wire %g"
,
i
]];
EndIf
EndIf
If
(
Flag_SemiAnalytic
)
Print
[
F
,
OnRegion
Vol_C
,
File
>
"Flux.dat"
,
Format
Table
,
SendToServer
Sprintf
[
"Results/0Flux/Wire %g"
,
i
]];
Print
[
U
,
OnRegion
Vol_C
,
File
>
"U.dat"
,
Format
Table
,
SendToServer
Sprintf
[
"Results/1Voltage/Wire %g"
,
i
]];
Print
[
I
,
OnRegion
Vol_C
,
File
>
"I.dat"
,
Format
Table
,
...
...
@@ -519,27 +622,66 @@ PostOperation integaz UsingPost MagnetoDynamics {
EndFor
}
NbPoints
=
400
;
Xmax
=
0.15
*
box
;
NbPoints
=
1000
;
Xcut
=
0.1
*
box
;
Zcut
=
Lz
/
2
;
PostOperation
cut
UsingPost
MagnetoDynamics
{
Print
[
by
,
OnLine
{
{
-
Xmax
,
0
,
0
}
{
Xmax
,
0
,
0
}
}{
NbPoints
},
Format
Gmsh
,
File
"by.pos"
];
Print
[
by
,
OnLine
{
{
-
Xcut
,
0
,
0
}
{
Xcut
,
0
,
Zcut
}
}{
NbPoints
},
Format
Gmsh
,
File
"by.pos"
];
Echo
[
StrCat
[
"l=PostProcessing.NbViews-1;"
,
"View[l].Name = 'cut by';"
,
"View[l].Axes = 3;"
,
"View[l].LineWidth = 3;"
,
"View[l].Type = 2;"
],
File
"tmp.geo"
,
LastTimeStepOnly
];
If
(
Flag_SemiAnalytic
)
Print
[
bsy
,
OnLine
{
{
-
Xcut
,
0
,
0
}
{
Xcut
,
0
,
Zcut
}
}{
NbPoints
},
Format
Gmsh
,
File
"bcorry.pos"
];
Echo
[
StrCat
[
"l=PostProcessing.NbViews-1;"
,
"View[l].Name = 'cut b
y
';"
,
"View[l].Axes = 3;"
,
"View[l].LineWidth = 3;"
,
"View[l].Type = 2;"
],
File
"tmp.geo"
,
LastTimeStepOnly
];
If
(
(
Flag_Form
==
2
)
&&
Flag_Corr
)
Print
[
b
corr
y
,
OnLine
{
{
-
X
max
,
0
,
0
}
{
X
max
,
0
,
0
}
}{
NbPoints
},
Format
Gmsh
,
File
"by.pos"
];
"View[l].Name = 'cut b
sy
';"
,
"View[l].Axes = 3;"
,
"View[l].LineWidth = 3;"
,
"View[l].Type = 2;"
],
File
"tmp.geo"
,
LastTimeStepOnly
];
Print
[
b
bs
y
,
OnLine
{
{
-
X
cut
,
0
,
0
}
{
X
cut
,
0
,
Zcut
}
}{
NbPoints
},
Format
Gmsh
,
File
"b
corr
y.pos"
];
Echo
[
StrCat
[
"l=PostProcessing.NbViews-1;"
,
"View[l].Name = 'cut by';"
,
"View[l].Name = 'cut by
-bsy
';"
,
"View[l].Axes = 3;"
,
"View[l].LineWidth = 3;"
,
"View[l].Type = 2;"
],
File
"tmp.geo"
,
LastTimeStepOnly
];
Print
[
bcorry
,
OnLine
{
{
-
Xcut
,
0
,
0
}
{
Xcut
,
0
,
Zcut
}
}{
NbPoints
},
Format
Gmsh
,
File
"bcorry.pos"
];
Echo
[
StrCat
[
"l=PostProcessing.NbViews-1;"
,
"View[l].Name = 'cut by corrected';"
,
"View[l].Axes = 3;"
,
"View[l].LineWidth = 3;"
,
"View[l].Type = 2;"
],
File
"tmp.geo"
,
LastTimeStepOnly
];
EndIf
// cuts in txt format for Gnuplot
// Print [ exact, OnLine { {0,0,0} {Xcut,0,0} } {NbPoints},
// Format SimpleTable, File "Cut_analytic.txt" ];
If
(
!
Flag_SemiAnalytic
)
Print
[
by
,
OnLine
{
{
0
,
0
,
0
}
{
Xcut
,
0
,
0
}
}
{
NbPoints
},
Format
SimpleTable
,
File
"Cut_byref.txt"
];
Else
Print
[
by
,
OnLine
{
{
0
,
0
,
0
}
{
Xcut
,
0
,
0
}
}
{
NbPoints
},
Format
SimpleTable
,
File
"Cut_by.txt"
];
Print
[
bsy
,
OnLine
{
{
0
,
0
,
0
}
{
Xcut
,
0
,
0
}
}
{
NbPoints
},
Format
SimpleTable
,
File
"Cut_bsy.txt"
];
Print
[
bbsy
,
OnLine
{
{
0
,
0
,
0
}
{
Xcut
,
0
,
0
}
}
{
NbPoints
},
Format
SimpleTable
,
File
"Cut_bbsy.txt"
];
Print
[
bcorry
,
OnLine
{
{
0
,
0
,
0
}
{
Xcut
,
0
,
0
}
}
{
NbPoints
},
Format
SimpleTable
,
File
"Cut_bcorry.txt"
];
EndIf
}
...
...
This diff is collapsed.
Click to expand it.
Conductors3D/w3d_common.pro
+
33
−
18
View file @
5f52022f
...
...
@@ -4,32 +4,43 @@ deg = 180/Pi;
/*
Expected inductance of a rectilinear 1mm radius wire: 4 nH/cm
git/documentation/models/Inductor/magstadyn_av_js0_3d.pro
*/
DefineConstant
[
NumWires
=
{
1
,
Name
"Parameters/0Number of wires"
,
NumWires
=
{
1
,
Name
"Parameters/
0
0Number of wires"
,
Choices
{
1
=
"1"
,
2
=
"2"
,
3
=
"3"
},
Visible
1
}
Flag_Form
=
{
2
,
Name
"Parameters/1Conductor type"
,
Visible
1
,
Choices
{
1
=
"Massive"
,
2
=
"Stranded"
}}
Flag_Thin
=
{
1
,
Name
"Parameters/2Use thin wires"
,
Choices
{
0
,
1
},
Visible
1
}
Flag_Corr
=
{
1
,
Name
"Parameters/3Correction method"
,
Visible
(
Flag_Form
==
2
)
&&
Flag_Thin
,
Choices
{
0
=
"None"
,
1
=
"Raw sleeve"
,
2
=
"regular sleeve"
}}
Flag_U
=
{
0
,
Name
"Parameters/4Impose U"
,
Choices
{
0
,
1
},
Visible
1
}
Flag_Thin
=
{
1
,
Name
"Parameters/01Thin wires"
,
Choices
{
0
,
1
},
Visible
1
}
Flag_RegSleeve
=
{
0
,
Name
"Parameters/02Regular sleeves"
,
Choices
{
0
,
1
},
Visible
Flag_Thin
}
Flag_SemiAnalytic
=
{
1
,
Name
"Parameters/03Semi-analytic approach"
,
Choices
{
0
,
1
},
Visible
Flag_Thin
}
Flag_Stranded
=
{
0
,
Name
"Parameters/04Stranded conductors"
,
Choices
{
0
,
1
},
Visible
!
Flag_SemiAnalytic
||
!
Flag_Thin
}
Flag_Dual
=
{
0
,
Name
"Parameters/05Dual approach"
,
Choices
{
0
,
1
},
Visible
Flag_SemiAnalytic
&&
Flag_Thin
}
Flag_U
=
{
0
,
Name
"Parameters/06Impose U"
,
Choices
{
0
,
1
},
Visible
1
}
WireRadius
=
{
1
,
Name
"Parameters/10Wire radius [mm]"
}
MeshSizeWire
=
{
0.25
,
Name
"Parameters/11Mesh size in wire [mm]"
,
Visible
!
Flag_Thin
}
MeshSizeThinWire
=
{
2
,
Name
"Parameters/12Mesh size on thin wire [mm]"
,
Visible
Flag_Thin
}
//SleeveRadius = {2, Name "Parameters/13Sleeve radius [mm]", Visible Flag_RegSleeve}
box
=
{
100
*
mm
,
Name
"Parameters/5box half-width [m]"
}
Flag_Maps
=
{
1
,
Name
"Input/2Display maps"
,
Choices
{
0
,
1
},
Visible
1
}
LogFreq
=
{
4
,
Min
1
,
Max
8
,
Step
0.25
,
Name
"Input/4Log of frequency"
}
Freq
=
10
^
LogFreq
WireRadius
=
{
1
,
Name
"Parameters/5Wire radius [mm]"
}
MeshSizeWire
=
{
1
,
Name
"Parameters/6Mesh size in wire [mm]"
,
Visible
!
Flag_Thin
}
MeshSizeThinWire
=
{
1
,
Name
"Parameters/7Mesh size on thin wire [mm]"
,
Visible
Flag_Thin
}
SleeveRadius
=
{
2
,
Name
"Parameters/8Sleeve radius [mm]"
}
box
=
{
100
*
mm
,
Name
"Parameters/9box half-width [m]"
}
rw
=
WireRadius
*
mm
rs
=
SleeveRadius
*
mm
rs
=
MeshSizeThinWire
*
mm
A_c
=
Pi
*
rw
^
2
// wire cross section
rout
=
box
Lz
=
10
*
mm
...
...
@@ -41,6 +52,10 @@ DefineConstant[
*/
];
If
(
Flag_SemiAnalytic
)
SetNumber
(
"Parameters/01Thin wires"
,
1
);
Flag_Thin
=
1
;
EndIf
Xlocs
()
=
{
0
,
5
*
mm
,
-
5
*
mm
};
...
...
@@ -50,7 +65,7 @@ For i In {1:NumWires}
WX
~
{
i
}
=
{
Xlocs
(
i
-
1
),
// place wires symmetrically around x=0
Name
Sprintf
(
"Parameters/Wire %g/0X position [m]"
,
i
),
Closed
}
WY
~
{
i
}
=
{
Ylocs
(
i
-
1
),
Name
Sprintf
(
"Parameters/Wire %g/0Y position [m]"
,
i
)
}
WI
~
{
i
}
=
{
1
.23456
,
Name
Sprintf
(
"Parameters/Wire %g/2Current [A]"
,
i
)
}
WI
~
{
i
}
=
{
1
,
Name
Sprintf
(
"Parameters/Wire %g/2Current [A]"
,
i
)
}
WP
~
{
i
}
=
{
0
*
NumWires
*
(
i
-
1
),
Name
Sprintf
(
"Parameters/Wire %g/3Phase [deg]"
,
i
)
}
];
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment