git-svn-id: svn://svn.icms.temple.edu/lammps-ro/trunk@9583 f3b2605a-c512-4ea7-a41b-209d697bcdaa

This commit is contained in:
sjplimp
2013-03-06 16:44:56 +00:00
parent ead9fe7029
commit 18a04f2c5c
2 changed files with 25 additions and 42 deletions

View File

@ -22,7 +22,6 @@
#include "atom.h" #include "atom.h"
#include "domain.h" #include "domain.h"
#include "comm.h" #include "comm.h"
#include "atom.h"
#include "force.h" #include "force.h"
#include "pair.h" #include "pair.h"
#include "bond.h" #include "bond.h"
@ -148,7 +147,7 @@ Respa::Respa(LAMMPS *lmp, int narg, char **arg) : Integrate(lmp, narg, arg)
if (screen) { if (screen) {
fprintf(screen,"Respa levels:\n"); fprintf(screen,"Respa levels:\n");
for (int i = 0; i < nlevels; i++) { for (int i = 0; i < nlevels; i++) {
fprintf(screen," %d =",i); fprintf(screen," %d =",i+1);
if (level_bond == i) fprintf(screen," bond"); if (level_bond == i) fprintf(screen," bond");
if (level_angle == i) fprintf(screen," angle"); if (level_angle == i) fprintf(screen," angle");
if (level_dihedral == i) fprintf(screen," dihedral"); if (level_dihedral == i) fprintf(screen," dihedral");
@ -164,7 +163,7 @@ Respa::Respa(LAMMPS *lmp, int narg, char **arg) : Integrate(lmp, narg, arg)
if (logfile) { if (logfile) {
fprintf(logfile,"Respa levels:\n"); fprintf(logfile,"Respa levels:\n");
for (int i = 0; i < nlevels; i++) { for (int i = 0; i < nlevels; i++) {
fprintf(logfile," %d =",i); fprintf(logfile," %d =",i+1);
if (level_bond == i) fprintf(logfile," bond"); if (level_bond == i) fprintf(logfile," bond");
if (level_angle == i) fprintf(logfile," angle"); if (level_angle == i) fprintf(logfile," angle");
if (level_dihedral == i) fprintf(logfile," dihedral"); if (level_dihedral == i) fprintf(logfile," dihedral");
@ -287,6 +286,10 @@ void Respa::init()
ev_setup(); ev_setup();
// detect if fix omp is present and will clear force arrays for us
int ifix = modify->find_fix("package_omp");
if (ifix >= 0) external_force_clear = 1;
// set flags for what arrays to clear in force_clear() // set flags for what arrays to clear in force_clear()
// need to clear additionals arrays if they exist // need to clear additionals arrays if they exist
@ -615,6 +618,8 @@ void Respa::recurse(int ilevel)
void Respa::force_clear(int newtonflag) void Respa::force_clear(int newtonflag)
{ {
if (external_force_clear) return;
int i; int i;
if (external_force_clear) return; if (external_force_clear) return;
@ -625,37 +630,15 @@ void Respa::force_clear(int newtonflag)
int nall; int nall;
if (newtonflag) nall = atom->nlocal + atom->nghost; if (newtonflag) nall = atom->nlocal + atom->nghost;
else nall = atom->nlocal; else nall = atom->nlocal;
int ntot = nall * comm->nthreads;
double **f = atom->f; size_t nbytes = sizeof(double) * nall;
for (i = 0; i < ntot; i++) {
f[i][0] = 0.0;
f[i][1] = 0.0;
f[i][2] = 0.0;
}
if (torqueflag) { if (nbytes > 0 ) {
double **torque = atom->torque; memset(&(atom->f[0][0]),0,3*nbytes);
for (i = 0; i < nall; i++) { if (torqueflag) memset(&(atom->torque[0][0]),0,3*nbytes);
torque[i][0] = 0.0; if (erforceflag) memset(&(atom->erforce[0]), 0, nbytes);
torque[i][1] = 0.0; if (e_flag) memset(&(atom->de[0]), 0, nbytes);
torque[i][2] = 0.0; if (rho_flag) memset(&(atom->drho[0]), 0, nbytes);
}
}
if (erforceflag) {
double *erforce = atom->erforce;
for (i = 0; i < nall; i++) erforce[i] = 0.0;
}
if (e_flag) {
double *de = atom->de;
for (i = 0; i < nall; i++) de[i] = 0.0;
}
if (rho_flag) {
double *drho = atom->drho;
for (i = 0; i < nall; i++) drho[i] = 0.0;
} }
} }

View File

@ -1,4 +1,4 @@
/* ---------------------------------------------------------------------- /* -*- c++ -*- ----------------------------------------------------------
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
http://lammps.sandia.gov, Sandia National Laboratories http://lammps.sandia.gov, Sandia National Laboratories
Steve Plimpton, sjplimp@sandia.gov Steve Plimpton, sjplimp@sandia.gov
@ -40,18 +40,18 @@ class Respa : public Integrate {
int level_inner,level_middle,level_outer; int level_inner,level_middle,level_outer;
Respa(class LAMMPS *, int, char **); Respa(class LAMMPS *, int, char **);
~Respa(); virtual ~Respa();
void init(); virtual void init();
void setup(); virtual void setup();
void setup_minimal(int); virtual void setup_minimal(int);
void run(int); virtual void run(int);
void cleanup(); virtual void cleanup();
void reset_dt(); virtual void reset_dt();
void copy_f_flevel(int); void copy_f_flevel(int);
void copy_flevel_f(int); void copy_flevel_f(int);
private: protected:
int triclinic; // 0 if domain is orthog, 1 if triclinic int triclinic; // 0 if domain is orthog, 1 if triclinic
int torqueflag,erforceflag; int torqueflag,erforceflag;
int e_flag,rho_flag; int e_flag,rho_flag;
@ -59,7 +59,7 @@ class Respa : public Integrate {
int *newton; // newton flag at each level int *newton; // newton flag at each level
class FixRespa *fix_respa; // Fix to store the force level array class FixRespa *fix_respa; // Fix to store the force level array
void recurse(int); virtual void recurse(int);
void force_clear(int); void force_clear(int);
void sum_flevel_f(); void sum_flevel_f();
}; };