correct nonPBC vs PBC calls to PySCF
This commit is contained in:
@ -107,8 +107,8 @@ Step 4: run the 2-water QMMM problem for a few steps
|
|||||||
|
|
||||||
# Run with MPI: 1 proc each
|
# Run with MPI: 1 proc each
|
||||||
|
|
||||||
% mpirun -np 1 lmp_mpi -mdi "-name LMP -role DRIVER -method MPI" -log log.water.pyscf.qmmm.mpi.1 -in in.water.pyscf.qmmm : -np 1 python pyscf_mdi.py -mdi "-name PYSCF -role ENGINE -method MPI" -pbc yes
|
% mpirun -np 1 lmp_mpi -mdi "-name LMP -role DRIVER -method MPI" -log log.water.pyscf.qmmm.mpi.1 -in in.water.pyscf.qmmm : -np 1 python pyscf_mdi.py -mdi "-name PYSCF -role ENGINE -method MPI" -pbc no
|
||||||
|
|
||||||
# Run in plugin mode: 1 proc
|
# Run in plugin mode: 1 proc
|
||||||
|
|
||||||
% lmp_mpi -mdi "-name LMP -role DRIVER -method LINK -plugin_path /home/sjplimp/work_qm" -log log.water.pyscf.qmmm.plugin.1 -in in.water.pyscf.qmmm.plugin
|
% lmp_mpi -mdi "-name LMP -role DRIVER -method LINK -plugin_path /home/sjplimp/lammps/git/examples/QUANTUM/PySCF" -log log.water.pyscf.qmmm.plugin.1 -in in.water.pyscf.qmmm.plugin
|
||||||
|
|||||||
@ -46,4 +46,4 @@ thermo_style custom step cpu temp ke evdwl ecoul epair emol elong &
|
|||||||
thermo 1
|
thermo 1
|
||||||
|
|
||||||
mdi plugin pyscf_mdi mdi "-role ENGINE -name PySCF -method LINK" &
|
mdi plugin pyscf_mdi mdi "-role ENGINE -name PySCF -method LINK" &
|
||||||
extra "-pbc yes" command "run 2"
|
extra "-pbc no" command "run 2"
|
||||||
|
|||||||
@ -1,9 +1,11 @@
|
|||||||
# MDI wrapper on PySCF quantum code
|
# MDI wrapper on PySCF quantum code
|
||||||
|
|
||||||
# NOTE: Qs or issues to still address
|
# Todo:
|
||||||
# mm_radii is input to PySCF in Angstroms?
|
# allow for changes in box size on driver side, e.g. NPT
|
||||||
|
# should just work for PySCF
|
||||||
|
|
||||||
|
# NOTE: Qs or issues to still address for PySCF support
|
||||||
# add list of radii for all elements
|
# add list of radii for all elements
|
||||||
# allow for changes in box size, e.g. every step for NPT
|
|
||||||
# PySCF can do DIRECT mode (LATTICE commands) for QMMM
|
# PySCF can do DIRECT mode (LATTICE commands) for QMMM
|
||||||
# can it also do POTENTIAL mode (Coulomb potential at QM atoms)
|
# can it also do POTENTIAL mode (Coulomb potential at QM atoms)
|
||||||
# if so, add PySCF logic in evaluate()
|
# if so, add PySCF logic in evaluate()
|
||||||
@ -12,8 +14,6 @@
|
|||||||
# any other PySCF settings for users to set
|
# any other PySCF settings for users to set
|
||||||
# are the 3 below good default values
|
# are the 3 below good default values
|
||||||
# is wiping out dm_previous sufficient to make it a new system
|
# is wiping out dm_previous sufficient to make it a new system
|
||||||
# should max_memory=10000 depend on # of MM or QM atoms
|
|
||||||
# doc what "mf" is in evaluate()
|
|
||||||
# add PySCF code for AIMD (no MM atoms)
|
# add PySCF code for AIMD (no MM atoms)
|
||||||
# how to specify box for mixed BC, i.e. cell.dimension = 2 or 1
|
# how to specify box for mixed BC, i.e. cell.dimension = 2 or 1
|
||||||
# also need command-line options for those cases ?
|
# also need command-line options for those cases ?
|
||||||
@ -28,7 +28,8 @@ import MDI_Library as mdi
|
|||||||
from pyscf.gto import Mole
|
from pyscf.gto import Mole
|
||||||
from pyscf.pbc.gto import Cell
|
from pyscf.pbc.gto import Cell
|
||||||
from pyscf import qmmm
|
from pyscf import qmmm
|
||||||
from pyscf.dft import RKS
|
from pyscf.dft import RKS as RKS_nonpbc
|
||||||
|
from pyscf.pbc.dft import RKS as RKS_pbc
|
||||||
|
|
||||||
# --------------------------------------------
|
# --------------------------------------------
|
||||||
|
|
||||||
@ -529,9 +530,9 @@ def evaluate():
|
|||||||
box_str = "%s\n%s\n%s" % (edge_vec,edge_vec,edge_vec)
|
box_str = "%s\n%s\n%s" % (edge_vec,edge_vec,edge_vec)
|
||||||
box_str = box_str % \
|
box_str = box_str % \
|
||||||
(box_A[0],box_A[1],box_A[2],box_A[3],box_A[4],box_A[5],box_A[6],box_A[7],box_A[8])
|
(box_A[0],box_A[1],box_A[2],box_A[3],box_A[4],box_A[5],box_A[6],box_A[7],box_A[8])
|
||||||
|
print("BOX STR:",box_str)
|
||||||
|
|
||||||
print("ATOM STR:",atom_str)
|
print("ATOM STR:",atom_str)
|
||||||
print("BOX STR:",box_str)
|
|
||||||
print("MM COORDS:",mm_coords)
|
print("MM COORDS:",mm_coords)
|
||||||
print("MM CHARGES:",mm_charges)
|
print("MM CHARGES:",mm_charges)
|
||||||
print("MM RADII:",mm_radii)
|
print("MM RADII:",mm_radii)
|
||||||
@ -543,18 +544,16 @@ def evaluate():
|
|||||||
cell = Cell()
|
cell = Cell()
|
||||||
cell.atom = atom_str
|
cell.atom = atom_str
|
||||||
cell.a = box_str
|
cell.a = box_str
|
||||||
cell.max_memory = 10000
|
|
||||||
cell.basis = basis
|
cell.basis = basis
|
||||||
cell.build()
|
cell.build()
|
||||||
else:
|
else:
|
||||||
mol = Mole()
|
mol = Mole()
|
||||||
mol.atom = atom_str
|
mol.atom = atom_str
|
||||||
mol.max_memory = 10000
|
|
||||||
mol.basis = basis
|
mol.basis = basis
|
||||||
mol.build()
|
mol.build()
|
||||||
|
|
||||||
# QMMM with QM and MM atoms
|
# QMMM with QM and MM atoms
|
||||||
# mf = ???
|
# mf = mean-field object
|
||||||
# qm_pe = QM energy + QM/MM energy
|
# qm_pe = QM energy + QM/MM energy
|
||||||
# QM energy = QM_nuclear/QM_nuclear + electron/QM_nuclear + electron/electron
|
# QM energy = QM_nuclear/QM_nuclear + electron/QM_nuclear + electron/electron
|
||||||
# QM/MM energy = QM_nuclear/MM_charges + electron/MM_charges
|
# QM/MM energy = QM_nuclear/MM_charges + electron/MM_charges
|
||||||
@ -563,8 +562,8 @@ def evaluate():
|
|||||||
# dm = molecular orbitals (wave functions) for system
|
# dm = molecular orbitals (wave functions) for system
|
||||||
|
|
||||||
if mode == QMMM:
|
if mode == QMMM:
|
||||||
if periodic: mf = RKS(cell,xc=xcstr)
|
if periodic: mf = RKS_pbc(cell,xc=xcstr)
|
||||||
else: mf = RKS(mol,xc=xcstr)
|
else: mf = RKS_nonpbc(mol,xc=xcstr)
|
||||||
mf = qmmm.mm_charge(mf,mm_coords,mm_charges,mm_radii)
|
mf = qmmm.mm_charge(mf,mm_coords,mm_charges,mm_radii)
|
||||||
|
|
||||||
if dm_previous_exists:
|
if dm_previous_exists:
|
||||||
|
|||||||
Reference in New Issue
Block a user