- 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
ChargeDistributionsection. 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.
Version 1.1.10 - 2017-03-27
- Updated the
cloc.plscript to version 1.72 - Simplified the internal structure of the
MeddleandInputobjects. - 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.
Factoryis 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.hppincludes all subclasses and utility headers in thebi_operatorssubdirectory. Related to issue #34 on GitHub and #60 on GitLab. - The top-level, convenience header
Cavity.hppincludes all subclasses and utility headers in thecavitysubdirectory. Related to issue #34 on GitHub and #60 on GitLab. - The top-level, convenience header
Green.hppincludes all subclasses and utility headers in thegreensubdirectory. Related to issue #34 on GitHub and #60 on GitLab. - The top-level, convenience header
Solver.hppincludes all subclasses and utility headers in thesolversubdirectory. 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 theMeddleobject, 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 theMeddleobject, 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 theMeddleobject, i.e. at library initialization. Related to issue #34 on GitHub and #60 on GitLab. - The
typedeffor numerical differentiation in the Green's function classes has been renamedStencilto avoid name clashes with theNumericalboundary 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.aFixes issue #34 on GitHub and #60 on GitLab.
Version 1.1.7 - 2016-12-01
- A pre-commit hook in
.githooks/pre-commit-clang-formatchecking that the format of C++ header and source files conforms to the project style. The hook usesclang-formatand the style mandated by the.clang-formatfile 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-commitfile containing this line.githooks/pre-commitNOT recommended The hook can be skipped by passing the--no-verifyoption togit commit - A pre-commit hook in
.githooks/pre-commit-license-maintainerchecking the license headers. The hook is configured based on the.gitattributesfile. 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-commitfile containing this line.githooks/pre-commitNOT recommended The hook can be skipped by passing the--no-verifyoption togit commit - An
UNUSEDpreprocessor macro to mark arguments as unused. - An
UNUSED_FUNCTIONpreprocessor macro to mark functions as unused. - A set of preprocessor macros with Git information (
GIT_COMMIT_HASH,GIT_COMMIT_AUTHOR,GIT_COMMIT_DATEandGIT_BRANCH) is automatically generated and saved in thegit_info.hheader 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.
.gitattributesnow 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 exiftoolin 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_ERRORmacro 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-optimizationsare 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
noreturnattribute. A workaround macro, accessible via__noreturn, has been added to theCxx11Workarounds.hppheader file. - BREAKING CHANGE The ouput flushing function must be passed explicitly as
a function pointer to the
pcmsolver_newfunction 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 toliband scripting tools toshare. The install prefix and the installation directories can be specified by the--prefix,--bindir,--libdir,--includedirand--datadiroptions to thesetup.pyscript (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
CPCMSolverobject now stores the scaled, Hermitian, symmetry-adapted S matrix. Polarization weights are then directly computed from the incoming MEP. - The
IEFSolverobject 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
hermitivitizefunction will only work correctly on matrices. This reverts modifications in the previous release.
Version 1.1.3 - 2016-07-03
- The
PEDRA.OUTcavity 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
IEFSolverobject 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
CPCMSolverobject 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
hermitivitizefunction 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
Moleculeobject, 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
CPCMMatrixin theSolverImpl.hppheader 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_pcmis 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)
GePolCavitylearnt 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,SolventandSphereare now PODs. The radii and solvent lists are free functions.PCMSOLVER_ERRORkills 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,IntegratorPolicyandProfilePolicyare now given for the Green's functions classes. This reduced the verbosity in instatiating these objects significantly.
- The new printer in
GePolCavitymight 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
SurfaceFunctionas 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