Skip to content

Commit

Permalink
Update periodic GW init and add example (pyscf#1967)
Browse files Browse the repository at this point in the history
* Update periodic GW init and add example

* Update 22-k_points_gw.py

* Removing mf.to_rhf() and mf.to_uhf()

The `to_rhf()` seems to raise the same DF error as in the unrestricted case, so I've removed it. But with/without `to_uhf()` I still get the same DF error.
  • Loading branch information
tberkel authored Nov 24, 2023
1 parent ad0f560 commit 2119797
Show file tree
Hide file tree
Showing 5 changed files with 93 additions and 7 deletions.
43 changes: 43 additions & 0 deletions examples/pbc/22-k_points_gw.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
#!/usr/bin/env python

'''
G0W0 with k-points sampling
'''

from functools import reduce
import numpy
from pyscf.pbc import gto, scf, gw

cell = gto.Cell()
cell.atom='''
C 0.000000000000 0.000000000000 0.000000000000
C 1.685068664391 1.685068664391 1.685068664391
'''
cell.basis = 'gth-szv'
cell.pseudo = 'gth-pade'
cell.a = '''
0.000000000, 3.370137329, 3.370137329
3.370137329, 0.000000000, 3.370137329
3.370137329, 3.370137329, 0.000000000'''
cell.unit = 'B'
cell.verbose = 5
cell.build()

#
# KDFT and KGW with 2x2x2 k-points
#
kpts = cell.make_kpts([2,2,2])
kmf = scf.KRKS(cell).density_fit()
kmf.kpts = kpts
emf = kmf.kernel()

# Default is AC frequency integration
mygw = gw.KRGW(kmf)
mygw.kernel()
print("KRGW energies =", mygw.mo_energy)

# With CD frequency integration
#mygw = gw.KRGW(kmf, freq_int='cd')
#mygw.kernel()
#print("KRGW-CD energies =", mygw.mo_energy)

45 changes: 44 additions & 1 deletion pyscf/pbc/gw/__init__.py
Original file line number Diff line number Diff line change
@@ -1 +1,44 @@
from .kgw_slow import GW as KRGW
# Copyright 2014-2018 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.

'''
Periodic G0W0 approximation
'''

from pyscf.pbc.gw import krgw_ac
from pyscf.pbc.gw import kugw_ac
from pyscf.pbc.gw import krgw_cd
from pyscf.pbc import scf

def KRGW(mf, freq_int='ac', frozen=None):
# mf = mf.to_rhf()
if freq_int.lower() == 'ac':
return krgw_ac.KRGWAC(mf, frozen)
elif freq_int.lower() == 'cd':
return krgw_cd.KRGWCD(mf, frozen)
else:
raise RuntimeError("GW frequency integration method %s not recognized. "
"With PBC, options are 'ac' and 'cd'."%(freq_int))

def KUGW(mf, freq_int='ac', frozen=None):
# mf = mf.to_uhf()
if freq_int.lower() == 'ac':
return kugw_ac.KUGWAC(mf, frozen)
elif freq_int.lower() == 'cd':
raise RuntimeError('GWCD does not support UHF or UKS methods.')
else:
raise RuntimeError("GW frequency integration method %s not recognized. "
"With PBC, options are 'ac' and 'cd'."%(freq_int))

KGW = KRGW
4 changes: 2 additions & 2 deletions pyscf/pbc/gw/krgw_ac.py
Original file line number Diff line number Diff line change
Expand Up @@ -546,15 +546,15 @@ class KRGWAC(lib.StreamObject):
'kpts', 'nkpts', 'mo_energy', 'mo_coeff', 'mo_occ', 'sigma',
}

def __init__(self, mf, frozen=0):
def __init__(self, mf, frozen=None):
self.mol = mf.mol
self._scf = mf
self.verbose = self.mol.verbose
self.stdout = self.mol.stdout
self.max_memory = mf.max_memory

#TODO: implement frozen orbs
if frozen > 0:
if frozen is not None and frozen > 0:
raise NotImplementedError
self.frozen = frozen

Expand Down
4 changes: 2 additions & 2 deletions pyscf/pbc/gw/krgw_cd.py
Original file line number Diff line number Diff line change
Expand Up @@ -607,15 +607,15 @@ class KRGWCD(lib.StreamObject):
'kpts', 'nkpts', 'mo_energy', 'mo_coeff', 'mo_occ', 'sigma',
}

def __init__(self, mf, frozen=0):
def __init__(self, mf, frozen=None):
self.mol = mf.mol
self._scf = mf
self.verbose = self.mol.verbose
self.stdout = self.mol.stdout
self.max_memory = mf.max_memory

#TODO: implement frozen orbs
if frozen > 0:
if frozen is not None and frozen > 0:
raise NotImplementedError
self.frozen = frozen

Expand Down
4 changes: 2 additions & 2 deletions pyscf/pbc/gw/kugw_ac.py
Original file line number Diff line number Diff line change
Expand Up @@ -612,15 +612,15 @@ class KUGWAC(lib.StreamObject):
'kpts', 'nkpts', 'mo_energy', 'mo_coeff', 'mo_occ', 'sigma',
}

def __init__(self, mf, frozen=0):
def __init__(self, mf, frozen=None):
self.mol = mf.mol
self._scf = mf
self.verbose = self.mol.verbose
self.stdout = self.mol.stdout
self.max_memory = mf.max_memory

#TODO: implement frozen orbs
if frozen > 0:
if frozen is not None and frozen > 0:
raise NotImplementedError
self.frozen = frozen

Expand Down

0 comments on commit 2119797

Please sign in to comment.