Version 1.2.0-rc1 - 2018-03-02
- Double logarithmic scale for the integration of spherical diffuse interfaces: much more stable than the previous version, allowing for Runge-Kutta 4 integrator.
- A new CMake module
options_wrappers.cmake
that adds new wrapper macros for the CMakeoption
command.
- Bug in the diffuse interface Green's function. Contrary to the sharp interface case, it is wrong to remove the monopole, which becomes identically zero when the corresponding differential equation is solved in extreme cases (e.g. charge far away from the sphere).
- Visibility of symbols in the shared library is finally handled properly.
The necessary flags to the C++ compiler were not set for the subtargets built
as CMake
OBJECT
libraries. This results in a modest decrease in library size. RPATH
handling for the standalone executablerun_pcm
. For the executable in<build_dir>/bin
theRPATH
will contain<build_dir>/lib64
(or<build_dir>/lib
) as path tolibpcm.so.1
. For the executable in<install_prefix>/bin
theRPATH
will contain<install_prefix>/lib64
(or<install_prefix>/lib
) as path tolibpcm.so.1
.- Code coverage analysis was restored. We now use Codecov. Thanks @arnfinn 🎉
- BREAKING CHANGE The layout of the installation for the Python scripts has
been changed. This addresses issue #116. Given the user-defined installation
prefix (
<prefix>
) one would obtain:<prefix>/pcmsolver ├── bin │ ├── go_pcm.py │ ├── plot_cavity.py │ └── run_pcm ├── include │ └── PCMSolver │ ├── bi_operators │ ├── cavity │ ├── Citation.hpp │ ├── Config.hpp │ ├── Cxx11Workarounds.hpp │ ├── ErrorHandling.hpp │ ├── external │ ├── GitInfo.hpp │ ├── green │ ├── interface │ ├── LoggerInterface.hpp │ ├── PCMInput.h │ ├── PCMSolverExport.h │ ├── pcmsolver.h │ ├── PhysicalConstants.hpp │ ├── solver │ ├── STLUtils.hpp │ ├── TimerInterface.hpp │ └── utils ├── lib64 │ ├── libpcm.a │ ├── libpcm.so -> libpcm.so.1 │ ├── libpcm.so.1 │ └── python │ └── pcmsolver └── share └── cmake └── PCMSolver
- As a result of the visibility change, unit tests can only be linked against the static library, since all symbols are always visible in a static archive library.
- BREAKING CHANGE The
pcmsolver.py
script/module was removed to address issues #111 and #112. Themain
portion of the script has now been separated into ago_pcm.py
script which can be used in the same way aspcmsolver.py
was used before: to parse the PCMSolver input and to run the module standalone. This separation greatly simplifies the use as a module within the Python launcher scripts of host programs.
Version 1.1.12 - 2018-01-20
- The function
pcmsolver_fstring_to_carray
was added to the Fortran bindings for the library. As the name suggests, this function "translates" a Fortran string into a Cchar
array. This supersedes and replaces thepcmsolver_f2c_string
function. - An updated version of the
pcmsolver_new
API function has been introduced. The full name of the function ispcmsolver_new_v1112
(to avoid API breakage) and accepts as additional argument the name of the parsed input file generated bypcmsolver.py
. This allows to decoupled parsing and writing out the parsed file, in case directory-specific operations have to be performed by the host program.
- Dispatching of Green’s functions in the factory is purely label-based. The
input reader generates a string that holds the type of the Green’s function,
the strategy for calculating its normal derivatives and the dielectric
profile (if needed):
TYPE_DERIVATIVE_PROFILE
. The Green’s functions are subscribed to the factory using this label, which is then also the one used for their creation. Iteration over lists of types to dispatch the correct template parameters is thus completely avoided. This removes the dependency on the metafunctions inForId.hpp
and the dependency on Boost.MPL, the Boost metaprogramming library. - Dispatching of quadrature rules for the numerical boundary integral operator has been rewritten, removing the dependency on Boost.MPL.
- The input wrapping data
struct
-s have been modified to include the string defining the type of object and to remove now unused information. - Documentation building is fully handled via
sphinx-build
: CMake will no longer generate adoc
build target. - Simplified
.travis.yml
and got rid of Conda to handle multiple Python versions. - Moved python scripts from
bin/
tobin/pcmsolver/
and introducedbin/pcmsolver/__init__.py
. - The
parse_pcm_input
function returns the parsed input as a string without saving it to file. The old behavior can be recovered by setting thewrite_out
argument toTrue
. - The Catch unit test framework has been updated to its latest version still supporting C++03 v1.11.0
- Travis continuous integration is no longer run on Mac infrastructure.
- Documentation building on ReadTheDocs is fully functional again, thanks @arnfinn 🎉 The build had been failing for a while since docs were generated for all files, including documentation files from previous build. Besides, source code doxygen blocks were not extracted when inside namespaces.
- Compiler warning in the
Sphere
class due to a redeclaration ofoperator<<
. - The
plot_cavity.py
script is now Python 3 compatible.
FortranCUtils
header and source files were removed. Thepcmsolver_f2c_string
andpcmsolver_c2f_string
functions are thus gone. For the former, use the replacementpcmsolver_fstring_to_carray
function provided in the Fortran bindings to the library.- Some unused files have been removed:
Interpolation.hpp
Interpolation.cpp
Vector2.hpp
Vector3.hpp
ForId.hpp
DerivativeUtils.hpp
- The
cavityType()
,solverType()
,greenInsideType()
,greenOutsideType()
andintegratorType()
functions in theInput
object have been removed. This information is now wrapped into the corresponding input-wrappingstruct
-s:CavityData
,SolverData
,GreenData
andBIOperatorData
.
- We are in the process of removing the dependency on the Boost libraries. The only dependency on Boost allowed in the 1.Y.Z release series will be for replacing C++11 functionality that is missing from the C++98 standard. For such code, we will require a pure C++11 counterpart.
Version 1.1.11 - 2017-10-25
- A Python script, using Matplotlib, to plot the cavity. The script can also color-map the finite elements according to the values of a surface function.
- The input learnt to parse the additional
ChargeDistribution
section. It is possible to specify a classical charge distribution of point multipoles. This can be an additional source of electrostatic potential for the calculation of the ASC. - Restored compilation for g++ < v5.1.
- Ninja can be used as a generator. Notice that at least CMake 3.7.2 and the Kitware-maintained version of Ninja are required to successfully compile.
- Use
#pragma once
instead of#ifndef, #define, #endif
to guard against multiple inclusion of header files. - The uppercased contents of the
.pcm
input file are written to a temporary file, instead of overwriting the user provided file. The temporary file is removed after it has been parsed. Fixes #91 as noted by @ilfreddy. - Use Runge-Kutta-Fehlberg 7(8) ODE solver to integrate the radial equation in the spherical diffuse Green's function class.
- A bug in the initialization of a restart cavity from old
.npz
files. Currently, the.npz
file saves sphere center, arcs and vertices of each finite element. This information is in fact needed to plot the cavity using the Python script intools
. Older.npz
files did not contain this information and could not be read in. The additional information is read in as arrays of zeros in case it is not present on file.
Version 1.1.10 - 2017-03-27
- Updated the
cloc.pl
script to version 1.72 - Simplified the internal structure of the
Meddle
andInput
objects. - Export dependency on Zlib for the static libraries. Thanks @loriab for the pull request fixing a build problem within Psi4
Version 1.1.9 - 2017-02-16
- PCMSolver is now exported as a proper CMake target See PR #38 for details. Thanks @loriab for the work.
- The Python scripts shipped with the library are now Python 2 and Python 3 compatible.
Factory
is no longer implemented as a Singleton.- The Catch unit test framework has been updated to its latest version v1.7.2
- Updated the version of Eigen bundled with the code. The minimum required version of Eigen is still 3.3.0, but we ship Eigen 3.3.2
- Revert to use Robust Cholesky decomposition
to compute the inverse of the S matrix in
CPCMSolver
.
Version 1.1.8 - 2017-02-06
- Namespaces for all of the internal code have been introduced.
The top-level namespace is
pcm
. At finer levels the namespaces have the same names as the respective subdirectories. Read the programmers' documentation for further details on the use of namespaces in the project. Related to issue #34 on GitHub and #60 on GitLab. - The top-level, convenience header
BoundaryIntegralOperator.hpp
includes all subclasses and utility headers in thebi_operators
subdirectory. Related to issue #34 on GitHub and #60 on GitLab. - The top-level, convenience header
Cavity.hpp
includes all subclasses and utility headers in thecavity
subdirectory. Related to issue #34 on GitHub and #60 on GitLab. - The top-level, convenience header
Green.hpp
includes all subclasses and utility headers in thegreen
subdirectory. Related to issue #34 on GitHub and #60 on GitLab. - The top-level, convenience header
Solver.hpp
includes all subclasses and utility headers in thesolver
subdirectory. Related to issue #34 on GitHub and #60 on GitLab.
- The abstract base class for the boundary integral operator integrators has
been renamed
IBoundaryIntegralOperator
. The relevant factory is bootstrapped upon creation of theMeddle
object, i.e. at library initialization. Related to issue #34 on GitHub and #60 on GitLab. - The abstract base class for the cavities has been renamed
ICavity
. The relevant factory is bootstrapped upon creation of theMeddle
object, i.e. at library initialization. Related to issue #34 on GitHub and #60 on GitLab. - The abstract base class for the solvers has been renamed
ISolver
. The relevant factory is bootstrapped upon creation of theMeddle
object, i.e. at library initialization. Related to issue #34 on GitHub and #60 on GitLab. - The
typedef
for numerical differentiation in the Green's function classes has been renamedStencil
to avoid name clashes with theNumerical
boundary integral operator type.
- A bug in the selection of the extended diagnostics flags for the GNU C++ compiler. These flags are now enabled only for versions >= 5.1.0 and when the C++11 standard is enable. Fixes issue #36 on GitHub and #62 on GitLab.
- A bug in the initialization of the factory for the cavity classes was fixed.
The bug manifested only in the static library
libpcm.a
Fixes issue #34 on GitHub and #60 on GitLab.
Version 1.1.7 - 2016-12-01
- A pre-commit hook in
.githooks/pre-commit-clang-format
checking that the format of C++ header and source files conforms to the project style. The hook usesclang-format
and the style mandated by the.clang-format
file to check files in the tree. Commit is rejected if one or more files are non compliant. The hook generates a patch and shows the command needed to apply it. To enable the hooks you need to have a.git/hooks/pre-commit
file containing this line.githooks/pre-commit
NOT recommended The hook can be skipped by passing the--no-verify
option togit commit
- A pre-commit hook in
.githooks/pre-commit-license-maintainer
checking the license headers. The hook is configured based on the.gitattributes
file. The hook will check the license headers and amend them, either by updating the year and authors information or by adding the whole header. To enable the hooks you need to have a.git/hooks/pre-commit
file containing this line.githooks/pre-commit
NOT recommended The hook can be skipped by passing the--no-verify
option togit commit
- An
UNUSED
preprocessor macro to mark arguments as unused. - An
UNUSED_FUNCTION
preprocessor macro to mark functions as unused. - A set of preprocessor macros with Git information (
GIT_COMMIT_HASH
,GIT_COMMIT_AUTHOR
,GIT_COMMIT_DATE
andGIT_BRANCH
) is automatically generated and saved in thegit_info.h
header file. - An API function to print the contents of a surface function to the host program output.
- An API function to get the dipole moment, relative to the origin, due to the ASC on the cavity. Both the norm and the components can be obtained.
.gitattributes
now instructs Git to ignore binary files in diff operations. PNG files are diff-ed using EXIF information. To set this up properly, install an EXIF tool on your machine and rungit config diff.exif.textconv exiftool
in your local copy of the repository.
- The Fortran bindings file has been renamed
pcmsolver.f90
. - The Green's function, solver and boundary integral operator classes have been radically redesigned. This avoids coupling between integrators and Green's function that existed in the previous design. See the Green's function code reference for a more detailed explanation.
- BREAKING CHANGE The minimum required version of Eigen is now 3.3.0 The version bundled with the code has been accordingly updated.
- The
PCMSOLVER_ERROR
macro now takes only one argument and prints out a more informative error message. - Switched to the latest version of Autocmake The configuration file is now YAML-based. The PyYAML module is thus required.
- The extended diagnostic flags
-Wsuggest-attribute=pure -Wsuggest-attribute=const -Wsuggest-attribute=noreturn -Wsuggest-final-types -Wsuggest-final-methods -Wsuggest-override -Wuseless-cast -Wunsafe-loop-optimizations
are always set when using the GNU C++ compiler in a debug configuration. - The C++11 compatibility CMake macros now check for the availability of the
noreturn
attribute. A workaround macro, accessible via__noreturn
, has been added to theCxx11Workarounds.hpp
header file. - BREAKING CHANGE The ouput flushing function must be passed explicitly as
a function pointer to the
pcmsolver_new
function during library initialization. The function pointer has the signaturetypedef void (*HostWriter)(const char * message)
thus accepting a single argument instead of the previous two. - GNU standard installation
directories
have been imposed, thanks to work by @loriab.
Given a prefix, header files are now installed to
include/pcmsolver
, executables tobin
, libraries tolib
and scripting tools toshare
. The install prefix and the installation directories can be specified by the--prefix
,--bindir
,--libdir
,--includedir
and--datadir
options to thesetup.py
script (or the corresponding CMake variables)
Version 1.1.6 - 2016-09-20
- A function returning a molecule object for the water molecule.
- Cholesky decomposition is used whenever the inverse of the S matrix has to be calculated. The S matrix is self-adjoint, positive-definite and the LLT decomposition is faster than LDLT.
- Some inconsistencies in input reading from host and a related memory leak in the radii initialization.
Version 1.1.5 - 2016-07-19
- A radii set derived from Allinger's MM3 model can now be chosen to build the van der Waals cavity surface. Notice that the values reported in the original paper are divided by 1.2, to match the default radii set used in ADF The closest match to ADF can be obtained by using CPCM as solver, Allinger's radii and setting the scaling of radii to false.
Version 1.1.4 - 2016-07-05
- The
CPCMSolver
object now stores the scaled, Hermitian, symmetry-adapted S matrix. Polarization weights are then directly computed from the incoming MEP. - The
IEFSolver
object now stores the non-Hermitian, symmetry-adapted T and R matrices. The explicit calculation of the inverse of T is thus avoided. However, two square matrices of size equal to the cavity size are stored instead of just one. To obtain the polarization weights two linear systems of equations are solved. A partially pivoted LU decomposition is used to solve the linear system(s). The strategy used in v1.1.3 suffered from a reduced numerical accuracy, due to the fact that the polarization weights were not correctly defined.
- The
hermitivitize
function will only work correctly on matrices. This reverts modifications in the previous release.
Version 1.1.3 - 2016-07-03
- The
PEDRA.OUT
cavity generator log now reports the initial and final lists of spheres. The final list only contains those spheres that were actually tesselated and, possibly, the added spheres. - For all solvers, the symmetrization needed to obtain the polarization weights happens directly on the computed charges, instead of symmetrizing the system matrices.
- The
IEFSolver
object stores the unsymmetrized T^-1R matrices. A partially pivoted LU decomposition is used to compute T^-1R. A robust Cholesky decomposition is used to form the R matrix in the anisotropic IEF case. - The
CPCMSolver
object now stores the scaled, unsymmetrized S matrix. The explicit calculation and storage of its inverse is thus avoided. A robust Cholesky decomposition is used to solve the linear equation system. - The
hermitivitize
function can now correctly symmetrize vectors.
- A fix for the initialization of the explicit list of spheres when running the
standalone executable. The bug prevented the generation of the correct
Molecule
object, with subsequent failure in the cavity generator. - A memory leak occuring in the cavity generator PEDRA was fixed. This was uncovered by @shoefener and manifested only with considerably large cavities (> 200 input spheres)
- The function
CPCMMatrix
in theSolverImpl.hpp
header file is no longer available.
Version 1.1.2 - 2016-05-31
- Signatures for strings in Fortran90 bindings. They have now the proper
C interoperable type
character(kind=c_char, len=1) :: label(lbl_size)
. For the host this means that surface function labels will have to be declared as character arrays, for example:character :: label(7) = (/'T', 'o', 't', 'M', 'E', 'P', char(0)/)
- More informative error messages for runtime crashes caused by access to surface functions.
- The signatures for the interface functions now accept and/or return
int
(c_int
) instead ofsize_t
(c_size_t
). This simplifies interfacing with Fortran hosts.
Version 1.1.1 - 2016-03-10
- A runtime check to ensure that all atoms have a nonzero radius. API kills program execution if this is the case.
- An API function to retrieve the areas/weights of the cavity finite elements. The values in the returned array are in Bohr^2. Addresses a feature request from @shoefener (Issue #13)
- The standalone executable
run_pcm
is now tested within the unit tests suite. The tests cover the cases where the cavity is given implicitly, explicitly or by substitution of radii on chosen atoms.
- Boundary integral operators classes learnt to accept a scaling factor for the diagonal elements of the approximate collocation matrices. The change is reflected in the Green's funtion classes and in the input parsing. Addresses a feature request from @shoefener (Issue #16)
GePolCavity
learnt to print also the list of spheres used to generate the cavity.- Different internal handling of conversion factors from Bohr to Angstrom.
- CMake minimum required version is 2.8.10
Atom
,Solvent
andSphere
are now PODs. The radii and solvent lists are free functions.PCMSOLVER_ERROR
kills program execution when an error arises but does not use C++ exceptions.include
-s are now specified on a per-directory basis (see programmers' manual for a more detailed explanation)- Default types for template paramters
DerivativeTraits
,IntegratorPolicy
andProfilePolicy
are now given for the Green's functions classes. This reduced the verbosity in instatiating these objects significantly.
- The new printer in
GePolCavity
might not work properly when an explicit list of spheres is provided in the input. - On Ubuntu 12.10, 32 bit the Intel compiler version 2013.1 produces a faulty
library. It is possibly a bug in the implementation of
iso_c_binding
, see Issue #25
SurfaceFunction
as a class is no longer available. We keep track of surface functions at the interface level via a label-vector map.
Version 1.1.0 - 2016-02-07
- Green's function for diffuse interfaces in spherical symmetry
- CMake minimum required version is 2.8.8 (2016-01-08)
- Documentation is now served here