668 lines (511 with data), 27.9 kB
Version 0.4
Breaking changes:
- The timestep is now set in the solvers, not in the propagator
- Propagation interfaces now usually require a state, not a vector of states.
New features:
- Propagation now assumes a single state, no longer a vector of states (#245)
- makes classes somewhat easier to use in some cases
- speedup of ~ 10% for small problems
- new hierarchy StateWithAuxiliaries, EquationSystem,
EquationSystemSolver if you do need to propagate a set of states
Minor features:
- moved the setting of the timestep from the Propagator to the solvers (#194)
This simplifies and aligns code
- added functionality to add / subtract numbers to / from a state (#256)
-------------------------------------------------------------------------------
Version 0.3.6
Breaking changes:
- hasCoupledChannels() and getCoupledChannelsDofIndex() are now free functions.
- several function parameters got new names
only relevant if you pass named arguments in Python
New features:
- updated dependency on tensor library; opens up compilation under Windows (#225)
- improved truncation of operators (#177)
- added function to estimateMaxEigenvalue() of an expression or operator
with the power method.
- added functions to calculate the minimumPotential() and maximumPotential()
of an operator
- added truncation function for potentials and FbrOperators
(e.g., kinetic energy)
- added a polynomial solver for complex-valued problems based on (#177)
Faber polynomials
- added highlighted demo on usage LinearRamp/Gaussian_1D/1
- added basic contour plot for two-dimensional grids (#211)
- major upgrade to the Vagrant file, also doubles as a comprehensive
building HOWTO now (#238)
Minor features:
- simplified CMake build a little; fewer variables (#225)
upgraded Vagrantfile to use latest Debian
- normalize() throws if given a state with zero norm
- added a CountingOperator (wraps around another operator and counts the number (#177)
of invocations) for rough performance testing
- made function parameters have more consistent names (#228)
- got the wp-build.sh script to run again (#217)
- updated documentation and requirements to work with Python venv (#217)
- added function to get a multidimensional grid of DVR/FBR points (#211)
- Setting up a plot takes a bit less code (#211)
- added negation of an operator (#238)
- two more demos HarmOscillator/Gaussian_1D/2 and 3 ported (#238)
-------------------------------------------------------------------------------
Version 0.3.5
Breaking changes:
- renamed several classes and functions
- dropped suffix "1D" in some classes; this is the default now
Interval1D => Interval
TaylorSeries1D => TaylorPotential
- changed names of some functors and operators for simplicity and disambiguity
Interpolator => Interpolation
Interval => RectangularFunction
OscillatingField => LaserPulse
- renamed *Primitive to *Solver
PropagationPrimitive => Solver
EigenstatePrimitive => EigenstateSolver
ChebychevPrimitive => ChebychevSolver
ChebychevRelax => ChebychevRelaxation
OdePrimitive* => OdeSolver*
DiagonalizerPrimitive=> Diagonalizer
- dropped suffix "calculate"
calculateDensity() => density()
calculateTrace() => trace()
- shortened names of Python plotting classes
PlotObserver => Observer
PlotSettings => Settings
- changed some parameter names (only relevant for Python)
RealGaussian: t_0 => x_0
- changed order of parameters in State constructor
grid first, then coefficients, in line with all other constructors
- upgraded required dependencies
g++ vesion 7 / clang version 8
boost 1.74
- removed class Output and its implementations
New features:
- added functor SoftRectangularFunction for rectangular laser pulses with soft (#187)
turn-on
- added code to setup open quantum systems more easily (#155)
- added a SubspaceTransformation to project wavefunctions and
density operators into a subspace spanned by some given vectors
- added a generic function to transform operators from one grid to the other
- added a new AbstractDof to denote generic degrees of freedom that
do not describe a grid (such as what is used in an eigenstate subspace)
- added a new highlighted demo MolVibration/OH/3 that demonstrates
how to set up a Lindblad Liouvillian from scratch
- added setup of a jump operator from a given bath spectral density (#230)
- updated demo MolVibration/OH/3 accordingly
Minor features:
- made demos slightly less prone to spurious errors from numerical noise (#226)
- harmonized several names
- added a convenience function to get the lowest N eigenstates or energies from an (#155)
eigenstate solver
- added a convenience function to orthonormalize a state
- aded Lorentzian as functor (#230)
- added convenience function to build the adjoint of an operator (#230)
- updated build and upgraded/dropped a few dependencies (#224)
- upgraded compiler and boost requirements
- using doxygen through CMake
- search googletest on the system before downloading it
- made most Python demos produce plotting output (#224)
-------------------------------------------------------------------------------
Version 0.3.4
Breaking changes:
- completely restructured Python package wavepacket.plot
- renamed OneSidedTransformation -> UnitaryTransformation
New features:
- Significantly improved Python extension wavepacket.plot (#209)
- added option for writing out a video file from the plot
- additional drawer that plots a 1D wave function with the potential
- turned MolVibration/OH/1 into a highlighted demo to demonstrate usage
- Improved and sped up Chebychev propagation for smaller grids (#200)
- Added principal functionality to get the exponential form of an operator. (#213)
- Lots of improvements to plotting (#210)
- better and customizable formatting of trace, energy and time in title
- custom units and unit labels for time, energy and the x/y axis
- added a simpler approach to build Wavepacket with a virtual machine (#159)
Minor features:
- Improved CMake dependency handling (#216)
-------------------------------------------------------------------------------
Version 0.3.3
Breaking changes:
- removed OdeRelax; you should always use the faster ChebychevRelax instead
- renamed some operators
- DvrOperator1D was renamed to RealPotential1D
and takes a function double -> double instead of RTensor -> RTensor for construction
- DvrOperatorND was renamed to RealPotentialND
- ChannelProjection was renamed to Channel and derives from RealPotential1D
- Constant was split into RealConstant and ComplexConstant
New features:
- Added simple plotting for one-dimensional system to the Python interface (#165)
- ChebychevRelax allows propagation backwards in (imaginary time) (#202)
- some smaller usability improvements (#199)
- diagonalization always returns real-valued eigenstates
- the TensorState generator can take 1D states as input, not only tensors
- you can project() onto channels by just giving the channel index
- most functions in the Python interface can take a Numpy array without (#201)
explicit casting
- reorganized operator hierarchy; separated complex and real-valued operators, (#183)
which should give a speedup in some cases.
Minor features:
- ProjectionND can directly take a State as input instead of grid + tensor (#201)
- simplified and cleaned up Python interface code (#163, #165)
-------------------------------------------------------------------------------
Version 0.3.2
Breaking changes:
- many renamings for consistency
- renamed "Grid" to "Dof" (degree of freedom), e.g., PlaneWaveGrid -> PlaneWaveDof
- renamed class Representation -> Grid
- using CamelCase almost exclusively (BasicFFTTransformation -> BasicFftTransformation)
- renamed concept of "operator transformation" to "operator modification" to avoid
clashes with the concept of representation transformations
- renamed operator Projection to ProjectionND
- Python interface: wavepacket.units is not automatically imported.
Use "units = wavepacket.units" to have a shortcut.
- use "auto" for the new states instead of "CTensor"
also, many functions no longer get a Grid as input
New features:
* added convenience function to relax an initial state to a Hamiltonian eigenstate (#168)
- added highlighted demo MolVibration/H3+
* major renamings (#190)
- Representation -> Grid
a representation includes non-tracked issues (DVR vs. FBR), we only track the grid
- Grid -> Dof (degree of freedom), in all classes and functions
e.g., PlaneWaveGridTransformation -> PlaneWaveDofTransformation
to avoid name clashes with the previous renamings
- minor other renamings for consistency or name clashes
* added operator Projection1D for projecting along one degree of freedom only (#156)
* The python interface is now built as part of the CMake build. (#184)
That should make the building way easier, especially under Windows.
* Quantum states are now wrapped into a "States" class that also contains the grid (#121)
- even less fiddling with tensors directly, states can be summed etc. directly
- since the state itself knows the grid, many interfaces do not need it anymore
- better error checking and reporting (e.g., making a pure density
operator from a density operator raises an exception now)
- minor penalty for Chebychev propagator (~15% for tiny 1D systems, 3% for 2D systems)
* Increased performance of ODE propagators with some hand-written algebra (#121)
(~10% for tiny 1D systems)
Minor features:
* Plot1DObserver prints zero for very small densities (< 10^-10)
-------------------------------------------------------------------------------
Version 0.3.1:
Breaking changes:
- several requirements were increased (C++14 support, more modern CMake)
- when using the library, you need to include <wavepacket/wavepacket.hpp>
instead of <wavepacket.hpp>
- removed FbrEigenstate; can be replaced by more specific state generators
- some code was shifted or renamed
- FFTGrid was renamed to PlaneWaveGrid
- DVR/FBR transformation was moved to separate Transformation classes
- Grid classes were gutted and contain only DVR points, FBR numbers
and DVR weights now
- Manipulator class was removed and functionality split over some free functions
sometimes with slightly different semantics
(grid/RepresentationUtilities.hpp and operator/OperatorUtilities.hpp)
New features:
- improved CMake build considerably (#173, #185)
Ideally, nothing that you notice, but the build should be more robust
and standard. This will become handy when I try the Windows build again
- rectangular electric field shape (#181)
- implemented transformations between representations (#144)
Currently, only the DVR <-> FBR transformations have been implemented,
which amounts to code shuffling. More is certain to come, though.
- broke up Manipulator class into free functions (#144, #93)
- a few new functions to hide differences between wavefunctions and (#93)
density operators
- normalize() to normalize a wavefunction
- standardDeviation()
- project() to apply a projection operator
- new state generators:
- SphericalHarmonicState constructs a certain SphericalHarmonic
- PlaneWaveState constructs a plane wave
- new operators (and associated functors): (#179)
- Interval1D projects out a DVR interval
- TaylorSeries1D represents a Taylor series expansion
Minor issues
- removed dependency on Boost::filesystem (#174)
Replaced by std::filesystem or the default, which uses C++-14
and comments out a handful of tests altogether
- fixed some cppcheck warnings (#175)
- some smaller cleanups in the header files (#189)
- expectationValue() has a variant without time for time-independent (#93)
operators
Bug fixes:
- LoggingObserver now consistently normalizes the input state before (#93)
calculating output
- calculation of a norm was difficult to use because the definition of (#93)
norm is principally different for wavefunctions and density operators;
split into normalize() and calculateTrace()
-------------------------------------------------------------------------------
Version 0.3:
Breaking changes:
- StateBuilder class has been split into functions
- interfaces changed slightly
- transformDensityFromBasis has been removed completely
- see demos for the new examples
- OneSidedLiouvillian uses an enum instead of a boolean flag in the constructor
- Operator has some functions renamed
- applyToKet => applyFromLeft
- applyToBra => applyFromRight
- removed optional dependency on GFlags (command-line arguments)
New features:
- complete Python interface for all relevant classes (#132)
- due to incompatibilities, only Python 3 is supported
- added Python versions for (almost) all demos (#133)
- removed StateBuilder class and replaced it by simple functions (#111)
- added function to build unit operator as density
- added a random number generator for reproducible random numbers (#153)
Minor issues:
- some cleanup of function and parameter names (#107, #164)
- added a generator to create a constant wavefunction
- several demos have been simplified while reviewing (#133)
- Convenience setup for EquationSystem (#154)
- removed optional dependency on GFlags (#170)
mostly obsoleted by the Python interface
Bug fixes:
- no normalization is attempted when building an
initial product wave function of zeros, which would give NaN (#133)
- Plot1DObserver and Data1DObserver did not output the "real"
wave function, but the wave function mixed with grid weights (#169)
-------------------------------------------------------------------------------
Version 0.2.4:
Breaking changes:
- renamed several key classes:
- LinearOperator => Expression
- SchroedingerOperator => SchroedingerEquation
- OperatorMatrix => EquationSystem
- OperatorPrimitive => Operator
- DvrPrimitive* => DvrOperator*
- PrimitiveSum => OperatorSum
- PrimitiveProduct => OperatorProduct
- and various functions from *Primitive* to *Operator*
- Operator::getSpectralMin/Max() has been replaced by
a single function OperatorPrimitive::getSpectralBounds()
- Expression::getSpectrum() has been renamed to
Expression::getSpectralBounds()
New Features:
- Python bindings can be installed as regular Python module (#137)
- renamed several key classes to make distinction between
operators and expressions/equations clearer (#124)
- added a Projection operator (#70)
- new demo that uses a projection operator to monitor
populations and a half-finished Lindblad relaxation demo (#70)
- new demo with explanation that shows how to deal with
systems at fixed temperature (#138)
Minor issues:
- Chebychev propagators add a small safety margin to the (#148)
auto-determined spectral ranges.
- OperatorPrimitive now handles all representation issues, (#145)
derived operators do not care
- using the Plot1DObserver is far simpler now. (#142)
also, works with coupled states
- 2 new demos: MolElectronic/OH/1 and 2 (#142)
demonstrate electronic excitation using a close coupling
grid (1) and a set of coupled states (2)
Bug Fixes:
- fixed several bugs with LoggingObserver (#150)
- energies for individual electronic states were always positive
- norms for multiple states were not applied correctly
-------------------------------------------------------------------------------
Version 0.2.3:
Breaking changes:
- writeStructuredData() has a different signature
- interpolation functions have a different signature
- renamings of some OperatorPrimitives
Potential1D => DvrPrimitive1D
PotentialND => DvrPrimitiveND
Bug fixes:
- Imaginary time propagation did not work as expected, because
the wave function was never renormalized
- added propagation filters and a "normalization" filter
that renormalizes the wave function
- added a demo MorseOscillator/Bound_1D/2 for this use-case
New Features:
- more work on Python interface (#130, #131)
- conversion between numpy and tensor library
so that data can be easily manipulated inside python
- prototypes for further use-cases (units etc.)
- implemented harmonic oscillator demo
- implemented complex pump-probe demo (#135)
FemtoChem/Interferometry
- added unit conversion for interpolation
- added wave function generator that wraps around a given tensor
(e.g., an already calculated ground state)
- added a simplifyOperator() function that converts an operator (#95)
into a more streamlined and efficient version
for a 20% gain if the potential is a complex multi-state potential
-------------------------------------------------------------------------------
Version 0.2.2:
Breaking changes:
- renamed some functions in the OperatorMatrix class
- added suffixes to easily use other units (eV, Angstroem etc.)
and a new highlighted demo for that (#123)
- added an operator and functors for oscillating laser fields
and updated pendular states demo to demonstrate these (#126)
- added a prototype for a python interface (#117)
- only for free particle demo for now; needs a lot more work
- see new option Opt_BuildPython and demo
FreeParticle/Gaussian_1D/1/demo.py
- sped up compilation considerably
- OperatorMatrix no longer uses boost data types (#103)
- ODE solvers hide their reference to boost::odeint (#104)
- used cotire (COmpile TIme REducer) (#128)
see advanced compile option Opt_UseCotire (default: off)
- LoggingOutput prints too small numbers as zero
to fix a test failure in the virtual machine image (#127)
-------------------------------------------------------------------------------
Version 0.2.1:
Breaking changes:
- RedfieldBuilder is now called RedfieldFactory and works differently
- added a script "wp-build.sh" to simplify the compilation of own programs
and a tutorial for that (#73)
- added a HarmonicOscillatorFactory to simplify setup of harmonic oscillator operators,
in particular Hamiltonians and raising and lowering operators (#106)
- added Mecke dipole function
- added Morse oscillator demo (#58)
- cleanup of the RedfieldFactory; still not very usable because it requires
correlation functions where one normally has spectral densities instead (#97)
- used demos for automated testing (#98)
- added helper function to encapsulate pi constant (#102)
- used source code checkers to fix some minor issues (#79)
-------------------------------------------------------------------------------
Version 0.2:
No breaking changes
- added plotting of the wave function (#67)
- added a factory to set up plotting for one-dimensional wave functions
- added a documented demo for the TDSE / TISE case
- added absorbing boundary conditions (#80)
- added a factory to easily create negative imaginary potentials
- added a documented demo to demonstrate this feature
- changed license to a more permissive ISC / CC0 mixture (#94)
- upgraded virtual machine image for the build (#109)
- Tests should be more reproducible now (fixed random seed) (#47)
That should mostly fix the issue of one test always failing
- some minor code formatting cleanup (#82)
-------------------------------------------------------------------------------
Version 0.1.4:
Breaking changes:
- moved/renamed several classes and functions
Gaussian -> GaussianState
Projection -> DvrEigenstate
LoggingOutput -> LoggingObserver
readTokenizedInput() -> readStructuredData()
readInterpolationData() -> Interpolator::createFromStream()
- functors that construct an initial state now take a grid as input, not the grid points
- #83, #89: added support for rotational problems
- added spherical harmonics expansion [SphericalHarmonicsGrid]
- added the L^2 operator for this grid [RotationalKineticEnergy]
- added spherical harmonic initial wave function [FbrEigenstate]
- #90: ability to easily write out calculated values
- added an observer to calculate expectation values [ExpectationValueObserver]
- added functions to write out a matrix to a file [writeStructuredData()]
- two documented demos that demonstrate the new features [MolRotation/*]
- #81: some code changes to speed up the build
- minor tweaks to documentation and build
-------------------------------------------------------------------------------
Version 0.1.3:
- tutorial improvements
- new tutorials for the time-independent Schroedinger equation, general advice
- improved/extended some other tutorials
- handling of multiple coupled channels
- introduced CoupledChannels grid with helper operators and functors
- logging resolves the channels
- added a demo and a tutorial
- added class to parse command-line options and configuration files
- added class
- added demo with detailed instructions
- misc smaller changes
- DoubleWell demo uses Razavy potential
-------------------------------------------------------------------------------
Version 0.1.2:
- improved Chebychev propagators:
- you no longer have to specify the spectrum, there are safe defaults
- improved documentation:
- moved tutorial from wiki and extended it considerably
- added package documentations
- use CMake as build system
- added solver for the time-independent Schroedinger equation
-------------------------------------------------------------------------------
Version 0.1.1b:
- updated googletest requirements and build defaults to version 1.8
- fixed some compiler warnings
- fixed possible compiler failures in acceptance tests
-------------------------------------------------------------------------------
Version 0.1.1:
- new acceptance test:
- usage of electric fields of custom shape
- relaxation of a density operator to thermal equilibrium and subsequent propagation
- new demos:
- free particle
- 2D harmonic oscillator
- basic tutorial (Wiki on sourceforge page)
- Major propagator refactoring:
- split into primitives to propagate one time step and Propagator, which deals with logging etc.
- Joined propagation of single and multiple states and simplified the latter
- separate primitives for real and imaginary time; simplified use of the latter
- Chebychev propagator in real and imaginary time
- added functors (function-like objects)
- interpolation as functor
- product wave function built from functors yielding 1D wave functions
- 1D potential operators build the potential with functors
- merged DensityManipulator and WavefunctionManipulator into a single class
- implemented an own exception hierarchy; not complete
- upgraded build process
- require more recent version of boost; this drops one dependency
- by default, all tests are built into a single executable
- minor fixes and improvements here and there
-------------------------------------------------------------------------------
Version 0.1:
- new working acceptance test:
- Spin-Boson problem with Redfield dissipation
- started adding demos from old Matlab code
- squeezed and shifted state in a harmonic oscillator
- cleaned up / improved generation of initial state:
- StateBuilder assembles product states, pure density operators
from wavefunctions etc.
- elementary generators build one-dimensional wavefunctions
- harmonic oscillator eigenstates
- Morse oscillator eigenstates
- interpolation from file; setting the 1D wavefunction
- New operators:
- RedfieldLiouvillian
- generalized operators that takes an arbitrary matrix / tensor
- time-dependent function
- added RedfieldBuilder to calculate the effective operators appearing in the
RedfieldLiouvillian
- New MultiPropagators that can simultaneously propagate several states
- added observers that are automatically called every (settable) propagation time steps
- added observer that logs norm, energy and some other expectation values
- some work to make Wavefunction/DensityManipulators more useful
- tests log some of the data; may be put to use for reproducing failures
-------------------------------------------------------------------------------
Version 0.0.3:
- new working acceptance tests:
- Harmonic oscillator with Lindblad dissipation
- Density propagation and Wavefunction propagation give same result
- added a builder to set up density operators as direct product states
- completely reworked how operators work; there is now a primitive that knows
what to do with various objects and a high-level operator that determines
the actual action (commute with a density operator or apply to a wavefunction)
- added a bunch of new operators:
- CommutatorOperator, LindbladLiouvillian as high-level operators
- ConstantOperator, TensorOperator as primitives
- added class to simplify transformation of wavefunctions/density operators
between the various representation (DVR, FBR, DVR with weights)
- added Makefile target and structure for doxygen documentation
- slightly simplified the Makefile configuration; fixed a few linker issues
- shifted a few files, beautification and simplification of the code/tests etc.
-------------------------------------------------------------------------------
Version 0.0.2:
- implemented multi-dimensional grids
- introduced weighted DVR as new representation; this obsoletes the
direct exposure of the DVR weights
- a couple of new operators:
harmonic oscillator, momentum operator, coordinate operator
- added addition and summation of operators
- added a wave function builder that generates a Gaussian initial state
and can build a tensor product of one-dimensional wave functions
- an acceptance test of a coherent state in a 2D harmonic oscillator
-------------------------------------------------------------------------------
Version 0.0.1:
- Initial release
- an FFT-based Cartesian grid
- a kinetic energy operator for said grid
- a propagator employing standard ODE solvers
- an acceptance test that propagates a free particle