Skip to content

Commit 19367c7

Browse files
committed
Add chkpole in repel multipole +elam in chgtrn fix
1 parent 098568c commit 19367c7

5 files changed

Lines changed: 44 additions & 12 deletions

File tree

src/acc/amoeba/rotpole.cpp

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,13 @@ void rotpole_acc()
1818
rotpoleAtomI(i, rpole, pole, zaxis, x, y, z);
1919
}
2020

21+
void chkrepole_acc()
22+
{
23+
#pragma acc parallel loop independent async deviceptr(x,y,z,zaxis,repole)
24+
for (int i = 0; i < n; ++i)
25+
chkpoleAtomI(i, repole, zaxis, x, y, z);
26+
}
27+
2128
void rotrepole_acc()
2229
{
2330
#pragma acc parallel loop independent async deviceptr(x,y,z,zaxis,rrepole,repole)

src/acc/aplus/echgtrn.cpp

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
#include <cassert>
1111

1212
namespace tinker {
13-
#define DEVICE_PTRS x, y, z, dectx, decty, dectz, chgct, dmpct, nct, ect, vir_ect
13+
#define DEVICE_PTRS x, y, z, dectx, decty, dectz, chgct, dmpct, mut, elam, nct, ect, vir_ect
1414
template <class Ver>
1515
static void echgtrnAplus_acc1()
1616
{
@@ -42,6 +42,7 @@ static void echgtrnAplus_acc1()
4242
real zi = z[i];
4343
real chgi = chgct[i];
4444
real alphai = dmpct[i];
45+
int imut = mut[i];
4546

4647
MAYBE_UNUSED real gxi = 0, gyi = 0, gzi = 0;
4748

@@ -57,12 +58,14 @@ static void echgtrnAplus_acc1()
5758
real zr = z[k] - zi;
5859
real chgk = chgct[k];
5960
real alphak = dmpct[k];
61+
int kmut = mut[k];
6062

6163
real r2 = image2(xr, yr, zr);
6264
if (r2 <= off2) {
6365
real r = REAL_SQRT(r2);
66+
real elambda = (imut || kmut ? elam : 1);
6467
MAYBE_UNUSED real e, de;
65-
pair_chgtrn_aplus<do_g>(r, cut, off, 1, f, alphai, chgi, alphak, chgk, e, de);
68+
pair_chgtrn_aplus<do_g>(r, cut, off, 1, f, alphai, chgi, alphak, chgk, elambda, e, de);
6669

6770
if CONSTEXPR (do_a)
6871
if (e != 0)
@@ -121,8 +124,10 @@ static void echgtrnAplus_acc1()
121124
real zi = z[i];
122125
real chgi = chgct[i];
123126
real alphai = dmpct[i];
127+
int imut = mut[i];
124128
real chgk = chgct[k];
125129
real alphak = dmpct[k];
130+
int kmut = mut[k];
126131

127132
real xr = x[k] - xi;
128133
real yr = y[k] - yi;
@@ -131,12 +136,13 @@ static void echgtrnAplus_acc1()
131136
real r2 = image2(xr, yr, zr);
132137
if (r2 <= off2) {
133138
real r = REAL_SQRT(r2);
139+
real elambda = (imut || kmut ? elam : 1);
134140
MAYBE_UNUSED real e, de;
135-
pair_chgtrn_aplus<do_g>(r, cut, off, mscale, f, alphai, chgi, alphak, chgk, e, de);
141+
pair_chgtrn_aplus<do_g>(r, cut, off, mscale, f, alphai, chgi, alphak, chgk, elambda, e, de);
136142

137143
if CONSTEXPR (do_a) {
138144
real e1, de1;
139-
pair_chgtrn_aplus<do_g>(r, cut, off, 1, f, alphai, chgi, alphak, chgk, e1, de1);
145+
pair_chgtrn_aplus<do_g>(r, cut, off, 1, f, alphai, chgi, alphak, chgk, elambda, e1, de1);
140146

141147
if (mscale == -1 and e1 != 0)
142148
atomic_add(-1, nct, offset);

src/acc/hippo/echgtrn.cpp

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
#include <cassert>
1111

1212
namespace tinker {
13-
#define DEVICE_PTRS x, y, z, dectx, decty, dectz, chgct, dmpct, nct, ect, vir_ect
13+
#define DEVICE_PTRS x, y, z, dectx, decty, dectz, chgct, dmpct, mut, elam, nct, ect, vir_ect
1414
template <class Ver>
1515
static void echgtrn_acc1()
1616
{
@@ -42,6 +42,7 @@ static void echgtrn_acc1()
4242
real zi = z[i];
4343
real chgi = chgct[i];
4444
real alphai = dmpct[i];
45+
int imut = mut[i];
4546

4647
MAYBE_UNUSED real gxi = 0, gyi = 0, gzi = 0;
4748

@@ -57,12 +58,14 @@ static void echgtrn_acc1()
5758
real zr = z[k] - zi;
5859
real chgk = chgct[k];
5960
real alphak = dmpct[k];
61+
int kmut = mut[k];
6062

6163
real r2 = image2(xr, yr, zr);
6264
if (r2 <= off2) {
6365
real r = REAL_SQRT(r2);
66+
real elambda = (imut || kmut ? elam : 1);
6467
MAYBE_UNUSED real e, de;
65-
pair_chgtrn<do_g>(r, cut, off, 1, f, alphai, chgi, alphak, chgk, e, de);
68+
pair_chgtrn<do_g>(r, cut, off, 1, f, alphai, chgi, alphak, chgk, elambda, e, de);
6669

6770
if CONSTEXPR (do_a)
6871
if (e != 0)
@@ -121,8 +124,10 @@ static void echgtrn_acc1()
121124
real zi = z[i];
122125
real chgi = chgct[i];
123126
real alphai = dmpct[i];
127+
int imut = mut[k];
124128
real chgk = chgct[k];
125129
real alphak = dmpct[k];
130+
int kmut = mut[k];
126131

127132
real xr = x[k] - xi;
128133
real yr = y[k] - yi;
@@ -131,12 +136,13 @@ static void echgtrn_acc1()
131136
real r2 = image2(xr, yr, zr);
132137
if (r2 <= off2) {
133138
real r = REAL_SQRT(r2);
139+
real elambda = (imut || kmut ? elam : 1);
134140
MAYBE_UNUSED real e, de;
135-
pair_chgtrn<do_g>(r, cut, off, mscale, f, alphai, chgi, alphak, chgk, e, de);
141+
pair_chgtrn<do_g>(r, cut, off, mscale, f, alphai, chgi, alphak, chgk, elambda, e, de);
136142

137143
if CONSTEXPR (do_a) {
138144
real e1, de1;
139-
pair_chgtrn<do_g>(r, cut, off, 1, f, alphai, chgi, alphak, chgk, e1, de1);
145+
pair_chgtrn<do_g>(r, cut, off, 1, f, alphai, chgi, alphak, chgk, elambda, e1, de1);
140146

141147
if (mscale == -1 and e1 != 0)
142148
atomic_add(-1, nct, offset);

src/cu/amoeba/rotpole.cu

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,19 @@ void chkpole_cu()
1515
{
1616
launch_k1s(g::s0, n, chkpole_cu1, n, pole, zaxis, x, y, z);
1717
}
18+
19+
__global__
20+
void chkrepole_cu1(int n, real (*restrict repole)[MPL_TOTAL], LocalFrame* zaxis, const real* restrict x,
21+
const real* restrict y, const real* restrict z)
22+
{
23+
for (int i = ITHREAD; i < n; i += STRIDE)
24+
chkpoleAtomI(i, repole, zaxis, x, y, z);
25+
}
26+
27+
void chkrepole_cu()
28+
{
29+
launch_k1s(g::s0, n, chkrepole_cu1, n, repole, zaxis, x, y, z);
30+
}
1831
}
1932

2033
namespace tinker {

src/hippo/erepel.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -157,10 +157,10 @@ void erepelData(RcOp op)
157157
}
158158
}
159159

160-
TINKER_FVOID2(acc1, cu1, chkpole);
161-
static void chkpole()
160+
TINKER_FVOID2(acc1, cu1, chkrepole);
161+
static void chkrepole()
162162
{
163-
TINKER_FCALL2(acc1, cu1, chkpole);
163+
TINKER_FCALL2(acc1, cu1, chkrepole);
164164
}
165165

166166
TINKER_FVOID2(acc1, cu1, rotrepole);
@@ -176,7 +176,7 @@ void repoleInit(int vers)
176176
if (vers & calc::virial)
177177
darray::zero(g::q0, bufferSize(), vir_trq);
178178

179-
chkpole();
179+
chkrepole();
180180
rotrepole();
181181

182182
}

0 commit comments

Comments
 (0)