Source code for pyscf.solvent

# Copyright 2014-2020 The PySCF Developers. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

from pyscf.solvent import ddcosmo

[docs] def ddCOSMO(method_or_mol, solvent_obj=None, dm=None): '''Initialize ddCOSMO model. Examples: >>> mf = ddCOSMO(scf.RHF(mol)) >>> mf.kernel() >>> sol = ddCOSMO(mol) >>> mc = ddCOSMO(CASCI(mf, 6, 6), sol) >>> mc.kernel() ''' from pyscf import gto from pyscf import scf, mcscf from pyscf import tdscf if isinstance(method_or_mol, gto.mole.Mole): return ddcosmo.DDCOSMO(method_or_mol) elif isinstance(method_or_mol, scf.hf.SCF): return ddcosmo.ddcosmo_for_scf(method_or_mol, solvent_obj, dm) elif isinstance(method_or_mol, mcscf.mc1step.CASSCF): return ddcosmo.ddcosmo_for_casscf(method_or_mol, solvent_obj, dm) elif isinstance(method_or_mol, mcscf.casci.CASCI): return ddcosmo.ddcosmo_for_casci(method_or_mol, solvent_obj, dm) elif isinstance(method_or_mol, (tdscf.rhf.TDA, tdscf.rhf.TDHF)): return ddcosmo.ddcosmo_for_tdscf(method_or_mol, solvent_obj, dm) else: return ddcosmo.ddcosmo_for_post_scf(method_or_mol, solvent_obj, dm)
DDCOSMO = ddCOSMO
[docs] def ddPCM(method_or_mol, solvent_obj=None, dm=None): '''Initialize ddPCM model. Examples: >>> mf = ddPCM(scf.RHF(mol)) >>> mf.kernel() >>> sol = ddPCM(mol) >>> mc = ddPCM(CASCI(mf, 6, 6), sol) >>> mc.kernel() ''' from pyscf import gto from pyscf import scf, mcscf from pyscf import tdscf from pyscf.solvent import ddpcm if isinstance(method_or_mol, gto.mole.Mole): return ddpcm.DDPCM(method_or_mol) elif isinstance(method_or_mol, scf.hf.SCF): return ddpcm.ddpcm_for_scf(method_or_mol, solvent_obj, dm) elif isinstance(method_or_mol, mcscf.mc1step.CASSCF): return ddpcm.ddpcm_for_casscf(method_or_mol, solvent_obj, dm) elif isinstance(method_or_mol, mcscf.casci.CASCI): return ddpcm.ddpcm_for_casci(method_or_mol, solvent_obj, dm) elif isinstance(method_or_mol, (tdscf.rhf.TDA, tdscf.rhf.TDHF)): return ddpcm.ddpcm_for_tdscf(method_or_mol, solvent_obj, dm) else: return ddpcm.ddpcm_for_post_scf(method_or_mol, solvent_obj, dm)
DDPCM = ddPCM
[docs] def PE(method_or_mol, solvent_obj, dm=None): '''Initialize polarizable embedding model. Args: method_or_mol (pyscf method object or gto.Mole object) If method_or_mol is gto.Mole object, this function returns a PolEmbed object constructed with this Mole object. solvent_obj (PolEmbed object or dictionary with options or str) If solvent_obj is an object of PolEmbed class, the PE-enabled method will be created using solvent_obj. If solvent_obj is dict or str, a PolEmbed object will be created first with the solvent_obj, on top of which PE-enabled method will be created. Examples: >>> pe_options = {"potfile": "pyframe.pot"} >>> mf = PE(scf.RHF(mol), pe_options) >>> mf.kernel() ''' from pyscf.solvent import pol_embed from pyscf import gto, scf, mcscf, tdscf if isinstance(method_or_mol, gto.mole.Mole): return pol_embed.PolEmbed(method_or_mol, solvent_obj) elif isinstance(method_or_mol, scf.hf.SCF): return pol_embed.pe_for_scf(method_or_mol, solvent_obj, dm) elif isinstance(method_or_mol, mcscf.mc1step.CASSCF): return pol_embed.pe_for_casscf(method_or_mol, solvent_obj, dm) elif isinstance(method_or_mol, mcscf.casci.CASCI): return pol_embed.pe_for_casci(method_or_mol, solvent_obj, dm) elif isinstance(method_or_mol, (tdscf.rhf.TDA, tdscf.rhf.TDHF)): return pol_embed.pe_for_tdscf(method_or_mol, solvent_obj, dm) else: return pol_embed.pe_for_post_scf(method_or_mol, solvent_obj, dm)
[docs] def PCM(method_or_mol, solvent_obj=None, dm=None): '''Initialize PCM model. Examples: >>> mf = PCM(scf.RHF(mol)) >>> mf.kernel() >>> sol = PCM(mol) >>> mc = PCM(CASCI(mf, 6, 6), sol) >>> mc.kernel() ''' from pyscf import gto from pyscf import scf, mcscf from pyscf import tdscf from pyscf.solvent import pcm if isinstance(method_or_mol, gto.mole.Mole): return pcm.PCM(method_or_mol) elif isinstance(method_or_mol, scf.hf.SCF): return pcm.pcm_for_scf(method_or_mol, solvent_obj, dm) elif isinstance(method_or_mol, mcscf.mc1step.CASSCF): return pcm.pcm_for_casscf(method_or_mol, solvent_obj, dm) elif isinstance(method_or_mol, mcscf.casci.CASCI): return pcm.pcm_for_casci(method_or_mol, solvent_obj, dm) elif isinstance(method_or_mol, (tdscf.rhf.TDA, tdscf.rhf.TDHF)): return pcm.pcm_for_tdscf(method_or_mol, solvent_obj, dm) else: return pcm.pcm_for_post_scf(method_or_mol, solvent_obj, dm)
PCM = PCM
[docs] def SMD(method_or_mol, solvent_obj=None, dm=None): '''Initialize PCM model. Examples: >>> mf = PCM(scf.RHF(mol)) >>> mf.kernel() >>> sol = PCM(mol) >>> mc = PCM(CASCI(mf, 6, 6), sol) >>> mc.kernel() ''' from pyscf import gto from pyscf import scf from pyscf.solvent import smd if isinstance(method_or_mol, gto.mole.Mole): return smd.SMD(method_or_mol) elif isinstance(method_or_mol, scf.hf.SCF): return smd.smd_for_scf(method_or_mol, solvent_obj, dm) else: raise NotImplementedError
SMD = SMD