コード例 #1
0
ファイル: runners.py プロジェクト: chrisjsewell/aiida_core
    def call_on_legacy_workflow_finish(self, pk, callback):
        """
        Callback to be called when the workflow of the given pk is terminated

        :param pk: the pk of the workflow
        :param callback: the function to be called upon workflow termination
        """
        workflow = load_workflow(pk=pk)
        self._poll_legacy_wf(workflow, callback)
コード例 #2
0
    def run_ph(self):
        main_params = self.get_parameters()

        try:
            pw_calculation = main_params['pw_calculation']
        except KeyError:
            wf_pw = ([
                load_workflow(pk)
                for pk in self.get_attributes().get('old_pw_wfs', [])
            ] + list(self.get_step(self.run_pw).get_sub_workflows()))[0]
            pw_calculation = wf_pw.get_result('pw_calculation')

            # Save results of the subworkflow in the main
            for k, v in wf_pw.get_results().iteritems():
                self.add_result(k, v)

        # load the PhWorkflow parameters

        ph_params = {'pw_calculation': pw_calculation}
        for k, v in main_params.iteritems():
            if k.startswith('ph_'):
                new_k = k[3:]  # remove ph_
                ph_params[new_k] = v

        # deactivate dielectric constant calculation if pw calculation done
        # with a smearing (metal)
        if pw_calculation.res.smearing_method:
            ph_params['parameters']['INPUTPH']['epsil'] = False
            self.append_to_report(
                "Pw calculation (pk: {}) done with smearing -> "
                "forcing epsil=False for Ph calculation".format(
                    pw_calculation.pk))

        # Launch the PH sub-workflow
        wf_ph = PhWorkflow(params=ph_params)
        wf_ph.store()
        self.append_to_report("Launching PH sub-workflow (pk: {})".format(
            wf_ph.pk))
        self.attach_workflow(wf_ph)
        wf_ph.start()

        if any([k.startswith('dispersion') for k in main_params.keys()]):
            self.next(self.run_q2r)
            return
        else:
            self.next(self.final_step_ph)
            return
コード例 #3
0
load_dbenv()

from aiida.orm import load_node, load_workflow
from aiida.orm import Code, DataFactory

import matplotlib.pyplot as plt

StructureData = DataFactory('structure')
ParameterData = DataFactory('parameter')
ArrayData = DataFactory('array')
KpointsData = DataFactory('array.kpoints')

import numpy as np

#######################
wf = load_workflow(1099)
#######################

thermal_properties = wf.get_result('thermal_properties')

energy = thermal_properties.get_array('electronic_energies')
volumes = thermal_properties.get_array('volumes')
entropy = thermal_properties.get_array('entropy')
cv = thermal_properties.get_array('cv')
temperature = thermal_properties.get_array('temperature')

plt.figure(1)

plt.plot(volumes, energy)

plt.figure(2)
コード例 #4
0
ファイル: workchain.py プロジェクト: asle85/aiida-core
def _get_wf_outputs(pk):
    return load_workflow(pk=pk).get_results()
コード例 #5
0
ファイル: workflows.py プロジェクト: nvarini/aiida_core
    def test_load_workflows(self):
        """
        Test for load_node() function.
        """
        from aiida.orm import load_workflow

        a = WorkflowTestEmpty()
        a.store()

        self.assertEquals(a.pk, load_workflow(wf_id=a.pk).pk)
        self.assertEquals(a.pk, load_workflow(wf_id=a.uuid).pk)
        self.assertEquals(a.pk, load_workflow(pk=a.pk).pk)
        self.assertEquals(a.pk, load_workflow(uuid=a.uuid).pk)

        with self.assertRaises(ValueError):
            load_workflow(wf_id=a.pk, pk=a.pk)
        with self.assertRaises(ValueError):
            load_workflow(pk=a.pk, uuid=a.uuid)
        with self.assertRaises(ValueError):
            load_workflow(pk=a.uuid)
        with self.assertRaises(ValueError):
            load_workflow(uuid=a.pk)
        with self.assertRaises(ValueError):
            load_workflow()
