SPARTA WWW Site - SPARTA Documentation - SPARTA Commands

surf_collide command


surf_collide ID style args keyword values ... 


surf_collide 1 specular
surf_collide 1 diffuse 273.15 0.9
surf_collide heatwall diffuse v_ramp 0.8
surf_collide heatwall diffuse v_ramp 0.8 translate 5.0 0.0 0.0 


Define a model for particle-surface collisions. One or more models can be defined and assigned to different surfaces or simulation box boundaries via the surf_modify or bound_modify commands. See Section 4.9 for more details of how SPARTA defines surfaces as collections of geometric elements, triangles in 3d and line segments in 2d.

The ID for a surface collision model is used to identify it in other commands. Each surface collision model ID must be unique. The ID can only contain alphanumeric characters and underscores.

The specular style computes a simple specular reflection model. It requires no arguments. Specular reflection means that a particle reflects off a surface element with its incident velocity vector reversed with respect to the outward normal of the surface element. The particle's speed is unchanged.

The diffuse style computes a simple diffusive reflection model.

The model has 2 parameters set by the Tsurf and acc arguments. Tsurf is the temperature of the surface. Acc is an accommodation coefficient from 0.0 to 1.0, which determines what fraction of surface collisions are diffusive. The rest are specular. Thus a setting of acc = 1.0 means all collisions are specular.

Note that setting acc = 1.0, is a way to perform surface reactions with specular reflection, via the surf_react command, which cannot be done in conjunction with the surf_collide specular command. See the surf_react doc page for details.

Diffuse reflection emits the particle from the surface with no dependence on its incident velocity. A new velocity is assigned to the particle, sampled from a Gaussian distribution consistent with the surface temperature. The new velocity will have thermal components in the direction of the outward surface normal and the plane tangent to the surface given by:

The Tsurf value can be specified as an equal-style variable. If the value is a variable, it should be specified as v_name, where name is the variable name. In this case, the variable will be evaluated each timestep, and its value used to determine the current surface temperature.

Equal-style variables can specify formulas with various mathematical functions, and include stats_style command keywords for the simulation box parameters and timestep and elapsed time. Thus it is easy to specify a time-dependent temperature.

The piston style models a subsonic pressure boundary condition. It can only be assigned to the simulation box boundaries via the bound_modify command or to surface elements which are parallel to one of the box boundaries (via the surf_modify command).

It treats collisions of particles with the surface as if the surface were moving with specified velocity Vwall away from the incident particle. Thus the "collision" actually occurs later in the timestep and the reflected velocity is less than it would be for reflection from a stationary surface. This calculation is performed using equations 12.30 and 12.31 in (Bird94)) to compute the reflected velocity and final position of the particle. If the particle does not return within the timestep to a position inside the simulation box (for a boundary surface) or to the same side of the initial surface that it started from (for a surface element collision), the particle is deleted. This effectively induces particles at the boundary to have a velocity distribution consistent with a subsonic pressure boundary condition, as explained in (Bird94)).

Vwall should be chosen to correspond to a desired pressure condition for the density of particles in the system.

NOTE: explain how to do this?

Note that Vwall must always be input as a value >= 0.0, meaning the surface is moving away from the incident particle. For example, in the z-dimension, if the upper box face is assigned Vwall, it is moving upward. Similarly if the lower box face is assigned Vwall, it is moving downward.

The vanish style simply deletes any particle which hits the surface.

This is useful if a surface is defined to be an inflow boundary on the simulation domain, e.g. using the fix emit/surf command. Using this surface collision model will also treat the surface as an outflow boundary. This is similar to using the fix emit/face command on a simulation box face while also setting the face to be an outflow boundary via the boundary o command.

Note that the surf_react global command can also be used to delete particles hitting a surface, by setting the pdelete parameter to 1.0. Using a surf_collide vanish command is simpler.

The keyword translate can only be applied to the diffuse style. It models the surface as if it were translating with a constant velocity, specified by the vector (Vx,Vy,Vz). This velocity is added to the final post-collisional velocity of each particle that collides with the surface.

The keyword rotate can only be applied to the diffuse style. It models the surface as if it were rotating with a constant angular velocity, specified by the vector W = (Wx,Wy,Wz), around the specified point P = (Px,Py,Pz). Note that W and P define the rotation axis. The magnitude of W defines the speed of rotation. I.e. if the length of W = 2*pi then the surface is rotating at one revolution per time unit, where time units are defined by the units command.

When a particle collides with the surface at a point X = (x,y,z), the collision point has a velocity given by V = (Vx,Vy,Vz) = W cross (X-P). This velocity is added to the final post-collisional velocity of the particle.

The rotate keyword can be used to treat a simulation box boundary as a rotating wall, e.g. the end cap of an axisymmetric cylinder. Or to model a rotating object consisting of surface elements, e.g. a sphere. In either case, the wall or surface elements themselves do not change position due to rotation. They are simply modeled as having a tangential velocity, as if the entire object were rotating.

IMPORTANT NOTE: For both the translate and rotate keywords the added velocity can only be tangential to the surface, with no normal component since the surface is not actually moving in the normal direction. SPARTA does not check that the specified translation or rotation produces a tangential velocity. However if does enforce the condition by subtracting off any component of the added velocity that is normal to the simulation box boundary or individual surface element.

Output info:

All the surface collide models calculate a global vector of length 2. The values can be used by the stats_style command and by variables that define formulas. The latter means they can be used by any command that uses a variable as input, e.g. the fix ave/time command. See Section 4.4 for an overview of SPARTA output options.

The first element of the vector is the count of particles that hit surface elements assigned to this collision model during the current timestep. The second element is the cummulative count of particles that have hit surface elements since the current run began.

Styles with a kk suffix are functionally the same as the corresponding style without the suffix. They have been optimized to run faster, depending on your available hardware, as discussed in the Accelerating SPARTA section of the manual. The accelerated styles take the same arguments and should produce the same results, except for different random number, round-off and precision issues.

These accelerated styles are part of the KOKKOS package. They are only enabled if SPARTA was built with that package. See the Making SPARTA section for more info.

You can specify the accelerated styles explicitly in your input script by including their suffix, or you can use the -suffix command-line switch when you invoke SPARTA, or you can use the suffix command in your input script.

See the Accelerating SPARTA section of the manual for more instructions on how to use the accelerated styles effectively.


The translate and rotate keywords cannot be used together.

If specified with a kk suffix, this command can be used no more than twice in the same input script (active at the same time).

Related commands:

read_surf, bound_modify

Default: none

(Bird94) G. A. Bird, Molecular Gas Dynamics and the Direct Simulation of Gas Flows, Clarendon Press, Oxford (1994).