Fleur core-hole workflow

Class name, import from:
from aiida_fleur.workflows.corehole import FleurCoreholeWorkChain
#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
'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'})

# 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