From fe2278f1b7734043945993a3733ef356ba0fa8a2 Mon Sep 17 00:00:00 2001 From: sjplimp Date: Fri, 12 Oct 2012 19:45:06 +0000 Subject: [PATCH] git-svn-id: svn://svn.icms.temple.edu/lammps-ro/trunk@8952 f3b2605a-c512-4ea7-a41b-209d697bcdaa --- src/KSPACE/pppm.cpp | 2 +- src/KSPACE/pppm_disp.cpp | 5 ++--- src/fix_balance.cpp | 12 +++++------- src/kspace.cpp | 13 +++++++++++++ src/kspace.h | 2 ++ 5 files changed, 23 insertions(+), 11 deletions(-) diff --git a/src/KSPACE/pppm.cpp b/src/KSPACE/pppm.cpp index b8891bf4de..c231851eec 100644 --- a/src/KSPACE/pppm.cpp +++ b/src/KSPACE/pppm.cpp @@ -300,7 +300,7 @@ void PPPM::init() order--; } - if (order == 0) error->all(FLERR,"PPPM order has been reduced to 0"); + if (order == 1) error->all(FLERR,"PPPM order has been reduced to 1"); // adjust g_ewald diff --git a/src/KSPACE/pppm_disp.cpp b/src/KSPACE/pppm_disp.cpp index 67ec68d4bd..00cf99e0fd 100755 --- a/src/KSPACE/pppm_disp.cpp +++ b/src/KSPACE/pppm_disp.cpp @@ -371,7 +371,6 @@ void PPPMDisp::init() set_grid(); - if (nx_pppm >= OFFSET || ny_pppm >= OFFSET || nz_pppm >= OFFSET) error->all(FLERR,"PPPMDisp Coulomb grid is too large"); @@ -396,7 +395,6 @@ void PPPMDisp::init() if (nzlo_ghost > nzhi_in-nzlo_in+1) flag = 1; if (nzhi_ghost > nzhi_in-nzlo_in+1) flag = 1; - int flag_all; MPI_Allreduce(&flag,&flag_all,1,MPI_INT,MPI_SUM,world); @@ -404,7 +402,8 @@ void PPPMDisp::init() order--; } - if (order == 0) error->all(FLERR,"Coulomb PPPMDisp order has been reduced to 0"); + if (order == 1) + error->all(FLERR,"Coulomb PPPMDisp order has been reduced to 1"); // adjust g_ewald diff --git a/src/fix_balance.cpp b/src/fix_balance.cpp index 31a2e1cbc9..f19356d57c 100644 --- a/src/fix_balance.cpp +++ b/src/fix_balance.cpp @@ -127,10 +127,8 @@ int FixBalance::setmask() void FixBalance::init() { - // don't allow PPPM for now - - if (force->kspace && strstr(force->kspace_style,"pppm")) - error->all(FLERR,"Cannot yet use fix balance with PPPM"); + if (force->kspace) kspace_flag = 1; + else kspace_flag = 0; } /* ---------------------------------------------------------------------- */ @@ -241,9 +239,9 @@ void FixBalance::rebalance() if (irregular->migrate_check()) irregular->migrate_atoms(); if (domain->triclinic) domain->lamda2x(atom->nlocal); - // NOTE: still to be implemented - // check that new sub-domains are valid with KSpace constraints - // if (kspace_flag) force->kspace->check(); + // invoke KSpace setup_grid() to adjust to new proc sub-domains + + if (kspace_flag) force->kspace->setup_grid(); // pending triggers pre_neighbor() to compute final imbalance factor // can only be done after atoms migrate in caller's comm->exchange() diff --git a/src/kspace.cpp b/src/kspace.cpp index 2833626c2a..1673bd7262 100644 --- a/src/kspace.cpp +++ b/src/kspace.cpp @@ -39,6 +39,8 @@ KSpace::KSpace(LAMMPS *lmp, int narg, char **arg) : Pointers(lmp) order = 5; gridflag = 0; gewaldflag = 0; + minorder = 2; + overlap_allowed = 1; order_6 = 5; gridflag_6 = 0; @@ -315,6 +317,17 @@ void KSpace::modify_params(int narg, char **arg) } else if (strcmp(arg[iarg],"order/disp") == 0) { if (iarg+2 > narg) error->all(FLERR,"Illegal kspace_modify command"); order_6 = atoi(arg[iarg+1]); + } else if (strcmp(arg[iarg],"minorder") == 0) { + if (iarg+2 > narg) error->all(FLERR,"Illegal kspace_modify command"); + minorder = atoi(arg[iarg+1]); + if (minorder < 2) error->all(FLERR,"Illegal kspace_modify command"); + iarg += 2; + } else if (strcmp(arg[iarg],"overlap") == 0) { + if (iarg+2 > narg) error->all(FLERR,"Illegal kspace_modify command"); + if (strcmp(arg[iarg+1],"yes") == 0) overlap_allowed = 1; + else if (strcmp(arg[iarg+1],"no") == 0) overlap_allowed = 0; + else error->all(FLERR,"Illegal kspace_modify command"); + iarg += 2; } else if (strcmp(arg[iarg],"force") == 0) { if (iarg+2 > narg) error->all(FLERR,"Illegal kspace_modify command"); accuracy_absolute = atof(arg[iarg+1]); diff --git a/src/kspace.h b/src/kspace.h index 2d9eb016ee..d03d5021d8 100644 --- a/src/kspace.h +++ b/src/kspace.h @@ -66,6 +66,7 @@ class KSpace : protected Pointers { virtual void init() = 0; virtual void setup() = 0; + virtual void setup_grid() {}; virtual void compute(int, int) = 0; virtual void compute_group_group(int, int, int) {}; @@ -86,6 +87,7 @@ class KSpace : protected Pointers { int gridflag,gridflag_6; int gewaldflag,gewaldflag_6; int order,order_6; + int minorder,overlap_allowed; int differentiation_flag; int slabflag; int suffix_flag; // suffix compatibility flag