please execute the cell below before starting the tutorial by selecting the cell and pressing Ctrl+Enter
%load_ext autoreload
%autoreload 2
from aiida import load_profile
load_profile()
from aiida.orm import Dict, load_node, load_code
from aiida.engine import submit
# First we will import a prepared dataset for this tutorial with some structures and simulations
# If this was already executed, it will add nothing to the database
!verdi archive import ~/4.AiiDA-FLEUR/files/fleur_tutorial_data.aiida
DISCLAIMER: In real life work, one will probably not execute inpgen or even fleur calculation like we show you below, but one rather runs directly higher workflows/workchains, which is part of the 6th Notebook. This is for demonstration purposes and to familiarize yourself with aiida and concepts of the plugin
A Fleur calculation is represented by a FleurCalculation
class in AiiDA.
Generally one needs only two inputs for a Fleur calculation: an inp.xml
file and initial charge density. As you already know, there is a FleurinpData
class representing an inp.xml
file. Therefore, there is a FleurinpData
object in the inputs.
No class represents charge density in AiiDA-Fleur and one can not pass it explicitly into a FleurCalculation
. However, it can be done specifying RemoteData
node that represents a calculation folder of a previous FLEUR calculation. If a RemoteData
input is given, the calculation automatically finds its charge density (and inp.xml
in some cases) and uses it as an input. This will be explained more in next sub-section.
name | type | description | required |
---|---|---|---|
code | Code | Fleur code | yes |
fleurinpdata | FleurinpData | Object representing inp.xml | no |
parent_folder | RemoteData | Remote folder of another calculation | no |
settings | Dict | special settings | no |
metadata.options | Dict | computational resources | yes |
code is a Code
object representing Fleur code stored in the database; it is the only required input (except metadata.options
). However, it is not enough to specify the code only: one must provide one of supported input configurations:
inp.xml
inp.xml
and charge density from the previous calculationinp.xml
from given FleurinpData
and charge density from the previous calculationIn this tutorial we are going to use code + fleurinpdata configuration only.
settings is used to modify a list of files to be copied to/from/between calculation folders and to append command options to the executable. We will not cover this in the tutorial.
First of all, we need to import FleurCalculation
class.
from aiida_fleur.calculation.fleur import FleurCalculation
or use the CalculationFactory
:
from aiida.plugins import CalculationFactory
FleurCalculation = CalculationFactory('fleur.fleur')
and prepare input nodes. Configured and ready-to-use Fleur code nodes are already stored in your database (verdi code list -A). Now you can load them per label, pk, or uuid:
fleur_code = load_code('fleur@localhost')
We are going to use a FleurinpData
that you created in tutorial 4. Please, remind a PK of a Fe monolayer structure and load in via the same command:
# you need to modify this - please remind the PK of previously created FleurinpData
fleurinpdata = load_node(PK_IRON_FLEURINPDATA)
We also need to define computational options. We use a parallel Fleur version and thus set 'withmpi' to True and submit two MPI processes:
options = {'resources' : {"num_machines": 1, "num_mpiprocs_per_machine" : 1},
'queue_name' : '',
'withmpi' : True,
'max_wallclock_seconds' : 600}
Similarly to FleurinpgenCalculation
, we will use get_builder()
method to assemble all the inputs:
inputs = FleurCalculation.get_builder()
inputs.code = fleur_code
inputs.fleurinp = fleurinpdata
inputs.metadata.options = options
Looks the same as for FluerinpgenCalculation
(and any other AiiDA calculation):
fleur_process = submit(inputs)
print('The PK of submitted job is {}'.format(fleur_process.pk))
After FLEUR code is submitted, you can check the status of all submitted processes for last 24 hours:
!verdi process list -a -p 1
You can also check the status of inpgen calculation directly. Try running next cell and examine the output:
# you need to modify this - insert the FleurCalculation PK:
!verdi process status FLEUR_CALC_PK
Wait till the process status becomes 'Finished'. Then, let us explore the output nodes. FleurCalculation
generates three output nodes:
name | type | comment |
---|---|---|
output_parameters | Dict | contains parsed out.xml |
remote_folder | FolderData | represents calculation folder |
retrieved | FolderData | represents retrieved folder |
To extract their PKs, run:
# you need to modify this - insert the FleurCalculation PK:
!verdi process show FLEUR_CALC_PK
The other way to access the output nodes is to find them in fleur_calc_node.outputs
:
# you need to modify this - insert the FleurCalculation PK:
fleur_calc_node = load_node(FLEUR_CALC_PK)
output_parameters = fleur_calc_node.outputs.output_parameters
print('PK of the output parameters is {}'.format(output_parameters.pk))
The output_parameters
dictionary contains parsed out.xml
file. To print its content, run:
output_parameters.get_dict()
or
#you need to modify it - replace OUTPUT_PARAM_PK
!verdi data core.dict show OUTPUT_PARAM_PK
Analysing output dictionary, can you tell what is the band gap and total energy of the ground state?
Create a script and run it in the terminal, passing to FleurCalculation
code + fleurinpdata + remote_folder. Use remote_folder and fleurinpdata of the calculation in this tutorial. Modify fleurinpdata: change the number of iterations to 30 and mixing parameter alpha to 0.02.
Answer the questions: