From fa5ec0bae79db07993e14c61e0a4845a55721e97 Mon Sep 17 00:00:00 2001 From: Charlles Abreu Date: Sun, 27 Aug 2017 19:22:37 -0300 Subject: [PATCH] Fixes with post-force() not allowed after fix rigid or rigid/small --- src/RIGID/fix_rigid.cpp | 18 ++++++++++++++++++ src/RIGID/fix_rigid_small.cpp | 18 ++++++++++++++++++ 2 files changed, 36 insertions(+) diff --git a/src/RIGID/fix_rigid.cpp b/src/RIGID/fix_rigid.cpp index b087e2879f..b714f7aac2 100644 --- a/src/RIGID/fix_rigid.cpp +++ b/src/RIGID/fix_rigid.cpp @@ -680,6 +680,24 @@ void FixRigid::init() error->all(FLERR,"Rigid fix must come before NPT/NPH fix"); } + // error if any non-rigid fix with post_force succeeds any fix rigid: + int first_rigid = 0; + while (!modify->fix[first_rigid]->rigid_flag) + first_rigid++; + count = 0; + for (i = first_rigid + 1; i < modify->nfix; i++) { + Fix *ifix = modify->fix[i]; + if ( (modify->fmask[i] & POST_FORCE) && (!ifix->rigid_flag) ) { + count++; + if (comm->me == 0) { + if (screen) fprintf(screen,"> fix %s %s\n",ifix->id,ifix->style); + if (logfile) fprintf(logfile,"> fix %s %s\n",ifix->id,ifix->style); + } + } + } + if (count > 0) + error->all(FLERR,"the fixes listed above must preceed all rigid-body fixes"); + // timestep info dtv = update->dt; diff --git a/src/RIGID/fix_rigid_small.cpp b/src/RIGID/fix_rigid_small.cpp index fa4856dff2..017e49ab14 100644 --- a/src/RIGID/fix_rigid_small.cpp +++ b/src/RIGID/fix_rigid_small.cpp @@ -516,6 +516,24 @@ void FixRigidSmall::init() error->all(FLERR,"Rigid fix must come before NPT/NPH fix"); } + // error if any non-rigid fix with post_force succeeds any fix rigid: + int first_rigid = 0; + while (!modify->fix[first_rigid]->rigid_flag) + first_rigid++; + count = 0; + for (i = first_rigid + 1; i < modify->nfix; i++) { + Fix *ifix = modify->fix[i]; + if ( (modify->fmask[i] & POST_FORCE) && (!ifix->rigid_flag) ) { + count++; + if (comm->me == 0) { + if (screen) fprintf(screen,"> fix %s %s\n",ifix->id,ifix->style); + if (logfile) fprintf(logfile,"> fix %s %s\n",ifix->id,ifix->style); + } + } + } + if (count > 0) + error->all(FLERR,"the fixes listed above must preceed all rigid-body fixes"); + // timestep info dtv = update->dt;