Solvers¶
We will here describe the inheritance hierarchy for generating solvers, in order to use and extend it properly. The runtime creation of solver objects relies on the Factory Method pattern [GHJV94][Ale01], implemented through the generic Factory class.
PCMSolver¶
-
class
PCMSolver
¶ Abstract Base Class for solvers inheritance hierarchy.
We use the Non-Virtual Interface idiom.
- Author
- Luca Frediani, Roberto Di Remigio
- Date
- 2011, 2015, 2016
Subclassed by CPCMSolver, IEFSolver
Public Functions
-
void
buildSystemMatrix
(const Cavity &cavity, const IGreensFunction &gf_i, const IGreensFunction &gf_o, const BoundaryIntegralOperator &op)¶ Calculation of the PCM matrix.
- Parameters
cavity
: the cavity to be usedgf_i
: Green’s function inside the cavitygf_o
: Green’s function outside the cavityop
: integrator strategy for the single and double layer operators
-
Eigen::VectorXd
computeCharge
(const Eigen::VectorXd &potential, int irrep = 0) const¶ Returns the ASC given the MEP and the desired irreducible representation.
- Parameters
potential
: the vector containing the MEP at cavity pointsirrep
: the irreducible representation of the MEP and ASC
Protected Functions
-
virtual void
buildSystemMatrix_impl
(const Cavity &cavity, const IGreensFunction &gf_i, const IGreensFunction &gf_o, const BoundaryIntegralOperator &op) = 0¶ Calculation of the PCM matrix.
- Parameters
cavity
: the cavity to be usedgf_i
: Green’s function inside the cavitygf_o
: Green’s function outside the cavityop
: integrator strategy for the single and double layer operators
-
virtual Eigen::VectorXd
computeCharge_impl
(const Eigen::VectorXd &potential, int irrep = 0) const = 0¶ Returns the ASC given the MEP and the desired irreducible representation.
- Parameters
potential
: the vector containing the MEP at cavity pointsirrep
: the irreducible representation of the MEP and ASC
IEFSolver¶
-
class
IEFSolver
¶ IEFPCM, collocation-based solver.
- Author
- Luca Frediani, Roberto Di Remigio
- Date
- 2011, 2015, 2016
- Note
- We store the non-Hermitian, symmetry-blocked T(epsilon) and Rinfinity matrices. The ASC is obtained by multiplying the MEP by Rinfinity and then using a partially pivoted LU decomposition of T(epsilon) on the resulting vector. In case the polarization weights are requested, we use the approach suggested in [1]. First, the adjoint problem is solved: \[ \mathbf{T}_\varepsilon^\dagger \tilde{v} = v \]Also in this case a partially pivoted LU decomposition is used. The “transposed” ASC is obtained by the matrix-vector multiplication:\[ q^* = \mathbf{R}_\infty^\dagger \tilde{v} \]Eventually, the two sets of charges are summed and divided by 2 This avoids computing and storing the inverse explicitly, at the expense of storing both T(epsilon) and Rinfinity.
Inherits from PCMSolver
Public Functions
-
IEFSolver
(bool symm)¶ Construct solver.
- Parameters
symm
: whether the system matrix has to be symmetrized
-
void
buildAnisotropicMatrix
(const Cavity &cavity, const IGreensFunction &gf_i, const IGreensFunction &gf_o, const BoundaryIntegralOperator &op)¶ Builds PCM matrix for an anisotropic environment.
- Parameters
cavity
: the cavity to be used.gf_i
: Green’s function inside the cavitygf_o
: Green’s function outside the cavityop
: integrator strategy for the single and double layer operators
-
void
buildIsotropicMatrix
(const Cavity &cavity, const IGreensFunction &gf_i, const IGreensFunction &gf_o, const BoundaryIntegralOperator &op)¶ Builds PCM matrix for an isotropic environment.
- Parameters
cavity
: the cavity to be used.gf_i
: Green’s function inside the cavitygf_o
: Green’s function outside the cavityop
: integrator strategy for the single and double layer operators
Private Functions
-
void
buildSystemMatrix_impl
(const Cavity &cavity, const IGreensFunction &gf_i, const IGreensFunction &gf_o, const BoundaryIntegralOperator &op)¶ PCMSolver, an API for the Polarizable Continuum Model Copyright (C) 2016 Roberto Di Remigio, Luca Frediani and collaborators.
This file is part of PCMSolver.
PCMSolver is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
PCMSolver is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public License along with PCMSolver. If not, see http://www.gnu.org/licenses/.
For information on the complete list of contributors to the PCMSolver API, see: http://pcmsolver.readthedocs.io/
-
Eigen::VectorXd
computeCharge_impl
(const Eigen::VectorXd &potential, int irrep = 0) const¶ Returns the ASC given the MEP and the desired irreducible representation.
- Parameters
potential
: the vector containing the MEP at cavity pointsirrep
: the irreducible representation of the MEP and ASC
Private Members
-
bool
hermitivitize_
¶ Whether the system matrix has to be symmetrized
-
Eigen::MatrixXd
Tepsilon_
¶ T(epsilon) matrix, not symmetry blocked
-
std::vector<Eigen::MatrixXd>
blockTepsilon_
¶ T(epsilon) matrix, symmetry blocked form
-
Eigen::MatrixXd
Rinfinity_
¶ R_infinity matrix, not symmetry blocked
-
std::vector<Eigen::MatrixXd>
blockRinfinity_
¶ R_infinity matrix, symmetry blocked form
CPCMSolver¶
-
class
CPCMSolver
¶ Solver for conductor-like approximation: C-PCM (COSMO)
- Author
- Roberto Di Remigio
- Date
- 2013, 2016
- Note
- We store the scaled, Hermitian, symmetrized S matrix and use a robust Cholesky decomposition to solve for the ASC. This avoids computing and storing the inverse explicitly. The S matrix is already scaled by the dielectric factor entering the definition of the conductor model!
Inherits from PCMSolver
Public Functions
-
CPCMSolver
(bool symm, double corr)¶ Construct solver.
- Parameters
symm
: whether the system matrix has to be symmetrizedcorr
: factor to correct the conductor results
Private Functions
-
void
buildSystemMatrix_impl
(const Cavity &cavity, const IGreensFunction &gf_i, const IGreensFunction &gf_o, const BoundaryIntegralOperator &op)¶ Calculation of the PCM matrix.
PCMSolver, an API for the Polarizable Continuum Model Copyright (C) 2016 Roberto Di Remigio, Luca Frediani and collaborators.
- Parameters
cavity
: the cavity to be usedgf_i
: Green’s function inside the cavitygf_o
: Green’s function outside the cavityop
: integrator strategy for the single layer operator
This file is part of PCMSolver.
PCMSolver is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
PCMSolver is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public License along with PCMSolver. If not, see http://www.gnu.org/licenses/.
For information on the complete list of contributors to the PCMSolver API, see: http://pcmsolver.readthedocs.io/
-
Eigen::VectorXd
computeCharge_impl
(const Eigen::VectorXd &potential, int irrep = 0) const¶ Returns the ASC given the MEP and the desired irreducible representation.
- Parameters
potential
: the vector containing the MEP at cavity pointsirrep
: the irreducible representation of the MEP and ASC