Source code for aiida_quantumespresso.calculations.functions.merge_ph_outputs

# -*- coding: utf-8 -*-
"""merge data from mulitple ph runs called by one PhBase."""
from aiida import orm
from aiida.engine import calcfunction


@calcfunction
[docs]def merge_ph_outputs(**kwargs): """Calcfunction to merge outputs from multiple `ph.x` calculations with different q-points.""" # Get the outputs, sorted by label outputs = [el[1].get_dict() for el in sorted(list(kwargs.items()), key=lambda l: l[0])] merged = {} total_walltime = 0 number_of_qpoints = 0 number_irreps = [] for output in outputs: num_irreps_per_q = output.pop('number_of_irr_representations_for_each_q', []) number_of_qpoints += len(num_irreps_per_q) number_irreps.extend(num_irreps_per_q) total_walltime += output.pop('wall_time_seconds', 0) for key, value in output.items(): # Skip uncomplete dynamical matrix results if 'dynamical_matrix_' in key and 'mode_symmetry' not in value: continue merged[key] = value merged['wall_time_seconds'] = total_walltime merged['number_of_irr_representations_for_each_q'] = number_irreps merged['number_of_qpoints'] = number_of_qpoints return orm.Dict(dict=merged)