Collective Variables Module - Developer Documentation
Loading...
Searching...
No Matches
colvars_gpu::rotation_gpu Class Reference
Collaboration diagram for colvars_gpu::rotation_gpu:

Public Member Functions

 rotation_gpu ()
 Constructor.
 ~rotation_gpu ()
 Destructor.
bool initialized () const
 Check if the object is initialized.
int init ()
 Initialize member data.
int add_optimal_rotation_nodes (cvm::real *const d_pos1, cvm::real *const d_pos2, const size_t num_atoms_pos1, const size_t num_atoms_pos2, cudaGraph_t &graph, std::unordered_map< std::string, cudaGraphNode_t > &nodes_map)
 Calculate the optimal rotation and store the corresponding eigenvalue and eigenvector in the arguments l0 and q0; if the gradients have been previously requested, calculate them as well.
void check_error () const
 Checking after synchronization ( eigendecomposition iterations and max crossing).
cvm::real * get_S () const
cvm::real * get_eigenvectors () const
cvm::real * get_eigenvalues () const
cvm::quaternion * get_q () const
void to_cpu (cvm::rotation &rot) const

Private Attributes

cvm::real * d_S
 Correlation matrix C (3, 3).
cvm::real * d_S_eigval
 Eigenvalues of S.
cvm::real * d_S_eigvec
 Eigenvectors of S.
unsigned int * tbcount
 Used for debugging gradients.
cvm::quaternion * d_q
 The rotation itself (implemented as a quaternion).
cvm::quaternion * d_q_old
 Crossing monitor.
int * discontinuous_rotation
int * max_iteration_reached
 Flag for checking if eigendecomposition is failed.
bool b_initialized
 Flag for checking if initialized.
cvm::rmatrix * h_C
 Host data for compatibility with CPU buffers.
cvm::real * h_S
cvm::real * h_S_eigval
cvm::real * h_S_eigvec
cudaEvent_t jacobi_done
 CUDA event for checking if max iterations are reached.

Friends

struct rotation_derivative_gpu

Member Function Documentation

◆ add_optimal_rotation_nodes()

int colvars_gpu::rotation_gpu::add_optimal_rotation_nodes ( cvm::real *const d_pos1,
cvm::real *const d_pos2,
const size_t num_atoms_pos1,
const size_t num_atoms_pos2,
cudaGraph_t & graph,
std::unordered_map< std::string, cudaGraphNode_t > & nodes_map )

Calculate the optimal rotation and store the corresponding eigenvalue and eigenvector in the arguments l0 and q0; if the gradients have been previously requested, calculate them as well.

The method to derive the optimal rotation is defined in: Coutsias EA, Seok C, Dill KA. Using quaternions to calculate RMSD. J Comput Chem. 25(15):1849-57 (2004) DOI: 10.1002/jcc.20110 PubMed: 15376254

Member Data Documentation

◆ d_S

cvm::real* colvars_gpu::rotation_gpu::d_S
private

Correlation matrix C (3, 3).

Overlap matrix S (4, 4)

◆ d_S_eigvec

cvm::real* colvars_gpu::rotation_gpu::d_S_eigvec
private

Eigenvectors of S.

Note
d_S_eigvec is in column-major order. To get j-th element of the i-th eigenvector, use d_S_eigvec[i*4+j]

◆ tbcount

unsigned int* colvars_gpu::rotation_gpu::tbcount
private

Used for debugging gradients.

Eigensolver Thread block atomic counter


The documentation for this class was generated from the following files: