Fleur input generator plugin — AiiDA-FLEUR 1.1.0 documentation

# Fleur input generator plugin

## Description

The input generator plugin is capable of running the Fleur input generator (inpgen). Similarly to inpgen code, `FleurinputgenCalculation` accepts a `StructureData` and a list of other parameters via calc_parameters (`Dict` type) containing all other parameters that inpgen accepts as an input. As a result, an `FleurinpData` node will be created which is a database representation of inp.xml and all other input files for FLEUR.

To set up an input dictionary, consider using `get_inputs_inpgen()` which assembles input nodes in a ready-to-use single dictionary.

## Inputs

The table below shows all the input nodes that can be passed into additional `FleurinputgenCalculation`:

name | type | description | required
--- | --- | --- | ---
code | Code | Inpgen code | yes
structure | StructureData | Structure data node | yes
parameters | Dict | FLAPW parameters | no
metadata.options | Dict | computational resources | yes
metadata.label | string | computational resources | yes
metadata.description | string | computational resources | yes

- code: `Code` - the Code node of an inpgen executable

- structure: `StructureData` - a crystal structure that will be written into simplified input file. The plugin will run inpgen always with relative coordinates (crystal coordinates) in the 3D case. In the 2D case in rel, rel, abs. Currently for films no crystal rotations are be performed, therefore the coordinates need to be given as Fleur needs them. (x, y in plane, z out of plane)

- calc_parameters: `Dict`, optional - Input parameters of inpgen as a nested dictionary. An example:

      # -*- coding: utf-8 -*-
      Cd = Dict(dict={
          'atom':{'element' : 'Cd', 'rmt' : 2.5, 'jri' : 981, 'lmax' : 12,
                  'lnonsph' : 6, 'lo' : '4d',
                  'econfig' : '[Ar] 4s2 3d10 4p6 | 4d10 5s2'},
          'comp': {'kmax': 4.7, 'gmaxxc' : 12.0, 'gmax' : 14.0},
          'kpt': {'div1' : 17, 'div2': 17, 'div3' : 17, 'tkb' : 0.0005}})

      # Magnetism and spin orbit coupling
      Cr = Dict(dict={
          'atom1':{'element' : 'Cr', 'id': '24.0', 'rmt' : 2.1, 'jri' : 981,
                   'lmax' : 12, 'lnonsph' : 6, 'lo' : '3s 3p', 'bmu':1.5},
          'atom2':{'element' : 'Cr', 'id': '24.1', 'rmt' : 2.1, 'jri' : 981,
                   'lmax' : 12, 'lnonsph' : 6, 'lo' : '3s 3p', 'bmu':1.4},
          'comp': {'kmax': 5.2, 'gmaxxc' : 12.5, 'gmax' : 15.0},
          'kpt': {'div1' : 24, 'div2': 24, 'div3' : 24, 'tkb' : 0.0005},
          'soc' : {'theta' : 0.0, 'phi' : 0.0}})

  The list of all possible keys:

      'input': ['film', 'cartesian', 'cal_symm', 'checkinp', 'symor', 'oldfleur']

      'atom': ['id', 'z', 'rmt', 'dx', 'jri', 'lmax', 'lnonsph', 'ncst', 'econfig',
               'bmu', 'lo', 'element', 'name']

      'comp': ['jspins', 'frcor', 'ctail', 'kcrel', 'gmax', 'gmaxxc', 'kmax']

      'exco': ['xctyp', 'relxc'],

      'film': ['dvac', 'dtild'],

      'soc': ['theta', 'phi'],

      'qss': ['x', 'y', 'z'],

      'kpt': ['nkpt', 'kpts', 'div1', 'div2', 'div3','tkb', 'tria'],

      'title': {}

  See the Fleur documentation for the meaning of each key.

  The atom namelist can occur several times in the parameter dictionary representing different atom species. However, python does not accept the same key twice and one must use atomN keys where N is an integer which will be ignored during the simplified input generation. Note that there is no need to set &input film because it is set automatically according to the given structure input node. That is also the reason why &lattice input parameter is ignored, we only support setting structure via structure input node.

- settings: class `Dict`, optional - An optional dictionary that allows the user to specify if additional files shall be received and other advanced non default stuff for inpgen.

To set up an input dictionary, consider using `get_inputs_inpgen()` which assembles input nodes in a ready-to-use single dictionary.

## Outputs

The table below shows all the output nodes generated by `FleurinputgenCalculation`:

name | type | comment
--- | --- | ---
fleurinpData | FleurinpData | represents inp.xml
remote_folder | FolderData | represents calculation folder
retrieved | FolderData | represents retrieved folder

All output nodes can be accessed via `calculation.outputs`.

- fleurinpData: `FleurinpData` - Data structure which represents the inp.xml file and provides useful methods. For more information see FleurinpData

- remote_folder: `RemoteData` - RemoteData which represents the calculation folder on the remote machine.

- retrieved: `FolderData` - FolderData which represents the retrieved folder on the remote machine.

## Errors

When a certain error appears, the calculation finishes with a non-zero exit code.

Exit code | Reason
--- | ---
251 | Input parameters for inpgen contain unknown keys
253 | Fleur lattice needs atom positions as input
254 | Excessive input parameters were specified
300 | No retrieved folder found
301 | One of the output files can not be opened
306 | XML input file was not found
307 | Some required files were not retrieved

## Additional advanced features

While the input link with name `calc_parameters` is used for the content of the namelists and parameters of the inpgen input file, additional parameters for changing the plugin behavior can be specified in the ‘settings’: class `Dict` input.

Below we summarise some of the options that you can specify and their effect. In each case, after having defined the content of `settings_dict`, you can use it as input of a calculation `calc` by doing:

    calc.use_settings(Dict(dict=settings_dict))

### Retrieving more files

The inpgen plugin retrieves per default the files : inp.xml, out, struct.xsf.

If you know that your inpgen calculation is producing additional files that you want to retrieve (and preserve in the AiiDA repository in the long term), you can add those files as a list as follows (here in the case of a file named `testfile.txt`):

    settings_dict = {
      'additional_retrieve_list': ['testfile.txt'],
    }

### Retrieving less files

If you know that you do not want to retrieve certain files (and preserve in the AiiDA repository in the long term) you can add those files as a list as follows (here in the case of a file named `testfile.txt`):

    settings_dict = {
      'remove_from_retrieve_list': ['testfile.txt'],
    }