コード例 #6
0
load_dbenv()

from aiida.orm import load_node, load_workflow
from aiida.orm import Code, DataFactory

import matplotlib.pyplot as plt

StructureData = DataFactory('structure')
ParameterData = DataFactory('parameter')
ArrayData = DataFactory('array')
KpointsData = DataFactory('array.kpoints')

import numpy as np

#######################
wf = load_workflow(512)
#######################

wf_list = list(wf.get_step('pressure_expansions').get_sub_workflows())[:-1]
wf_list += list(wf.get_step('start').get_sub_workflows())

print wf_list[0].get_result('band_structure').get_array('q_points')[1][-1]

band = 4
volume = []
energy = []
grune_qpoint = []
for wf_grune in wf_list:
    volume.append(wf_grune.get_result('final_structure').get_cell_volume())
    energy.append(wf_grune.get_result('optimized_structure_data').dict.energy)
    grune_qpoint.append(
コード例 #7
0
from aiida.orm import load_node, load_workflow
from aiida.orm import Code, DataFactory

import matplotlib.pyplot as plt

StructureData = DataFactory('structure')
ParameterData = DataFactory('parameter')
ArrayData = DataFactory('array')
KpointsData = DataFactory('array.kpoints')

import numpy as np

# Set WorkflowPhonon PK number
########################
wf = load_workflow(9905)
########################

# Phonon Band structure
bs = wf.get_result('band_structure')
for i, freq in enumerate(bs.get_array('frequencies')):
    plt.plot(bs.get_array('q_path')[i], freq, color='r')

plt.figure(1)
plt.axes().get_xaxis().set_ticks([])
plt.ylabel('Frequency [THz]')
plt.xlabel('Wave vector')
plt.xlim([0, bs.get_array('q_path')[-1][-1]])
plt.axhline(y=0, color='k', ls='dashed')
plt.suptitle('Phonon band structure')
コード例 #8
0
def phonopy_merge(**kwargs):
    from phonopy.structure.atoms import Atoms as PhonopyAtoms
    from phonopy import Phonopy
    from phonopy.units import VaspToTHz
    from phonopy.harmonic.dynmat_to_fc import get_commensurate_points, DynmatToForceConstants

    structure = kwargs.pop('structure')
    phonopy_input = kwargs.pop('phonopy_input').get_dict()

    harmonic = kwargs.pop('harmonic')
    renormalized = kwargs.pop('renormalized')

    eigenvectors = harmonic.get_array('eigenvectors')
    frequencies = harmonic.get_array('frequencies')
    shifts = renormalized.get_array('shifts')


    # Generate phonopy phonon object
    bulk = PhonopyAtoms(symbols=[site.kind_name for site in structure.sites],
                        positions=[site.position for site in structure.sites],
                        cell=structure.cell)

    phonon = Phonopy(bulk,
                     phonopy_input['supercell'],
                     primitive_matrix=phonopy_input['primitive'],
                     distance=phonopy_input['distance'])

    primitive = phonon.get_primitive()
    supercell = phonon.get_supercell()



    total_frequencies = frequencies + shifts

    dynmat2fc = DynmatToForceConstants(primitive, supercell)
    dynmat2fc.set_dynamical_matrices(total_frequencies / VaspToTHz, eigenvectors)
    dynmat2fc.run()

    total_force_constants = dynmat2fc.get_force_constants()

    # Stores DOS data in DB as a workflow result
    total_data = ArrayData()
    total_data.set_array('force_constants', total_force_constants)

    return {'final_results': total_data}



    # Start script here

    # Workflow phonon (at given volume)
    wf = load_workflow(431)
    parameters = wf.get_parameters()
    results = wf.get_results()

    inline_params = {'structure': results['final_structure'],
                     'phonopy_input': parameters['phonopy_input'],
                     'force_constants': results['force_constants']}

    harmonic = phonopy_commensurate_inline(**inline_params)



    # At reference volume (at T = 0)
    wf = load_workflow(432)
    parameters = wf.get_parameters()
    results_r = wf.get_results()
    results_h = wf.get_results()


    inline_params = {'structure': results_h['final_structure'],
                     'phonopy_input': parameters['phonopy_input'],
                     'force_constants': results_h['force_constants'],
                     'r_force_constants': results_r['r_force_constants']}


    renormalized = phonopy_commensurate_shifts_inline(**inline_params)





    inline_params = {'structure': results_h['final_structure'],
                     'phonopy_input': parameters['phonopy_input'],
                     'harmonic': harmonic,
                     'renormalized': renormalized}

    total = phonopy_merge(**inline_params)

    print total

    inline_params = {'structure': results_h['final_structure'],
                     'phonopy_input': parameters['phonopy_input'],
                     'force_constants': total['force_constants']}

    results = phonopy_calculation_inline(**inline_params)[1]

    band = results['band_structure']


    # Phonon Band structure plot
    plot_data(results['band_structure'])
コード例 #9
0
ファイル: interstep.py プロジェクト: kamatani0164/aiida-core
def _get_wf_outputs(pk):
    """
    Return the results dictionary of a legacy workflow
    """
    return load_workflow(pk=pk).get_results()
コード例 #10
0
    qha_output.set_array('temperature', np.array(qha_temperatures))
    qha_output.set_array('helmholtz_volume', np.array(helmholtz_volume))
    qha_output.set_array('thermal_expansion', np.array(thermal_expansion))
    qha_output.set_array('volume_temperature', np.array(volume_temperature))
    qha_output.set_array('heat_capacity_P_numerical',
                         np.array(heat_capacity_P_numerical))
    qha_output.set_array('volume_expansion', np.array(volume_expansion))
    qha_output.set_array('gibbs_temperature', np.array(gibbs_temperature))

    qha_output.store()

    return {'qha_data': qha_output}


#######################
wf = load_workflow(910)
#######################

wf_parameters = wf.get_parameters()

# self.get_step_calculations(self.optimize).latest('id')

interval = wf.get_attribute('interval')

max = wf.get_attribute('max')
min = wf.get_attribute('min')

n_points = int((max - min) / interval) + 1
test_pressures = [min + interval * i for i in range(n_points)]

# Remove duplicates
コード例 #11
0
#!/usr/bin/env python

from aiida import load_dbenv
load_dbenv()

from aiida.orm import load_node, load_workflow

import numpy as np
from phonopy.structure.atoms import Atoms as PhonopyAtoms
from phonopy import Phonopy

# Set WorkflowPhonon PK number
#######################
wf = load_workflow(437)
#######################

print('Results pk: {}'.format(wf.get_result('force_constants').pk))
# 1) Calculated and stored in database

# DOS
if True:
    f = open('density_of_states', 'w')
    print('Writing density of states')
    for i, j in zip(
            wf.get_result('dos').get_array('frequency'),
            wf.get_result('dos').get_array('total_dos')):
        f.write('{} {}\n'.format(i, j))
    f.close()

# PARTIAL DOS
if True:
コード例 #12
0
                                '$')
            else:
                labels_e.append('$' +
                                labels[i - 1][1].replace('GAMMA', '\Gamma') +
                                '/' + labels[i][0].replace('GAMMA', '\Gamma') +
                                '$')
            x_labels.append(q_path[i][0])
        x_labels.append(q_path[-1][-1])
        labels_e.append('$' + labels[-1][1].replace('GAMMA', '\Gamma') + '$')
        labels_e[0] = '$' + labels[0][0].replace('GAMMA', '\Gamma') + '$'

        plt.xticks(x_labels, labels_e, rotation='horizontal')


#######################
wf = load_workflow(276)
#######################

# Band structure

bs = wf.get_result('band_structure')

plt.figure(1)
get_plot(bs.get_array('frequencies'),
         bs.get_array('q_path'),
         title='Phonon band structure',
         ylabel='Frequency [THz]',
         labels=bs.get_array('labels'))

plt.figure(2)
get_plot(bs.get_array('eigenvalues'),