Simulation Domain¶
The simulation box — its size, shape, cell decomposition and periodicity — is defined by the domain block, called in the simulation graph before setup_system:
The domain block¶
Parameters' description
| Property | Type | Default | Description |
|---|---|---|---|
cell_size |
float |
0.0 |
Size of a grid cell (used for parallel domain decomposition) |
grid_dims |
IJK |
[0,0,0] |
Number of cells along each axis; if 0,0,0, deduced from bounds and cell_size |
bounds |
AABB |
[[0,0,0],[0,0,0]] |
Domain bounds [[xmin,ymin,zmin],[xmax,ymax,zmax]] |
xform |
Mat3d |
identity | Grid space → physical space transformation matrix (for non-orthorhombic/triclinic domains) |
periodic |
[bool;3] |
[false,false,false] |
Periodic boundary conditions along each axis |
mirror |
list |
[] |
Mirror (reflective) boundary conditions, e.g. [ "X-", "Z" ] for a mirror at the lower X bound and both Z bounds |
expandable |
bool |
true |
Whether the domain is allowed to grow to contain particles that move outside its bounds |
Warning
periodic and mirror are mutually exclusive per axis: setting one on a given bound disables the other.
exaStamp's own default (in main-config.msp) leaves cell_size/grid_dims at 0, so they are automatically deduced from the interatomic potential's cutoff radius, and sets expandable: false.
For the full derivation of the physical-space/grid-space transform, more xform examples (orthorhombic, triclinic domains) and alternative ways of defining a domain (from a lattice template, an external file, or a restart), see Simulation Domain in the Domain & Regions reference section.
Expandable domains¶
If expandable: true and the domain isn't fully periodic, the extend_domain operator (run automatically as part of init_particles and at every full particle update) grows the domain's bounds to keep containing any particle that has drifted outside them, rather than losing it. A fully periodic domain cannot be expandable — exaStamp will disable it and print a warning if both are set together.
Filling the domain¶
Defining domain only reserves the simulation box — it doesn't create any particle. Populating it (e.g. with the lattice operator, or by reading particles from an external file) is done as part of setup_system, covered on the next page.