Tinker9 70bd052 (Thu Nov 9 12:11:35 2023 -0800)
Loading...
Searching...
No Matches
energybuffer.h
1#pragma once
2#include "ff/precision.h"
3#include "math/pow2.h"
4#include <type_traits>
5
6namespace tinker {
9
11template <class F>
13{
14 static_assert(std::is_same<F, float>::value or std::is_same<F, double>::value, "");
15 return static_cast<F>(static_cast<long long>(g)) / 0x100000000ull;
16}
17
19template <class F>
20inline F toFloatingPoint(double g)
21{
22 static_assert(std::is_same<F, float>::value or std::is_same<F, double>::value, "");
23 return g;
24}
25
27template <class F>
28inline F toFloatingPoint(float g)
29{
30 static_assert(std::is_same<F, float>::value or std::is_same<F, double>::value, "");
31 return g;
32}
33
35}
36
37namespace tinker {
38inline namespace v1 {
62template <class T, size_t Nincr>
64{
65 static constexpr size_t N = Nincr;
66 static constexpr size_t value = pow2Ge(Nincr);
67 using type = T;
68};
69
72template <size_t Nincr>
73struct BufferTraits<float, Nincr>
74{
75 static constexpr size_t N = Nincr;
76 static constexpr size_t value = pow2Ge(Nincr);
77 using type = fixed;
78};
79}
80
83
87size_t bufferSize();
88
92typedef CountBufferTraits::type* CountBuffer;
93typedef EnergyBufferTraits::type* EnergyBuffer;
94typedef VirialBufferTraits::type (*VirialBuffer)[VirialBufferTraits::value];
95
103void bufferAllocate(int flag, EnergyBuffer* pe, VirialBuffer* pv, //
104 grad_prec** px, grad_prec** py, grad_prec** pz);
105
115
119void bufferAllocate(int flag, CountBuffer* pc);
120
125
129
132
134void virialReduce(virial_prec (&)[VirialBufferTraits::N], const VirialBuffer b);
135
138
140void virialReshape(virial_prec (&output)[9], const virial_prec (&input)[VirialBufferTraits::N]);
141
142//====================================================================//
143// //
144// Global Variables //
145// //
146//====================================================================//
147
149
151}
F toFloatingPoint(fixed g)
Converts a fixed-point value g to floating-point value on host.
Definition: energybuffer.h:12
#define TINKER_EXTERN
Definition: macro.h:108
grad_prec * gy
Gradient of valence terms; also works as total gradient array.
grad_prec * gx
Gradient of valence terms; also works as total gradient array.
grad_prec * gz
Gradient of valence terms; also works as total gradient array.
fixed type
Definition: energybuffer.h:77
T type
Definition: energybuffer.h:67
static constexpr size_t value
Definition: energybuffer.h:66
static constexpr size_t N
Definition: energybuffer.h:65
CountBufferTraits::type * CountBuffer
Definition: energybuffer.h:92
void virialReduce(virial_prec(&)[VirialBufferTraits::N], const VirialBuffer b)
BufferTraits< v_prec, 6 > VirialBufferTraits
Definition: energybuffer.h:91
void bufferAllocate(int flag, EnergyBuffer *pe, VirialBuffer *pv, grad_prec **px, grad_prec **py, grad_prec **pz)
void virialReshape(virial_prec(&output)[9], const virial_prec(&input)[VirialBufferTraits::N])
Transforms the shape of a virial variable.
void bufferDeallocate(int flag, EnergyBuffer e, VirialBuffer v, grad_prec *gx, grad_prec *gy, grad_prec *gz)
EnergyBufferTraits::type * EnergyBuffer
Definition: energybuffer.h:93
BufferTraits< e_prec, 1 > EnergyBufferTraits
Definition: energybuffer.h:90
BufferTraits< int, 1 > CountBufferTraits
Definition: energybuffer.h:89
int countReduce(const CountBuffer b)
int nelem_buffer
VirialBufferTraits::type(* VirialBuffer)[VirialBufferTraits::value]
Definition: energybuffer.h:94
energy_prec energyReduce(const EnergyBuffer b)
size_t bufferSize()
Definition: energybuffer.h:64
constexpr size_t pow2Ge(size_t val)
A power of 2 that is greater than or equal to val.
Definition: pow2.h:46
mixed virial_prec
Definition: precision.h:98
fixed grad_prec
Definition: precision.h:103
mixed energy_prec
Floating-point type for total energies.
Definition: precision.h:97
unsigned long long fixed
Definition: precision.h:68
Definition: testrt.h:9