Loading...
Searching...
No Matches
Dynamics.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 "HelperFunctions.h"
15#include "Matter.h"
16#include "Parameters.h"
17
18#include <cstdint>
19
20#include "Eigen.h"
21#include "EonLogger.h"
22
23namespace eonc {
24
69
70class Dynamics {
71
72public:
73 static const char ANDERSEN[];
74 static const char NOSE_HOOVER[];
75 static const char LANGEVIN[];
76 static const char NONE[];
77 static const char PILE[];
78 static const char PIGLET[];
79
81
82 [[deprecated("Pass DynamicsConfig directly")]]
83 Dynamics(Matter *matter, const Parameters &parameters)
84 : Dynamics(matter, DynamicsConfig::fromParams(parameters)) {}
85
87
88 void setTemperature(double temperature);
89 void oneStep(int stepNumber = -1);
90 void velocityVerlet();
91 void run();
92 void andersenCollision();
93 void setThermalVelocity();
94 void rescaleVelocity();
95 void noseHooverVerlet();
96 void langevinVerlet();
97
98private:
101 void nhcChainHalfStep(AtomMatrix &vel, double &kinE);
103 void runPathIntegral();
104
105 long nAtoms{0}, nFreeCoords{0};
106
109
110 double dt{0.0};
111 double kB{0.0};
112 double temperature{0.0};
113 double vxi1{0.0}, vxi2{0.0}, xi1{0.0}, xi2{0.0};
115};
116
117} // namespace eonc
Eigen::Matrix< double, Eigen::Dynamic, 3, eOnStorageOrder > AtomMatrix
Definition Eigen.h:37
static const char NONE[]
Definition Dynamics.h:76
void setTemperature(double temperature)
Definition Dynamics.cpp:53
static const char LANGEVIN[]
Definition Dynamics.h:75
void setThermalVelocity()
Definition Dynamics.cpp:247
void langevinVerlet()
Langevin dynamics (velocity-Verlet with friction and random forces).
Definition Dynamics.cpp:332
void noseHooverVerlet()
Nose-Hoover chain thermostat (Martyna-Klein-Tuckerman algorithm).
Definition Dynamics.cpp:307
double temperature
Definition Dynamics.h:112
void oneStep(int stepNumber=-1)
Definition Dynamics.cpp:57
void rescaleVelocity()
Definition Dynamics.cpp:264
void andersenCollision()
Definition Dynamics.cpp:224
static const char ANDERSEN[]
Definition Dynamics.h:73
static const char NOSE_HOOVER[]
Definition Dynamics.h:74
void nhcChainHalfStep(AtomMatrix &vel, double &kinE)
One Martyna-Klein-Tuckerman chain half-step.
Definition Dynamics.cpp:275
Matter * matter
Definition Dynamics.h:107
Dynamics(Matter *matter, const DynamicsConfig &config)
Definition Dynamics.cpp:29
eonc::log::Scoped log
Definition Dynamics.h:114
static const char PILE[]
Definition Dynamics.h:77
static const char PIGLET[]
Definition Dynamics.h:78
Dynamics(Matter *matter, const Parameters &parameters)
Definition Dynamics.h:83
void runPathIntegral()
Ring-polymer trajectory. Beads do not enter velocityVerlet.
Definition Dynamics.cpp:104
DynamicsConfig m_config
Definition Dynamics.h:108
void velocityVerlet()
Definition Dynamics.cpp:91
const constants_t & constants() const
const dynamics_options_t & dynamics_options() const
const main_options_t & main_options() const
const thermostat_options_t & thermostat_options() const
const debug_options_t & debug_options() const
RAII resource manager for the ARTn C library with global synchronization.
Configuration extracted from Parameters for Dynamics.
Definition Dynamics.h:26
double langevin_friction
Definition Dynamics.h:33
static DynamicsConfig fromParams(const Parameters &p)
Definition Dynamics.h:47
std::string path_springs
Definition Dynamics.h:40
std::uint64_t path_seed
Definition Dynamics.h:45
std::string thermostat_kind
Definition Dynamics.h:29
std::string path_gle_file
Definition Dynamics.h:42
double path_eco_omega_max
Definition Dynamics.h:41
RAII helper for class-scoped logging.
Definition EonLogger.h:171