Helper classes and functions¶
Input¶
-
class
Input
¶ A wrapper class for the Getkw Library C++ bindings.
An Input object is to be used as the unique point of access to user-provided input: input > parsed input (Python script) > Input object (contains all the input data) Definition of input parameters is to be done in the Python script and in this class. They must be specified as private data members with public accessor methods (get-ters). Most of the data members are anyway accessed through the input wrapping struct-s In general, no mutator methods (set-ters) should be needed, exceptions to this rule should be carefully considered.
- Author
- Roberto Di Remigio
- Date
- 2013
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
- 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