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)
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)
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
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
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 = []
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
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)
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)
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