Skip to content

Commit

Permalink
Attributes name update: hf.level_shift_factor -> hf.level_shift; hf.d…
Browse files Browse the repository at this point in the history
…amp_factor -> hf.damp
  • Loading branch information
sunqm committed Nov 26, 2015
1 parent 963c6ec commit 0ad20d7
Show file tree
Hide file tree
Showing 17 changed files with 62 additions and 63 deletions.
2 changes: 1 addition & 1 deletion examples/mcscf/17-dmet_cas_for_fe_meporph.py
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@
mol.build()

mf = scf.RHF(mol)
mf.level_shift_factor = 1.5
mf.level_shift = 1.5
#mf.chkfile = 'fepor5.chk'
mf = scf.fast_scf(mf)

Expand Down
2 changes: 1 addition & 1 deletion examples/mcscf/18-spatial_spin_symmetry.py
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,7 @@
mol.build()

m = scf.ROHF(mol)
m.level_shift_factor = 1.5
m.level_shift = 1.5
mf = scf.fast_newton(m)
mf.kernel()

Expand Down
2 changes: 1 addition & 1 deletion examples/nmr/crco6-nr-msc.py
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@
'O' : 'ccpvtz',}
mol.build()
nrscf = scf.RHF(mol)
nrscf.level_shift_factor = .5
nrscf.level_shift = .5
nrscf.diis_start_cycle = 2
nrscf.conv_tol = 1e-9
e = nrscf.scf()
Expand Down
2 changes: 1 addition & 1 deletion examples/scf/14-restart_for_c60.py
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@
mf = scf.density_fit(scf.RHF(mol))
mf.verbose = 5
mf.chkfile = 'c60tz.chkfile'
mf.level_shift_factor=.5
mf.level_shift = .5
mf.conv_tol = 1e-7
mf.scf()

Expand Down
2 changes: 1 addition & 1 deletion examples/scf/31-cr_atom_rohf_tune_init_guess.py
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@
mol.basis = 'aug-cc-pvdz'
mol.build(False, False)
m = scf.RHF(mol)
m.level_shift_factor = .2
m.level_shift = .2
m.irrep_nelec = {'Ag': (6,3), 'B1g': (1,0), 'B2g': (1,0), 'B3g': (1,0)}
# init guess can also be read from chkfile
dm = m.from_chk('cr_atom.chk')
Expand Down
30 changes: 10 additions & 20 deletions mcscf/mc1step_uhf.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@
# the convergence are very unstable and slow

# gradients, hessian operator and hessian diagonal
def gen_g_hop(casscf, mo, casdm1s, casdm2s, eris):
def gen_g_hop(casscf, mo, u, casdm1s, casdm2s, eris):
ncas = casscf.ncas
ncore = casscf.ncore
nocc = (ncas + ncore[0], ncas + ncore[1])
Expand Down Expand Up @@ -62,7 +62,8 @@ def gpart(m):
gpart(0)
gpart(1)

def gorb_update(u, r0):
def gorb_update(u):
r0 = casscf.pack_uniq_var(u)
return g_orb + h_op(r0)

