Miscellaneous¶
Units¶
The following table contains a list of quantities used in magnum.fe and their units. Note that all quantities are given in SI units.
This convention also applies to the mesh dimension which in general is expected to be given in meters. However, for numerical reasons it is preferable to create a mesh with lateral dimensions with the order of magnitude 1 and add a proper scale
parameter in the State
class. Usually nanometers are a good choice which corresponds to state.scale = 1e-9
.
Quantity | Description | Unit |
---|---|---|
A (SAFLayer ) |
coupling constant | \(\text{J/m}^2\) |
A (AFCoupling ) |
coupling constant | \(\text{J/m}^2\) |
Aex (Material ) |
exchange constant | \(\text{J/m}\) |
alpha (Material ) |
damping constant | \(1\) |
b (Material ) |
coupling constant (Zhang and Li model) | \(\text{m}^3/\text{As}\) |
beta (Material ) |
polarization parameter | \(1\) |
beta_prime (Material ) |
polarization parameter | \(1\) |
c (Material ) |
spin diffusion coupling constant (deprecated) | \(\text{N/A}^2\) |
C0 (Material ) |
connected to conductivity by \(C_0=\sigma/2\) | \(\text{A/Vm}\) |
D0 (Material ) |
diffusion constant | \(\text{m}^2\text{/s}\) |
D_inter (Material ) |
interface DMI coupling constant | \(\text{J/m}^2\) |
E() (LLGTerm ) |
energy | \(\text{J}\) |
h() (LLGTerm ) |
field | \(\text{A/m}\) |
j (State ) |
electric current | \(\text{A/m}^2\) |
J (Material ) |
coupling strength | \(\text{J}\) |
K_uni (Material ) |
anisotropy constant | \(\text{J/m}^3\) |
lambda_sf (Material ) |
diffusion length (deprecated) | \(\text{m}\) |
lambda_j (Material ) |
diffusion length (deprecated) | \(\text{m}\) |
m (State ) |
magnetization | \(1\) |
ms (Material ) |
saturation magnetization | \(\text{A/m}\) |
s (State ) |
spin accumulation | \(\text{A/m}\) |
sigma (Material ) |
electric conductivity | \(\text{A/Vm}\) |
t (State ) |
time | \(\text{s}\) |
T (State ) |
temperature | \(\text{K}\) |
theta (Material ) |
spin Hall angle | \(1\) |
tau_sf (Material ) |
spin-flip relaxation time | \(\text{s}\) |
xi (Material ) |
degree of nonadiabacity (Zhang and Li model) | \(1\) |
Constants
¶
magnum.fe defines some important constants in the Constants
class. They can be used to conveniently convert units. For instance the field strength of 2 Tesla can be converted to A/m by using 2.0 / Constants.mu0
in the simulation script.
read_vtk()
¶
-
magnumfe.
read_vtk
(filename, fileformat=None)¶ Reads mesh and field information from VTU, VTK or INP files. Works for scalar and vector fields.
# read mesh and magnetization from VTU file and create state from it m0 = read_vtk("m0.vtu") state = State(m0.function_space().mesh()) state.m = m0
- Arguments
- filename (
str
) - The filename
- fileformat (
str
) - The fileformat can be ‘vtu’(default), ‘vtk’, or ‘inp’. If no format is specified the function tries to extract the format from the given filename.
- filename (
- Returns
- dolfin.Function
- The function object
TimeInterpolator
¶
-
class
magnumfe.
TimeInterpolator
(points)¶ Simple interpolation helper for the creation of e.g. hysteresis loops.
- Example
# create a current hysteresis loop (-5e12 to 5e12 A/m^2 in z-direction) # starting from 0 and taking 4 ns for a complete sweak from min to max. interpolator = TimeInterpolator({ 0e-9: (0, 0, 0), 2e-9: (0, 0, 5e12), 6e-9: (0, 0, -5e12), 10e-9: (0, 0, 5e12) }) state.j = lambda state: Constant(interpolator(state.t))
Timer
¶
-
class
magnumfe.
Timer
(name)¶ Utility class that supports basic timing/profiling features. Each timer is initialized with a unique name. Each call to the body is timed and counted. Results can be printed with by calling
print_report()
.- Example
Timer.enable() x = 0.0 for i in range(10): with Timer("Outer Function"): for j in range(10): with Timer("Inner Function"): x += 1.0 Timer.print_report()
results in:
================================================================== TIMER REPORT ================================================================== Operation No of calls Avg time [ms] Total time [s] ---------------- ------------- --------------- ---------------- Outer Function 10 0.0245333 0.000245333 Inner Function 100 0.000665188 6.65188e-05 ---------------- ------------- --------------- ---------------- Total 0.00105381 ==================================================================
-
static
configure
(**kwargs)¶ Configure the timer.
- Arguments
- active
bool
- Flag the activates/deactived all timers.
- skip
int
- Skip the timing of the first x calls to every timer. The calls are still counted, but not considered in the average execution time.
- log_mem
bool
- Log accumulated memory consumption of timed calls
- active
-
static
disable
()¶ Disable all timers.
-
static
enable
(**kwargs)¶ Enable all timers. Takes all options that are accepted by
configure
.
-
static
print_report
()¶ Print the timing report.
-
static
reset
()¶ Reset all timers.
Cache
¶
-
class
magnumfe.
Cache
(*keys, **kwargs)¶ Simple cache class that is aware of changes in the state class.
- Arguments
- *keys ([
str
]) - Names of state attributes to be monitored.
- **kwargs
- Any attributes to be attached to the cache object.
- *keys ([
- Example
# Initialize cache object that tracks changes in the m and t # attribute of the state class. cache = Cache("t", "m") # Check for cache hit. In case of cache miss the following # block is expected to update the cache. The hash keys of the # current state are saved. if cache.requires_update(state): cache.some_var = expensive_operation(state.t, state.m) if cache.requires_update(state): # Won't execute since cache is up to date
-
flush
()¶ Flushes the cache by resetting the uuid
-
requires_update
(state)¶ Checks if cache is expired with resepect to the current state and saves the new state. Has to be followed by a block that updates the cache.
- Arguments
- state (
State
) - The current simulation state (or an arbitrary object providing
- a uuid() function or a uuid variable)
- state (
- Returns
True
if cache is expired,False
otherwise
-
wrap_func
(func)¶ Builds a lambda from a given function that returns the function call along with the caching keys as required by the state class.
- Arguments
- func
- Function to be wrapped
- Returns
- Wrapped function
Screen logging¶
magnum.fe uses the Python logging
interface to print status information to the screen. The verbosity of the screen logging can be configured for magnum.fe and third party libraries individualy. Availabe log levels are
CRITICAL = 50 # errors that may lead to data corruption and suchlike
ERROR = 40 # things that go boom
WARNING = 30 # things that may go boom later
INFO = 20 # information of general interest
-
magnumfe.
set_log_level
(level)¶ Set the log level of magnum.fe specific logging messages. Defaults to
INFO = 20
.- Arguments
- level (
int
) - The log level
- level (
-
magnumfe.
set_fenics_log_level
(level)¶ Set the log level of all third party modules (dolfin, bempp, ffc, ...). Defaults to
WARNING = 30
.- Arguments
- level (
int
) - The log level
- level (