Static Workflows
Static workflows are pre-defined AiiDA WorkChains that are registered as entry points
and can be imported by the AiiDA daemon. They work with both run() and submit().
Evaluation WorkChains
Three static evaluators are shipped with the package:
Class |
Calculator |
Entry point |
|---|---|---|
|
|
|
|
|
|
|
|
|
All three inherit from StaticEvalLatticeProblem
and share the same inputs:
structure(StructureData): the source crystal structuretargets(List): list of lattice parameter perturbations to evaluatecalculator_parameters(Dict): inputs forwarded to the calculator workchainstructure_keyword(List, optional): path to the structure input in the builder (defaults to["structure"])
Optimization WorkChains
Twenty-one static optimizer workchains are available, combining 7 algorithms with 3 evaluator types:
(The same 7 algorithms are also available for FLEUR relax, e.g.
AdamFleurRelaxOptimizer.)
Submitting a Static Optimizer
from aiida.engine import submit
from aiida.orm import Dict, Int, StructureData
from aiida_reoptimize.workflows import BFGSFleurSCFOptimizer
result = submit(
BFGSFleurSCFOptimizer,
parameters=Dict({
"algorithm_settings": {...},
"calculator_parameters": {...},
}),
structure=my_structure,
itmax=Int(50),
)
Adding Custom Static Workflows
Create a custom evaluator and bind optimizers to it:
from aiida_reoptimize.base.Evaluation import StaticEvalLatticeProblem
from aiida_reoptimize.workflows.Optimization._common import (
AdamOptimizer,
StaticOptimizerBinding,
)
class MyLatticeProblem(StaticEvalLatticeProblem):
calculator_workchain = MyCalculatorWorkChain
class BaseMyOptimizer(StaticOptimizerBinding):
evaluator_workchain = MyLatticeProblem
extractor_path = ("output_parameters", "energy")
class AdamMyOptimizer(BaseMyOptimizer, AdamOptimizer):
pass
Then register the entry points in pyproject.toml:
[project.entry-points."aiida.workflows"]
"reoptimize.MyLatticeProblem" = "my_module:MyLatticeProblem"
"reoptimize.AdamMyOptimizer" = "my_module:AdamMyOptimizer"