\(\renewcommand{\AA}{\text{Å}}\)

# compute global/atom command

## Syntax

    compute ID group-ID style index input1 input2 ...

- ID, group-ID are documented in compute command

- global/atom = style name of this compute command

- index = c_ID, c_ID[N], f_ID, f_ID[N], v_name

      c_ID = per-atom vector calculated by a compute with ID
      c_ID[I] = Ith column of per-atom array calculated by a compute with ID
      f_ID = per-atom vector calculated by a fix with ID
      f_ID[I] = Ith column of per-atom array calculated by a fix with ID
      v_name = per-atom vector calculated by an atom-style variable with name

- one or more inputs can be listed

- input = c_ID, c_ID[N], f_ID, f_ID[N], v_name

      c_ID = global vector calculated by a compute with ID
      c_ID[I] = Ith column of global array calculated by a compute with ID, I can include wildcard (see below)
      f_ID = global vector calculated by a fix with ID
      f_ID[I] = Ith column of global array calculated by a fix with ID, I can include wildcard (see below)
      v_name = global vector calculated by a vector-style variable with name

## Examples

    compute 1 all global/atom c_chunk c_com[1] c_com[2] c_com[3]
    compute 1 all global/atom c_chunk c_com[*]

## Description

Define a calculation that assigns global values to each atom from vectors or arrays of global values. The specified index parameter is used to determine which global value is assigned to each atom.

The index parameter must reference a per-atom vector or array from a compute or fix or the evaluation of an atom-style variable. Each input value must reference a global vector or array from a compute or fix or the evaluation of an vector-style variable. Details are given below.

The index value for an atom is used as an index \(I\) (from 1 to \(N\), where \(N\) is the number of atoms) into the vector associated with each of the input values. The \(I\)th value from the input vector becomes one output value for that atom. If the atom is not in the specified group, or the index \(I < 1\) or \(I > M\), where \(M\) is the actual length of the input vector, then an output value of 0.0 is assigned to the atom.

An example of how this command is useful, is in the context of “chunks” which are static or dynamic subsets of atoms. The compute chunk/atom command assigns unique chunk IDs to each atom. Its output can be used as the index parameter for this command. Various other computes with “chunk” in their style name, such as compute com/chunk or compute msd/chunk, calculate properties for each chunk. The output of these commands are global vectors or arrays, with one or more values per chunk, and can be used as input values for this command. This command will then assign the global chunk value to each atom in the chunk, producing a per-atom vector or per-atom array as output. The per-atom values can then be output to a dump file or used by any command that uses per-atom values from a compute as input, as discussed on the Howto output doc page.

As a concrete example, these commands will calculate the displacement of each atom from the center-of-mass of the molecule it is in, and dump those values to a dump file. In this case, each molecule is a chunk.

    compute cc1 all chunk/atom molecule
    compute myChunk all com/chunk cc1
    compute prop all property/atom xu yu zu
    compute glob all global/atom c_cc1 c_myChunk[*]
    variable dx atom c_prop[1]-c_glob[1]
    variable dy atom c_prop[2]-c_glob[2]
    variable dz atom c_prop[3]-c_glob[3]
    variable dist atom sqrt(v_dx*v_dx+v_dy*v_dy+v_dz*v_dz)
    dump 1 all custom 100 tmp.dump id xu yu zu c_glob[1] c_glob[2] c_glob[3] &
         v_dx v_dy v_dz v_dist
    dump_modify 1 sort id

You can add these commands to the bench/in.chain script to see how they work.

Note that for input values from a compute or fix, the bracketed index I can be specified using a wildcard asterisk with the index to effectively specify multiple values. This takes the form “*” or “*n” or “m*” or “m*n”. If \(N\) is the size of the vector (for mode = scalar) or the number of columns in the array (for mode = vector), then an asterisk with no numeric values means all indices from 1 to \(N\). A leading asterisk means all indices from 1 to n (inclusive). A trailing asterisk means all indices from m to \(N\) (inclusive). A middle asterisk means all indices from m to n (inclusive).

