Exemple #1
0
    def run_pw2gw(self):
        """Run the PwBaseWorkChain in bands mode along the path of high-symmetry determined by seekpath."""
        inputs = AttributeDict(self.exposed_inputs(Pw2gwCalc, namespace='pw2gw'))
        inputs.metadata.call_link_label = 'pw2gw'
        inputs.parent_folder = self.ctx.current_folder

        inputs = prepare_process_inputs(Pw2gwCalc, inputs)
        running = self.submit(Pw2gwCalc, **inputs)

        self.report('launching Pw2gwCalculation<{}>'.format(running.pk))

        return ToContext(workchain_pw2gw=running)
Exemple #2
0
    def run_dos_full(self):
        """Run the PwBaseWorkChain in bands mode along the path of high-symmetry determined by seekpath."""
        inputs = AttributeDict(self.exposed_inputs(DosCalc, namespace='dos_full'))
        inputs.metadata.call_link_label = 'dos_full'
        inputs.parent_folder = self.ctx.current_folder

        inputs = prepare_process_inputs(DosCalc, inputs)
        running = self.submit(DosCalc, **inputs)

        self.report('launching DosCalculation<{}> in {} mode for the FULL - CROP grid'.format(running.pk, 'dos'))

        return ToContext(workchain_dos_full=running)
Exemple #3
0
    def _generate_projwfc_inputs(self):
        """Run Projwfc calculation, to generate partial Densities of State."""
        projwfc_inputs = AttributeDict(self.exposed_inputs(ProjwfcCalculation, 'projwfc'))
        projwfc_inputs.parent_folder = self.ctx.nscf_parent_folder
        projwfc_parameters = self.inputs.projwfc.parameters.get_dict()

        if projwfc_parameters.pop('align_to_fermi', False):
            projwfc_parameters['PROJWFC']['Emin'] = projwfc_parameters['Emin'] + self.ctx.nscf_fermi
            projwfc_parameters['PROJWFC']['Emax'] = projwfc_parameters['Emax'] + self.ctx.nscf_fermi

        projwfc_inputs.parameters = orm.Dict(dict=projwfc_parameters)
        projwfc_inputs['metadata']['call_link_label'] = 'projwfc'
        return projwfc_inputs
Exemple #4
0
    def _generate_dos_inputs(self):
        """Run DOS calculation, to generate total Densities of State."""
        dos_inputs = AttributeDict(self.exposed_inputs(DosCalculation, 'dos'))
        dos_inputs.parent_folder = self.ctx.nscf_parent_folder
        dos_parameters = self.inputs.dos.parameters.get_dict()

        if dos_parameters.pop('align_to_fermi', False):
            dos_parameters['DOS']['Emin'] = dos_parameters['Emin'] + self.ctx.nscf_fermi
            dos_parameters['DOS']['Emax'] = dos_parameters['Emax'] + self.ctx.nscf_fermi

        dos_inputs.parameters = orm.Dict(dict=dos_parameters)
        dos_inputs['metadata']['call_link_label'] = 'dos'
        return dos_inputs
Exemple #5
0
    def prepare_z2pack(self):
        """Prepare the inputs for the z2pack calculations."""
        inputs = AttributeDict(
            self.exposed_inputs(Z2packBaseWorkChain, namespace='z2pack_base'))
        inputs.pw_code = self.inputs.pw_code
        inputs.structure = self.ctx.current_structure
        inputs.parent_folder = self.ctx.remote_scf

        self.ctx.inputs = inputs
        self.ctx.iteration = 0
        self.ctx.max_iteration = len(self.ctx.crossings)

        self.ctx.workchain_z2pack = []
