git-svn-id: svn://svn.icms.temple.edu/lammps-ro/trunk@16053 f3b2605a-c512-4ea7-a41b...
[lammps.git] / doc / src / region.txt
blob4ce230da7b55c6493e7c2d22ffd21c10b4bcbd40
1 "LAMMPS WWW Site"_lws - "LAMMPS Documentation"_ld - "LAMMPS Commands"_lc :c
3 :link(lws,http://lammps.sandia.gov)
4 :link(ld,Manual.html)
5 :link(lc,Section_commands.html#comm)
7 :line
9 region command :h3
11 [Syntax:]
13 region ID style args keyword arg ... :pre
15 ID = user-assigned name for the region :ulb,l
16 style = {delete} or {block} or {cone} or {cylinder} or {plane} or {prism} or {sphere} or {union} or {intersect} :l
17   {delete} = no args
18   {block} args = xlo xhi ylo yhi zlo zhi
19     xlo,xhi,ylo,yhi,zlo,zhi = bounds of block in all dimensions (distance units)
20   {cone} args = dim c1 c2 radlo radhi lo hi
21     dim = {x} or {y} or {z} = axis of cone
22     c1,c2 = coords of cone axis in other 2 dimensions (distance units)
23     radlo,radhi = cone radii at lo and hi end (distance units)
24     lo,hi = bounds of cone in dim (distance units)
25   {cylinder} args = dim c1 c2 radius lo hi
26     dim = {x} or {y} or {z} = axis of cylinder
27     c1,c2 = coords of cylinder axis in other 2 dimensions (distance units)
28     radius = cylinder radius (distance units)
29       radius can be a variable (see below)
30     lo,hi = bounds of cylinder in dim (distance units)
31   {plane} args = px py pz nx ny nz
32     px,py,pz = point on the plane (distance units)
33     nx,ny,nz = direction normal to plane (distance units)
34   {prism} args = xlo xhi ylo yhi zlo zhi xy xz yz
35     xlo,xhi,ylo,yhi,zlo,zhi = bounds of untilted prism (distance units)
36     xy = distance to tilt y in x direction (distance units)
37     xz = distance to tilt z in x direction (distance units)
38     yz = distance to tilt z in y direction (distance units)
39   {sphere} args = x y z radius
40     x,y,z = center of sphere (distance units)
41     radius = radius of sphere (distance units)
42       radius can be a variable (see below)
43   {union} args = N reg-ID1 reg-ID2 ...
44     N = # of regions to follow, must be 2 or greater
45     reg-ID1,reg-ID2, ... = IDs of regions to join together
46   {intersect} args = N reg-ID1 reg-ID2 ...
47     N = # of regions to follow, must be 2 or greater
48     reg-ID1,reg-ID2, ... = IDs of regions to intersect :pre
49 zero or more keyword/arg pairs may be appended :l
50 keyword = {side} or {units} or {move} or {rotate} or {open} :l
51   {side} value = {in} or {out}
52     {in} = the region is inside the specified geometry
53     {out} = the region is outside the specified geometry
54   {units} value = {lattice} or {box}
55     {lattice} = the geometry is defined in lattice units
56     {box} = the geometry is defined in simulation box units
57   {move} args = v_x v_y v_z
58     v_x,v_y,v_z = equal-style variables for x,y,z displacement of region over time
59   {rotate} args = v_theta Px Py Pz Rx Ry Rz
60     v_theta = equal-style variable for rotaton of region over time (in radians)
61     Px,Py,Pz = origin for axis of rotation (distance units)
62     Rx,Ry,Rz = axis of rotation vector
63   {open} value = integer from 1-6 corresponding to face index (see below)
64 :pre
66 accelerated styles (with same args) = {block/kk} :l
67 :ule
69 [Examples:]
71 region 1 block -3.0 5.0 INF 10.0 INF INF
72 region 2 sphere 0.0 0.0 0.0 5 side out
73 region void cylinder y 2 3 5 -5.0 EDGE units box
74 region 1 prism 0 10 0 10 0 10 2 0 0
75 region outside union 4 side1 side2 side3 side4
76 region 2 sphere 0.0 0.0 0.0 5 side out move v_left v_up NULL
77 region openbox block 0 10 0 10 0 10 open 5 open 6 units box
78 region funnel cone z 10 10 2 5 0 10 open 1 units box :pre
81 [Description:]
83 This command defines a geometric region of space.  Various other
84 commands use regions.  For example, the region can be filled with
85 atoms via the "create_atoms"_create_atoms.html command.  Or a bounding
86 box around the region, can be used to define the simulation box via
87 the "create_box"_create_box.html command.  Or the atoms in the region
88 can be identified as a group via the "group"_group.html command, or
89 deleted via the "delete_atoms"_delete_atoms.html command.  Or the
90 surface of the region can be used as a boundary wall via the "fix
91 wall/region"_fix_wall_region.html command.
93 Commands which use regions typically test whether an atom's position
94 is contained in the region or not.  For this purpose, coordinates
95 exactly on the region boundary are considered to be interior to the
96 region.  This means, for example, for a spherical region, an atom on
97 the sphere surface would be part of the region if the sphere were
98 defined with the {side in} keyword, but would not be part of the
99 region if it were defined using the {side out} keyword.  See more
100 details on the {side} keyword below.
102 Normally, regions in LAMMPS are "static", meaning their geometric
103 extent does not change with time.  If the {move} or {rotate} keyword
104 is used, as described below, the region becomes "dynamic", meaning
105 it's location or orientation changes with time.  This may be useful,
106 for example, when thermostatting a region, via the compute temp/region
107 command, or when the fix wall/region command uses a region surface as
108 a bounding wall on particle motion, i.e. a rotating container.
110 The {delete} style removes the named region.  Since there is little
111 overhead to defining extra regions, there is normally no need to do
112 this, unless you are defining and discarding large numbers of regions
113 in your input script.
115 The lo/hi values for {block} or {cone} or {cylinder} or {prism} styles
116 can be specified as EDGE or INF.  EDGE means they extend all the way
117 to the global simulation box boundary.  Note that this is the current
118 box boundary; if the box changes size during a simulation, the region
119 does not.  INF means a large negative or positive number (1.0e20), so
120 it should encompass the simulation box even if it changes size.  If a
121 region is defined before the simulation box has been created (via
122 "create_box"_create_box.html or "read_data"_read_data.html or
123 "read_restart"_read_restart.html commands), then an EDGE or INF
124 parameter cannot be used.  For a {prism} region, a non-zero tilt
125 factor in any pair of dimensions cannot be used if both the lo/hi
126 values in either of those dimensions are INF.  E.g. if the xy tilt is
127 non-zero, then xlo and xhi cannot both be INF, nor can ylo and yhi.
129 NOTE: Regions in LAMMPS do not get wrapped across periodic boundaries,
130 as specified by the "boundary"_boundary.html command.  For example, a
131 spherical region that is defined so that it overlaps a periodic
132 boundary is not treated as 2 half-spheres, one on either side of the
133 simulation box.
135 NOTE: Regions in LAMMPS are always 3d geometric objects, regardless of
136 whether the "dimension"_dimension.html of a simulation is 2d or 3d.
137 Thus when using regions in a 2d simulation, you should be careful to
138 define the region so that its intersection with the 2d x-y plane of
139 the simulation has the 2d geometric extent you want.
141 For style {cone}, an axis-aligned cone is defined which is like a
142 {cylinder} except that two different radii (one at each end) can be
143 defined.  Either of the radii (but not both) can be 0.0.
145 For style {cone} and {cylinder}, the c1,c2 params are coordinates in
146 the 2 other dimensions besides the cylinder axis dimension.  For dim =
147 x, c1/c2 = y/z; for dim = y, c1/c2 = x/z; for dim = z, c1/c2 = x/y.
148 Thus the third example above specifies a cylinder with its axis in the
149 y-direction located at x = 2.0 and z = 3.0, with a radius of 5.0, and
150 extending in the y-direction from -5.0 to the upper box boundary.
152 For style {plane}, a plane is defined which contain the point
153 (px,py,pz) and has a normal vector (nx,ny,nz).  The normal vector does
154 not have to be of unit length.  The "inside" of the plane is the
155 half-space in the direction of the normal vector; see the discussion
156 of the {side} option below.
158 For style {prism}, a parallelepiped is defined (it's too hard to spell
159 parallelepiped in an input script!).  The parallelepiped has its
160 "origin" at (xlo,ylo,zlo) and is defined by 3 edge vectors starting
161 from the origin given by A = (xhi-xlo,0,0); B = (xy,yhi-ylo,0); C =
162 (xz,yz,zhi-zlo).  {Xy,xz,yz} can be 0.0 or positive or negative values
163 and are called "tilt factors" because they are the amount of
164 displacement applied to faces of an originally orthogonal box to
165 transform it into the parallelepiped.
167 A prism region that will be used with the "create_box"_create_box.html
168 command to define a triclinic simulation box must have tilt factors
169 (xy,xz,yz) that do not skew the box more than half the distance of
170 corresponding the parallel box length.  For example, if xlo = 2 and
171 xhi = 12, then the x box length is 10 and the xy tilt factor must be
172 between -5 and 5.  Similarly, both xz and yz must be between
173 -(xhi-xlo)/2 and +(yhi-ylo)/2.  Note that this is not a limitation,
174 since if the maximum tilt factor is 5 (as in this example), then
175 configurations with tilt = ..., -15, -5, 5, 15, 25, ... are all
176 geometrically equivalent.
178 The {radius} value for style {sphere} and {cylinder} can be specified
179 as an equal-style "variable"_variable.html.  If the value is a
180 variable, it should be specified as v_name, where name is the variable
181 name.  In this case, the variable will be evaluated each timestep, and
182 its value used to determine the radius of the region.
184 Equal-style variables can specify formulas with various mathematical
185 functions, and include "thermo_style"_thermo_style.html command
186 keywords for the simulation box parameters and timestep and elapsed
187 time.  Thus it is easy to specify a time-dependent radius.
189 See "Section 6.12"_Section_howto.html#howto_12 of the doc pages
190 for a geometric description of triclinic boxes, as defined by LAMMPS,
191 and how to transform these parameters to and from other commonly used
192 triclinic representations.
194 The {union} style creates a region consisting of the volume of all the
195 listed regions combined.  The {intersect} style creates a region
196 consisting of the volume that is common to all the listed regions.
198 NOTE: The {union} and {intersect} regions operate by invoking methods
199 from their list of sub-regions.  Thus you cannot delete the
200 sub-regions after defining a {union} or {intersection} region.
202 :line
204 The {side} keyword determines whether the region is considered to be
205 inside or outside of the specified geometry.  Using this keyword in
206 conjunction with {union} and {intersect} regions, complex geometries
207 can be built up.  For example, if the interior of two spheres were
208 each defined as regions, and a {union} style with {side} = out was
209 constructed listing the region-IDs of the 2 spheres, the resulting
210 region would be all the volume in the simulation box that was outside
211 both of the spheres.
213 The {units} keyword determines the meaning of the distance units used
214 to define the region for any argument above listed as having distance
215 units.  It also affects the scaling of the velocity vector specfied
216 with the {vel} keyword, the amplitude vector specified with the
217 {wiggle} keyword, and the rotation point specified with the {rotate}
218 keyword, since they each involve a distance metric.
220 A {box} value selects standard distance units as defined by the
221 "units"_units.html command, e.g. Angstroms for units = real or metal.
222 A {lattice} value means the distance units are in lattice spacings.
223 The "lattice"_lattice.html command must have been previously used to
224 define the lattice spacings which are used as follows:
226 For style {block}, the lattice spacing in dimension x is applied to
227 xlo and xhi, similarly the spacings in dimensions y,z are applied to
228 ylo/yhi and zlo/zhi. :ulb,l
230 For style {cone}, the lattice spacing in argument {dim} is applied to
231 lo and hi.  The spacings in the two radial dimensions are applied to
232 c1 and c2.  The two cone radii are scaled by the lattice
233 spacing in the dimension corresponding to c1. :l
235 For style {cylinder}, the lattice spacing in argument {dim} is applied
236 to lo and hi.  The spacings in the two radial dimensions are applied
237 to c1 and c2.  The cylinder radius is scaled by the lattice
238 spacing in the dimension corresponding to c1. :l
240 For style {plane}, the lattice spacing in dimension x is applied to
241 px and nx, similarly the spacings in dimensions y,z are applied to
242 py/ny and pz/nz. :l
244 For style {prism}, the lattice spacing in dimension x is applied to
245 xlo and xhi, similarly for ylo/yhi and zlo/zhi.  The lattice spacing
246 in dimension x is applied to xy and xz, and the spacing in dimension y
247 to yz. :l
249 For style {sphere}, the lattice spacing in dimensions x,y,z are
250 applied to the sphere center x,y,z.  The spacing in dimension x is
251 applied to the sphere radius. :l,ule
253 :line
255 If the {move} or {rotate} keywords are used, the region is "dynamic",
256 meaning its location or orientation changes with time.  These keywords
257 cannot be used with a {union} or {intersect} style region.  Instead,
258 the keywords should be used to make the individual sub-regions of the
259 {union} or {intersect} region dynamic.  Normally, each sub-region
260 should be "dynamic" in the same manner (e.g. rotate around the same
261 point), though this is not a requirement.
263 The {move} keyword allows one or more "equal-style
264 variables"_variable.html to be used to specify the x,y,z displacement
265 of the region, typically as a function of time.  A variable is
266 specified as v_name, where name is the variable name.  Any of the
267 three variables can be specified as NULL, in which case no
268 displacement is calculated in that dimension.
270 Note that equal-style variables can specify formulas with various
271 mathematical functions, and include "thermo_style"_thermo_style.html
272 command keywords for the simulation box parameters and timestep and
273 elapsed time.  Thus it is easy to specify a region displacement that
274 change as a function of time or spans consecutive runs in a continuous
275 fashion.  For the latter, see the {start} and {stop} keywords of the
276 "run"_run.html command and the {elaplong} keyword of "thermo_style
277 custom"_thermo_style.html for details.
279 For example, these commands would displace a region from its initial
280 position, in the positive x direction, effectively at a constant
281 velocity:
283 variable dx equal ramp(0,10)
284 region 2 sphere 10.0 10.0 0.0 5 move v_dx NULL NULL :pre
286 Note that the initial displacemet is 0.0, though that is not required.
288 Either of these varaibles would "wiggle" the region back and forth in
289 the y direction:
291 variable dy equal swiggle(0,5,100)
292 variable dysame equal 5*sin(2*PI*elaplong*dt/100)
293 region 2 sphere 10.0 10.0 0.0 5 move NULL v_dy NULL :pre
295 The {rotate} keyword rotates the region around a rotation axis {R} =
296 (Rx,Ry,Rz) that goes thru a point {P} = (Px,Py,Pz).  The rotation
297 angle is calculated, presumably as a function of time, by a variable
298 specified as v_theta, where theta is the variable name.  The variable
299 should generate its result in radians.  The direction of rotation for
300 the region around the rotation axis is consistent with the right-hand
301 rule: if your right-hand thumb points along {R}, then your fingers
302 wrap around the axis in the direction of rotation.
304 The {move} and {rotate} keywords can be used together.  In this case,
305 the displacement specified by the {move} keyword is applied to the {P}
306 point of the {rotate} keyword.
308 :line
310 The {open} keyword can be used (multiple times) to indicate that one
311 or more faces of the region are ignored for purposes of particle/wall
312 interactions.  This keyword is only relevant for regions used by the
313 {fix wall/region} and {fix wall/gran/region} commands.  It can be used
314 to create "open" containers where only some of the region faces are
315 walls.  For example, a funnel can be created with a {cone} style
316 region that has an open face at the smaller radius for particles to
317 flow out, or at the larger radius for pouring particles into the cone,
318 or both.
320 Note that using the {open} keyword partly overrides the {side}
321 keyword, since both exterior and interior surfaces of an open region
322 are tested for particle contacts.  The exception to this is a {union}
323 or {intersect} region which includes an open sub-region.  In that case
324 the {side} keyword is still used to define the union/intersect region
325 volume, and the {open} settings are only applied to the individual
326 sub-regions that use them.
328 The indices specified as part of the {open} keyword have the following
329 meanings:
331 For style {block}, indices 1-6 correspond to the xlo, xhi, ylo, yhi,
332 zlo, zhi surfaces of the block.  I.e. 1 is the yz plane at x = xlo, 2
333 is the yz-plane at x = xhi, 3 is the xz plane at y = ylo, 4 is the xz
334 plane at y = yhi, 5 is the xy plane at z = zlo, 6 is the xy plane at z
335 = zhi).  In the second-to-last example above, the region is a box open
336 at both xy planes.
338 For style {prism}, values 1-6 have the same mapping as for style
339 {block}.  I.e. in an untilted {prism}, {open} indices correspond to
340 the xlo, xhi, ylo, yhi, zlo, zhi surfaces.
342 For style {cylinder}, index 1 corresponds to the flat end cap at the
343 low coordinate along the cylinder axis, index 2 corresponds to the
344 high-coordinate flat end cap along the cylinder axis, and index 3 is
345 the curved cylinder surface.  For example, a {cylinder} region with
346 {open 1 open 2} keywords will be open at both ends (e.g. a section of
347 pipe), regardless of the cylinder orientation.
349 For style {cone}, the mapping is the same as for style {cylinder}.
350 Index 1 is the low-coordinate flat end cap, index 2 is the
351 high-coordinate flat end cap, and index 3 is the curved cone surface.
352 In the last example above, a {cone} region is defined along the z-axis
353 that is open at the zlo value (e.g. for use as a funnel).
355 For all other styles, the {open} keyword is ignored.  As inidcated
356 above, this includes the {intersect} and {union} regions, though their
357 sub-regions can be defined with the {open} keyword.
359 :line
361 Styles with a {kk} suffix are functionally the same as the
362 corresponding style without the suffix.  They have been optimized to
363 run faster, depending on your available hardware, as discussed in
364 "Section 5"_Section_accelerate.html of the manual.  The
365 accelerated styles take the same arguments and should produce the same
366 results, except for round-off and precision issues.
368 The code using the region (such as a fix or compute) must also be supported
369 by Kokkos or no acceleration will occur. Currently, only {block} style
370 regions are supported by Kokkos.
372 These accelerated styles are part of the Kokkos package.  They are
373 only enabled if LAMMPS was built with that package.  See the "Making
374 LAMMPS"_Section_start.html#start_3 section for more info.
376 You can specify the accelerated styles explicitly in your input script
377 by including their suffix, or you can use the "-suffix command-line
378 switch"_Section_start.html#start_7 when you invoke LAMMPS, or you can
379 use the "suffix"_suffix.html command in your input script.
381 See "Section 5"_Section_accelerate.html of the manual for
382 more instructions on how to use the accelerated styles effectively.
384 :line
386 [Restrictions:]
388 A prism cannot be of 0.0 thickness in any dimension; use a small z
389 thickness for 2d simulations.  For 2d simulations, the xz and yz
390 parameters must be 0.0.
392 [Related commands:]
394 "lattice"_lattice.html, "create_atoms"_create_atoms.html,
395 "delete_atoms"_delete_atoms.html, "group"_group.html
397 [Default:]
399 The option defaults are side = in, units = lattice, and no move or
400 rotation.