Finite Element Method Magnetics: User's Manual
Finite Element Method Magnetics: User's Manual
Finite Element Method Magnetics: User's Manual
Version 3.4
User’s Manual
December 22, 2004
David Meeker
[email protected]
http://femm.berlios.de
2004
c
Acknowledgements
Thanks to the following people for their valuable contributions to FEMM:
• Si Hang, for writing fast point location routines that greatly increase the speed at which
FEMM evaluates line integrals;
• Stefan Engstrom, for figuring out how to run FEMM on linux machines via wine;
• Peter Krc and and Frank Lenning for contributing some special-purpose batch-run code;
• The regular posters on the FEMM mail list for their great suggestions, comments and advice;
• Martin Furlan, for finding several bugs and helping to work through the fine points of force
and torque computation;
• Anders Dahlberg, for finding several bugs and making a number of suggestions as to features
that would improve FEMM’s capabilities and ease of use;
• Jonathan Shewchuk, for creating triangle, the excellent mesh generator that FEMM uses;
2
Contents
1 Introduction 5
2 Overview 6
2.1 Relevant Maxwell’s Equations . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
2.1.1 Magnetostatic Problems . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
2.1.2 Harmonic Problems . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
2.2 Boundary Conditions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
2.3 Finite Element Analysis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
3 Preprocessor 10
3.1 Preprocessor Drawing Modes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
3.2 Keyboard and Mouse Commands . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
3.3 View Manipulation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
3.4 Grid Manipulation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
3.5 Edit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
3.6 Problem Definition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
3.7 Definition of Properties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
3.7.1 Point Properties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
3.7.2 Boundary Properties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
3.7.3 Materials Properties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
3.7.4 Materials Library . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
3.7.5 Circuit Properties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
3.8 Exterior Region . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
3.9 Spawned Tasks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
4 DXF Import/Export 28
5 Postprocessor 30
5.1 Postprocessor modes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
5.2 View and Grid Manipulation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
5.3 Keyboard Commands . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
5.4 Mouse Actions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
5.5 Contour Plot . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
5.6 Density Plot . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
5.7 Vector Plots . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
5.8 Line Plots . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
5.9 Line Integrals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
5.10 Block Integrals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
5.11 Force/Torque Calculation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
5.11.1 Lorentz Force/Torque . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
5.11.2 Weighted Stress Tensor Volume Integral . . . . . . . . . . . . . . . . . . . 39
5.11.3 Maxwell Stress Tensor Line Integral . . . . . . . . . . . . . . . . . . . . . 39
5.12 Exporting of Graphics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
3
5.13 Circuit Results . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
5.14 Miscellaneous Useful View Commands . . . . . . . . . . . . . . . . . . . . . . . 44
7 Numerical Methods 62
7.1 Finite Element Formulation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
7.2 Linear Solvers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
7.3 Field Smoothing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
A Appendix 67
A.1 Modeling Permanent Magnets . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
A.2 Bulk Lamination Modeling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
A.3 Open Boundary Problems . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
A.3.1 Truncation of Outer Boundaries . . . . . . . . . . . . . . . . . . . . . . . 73
A.3.2 Asymptotic Boundary Conditions . . . . . . . . . . . . . . . . . . . . . . 73
A.3.3 Kelvin Transformation . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
A.4 Nonlinear Time Harmonic Formulation . . . . . . . . . . . . . . . . . . . . . . . 78
A.5 ActiveX Interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
4
1 Introduction
FEMM is a suite of programs for solving static and low frequency problems in magnetics. The pro-
grams currently address problems on two-dimensional planar and axisymmetric domains. FEMM
is divided into three parts:
1. Preprocessor (femme.exe). This is a CAD-like program for laying out the geometry of the
problem to be solved and defining material properties and boundary conditions. Autocad
DXF files can be imported to facilitate the analysis of existing geometries.
2. Solver (fkern.exe). The solver takes a set of data files that describe problem and solves
the relevant Maxwell’s equations to obtain values for the magnetic field through the solution
domain.
3. Postprocessor (femmview.exe). This is a graphical program that displays the resulting fields
in the form of contour and density plots. The program also allows the user to inspect the
field at arbitrary points, as well as evaluate a number of different integrals and plot various
quantities of interest along user-defined contours.
Two additional programs are also called to perform specialized tasks. These are:
• triangle.exe. Triangle breaks down the solution region into a large number of triangles,
a vital part of the finite element process. This program was written by Jonathan Shewchuk,
and is available from his Carnegie-Mellon University web page, or from Netlib.
• femmplot.exe This small program is used to display various 2-D plots. It also allows the
user to save and view any files in the Extended Metafile (.emf) format.
The Lua scripting language is also integrated into the pre- and post-processors. Lua allow
“batch” runs to be performed without user interaction. In addition, all edit boxes in the user
interface are parsed by Lua, allowing equations or mathematical expressions to be entered into any
edit box in lieu of a numerical value. In any edit box in FEMM, a selected piece of text can be
evaluated by Lua via a selection on the right mouse button click menu.
The purpose of this document is to give a brief explanation of the kind of problems solved by
FEMM and to provide a fairly detailed documentation of the programs’ use.
5
2 Overview
The goal of this section is to give the user a brief description of the problems that FEMM solves.
This information is not really crucial if you are not particularly interested in the approach that
FEMM takes to formulating the problems. You can skip most of Overview, but take a look at
Section 2.2. This section contains some important pointers about assigning enough boundary
conditions to get a solvable problem.
Some familiarity with magnetism and Maxwell’s equations is assumed, since a review of this
material is beyond the scope of this manual. However, the author has found several references that
have proved useful in understanding the derivation and solution of Maxwell’s equations in various
situations. A very good introductory-level text is Plonus’s Applied electromagnetics [1]. A good
intermediate-level review of Maxwell’s equations, as well as a useful analogy of magnetism to
similar problems in other disciplines is contained in Hoole’s Computer-aided analysis and design
of electromagnetic devices [2]. For an advanced treatment, the reader has no recourse but to refer
to Jackson’s Classical electrodynamics [3].
∇×H = J (1)
∇·B = 0 (2)
subject to a constitutive relationship between B and H for each material:
B = µH (3)
If a material is nonlinear (e.g. saturating iron or alnico magnets), the permeability, µ is actually a
function of B:
B
µ= (4)
H(B)
FEMM goes about finding a field that satisfies (1)-(3) via a magnetic vector potential approach.
Flux density is written in terms of the vector potential, A, as:
B = ∇×A (5)
Now, this definition of B always satisfies (2). Then, (1) can be rewritten as:
1
∇× ∇×A = J (6)
µ(B)
6
For a linear isotropic material (and assuming the Coulomb gauge, ∇ · A = 0), eq. (6) reduces to:
1
− ∇2 A = J (7)
µ
FEMM retains the form of (6), so that magnetostatic problems with a nonlinear B-H relationship
can be solved.
In the general 3-D case, A is a vector with three components. However, in the 2-D planar and
axisymmetric cases, two of these three components are zero, leaving just the component in the “out
of the page” direction.
The advantage of using the vector potential formulation is that all the conditions to be satisfied
have been combined into a single equation. If A is found, B and H can then be deduced by differ-
entiating A. In addition, the form of (6), and elliptic partial differential equation, arises in the study
of many different types of engineering phenomenon. There are a large number of tools that have
been developed over the years to solve this particular problem.
∂B
∇×E = − (9)
∂t
Substituting the vector potential form of B into (9) yields:
∇ × E = −∇ × Ȧ (10)
E = −Ȧ − ∇V (11)
where Jsrc represents the applied currents sources. The ∇V term is an additional voltage gradient
that, in 2-D problems, is constant over a conducting body. FEMM uses this voltage gradient in
some harmonic problems to enforce constraints on the current carried by conductive regions.
7
FEMM considers (13) for the case in which the field is oscillating at one fixed frequency. For
this case, a phasor transformation [2] yields a steady-state equation that is solved for the amplitude
and phase of A. This transformation is:
in which a is a complex number. Substituting into (13) and dividing out the complex exponential
term yields the equation that FEMM actually solves for harmonic magnetic problems:
1
∇× ∇ × a = − jωσa + Jˆsrc − σ∇V (15)
µ(B)
in which Jˆsrc represents the phasor transform of the applied current sources.
Strictly speaking, the permeability µ should be constant for harmonic problems. However,
FEMM retains the nonlinear relationship in the harmonic formulation, allowing the program to
approximate the effects of saturation on the phase and amplitude of the fundamental of the field
distribution. There are a number of subtleties to the nonlinear time harmonic formulation–this
formulation is addressed in more detail in Appendix A.4.
FEMM also allows for the inclusion of complex and frequency-dependent permeability in time
harmonic problems. These features allow the program to model materials with thin laminations
and approximately model hysteresis effects.
• Dirichlet. In this type of boundary condition, the value of A is explicitly defined on the
boundary, e.g. A = 0. The most common use of Dirichlet-type boundary conditions is to
define A = 0 along a boundary to keep flux from crossing the boundary.
• Neumann. This boundary condition specifies the normal derivative of A along the boundary.
Usually, ∂A/∂n = 0 is defined along a boundary to force flux to pass the boundary at exactly
a 90o angle to the boundary. This sort of boundary condition is consistent with an interface
with a very highly permeable metal.
• Robin. The Robin boundary condition is sort of a mix between Dirichlet and Neumann,
prescribing a relationship between the value of A and its normal derivative at the boundary.
An example of this boundary condition is:
∂A
+ cA = 0
∂n
This boundary condition is most often used by FEMM in eddy current problems on interfaces
with bodies with small skin-depth eddy currents.
8
Figure 1: Triangulation of Massachusetts
If no boundary conditions are explicitly defined, each boundary defaults to a ∂A/∂n = 0 Neu-
mann boundary condition. However, a non-derivative boundary condition must be defined some-
where so that the problem has a unique solution.
For axisymmetric problems, A = 0 is enforced on the line r = 0. In this case, a valid solution can
be obtained without explicitly defining any boundary conditions, as long as part of the boundary
of the problem lies along r = 0.
9
3 Preprocessor
The preprocessor is used for drawing the problems geometry, defining materials, and defining
boundary conditions.
Drawing a valid geometry usually consists of four (though not necessarily sequential) tasks:
• Drawing the endpoints of the lines and arc segments that make up a drawing.
• Connecting the endpoints with either line segments or arc segments
• Adding “Block Label” markers into each section of the model to define material properties
and mesh sizing for each section.
• Specifying boundary conditions on the outer edges of the geometry.
This section will describe exactly how one goes about performing these tasks and creating a prob-
lem that can be solved.
correspond to Point, Line Segment, Arc Segment, Block Label, and Group modes respectively.
The default drawing mode when the program begins is the Point mode.
10
Point Mode Keys
Key Function
Space Edit the properties of selected point(s)
Tab Display dialog for the numerical entry of coordinates for a new point
Escape Unselect all points
Delete Delete selected points
11
Point Mode
Action Function
Left Button Click Create a new point at the current mouse pointer location
Right Button Click Select the nearest point
Right Button DblClick Display coordinates of the nearest point
Group Mode
Action Function
Right Button Click Select the group associated with the nearest object
• The “blank page” button scales the screen to the smallest possible view that displays the
entire problem geometry.
• The “+” and “-” buttons zoom the current view in and out, respectively.
12
• The “page with magnifying glass” button allows the view to be zoomed in on a user-specified
part of the screen. To use this tool, first push the toolbar button. Then, move the mouse
pointer to one of the desired corners of the “new” view. Press and hold the left mouse
button. Drag the mouse pointer to the opposite diagonal corner of the desired “new” view.
Last, release the left mouse button. The view will zoom in to a window that best fits the
user’s desired window.
Some infrequently used view commands are also available, but only as options off of the Zoom
selection of the main menu. This menu contains all of the manipulations available from the toolbar
buttons, plus the options Keyboard, Status Bar, and Toolbar.
The Keyboard selection allows the user to zoom in to a window in which the window’s corners
are explicitly specified by the user via keyboard entry of the corners’ coordinates. When this
selection is chosen, a dialog pops up prompting for the locations of the window corners. Enter
the desired window coordinates and hit “OK”. The view will then zoom to the smallest possible
window that bounds the desired window corners. Typically, this view manipulation is only done
as a new drawing is begun, to initially size the view window to convenient boundaries.
The Status Bar selection can be used to hide or show the one-line status bar at the bottom
of the Femme window. Generally, it is desirable for the toolbar to be displayed, since the current
location of the mouse pointer is displayed on the status line.
The Toolbar selection can be used to hide or show the toolbar buttons. The toolbar is not
fundamentally necessary to running Femme, because any selection on the toolbar is also available
via selections off of the main menu. If more space on the screen is desired, this option can be
chosen to hide the toolbar. Selecting it a second time will show the toolbar again. It may be useful
to note that the toolbar can be undocked from the main screen and made to “float” at a user-defined
location on screen. This is done by pushing the left mouse button down on an area of the toolbar
that is not actually a button, and then dragging the toolbar to its desired location. The toolbar can
be docked again by moving it back to its original position.
the grid. The default is that the button is pushed in, showing the current grid. The second button,
with an icon of an arrow pointing to a grid point, is the “snap to grid” button. When this button
is pushed in, the location of the mouse pointer is rounded to the nearest grid point location. By
default, the “snap to grid” button is not pressed. The right-most button brings up the Grid Properties
dialog. This dialog is shown in Figure 5.
13
Figure 5: Grid Properties dialog.
The Grid Properties dialog has an edit box for the user to enter the desired grid sizing. When
the box appears, the number in this edit box is the current grid size. The edit box also contains
a drop list that allows the user to select between Cartesian and Polar coordinates. If Cartesian
is selected, points are specified by their (x,y) coordinates for a planar problem, or by their (r,z)
coordinates for an axisymmetric problem. If Polar is selected, points are specified by an angle and
a radial distance from the origin. The default is Cartesian coordinates.
3.5 Edit
Several useful tasks can be performed via the Edit menu off of the main menu.
Perhaps the most frequently used is the Undo command. Choosing this selection undoes the
last addition or deletion that the user has made to the model’s geometry.
For selecting many objects quickly, the Select Group command is useful. This command
allows the user to select objects of the current type located in an arbitrary rectangular box. When
this command is selected, move the mouse pointer to one corner of the region that is to be selected.
Press and hold the left mouse button. Then, drag the mouse pointer to the opposite diagonal
corner of the region. A red box will appear, outlining the region to be selected. When the desired
region has been specified, release the left mouse button. All objects of the current type completely
contained within the box will become selected.
Any objects that are currently selected can be moved, copied, or pasted. To move or copy
selected objects, simply choose the corresponding selection off of the main menu’s Edit menu. A
dialog will appear prompting for an amount of displacement or rotation.
14
Figure 6: Problem Definition dialog.
The first edit box in the dialog is Frequency (Hz). For a magnetostatic problem, the user
should choose a frequency of zero. If the frequency is non-zero, the program will perform a
harmonic analysis, in which all field quantities are oscillating at this prescribed frequency. The
default frequency is zero.
The second edit box is the Depth specification. If a Planar problem is selected, this edit box
becomes enabled. This value is the length of the geometry in the “into the page” direction. This
value is used for scaling integral results in the post processor (e.g. force, inductance, etc.) to the
appropriate length. The units of the Depth selection are the same as the selected length units. For
files imported from version 3.2, the Depth is chosen so that the depth equals 1 meter, since in
version 3.2, all results from planar problems ar e reported per meter.
The third edit box is the Solver Precision edit box. The number in this edit box specifies
the stopping criteria for the linear solver. The linear algebra problem could be represented by:
Mx = b
15
3.7 Definition of Properties
To make a solvable problem definition, the user must identify boundary conditions, block materials
properties, and so on. The different types of properties defined for a given problem are defined via
the Properties selection off of the main menu.
When the Properties selection is chosen, a drop menu appears that has selections for Ma-
terials, Boundary, Point, and Circuits. When any one of these selections is chosen, the dialog
pictured in Figure 7 appears. This dialog is the manager for a particular type of properties. All
currently defined properties are displayed in the Property Name drop list at the top of the dia-
log. At the beginning of a new model definition, the box will be blank, since no properties have yet
been defined. Pushing the Add Property button allows the user to define a new property type. The
Delete Property button removes the definition of the property currently in view in the Property
Name box. The Modify Property button allows the user to view and edit the property currently
selected in the Property Name box. Specifics for defining Point, Segment, and Block properties
are addressed in the following subsections.
In general, a number of these edit boxes prompt the user for both real and imaginary compo-
nents for entered values. If the problem you are defining is magnetostatic (zero frequency), enter
the desired value in the box for the real component, and leave a zero in the box for the imaginary
component. The reason that Femme uses this formalism is to obtain a relatively smooth transition
from static to time-harmonic problems. Consider the definition of the Phasor transformation in
Eq. 14. The phasor transformation assumes that all field values oscillate in time at a frequence of
ω. The phasor transformation takes the cosine part of the field value and represents it as the real
part of a complex number. The imaginary part represents the magnitude of the sine component,
90o out of phase. Note what happens as the frequency goes to zero:
Therefore, the magnetostatic (ω = 0) values are just described by the real part the specified complex
number.
16
3.7.1 Point Properties
If a new point property is added or an existing point property modified, the Nodal Property
dialog box appears. This dialog box is pictured in Figure 8
The first selection is the Name edit box. The default name is “New Point Property,” but this
name should be changed to something that describes the property that you are defining.
Next are edit boxes for defining the vector potential, A, at a given point, or prescribing a point
current, J, at a given point. The two definitions are mutually exclusive. Therefore, if there are
nonzero values in either of the J boxes, the program assumes that a point current is being defined.
Otherwise, it is assumed that a point vector potential is being defined.
There are two edit boxes for the definition of the real and imaginary parts of A, the magnetic
vector potential. The units of A are understood to be Weber/Meter. Typically, A needs to be
defined as some particular values (usually zero) at some point in the solution domain for problems
with derivative boundary conditions on all sides. This is the typical use of defining a point vector
potential.
Lastly, there are two edit boxes for the definition of a point current, J. The units for the point
current are understood to be in Amperes.
17
Figure 9: Boundary Property dialog.
The first selection in the dialog is the Name of the property. The default name is “New Bound-
ary,” but you should change this name to something more descriptive of the boundary that is being
defined.
The next selection is the BC Type drop list. This specifies the boundary condition type. Cur-
rently, FEMM supports the following types of boundaries:
• Prescribed A With this type of boundary condition, the vector potential, A, is prescribed
along a given boundary. This boundary condition can be used to prescribe the flux passing
normal to a boundary, since the normal flux is equal to the tangential derivative of A along
the boundary. The form for A along the boundary is specified via the parameters A0 , A1 ,
A2 and φ in the Prescribed A parameters box. If the problem is planar, the parameters
correspond to the formula:
A = (A0 + A1 x + A2 y)e jφ (17)
If the problem type is axisymmetric, the parameters correspond to:
A = (A0 + A1 r + A2 z)e jφ (18)
• Small Skin Depth This boundary condition denotes an interface with a material subject
to eddy currents at high enough frequencies such that the skin depth in the material is very
small. A good discussion of the derivation of this type of boundary condition is contained in
[2]. The result is a Robin boundary condition with complex coefficients of the form:
∂A
1+ j
+ A=0 (19)
∂n δ
18
where the n denotes the direction of the outward normal to the boundary and δ denotes the
skin depth of the material at the frequency of interest. The skin depth, δ is defined as:
s
2
δ= (20)
ωµr µo σ
where µr and σ are the relative permeability and conductivity of the thin skin depth eddy cur-
rent material. These parameters are defined by specifying µ and σ in the Small skin depth
parameters box in the dialog. At zero frequency, this boundary condition degenerates to
∂A/∂n = 0 (because skin depth goes to infinity).
∂A
1
+ co A + c1 = 0 (21)
µr µo ∂n
The parameters for this class of boundary condition are specified in the Mixed BC parameters
box in the dialog. By the choice of coefficients, this boundary condition can either be a Robin
or a Neumann boundary condition. There are two main uses of this boundary condition:
• Strategic Dual Image This is sort of an “experimental” boundary condition that I have
found useful for my own purposes from time to time. This boundary condition mimics
an “open” boundary by solving the problem twice: once with a homogeneous Dirichlet
boundary condition on the SDI boundary, and once with a homogeneous Neumann condition
on the SDI boundary. The results from each run are then averaged to get the open boundary
result. This boundary condition should only be applied to the outer boundary of a circular
domain in 2-D planar problems. Through a method-of-images argument, it can be shown
that this approach yields the correct open-boundary result for problems with no iron (i.e just
currents or linear magnets with unit permeability in the solution region).
• Periodic This type of boundary condition is applied to either two segments or two arcs to
force the magnetic vector potential to be identical along each boundary. This sort of bound-
ary is useful in exploiting the symmetry inherent in some problems to reduce the size of
the domain which must be modeled. The domain merely needs to be periodic, as opposed to
obeying more restrictive A = 0 or ∂A/∂n = 0 line of symmetry conditions. Another useful ap-
plication of periodic boundary conditions is for the modeling of “open boundary” problems,
19
as discussed in Appendix A.3.3. Often, a periodic boundary is made up of several different
line or arc segments. A different periodic condition must be defined for each section of the
boundary, since each periodic BC can only be applied to a line or arc and a corresponding
line or arc on the remote periodic boundary.
• Antiperiodic The antiperiodic boundary condition is applied in a similar way as the peri-
odic boundary condition, but its effect is to force two boundaries to be the negative of one
another. This type of boundary is also typically used to reduce the domain which must be
modeled, e.g. so that an electric machine might be modeled for the purposes of a finite
element analysis with just one pole.
20
Figure 10: Block Property dialog.
see that it looks like it is “supposed” to. This is done by pressing the Plot B-H Curve button or
the Log Plot B-H Curve button on the B-H data dialog. You should see a B-H curve that looks
something like the curve pictured in Figure 12. The boxes in the plot represent the locations of
the entered B-H points, and the line represents a cubic spline derived from the entered data. Since
FEMM interpolates between your B-H points using cubic splines, it is possible to get a bad curve
if you haven’t entered an adequate number of points. “Weird” B-H curves can result if you have
entered too few points around relatively sudden changes in the B-H curve. Femm “takes care of”
21
Figure 11: B-H data entry dialog.
bad B-H data (i.e. B-H data that would result in a cubic spline fit that is not single-valued) by
repeatedly smoothing the B-H data using a three-point moving average filter until a fit is obtained
that is single-valued. This approach is robust in the sense that it always yields a single-valued
curve, but the result might be a poor match to the original B-H data. Adding more data points in
the sections of the curve where the curvature is high helps to eliminate the need for smoothing.
It may also be important to note that FEMM extrapolates linearly off the end of your B-H
curve if the program encounters flux density/field intensity levels that are out of the range of the
values that you have entered. This extrapolation may make the material look more permeable than
it “really” is at high flux densities. You have to be careful to enter enough B-H values to get an
accurate solution in highly saturated structures so that the program is interpolating between your
entered data points, rather than extrapolating.
Also in the nonlinear parameters box is a parameter, φhmax . For nonlinear problems, the hys-
teresis lag is assumed to be proportional to the effective permeability. At the highest effective
permeability, the hysteresis angle is assumed to reach its maximal value of φhmax . This idea can be
represented by the formula:
µe f f (B)
φh (B) = φhmax (22)
µe f f ,max
The next entry in the dialog is Hc . If the material is a permanent magnet, you should enter
the magnet’s coercivity here in units of Amperes per meter. There are some subtleties involved
22
Figure 12: Sample B-H curve plot.
in defining permanent magnet properties (especially nonlinear permanent magnets). Please refer
to the Appendix A.1 for a more thorough discussion of the modeling of permanent magnets in
FEMM.
The next entries, the real and imaginary parts of J, represent the applied current density in the
block. The usual rules for quantities with real and imaginary parts apply to J.
The σ edit box denotes the electrical conductivity of the material in the block. This value is
generally only used in time-harmonic (eddy current) problems. The units for conductivity are 106
Seymens/Meter (equivalent to 106 (Ω ∗ Meters)−1 ). For reference, copper at room temperature has
a conductivity of 58 MS/m; a good silicon steel for motor laminations might have a conductivity of
as low as 2 MS/m. Commodity-grade transformer laminations are more like 9 MS/m. You should
note that conductivity generally has a strong dependence upon temperature, so you should choose
your values of conductivity keeping this caveat in mind.
The last set of properties is the Lamination and Wire Type section. If the material is lami-
nated, the drop list in this section is used to denote the direction in which the material is laminated.
If the material is meant to represent a bulk wound coil, this drop list specifies the sort of wire from
which the coil is constructed.
The various selections in this list are illustrated in Figure 13 Currently, the laminations are
constrained to run along a particular axis.
If some sort of laminated construction is selected in the drop list, the lamination thickness
and fill factor edit boxes become enabled. The lamination thickness, fill factor, and lamination
23
Figure 13: Different lamination orientation options.
orientation parameters are used to implement a bulk model of laminated material. The result of
this model is that one can account for laminations with hysteresis and eddy currents in harmonic
problems. For magnetostatic problems, one can approximate the effects of nonlinear laminations
without the necessity of modeling the individual laminations separately. This bulk lamination
model is discussed in more detail in the Appendix (Section A.2).
The dlam edit box represents the thickness of the laminations used for this type of material. If
the material is not laminated, enter 0 in this edit box. Otherwise, enter the thickness of just the iron
part (not the iron plus the insulation) in this edit box in units of millimeters.
Associated with the lamination thickness edit box is the Lam fill factor edit box. This is
the fraction of the core that is filled with iron. For example, if you had a lamination in which the
iron was 12.8 mils thick, and the insulation bewteen laminations was 1.2 mils thick, the fill factor
would be:
12.8
Fill Factor = = 0.914
1.2 + 12.8
If a wire type is selected, the Strand dia. and/or Number of strands edit boxes become
enabled. If the Magnet wire or Square wire types are selected, it is understood that there is can
only be one strand, and the Number of strands edit box is disabled. The wire’s diameter (or
width) is then entered in the Strand dia. edit box. For stranded and Litz wire, one enters the
number of strands and the strand diameter. Currently, only builds with a single strand gauge are
supported.
If a wire type is specified, the material property can be applied to a “bulk” coil region each
individual turn need not be modeled. In DC problems, the results will automatically be adjusted
for the implied fill factor. For AC problems, the the fill factor is taken into account, and AC
proximity and skin effect losses are taken into account via effective complex permeability and
conductivity that are automatically computed for the wound region.
24
Properties | Materials Library selection off of the main menu. When this option is se-
lected, the Materials Library dialog pictured in Figure 14 appears. This dialog allow the user
to exchange Block Property definitions between the current model and the materials library via a
drag-and-drop interface.
A number of different options are available via a mouse button right-click when the cursor is
located on top of a material or folder. Materials can be edited by double-clicking on the desired
material.
Material from other material libraries or models can be imported by selecting the “Import
Materials” option from the right-button menu that appears when the pointer is over the root-level
folder of either the Library or Model materials lists.
The materials library should be located in the same directory as the FEMM executable files,
under the filename mlibrary.dat. If you move the materials library, femm will not be able to find
it.
25
If ”parallel” is selected, the current is split between all regions marked with that circuit property
on the basis of impedance ( current is split such that the voltage drop is the same across all sections
connected in parallel). Only solid conductors can be connected in parallel.
If ”series” is selected, the specified current is applied to each block labeled with that circuit
property. In addition, blocks that are labeled with a series circuit property can also be assigned a
number of turns, such that the region is treated as a stranded conductor in which the total current is
the series circuit current times the number of turns in the region. The number of turns for a region
is prescribed as a block label property for the region of interest. All stranded coils must be defined
as series-connected (because each turn is connected together with the other turns in series). Note
that the number of turns assigned to a block label can be either a positive or a negative number. The
sign on the number of turns indicated the direction of current flow associated with a positive-valued
circuit current.
For magnetostatic problems, one could alternatively apply a source current density over the
conductor of interest and achieve similar results. For eddy current problems, however, the “circuit”
properties are much more useful–they allow the user to define the current directly, and they allow
the user to assign a particular connectivity to various regions of the geometry. This information is
used to obtain impedance, flux linkage, etc., in a relatively painless way in the postprocessor.
By applying circuit properties, one can also enforce connectivity in eddy current problems.
By default, all objects in eddy current problems are “shorted together at infinity”–that is, there
is nothing to stop induced currents from returning in other sections of the domain that might not
be intended to be physically connected. By applying a parallel-connected circuit with a zero net
current density constraint to each physical “part” in the geometry, the connectivity of each part is
enforced and all is forced to be conserved inside the part of interest.
The dialog for entering circuit properties is pictured in Figure 15.
26
interest and contains all of the items of interest, around which one desires to determine the mag-
netic field. The second disk represents the region exterior to the first disk. If periodic boundary
conditions are employed to link the edges of the two disks, it can be shown (see Appendix A.3.3)
that the result is exactly equivalent to solving for the fields in an unbounded domain.
One would also like to apply the same approach to model unbounded axisymmetric problems,
as well as unbounded planar problems. Unfortunately, the Kelvin Transformation is a bit more
complicated for axisymmetric problems. In this case, the permeability of the external region has
to vary based on distance from the center of the external region and the outer radius of the external
region. The approach is described in detail in [17]. FEMM automatically implements the variation
of permeability in the exterior region, but a bit more information must be collected to perform
the permeability grading required in the external region. This is where the “External Region”
parameters come in–these are the parameters that the program needs to define the permeabilities
of elements in the external region for “unbounded” axisymmetric problems.
Specifically, there are three parametes that are collected in the dialog that appears when the
user selects the External Region properties. These are:
• Center of Exterior Region The location along the z-axis of the axisymmetric problem
where the center of the block representing the external region is located.
• Radius of Exterior Region Radius of the sphere representing the exterior region.
• Radius of Interior Region Radious of the spehre representing the interior region (i.e.
the region in which the items of interest are located).
To finish defining the axisymmetric external region, the Block located in an external
region check box must be selected in any block labels that are located in the region that is desired
to be the axisymmetric external region.
The first of these buttons (with the “yellow mesh” icon) runs the mesh generator. The solver
actually automatically calls the mesh generator to make sure that the mesh is up to date, so you
never have to call the mesher from within femme. However, it is almost always important to get
a look at the mesh and see that it “looks right.” When the mesh generation button is pressed,
the mesher is called. While the mesher is running, an entry labeled “triangle” will appear on the
Windows taskbar. Triangle is actually a console application that runs in a minimized window.
After the geometry is triangulated, the finite element mesh is loaded into memory and displayed
underneath the defined nodes, segments, and block labels as a set of yellow lines.
27
If you have a very large model, just keeping all of the mesh information in core can take up
a significant amount of memory. If you are about to analyze a very large problem, it might be a
good idea to choose the Mesh | Purge Mesh option off of the main menu. When this option is
selected, the mesh is removed from memory, and the memory that it occupied is freed for other
uses.
The second button, with the “hand-crank” icon, executes the solver, fkern.exe. Before fkern
is actually run, the Triangle is called to make sure the mesh is up to date. Then, fkern is called.
When fkern runs, it opens up a console window to display status information to the user. How-
ever, fkern requires no user interaction while it is running. When fkern is finished analyzing your
problem, the console window will disappear. The time that fkern requires is highly dependent
on the problem being solved. Solution times can range from less than a second to several hours,
depending upon the size and complexity of the problem. Generally, linear magnetostatic problems
take the least amount of time. Harmonic problems take slightly more time, because the answer is
in terms of complex numbers. The complex numbers effectively double the number of unknowns
as compared to a magnetostatic problem with the same mesh. The slowest problems to analyze are
nonlinear magnetostatic problems, since multiple iterations must be used to converge on the final
solution. However, nonlinear problems almost never take more than 10 iterations. Later iterations
in nonlinear problems are usually are quite fast compared to the first iteration or two because the
later iterations can be initialized with an approximate solution that is very close to the “actual”
solution.
For users who have a technical interest in what is “under the hood” in fkern, some details are
provided in the Appendix (Section 7).
The “big magnifying glass” icon is used to run the postprocessor once the analysis is finished.
A detailed description of the postprocessor addressed in Section 5.
4 DXF Import/Export
A common aspect of all preprocessor modes is DXF Import/Export. For interfacing with CAD
programs and other finite element packages, femm supports the import and export of the Auto-
CAD dxf file format. Specifically, the dxf interpreter in femm was written to the dxf revision 13
standards. Only 2D dxf files can be imported in a meaningful way.
To import a dxf file, select Import DXF off of the File menu. A dialog will appear after the
file is seleted asking for a tolerance. This tolerance is the maximum distance between two points
at which the program considers two points to be the same. The default value is usually sufficient.
For some files, however, the tolerance needs to be increased (i.e. made a larger number) to import
the file correctly. FEMM does not understand all the possible tags that can be included in a dxf
file; instead, it simply strips out the commands involved with drawing lines, circles, and arcs. All
other information is simply ignored.
Generally, dxf import is a useful feature. It allows the user to draw an initial geometry using
their favorite CAD package. Once the geometry is laid out, the geometry can be imported into
femm and detailed for materials properties and boundary conditions.
Do not despair if femm takes a while to import dxf files (especially large dxf files). The reason
that femm can take a long time to import dxf files is that a lot of consistency checking must be
performed to turn the dxf file into a valid finite element geometry. For example, large dxf files
28
might take up to a minute or two to import.
The current femm geometry can be exported in dxf format by selecting the Export DXF option
off of the File menu in any preprocessor window. The dxf files generated from femm can then be
imported into CAD programs to aid in the mechanical detailing of a finalized design, or imported
into other finite element or boundary element programs.
29
5 Postprocessor
The executable femmview.exe is the postprocessor used to view solutions generated by the fkern
solver. This program can either be run on its own, from the “Start” menu (to view previously
solved problems), or spawned from within femme to view a newly generated solution. Data files
for femmview have the .ans prefix.
• Contour Mode This mode allows the user to define arbitrary contours in the solution region.
Once a contour is defined, plots of field quantities can be produced along the contour, and
various line integrals can be evaluated along the contour.
• Block Mode The Block Mode lets the user define a subdomain in the solution region. Once
the block has been defined, a variety of area and volume integrals can be taken over the
defined subdomain. Integrals include stored energy (inductance), various kinds of losses,
total current in the block, and so on.
The current postprocessor mode is controlled via the Analysis Mode toolbar buttons, shown in
Figure 17. The buttons denote, respectively, Point Values mode, Contour Mode, and Block Mode.
The depressed button denotes the current mode. The default mode when femmview starts is Point
Values mode.
these grid manipulation toolbar buttons: The grid and view manipulation work in exactly the same
fashion as these same features in the preprocessor. Refer to Section 3.4 for a detailed description
of grid manipulation, and to Section 3.3 for view manipulation.
30
Figure 19: Grid Manipulation toolbar buttons.
31
Figure 20: Graph Mode toolbar buttons.
formulation, flux lines are simply plots of the level contours of the vector potential, A, in planar
problems, or level contours of 2πrA in axisymmetric problems.
For harmonic problems, the contours are a little more subtle–A has both real and imaginary
components. In this case, femmview allows the user to plot contours of either the real or the
imaginary part of A. Real contours appear black, and Imaginary contours appear as grey.
By default, a set of 19 flux lines are plotted when a solution is initially loaded into femmview.
The number and type of flux lines to be plotted can be altered using the Contours Plot icon in the
Graph Mode section of the toolbar (see Figure 20. The Contour Plot icon is the icon with the black
contours. When this button is pressed, a dialog pops up, allowing the choice of the number of
contours (between 4 and 100 are allowed), and which contours to plot (either real, imaginary, or
none).
In the contour plot dialog, a check box is also present titled “Show stress tensor mask”. If this
box is checked, the contour lines associated with the last Weighted Stress Tensor integration are
also displayed, by default as orange flux lines.
32
Figure 21: Solution for an air-cored coil with both Contour Lines and Density Plot
button is pressed, the X-Y Plot dialog (see Figure 23) appears with a drop list containing the types
of line plots available. Choose the desired type of plot and press “OK.”
After “OK” is pressed, the program computes the desired values along the defined contour.
These values are then plotted using the femmplot program, which is called automatically to display
the plot.
By default, the Write data to text file box is not checked. If the user selects this option,
the file selection dialog will appear and prompt for a filename to which to write the data. The
data is written in two-column text format. If Write data to text file is selected, a femmplot
window will not appear.
Currently, the type of line plots supported are:
33
Figure 23: X-Y Plot dialog.
In all of these plots, the direction of the normal is understood to be as shown in Figure 24. The
tangential direction is understood to be the direction in which the contour was defined.
In certain cases, the quantity to be plotted can be ambiguous. This can occur, for example, if a
plot of the tangential field intensity is requested on a contour running along an interface between
air and a piece of iron. In this case, there is a discontinuity in the tangential field intensity, and
the value of this quantity is different on each side of the interface. Femmview resolves the conflict
by always evaluating the plots at a differentially small distance to the “normal” side of the line.
Therefore, by defining the same contour but reversing the order in which the points are specified,
plots of the quantity of interest on each side of a boundary can be obtained.
34
Figure 24: When in doubt plots and integrals taken on this side of a contour.
One “tip” that may aid with the definition of contours of integration is that a curved integration
contour can be defined in a fairly painless fashion by hitting the Shift key. Hitting the Shift key
tells the program to turn the last segment in the defined integration contour into an arc segment. A
dialog then pops up that prompts for the desired attributes of the arc.
The line integrals currently supported are:
• B.n. This integral returns the total flux passing normal to the contour. This integral is useful
for determining the total flux in a bulk flux path. This result might then be compared to
predictions from a simpler magnetic circuit model, for example.
• H.t. The integral of the tangential field intensity along the contour yields the magnetomotive
force drop between the endpoints of the contour. Again, this integral is useful for comparison
to or validation of magnetic circuit models.
• Contour Length. This integral returns the length of the defined contour in meters.
• Force from stress tensor. This integral totals the force produced on the contour de-
rived from Maxwell’s stress tensor. Deriving meaningful force results requires some care in
the choice of integration path; refer to Section 5.11 for a detailed discussion of force and
torque calculation.
• Torque from stress tensor. This selection integrates the torque about the point (0,0)
inferred from Maxwell’s stress tensor. Again, some guidelines must be followed to get
accurate torque results (see Section 5.11).
• B.nˆ2. This selection evaluates the integral of the square of the normal flux along the line.
This integral is not so commonly used, but it has been useful in the past for some specialized
35
purposes, like determining the RMS amplitude of a periodic flux distribution.
where the first bracketed term in (25) is the contribution from the turns of coil 2 that are
pointed out of the page and the second term is the contribution from the turns of coil 2 that
are pointed into the page. To evaluate mutual inductance with FEMM, one substitutes values
into (25). First, run the model with only “coil 1” turned on. Then, integrate A over the
volume in which the second coil lies (although the second coil is not turned on). For planar
problems, you will typically have to make two separate integrations–one over the region
where the turns in “coil 2” are pointed out of the page (i.e. that part of the coil in which
a positive current results in current flowing in the out-of-the-page direction), and one over
the region in which the turns in “coil 2” are pointed into the page. Add these two results
together to get the total A1 dV2 integral. Lastly, multiply the integral result times n2 /(i1a2 ) to
get mutual inductance.
36
• Magnetic field energy This selection calculates the energy stored in the magnetic field
in the specified region. This integral can be used as an alternate method of getting inductance
for problems that are linear (at least not heavily saturated). Denoting E as the energy stored
in the magnetic field, inductance can be obtained by solving the formula:
Li2
E= (26)
2
In the case of nonlinear materials, the energy is computed via:
Z Z B
′ ′
W = H(B )dB dV (27)
0
Coenergy can be used in an alternative method of force and torque computation. To compute
force via coenergy, currents are held constant, and the position of the object upon which the
force is desired is perturbed slightly. The force can then be estimated by:
Wc (p + δ) −Wc (p)
F= (29)
δ
where p denotes the initial position, p + δ denotes the perturbed position, and δ is the mag-
nitude of the perturbation. The component of force determined in this way acts along the
direction of the perturbation–one has to perform two such operations to get both horizontal
and vertical components of the force.
• Hyst. and/or Laminated eddy current losses. This selection is typically used to
obtain the core losses produced in laminated iron sections in harmonic problems.
• Resistive losses This selection integrates the i2 R losses due to currents flowing in the
“z” direction (or θ direction, if you are evaluating an axisymmetric problem).
• Block cross-section area
• Total losses This selection totals the losses from all possible loss mechanisms that might
apply over the given block. This is especially useful for finding losses in a region that might
enclose several different types of materials with different loss mechanisms.
• Lorentz force (JxB) Lorentz force is the force produced by a magnetic field acting upon
a current: Z
FLorentz = J × B dV (30)
Many devices (e.g. voice coil actuators) produce forces in a fashion that can be evaluated
using this integral.
37
• Lorentz torque (rxJxB) This selection computes the torque about (0, 0) resulting from
Lorentz forces.
• Integral of B over block This integral can be useful in computing Lorentz forces. Since
Lorentz force is J × B, the force that would be produced if a coil were placed in a certain part
of the solution domain can be inferred by integrating B, and then scaling times an arbitrarily
chosen current density to get force.
• Total current This integral returns the total specified currents in the given block.
• Block Volume For axisymmetric problems, this selection returns the volume swept out by
the selected block.
• Force via Weighted Stress Tensor New in version 3.3, the Weighted Stress Tensor
block integrals automatically compute a weighting function over the finite element mesh that
allows all possible air elements to contribute to the stress tensor integration. This approach
is essentially identical to the weighted stress tensor approach described in [5] and/or [6].
To compute the force on a region or set of regions, the user selects the blocks upon which
force result is desired and selects the Force via Weighted Stress Tensor integral. The
program then computes the weighting function by solving an additional Laplace equation
over the air surrounding the blocks upon which the force is to be computed. It may take a
few seconds to compute the weighting function–progress is be indicated by a progress bar
that is displayed while the weighting function is being computed. The stress tensor is then
evaluated as a volume integration, and the results are displayed. The results are typically
more accurate than the Maxwell Stress Tensor line integral, since in some sense, all possible
contours have been averaged to yield the Weighted Stress Tensor force result.
If the user is interested in the contours along which the integral was performed, the ”stress
tensor mask” box can be checked in the contour plot dialog. A set of orange (by default)
lines will be displayed that.
• Torque via Weighted Stress Tensor This integral is torque version of the Force via
Weighted Stress Tensor integral. Instead of force, torque about (0,0) is computed using
the same weighting function approach.
38
5.11.2 Weighted Stress Tensor Volume Integral
New in version 3.3, this volume integral greatly simplifies the computation of forces and torques.
Merely select the blocks upon which force or torque are to be computed and evaluate the integral.
No particular “art” is required in getting good force or torque results (as opposed to the Stress
tensor line integral), although results tend to be more accurate with finer meshing around the region
upon which the force or torque is to be computed.
One limitation of the Weighted Stress Tensor integral is that the regions upon which the force is
being computed must be entirely surrounded by air and/or abutting a boundary. In cases in which
the desired region abuts a non-air region, force results may be deduced from differentiation of
coenergy–see (29).
39
Figure 25: Properly defined contour for integration of Maxwell’s Stress Tensor
Never integrate stress stress tensor along an interface between materials. Always de-
fine the integration contour as a closed path around the object of interest with the
contour displaced several elements (at least two elements) away from any interfaces
or boundaries.
As an example of a properly defined contour, consider Figure 25. This figure represents a
horseshoe magnet acting on a block of iron. The objective is to obtain the magnetic forces acting
upon the iron block. The red line in the figure represents the contour defined for the integration.
The contour was defined running clockwise around the block, so that the normal to the contour
points outward. Always define your contour in a clockwise direction to get the correct sign. Note
that the contour is well removed from the surface of the block, and the contour only passes through
air. To aid in the definition of a closed contour, grid and the “snap to grid” were turned on, and the
corners of the contour are grid points that were specified by right mouse button clicks.
The second rule of getting good force results is:
Always use as fine a mesh as possible in problems where force results are desired.
Even though an integration path has been chosen properly (away from boundaries and interfaces),
some significant error can still arise if a coarse mesh is used. Note that (31) is composed of B2
terms – this means that stress tensor is one order worse in accuracy than B. The only way to get
that accuracy back is to use a fine mesh density. A good way to proceed in finding a mesh that is
40
Figure 26: Example three-phase, six pole induction motor
“dense enough” is to solve the problem on progressively finer meshes, evaluating the force on each
mesh. By comparing the results from different mesh densities, you can get and idea of the level
of accuracy (by looking at what digits in the answer that change between various mesh densities).
You then pick the smallest mesh density that gives convergence to the desired digit of accuracy.
For torque computations, all the same rules apply as for force computations (i.e. define inte-
gration contours away from boundaries and interfaces, and use a dense mesh). Several beta testers
have been using FEMM to obtain torques produced by motors and generators. In these machines,
there are some steps that one can take in the definition of the model’s geometry to make torque
computation easier. Consider the motor pictured in Figure 26. This picture represents a three-phase
induction motor wound so as to have six poles. The rotor is a conductive sheet attached to a lami-
nated iron journal. To obtain the starting torque of the motor, one can impose three-phase currents
in the winding and run a harmonic analysis at 60 Hz. The torque is then obtained by integrating
the torque derived from Maxwell’s stress tensor along a line running through the center of the air
gap between the rotor and the stator.
A close-up of the input geometry near some of the tooth faces is shown in Figure 27. To aid in
the evaluation of the torque, additional arc segments have been defined that run through the center
of the air gap. This contour can be selected by clicking on the endpoints of the arcs with the left
mouse button. This is much easier than trying to define a contour by explicitly specifying a lot of
points in the air gap via right mouse button clicks. Note that the mesh density has been chosen such
that there are four rows of elements in the thickness of the air gap, so that the integration contour
(through the center of the air gap) is no closer than two rows of elements to either side of the gap.
The mesh shown in Figure 27 represents the coarsest possible mesh that obeys the guidelines for
obtaining good force/torque results, requiring about 62000 elements to mesh the entire motor. The
solution, along with the integration contour shown in red, is pictured in Figure 28.
41
Figure 27: Input geometry in the region of the air gap.
Figure 28: Solution with integration contour defined in the region of the air gap.
1. Choose Settings/Printers off of the Windows Start menu. A window containing the list
of currently defined printers will appear.
42
Figure 29: Circuit results dialog.
2. Double click on the Add Printer icon in this list. The Add Printer Wizard will appear
on the screen.
4. A list of printers will appear. Choose a postscript printer off of this list. The Apple Laser-
writer II NT is a good choice.
5. Select FILE: as the port which will be used with this printer.
Now, when you want a postscript picture of the currently displayed screen, just choose File/Print
off of femmview’s main menu. As the printer, choose the postscript printer that you have previously
defined. When you print to this printer, you will be prompted for a file name, and graphic will be
written as a postscript figure to the specified file name.
43
5.14 Miscellaneous Useful View Commands
There are some additional entries on the femmview View menu that might be useful to you from
time to time. These are:
• Smoothing By default, a smoothing algorithm is applied to the flux density solution. Be-
cause first-order triangles are used as trial functions for vector potential, the resulting flux
density and field intensity distributions are piece-wise constant in each element. The smooth-
ing algorithm uses a nearest neighbor interpolation to obtain linear B and H distributions over
each element. The smoothed solution generally looks better on the screen, and somewhat
increases the accuracy of B and H near the vertices of each element. However, if you want
to toggle smoothing, this can be done by selecting the Smoothing option.
• Show Points Especially when making graphics for reports, presentations, etc, it may be
desirable to hide the small boxes on the screen that denote input node points. The Show
Points option allows the user to toggle whether or not the input points are shown.
• ToolBar Use this toggle to hide and show the floating toolbar.
• Point Props Use this toggle to hide and show the floating dialog box used to display point
property information.
44
6 Lua Scripting Documentation
6.1 What Lua Scripting?
The Lua extension language has been used to add scripting/batch processing facilities. The pre-
processor and postprocessor can either run Lua scripts through a selection on the Files menu, or
Lua commands can be entered in directly to the Lua Console Window in either program.
Lua is a complete, open-source scripting language. Source code for Lua, in addition to de-
tailed documentation about programming in Lua, can be obtained from the Lua homepage at
http://www.lua.org. Because the scripting files are text, they can be edited with any text editor
(e.g. notepad).
In addition to the standard Lua command set, a number of FEMM-specific functions have been
added for manipulating files in both the pre- and post-processor. These commands are described
in the following sections.
Lua scripts are invoked by selecting the Open Lua Script selection off of the File menu of
either the pre- or post-processor. A file selection dialog then appears, and the selected Lua script
file is executed.
• addsegment(x1,y1,x2,y2) Add a new line segment from node closest to (x1,y1) to node
closest to (x2,y2)
45
zoom out zoomout
zoom in zoomin
add material addmaterial
open femm file openfemmfile
add point prop addpointprop
save femm file savefemmfile
add circ prop addcircprop
create mesh createmesh
add bound prop addboundprop
show mesh showmesh
modify material modifymaterial
purge mesh purgemesh
modify bound prop modifyboundprop
prob def probdef
modify point prop modifypointprop
analyse analyze
modify circ prop modifycircprop
run post runpost
delete material deletematerial
add node addnode
delete bound prop deleteboundprop
add block label addblocklabel
delete circuit deletecircuit
add segment addsegment
delete point prop deletepointprop
add arc addarc
move rotate moverotate
select node selectnode
move translate movetranslate
select label selectlabel
copy rotate copyrotate
select segment selectsegment
copy translate copytranslate
select arcsegment selectarcsegment
set edit mode seteditmode
clear selected clearselected
select group selectgroup
set node prop setnodeprop
new document newdocument
set block prop setblockprop
save bitmap savebitmap
set segment prop setsegmentprop
save metafile savemetafile
set arcsegment prop setarcsegmentprop
exit pre exitpre
delete selected deleteselected
add bh point addbhpoint
delete selected nodes deleteselectednodes
clear bh points clearbhpoints
delete selected labels deleteselectedlabels
refresh view refreshview
delete selected segments deleteselectedsegments
message box messagebox
delete selected arcsegments deleteselectedarcsegments
grid snap gridsnap
zoom natural zoomnatural
show grid showgrid
hide grid hidegrid
set grid setgrid
Table 3: Alternate preprocessor scripting function names
46
6.2.2 Geometry Selection Commands
• clearselected() Clear all selected nodes, blocks, segments and arc segments.
• selectgroup(n) Select the nth group of nodes, segments, arc segments and blocklabels.
This function will clear all previously selected elements and leave the editmode in 4 (group)
47
– Meshed with elements that span at most maxsegdeg degrees per element
– Boundary property "propname"
– hide: 0 = not hidden in post-processor, 1 == hidden in post processor
– A member of group number group
• analyse(flag) runs fkern to solve the problem. The flag parameter controls whether the
fkern window is visible or minimized. For a visible window, either specify no value for flag
or specify 0. For a minimized window, flag should be set to 1.
• runpost("filename") starts the post processor and instructs femmview to execute the lua
file "filename". The current solution will also be passed to femmview and loaded.
The file name must be in a C printf format, so for a backslash, use two backslashes (i.e. \\).
If the file name contains a space (e.g. file names like c:\program files\stuff) you must
enclose the file name in (extra) quotes by using a \" sequence. For example:
runpost("\"c:\\program files\\femm30\\bin\\testpost.lua\"")
Several additional parameters can be included in the runpost call. A limited number of
variables can be passed to the postprocessor by adding a extra parameters of the form
-lua-var=variable=value, e.g.:
run_post("c:\\my-lua-script.lua","-lua-var=filename=myfilename")
All variables are passed as strings so lua internal conversion routines must be employed to
obtain numbers from the strings.
The postprocessor window can also be minimized by including the parameter "-windowhide",
e.g.:
run_post("c:\\myluascrip.lua","-windowhide")
48
• openfemmfile("filename") opens the file with name "filename". Note that if you use a
path you must use two backslashes (e.g. "c:\\temp\\myfemmfile.fem"). If the file name
contains a space (e.g. file names like c:\program files\stuff) you must enclose the file
name in (extra) quotes by using a \" sequence. For example:
runpost("\"c:\\program files\\femm30\\bin\\testpost.lua\"")
• purgemesh() clears the mesh out of both the screen and memory.
• moverotate(bx,by,shiftangle (editaction))
• movetranslate(dx,dy,(editaction))
• scale(bx,by,scalefactor,(editaction))
49
– scalefactor – a multiplier that determines how much the selected objects are scaled
– editaction 0 –nodes, 1 – lines (segments), 2 –block labels, 3 – arc segments, 4- group
– "nodes" - nodes
– "segments" - line segments
– "arcsegments" - arc segments
– "blocks" - block labels
– "group" - selected group
This command will affect all subsequent uses of the other editing commands, if they are used
WITHOUT the editaction parameter.
• zoom(x1,y1,x2,y2) Set the display area to be from the bottom left corner specified by
(x1,y1) to the top right corner specified by (x2,y2).
• grid_snap("flag") Setting flag to ”on” turns on snap to grid, setting flag to "off" turns
off snap to grid.
• setgrid(density,"type") Change the grid spacing. The density parameter specifies the
space between grid points, and the type parameter is set to "cart" for cartesian coordinates
or "polar" for polar coordinates.
50
6.2.10 Object Properties
• mi addmaterial("materialname", mu x, mu y, H c, Jr, Ji, Cduct, Lam d, Phi hmax,
lam fill, LamType, Phi hx, Phi hy),NStrands,WireD adds a new material with called
"materialname" with the material properties:
Note that not all properties need be defined–properties that aren’t defined are assigned default
values.
• addbhpoint("blockname",b,h) Adds a B-H data point the the material specified by the
string "blockname". The point to be added has a flux density of b in units of Teslas and a
field intensity of h in units of Amps/Meter.
• clearbhpoints("blockname") Clears all B-H data points associatied with the material
specified by "blockname".
51
• addpointprop("pointpropname",a re,a im,j re,j im) adds a new point property of
name "pointpropname" with either a specified potential a im, a re in units Webers/Meter
or a point current j im, j re in units of Amps. Set the unused parameter pairs to 0.
• addboundprop("propname", A0, A1, A2, Phi, Mu, Sig, c0, c1, BdryFormat)
adds a new boundary property with name "propname"
– For a “Prescribed A” type boundary condition, set the A0, A1, A2 and Phi parameters
as required. Set all other parameters to zero.
– For a “Small Skin Depth” type boundary condtion, set the Mu to the desired relative
permeability and Sig to the desired conductivity in MS/m. Set BdryFormat to 1 and
all other parameters to zero.
– To obtain a “Mixed” type boundary condition, set C1 and C0 as required and BdryFormat
to 2. Set all other parameters to zero.
– For a “Strategic dual image” boundary, set BdryFormat to 3 and set all other parameters
to zero.
– For a “Periodic” boundary condition, set BdryFormat to 4 and set all other parameters
to zero.
– For an “Anti-Perodic” boundary condition, set BdryFormat to 5 set all other parameters
to zero.
52
propnum Symbol Description
0 BlockName Name of the material
1 µx x (or r) direction relative permeability
2 µy y (or z) direction relative permeability
3 Hc Coercivity, Amps/Meter
4 Jr Real part of current density, MA/m2
5 Ji Imaginary part of current density, MA/m2
6 σ Electrical conductivity, MS/m
7 dlam Lamination thickness, mm
8 θh Hysteresis lag angle, degrees
9 LamFill Iron fill fraction
10 LamType 0 = None/In plane, 1 = parallel to x, 2=parallel to y
• modifyboundprop("BdryName",propnum,value) This function allows for modification
of a boundary property. The BC to be modified is specified by "BdryName". The next
parameter is the number of the property to be set. The last number is the value to be applied
to the specified property. The various properties that can be modified are listed below:
propnum Symbol Description
0 BdryName Name of boundary property
1 A0 Prescribed A parameter
2 A1 Prescribed A parameter
3 A2 Prescribed A parameter
4 φ Prescribed A phase
5 µ Small skin depth relative permeability
6 σ Small skin depth conductivity, MS/m
7 c0 Mixed BC parameter
8 c1 Mixed BC parameter
9 BdryFormat Type of boundary condition:
0 = Prescribed A
1 = Small skin depth
2 = Mixed
3 = Strategic Dual Image
4 = Periodic
5 = Antiperiodic
• modifypointprop("PointName",propnum,value) This function allows for modification
of a point property. The point property to be modified is specified by "PointName". The next
parameter is the number of the property to be set. The last number is the value to be applied
to the specified property. The various properties that can be modified are listed below:
propnum Symbol Description
0 PointName Name of the point property
1 Are Real part of nodal potential, Weber/Meter
2 Aim Imaginary part of nodal potential Weber/Meter
3 Jre Real part of nodal current, Amps
4 Jim Imaginary part of nodal current, Amps
53
• mi_modifycircprop("CircName",propnum,value) This function allows for modifica-
tion of a circuit property. The circuit property to be modified is specified by "CircName".
The next parameter is the number of the property to be set. The last number is the value to
be applied to the specified property. The various properties that can be modified are listed
below:
6.2.11 Miscellaneous
• savebitmap("filename") saves a bitmapped screenshot of the current view to the file
specified by "filename", subject to the printf-type formatting explained previously for
the savefemmfile command.
• exitpre() exits the preprocessor after the lua script has finished executing.
• print() This is standard Lua “print” command directed to the output of the Lua console
window. Any number of comma-separated items can be printed at once via the print com-
mand.
• prompt("message") This function allows a Lua script to prompt a user for input. When
this command is used, a dialog box pops up with the "message" string on the title bar of the
dialog box. The user can enter in a single line of input via the dialog box. prompt returns
the user’s input as a string. If a numerical value is desired, the following syntax can be used:
tonumber(prompt("message"))
54
get point values getpointvalues hide density plot hidedensityplot
exit post exitpost show density plot showdensityplot
add contour addcontour hide contour plot hidecountourplot
bend contour bendcontour show contour plot showcountourplot
clear contour clearcontour show points showpoints
line integral lineintergral hide points hidepoints
select block selectblock grid snap gridsnap
group select block groupselectblock set grid setgrid
clear block clearblock get problem info getprobleminfo
block integral blockintergral save bitmap savebitmap
zoom natural zoomnatural get circuit properties getcircuitproperties
zoom in zoomin save metafile savemetafile
zoom out zoomout refresh view refreshview
show grid showgrid select point selectpoint
hide grid hidegrid show point props showpointprops
show mesh showmesh hide point props hidepointprops
hide mesh hidemesh message box messagebox
set edit mode seteditmode make plot makeplot
Table 4: Alternate postprocessor scripting function names
• mi attachouterspace() marks all selected block labels as members of the external region
used for modeling unbounded axisymmetric problems via the Kelvin Transformation.
• shownames(flag) This function allow the user to display or hide the block label names
on screen. To hide the block label names, flag should be 0. To display the names, the
parameter should be set to 1.
55
type name values 1 values 2 values 3 values 4
0 B.n total B.n avg B.n - -
1 H.t total H.t avg H.t - -
2 Contour length surface area - -
3 Stress Tensor Force DC r/x force DC y/z force 2× r/x force 2× y/z force
4 Stress Tensor Torque DC torque 2× torque - -
5 (B.n)ˆ2 total (B.n)ˆ2 avg (B.n)ˆ2 - -
Returns typically four floating point values as results. The first two values are the total real
and imaginary parts of the integral result, the second pair the average real and imaginary
parts, e.g.:
linere, lineim, advre, advim = lineintegral(0)
The only exception is integral 3, which evaluates Maxwell’s stress tensor. This integral can
return up to eight results. For force and torque results, the 2× results are only relevant for
problems where ω 6= 0.
Type Definition
0 A·J
1 A
2 Magnetic field energy
3 Hysteresis and/or lamination losses
4 Resistive losses
5 Block cross-section area
6 Total losses
7 Total current
8 Integral of Bx (or Br ) over block
9 Integral of By (or Bz ) over block
10 Block volume
11 x (or r) part of steady-state Lorentz force
12 y (or z) part of steady-state Lorentz force
13 x (or r) part of 2× Lorentz force
14 y (or z) part of 2× Lorentz force
15 Steady-state Lorentz torque
16 2× component of Lorentz torque
17 Magnetic field coenergy
18 x (or r) part of steady-state weighted stress tensor force
19 y (or z) part of steady-state weighted stress tensor force
20 x (or r) part of 2× weighted stress tensor force
21 y (or z) part of 2× weighted stress tensor force
22 Steady-state weighted stress tensor torque
23 2× component of weighted stress tensor torque
This function returns two parameters corresponding to real and imaginary components, e.g.:
re, im = blockintegral(10)
56
• getpointvalues(X,Y) Get the values associated with the point at x,y RETURN values in
order
Symbol Definition
Are real part of A or flux φ
Aim imaginary part of A or flux φ
B1re real part of Bx if planar, Br if axisymmetric
B1im imag part of Bx if planar, Br if axisymmetric
B2re real part of By if planar, Bz if axisymmetric
B2im imag part of By if planar, Bz if axisymmetric
Sig conductivity σ
E stored energy density
H1re real part of Hx if planar, Hr if axisymmetric
H1im imag part of Hx if planar, Hr if axisymmetric
H2re real part of Hy if planar, Hz if axisymmetric
H2im imag part of Hy if planar, Hz if axisymmetric
Jere real part of eddy current density
Jeim imag part of eddy current density
Jsre real part of source current density
Jsim imag part of source current density
Mu1re real part of µx if planar, µr if axisymmetric
Mu1im imag part of µx if planar, µr if axisymmetric
Mu2re real part of µy if planar, µz if axisymmetric
Mu2im imag part of µy if planar, µz if axisymmetric
Pe Power density dissipated through ohmic losses
Ph Power density dissipated by hysteresis
57
PlotType Definition
0 Potential
1 |B|
2 B·n
3 B·t
4 |H|
5 H ·n
6 H ·t
7 Jeddy
8 Jsource + Jeddy
FileFormat Definition
0 Multi-column text with legend
1 Multi-column text with no legend
2 Mathematica-style formatting
For example, if one wanted to plot B · n to the screen with 200 points evaluated to make the
graph, the command would be:
makeplot(2,200)
If this plot were to be written to disk as a metafile, the command would be:
makeplot(2,200,"c:\\temp\myfile.emf")
To write data instead of a plot to disk, the command would be of the form:
makeplot(2,200,"c:\\temp\myfile.txt",0)
58
6.3.2 Selection Commands
• seteditmode(mode) Sets the mode of the postprocessor to point, contour, or area mode.
Valid entries for mode are "point", "contour", and "area".
• groupselectblock(n) Selects all of the blocks that are labeled by block labels that are
members of group n. If no number is specified (i.e. groupselectblock() ), all blocks are
selected.
• addcontour(x,y) Adds a contour point at (x,y). If this is the first point then it starts a
contour, if there are existing points the contour runs from the previous point to this point.
The addcontour command has the same functionality as a right-button-click contour point
addition when the program is running in interactive mode.
• bendcontour(angle,anglestep) Replaces the straight line formed by the last two points
in the contour by an arc that spans angle degrees. The arc is actually composed of many
straight lines, each of which is constrained to span no more than anglestep degrees. The
angle parameter can take on values from -180 to 180 degrees. The anglestep parameter
must be greater than zero. If there are less than two points defined in the contour, this
command is ignored.
• selectpoint(x,y) Adds a contour point at the closest input point to (x,y). If the selected
point and a previous selected points lie at the ends of an arcsegment, a contour is added that
traces along the arcsegment. The selectpoint command has the same functionality as the
left-button-click contour point selection when the program is running in interactive mode.
• zoom(x1,y1,x2,y2) Zoom to the window defined by lower left corner (x1,y1) and upper
right corner (x2,y2).
59
• hidepoints() Hide the node points from the input geometry.
• smooth("flag") This function controls whether or not smoothing is applied to the B and
H fields, which are naturally piece-wise constant over each element. Setting flag equal to
"on" turns on smoothing, and setting flag to "off" turns off smoothing.
• showgrid() Show the grid points.
• hidegrid() Hide the grid points points.
• grid_snap("flag") Setting flag to ”on” turns on snap to grid, setting flag to "off" turns
off snap to grid.
• setgrid(density,"type") Change the grid spacing. The density parameter specifies the
space between grid points, and the type parameter is set to "cart" for cartesian coordinates
or "polar" for polar coordinates.
• hidedensityplot() hides the flux density plot.
• showdensityplot(legend,gscale,upper_B,lower_B,type) Shows the flux density plot
with options:
– legend Set to 0 to hide the plot legend or 1 to show the plot legend.
– gscale Set to 0 for a colour density plot or 1 for a grey scale density plot.
– upper_B Sets the upper display limit for the density plot.
– lower_B Sets the lower display limit for the density plot.
– type Type of density plot to display. Valid entries are "mag", "real", and "imag"
for magnitude, real component, and imaginary component of B, respectively. Alterna-
tively, current density can be displayed by specifying "jmag", "jreal", and "jimag"
for magnitude, real component, and imaginary component of J, respectively.
if legend is set to -1 all parameters are ignored and default values are used e.g.:
show_density_plot(-1)
• hidecontourplot() Hides the contour plot.
• showcontourplot(numcontours,lower_A,upper_A,type) shows the A contour plot with
options:
– numcontours Number of A equipotential lines to be plotted.
– upper_A Upper limit for A contours.
– lower_A Lower limit for A contours.
If numcontours is -1 all parameters are ignored and default values are used, e.g.:
show_contour_plot(-1)
• showpointprops() Displays the floating Point Properties display window.
• hidepointprops() Hides the floating Point Properties display window.
60
6.3.5 Miscellaneous
• savebitmap("filename") saves a bitmapped screen shot of the current view to the file
specified by "filename". Note that if you use a path you must use two backslashes (e.g.
"c:\\temp\\myfemmfile.fem"). If the file name contains a space (e.g. file names like
c:\program files\stuff) you must enclose the file name in (extra) quotes by using a \"
sequence. For example:
save_bitmap("\"c:\\temp\\femm30\\bin\\screenshot.bmp\"")
• print() This is standard Lua “print” command directed to the output of the Lua console
window. Any number of comma-separated items can be printed at once via the print com-
mand.
• prompt("message") This function allows a Lua script to prompt a user for input. When
this command is used, a dialog box pops up with the "message" string on the title bar of the
dialog box. The user can enter in a single line of input via the dialog box. prompt returns
the user’s input as a string. If a numerical value is desired, the value can be converted to a
number using the Lua tonumber command, e.g.: tonumber(prompt("message"))
• shownames(flag) This function allow the user to display or hide the block label names
on screen. To hide the block label names, flag should be 0. To display the names, the
parameter should be set to 1.
61
7 Numerical Methods
For those of you interested in what’s going on behind the scenes in the fkern solver, this section is
meant as a brief description of the methods and techniques used by FEMM. References are cited
as applicable.
62
by Freund allow one to operate directly on the complex symmetric matrix and take advantage
of the symmetric structure to minimize the number of computations that must be performed per
iteration. Although Freund supports Quasi-Minimum Residual approach, FEMM uses the complex
symmetric version of biconjugate gradient also described in [11]. After coding and comparing the
the speed of both BCG and QMR, it was found that BCG is somewhat faster due to a relatively
smaller number of computations that must be performed per iteration (even though QMR has better
convergence properties than BCG).
However, using the algorithms as described by [11], solution times were unacceptably long.
To decrease solution times, the complex symmetric BCG algorithm was modified to include the
SSOR preconditioner (built in exactly the same way as for magnetostatic problems). Including the
SSOR preconditioner in complex symmetric BCG problems usually yields an order of magnitude
improvement in speed over no preconditioner.
In all problems, a node renumbering scheme is used. Although the conjugate gradient schemes
work well without renumbering, the renumbering seems to roughly halve the solution time. There
is an overall advantage to using the renumbering, because the of time required to perform the
renumbering is small compared to the time required to run CG or BCG. Although there are many
possible approaches to renumbering, FEMM uses the Cuthill-McKee method as described in [2].
Although there are newer schemes that yield a tighter profile, Cuthill-McKee does a relatively good
job and requires very little to execute. The renumbering code is a hold-over from an early version
of FEMM that employed a banded Gauss Elimination solver in which a good node numbering is
essential to good performance. The renumbering speeds up CG and BCG by reducing the error
between the SSOR approximation of A−1 and the exact A−1 . An interesting paper on the effect of
the ordering of the unknowns on convergence in conjugate gradient methods is [12].
63
actually be less accurate than the piece-wise constant solution in the neighborhood of boundaries
and interfaces.
One can note that the patch recovery method is merely a weighted average of the flux densi-
ties in all of the elements surrounding a given node. Instead of a least-squares fit, FEMM simply
weights the values of flux density in each adjacent element’s Gauss point with a value inversely
proportional to the distance from the Gauss point to the node point of interest. Away from bound-
aries, the results seem to be nearly as good as a least-squares fit. At boundaries and interfaces, the
smoothed solution is no worse than the unsmoothed solution.
64
References
[1] M. Plonus, Applied electromagnetics. McGraw-Hill, 1978.
[2] S. R. Hoole, Computer-aided analysis and design of electromagnetic devices, Elsevier, 1989.
[4] R. L. Stoll, The analysis of eddy currents, Oxford University Press, 1974.
[5] S. McFee, J. P. Webb, and D. A. Lowther, “A tunable volume integration formulation for
force calculation in finite-element based computational magnetostatics,” IEEE Transactions
on Magnetics, 24(1):439-442, January 1988.
[6] F. Henrotte, G. Deliege, and K. Hameyer, “The eggshell method for the computation of elec-
tromagnetic forces on rigid bodies in 2D and 3D,” CEFC 2002, Perugia, Italy, April 16-18,
2002. (pdf version)
[8] P. P. Silvester, Finite elements for electrical engineers, Cambridge University Press, 1990.
[9] F. Henrotte et al, “A new method for axisymmetric linear and nonlinear problems,” IEEE
Transactions on Magnetics, MAG-29(2):1352-1355, March 1993.
[11] R. W. Freund, “Conjugate gradient-type methods for linear systems with complex symmetric
coefficient matrices,” SIAM Journal of Scientific and Statistical Computing, 13(1):425-448,
January 1992.
[12] E. F. D’Azevedo, P. A. Forsyth, and W. Tang, “Ordering methods for preconditioned conju-
gate gradient methods applied to unstructured grid problems,” SIAM J. Matrix Anal. Appl.,
12(4), July 1992.
[13] O. C. Zienkiewicz and J. Z. Zhu, “ The superconvergent patch recovery and a posteriori
estimates, part 1: the recovery technique,” International Journal for Numerical Methods in
Engineering, 33:1331-1364, 1992.
[14] Q. Chen and A. Konrad, “A review of finite element open boundary techniques for static and
quasistatic electromagnetic field problems,” IEEE Transactions on Magnetics, 33(1):663-
676, January 1997.
[15] E. M. Freeman and D. A. Lowther, “A novel mapping technique for open boundary finite
element solutions to Poissons equation,” IEEE Transactions on Magnetics, 24(6):2934-2936,
November 1988.
[16] D. A. Lowther, E. M. Freeman, and B. Forghani, “A sparse matrix open boundary method for
finite element analysis,” IEEE Transactions on Magnetics, 25(4)2810-2812, July 1989.
65
[17] E. M. Freeman and D. A. Lowther, “An open boundary technique for axisymmetric and
three dimensional magnetic and electric field problems,” IEEE Transactions on Magnetics,
25(5):4135-4137, September 1989.
[18] A. G. Jack and B. C. Mecrow, ”Methods for magnetically nonlinear problems involving
significant hysteresis and eddy currents,” IEEE Transactions on Magnetics, 26(2):424-429,
March 1990.
66
Figure 30: Sample demagnetization curve for Alnico 5
A Appendix
A.1 Modeling Permanent Magnets
FEMM accommodates permanent magnets, but there are some special rules associated with prop-
erly modeling them. This appendix will explain how to distill enough information from a manu-
facturer’s literature to properly define the material in FEMM.
The manufacturer provides information about their material in the form of a demagnetization
curve. A sample curve for Alnico 5 is pictured in Figure 30. The task is to get the appropriate
information out of the curve put in a FEMM Block Property model.
Magnets can be modeled from several different, but equally valid, points of view. From the
perspective finite element analysis, the most useful model is to think of the magnet as a volume
of ferromagnetic material surrounded by a thin sheet of current, as shown in Figure 31. From this
point of view, the demagnetization curve is what occurs when different amounts of magnetomotive
force are applied to a long magnet, acting in the direction opposing the field of the magnet. When
enough MMF is applied so that the field is exactly cancelled out, the applied MMF must be exactly
the same as the MMF that is driving the magnet. The B-H profile that is traversed on the way to
the B = 0 point is just the B-H curve of the material inside the magnet.
Using these insights, the permanent magnet can be modeled. The coercivity (denoted Hc ) of
the magnet is the absolute value of the MMF that it takes to bring the the field in the magnet to
zero. This value (in units of Amps/Meter) is entered in the H_c box in the Block Property dialog
(see Figure 10). If the magnet material is nonlinear, the appropriate values to enter in the B-H data
dialog can be obtained by shifting the curve to the right by exactly Hc , so that the B = 0 point lines
up with the origin. For example, the shifted demagnetization curve corresponding to Alnico 5 is
67
Figure 31: Magnet as an equivalent current sheet.
pictured in Figure 32. If the demagnetization curve is straight enough to be considered linear, one
can obtain the appropriate permeability by taking the slope of the demagnetization curve.
Strong rare-earth materials at room temperature have a very linear demagnetization curve. Usu-
ally, a linear model is sufficient for these materials. In addition, these materials have a relative per-
meability very close to 1. The modeling of these materials can be simplified (while only incurring
small errors) by assuming that the permeability is exactly 1. Then, if you know the energy product
of the magnet material in units of MGOe (the unit in which the energy product is almost always
68
Figure 33: Recoil in partially demagnetized Alnico 5.
69
Figure 34: Equivalent circuit for flux in the “easy” direction
bulk properties that yield essentially the same results, while requiring a much less elaborate finite
element mesh. FEMM has implemented this bulk approach to laminations.
Consider that the flux can flow through the lamination in a combination of two ways: via the
“easy” direction down the laminations, or the “hard” way, across the thickness of the laminations.
The hard direction is difficult for flux for two reasons. First, the rolling process makes the iron
somewhat less permeable than in the easy direction. Second, and most importantly, the flux must
traverse the insulation between laminations, which typically has a unit permeability.
The first assumption in deriving the bulk permeability model is that the permeability in the
iron itself is isotropic. This isn’t quite true, but almost all of the reluctance in the hard direction
results from crossing the gap between laminations. Having a significant error in the hard direction
permeability in the iron itself only results in a trivial change in the bulk reluctance in the cross-
lamination direction.
Armed with this assumption, a circuit model can be produced for each direction of flux travel.
For the easy direction, the circuit model is pictured in Figure 34. There are two reluctances in
parallel–one for flux that flows through the iron part of the laminations:
L
Rez, f e = (33)
µr µo cW
70
and another reluctance for flux that flows through the air between laminations:
L
Rez,air = (34)
µo (1 − c)W
where L and W are the length and width of the path traversed, and c is the fraction of the path filled
with iron. Adding these two reluctances in parallel yields:
L
Rez = W (35)
((1 − c) + cµr )µo
Since L and W are arbitrarily chosen, the bulk permeability of the section is:
For the solution of nonlinear problems, the derivation of the changes to Newton’s method to acco-
modate the bulk lamination model are greatly simplified if it is assumed that (1 − c) << cµr . In
this case, µez can be approximated as:
µez ≈ cµr µo (37)
This approximation leads to only trivial errors until the fill factor approaches zero. For example, if
µr = 1000 with a 90% fill, the difference between (36) and (37) is only about 0.01%.
For the hard direction, a different equivalent circuit, pictured in Figure 35 can be drawn. In
this case, the circuit is two reluctances in series, as the flux has to cross the insulation and the
lamination in succession. These reluctances are:
cL
Rhard, f e = (38)
µr µoW
(1 − c)L
Rhard,air = (39)
µoW
Adding these two reluctances together in series yields:
c + (1 − c)µr L
Rhard = (40)
µr µo W
Since L and W are arbitrary, the bulk permeability in the hard direction is:
µr µo
µhard = (41)
c + (1 − c)µr
If the material is laminated “in-plane,” all flux is flowing in the easy direction, and (37) is used
as the permeability for each element. In problems that are laminated parallel to x or y, (37) and (41)
are used as permeabilities in the standard fashion for elements with an anisotropic permeability.
For harmonic problems, eddy currents flow in the laminations, and hysteresis causes additional
loss. If the laminations are thin compared to the other dimensions of the geometry, the effects
of eddy currents and hysteresis can be encapsulated in a frequency-dependent permeability [4].
71
Figure 35: Equivalent circuit for flux in the “hard” direction.
In (42), φh represents a constant phase lag between B and H due to hysteresis, σ is the conduc-
tivity of the lamination material, d is the thickness of the iron part of the lamination, and ω is the
frequency of excitation in rad/s. Note that the concept of hysteresis-induced lag can be applied to
non-laminated materials as well, simply by multiplying the magnetostatic permeability by e− jφh
for harmonic problems.
72
A.3.1 Truncation of Outer Boundaries
The simplest, but least accurate, way to proceed is to pick an arbitrary boundary “far enough”
away from the area of interest and declare either A = 0 or ∂A/∂n = 0 on this boundary. According
to [14], a rule of thumb is that the distance from the center of the problem to the outer boundary
should be at least five times the distance from the center to the outside of the objects of interest.
Truncation is the method employed by most magnetics finite element programs, because it requires
no additional effort to implement.
The down side to truncation is that get an accurate solution in the region of interest, a volume
of air much larger than the region of interest must also be modeled. Usually, this large region
exterior to the area of interest can be modeled with a relatively coarse mesh to keep solution times
to a minimum. However, some extra time and space is still required to solve for a region in which
one has little interest.
where the am and αm parameters are chosen so that the solution matches the prescribed potential
on the surface of the circle.
One could think of this solution as describing the solution exterior to a finite element problem
with a circular outer boundary. The solution is described inside the circle via a finite element
solution. The trick is to knit together the analytical solution outside the circle to the finite element
solution inside the circle.
From inspecting (43), one can see that the higher-numbered harmonic, the faster the magni-
tude of the harmonic decays with respect to increasing r. After only a short distance, the higher-
numbered harmonics decay to the extent that almost all of the open-space solution is described by
only the leading harmonic. If n is the number of the leading harmonic, the open-field solution for
large, but not infinite, r is closely described by:
an
A(r, θ) ≈ n cos(nθ + αn) (44)
r
Differentiating with respect to r yields:
∂A nan
= − n+1 cos(nθ + αn ) (45)
∂r r
73
If (45) is solved for an and substituted into (44), the result is:
∂A n
+ A=0 (46)
∂r r
Now, (46) is a very useful result. This is the same form as the “mixed” boundary condition
supported by FEMM. If the outer edge of the solution domain is circular, and the outer finite ele-
ment boundary is somewhat removed from the area of primary interest, the open domain solution
can be closely approximated by applying (46) the circular boundary.
To apply the Asymptotic Boundary Condition, define a new, mixed-type boundary condition.
Then, pick the parameters so that:
n
c0 = (47)
µo r o
c1 = 0 (48)
where ro is the outer radius of the region in meters (regardless of the working length units), and
µo = 4π(10−7).
Although the above derivation was specifically for 2-D problems, it turns out that when the
same derivation is done for the axisymmetric case, the definition of the mixed boundary condition
coefficients are exactly the same as (47).
Some care must be used in applying this boundary condition. Most of the time, it is sufficient
to take n = 1 (i.e the objects in the solution region look like a dipole when viewed from a large
distance). However, there are other cases (e.g. a 4-pole halbach permanent magnet array) in which
the leading harmonic is something other than n = 1. You need to use your insight into your specific
problem to pick the appropriate n for the leading harmonic. You also must put the objects of interest
roughly in the center of the circular finite element domain to minimize the magnitude higher-order
field components at the outer boundary.
Although the application of this boundary condition requires some thought on the part of the
user, the results can be quite good. Figure 36, corresponding to the axi1 example, represents
the field produced by an air-cored coil in free space. The asymptotic boundary condition has been
applied to the circular outer boundary. Inspecting the solution, flux lines appear to cross the circular
boundary as if the solution domain were truly unbounded.
A quick note on computational efficiency: applying the absorbing boundary condition im-
poses no additional computing cost on the problem. The ABC is computationally no more time-
consuming to apply than enforcing A = 0 at the outer boundary. Solution times for the PCG solver
are equivalent in either case. It can also readily be derived that the ABC works exactly the same
for harmonics problems. (To see this, just assume that the am in (43) can be complex valued, and
follow the same derivation).
74
Figure 36: Air-cored coil with “open” boundary condition
• the effects of the exterior region are, in theory, exactly modeled by this approach;
• a sparse matrix representation of the problem is retained (unlike FEM-BEM methods, which
give the same “exact solution” but densely couples together the boundary nodes).
• requires no “special” features in the finite element solver to implement the technique, other
than the ability to apply periodic boundary conditions.
The purposes of this note are to explain what the Kelvin transformation is derived and to show how
it is implemented in the context of the FEMM finite element program.
Derivation
In the “far field” region, the material is typically homogeneous (e.g. air and free of sources. In this
case, the differential equation that describes vector potential A is the Laplace equation:
∇2 A = 0 (49)
1 ∂ ∂A 1 ∂2 A
r + 2 2 =0 (50)
r ∂r ∂r r ∂θ
75
Assume that the “near field” region of the problem can be contained in a circle of radius ro centered
at the origin. The far-field region is then everything outside the circle.
One approach to unbounded problems is to attempt to map the unbounded region onto a
bounded region, wherein problems can more easilby be solved. Specifically, we desire a way
to transform the unbounded region outside the circle into a bounded region. One simple way to
make such a mapping is to define another variable, R, that is related to r by:
ro2
R= (51)
r
By inspecting (51), it can be seen that this relationship maps the exterior region onto a circle of
radius ro .
The next step is to transform (49), the differential equation that the field must satisfy, into the
mapped space. That is, (49) must be written in terms of R and θ rather than r and θ. We can
evaluate derivatives in terms of R instead of r by employing the chain rule:
∂ ∂ ∂
2
dR R
= =− (52)
∂r ∂R dr ∂R ro
1 ∂ ∂A 1 ∂2 A
R + 2 2 =0 (54)
R ∂R ∂R R ∂θ
Eq. (54), the transformed equation for the outer region, has exactly the same form as inner
region, only in terms of R rather than r. The implication is that for the 2-D planar problem, the
exterior can be modeled simply by creating a problem domain consisting of two circular regions:
on circular region containing the items of interest, and an additional circular region to represent
the “far field.” Then, periodic boundary conditions must be applied to corresponding edges of the
circle to enforce the continuity of A at the edges of the two regions. The is continuity of A at the
boundary between the exterior and interior regions. For a finite element formulation consisting
of first-order triangles, (53) is enforced automatically at the boundaries of the two regions. The
second circular region exactly models the infinite space solution, but does it on a bounded domain–
one could always back out the field for any point in space by applying the inverse of (51).
76
Figure 37: Example input geometry.
depth of 0.75”. The material for the core is linear with a relative permeability of 2500. The coil
carries a bulk current density of 2 MA/m2. The input geometry is picture in Figure 37.
In Figure 37, the core is placed within a circular region, and a second circular region is drawn
next to the region containing the core. Periodic boundary conditions are applied to the arcs that
define the boundaries as shown in Figure 37. The way that periodic boundary conditions are
implemented in FEMM, each periodic boundary condition defined for the problem is to be applied
to two and only two corresponding entities. In this case, each boundary circle is composed of two
arcs, so two periodic boundary conditions must be defined to link together each arc with in the
domain with the core to its corresponding arc in the domain representing the exterior region.
Also notice that a point has been drawn in the center of the exterior region. A point property
has been applied to this point that specifies that A = 0 at this reference point. The center of the
circle maps to infinity in the analogous open problem, so it makes sense to define, in effect, A = 0
at infinity. If no reference point is defined, it is fairly easy to see that the solution is only unique to
within a constant. The situation is analogous to a situation where Neumann boundary conditions
have been defined on all boundaries, resulting in a non-unique solution for A. Due to the type of
solver that FEMM employs, the problem can most likely be solved even if a reference point is not
defined. However, defining a reference point eliminates the possibility of numerical difficulties
due to uniqueness issues.
The resulting solution is shown in Figure 38. As is the intention, the flux lines appear to
cross out of the of the region containing the core as if unaffected by the presence of the boundary.
The flux lines reappear in the domain representing the exterior region, completing their flux paths
through the exterior region.
77
Figure 38: Solved problem.
78
the Steinmetz |B|1.6 form for the loss as B goes to zero.)
For nonlinear in-plane laminations, an additional step is taken to obtain an effective BH curve
that also includes eddy current effects. At each H level on the user-defined BH curve, a 1D non-
linear time harmonic finite element problem is solved to obtain the total flux that flows in the
lamination as a function of the H applied at the edge of the lamination. Then dividing by the lam-
ination thickness and accounting for fill factor, and effective B that takes into account saturation,
hysteresis, and eddy currents in the lamination is obtained for each H.
In each case, a string is passed to the method, and a string is returned as a result. The incoming
string is sent to the Lua interpreter. Any results from the Lua command are returned as a string.
The difference between the two methods is that call2femm returns a string with each returned item
separated by a newline character, whereas mlab2femm returns the result formatted as a Matlab
array, with the total package enclosed by square brackets and the individual items separated by
spaces. FEMM assumes that it is the client’s responsibility to free the memory allocated for both
the input and output strings.
79