Skip to content

Commit 1e3e27b

Browse files
committed
update berny_solver.py to work with the latest pyberny
1 parent 0f7fbba commit 1e3e27b

File tree

3 files changed

+27
-19
lines changed

3 files changed

+27
-19
lines changed

doc_legacy/source/install.rst

+1-1
Original file line numberDiff line numberDiff line change
@@ -359,7 +359,7 @@ Note TBLIS library was implemented with C++11 standard. You need at least GCC
359359

360360
Pyberny
361361
-------
362-
The geometry optimizer `Pyberny <https://github.com/azag0/pyberny>`_ provides an
362+
The geometry optimizer `Pyberny <https://github.com/jhrmnn/pyberny>`_ provides an
363363
independent implementation that supports various geometry optimization
364364
techniques (comprising redundant internal coordinates, iterative Hessian
365365
estimate, trust region, line search, and coordinate weighing etc.). It can take

doc_legacy/source/overview.rst

+1-1
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ Features
5757

5858
* Interface to Heat-bath Selected CI program `Dice <https://sanshar.github.io/Dice/>`_
5959

60-
* Interface to geometry optimizer `Pyberny <https://github.com/azag0/pyberny>`_
60+
* Interface to geometry optimizer `Pyberny <https://github.com/jhrmnn/pyberny>`_
6161

6262
.. * Interface to `pyWannier90 <https://github.com/hungpham2017/pyWannier90>`_
6363

pyscf/geomopt/berny_solver.py

+25-17
Original file line numberDiff line numberDiff line change
@@ -14,26 +14,31 @@
1414
# limitations under the License.
1515

1616
'''
17-
Interface to geometry optimizer pyberny https://github.com/azag0/pyberny
17+
Interface to geometry optimizer pyberny https://github.com/jhrmnn/pyberny
1818
'''
1919

2020
from __future__ import absolute_import
21+
import pkg_resources
2122
try:
22-
from berny import Berny, geomlib, Logger, coords
23-
except ImportError:
24-
msg = ('Geometry optimizer pyberny not found.\npyberny library '
25-
'can be found on github https://github.com/azag0/pyberny.\n'
26-
'You can install pyberny with "pip install pyberny"')
27-
raise ImportError(msg)
23+
dist = pkg_resources.get_distribution('pyberny')
24+
except pkg_resources.DistributionNotFound:
25+
dist = None
26+
if dist is None or [int(x) for x in dist.version.split('.')] < [0, 6, 2]:
27+
msg = ('Geometry optimizer Pyberny not found or outdated. Install or update '
28+
'with:\n\n\tpip install -U pyberny')
29+
raise RuntimeError(msg)
2830

2931
import time
3032
import numpy
33+
import logging
3134
from pyscf import lib
3235
from pyscf.geomopt.addons import (as_pyscf_method, dump_mol_geometry,
3336
symmetrize)
3437
from pyscf import __config__
3538
from pyscf.grad.rhf import GradientsBasics
3639

40+
from berny import Berny, geomlib, coords
41+
3742
# Overwrite pyberny's atomic unit
3843
coords.angstrom = 1./lib.param.BOHR
3944

@@ -74,11 +79,14 @@ def _geom_to_atom(mol, geom, include_ghost):
7479
def to_berny_log(pyscf_log):
7580
'''Adapter to allow pyberny to use pyscf.logger
7681
'''
77-
class BernyLogger(Logger):
78-
def __call__(self, msg, level=0):
79-
if level >= -self.verbosity:
80-
pyscf_log.info('%d %s', self.n, msg)
81-
return BernyLogger()
82+
class PyscfHandler(logging.Handler):
83+
def emit(self, record):
84+
pyscf_log.info(record.getMessage())
85+
86+
log = logging.getLogger('{}.{}'.format(__name__, id(pyscf_log)))
87+
log.addHandler(PyscfHandler())
88+
log.setLevel('INFO')
89+
return log
8290

8391

8492
def kernel(method, assert_convergence=ASSERT_CONV,
@@ -90,10 +98,10 @@ def kernel(method, assert_convergence=ASSERT_CONV,
9098
9199
.. code-block:: python
92100
conv_params = { # They are default settings
93-
'gradientmax': 0.45e-3, # Eh/Angstrom
94-
'gradientrms': 0.15e-3, # Eh/Angstrom
95-
'stepmax': 1.8e-3, # Angstrom
96-
'steprms': 1.2e-3, # Angstrom
101+
'gradientmax': 0.45e-3, # Eh/[Bohr|rad]
102+
'gradientrms': 0.15e-3, # Eh/[Bohr|rad]
103+
'stepmax': 1.8e-3, # [Bohr|rad]
104+
'steprms': 1.2e-3, # [Bohr|rad]
97105
}
98106
from pyscf.geomopt import berny_solver
99107
opt = berny_solver.GeometryOptimizer(method)
@@ -131,7 +139,7 @@ def kernel(method, assert_convergence=ASSERT_CONV,
131139
# temporary interface, taken from berny.py optimize function
132140
berny_log = to_berny_log(log)
133141
geom = to_berny_geom(mol, include_ghost)
134-
optimizer = Berny(geom, log=berny_log, **kwargs)
142+
optimizer = Berny(geom, logger=berny_log, **kwargs)
135143

136144
t1 = t0
137145
e_last = 0

0 commit comments

Comments
 (0)