Solver Class¶
- class plask.Solver(name='')¶
Base class for all solvers.
- Parameters:
name – Solver name for its identification in logs.
You should inherit this class if you are creating custom Python solvers in Python, which can read its configuration from the XPL file. Then you need to override the
load_xml()
method, which reads the configuration. If you overrideon_initialize()
ofon_invalidate()
methods, they will be called once on the solver initialization/invalidation.Example
class MySolver(Solver): def __init__(self, name=''): super().__init__(name) self.param = 0. self.geometry = None self.mesh = None self.workspace = None self.bc = plask.mesh.Rectangular2D.BoundaryConditions() def load_xpl(self, xpl, manager): for tag in xpl: if tag == 'config': self.param = tag.get('param', self.param) elif tag == 'geometry': self.geometry = tag.getitem(manager.geo, 'ref') elif tag == 'mesh': self.mesh = tag.getitem(manager.msh, 'ref') elif tag == 'boundary': self.bc.read_from_xpl(tag, manager) def on_initialize(self): self.workspace = zeros(1000.) def on_invalidate(self): self.workspace = None def run_computations(self): pass
To make your solver visible in GUI, you must write the
solvers.yml
file and put it in the same directory as your data file.Example
- solver: MySolver lib: mymodule category: local geometry: Cartesian2D mesh: Rectangular2D tags: - tag: config label: Solver Configuration help: Configuration of the effective model of p-n junction. attrs: - attr: param label: Parameter type: float unit: V help: Some voltage parameter. - bcond: boundary label: Something
Methods¶
Initialize solver. |
|
Set the solver back to uninitialized state. |
|
|
Load configuration from XPL reader. |
Attributes¶
Id of the solver object. |
|
True if the solver has been initialized. |
Descriptions¶
Method Details¶
- Solver.initialize()¶
Initialize solver.
This method manually initialized the solver and sets
initialized
to True. Normally calling it is not necessary, as each solver automatically initializes itself when needed.- Returns:
solver
initialized
state prior to this method call.- Return type:
bool
- Solver.invalidate()¶
Set the solver back to uninitialized state.
This method frees the memory allocated by the solver and sets
initialized
to False.
- Solver.load_xpl(xpl, manager)¶
Load configuration from XPL reader.
This method should be overridden in custom Python solvers.
Example
def load_xpl(self, xpl, manager): for tag in xpl: if tag == 'config': self.a = tag['a'] self.b = tag.get('b', 0) if 'c' in tag: self.c = tag['c'] if tag == 'combined': for subtag in tag: if subtag == 'withtext': self.data = subtag.attrs # Text must be read last self.text = subtag.text elif tag == 'geometry': self.geometry = tag.getitem(manager.geo, 'ref')
Attribute Details¶
- Solver.id = <property object>¶
Id of the solver object. (read only)
Example
>>> mysolver.id mysolver:category.type
- Solver.initialized = <property object>¶
True if the solver has been initialized. (read only)
Solvers usually get initialized at the beginning of the computations. You can clean the initialization state and free the memory by calling the
invalidate()
method.