############## hessian, diagonal ###########
Expand Down Expand Up @@ -233,7 +234,6 @@ def kernel(casscf, mo_coeff, tol=1e-7, conv_tol_grad=None, macro=50, micro=3,
max_cycle_micro = micro
conv = False
totmicro = totinner = 0
imicro = 0
norm_gorb = norm_gci = 0
elast = e_tot
r0 = None
Expand All @@ -244,19 +244,8 @@ def kernel(casscf, mo_coeff, tol=1e-7, conv_tol_grad=None, macro=50, micro=3,
casdm1_last = casdm1
t3m = t2m = log.timer('CAS DM', *t1m)
for imacro in range(macro):

micro_iter = casscf.rotate_orb_cc(mo, casdm1, casdm2, eris, r0,
conv_tol_grad, log)
if casscf.dynamic_micro_step:
max_cycle_micro = max(micro, int(micro-2-numpy.log(norm_ddm)))
for imicro in range(max_cycle_micro):
if imicro == 0:
u, g_orb, njk = micro_iter.next()
norm_gorb0 = norm_gorb = numpy.linalg.norm(g_orb)
else:
u, g_orb, njk = micro_iter.send((casdm1,casdm2))
norm_gorb = numpy.linalg.norm(g_orb)
casdm1, casdm2, gci = casscf.update_casdm(mo, u, fcivec, e_ci, eris)
imicro = 0
rota = casscf.rotate_orb_cc(mo, lambda:casdm1, lambda:casdm2,
eris, r0, conv_tol_grad, log)
Expand All @@ -271,13 +260,13 @@ def kernel(casscf, mo_coeff, tol=1e-7, conv_tol_grad=None, macro=50, micro=3,
imicro, norm_t, norm_gorb)
break

casdm1, casdm2, gci, fcivec = casscf.update_casdm(mo, u, fcivec, e_ci, eris)
if isinstance(gci, numpy.ndarray):
norm_gci = numpy.linalg.norm(gci)
else:
norm_gci = -1
norm_ddm =(numpy.linalg.norm(casdm1[0] - casdm1_last[0])
+ numpy.linalg.norm(casdm1[1] - casdm1_last[1]))
norm_t = numpy.linalg.norm(u-numpy.eye(nmo))
t3m = log.timer('update CAS DM', *t3m)
log.debug('micro %d |u-1|= %4.3g |g[o]|= %4.3g ' \
'|g[c]|= %4.3g |ddm|= %4.3g',
Expand All @@ -292,8 +281,9 @@ def kernel(casscf, mo_coeff, tol=1e-7, conv_tol_grad=None, macro=50, micro=3,
break

rota.close()
rota = None

totmicro += imicro + 1
totmicro += imicro
totinner += njk

r0 = casscf.pack_uniq_var(u)
Expand All @@ -312,7 +302,7 @@ def kernel(casscf, mo_coeff, tol=1e-7, conv_tol_grad=None, macro=50, micro=3,
log.debug('CAS space CI energy = %.15g', e_ci)
log.timer('CASCI solver', *t2m)
log.info('macro iter %d (%d JK %d micro), CASSCF E = %.15g dE = %.8g',
imacro, njk, imicro+1, e_tot, e_tot-elast)
imacro, njk, imicro, e_tot, e_tot-elast)
log.info(' |grad[o]|= %4.3g |grad[c]|= %4.3g |ddm|= %4.3g',
norm_gorb0, norm_gci, norm_ddm)
t2m = t1m = log.timer('macro iter %d'%imacro, *t1m)
Expand All @@ -332,7 +322,6 @@ def kernel(casscf, mo_coeff, tol=1e-7, conv_tol_grad=None, macro=50, micro=3,
else:
log.info('1-step CASSCF not converged, %d macro (%d JK %d micro) steps',
imacro+1, totinner, totmicro)
log.note('1-step CASSCF, energy = %.15g', e_tot)
log.timer('1-step CASSCF', *cput0)
return conv, e_tot, e_ci, fcivec, mo

Expand Down Expand Up @@ -443,6 +432,7 @@ def kernel(self, mo_coeff=None, ci0=None, macro=None, micro=None,
tol=self.conv_tol, conv_tol_grad=self.conv_tol_grad,
macro=macro, micro=micro,
ci0=ci0, callback=callback, verbose=self.verbose)
logger.note(self, 'CASSCF energy = %.15g', self.e_tot)
#if self.verbose >= logger.INFO:
# self.analyze(mo_coeff, self.ci, verbose=self.verbose)
self._finalize_()
Expand Down Expand Up @@ -511,9 +501,9 @@ def update_rotate_matrix(self, dx, u0=1):
def gen_g_hop(self, *args):
return gen_g_hop(self, *args)

def rotate_orb_cc(self, mo, casdm1, casdm2, eris, x0_guess,
def rotate_orb_cc(self, mo, fcasdm1, fcasdm2, eris, x0_guess,
conv_tol_grad, verbose):
return mc1step.rotate_orb_cc(self, mo, casdm1, casdm2, eris, x0_guess,
return mc1step.rotate_orb_cc(self, mo, fcasdm1, fcasdm2, eris, x0_guess,
conv_tol_grad, verbose)

def ao2mo(self, mo):
Expand Down
7 changes: 0 additions & 7 deletions mcscf/test/test_n2.py
Original file line number Diff line number Diff line change
Expand Up @@ -112,13 +112,6 @@ def test_casci_uhf(self):
self.assertAlmostEqual(emc, -108.8896744464714, 7)
self.assertAlmostEqual(numpy.linalg.norm(mc.analyze()), 0, 7)

def test_h1e_for_cas(self):
mc = mcscf.CASSCF(m, 4, 4)
mo = m.mo_coeff
h0 = mcscf.casci.h1e_for_cas(mc, mo, 4, 5)[0]
h1 = mcscf.mc1step.h1e_for_cas(mc, mo, mc.ao2mo(mo))
self.assertTrue(numpy.allclose(h0, h1))

def test_casci_uhf(self):
mf = scf.UHF(mol)
mf.scf()
Expand Down
9 changes: 1 addition & 8 deletions mcscf/test/test_n2_df.py
Original file line number Diff line number Diff line change
Expand Up @@ -105,14 +105,7 @@ def test_casci_symm_4o4e(self):
# emc = mc.casci()[0]
# self.assertAlmostEqual(emc, -108.8896744464714, 7)
# self.assertAlmostEqual(numpy.linalg.norm(mc.analyze()), 0, 7)

def test_h1e_for_cas(self):
mc = mcscf.density_fit(mcscf.CASSCF(m, 4, 4))
mo = m.mo_coeff
h0 = mcscf.casci.h1e_for_cas(mc, mo, 4, 5)[0]
h1 = mcscf.mc1step.h1e_for_cas(mc, mo, mc.ao2mo(mo))
self.assertTrue(numpy.allclose(h0, h1))

#
# def test_casci_uhf(self):
# mf = scf.UHF(mol)
# mf.scf()
Expand Down
5 changes: 3 additions & 2 deletions scf/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -171,8 +171,9 @@ def fast_newton(mf, mo_coeff=None, mo_occ=None, dm0=None):
mo_coeff, mo_occ = mf1.from_dm(dm0)
elif mo_coeff is None or mo_occ is None:
mf0 = density_fit(mf)
mf0.conv_tol = .1
mf0.level_shift_factor += .2
mf0.conv_tol = .5
if mf0.level_shift == 0:
mf0.level_shift = .2
mf0.kernel()
mf1._cderi = mf0._cderi
mf1._naoaux = mf0._naoaux
Expand Down
38 changes: 30 additions & 8 deletions scf/hf.py
Original file line number Diff line number Diff line change
Expand Up @@ -587,7 +587,7 @@ def get_veff(mol, dm, dm_last=None, vhf_last=None, hermi=1, vhfopt=None):
if dm_last is None:
ddm = numpy.asarray(dm)
else:
ddm = numpy.asarray(dm) - numpy.array(dm_last)
ddm = numpy.asarray(dm) - numpy.asarray(dm_last)
vj, vk = get_jk(mol, ddm, hermi=hermi, vhfopt=vhfopt)
if vhf_last is None:
return vj - vk * .5
Expand Down Expand Up @@ -856,7 +856,7 @@ class SCF(object):
>>> mol = gto.M(atom='H 0 0 0; H 0 0 1.1', basis='cc-pvdz')
>>> mf = scf.hf.SCF(mol)
>>> mf.verbose = 0
>>> mf.level_shift_factor = .4
>>> mf.level_shift = .4
>>> mf.scf()
-1.0811707843775884
'''
Expand Down Expand Up @@ -884,8 +884,8 @@ def __init__(self, mol):
self.diis_file = None
# Give diis_space_rollback=True a trial if other efforts not converge
self.diis_space_rollback = False
self.damp_factor = 0
self.level_shift_factor = 0
self.damp = 0
self.level_shift = 0
self.direct_scf = True
self.direct_scf_tol = 1e-13
##################################################
Expand Down Expand Up @@ -918,8 +918,8 @@ def dump_flags(self):
logger.info(self, '******** SCF flags ********')
logger.info(self, 'method = %s', self.__class__.__name__)
logger.info(self, 'initial guess = %s', self.init_guess)
logger.info(self, 'damping factor = %g', self.damp_factor)
logger.info(self, 'level shift factor = %g', self.level_shift_factor)
logger.info(self, 'damping factor = %g', self.damp)
logger.info(self, 'level shift factor = %g', self.level_shift)
logger.info(self, 'Do DIIS = %s', self.diis)
logger.info(self, 'DIIS start cycle = %d', self.diis_start_cycle)
logger.info(self, 'DIIS space = %d', self.diis_space)
Expand Down Expand Up @@ -957,9 +957,9 @@ def get_fock_(self, h1e, s1e, vhf, dm, cycle=-1, adiis=None,
if diis_start_cycle is None:
diis_start_cycle = self.diis_start_cycle
if level_shift_factor is None:
level_shift_factor = self.level_shift_factor
level_shift_factor = self.level_shift
if damp_factor is None:
damp_factor = self.damp_factor
damp_factor = self.damp
return get_fock_(self, h1e, s1e, vhf, dm, cycle, adiis,
diis_start_cycle, level_shift_factor, damp_factor)

Expand Down Expand Up @@ -1197,6 +1197,28 @@ def hf_energy(self):
'Please use .e_tot instead\n')
return self.e_tot

@property
def level_shift_factor(self):
sys.stderr.write('WARN: Attribute .level_shift_factor will be removed in PySCF v1.1. '
'Please use .level_shift instead\n')
return self.level_shift
@level_shift_factor.setter
def level_shift_factor(self, x):
sys.stderr.write('WARN: Attribute .level_shift_factor will be removed in PySCF v1.1. '
'Please use .level_shift instead\n')
self.level_shift = x

@property
def damp_factor(self):
sys.stderr.write('WARN: Attribute .damp_factor will be removed in PySCF v1.1. '
'Please use .damp instead\n')
return self.damp
@damp_factor.setter
def damp_factor(self, x):
sys.stderr.write('WARN: Attribute .damp_factor will be removed in PySCF v1.1. '
'Please use .damp instead\n')
self.damp = x


############

Expand Down
4 changes: 2 additions & 2 deletions scf/hf_symm.py
Original file line number Diff line number Diff line change
Expand Up @@ -417,9 +417,9 @@ def get_fock_(self, h1e, s1e, vhf, dm, cycle=-1, adiis=None,
if diis_start_cycle is None:
diis_start_cycle = self.diis_start_cycle
if level_shift_factor is None:
level_shift_factor = self.level_shift_factor
level_shift_factor = self.level_shift
if damp_factor is None:
damp_factor = self.damp_factor
damp_factor = self.damp
if isinstance(dm, numpy.ndarray) and dm.ndim == 2:
dm = numpy.array((dm*.5, dm*.5))
self._focka_ao = h1e + vhf[0]
Expand Down
4 changes: 2 additions & 2 deletions scf/rohf.py
Original file line number Diff line number Diff line change
Expand Up @@ -74,9 +74,9 @@ def get_fock_(mf, h1e, s1e, vhf, dm, cycle=-1, adiis=None,
if diis_start_cycle is None:
diis_start_cycle = mf.diis_start_cycle
if level_shift_factor is None:
level_shift_factor = mf.level_shift_factor
level_shift_factor = mf.level_shift
if damp_factor is None:
damp_factor = mf.damp_factor
damp_factor = mf.damp
if isinstance(dm, numpy.ndarray) and dm.ndim == 2:
dm = numpy.array((dm*.5, dm*.5))
# Fc = (Fa+Fb)/2
Expand Down
2 changes: 1 addition & 1 deletion scf/test/test_h2o.py
Original file line number Diff line number Diff line change
Expand Up @@ -116,7 +116,7 @@ def test_r_rhf(self):

def test_level_shift_uhf(self):
uhf = scf.UHF(mol)
uhf.level_shift_factor = .2
uhf.level_shift = .2
self.assertAlmostEqual(uhf.scf(), -75.98394849812, 9)

def test_energy_nuc(self):
Expand Down
2 changes: 1 addition & 1 deletion scf/test/test_h2o_vdz.py
Original file line number Diff line number Diff line change
Expand Up @@ -109,7 +109,7 @@ def test_r_rhf(self):

def test_level_shift_uhf(self):
uhf = scf.UHF(mol)
uhf.level_shift_factor = .2
uhf.level_shift = .2
self.assertAlmostEqual(uhf.scf(), -76.026765673118078, 9)

def test_nr_rhf_symm(self):
Expand Down
2 changes: 1 addition & 1 deletion scf/test/test_rhf.py
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ def test_mulliken_pop(self):
pop, chg = mf.mulliken_pop_meta_lowdin_ao(mol, dm, pre_orth_method='ano')
self.assertAlmostEqual(abs(pop).sum(), 22.056441149586863, 7)
pop, chg = mf.mulliken_pop_meta_lowdin_ao(mol, dm, pre_orth_method='minao')
self.assertAlmostEqual(abs(pop).sum(), 22.110720480307098, 7)
self.assertAlmostEqual(abs(pop).sum(), 22.11825416138074, 7)
pop, chg = mf.mulliken_pop_meta_lowdin_ao(mol, dm, pre_orth_method='scf')
self.assertAlmostEqual(abs(pop).sum(), 22.117869619510266, 7)

Expand Down
8 changes: 4 additions & 4 deletions scf/test/test_uhf.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
)

mf = scf.UHF(mol)
mf.conv_tol = 1e-14
mf.scf()


Expand All @@ -44,15 +45,14 @@ def test_mulliken_pop(self):
pop, chg = mf.mulliken_pop_meta_lowdin_ao(mol, dm, pre_orth_method='ano')
self.assertAlmostEqual(numpy.linalg.norm(pop), 12.32518616560702, 9)
pop, chg = mf.mulliken_pop_meta_lowdin_ao(mol, dm, pre_orth_method='minao')
self.assertAlmostEqual(numpy.linalg.norm(pop), 12.375953469399407, 9)
self.assertAlmostEqual(numpy.linalg.norm(pop), 12.375046214734942, 9)
pop, chg = mf.mulliken_pop_meta_lowdin_ao(mol, dm, pre_orth_method='scf')
self.assertAlmostEqual(numpy.linalg.norm(pop), 12.177665513480799, 9)
self.assertAlmostEqual(numpy.linalg.norm(pop), 12.177665514896324, 9)

def test_analyze(self):
numpy.random.seed(5)
nao = mol.nao_nr()
pop, chg = mf.analyze()
self.assertAlmostEqual(numpy.linalg.norm(pop), 2.8318530352895759, 9)
self.assertAlmostEqual(numpy.linalg.norm(pop), 2.8318530439275791, 9)

def test_scf(self):
self.assertAlmostEqual(mf.e_tot, -76.026765673119627, 9)
Expand Down
4 changes: 2 additions & 2 deletions scf/uhf.py
Original file line number Diff line number Diff line change
Expand Up @@ -448,9 +448,9 @@ def get_fock_(self, h1e, s1e, vhf, dm, cycle=-1, adiis=None,
if diis_start_cycle is None:
diis_start_cycle = self.diis_start_cycle
if level_shift_factor is None:
level_shift_factor = self.level_shift_factor
level_shift_factor = self.level_shift
if damp_factor is None:
damp_factor = self.damp_factor
damp_factor = self.damp
return get_fock_(self, h1e, s1e, vhf, dm, cycle, adiis,
diis_start_cycle, level_shift_factor, damp_factor)

Expand Down

0 comments on commit 0ad20d7

Please sign in to comment.