From f110488db0063af94c91cf7a8e501492735cd172 Mon Sep 17 00:00:00 2001 From: athomps Date: Mon, 18 May 2015 21:08:06 +0000 Subject: [PATCH] Added inside_nonperiodic() git-svn-id: svn://svn.icms.temple.edu/lammps-ro/trunk@13482 f3b2605a-c512-4ea7-a41b-209d697bcdaa --- src/domain.cpp | 36 ++++++++++++++++++++++++++++++++++++ src/domain.h | 1 + 2 files changed, 37 insertions(+) diff --git a/src/domain.cpp b/src/domain.cpp index 134065a506..3c0273926b 100644 --- a/src/domain.cpp +++ b/src/domain.cpp @@ -617,6 +617,42 @@ int Domain::inside(double* x) else return 1; } +/* ---------------------------------------------------------------------- + check that point is inside nonperiodic boundaries, in [lo,hi) sense + return 1 if true, 0 if false +------------------------------------------------------------------------- */ + +int Domain::inside_nonperiodic(double* x) +{ + double *lo,*hi,*period; + double delta[3]; + + if (xperiodic && yperiodic && zperiodic) return 1; + + if (triclinic == 0) { + lo = boxlo; + hi = boxhi; + period = prd; + } else { + lo = boxlo_lamda; + hi = boxhi_lamda; + period = prd_lamda; + + delta[0] = x[0] - boxlo[0]; + delta[1] = x[1] - boxlo[1]; + delta[2] = x[2] - boxlo[2]; + + x[0] = h_inv[0]*delta[0] + h_inv[5]*delta[1] + h_inv[4]*delta[2]; + x[1] = h_inv[1]*delta[1] + h_inv[3]*delta[2]; + x[2] = h_inv[2]*delta[2]; + } + + if (!xperiodic && (x[0] < lo[0] || x[0] >= hi[0])) return 0; + if (!yperiodic && (x[1] < lo[1] || x[1] >= hi[1])) return 0; + if (!zperiodic && (x[2] < lo[2] || x[2] >= hi[2])) return 0; + return 1; +} + /* ---------------------------------------------------------------------- warn if image flags of any bonded atoms are inconsistent could be a problem when using replicate or fix rigid diff --git a/src/domain.h b/src/domain.h index d6373ecfb1..1a3ba08343 100644 --- a/src/domain.h +++ b/src/domain.h @@ -127,6 +127,7 @@ class Domain : protected Pointers { virtual void lamda2x(double *, double *); virtual void x2lamda(double *, double *); int inside(double *); + int inside_nonperiodic(double *); void x2lamda(double *, double *, double *, double *); void bbox(double *, double *, double *, double *); void box_corners();