Significant refactoring of the code, Local diabatization and more
-
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
-