Simulator¶
Simulator. Simulates the dynamics of a model (on the CPU or GPU).
-
class
moldyn.simulation.runner.
Simulation
(model=None, simulation=None, prefer_gpu=True)[source]¶ Simulator for a model.
Parameters: - model (builder.Model) – Model to simulate. The original model object is copied, and thus preserved, which allows it to serve as a reference.
- simulation (Simulation) – Simulation to copy. The simulation is copied, and the computing module reinitialized.
- prefer_gpu (bool) – Specifies if GPU should be used to compute inter-atomic forces. Defaults to True, as it generally results in a significant speed gain.
-
model
¶ Model that is simulated.
Warning
Works as usual, but changing its properties will not affect the simulation as intended. You should construct another simulation from this model to correctly take in account the changes. This is due to the fact that some values (eg. Lennard-Jones parameters) are treated as constants during shader initialisation, in order to speed up the calculations.
Type: builder.Model
-
current_iter
¶ Number of iterations already computed, since initialisation.
Type: int
-
context
¶ ModernGL context used to build and run compute shader.
Type: moderngl.Context
-
F
¶ Last computed forces applied to atoms. Initialized to zeros.
Warning
Changing the values will affect behavior of the model.
Type: numpy.ndarray
-
F_f
(t)[source]¶ Parameters: t – Time in seconds. Returns: External forces applied at time t (2-component vector). Return type: numpy.ndarray
-
iter
(n=1, callback=None)[source]¶ Iterates one or more simulation steps.
Basically, follows the Position-Verlet method to update positions and speeds, and computes inter-atomic forces derived from Lennard-Jones potential.
Parameters: - n (int) – Number of iterations to perform.
- callback (callable) – A callback function that must take the Simulation object as first argument. It is called at the end of each iteration.
Note
Setting n is significantly faster than calling
iter()
several times.Example
model.iter(5)
-
set_Fx_ramps
(t, Fx)[source]¶ Creates a function based on ramps and uses it for external forces control along axis x. See set_T_ramps for further details.
Parameters: - t (array) – Time.
- Fx (array) – Associated forces.
-
set_Fy_ramps
(t, Fy)[source]¶ Creates a function based on ramps and uses it for external forces control along axis y. See set_T_ramps for further details.
Parameters: - t (array) – Time.
- Fy (array) – Associated forces.
-
set_T_f
(f)[source]¶ Sets function that controls temperature.
Parameters: f (callable) – Must take time (float) as an argument and return temperature (in K, float).
-
set_T_ramps
(t, T)[source]¶ Creates a function based on ramps and uses it for temperature control. Values of the function are interpolated between points given in t and T. Temperature is supposed constant before the first point and after the last one.
Parameters: - t (array) – Time.
- T (array) – Associated temperatures.
Inter-atomic compute modules¶
-
class
moldyn.simulation.forces_CPU.
ForcesComputeCPU
(consts, compute_npart=None, compute_offset=0)[source]¶ Compute module. Runs on CPU. Uses numba for JIT compilation and multiprocessing for multicore. See ForcesComputeGPU for documentation.
-
class
moldyn.simulation.forces_GPU.
ForcesComputeGPU
(consts, compute_npart=None)[source]¶ Compute module. Runs on GPU.
Parameters: consts (dict) – Dictionary containing constants used for calculations. -
npart
¶ Number of atoms.
Type: int
-
consts
¶ Dictionary containing constants used for calculations, and some parameters to run the compute shader.
Type: dict
-