Using a wildcard is the same as if the individual columns of the array had been listed one by one. For example, the following two compute global/atom commands are equivalent, since the compute com/chunk command creates a global array with three columns:

    compute cc1 all chunk/atom molecule
    compute com all com/chunk cc1
    compute 1 all global/atom c_cc1 c_com[1] c_com[2] c_com[3]
    compute 1 all global/atom c_cc1 c_com[*]

This section explains the index parameter. Note that it must reference per-atom values, as contrasted with the input values, which must reference global values.

Note that all of these options generate floating point values. When they are used as an index into the specified input vectors, they simple rounded down to convert the value to integer indices. The final values should range from 1 to \(N\) (inclusive), since they are used to access values from \(N\)-length vectors.

If index begins with “c_”, a compute ID must follow which has been previously defined in the input script. The compute must generate per-atom quantities. See the individual compute doc page for details. If no bracketed integer is appended, the per-atom vector calculated by the compute is used. If a bracketed integer is appended, the Ith column of the per-atom array calculated by the compute is used. Users can also write code for their own compute styles and add them to LAMMPS. See the discussion above for how I can be specified with a wildcard asterisk to effectively specify multiple values.

If index begins with “f_”, a fix ID must follow which has been previously defined in the input script. The Fix must generate per-atom quantities. See the individual fix page for details. Note that some fixes only produce their values on certain timesteps, which must be compatible with when compute global/atom references the values, else an error results. If no bracketed integer is appended, the per-atom vector calculated by the fix is used. If a bracketed integer is appended, the Ith column of the per-atom array calculated by the fix is used. Users can also write code for their own fix style and add them to LAMMPS. See the discussion above for how I can be specified with a wildcard asterisk to effectively specify multiple values.

If index begins with “v_”, a variable name must follow which has been previously defined in the input script. It must be an atom-style variable. Atom-style variables can reference thermodynamic keywords and various per-atom attributes, or invoke other computes, fixes, or variables when they are evaluated, so this is a very general means of generating per-atom quantities to use as index.

This section explains the kinds of input values that can be used. Note that inputs reference global values, as contrasted with the index parameter which must reference per-atom values.

If a value begins with “c_”, a compute ID must follow which has been previously defined in the input script. The compute must generate a global vector or array. See the individual compute doc page for details. If no bracketed integer is appended, the vector calculated by the compute is used. If a bracketed integer is appended, the Ith column of the array calculated by the compute is used. Users can also write code for their own compute styles and add them to LAMMPS. See the discussion above for how I can be specified with a wildcard asterisk to effectively specify multiple values.

If a value begins with “f_”, a fix ID must follow which has been previously defined in the input script. The fix must generate a global vector or array. See the individual fix doc page for details. Note that some fixes only produce their values on certain timesteps, which must be compatible with when compute global/atom references the values, else an error results. If no bracketed integer is appended, the vector calculated by the fix is used. If a bracketed integer is appended, the Ith column of the array calculated by the fix is used. Users can also write code for their own fix style and add them to LAMMPS. See the discussion above for how I can be specified with a wildcard asterisk to effectively specify multiple values.

If a value begins with “v_”, a variable name must follow which has been previously defined in the input script. It must be a vector-style variable. Vector-style variables can reference thermodynamic keywords and various other attributes of atoms, or invoke other computes, fixes, or variables when they are evaluated, so this is a very general means of generating a vector of global quantities which the index parameter will reference for assignment of global values to atoms.

## Output info

If a single input is specified this compute produces a per-atom vector. If multiple inputs are specified, this compute produces a per-atom array values, where the number of columns is equal to the number of inputs specified. These values can be used by any command that uses per-atom vector or array values from a compute as input. See the Howto output page for an overview of LAMMPS output options.

The per-atom vector or array values will be in whatever units the corresponding input values are in.

## Restrictions

none

## Related commands

compute, fix, variable, compute chunk/atom, compute reduce

## Default

none