Helper classes and functions¶
Input¶
Warning
doxygenclass: Cannot find class “Input” in doxygen xml output for project “PCMSolver” from directory: xml
Molecule¶
Warning
doxygenclass: Cannot find class “Molecule” in doxygen xml output for project “PCMSolver” from directory: xml
Solvent¶
Symmetry¶
Mathematical utilities¶
-
namespace
pcm
¶ PCMSolver, an API for the Polarizable Continuum Model Copyright (C) 2017 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/
-
namespace
utils
¶ Functions
- template <size_t nBits>
-
int
parity
(std::bitset<nBits> bitrep)¶ Calculate the parity of the bitset as defined by: bitrep[0] XOR bitrep[1] XOR ... XOR bitrep[nBits-1]
- Parameters
bitrep
: a bitset
- Template Parameters
nBits
: lenght of the input bitset
-
double
parity
(unsigned int i)¶ Returns parity of input integer. The parity is defined as the result of using XOR on the bitrep of the given integer. For example: 2 -> 010 -> 0^1^0 = 1 -> -1.0 6 -> 110 -> 1^1^0 = 0 -> 1.0
- Parameters
i
: an integer, usually an index for an irrep or a symmetry operation
It can also be interpreted as the action of a given operation on the Cartesian axes: zyx Parity 0 000 E 1.0 1 001 Oyz -1.0 2 010 Oxz -1.0 3 011 C2z 1.0 4 100 Oxy -1.0 5 101 C2y 1.0 6 110 C2x 1.0 7 111 i -1.0
-
bool
isZero
(double value, double threshold)¶ Returns true if value is less or equal to threshold
- Parameters
value
: the value to be checkedthreshold
: the threshold
-
bool
numericalZero
(double value)¶ Returns true if value is less than 1.0e-14
- Parameters
value
: the value to be checked
-
void
symmetryBlocking
(Eigen::MatrixXd &matrix, PCMSolverIndex cavitySize, PCMSolverIndex ntsirr, int nr_irrep)¶
-
void
symmetryPacking
(std::vector<Eigen::MatrixXd> &blockedMatrix, const Eigen::MatrixXd &fullMatrix, int dimBlock, int nrBlocks)¶ - Parameters
blockedMatrix
: the result of packing fullMatrixfullMatrix
: the matrix to be packeddimBlock
: the dimension of the square blocksnrBlocks
: the number of square blocks
- template <typename Derived>
-
void
hermitivitize
(Eigen::MatrixBase<Derived> &obj_)¶ Given obj_ returns 0.5 * (obj_ + obj_^dagger)
- Note
- We check if a matrix or vector was given, since in the latter case we only want the complex conjugation operation to happen.
- Parameters
obj_
: the Eigen object to be hermitivitized
- Template Parameters
Derived
: the numeric type of obj_ elements
-
void
eulerRotation
(Eigen::Matrix3d &R_, const Eigen::Vector3d &eulerAngles_)¶ Build rotation matrix between two reference frames given the Euler angles.
We assume the convention \( R = Z_3 X_2 Z_1 \) for the ordering of the extrinsic elemental rotations (see http://en.wikipedia.org/wiki/Euler_angles) The Euler angles are given in the order \( \phi, \theta, \psi \). If we write \( c_i, s_i \,\, i = 1, 3 \) for their cosines and sines the rotation matrix will be:
\[\begin{split} R = \begin{pmatrix} c_1c_3 - s_1c_2s_3 & -s_1c_3 - c_1c_2s_3 & s_2s_3 \\ c_1s_3 + s_1c_2c_3 & -s_1s_3 + c_1c_2c_3 & -s_2c_3 \\ s_1s_2 & c_1s_2 & c_2 \end{pmatrix} \end{split}\]Eigen’s geometry module is used to calculate the rotation matrix- Parameters
R_
: the rotation matrixeulerAngles_
: the Euler angles, in degrees, describing the rotation
-
double
linearInterpolation
(const double point, const std::vector<double> &grid, const std::vector<double> &function)¶ Return value of function defined on grid at an arbitrary point.
This function finds the nearest values for the given point and performs a linear interpolation.
- Warning
- This function assumes that grid has already been sorted!
- Parameters
point
: where the function has to be evaluatedgrid
: holds points on grid where function is knownfunction
: holds known function values
-
double
splineInterpolation
(const double point, const std::vector<double> &grid, const std::vector<double> &function)¶ Return value of function defined on grid at an arbitrary point.
This function finds the nearest values for the given point and performs a cubic spline interpolation.
- Warning
- This function assumes that grid has already been sorted!
- Parameters
point
: where the function has to be evaluatedgrid
: holds points on grid where function is knownfunction
: holds known function values
- template <typename Derived>
-
void
print_eigen_matrix
(const Eigen::MatrixBase<Derived> &matrix, const std::string &fname)¶ Prints Eigen object (matrix or vector) to file.
- Note
- This is for debugging only, the format is in fact rather ugly. Row index Column index Matrix entry 0 0 0.0000
- Parameters
matrix
: Eigen objectfname
: name of the file
- Template Parameters
Derived
: template parameters of the MatrixBase object
-
namespace
-
namespace
cnpy
¶ -
namespace
custom
¶ Custom overloads for cnpy load and save functions
Functions
- template <typename Scalar, int Rows, int Cols>
-
void
npy_save
(const std::string &fname, const Eigen::Matrix<Scalar, Rows, Cols> &obj)¶ Save Eigen object to NumPy array file.
- Parameters
fname
: name of the NumPy array fileobj
: Eigen object to be saved, either a matrix or a vector
- Template Parameters
Scalar
: the data type of the matrix to be returned. Default is doubleRows
: number of rows in the Eigen object. Default is dynamic eCols
: number of columns in the Eigen object. Default is dynamic
- template <typename Scalar, int Rows, int Cols>
-
void
npz_save
(const std::string &fname, const std::string &name, const Eigen::Matrix<Scalar, Rows, Cols> &obj, bool overwrite = false)¶ Save Eigen object to a compressed NumPy file.
- Parameters
fname
: name of the compressed NumPy filename
: tag for the given object in the compressed NumPy fileobj
: Eigen object to be saved, either a matrix or a vectoroverwrite
: if file exists, overwrite. Appends by default.
- Template Parameters
Scalar
: the data type of the matrix to be returned. Default is doubleRows
: number of rows in the Eigen object. Default is dynamicCols
: number of columns in the Eigen object. Default is dynamic
- template <typename Scalar>
-
Eigen::Matrix<Scalar, Eigen::Dynamic, Eigen::Dynamic>
npy_to_eigen
(const NpyArray &npy_array)¶ Load NpyArray object into Eigen object.
- Return
- An Eigen object (matrix or vector) with the data
- Warning
- We check that the rank of the object read is not more than 2 Eigen cannot handle general tensors.
- Parameters
npy_array
: the NpyArray object
- Template Parameters
Scalar
: the data type of the matrix to be returned. Default is double
- template <typename Scalar>
-
Eigen::Matrix<Scalar, Eigen::Dynamic, Eigen::Dynamic>
npy_load
(const std::string &fname)¶ Load NumPy array file into Eigen object.
- Return
- An Eigen object (matrix or vector) with the data
- Parameters
fname
: name of the NumPy array file
- Template Parameters
Scalar
: the data type of the matrix to be returned. Default is double
-
namespace