Fleur core-hole workflow — AiiDA-FLEUR 1.1.1 documentation

# Fleur core-hole workflow

Class name, import from:

      from aiida_fleur.workflows.corehole import fleur_corehole_wc
      #or
      WorkflowFactory('fleur.corehole')

## Description/Purpose

The core-hole workflow can be deployed to calculate absolute core-level binding energies.

Such core-hole calculations are performed through a super-cell setup. The workflow allows for arbitrary corehole charges and of valence and charged type core-holes. From a computational cost perspective it may be cheaper to calculate all relative initial-state shifts of a structure and then launch one core-hole calculation on the structure to get an absolute reference energy instead of performing expensive core-hole calculations for all atom-types in the structure. The core-hole workflow implements the usual FLEUR workflow interface with a workflow control parameter node.

## Layout

## Input nodes

name | type | description | required
--- | --- | --- | ---
inpgen | `Code` | Inpgen code | yes
fleur | `Code` | Fleur code | yes
wf_parameters | `Dict` | Settings of the workchain | no
fleurinp | `FleurinpData` | FLEUR input | no
structure | `StructureData` | Crystal structure | no
calc_parameters | `Dict` | FLAPW parameters for given structure | no
options | `Dict` | AiiDA options (computational resources) | no

More details:

  - `fleur` (aiida.orm.Code): Fleur code using the `fleur.fleur` plugin

  - `inpgen` (aiida.orm.Code): Inpgen code using the `fleur.inpgen` plugin

  - `wf_parameters` (Dict, optional): Some settings of the workflow behavior

  - `structure` (StructureData, path 1): Crystal structure data node.

  - `calc_parameters` (Dict, optional): Longer description of the workflow

  - `fleurinp` (FleurinpData, path 2): Label of the workflow

### Workchain parameters and its defaults

#### `wf_parameters`

`wf_parameters`: `Dict` - Settings of the workflow behavior. All possible keys and their defaults are listed below:

    # -*- coding: utf-8 -*-
    'method' : 'valence',      # what method to use, default for valence to highest open shell
    'hole_charge' : 1.0,       # what is the charge of the corehole? 0<1.0
    'atoms' : ['all'],         # coreholes on what atoms, positions or index for list,
                               # or element ['Be', (0.0, 0.5, 0.334), 3]
    'corelevel': ['all'],      # coreholes on which corelevels [ 'Be1s', 'W4f', 'Oall'...]
    'supercell_size' : [2,1,1],# size of the supercell [nx,ny,nz]
    'para_group' : None,       # use parameter nodes from a parameter group
    'relax' : False,           # relax the unit cell first?
    'relax_mode': 'Fleur',     # what releaxation do you want
    'relax_para' : 'default',  # parameter dict for the relaxation
    'scf_para' : 'default',    # wf parameter dict for the scfs
    'same_para' : True,        # enforce the same atom parameter/cutoffs on the corehole calc and ref
    'serial' : True,           # run fleur in serial, or parallel?
    'magnetic' : True          # jspins=2, makes a difference for coreholes

#### `options`

`options`: `Dict` - AiiDA options (computational resources). Example:

    'resources': {"num_machines": 1, "num_mpiprocs_per_machine": 1},
    'max_wallclock_seconds': 6*60*60,
    'queue_name': '',
    'custom_scheduler_commands': '',
    'import_sys_environment': False,
    'environment_variables': {}

## Returns nodes

> - `output_corehole_wc_para` (Dict): Information of workchain results

More details:

> - `output_corehole_wc_para`: `Dict` - Main results of the workchain. Contains Binding energies, band gaps, core-levels, atom-type information, errors, warnings, other information. An example:

>       # -*- coding: utf-8 -*-
>       {"atomtypes": [[
>         {"atomic_number": 4, "coreconfig": "(1s1/2)", "element": "Be", "natoms": 1,
>          "species": "Be_corehole1", "stateOccupation": [
>             {"(1s1/2)": ["1.00000000", ".50000000"]},
>             {"(2p1/2)": [".50000000", ".00000000"]}], "valenceconfig": "(2s1/2) (2p1/2)"},
>         {"atomic_number": 4, "coreconfig": "[He]", "element": "Be", "natoms": 1,
>          "species": "Be-2", "stateOccupation": [{"(2p1/2)": [".00000000", ".00000000"]}],
>          "valenceconfig": "(2s1/2) (2p1/2)"},
>         {"atomic_number": 4, "coreconfig": "[He]", "element": "Be", "natoms": 1,
>          "species": "Be-2", "stateOccupation": [{"(2p1/2)": [".00000000", ".00000000"]}],
>          "valenceconfig": "(2s1/2) (2p1/2)"},
>         {"atomic_number": 4, "coreconfig": "[He]", "element": "Be", "natoms": 1,
>          "species": "Be-2", "stateOccupation": [{"(2p1/2)": [".00000000", ".00000000"]}],
>          "valenceconfig": "(2s1/2) (2p1/2)"}]], "bandgap": [0.0004425914],
>         "bandgap_units":"eV", "binding_energy": [53.57027767044], "corehole_type": "valence",
>         "binding_energy_units": "eV", "binding_energy_convention": "negativ",
>         "coreholes_calculated": "Be1s", "coreholes_calculated_details": "", "coresetup": [],
>         "errors": [], "fermi_energy": [0.3138075709], "fermi_energy_unit": "eV",
>         "reference_bandgaps": [0.0225936434], "reference_coresetup": [],
>         "successful": true, "total_energy_all": [-1554.08485250996],
>         "total_energy_all_units": "eV", "total_energy_ref": [-1607.6551301804],
>         "total_energy_ref_units": "eV", "warnings": [], "hints": [],
>         "weighted_binding_energy": [107.14055534088], "weighted_binding_energy_units": "eV",
>         "workflow_name": "fleur_corehole_wc", "workflow_version": "0.3.2"
>       }

## Database Node graph

>     from aiida_fleur.tools.graph_fleur import draw_graph

>     draw_graph(30528)

## Plot_fleur visualization

> Currently there is no visualization directly implemented for plot fleur. Through there in masci-tools there are methods to visualize spectra and binding energies

## Example usage

>     # -*- coding: utf-8 -*-
>     from aiida.orm import load_node, Dict
>     from aiida.engine import submit
>     from aiida.plugins import WorkflowFactory

>     fleur_corehole_wc = WorkflowFactory('fleur.corehole')
>     struc = load_node(STRUCTURE_PK)
>     flapw_para = load_node(PARAMETERS_PK)
>     fleur_code = load_node(FLEUR_PK)
>     inpgen_code = load_node(INPGEN_PK)

>     options = Dict(dict={'resources': {'num_machines': 2, 'num_mpiprocs_per_machine': 24},
>                              'queue_name': '',
>                              'custom_scheduler_commands': '',
>                              'max_wallclock_seconds':  60*60})

>     wf_para_corehole = Dict(dict={u'atoms': [u'Be'], #[u'all'],
>       u'supercell_size': [2, 2, 2], u'corelevel': ['1s'], #[u'all'],
>       u'hole_charge': 1.0, u'magnetic': True, u'method': u'valence', u'serial': False}

>     # launch workflow
>     dos = submit(fleur_corehole_wc, wf_parameters=wf_para_corehole, structure=struc,
>                  calc_parameters=flapw_para, options=options,
>                  fleur=fleur, inpgen=inpgen, label="test core hole wc",
>                  description="fleur_corehole test")

## Error handling

> Still has to be documented