Version 1.2.3 - 2019-02-14
- A
pcmsolver_citationfunction was added which accepts a function pointer to printing facilities used in the host program.pcmsolver_citationwill print versioning and citation information for the library. Please, include a call to this function and print the returned string somewhere in your code, so that users are aware of what literature to cite when using the library.
- The list of finite elements return from the PEDRA Fortran code is now pruned to remove finite elements with area less than 1.0e-4 This avoids numerical artifacts in the formation of the PCM matrices. The number of pruned finite elements is reported when printing the cavity.
- The
pcmsolver_printfunction now only prints out the set up for the PCM calculation.
Version 1.2.2 - 2019-01-27
- Perform Gauss' theorem check on nuclear ASC upon initialization. In case a discrepancy larger than 10^-3 is detected in the absolute difference between the Gauss' theorem and computed values, calculation is aborted as this points to numerical problems, most likely in the construction of the cavity.
- Add check and test for S matrix positive-definiteness. Certain cavity discretizations lead to the S matrix not being symmetric positive-definite. We abort if that's the case.
Version 1.2.1 - 2018-05-02
- Import of local copy of the
pyparsingmodule in Getkw. Thanks @loriab for the fix. - The
conf.pydocumentation build script is restored to normal operation.
Version 1.2.0 - 2018-04-27
- Green’s function for a spherical nanoparticle with real permittivity. The Green's function is known in analytical form from the work of Messina (J. Chem. Phys. 2002, 117 (24), 11062) and Delgado et al. (J. Chem. Phys. 2013, 139 (2), 024105)
- C++03 support is effectively deprecated in favor of C++11. Support for GCC 4.6 and earlier has been dropped. Please consider upgrading your C++ compiler to a fully standard-compliant one
- The versioning machinery has been updated. The update was inspired by the
versioner.pytool devised by @loriab. - The documentation building scripts
conf.pyandcloc_tools.pyhave been thoroughly refactored and simplified:cloc_tools.pyis now calledcloc_wrapper.py. It is no longer configured and can be found in thecloc_toolssubfolder ofdoc.- A local build of documentation will only work if run from within the
docfolder:
This choice was made to simplify the set up of the ReadTheDocs and local documentation building procedures and to minimize the chances of breaking either.sphinx-build . _build - The Fortran API bindings file
pcmsolver.f90is now installed alongside thepcmsolver.hheader file. The users will have to compile it explicitly to get the type checking from the API redeclaration in Fortran 90. The file is always installed. - The
ENABLE_Fortran_APIconfiguration option has been renamedTEST_Fortran_API, since it now only triggers compilation of theFortran_hosttest case. - BREAKING CHANGE The minimum required version of CMake is now 3.3
std::string-s are now used in theMeddleobject functions manipulating the surface functions map. Explicit casts fromconst char *tostd::stringare handled in the API functions.- Properly enforce
const-correctness of theMeddleobject and of its usage in the context API. - Cholesky decomposition is used in CPCMSolver to get the inverse of the S matrix. The robust Cholesky (LDLT) previously used is broken with the latest version of the Intel compilers.
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.cmakethat adds new wrapper macros for the CMakeoptioncommand.
- 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
OBJECTlibraries. This results in a modest decrease in library size. RPATHhandling for the standalone executablerun_pcm. For the executable in<build_dir>/bintheRPATHwill contain<build_dir>/lib64(or<build_dir>/lib) as path tolibpcm.so.1. For the executable in<install_prefix>/bintheRPATHwill 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.pyscript/module was removed to address issues #111 and #112. Themainportion of the script has now been separated into ago_pcm.pyscript which can be used in the same way aspcmsolver.pywas 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_carraywas added to the Fortran bindings for the library. As the name suggests, this function "translates" a Fortran string into a Cchararray. This supersedes and replaces thepcmsolver_f2c_stringfunction. - An updated version of the
pcmsolver_newAPI 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.hppand 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 adocbuild target. - Simplified
.travis.ymland got rid of Conda to handle multiple Python versions. - Moved python scripts from
bin/tobin/pcmsolver/and introducedbin/pcmsolver/__init__.py. - The
parse_pcm_inputfunction returns the parsed input as a string without saving it to file. The old behavior can be recovered by setting thewrite_outargument 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
Sphereclass due to a redeclaration ofoperator<<. - The
plot_cavity.pyscript is now Python 3 compatible.
FortranCUtilsheader and source files were removed. Thepcmsolver_f2c_stringandpcmsolver_c2f_stringfunctions are thus gone. For the former, use the replacementpcmsolver_fstring_to_carrayfunction provided in the Fortran bindings to the library.- Some unused files have been removed:
Interpolation.hppInterpolation.cppVector2.hppVector3.hppForId.hppDerivativeUtils.hpp
- The
cavityType(),solverType(),greenInsideType(),greenOutsideType()andintegratorType()functions in theInputobject have been removed. This information is now wrapped into the corresponding input-wrappingstruct-s:CavityData,SolverData,GreenDataandBIOperatorData.
- 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
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.
- 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 onceinstead of#ifndef, #define, #endifto guard against multiple inclusion of header files. - The uppercased contents of the
.pcminput 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
.npzfiles. Currently, the.npzfile 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.npzfiles 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.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