Deriving evolver and driver classes#
In micromagneticmodel
package, base classes micromagneticmodel.Driver
and micromagneticmodel.Evolver
are defined. Their purpose is to build individual evolvers and drivers in a particular micromagnetic calculator. In this tutorial, we will demonstrate some of their basic properties, on an example of a micromagneticmodel.Driver
class. The behaviour of the micromagneticmodel.Evolver
class is the same.
Let us derive MyDriver
class. In order to define it, _allowed_attributes
list must be defined. It is a list of strings, which lists the kwargs which are allowed to be passed. Additionally, the driver must define a property _x
for the independent variable (e.g. time).
[1]:
import micromagneticmodel as mm
class MyDriver(mm.Driver):
_allowed_attributes = ["arg1", "arg2"]
@property
def _x(self):
return "t"
def drive(system):
return system
Driver
class does not require any parameters to be passed at initialisation. If a keyword argument is from _allowed_kwargs
list, it will be assigned as a class attribute. Otherwise, AttributeError
will be raised.
[2]:
driver = MyDriver(arg1=1, arg2="value")
The attributes are
[3]:
driver.arg1
[3]:
1
[4]:
driver.arg2
[4]:
'value'
If we try to pass a keyword argument at initialisation, which is not in the _allowed_kwargs
list, AttributeError
is rased:
[5]:
try:
driver = MyDriver(arg3=1)
except AttributeError:
print("Exception raised.")
Exception raised.
The main driver method which must be implemented by a derived class is drive
.
[6]:
try:
driver.drive()
except NotImplementedError:
print("Exception raised.")
To build a driver for an existing external package class micromagneticmodel.ExternalDriver
should be used. This class provides an additional method schedule
to submit a calculation job to a scheduling system.
Furthermore, it has a generic implementation for drive
and schedule
that consists of the following steps: - Create a directory to save the input and output in. - Write the input files for the existing simulation package. - Call the existing simulation package to run the simulation. / Schedule a job to run the simulation. - Update the system
object with the simulation results (drive
only).
Simulation-package specific things such as writing input files and reading results must be implemented in a number of pre-defined abstract methods inside the derived class. Refer to the API reference for more details.