void PairEAMOMP::compute(int eflag, int vflag) { if (eflag || vflag) { ev_setup(eflag,vflag); } else evflag = vflag_fdotr = eflag_global = eflag_atom = 0; const int nall = atom->nlocal + atom->nghost; const int nthreads = comm->nthreads; const int inum = list->inum; // grow energy and fp arrays if necessary // need to be atom->nmax in length if (atom->nmax > nmax) { memory->destroy(rho); memory->destroy(fp); nmax = atom->nmax; memory->create(rho,nthreads*nmax,"pair:rho"); memory->create(fp,nmax,"pair:fp"); } #if defined(_OPENMP) #pragma omp parallel default(none) shared(eflag,vflag) #endif { int ifrom, ito, tid; loop_setup_thr(ifrom, ito, tid, inum, nthreads); ThrData *thr = fix->get_thr(tid); thr->timer(Timer::START); ev_setup_thr(eflag, vflag, nall, eatom, vatom, thr); if (force->newton_pair) thr->init_eam(nall, rho); else thr->init_eam(atom->nlocal, rho); if (evflag) { if (eflag) { if (force->newton_pair) eval<1,1,1>(ifrom, ito, thr); else eval<1,1,0>(ifrom, ito, thr); } else { if (force->newton_pair) eval<1,0,1>(ifrom, ito, thr); else eval<1,0,0>(ifrom, ito, thr); } } else { if (force->newton_pair) eval<0,0,1>(ifrom, ito, thr); else eval<0,0,0>(ifrom, ito, thr); } thr->timer(Timer::PAIR); reduce_thr(this, eflag, vflag, thr); } // end of omp parallel region }
void PairMEAMSplineOMP::compute(int eflag, int vflag) { if (eflag || vflag) { ev_setup(eflag,vflag); } else evflag = vflag_fdotr = eflag_global = vflag_global = eflag_atom = vflag_atom = 0; const int nall = atom->nlocal + atom->nghost; const int nthreads = comm->nthreads; const int inum = listfull->inum; if (listhalf->inum != inum) error->warning(FLERR,"inconsistent half and full neighborlist"); // Grow per-atom array if necessary. if (atom->nmax > nmax) { memory->destroy(Uprime_values); nmax = atom->nmax; memory->create(Uprime_values,nmax*nthreads,"pair:Uprime"); } #if defined(_OPENMP) #pragma omp parallel default(none) shared(eflag,vflag) #endif { int ifrom, ito, tid; loop_setup_thr(ifrom, ito, tid, inum, nthreads); ThrData *thr = fix->get_thr(tid); ev_setup_thr(eflag, vflag, nall, eatom, vatom, thr); thr->init_eam(nall,Uprime_values); if (evflag) { if (eflag) { eval<1,1>(ifrom, ito, thr); } else { eval<1,0>(ifrom, ito, thr); } } else { eval<0,0>(ifrom, ito, thr); } reduce_thr(this, eflag, vflag, thr); } // end of omp parallel region }