Loading...
Searching...
No Matches
Dimer.h
Go to the documentation of this file.
1/*
2** This file is part of eOn.
3**
4** SPDX-License-Identifier: BSD-3-Clause
5**
6** Copyright (c) 2010--present, eOn Development Team
7** All rights reserved.
8**
9** Repo:
10** https://github.com/TheochemUI/eOn
11*/
12#pragma once
13#include "LowestEigenmode.h"
14#include "Matter.h"
15#include "Parameters.h"
16#include "Potential.h"
17
18namespace eonc {
19
22class Dimer : public LowestEigenmode {
23public:
24 Dimer(std::shared_ptr<Matter> matter, const Parameters &params,
25 std::shared_ptr<Potential> pot);
26 ~Dimer() = default;
27
28 void compute(std::shared_ptr<Matter> matter, AtomMatrix initialDirection);
29 [[nodiscard]] double getEigenvalue();
30 [[nodiscard]] AtomMatrix getEigenvector();
31
32private:
33 eonc::log::FileScoped log{"dimer", "dimer.log"};
34 std::shared_ptr<Matter> matterCenter;
35 std::shared_ptr<Matter> matterDimer;
38 double eigenvalue{0.0};
39 long nAtoms{0};
40
42 void determineRotationalPlane(const AtomMatrix &rotationalForce,
43 AtomMatrix &rotationalForceOld,
44 const AtomMatrix &rotationalPlaneOld,
45 double &lengthRotationalForceOld);
46
48 void rotate(double rotationAngle);
49
51 double calcRotationalForceReturnCurvature(AtomMatrix &rotationalForce);
52};
53
54} // namespace eonc
55
56using eonc::Dimer;
Eigen::Matrix< double, Eigen::Dynamic, 3, eOnStorageOrder > AtomMatrix
Definition Eigen.h:37
Dimer(std::shared_ptr< Matter > matter, const Parameters &params, std::shared_ptr< Potential > pot)
Definition Dimer.cpp:23
Classic dimer method to find the lowest curvature mode.
Definition Dimer.h:22
~Dimer()=default
AtomMatrix direction
Definition Dimer.h:36
AtomMatrix rotationalPlane
Definition Dimer.h:37
std::shared_ptr< Matter > matterDimer
Definition Dimer.h:35
long nAtoms
Definition Dimer.h:39
double getEigenvalue()
Definition Dimer.cpp:146
Dimer(std::shared_ptr< Matter > matter, const Parameters &params, std::shared_ptr< Potential > pot)
Definition Dimer.cpp:23
std::shared_ptr< Matter > matterCenter
Definition Dimer.h:34
double eigenvalue
Definition Dimer.h:38
AtomMatrix getEigenvector()
Definition Dimer.cpp:148
double calcRotationalForceReturnCurvature(AtomMatrix &rotationalForce)
Compute rotational force and return curvature along the dimer.
Definition Dimer.cpp:150
void rotate(double rotationAngle)
Rotate the dimer by the given angle (radians).
Definition Dimer.cpp:259
void compute(std::shared_ptr< Matter > matter, AtomMatrix initialDirection)
Definition Dimer.cpp:43
eonc::log::FileScoped log
Definition Dimer.h:33
void determineRotationalPlane(const AtomMatrix &rotationalForce, AtomMatrix &rotationalForceOld, const AtomMatrix &rotationalPlaneOld, double &lengthRotationalForceOld)
Determine rotational plane via conjugate gradient.
Definition Dimer.cpp:232
const Parameters & params
std::shared_ptr< Potential > pot
LowestEigenmode(std::shared_ptr< Potential > potPassed, const Parameters &parameters)
RAII resource manager for the ARTn C library with global synchronization.
RAII helper for file-based logging in a class.
Definition EonLogger.h:208