Source code for irradiapy.lammps.commands.cruntime

"""This module contains the CRunTime class."""

from dataclasses import dataclass, field

from irradiapy.lammps.commands.fix import Fix
from irradiapy.lammps.commands.run import Run
from irradiapy.lammps.commands.timer import Timer
from irradiapy.lammps.commands.variable import Variable


[docs] @dataclass(kw_only=True) class CRunTime: """Class representing a collection of LAMMPS commands to run a simulation up to certain time. Note ---- This creates a variable called `simtime` and a fix called `cruntime`. """ max_time: str max_steps: str = "1000000" run_kw_vals: dict[str, str] = field(default_factory=dict) variable: Variable = field(default=None, init=False) fix: Fix = field(default=None, init=False) timer: Timer = field(default=None, init=False) run: Run = field(default=None, init=False) collection: tuple = field(default_factory=tuple, init=False) def __post_init__(self) -> None: self.max_time = str(self.max_time) self.max_steps = str(self.max_steps) self.run_kw_vals = { str(key): str(value) for key, value in self.run_kw_vals.items() } self.variable = Variable(name="simtime", style="equal", args=["time"]) self.fix = Fix( id="cruntime", group_id="all", style="halt", args=["1", f"v_simtime > {self.max_time}"], kw_vals={"error": "soft", "message": "yes"}, ) self.timer = Timer(args=["timeout", "off"]) self.run = Run(n=self.max_steps, kw_vals=self.run_kw_vals) self.collection = ( self.variable, self.fix, self.timer, self.run, self.fix.delete(), self.variable.delete(), )