Skip to content

Significant refactoring of the code, Local diabatization and more

Compare
Choose a tag to compare
@alexvakimov alexvakimov released this 19 Apr 18:24
· 395 commits to master since this release
  • Code restructuring:

    • significantly restructured the code (via the tsh_revision branch). Now, the dynamics code
      is much more compact, clean, and consistent. New functions are added in a modular way to
      enable more compact coding of the may computational workflow.

    • reducing the nesting levels and making it more modular: the hamiltonian library and namespaces
      are broken into atomistic (for MM and QM) and models (collection Hamiltonians) modules

    • the nhamiltonian library and namespace is made top-level, to avoid unnecessary dependencies

    • all the dynamical variables are now held in the dyn_variables class. Functions are coded to
      take this data class. Withing it, the amplitudes or density matrix variables can be used, the conversion
      functions (including from-to different representations are available)

    • Added cctor and memory status check functions to the nHamiltonian class - now it all works fine, removed the
      implementation of the propagators that dependend on the projectors, added auxiliary Hamiltonian as an input parameter
      to the compute_dynamics function and reflected that in the Python wrapper function, changed the compute_St functions
      to take two nHamiltonian objects as input, removed the use of Uprev variable in the compute_dynamics function,
      since it is now deprecated

  • New methods and variables:

    • the local diabatization approach and multiple electronic integrators are added: There are algorithms based on
      matrix exponential, rotation, and others (e.g. QTAG-like). The integrators are available for diabatic and adiabatic
      representations.

    • the propagation in terms of density matrix is now available (solving the QCLE). The QCLE integrators are coded.

    • added Shenvi-Subotnik-Yang (SSY) phase correction algorithm (to fix the decoherence-induced phase effects)

    • added Zhu's Liouvillian-based phase correction method (developed as an alternative to the SSY method)

    • added Zhu-Nakamura (ZN) hop attempt probability.

    • new dynamical control variables added to provide a more convenient definition of the computing recipes

    • added new electronic integrator in the diabatic basis - according to the qtag approach

    • added new control variables for various schemes of variables updates, added new functions for computing hopping probabilities in a more efficent way

    • added generalized Holstein Hamiltonian

    • reactivated BCSH and DISH methods

    • added packages.cp2k module that implements an input generator for cp2k

    • added Morse model Hamiltonians and the parameterization of Coronado-Xing-Miller

  • Deprecations and removals:

    • the external_hamiltonian class/namespace is deprecated

    • the Ensemble class is deprecated

    • update_Hamiltonian_ functions are deprecated in favor of the new general version

    • removed a lot of unnecessary (commented or not) C++ code in files in the dyn module (e.g. Dynamics.cpp, Energy_and_Forces.cpp, etc.)

    • the state tracking and phase correction approaches are deprecated in lieu of the local diabatization-based
      approaches: the original one of Granucci, Persico, and Toniolo + a number of other interators derived in the
      TCA paper (to be published)

    • Many old nearly duplicate or confusing functions for electronic integration are removed to clean up the code, yet to keep
      the essential functionality.

    • moved tutorial on plotting model Hamiltonians to the CyberTraining repo

    • removed outdated QTAG examples

  • Fixes:

    • fixed a minor but important bug in GFSH; the algorithm is now working

    • fixed the false fail of the SDM (mSDM) method which could happen under certain conditions when the populations
      on a given state is close to 1.0

  • Misc:

    • revised and simplified the installation instructions (including building a suitable Conda environment)

    • simplified and optimized build/compillation scripts, started using precompiled headers (PCH)

    • made the C++ code compatible with the C++11 stnadard

  • Other notable changes:

    • improved quality of dynamics_plotting plots and added new options for plotting

    • Added plotting of the time-resolved Hamiltonians, time-overlaps and projections

    • changed NULL to nullptr