Tinker9 70bd052 (Thu Nov 9 12:11:35 2023 -0800)
Loading...
Searching...
No Matches
realn.h
1#pragma once
2#include "ff/precision.h"
3#include "realndef.h"
4#include "seq/seq.h"
5
6namespace tinker {
9#if TINKER_REAL_SIZE == 8
10using real2 = double2;
11using real3 = double3;
12using real4 = double4;
13# define make_real2(x, y) make_double2((x), (y))
14# define make_real3(x, y, z) make_double3((x), (y), (z))
15# define make_real4(x, y, z, w) make_double4((x), (y), (z), (w))
16#elif TINKER_REAL_SIZE == 4
17using real2 = float2;
18using real3 = float3;
19using real4 = float4;
20# define make_real2(x, y) make_float2((x), (y))
21# define make_real3(x, y, z) make_float3((x), (y), (z))
22# define make_real4(x, y, z, w) make_float4((x), (y), (z), (w))
23#endif
24
25// -
28{
29 return make_real3(-a.x, -a.y, -a.z);
30}
31
32// + - *
35{
36 return make_real3(a.x + b.x, a.y + b.y, a.z + b.z);
37}
38
41{
42 return make_real3(a.x - b.x, a.y - b.y, a.z - b.z);
43}
44
47{
48 return make_real3(a * b.x, a * b.y, a * b.z);
49}
50
53{
54 return make_real3(a * b.x, a * b.y, a * b.z);
55}
56
57// += -= *=
59inline void operator+=(real3& a, real3 b)
60{
61 a.x += b.x;
62 a.y += b.y;
63 a.z += b.z;
64}
65
67inline void operator-=(real3& a, real3 b)
68{
69 a.x -= b.x;
70 a.y -= b.y;
71 a.z -= b.z;
72}
73
75inline void operator*=(real3& a, real b)
76{
77 a.x *= b;
78 a.y *= b;
79 a.z *= b;
80}
81
82// dot
84inline real dot3(real3 a, real3 b)
85{
86 return a.x * b.x + a.y * b.y + a.z * b.z;
87}
88
90inline real dot3(real3 a, real bx, real by, real bz)
91{
92 return a.x * bx + a.y * by + a.z * bz;
93}
94
96inline real dot3(real ax, real ay, real az, real3 b)
97{
98 return ax * b.x + ay * b.y + az * b.z;
99}
100
102inline real dot3(real ax, real ay, real az, real bx, real by, real bz)
103{
104 return ax * bx + ay * by + az * bz;
105}
106
107// symmetric matrix(3,3) dot vector(3)
109inline real3 matvec(real xx, real xy, real xz, real yy, real yz, real zz,
110 real3 v)
111{
112 return make_real3(dot3(xx, xy, xz, v), dot3(xy, yy, yz, v),
113 dot3(xz, yz, zz, v));
114}
115
116// cross product
118inline real3 cross(real ax, real ay, real az, real bx, real by, real bz)
119{
120 return make_real3(ay * bz - az * by, az * bx - ax * bz, ax * by - ay * bx);
121}
122
124inline real3 cross(real ax, real ay, real az, real3 b)
125{
126 return cross(ax, ay, az, b.x, b.y, b.z);
127}
128
130inline real3 cross(real3 a, real bx, real by, real bz)
131{
132 return cross(a.x, a.y, a.z, bx, by, bz);
133}
134
136inline real3 cross(real3 a, real3 b)
137{
138 return cross(a.x, a.y, a.z, b.x, b.y, b.z);
139}
141}
float x
Definition: acc/realndef.h:49
float y
Definition: acc/realndef.h:49
float z
Definition: acc/realndef.h:49
#define SEQ_ROUTINE
Definition: acc/seqdef.h:7
Definition: acc/realndef.h:43
Definition: acc/realndef.h:48
Definition: acc/realndef.h:53
__device__ real3 cross(real ax, real ay, real az, real bx, real by, real bz)
Definition: realn.h:118
__device__ void operator*=(real3 &a, real b)
Definition: realn.h:75
__device__ real dot3(real3 a, real3 b)
Definition: realn.h:84
float4 real4
Definition: realn.h:19
float2 real2
Definition: realn.h:17
__device__ real3 operator+(real3 a, real3 b)
Definition: realn.h:34
__device__ real3 operator-(real3 a)
Definition: realn.h:27
__device__ real3 matvec(real xx, real xy, real xz, real yy, real yz, real zz, real3 v)
Definition: realn.h:109
float3 real3
Definition: realn.h:18
__device__ void operator-=(real3 &a, real3 b)
Definition: realn.h:67
__device__ void operator+=(real3 &a, real3 b)
Definition: realn.h:59
__device__ real3 operator*(real a, real3 b)
Definition: realn.h:46
float real
Definition: precision.h:80
Definition: testrt.h:9