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

../../_images/Workchain_charts_corehole_wc.png

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)
../../_images/corehole_si_30528.pdf

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