Exemple #6
0
    def prepare_z2pack(self):
        """Prepare the inputs for the z2ack calculation."""
        self.report('Using z2pack to calculatte Z2 invariant.')
        inputs = AttributeDict(
            self.exposed_inputs(Z2packBaseWorkChain, namespace='z2pack_base'))
        inputs.pw_code = self.inputs.pw_code
        inputs.structure = self.ctx.current_structure
        inputs.parent_folder = self.ctx.scf_folder

        settings = inputs.z2pack.z2pack_settings.get_dict()
        settings.update({
            'dimension_mode': '2D',
            'invariant': 'Z2',
        })

        self.ctx.inputs = inputs
Exemple #7
0
    def run_projwfc(self):
        """
        Projwfc step
        :return:
        """
        inputs = AttributeDict(
            self.exposed_inputs(ProjwfcCalculation, namespace='projwfc'))
        inputs.parent_folder = self.ctx.current_folder

        inputs = prepare_process_inputs(ProjwfcCalculation, inputs)
        running = self.submit(ProjwfcCalculation, **inputs)

        self.report('projwfc step - launching ProjwfcCalculation<{}>'.format(
            running.pk))

        return ToContext(calc_projwfc=running)
Exemple #8
0
    def run_pp(self):
        """Run the PwBaseWorkChain in scf mode on the primitive cell of (optionally relaxed) input structure."""
        inputs = AttributeDict(self.exposed_inputs(PpCalculation, namespace='pp'))
        inputs.metadata.call_link_label = 'pp'
        inputs.parent_folder = self.ctx.current_folder

        nscf_params = self.ctx.workchain_nscf.outputs.output_parameters

        inputs.parameters = inputs.parameters.get_dict()
        inputs.parameters.setdefault('INPUTPP', {})
        inputs.parameters.setdefault('PLOT', {})
        inputs.parameters['INPUTPP']['plot_num'] = 7
        nel = int(nscf_params['number_of_electrons'])
        if 'wavefunction_min' in self.inputs:
            kband_min = self.inputs.wavefunction_min.value
        else:
            if 'wavefunction_ef_min' in self.inputs:
                i = self.inputs.wavefunction_ef_min.value - 1
                kband_min = nel - i
            else:
                kband_min = 1

        if 'wavefunction_max' in self.inputs:
            kband_max = self.inputs.wavefunction_max.value
        else:
            if 'wavefunction_ef_max' in self.inputs:
                i = self.inputs.wavefunction_ef_max.value 
                kband_max = nel + i
            else:
                kband_max = nscf_params['number_of_atomic_wfc']

        inputs.parameters['INPUTPP']['kband(1)'] = kband_min
        inputs.parameters['INPUTPP']['kband(2)'] = kband_max
        inputs.parameters['INPUTPP']['kpoint(1)'] = 1
        inputs.parameters['INPUTPP']['kpoint(2)'] = nscf_params['number_of_k_points']

        inputs.parameters['PLOT']['iflag'] = 3
        # inputs.parameters['PLOT']['output_format'] = 5

        inputs = prepare_process_inputs(PpCalculation, inputs)
        running = self.submit(PpCalculation, **inputs)

        self.report(f'launching PpCalculation<{running.pk}>')

        return ToContext(workchain_pp=running)
Exemple #9
0
    def setup_z2pack(self):
        """Prepare the inputs for the z2pack CalcJob."""
        inputs = AttributeDict(self.exposed_inputs(Z2packCalculation,
                                                   'z2pack'))
        inputs.pw_code = self.inputs.pw_code
        inputs.parent_folder = self.ctx.parent_folder
        inputs.z2pack_settings = inputs.z2pack_settings.get_dict()

        if not self.ctx.restart:
            if 'wannier90_parameters' not in inputs:
                inputs.wannier90_parameters = self._autoset_wannier90_paremters(
                )
            else:
                params = inputs.wannier90_parameters.get_dict()
                if any(var not in params
                       for var in ['num_wann', 'num_bands', 'exclude_bands']):
                    inputs.wannier90_parameters = self._autoset_wannier90_paremters(
                    )

        self.ctx.inputs = inputs