ASE driver ========== The ASE driver embeds **MaxwellLink** in the `Atomic Simulation Environment `_, enabling Born–Oppenheimer molecular dynamics with any ASE-compatible calculator. The implementation is provided by :class:`maxwelllink.mxl_drivers.python.models.ASEModel`. .. note:: During the simulation, the ASE driver receives the electric field, applies .. math:: \mathbf{F}_i = Q_i \widetilde{\mathbf{E}}, and returns .. math:: \mathrm{d}\boldsymbol{\mu}/\mathrm{d}t = \sum_i Q_i \mathbf{v}_i, where :math:`Q_i` and :math:`\mathbf{v}_i` are the partial charge (defined in ``charges`` in :ref:`ase_parameters`) and velocity of atom :math:`i`. Requirements ------------ - ``ase`` (install via ``conda install -c conda-forge ase``) for the `Atomic Simulation Environment `_. - The desired calculator backends (`Psi4 `_, `ORCA `_, `DFTB+ `_, …) must be installed and discoverable by ASE. Usage ----- Socket mode ^^^^^^^^^^^ .. code-block:: bash mxl_driver --model ase --port 31415 \ --param "atoms=${PWD}/tests/data/hcn.xyz, calculator=psi4, \ calc_kwargs=method=b3lyp,basis=sto-3g, \ charges=[1.0 -1.0 0.0], temperature_K=300, \ recompute_charges=false" Non-socket mode ^^^^^^^^^^^^^^^ .. code-block:: python mxl.Molecule( driver="ase", driver_kwargs={ "atoms": "tests/data/hcn.xyz", "calculator": "psi4", "calc_kwargs": "method=b3lyp,basis=sto-3g", "charges": "[1.0 -1.0 0.0]", "temperature_K": 300.0, }, # ... ) .. _ase_parameters: Parameters ---------- .. list-table:: :header-rows: 1 * - Name - Description * - ``atoms`` - ASE ``Atoms`` instance or path to a structure file readable by ``ase.io.read`` (``.xyz``, ``.pdb`` …). Required. * - ``calculator`` - Name of the ASE calculator to wrap (``psi4``, ``orca``, ``dftb`` …). Default: ``psi4``. * - ``calc_kwargs`` - Comma-separated ``key=value`` pairs (or a dict) forwarded to the calculator constructor. Default: ``""``. * - ``charges`` - Optional per-atom charges specified as a space-separated list in square brackets, e.g. ``"[0.3 -0.3 0.0]"``. Default: ``None``. * - ``recompute_charges`` - When ``True`` the driver queries the wrapped calculator for charges at every step instead of using ``charges``. Default: ``False``. * - ``temperature_K`` - Initial temperature passed to ``MaxwellBoltzmannDistribution`` before propagation. Default: ``0.0``. * - ``verbose`` - When ``True`` print calculator setup and integration diagnostics. Default: ``False``. * - ``checkpoint`` - When ``True`` write positions/velocities to ``ase_checkpoint_id_.npz``. Default: ``False``. * - ``restart`` - When ``True`` try to restore the most recent checkpoint on start-up. Default: ``False``. Returned data ------------- - ``time_au`` – Simulation time in atomic units. - ``energy_au`` – Electronic energy returned by the wrapped ASE calculator. - ``mux_au``, ``muy_au``, ``muz_au`` – Molecular dipole components in atomic units half a time step after the force evaluation time. - ``mux_m_au``, ``muy_m_au``, ``muz_m_au`` – Molecular dipole components in atomic units at the force evaluation time. - ``temperature_K`` – Instantaneous temperature reported by ASE. Notes ----- - Provide either ``charges`` or set ``recompute_charges=true``; the driver raises an error if no charges are available. - Calculator-specific options can be supplied via ``calc_kwargs=...`` or as additional ``key=value`` pairs in ``--param``; unrecognised tokens are forwarded to the calculator constructor.