Tinker9 70bd052 (Thu Nov 9 12:11:35 2023 -0800)
Loading...
Searching...
No Matches
imagefc.h
1#pragma once
2#include "math/realn.h"
3
4namespace tinker {
7
9__device__
11{
12 f.x = f.z * l1.z + f.y * l1.y + f.x * l1.x;
13 f.y = f.z * l2.z + f.y * l2.y;
14 f.z = f.z * l3.z;
15 return f;
16}
17
19__device__
21{
22 f.x = f.z * l1.z + f.x * l1.x;
23 f.y = f.y * l2.y;
24 f.z = f.z * l3.z;
25 return f;
26}
27
29__device__
31{
32 f.x = f.x * l1.x;
33 f.y = f.y * l2.y;
34 f.z = f.z * l3.z;
35 return f;
36}
37
39__device__
40inline real3 ftoc_general(real3 f, real3 l1, real3 l2, real3 l3)
41{
42 if (l1.z == 0) {
43 return ftoc_orthogonal(f, l1, l2, l3);
44 } else if (l1.y == 0) {
45 return ftoc_monoclinic(f, l1, l2, l3);
46 } else {
47 return ftoc_triclinic(f, l1, l2, l3);
48 }
49}
50
52__device__
54{
55 f.x -= REAL_FLOOR(0.5f + f.x);
56 f.y -= REAL_FLOOR(0.5f + f.y);
57 f.z -= REAL_FLOOR(0.5f + f.z);
58 return f;
59}
60
62__device__
63inline real3 ctof_triclinic(real xr, real yr, real zr, real3 ra, real3 rb,
64 real3 rc)
65{
66 real3 f;
67 f.x = zr * ra.z + yr * ra.y + xr * ra.x;
68 f.y = zr * rb.z + yr * rb.y;
69 f.z = zr * rc.z;
70 return f;
71}
72
74__device__
75inline real3 ctof_monoclinic(real xr, real yr, real zr, real3 ra, real3 rb,
76 real3 rc)
77{
78 real3 f;
79 f.x = zr * ra.z + xr * ra.x;
80 f.y = yr * rb.y;
81 f.z = zr * rc.z;
82 return f;
83}
84
86__device__
87inline real3 ctof_orthogonal(real xr, real yr, real zr, real3 ra, real3 rb,
88 real3 rc)
89{
90 real3 f;
91 f.x = xr * ra.x;
92 f.y = yr * rb.y;
93 f.z = zr * rc.z;
94 return f;
95}
96
98__device__
99inline real3 imagectof_general(real xr, real yr, real zr, real3 ra, real3 rb,
100 real3 rc)
101{
102 if (ra.z == 0) {
103 return imageFrac(ctof_orthogonal(xr, yr, zr, ra, rb, rc));
104 } else if (ra.y == 0) {
105 return imageFrac(ctof_monoclinic(xr, yr, zr, ra, rb, rc));
106 } else {
107 return imageFrac(ctof_triclinic(xr, yr, zr, ra, rb, rc));
108 }
109}
110
112}
float x
Definition: acc/realndef.h:49
float y
Definition: acc/realndef.h:49
float z
Definition: acc/realndef.h:49
Definition: acc/realndef.h:48
__device__ real3 ctof_orthogonal(real xr, real yr, real zr, real3 ra, real3 rb, real3 rc)
Cartesian to fractional: orthogonal.
Definition: imagefc.h:87
__device__ real3 imagectof_general(real xr, real yr, real zr, real3 ra, real3 rb, real3 rc)
Cartesian to fractional.
Definition: imagefc.h:99
__device__ real3 ctof_triclinic(real xr, real yr, real zr, real3 ra, real3 rb, real3 rc)
Cartesian to fractional: triclinic.
Definition: imagefc.h:63
__device__ real3 ftoc_monoclinic(real3 f, real3 l1, real3 l2, real3 l3)
Fractional to cartesian: monoclinic.
Definition: imagefc.h:20
__device__ real3 ftoc_general(real3 f, real3 l1, real3 l2, real3 l3)
Fractional to cartesian.
Definition: imagefc.h:40
__device__ real3 ftoc_orthogonal(real3 f, real3 l1, real3 l2, real3 l3)
Fractional to cartesian: orthogonal.
Definition: imagefc.h:30
__device__ real3 ftoc_triclinic(real3 f, real3 l1, real3 l2, real3 l3)
Fractional to cartesian: triclinic.
Definition: imagefc.h:10
__device__ real3 ctof_monoclinic(real xr, real yr, real zr, real3 ra, real3 rb, real3 rc)
Cartesian to fractional: monoclinic.
Definition: imagefc.h:75
__device__ real3 imageFrac(real3 f)
PBC image of the fractional coordinates.
Definition: imagefc.h:53
float real
Definition: precision.h:80
Definition: testrt.h:9