Particles Species¶
Every exaStamp simulation needs its particles' species — name, mass, atomic number, charge, and optionally molecule membership — to be defined. This is done through the species block, called in the simulation graph right after setup_system:
If no species block is provided, exaStamp falls back to generate_default_species, which populates the full periodic table (H to Og) documented in Configuration files.
Defining atomic species¶
Each entry of the species list is a one-key dictionary Name: { ... } with the following properties:
| Property | Type | Required | Description |
|---|---|---|---|
mass |
float |
yes | Atomic/molecular mass |
z |
int |
no | Atomic number |
charge |
float |
no | Electric charge |
molecule |
string |
no | Name of the flexible molecule this atom belongs to |
rigid_molecule |
list |
no | Describes a rigid multi-atom molecule (see Rigid molecules below) |
Tagging atoms with a molecule name groups them for bonded, flexible-molecule force fields (see Flexible molecules), without changing how each atom itself is declared:
Warning
Particle types declared in the species block must be consistent with the types read from external files (e.g. a .xyz file) or given to the lattice operator's types: parameter.
Rigid molecules¶
A rigid, multi-atom species (treated as a single rigid body, see Rigid molecules) is declared with rigid_molecule instead of mass/z/charge, listing the relative position of each constituent atom (at least 2 are required):
Each name referenced under rigid_molecule (here O and H) must already be declared as a single-atom species earlier in the same species list — water's mass and charge are then derived automatically from its constituent atoms.
Lower-level alternative: particle_types / particle_type_add_properties¶
species is exaStamp's high-level way of declaring atomic species. Internally, it populates two generic onika/exaNBody slots: particle_type_map (name → integer type ID) and particle_type_properties (arbitrary named scalar/vector properties per type).
You can also populate these two slots directly with the lower-level particle_types operator. This is useful when:
- a type-ID mapping is needed before
speciesruns in the graph — for instance, thelatticeoperator'stypes:parameter needsparticle_type_mapto already exist whilesetup_systemis running; - you need custom per-type properties beyond
mass/z/charge(e.g. a potential-specific parameter).
particle_types takes both particle_type_map and particle_type_properties at once, the latter accepting arbitrary property names, not just mass/z/charge:
Or, split across two operators — particle_types for the map, particle_type_add_properties for the properties — for instance when the two need to be defined in separate steps of setup_system:
particle_type_add_properties can also be used on its own, after species or particle_types has already defined the particle types, to attach extra custom properties (any name, not just mass/z/charge) to them:
See Particles Features → Species for the full parameter reference of both operators.