| Collective Variables Module - Developer Documentation
    | 
Helper class for calculating the derivative of rotation. More...
#include <colvar_rotation_derivative.h>


| Public Member Functions | |
| rotation_derivative (const cvm::rotation &rot, const std::vector< cvm::real > &pos1, const std::vector< cvm::real > &pos2, const size_t num_atoms_pos1, const size_t num_atoms_pos2) | |
| Constructor of the cvm::rotation::derivative class for SOA.  More... | |
| void | prepare_derivative (rotation_derivative_dldq require_dl_dq) | 
| This function must be called before calc_derivative_wrt_group1andcalc_derivative_wrt_group2in order to prepare the tmp_Q0Q0 and tmp_Q0Q0_L.  More... | |
| template<bool use_dl, bool use_dq, bool use_ds> | |
| void | calc_derivative_impl (const cvm::rvector(&ds)[4][4], cvm::rvector *_noalias const dl0_out, std::array< cvm::rvector, 4 > *_noalias const dq0_out, std::array< std::array< cvm::rvector, 4 >, 4 > *_noalias const ds_out) const | 
| Actual implementation of the derivative calculation.  More... | |
| template<bool use_dl, bool use_dq, bool use_ds> | |
| void | calc_derivative_wrt_group1 (size_t ia, cvm::rvector *_noalias const dl0_1_out=nullptr, std::array< cvm::rvector, 4 > *_noalias const dq0_1_out=nullptr, std::array< std::array< cvm::rvector, 4 >, 4 > *_noalias const ds_1_out=nullptr) const | 
| Calculate the derivatives of S, the leading eigenvalue L and the leading eigenvector Q with respect to m_pos1More... | |
| template<bool use_dl, bool use_dq, bool use_ds> | |
| void | calc_derivative_wrt_group2 (size_t ia, cvm::rvector *_noalias const dl0_2_out=nullptr, std::array< cvm::rvector, 4 > *_noalias const dq0_2_out=nullptr, std::array< std::array< cvm::rvector, 4 >, 4 > *_noalias const ds_2_out=nullptr) const | 
| Calculate the derivatives of S, the leading eigenvalue L and the leading eigenvector Q with respect to m_pos2More... | |
| template<int i> | |
| cvm::rmatrix | project_force_to_C_from_dxdqi (cvm::real f_on_q) const | 
| Project the force on \(q_i\) (or the gradient of \(\frac{\mathrm{d}x}{\mathrm{d}q_i}\)) to the force on the correlation matrix \(C=\mathbf{r}_1^\intercal\mathbf{r}_2\), where \(\mathbf{r}_1\) and \(\mathbf{r}_2\) are \(N\times 3\) matrices containing the atom positions of atom group 1 and atom group 2 after centering on origin.  More... | |
| template<typename dim4_array_t > | |
| cvm::rmatrix | project_force_to_C_from_dxdq (const dim4_array_t &sum_dxdq) const | 
| Project the force on \(\mathbf{q}\) (or the gradient of \(\frac{\mathrm{d}x}{\mathrm{d}q_i}\)) to the force on the correlation matrix \(C=\mathbf{r}_1^\intercal\mathbf{r}_2\), where \(\mathbf{r}_1\) and \(\mathbf{r}_2\) are \(N\times 3\) matrices containing the atom positions of atom group 1 and atom group 2 after centering on origin.  More... | |
| cvm::rvector | project_force_to_group1 (size_t ia, const cvm::rmatrix &dxdC) const | 
| Project the force on the correlation matrix \(C\) to \(\mathbf{r}_1\).  More... | |
| cvm::rvector | project_force_to_group2 (size_t ia, const cvm::rmatrix &dxdC) const | 
| Project the force on the correlation matrix \(C\) to \(\mathbf{r}_2\).  More... | |
| Public Attributes | |
| const cvm::rotation & | m_rot | 
| Reference to the rotation. | |
| std::vector< cvm::real >::const_iterator | pos1x | 
| Reference to the atom positions of group 1. | |
| std::vector< cvm::real >::const_iterator | pos1y | 
| std::vector< cvm::real >::const_iterator | pos1z | 
| std::vector< cvm::real >::const_iterator | pos2x | 
| Reference to the atom positions of group 2. | |
| std::vector< cvm::real >::const_iterator | pos2y | 
| std::vector< cvm::real >::const_iterator | pos2z | 
| size_t | m_num_atoms_pos1 | 
| Number of atoms in group1 (used in SOA) | |
| size_t | m_num_atoms_pos2 | 
| Number of atoms in group1 (used in SOA) | |
| cvm::real | tmp_Q0Q0 [4][4] | 
| Temporary variable that will be updated if prepare_derivative called. | |
| cvm::real | tmp_Q0Q0_L [4][4][4] | 
Helper class for calculating the derivative of rotation.
| 
 | inline | 
