[go: up one dir, main page]

Menu

[5feb5c]: / NEWS  Maximize  Restore  History

Download this file

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