Loading...
Searching...
No Matches
EigenmodeStrategy.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
14#include "ImprovedDimer.h"
15#include "LowestEigenmode.h"
16#include <memory>
17
18namespace eonc {
19
20class Matter;
21class Parameters;
22class Potential;
23
26
27std::shared_ptr<LowestEigenmode>
28buildEigenmodeStrategy(std::shared_ptr<Matter> matter, const Parameters &params,
29 std::shared_ptr<Potential> pot);
30
31inline void eigenmodeCompute(LowestEigenmode &s, std::shared_ptr<Matter> matter,
32 AtomMatrix direction) {
33 s.compute(matter, direction);
34}
35
37 return s.getEigenvalue();
38}
39
43
45 return dynamic_cast<ImprovedDimer *>(&s);
46}
47
49 return s.totalForceCalls;
50}
51
52inline double eigenmodeStatsTorque(LowestEigenmode &s) { return s.statsTorque; }
53
54inline double eigenmodeStatsAngle(LowestEigenmode &s) { return s.statsAngle; }
55
57 return s.statsRotations;
58}
59
61 return s.totalIterations;
62}
63
64} // namespace eonc
Eigen::Matrix< double, Eigen::Dynamic, 3, eOnStorageOrder > AtomMatrix
Definition Eigen.h:37
Base for eigenmode solvers.
virtual void compute(std::shared_ptr< Matter > matter, AtomMatrix initialDirection)=0
virtual double getEigenvalue()=0
virtual AtomMatrix getEigenvector()=0
RAII resource manager for the ARTn C library with global synchronization.
void eigenmodeCompute(LowestEigenmode &s, std::shared_ptr< Matter > matter, AtomMatrix direction)
LowestEigenmode EigenmodeStrategy
Type-erased eigenmode solver. Layout is the same with or without gprd.
long eigenmodeTotalForceCalls(LowestEigenmode &s)
std::shared_ptr< LowestEigenmode > buildEigenmodeStrategy(std::shared_ptr< Matter > matter, const Parameters &params, std::shared_ptr< Potential > pot)
long eigenmodeStatsRotations(LowestEigenmode &s)
ImprovedDimer * asImprovedDimer(LowestEigenmode &s)
long eigenmodeTotalIterations(LowestEigenmode &s)
double eigenmodeGetEigenvalue(LowestEigenmode &s)
double eigenmodeStatsTorque(LowestEigenmode &s)
AtomMatrix eigenmodeGetEigenvector(LowestEigenmode &s)
double eigenmodeStatsAngle(LowestEigenmode &s)