add triclinic support to ewald/omp

This commit is contained in:
Axel Kohlmeyer
2020-08-07 11:11:52 -04:00
parent 094f52c378
commit 15e969ca5b
3 changed files with 190 additions and 2 deletions

View File

@ -36,7 +36,7 @@ using namespace MathConst;
EwaldOMP::EwaldOMP(LAMMPS *lmp) : Ewald(lmp), ThrOMP(lmp, THR_KSPACE)
{
triclinic_support = 0;
triclinic_support = 1;
suffix_flag |= Suffix::OMP;
}
@ -79,7 +79,11 @@ void EwaldOMP::compute(int eflag, int vflag)
// partial structure factors on each processor
// total structure factor by summing over procs
eik_dot_r();
if (triclinic == 0)
eik_dot_r();
else
eik_dot_r_triclinic();
MPI_Allreduce(sfacrl,sfacrl_all,kcount,MPI_DOUBLE,MPI_SUM,world);
MPI_Allreduce(sfacim,sfacim_all,kcount,MPI_DOUBLE,MPI_SUM,world);
@ -421,3 +425,95 @@ void EwaldOMP::eik_dot_r()
} // end of parallel region
}
/* ---------------------------------------------------------------------- */
void EwaldOMP::eik_dot_r_triclinic()
{
const double * const * const x = atom->x;
const double * const q = atom->q;
const int nlocal = atom->nlocal;
const int nthreads = comm->nthreads;
#if defined(_OPENMP)
#pragma omp parallel LMP_DEFAULT_NONE
#endif
{
int i,ifrom,ito,k,l,m,n,ic,tid;
double cstr1,sstr1;
double sqk,clpm,slpm;
double unitk_lamda[3];
loop_setup_thr(ifrom,ito,tid,nlocal,nthreads);
double max_kvecs[3];
max_kvecs[0] = kxmax;
max_kvecs[1] = kymax;
max_kvecs[2] = kzmax;
// (k,0,0), (0,l,0), (0,0,m)
for (ic = 0; ic < 3; ic++) {
unitk_lamda[0] = 0.0;
unitk_lamda[1] = 0.0;
unitk_lamda[2] = 0.0;
unitk_lamda[ic] = 2.0*MY_PI;
x2lamdaT(&unitk_lamda[0],&unitk_lamda[0]);
sqk = unitk_lamda[ic]*unitk_lamda[ic];
if (sqk <= gsqmx) {
for (i = ifrom; i < ito; i++) {
cs[0][ic][i] = 1.0;
sn[0][ic][i] = 0.0;
cs[1][ic][i] = cos(unitk_lamda[0]*x[i][0] + unitk_lamda[1]*x[i][1] + unitk_lamda[2]*x[i][2]);
sn[1][ic][i] = sin(unitk_lamda[0]*x[i][0] + unitk_lamda[1]*x[i][1] + unitk_lamda[2]*x[i][2]);
cs[-1][ic][i] = cs[1][ic][i];
sn[-1][ic][i] = -sn[1][ic][i];
}
}
}
for (ic = 0; ic < 3; ic++) {
for (m = 2; m <= max_kvecs[ic]; m++) {
unitk_lamda[0] = 0.0;
unitk_lamda[1] = 0.0;
unitk_lamda[2] = 0.0;
unitk_lamda[ic] = 2.0*MY_PI*m;
x2lamdaT(&unitk_lamda[0],&unitk_lamda[0]);
sqk = unitk_lamda[ic]*unitk_lamda[ic];
for (i = ifrom; i < ito; i++) {
cs[m][ic][i] = cs[m-1][ic][i]*cs[1][ic][i] -
sn[m-1][ic][i]*sn[1][ic][i];
sn[m][ic][i] = sn[m-1][ic][i]*cs[1][ic][i] +
cs[m-1][ic][i]*sn[1][ic][i];
cs[-m][ic][i] = cs[m][ic][i];
sn[-m][ic][i] = -sn[m][ic][i];
}
}
}
double * const sfacrl_thr = sfacrl + tid*kmax3d;
double * const sfacim_thr = sfacim + tid*kmax3d;
for (n = 0; n < kcount; n++) {
k = kxvecs[n];
l = kyvecs[n];
m = kzvecs[n];
cstr1 = 0.0;
sstr1 = 0.0;
for (i = ifrom; i < ito; i++) {
clpm = cs[l][1][i]*cs[m][2][i] - sn[l][1][i]*sn[m][2][i];
slpm = sn[l][1][i]*cs[m][2][i] + cs[l][1][i]*sn[m][2][i];
cstr1 += q[i]*(cs[k][0][i]*clpm - sn[k][0][i]*slpm);
sstr1 += q[i]*(sn[k][0][i]*clpm + cs[k][0][i]*slpm);
}
sfacrl_thr[n] = cstr1;
sfacim_thr[n] = sstr1;
}
sync_threads();
data_reduce_thr(sfacrl,kmax3d,nthreads,1,tid);
data_reduce_thr(sfacim,kmax3d,nthreads,1,tid);
} // end of parallel region
}