Constructor of the cvm::rotation::derivative class for SOA.
| [in] | rot | The cvm::rotation object (must have called calc_optimal_rotationbefore callingcalc_derivative_wrt_group1andcalc_derivative_wrt_group2) | 
| [in] | pos1 | The atom positions of group 1 | 
| [in] | pos2 | The atom positions of group 2 | 
| [in] | num_atoms_pos1 | The number of atoms in group1 | 
| [in] | num_atoms_pos2 | The number of atoms in group2 | 
| 
 | inline | 
Actual implementation of the derivative calculation.
| [in] | ds | The derivative of matrix S with respect to an atom of either group 1 or group 2 | 
| [out] | dl0_out | The output of derivative of L | 
| [out] | dq0_out | The output of derivative of Q | 
| [out] | ds_out | The output of derivative of overlap matrix S | 
| 
 | inline | 
Calculate the derivatives of S, the leading eigenvalue L and the leading eigenvector Q with respect to m_pos1 
| [in] | ia | The index the of atom | 
| [out] | dl0_1_out | The output of derivative of L with respect to ia-th atom of group 1 | 
| [out] | dq0_1_out | The output of derivative of Q with respect to ia-th atom of group 1 | 
| [out] | ds_1_out | The output of derivative of overlap matrix S with respect to ia-th atom of group 1 | 
| 
 | inline | 
Calculate the derivatives of S, the leading eigenvalue L and the leading eigenvector Q with respect to m_pos2 
| [in] | ia | The index the of atom | 
| [out] | dl0_2_out | The output of derivative of L with respect to ia-th atom of group 2 | 
| [out] | dq0_2_out | The output of derivative of Q with respect to ia-th atom of group 2 | 
| [out] | ds_2_out | The output of derivative of overlap matrix S with respect to ia-th atom of group 2 | 
| 
 | inline | 
This function must be called before calc_derivative_wrt_group1 and calc_derivative_wrt_group2 in order to prepare the tmp_Q0Q0 and tmp_Q0Q0_L. 
| [in] | require_dl_dq | Require the calculation of the derivatives of L or/and Q with respect to atoms. | 
| 
 | inline | 
Project the force on \(\mathbf{q}\) (or the gradient of \(\frac{\mathrm{d}x}{\mathrm{d}q_i}\)) to the force on the correlation matrix \(C=\mathbf{r}_1^\intercal\mathbf{r}_2\), where \(\mathbf{r}_1\) and \(\mathbf{r}_2\) are \(N\times 3\) matrices containing the atom positions of atom group 1 and atom group 2 after centering on origin.
See also project_force_to_C_from_dxdqi().
| dim4_array_t | The type of force acting on \(\mathbf{q}\). | 
| [in] | sum_dxdq | The force on \(\mathbf{q}\) or the gradient vector \((\frac{\mathrm{d}x}{\mathrm{d}q_0}, \frac{\mathrm{d}x}{\mathrm{d}q_1}, \frac{\mathrm{d}x}{\mathrm{d}q_2}, \frac{\mathrm{d}x}{\mathrm{d}q_3})\). | 
| 
 | inline | 
Project the force on \(q_i\) (or the gradient of \(\frac{\mathrm{d}x}{\mathrm{d}q_i}\)) to the force on the correlation matrix \(C=\mathbf{r}_1^\intercal\mathbf{r}_2\), where \(\mathbf{r}_1\) and \(\mathbf{r}_2\) are \(N\times 3\) matrices containing the atom positions of atom group 1 and atom group 2 after centering on origin.
This function can be only called after prepare_derivative(rotation_derivative_dldq::use_dq). It mulitplies the input with \(\frac{\mathrm{d}q_i}{\mathrm{d}C}\).
| i | The i-th component of the quaternion, must be in the range [0, 3] | 
| [in] | f_on_q | The force on \(q_i\) or the gradient of \(\frac{\mathrm{d}x}{\mathrm{d}q_i}\) | 
| 
 | inline | 
Project the force on the correlation matrix \(C\) to \(\mathbf{r}_1\).
Let \(C=\mathbf{r}_1^\intercal\mathbf{r}_2\), and the force on \(C\) be \(F_{C}\). This function returns the force on the i-th atom of \(\mathbf{r}_1\).
| [in] | ia | The atom index of the i-th atom in \(\mathbf{r}_1\) | 
| [in] | dxdC | The 3x3 matrix containing the forces on each element of \(C\) | 
| 
 | inline | 
Project the force on the correlation matrix \(C\) to \(\mathbf{r}_2\).
Let \(C=\mathbf{r}_1^\intercal\mathbf{r}_2\), and the force on \(C\) be \(F_{C}\). This function returns the force on the i-th atom of \(\mathbf{r}_2\).
| [in] | ia | The atom index of the i-th atom in \(\mathbf{r}_2\) | 
| [in] | dxdC | The 3x3 matrix containing the forces on each element of \(C\) |