diff --git a/ML-TADAH/pair_tadah.cpp b/ML-TADAH/pair_tadah.cpp index 59bf819d3e86d6564e7f889b94f243ffcd59f6ed..d40b5a39ac3856719baca1e1bf8dd00ee07669f7 100644 --- a/ML-TADAH/pair_tadah.cpp +++ b/ML-TADAH/pair_tadah.cpp @@ -272,63 +272,39 @@ void PairTadah::compute_2b_mb_half(int eflag, int vflag) lt->S.d2b->calc_dXijdri(Zj,rij,rij_sq,fd); } - int mode=0; if (lt->S.dmb->get_rcut() > rij) { - mode = lt->S.dmb->calc_dXijdri_dXjidri(Zi,Zj,rij,rij_sq,delij, - lt->rhos.col(i),lt->rhos.col(j),fd); + lt->S.dmb->calc_dXijdri_dXjidri(Zi,Zj,rij,rij_sq,delij, + lt->rhos.col(i),lt->rhos.col(j),fd); } - if (mode==0) { - if (lt->norm) - lt->model->norm.normalise(fd,0); - // mode==0 only x-component is calculated for both 2b and mb - double fpair = lt->model->fpredict(fd,lt->aeds.col(i),0)/rij; - - f[i][0] += delij[0]*fpair; - f[i][1] += delij[1]*fpair; - f[i][2] += delij[2]*fpair; - - if (newton_pair || j < nlocal) { - f[j][0] -= delij[0]*fpair; - f[j][1] -= delij[1]*fpair; - f[j][2] -= delij[2]*fpair; - } - if (evflag) ev_tally(i,j,nlocal,newton_pair,0.0,0.0,fpair,delij[0],delij[1],delij[2]); + // copy 2b descriptors first and + // scale all 2b components by delij/rij + // this is inefficient but will do for now... TODO + for(size_t s=lt->bias; s<lt->S.d2b->size()+lt->bias; ++s) { + fd(s,0) /= rij; + fd(s,1) = fd(s,0); + fd(s,2) = fd(s,0); + fd(s,0) *= delij[0]; + fd(s,1) *= delij[1]; + fd(s,2) *= delij[2]; } - else { - // mode!=0, S.d2b calculates x-comp only, S.dmb calcs all 3-directions - - // copy 2b descriptors first and - // scale all 2b components by delij/rij - // this is inefficient but will do for now... TODO - for(size_t s=lt->bias; s<lt->S.d2b->size()+lt->bias; ++s) { - fd(s,0) /= rij; - fd(s,1) = fd(s,0); - fd(s,2) = fd(s,0); - fd(s,0) *= delij[0]; - fd(s,1) *= delij[1]; - fd(s,2) *= delij[2]; - } - if (lt->norm) - lt->model->norm.normalise(fd); + if (lt->norm) + lt->model->norm.normalise(fd); - // for mode!=0 we don't need to scale mb part by delij/rij - // as S.dmb calculator does it. - Vec3d f_eam = lt->model->fpredict(fd,lt->aeds.col(i)); + Vec3d f_eam = lt->model->fpredict(fd,lt->aeds.col(i)); - f[i][0] += f_eam(0); - f[i][1] += f_eam(1); - f[i][2] += f_eam(2); + f[i][0] += f_eam(0); + f[i][1] += f_eam(1); + f[i][2] += f_eam(2); - if (newton_pair || j < nlocal) { - f[j][0] -= f_eam(0); - f[j][1] -= f_eam(1); - f[j][2] -= f_eam(2); - } - - if (evflag) ev_tally_xyz(i,j,nlocal,newton_pair, - 0.0,0.0,f_eam(0),f_eam(1),f_eam(2),delij[0],delij[1],delij[2]); + if (newton_pair || j < nlocal) { + f[j][0] -= f_eam(0); + f[j][1] -= f_eam(1); + f[j][2] -= f_eam(2); } + + if (evflag) ev_tally_xyz(i,j,nlocal,newton_pair, + 0.0,0.0,f_eam(0),f_eam(1),f_eam(2),delij[0],delij[1],delij[2]); } } @@ -456,60 +432,36 @@ void PairTadah::compute_2b_mb_full(int eflag, int vflag) lt->S.d2b->calc_dXijdri(Zj,rij,rij_sq,fd,0.5); } - int mode=0; if (lt->S.dmb->get_rcut() > rij) { - mode = lt->S.dmb->calc_dXijdri(Zj,rij,rij_sq,delij,lt->rhos.col(i),fd); + lt->S.dmb->calc_dXijdri(Zj,rij,rij_sq,delij,lt->rhos.col(i),fd); } - if (mode==0) { - if (lt->norm) - lt->model->norm.normalise(fd,0); - // mode==0 only x-component is calculated for both 2b and mb - double fpair = lt->model->fpredict(fd,lt->aeds.col(i),0)/rij; - - f[i][0] += delij[0]*fpair; - f[i][1] += delij[1]*fpair; - f[i][2] += delij[2]*fpair; - - f[j][0] -= delij[0]*fpair; - f[j][1] -= delij[1]*fpair; - f[j][2] -= delij[2]*fpair; - - if (evflag) ev_tally(i,j,nlocal,newton_pair, - 0.0,0.0,fpair,delij[0],delij[1],delij[2]); + // copy 2b descriptors first and + // scale all 2b components by delij/rij + // this is inefficient but will do for now... TODO + for(size_t s=lt->bias; s<lt->S.d2b->size()+lt->bias; ++s) { + fd(s,0) /= rij; + fd(s,1) = fd(s,0); + fd(s,2) = fd(s,0); + fd(s,0) *= delij[0]; + fd(s,1) *= delij[1]; + fd(s,2) *= delij[2]; } - else { - // mode!=0, S.d2b calculates x-comp only, S.dmb calcs all 3-directions - - // copy 2b descriptors first and - // scale all 2b components by delij/rij - // this is inefficient but will do for now... TODO - for(size_t s=lt->bias; s<lt->S.d2b->size()+lt->bias; ++s) { - fd(s,0) /= rij; - fd(s,1) = fd(s,0); - fd(s,2) = fd(s,0); - fd(s,0) *= delij[0]; - fd(s,1) *= delij[1]; - fd(s,2) *= delij[2]; - } - if (lt->norm) - lt->model->norm.normalise(fd); + if (lt->norm) + lt->model->norm.normalise(fd); - // for mode!=0 we don't need to scale mb part by delij/rij - // as S.dmb calculator does it. - Vec3d f_eam = lt->model->fpredict(fd,lt->aeds.col(i)); + Vec3d f_eam = lt->model->fpredict(fd,lt->aeds.col(i)); - f[i][0] += f_eam(0); - f[i][1] += f_eam(1); - f[i][2] += f_eam(2); + f[i][0] += f_eam(0); + f[i][1] += f_eam(1); + f[i][2] += f_eam(2); - f[j][0] -= f_eam(0); - f[j][1] -= f_eam(1); - f[j][2] -= f_eam(2); + f[j][0] -= f_eam(0); + f[j][1] -= f_eam(1); + f[j][2] -= f_eam(2); - if (evflag) ev_tally_xyz(i,j,nlocal,newton_pair, - 0.0,0.0,f_eam(0),f_eam(1),f_eam(2),delij[0],delij[1],delij[2]); - } + if (evflag) ev_tally_xyz(i,j,nlocal,newton_pair, + 0.0,0.0,f_eam(0),f_eam(1),f_eam(2),delij[0],delij[1],delij[2]); } } @@ -760,38 +712,13 @@ void PairTadah::compute_dimers(int eflag, int vflag) lt->S.d2b->calc_dXijdri(1,r[n],r_sq[n],fdIJ); } - int mode=0; if (lt->initmb && lt->S.dmb->get_rcut() > r[n]) { - mode = lt->S.dmb->calc_dXijdri(1,r[n],r_sq[n],delM.row(n), - lt->rhos.col(midx[n].first), fdIJ); - mode = lt->S.dmb->calc_dXijdri(1,r[n],r_sq[n],-delM.row(n), - lt->rhos.col(midx[n].second), fdJI); + lt->S.dmb->calc_dXijdri(1,r[n],r_sq[n],delM.row(n), + lt->rhos.col(midx[n].first), fdIJ); + lt->S.dmb->calc_dXijdri(1,r[n],r_sq[n],-delM.row(n), + lt->rhos.col(midx[n].second), fdJI); } - if (mode==0) { - // either compute 2b only or 2b+mb - if (lt->norm) - lt->model->norm.normalise(fdIJ,0); - double fpair = lt->model->fpredict( - fdIJ,lt->aeds.col(midx[n].first),0)/r[n]; - //fpair -= lt->model->fpredict( - // -fdIJ,lt->aeds.col(midx[n].second),0)/r[n]; - // -fdIJ is removed from the math library - fpair += lt->model->fpredict( - fdIJ,lt->aeds.col(midx[n].second),0)/r[n]; - - f[I][0] += fpair*delM(n,0); - f[I][1] += fpair*delM(n,1); - f[I][2] += fpair*delM(n,2); - - f[J][0] -= fpair*delM(n,0); - f[J][1] -= fpair*delM(n,1); - f[J][2] -= fpair*delM(n,2); - - if (evflag) ev_tally(I,J,nlocal,newton_pair,0,0,fpair, - delM(n,0),delM(n,1),delM(n,2)); - } - else { for(size_t s=lt->bias; s<lt->S.d2b->size()+lt->bias; ++s) { fdIJ(s,0) /= r[n]; fdIJ(s,1) = fdIJ(s,0); @@ -830,7 +757,6 @@ void PairTadah::compute_dimers(int eflag, int vflag) if (evflag) ev_tally_xyz(I,J,nlocal,newton_pair,0.0,0.0, f_eam(0),f_eam(1),f_eam(2), delM(n,0),delM(n,1),delM(n,2)); - } } } }