Loading...
Searching...
No Matches
SolidStateNEB.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 "Eigen.h"
15#include "Matter.h"
16
17#include <vector>
18
19namespace eonc::neb {
20
23double solidStateJacobian(double meanVolume, int nAtoms, double weight);
24
29bool orientCellLowerTriangular(Matrix3d &cell, AtomMatrix &positions);
30
31void orientSolidStateMatter(Matter &image);
32
35void interpolateSolidStateLinear(std::vector<Matter> &images);
36
37struct JointBlock {
39 Matrix3d cell{Matrix3d::Zero()};
40};
41
46JointBlock jointDisplacement(const Matter &from, const Matter &to,
47 double jacobian);
48
49double jointNorm(const JointBlock &block);
50
55Matrix3d cellNebForce(const Matrix3d &cauchy, double volume, double jacobian,
56 const Matrix3d &externalStress);
57
60Matrix3d finiteDifferenceCauchyStress(const Matter &image, double strainStep);
61
64double solidStateEnthalpy(const Matter &image, const Matter &reference,
65 double pressure);
66
72 Matrix3d cell{Matrix3d::Zero()};
73};
74
75CartesianStep solidStateCartesianStep(const Matter &image,
76 const AtomMatrix &atomicForce,
77 const Matrix3d &cellForce,
78 double jacobian);
79
80} // namespace eonc::neb
Eigen::Matrix< double, 3, 3, eOnStorageOrder > Matrix3d
Definition Eigen.h:35
Eigen::Matrix< double, Eigen::Dynamic, 3, eOnStorageOrder > AtomMatrix
Definition Eigen.h:37
bool orientCellLowerTriangular(Matrix3d &cell, AtomMatrix &positions)
Rotate the lab frame so the cell is lower triangular: the first lattice vector lies on x and the seco...
void interpolateSolidStateLinear(std::vector< Matter > &images)
Replace interior images by a fractional linear interpolation of the oriented endpoints.
CartesianStep solidStateCartesianStep(const Matter &image, const AtomMatrix &atomicForce, const Matrix3d &cellForce, double jacobian)
double jointNorm(const JointBlock &block)
JointBlock jointDisplacement(const Matter &from, const Matter &to, double jacobian)
Displacement of to relative to from in the joint metric.
double solidStateEnthalpy(const Matter &image, const Matter &reference, double pressure)
Potential energy plus P : (h0^{-1} (h-h0)) * V0.
double solidStateJacobian(double meanVolume, int nAtoms, double weight)
J = (V/N)^{1/3} * N^{1/2} * weight, with V the mean endpoint volume.
void orientSolidStateMatter(Matter &image)
Matrix3d finiteDifferenceCauchyStress(const Matter &image, double strainStep)
Central difference of the potential energy on the six lower strain components.
Matrix3d cellNebForce(const Matrix3d &cauchy, double volume, double jacobian, const Matrix3d &externalStress)
NEB force on the Jacobian-scaled strain.
One steepest step in Cartesian coordinates and the cell matrix.