From 688b1f1efc4660891c4a22cab2eb34e3672d4db5 Mon Sep 17 00:00:00 2001 From: stamoor <stamoor@f3b2605a-c512-4ea7-a41b-209d697bcdaa> Date: Tue, 6 Sep 2016 14:06:59 +0000 Subject: [PATCH] Fixing bug in Kokkos ReaxFF git-svn-id: svn://svn.icms.temple.edu/lammps-ro/trunk@15539 f3b2605a-c512-4ea7-a41b-209d697bcdaa --- src/KOKKOS/pair_reax_c_kokkos.cpp | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/src/KOKKOS/pair_reax_c_kokkos.cpp b/src/KOKKOS/pair_reax_c_kokkos.cpp index eb4679a7dd..ea898843e7 100644 --- a/src/KOKKOS/pair_reax_c_kokkos.cpp +++ b/src/KOKKOS/pair_reax_c_kokkos.cpp @@ -2903,31 +2903,34 @@ void PairReaxCKokkos<DeviceType>::operator()(PairReaxComputeTorsion<NEIGHFLAG,EV if( arg > 1.0 ) arg = 1.0; if( arg < -1.0 ) arg = -1.0; - if( sin_ijk >= 0 && sin_ijk <= 1e-10 ) sin_ijk = 1e-10; - else if( sin_ijk <= 0 && sin_ijk >= -1e-10 ) sin_ijk = -1e-10; - if( sin_jil >= 0 && sin_jil <= 1e-10 ) sin_jil = 1e-10; - else if( sin_jil <= 0 && sin_jil >= -1e-10 ) sin_jil = -1e-10; + F_FLOAT sin_ijk_rnd = sin_ijk; + F_FLOAT sin_jil_rnd = sin_jil; + + if( sin_ijk >= 0 && sin_ijk <= 1e-10 ) sin_ijk_rnd = 1e-10; + else if( sin_ijk <= 0 && sin_ijk >= -1e-10 ) sin_ijk_rnd = -1e-10; + if( sin_jil >= 0 && sin_jil <= 1e-10 ) sin_jil_rnd = 1e-10; + else if( sin_jil <= 0 && sin_jil >= -1e-10 ) sin_jil_rnd = -1e-10; // dcos_omega_di for (int d = 0; d < 3; d++) dcos_omega_dk[d] = ((htra-arg*hnra)/rik) * delik[d] - dellk[d]; - for (int d = 0; d < 3; d++) dcos_omega_dk[d] += (hthd-arg*hnhd)/sin_ijk * -dcos_ijk_dk[d]; + for (int d = 0; d < 3; d++) dcos_omega_dk[d] += (hthd-arg*hnhd)/sin_ijk_rnd * -dcos_ijk_dk[d]; for (int d = 0; d < 3; d++) dcos_omega_dk[d] *= 2.0/poem; // dcos_omega_dj for (int d = 0; d < 3; d++) dcos_omega_di[d] = -((htra-arg*hnra)/rik) * delik[d] - htrb/rij * delij[d]; - for (int d = 0; d < 3; d++) dcos_omega_di[d] += -(hthd-arg*hnhd)/sin_ijk * dcos_ijk_di[d]; - for (int d = 0; d < 3; d++) dcos_omega_di[d] += -(hthe-arg*hnhe)/sin_jil * dcos_jil_di[d]; + for (int d = 0; d < 3; d++) dcos_omega_di[d] += -(hthd-arg*hnhd)/sin_ijk_rnd * dcos_ijk_di[d]; + for (int d = 0; d < 3; d++) dcos_omega_di[d] += -(hthe-arg*hnhe)/sin_jil_rnd * dcos_jil_di[d]; for (int d = 0; d < 3; d++) dcos_omega_di[d] *= 2.0/poem; // dcos_omega_dk for (int d = 0; d < 3; d++) dcos_omega_dj[d] = -((htrc-arg*hnrc)/rjl) * deljl[d] + htrb/rij * delij[d]; - for (int d = 0; d < 3; d++) dcos_omega_dj[d] += -(hthd-arg*hnhd)/sin_ijk * dcos_ijk_dj[d]; - for (int d = 0; d < 3; d++) dcos_omega_dj[d] += -(hthe-arg*hnhe)/sin_jil * dcos_jil_dj[d]; + for (int d = 0; d < 3; d++) dcos_omega_dj[d] += -(hthd-arg*hnhd)/sin_ijk_rnd * dcos_ijk_dj[d]; + for (int d = 0; d < 3; d++) dcos_omega_dj[d] += -(hthe-arg*hnhe)/sin_jil_rnd * dcos_jil_dj[d]; for (int d = 0; d < 3; d++) dcos_omega_dj[d] *= 2.0/poem; // dcos_omega_dl for (int d = 0; d < 3; d++) dcos_omega_dl[d] = ((htrc-arg*hnrc)/rjl) * deljl[d] + dellk[d]; - for (int d = 0; d < 3; d++) dcos_omega_dl[d] += (hthe-arg*hnhe)/sin_jil * -dcos_jil_dk[d]; + for (int d = 0; d < 3; d++) dcos_omega_dl[d] += (hthe-arg*hnhe)/sin_jil_rnd * -dcos_jil_dk[d]; for (int d = 0; d < 3; d++) dcos_omega_dl[d] *= 2.0/poem; cos_omega = cos( omega ); -- GitLab