View File

@ -34,6 +34,7 @@ namespace LAMMPS_NS {
protected:
virtual void eik_dot_r();
virtual void eik_dot_r_triclinic();
};
}

View File

@ -0,0 +1,91 @@
---
lammps_version: 30 Jun 2020
date_generated: Sun Jul 12 19:14:28 202
epsilon: 7.5e-14
prerequisites: ! |
atom full
pair coul/long
kspace ewald
pre_commands: ! ""
post_commands: ! |
pair_modify mix arithmetic
pair_modify table 0
pair_modify compute no
change_box all triclinic
kspace_style ewald 1.0e-6
kspace_modify gewald 0.3
input_file: in.fourmol
pair_style: coul/long 8.0
pair_coeff: ! |
* *
extract: ! ""
natoms: 29
init_vdwl: 0
init_coul: 0
init_stress: ! |2-
0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00
init_forces: ! |2
1 -5.2206771887658943e-01 8.2092716641334329e-02 2.1545324956261508e-01
2 2.1693903829318817e-01 -2.7927861552229305e-01 -1.3475460244562354e-01
3 -3.4431684378643801e-02 -9.3072637218381445e-03 1.9955288801521635e-02
4 1.6297859881038013e-01 2.8852601805448030e-02 -7.8017660002613662e-02
5 1.6019985134449477e-01 7.5436361467604754e-02 -3.7764143515459606e-02
6 5.6481531228200665e-01 4.1679985765871463e-01 -6.7651881147911153e-01
7 -3.4209721978750263e-01 -3.9984396831970670e-01 3.9336252837675573e-01
8 -1.4129044569095472e-01 -6.1689555678793007e-01 3.3944432308292943e-01
9 1.8222478940751916e-01 3.2011243047943372e-01 5.0862878355165030e-02
10 -5.1661247919076315e-02 1.1067475077169277e-01 -1.4424117291445063e-02
11 -8.4669875945943968e-02 1.5095743463211175e-01 -3.9244483347652757e-02
12 4.5741440577763515e-01 -4.2654712552449048e-01 3.4699693870060742e-02
13 -1.5597032418106432e-01 1.1611461366044702e-01 2.6848241030334750e-02
14 -1.7228226924755827e-01 1.3656996830861831e-01 1.0360775552908682e-02
15 -1.3781820350751567e-01 8.5592039476758322e-02 -1.4389247636706383e-02
16 -3.4310225376566400e-01 4.3356489402218990e-01 5.3260202948641322e-01
17 1.3398758000490049e-01 -4.1297852445140776e-01 -7.8816943288763353e-01
18 7.3018610540764362e-01 1.5461055670151038e+00 -1.3881536264098457e+00
19 -2.5925238656641114e-01 -7.7445922519024368e-01 7.7104511596189840e-01
20 -3.9378990654178680e-01 -7.0329956300491681e-01 7.3166048501802450e-01
21 5.1865366949828340e-01 5.4317145701042313e-01 -1.1631741076591826e+00
22 -2.9464392578389154e-01 -1.2315564069397771e-01 5.8314694239034537e-01
23 -2.8787383348123141e-01 -2.9290360518755271e-01 5.5633005396803725e-01
24 6.2598634622894167e-02 1.7443480404415288e+00 -2.7842233968885233e-01
25 1.2975379714426077e-01 -7.0440473186448149e-01 2.2596057943898584e-01
26 -2.2233830537492869e-01 -9.7471462858413116e-01 7.4488656828669883e-02
27 -8.5924682160715782e-01 1.6508884428561106e+00 -9.3704327419507161e-01
28 5.7108983323284834e-01 -9.1775706639800869e-01 5.4074973616906874e-01
29 4.1169480682986315e-01 -8.0573566099654348e-01 4.4310526866546374e-01
run_vdwl: 0
run_coul: 0
run_stress: ! |2-
0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00
run_forces: ! |2
1 -5.0867482734735914e-01 8.3574364736602638e-02 2.3859366585165909e-01
2 2.0274903616148196e-01 -2.8569598893839182e-01 -1.4769032550284392e-01
3 -3.4147604853950062e-02 -9.1090627204342915e-03 2.1035912070905265e-02
4 1.6406845115729854e-01 2.7543539883769418e-02 -8.1678227354518865e-02
5 1.5795249062185149e-01 7.5138560194176501e-02 -4.3111401163038729e-02
6 5.5863364748987443e-01 4.1079611179920561e-01 -7.0858771647783991e-01
7 -3.4237649725585267e-01 -4.0311543472850014e-01 4.1426662722349883e-01
8 -1.2874171503181930e-01 -6.1355649693097880e-01 3.7351123939364295e-01
9 1.7188247077160543e-01 3.1558133464946975e-01 2.9164486652103225e-02
10 -5.3387959585852449e-02 1.1160921489579331e-01 -1.9059202702325560e-02
11 -8.6636270972111143e-02 1.5449691819383507e-01 -4.3272636382879377e-02
12 4.6275716349434198e-01 -4.2637350337910229e-01 5.4575004324550480e-02
13 -1.5766852192008335e-01 1.1681031599219645e-01 2.0747636179675545e-02
14 -1.7360810164936916e-01 1.3766811932401099e-01 5.6897379083826688e-03
15 -1.3806462022003005e-01 8.4210856059166131e-02 -2.2212680975988292e-02
16 -3.5506080148101132e-01 4.4005918792192078e-01 5.1104392973553725e-01
17 1.4397140841118727e-01 -4.0692481244891143e-01 -7.6547412744407850e-01
18 7.7397436657562158e-01 1.6015897231975136e+00 -1.3411009805732605e+00
19 -2.7088413374068859e-01 -7.9215425933650285e-01 7.5604613371755158e-01
20 -4.2037849752144973e-01 -7.3410538126156533e-01 7.0882595972074158e-01
21 5.2076835975486691e-01 4.5601795499973558e-01 -1.1110809178173753e+00
22 -2.9120050706059641e-01 -8.0665791336783074e-02 5.6040742991458292e-01
23 -2.8866170450889661e-01 -2.5716209793518796e-01 5.3128223623838711e-01
24 7.6971773481289488e-02 1.6938942477865231e+00 -2.6190446160899106e-01
25 1.1759949732622851e-01 -6.8186152759768226e-01 2.1305657333424061e-01
26 -2.2405386988235390e-01 -9.4807680646299108e-01 6.5202747884286760e-02
27 -8.6788944488631092e-01 1.6456010755499724e+00 -8.8866425392486648e-01
28 5.7544277372884678e-01 -9.1125861496507965e-01 5.1442393569132128e-01
29 4.1466363894324065e-01 -8.0453174714178211e-01 4.1596367608693868e-01
...