eOn client
Long-timescale dynamics: aKMC, NEB, parallel replica
☾
Toggle main menu visibility
Loading...
Searching...
No Matches
VesinNeighbors.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
** Shared neighbor lists via vesin (single NL backend for classical pots
7
** and Metatomic). Do not reimplement Verlet / link-cell / O(N^2) loops.
8
*/
9
#pragma once
10
11
#include <array>
12
#include <cstddef>
13
#include <cstdint>
14
#include <stdexcept>
15
#include <string>
16
17
// Vendored / system vesin C API
18
#include "vesin.h"
19
20
namespace
eonc
{
21
27
class
VesinNeighbors
{
28
public
:
29
struct
Options
{
30
double
cutoff
{0.0};
31
bool
full
{
false
};
32
bool
sorted
{
false
};
33
bool
return_shifts
{
false
};
34
bool
return_distances
{
true
};
35
bool
return_vectors
{
true
};
36
std::array<bool, 3>
periodic
{{
true
,
true
,
true
}};
41
double
skin
{0.0};
44
int32_t
n_threads
{1};
46
VesinAlgorithm
algorithm
{VesinAutoAlgorithm};
47
};
48
49
VesinNeighbors
() =
default
;
50
VesinNeighbors
(
const
VesinNeighbors
&) =
delete
;
51
VesinNeighbors
&
operator=
(
const
VesinNeighbors
&) =
delete
;
52
VesinNeighbors
(
VesinNeighbors
&&other)
noexcept
;
53
VesinNeighbors
&
operator=
(
VesinNeighbors
&&other)
noexcept
;
54
~VesinNeighbors
();
55
62
void
compute
(
const
double
*R, std::size_t n,
const
double
*box,
63
const
Options
&opt);
64
65
[[nodiscard]] std::size_t
size
()
const
{
return
list_
.length; }
66
67
[[nodiscard]] std::size_t
i
(std::size_t p)
const
{
return
list_
.pairs[p][0]; }
68
[[nodiscard]] std::size_t
j
(std::size_t p)
const
{
return
list_
.pairs[p][1]; }
69
71
[[nodiscard]]
double
distance
(std::size_t p)
const
{
72
return
list_
.distances[p];
73
}
74
76
[[nodiscard]]
const
double
*
vector
(std::size_t p)
const
{
77
return
list_
.vectors[p];
78
}
79
80
[[nodiscard]]
const
int32_t *
shift
(std::size_t p)
const
{
81
return
list_
.shifts[p];
82
}
83
85
[[nodiscard]]
const
VesinNeighborList &
raw
()
const
{
return
list_
; }
86
[[nodiscard]] VesinNeighborList &
raw
() {
return
list_
; }
87
90
VesinNeighborList *
release
();
91
92
private
:
93
VesinNeighborList
list_
{};
94
bool
owns_
{
false
};
95
96
void
free_list
();
97
};
98
99
}
// namespace eonc
eonc::VesinNeighbors::j
std::size_t j(std::size_t p) const
Definition
VesinNeighbors.h:68
eonc::VesinNeighbors::free_list
void free_list()
Definition
VesinNeighbors.cpp:34
eonc::VesinNeighbors::vector
const double * vector(std::size_t p) const
Vector r_j − r_i (+ PBC). Requires return_vectors.
Definition
VesinNeighbors.h:76
eonc::VesinNeighbors::owns_
bool owns_
Definition
VesinNeighbors.h:94
eonc::VesinNeighbors::shift
const int32_t * shift(std::size_t p) const
Definition
VesinNeighbors.h:80
eonc::VesinNeighbors::i
std::size_t i(std::size_t p) const
Definition
VesinNeighbors.h:67
eonc::VesinNeighbors::list_
VesinNeighborList list_
Definition
VesinNeighbors.h:93
eonc::VesinNeighbors::~VesinNeighbors
~VesinNeighbors()
Definition
VesinNeighbors.cpp:32
eonc::VesinNeighbors::release
VesinNeighborList * release()
Steal ownership of the internal list (for Metatomic custom deleters).
Definition
VesinNeighbors.cpp:91
eonc::VesinNeighbors::raw
VesinNeighborList & raw()
Definition
VesinNeighbors.h:86
eonc::VesinNeighbors::operator=
VesinNeighbors & operator=(const VesinNeighbors &)=delete
eonc::VesinNeighbors::distance
double distance(std::size_t p) const
Distance |r_ij| (requires return_distances).
Definition
VesinNeighbors.h:71
eonc::VesinNeighbors::compute
void compute(const double *R, std::size_t n, const double *box, const Options &opt)
Build / rebuild the list.
Definition
VesinNeighbors.cpp:42
eonc::VesinNeighbors::VesinNeighbors
VesinNeighbors(const VesinNeighbors &)=delete
eonc::VesinNeighbors::VesinNeighbors
VesinNeighbors()=default
eonc::VesinNeighbors::size
std::size_t size() const
Definition
VesinNeighbors.h:65
eonc::VesinNeighbors::raw
const VesinNeighborList & raw() const
Raw list for advanced consumers (Metatomic tensor conversion).
Definition
VesinNeighbors.h:85
eonc
RAII resource manager for the ARTn C library with global synchronization.
Definition
ARTnSaddleSearch.cpp:19
eonc::VesinNeighbors::Options
Definition
VesinNeighbors.h:29
eonc::VesinNeighbors::Options::algorithm
VesinAlgorithm algorithm
vesin pair-search algorithm (auto / brute-force MIC / cell list).
Definition
VesinNeighbors.h:46
eonc::VesinNeighbors::Options::n_threads
int32_t n_threads
Threads for the vesin build; 1 keeps small builds deterministic and spawn-free, 0 defers to OMP_NUM_T...
Definition
VesinNeighbors.h:44
eonc::VesinNeighbors::Options::skin
double skin
vesin 0.6 native Verlet skin: > 0 lets vesin cache the topology in this list until an atom moves more...
Definition
VesinNeighbors.h:41
eonc::VesinNeighbors::Options::return_vectors
bool return_vectors
Definition
VesinNeighbors.h:35
eonc::VesinNeighbors::Options::full
bool full
true: both i→j and j→i; false: half list
Definition
VesinNeighbors.h:31
eonc::VesinNeighbors::Options::cutoff
double cutoff
Definition
VesinNeighbors.h:30
eonc::VesinNeighbors::Options::return_shifts
bool return_shifts
Definition
VesinNeighbors.h:33
eonc::VesinNeighbors::Options::periodic
std::array< bool, 3 > periodic
Definition
VesinNeighbors.h:36
eonc::VesinNeighbors::Options::return_distances
bool return_distances
Definition
VesinNeighbors.h:34
eonc::VesinNeighbors::Options::sorted
bool sorted
Definition
VesinNeighbors.h:32
include
eon
VesinNeighbors.h
Generated by
1.17.0
Generated by
Doxygen 1.17.0
Analytics by
Antics
provided by
TurtleTech ehf