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
systemobject with the simulation results (driveonly).
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.