def get_surface_charge_adf(mol: Molecule, job: Type[Job], s: Settings) -> Settings: """Perform a gas-phase ADF single point and return settings for a COSMO-ADF single point. The previous gas-phase calculation as moleculair fragment. Parameters ---------- mol : |plams.Molecule|_ A PLAMS Molecule. job : |Callable|_ A type Callable of a class derived from :class:`Job`, e.g. :class:`AMSJob` or :class:`Cp2kJob`. s : |plams.Settings|_ The settings for **job**. Returns ------- |plams.Settings|_ A new Settings intance, constructed from **s**, suitable for DFT COSMO-RS calculations. """ s.input.allpoints = '' results = mol.job_single_point(job, s, ret_results=True) coskf = get_coskf(results) for at in mol: at.properties.adf.fragment = 'gas' s.update(get_template('qd.yaml')['COSMO-ADF']) s.input.fragments.gas = coskf return s
def pre_process_settings(mol: Molecule, s: Settings, job_type: Type[Job], template_name: str) -> Settings: """Update all :class:`Settings`, **s**, with those from a QMFlows template (see **job**).""" ret = Settings() type_key = type_to_string(job_type) ret.input = getattr(qmflows, template_name)['specific'][type_key].copy() ret.update(s) if job_type is AMSJob: mol.properties.pop('charge', None) # ret.input.ams.system.BondOrders._1 = adf_connectivity(mol) if 'uff' not in s.input: ret.input.ams.system.charge = int( sum(at.properties.get('charge', 0) for at in mol)) elif job_type is ADFJob: mol.properties.pop('charge', None) if not ret.input.charge: ret.input.charge = int( sum(at.properties.get('charge', 0) for at in mol)) return ret