Loading...
Searching...
No Matches
ARTnSaddleSearch.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
13#pragma once
14
15#include "EonLogger.h"
16#include "Matter.h"
17#include "MinModeSaddleSearch.h"
18#include "Parameters.h"
19#include "SaddleSearchMethod.h"
20#include <limits>
21
22// Include the ARTn resource for thread-local access
23#ifdef WITH_ARTN
25#endif
26
27namespace eonc {
28
29/*
30 * ARTn integration with thread-local dynamic loading
31 */
32#ifdef WITH_ARTN
33
34// Constants
35constexpr double ARTN_MODE_TOLERANCE = 1e-10;
36constexpr double ARTN_SMALL_DISPLACEMENT = 1e-6;
37
38// WARNING: All ARTn operations are serialized through a global mutex
39// due to the non-thread-safe Fortran backend. This can be a performance
40// bottleneck in multi-threaded contexts. Consider process-level parallelism
41// if true concurrent ARTn operations are required.
42
43#endif // WITH_ARTN
44
48public:
49 static constexpr int STATUS_GOOD = 0;
50 static constexpr int STATUS_BAD_MAX_ITERATIONS =
52 static constexpr int STATUS_BAD_ARTN_ERROR = 22;
53
54 ARTnSaddleSearch(std::shared_ptr<Matter> matterPassed,
55 std::shared_ptr<Potential> potPassed, AtomMatrix modeInitial,
56 const Parameters &paramsPassed);
57 ~ARTnSaddleSearch() override;
58
59 int run() override;
60 double getEigenvalue() override;
61 AtomMatrix getEigenvector() override;
62 std::string_view describeStatus(int status) const override;
63 int getStatus() const override { return status; }
64 int getIterationCount() const override { return iteration; }
65 int getForceCalls() const override { return forcecalls; }
66
67private:
68 std::shared_ptr<Matter> matter;
69 double eigenvalue{std::numeric_limits<double>::quiet_NaN()};
71 int status{0};
72 int iteration{0};
73 int forcecalls{0};
75};
76
77} // namespace eonc
78
Eigen::Matrix< double, Eigen::Dynamic, 3, eOnStorageOrder > AtomMatrix
Definition Eigen.h:37
ARTnSaddleSearch(std::shared_ptr< Matter > matterPassed, std::shared_ptr< Potential > potPassed, AtomMatrix modeInitial, const Parameters &paramsPassed)
Saddle search method using the Activation-Relaxation Technique nouveau.
double getEigenvalue() override
ARTnSaddleSearch(std::shared_ptr< Matter > matterPassed, std::shared_ptr< Potential > potPassed, AtomMatrix modeInitial, const Parameters &paramsPassed)
eonc::log::Scoped log
std::string_view describeStatus(int status) const override
AtomMatrix getEigenvector() override
int getForceCalls() const override
static constexpr int STATUS_GOOD
static constexpr int STATUS_BAD_ARTN_ERROR
int getStatus() const override
std::shared_ptr< Matter > matter
static constexpr int STATUS_BAD_MAX_ITERATIONS
int getIterationCount() const override
SaddleSearchMethod(std::shared_ptr< Potential > potPassed, const Parameters &paramsPassed)
RAII resource manager for the ARTn C library with global synchronization.
RAII helper for class-scoped logging.
Definition EonLogger.h:171