C++QEDCore  v2 Milestone 10
a framework for simulating open quantum dynamics – core
Todo List
File BlitzArrayTraits.h
Much of this file is superfluous as many components can be formulated generally for all blitz::Array types
Class blitzplusplus::basi::Iterator< RANK, V, IS_CONST >

Implement a default version of Iterator for the case when neither slicing nor transposition is necessary, that is when V is equivalent to a range<0,RANK-1>. This will require further compile-time implementation selection.

Refine the iterator category according to the New-Style Iterator concepts. The point is that a multi-array is not a container of slices, so Iterator is definitely not a standard iterator. It seems rather like a proxy iterator.

File Conversions.h
Update & see why it is not much used in the framework
Member cpputils::sharedPointerize (boost::shared_ptr< T > t)
How to shared-pointerize an rvalue reference?
Member cpputils::subscript (const CArray< n > &a, size_t i)
fix this
Page Description of the Master-equation evolution
Implement this possibility (cf. also this tracker)
Class evolved::EvolvedIO< A >
Think about using a shared pointer instead of plain reference for referencing the array
File Exception.h
Rationalize & uniformize the exceptions throughout
Class quantumdata::DensityOperator< RANK >
provide a move constructor
Class quantumdata::StateVector< RANK >
provide a move constructor
Class quantumdata::transformation::Traits< void(*)(const CArray< RANK > &, CArray< RANK > &) >
For quantumdata::transformation::Traits default implementation should pertain to a function(object). Probably not very easy to implement, though…
Member quantumdata::wignerFunction (const DensityOperatorFunctor &rho, double x, double y, size_t truncatedDimension=0)
Should refer rho only via some traits class to make the code really generic.
Member quantumoperator::Tridiagonal< RANK >::average (const quantumdata::LazyDensityOperator< RANK > &, const typename quantumdata::LazyDensityOperator< RANK >::Idx &, IntRANK=_1_)
Implement.
Member quantumoperator::Tridiagonal< RANK >::furnishWithFreqs (const Diagonal &mainDiagonal, IntRANK=_1_)
Extend to arbitrary arity
Member quantumoperator::Tridiagonal< RANK >::hermitianConjugate () const
Implement an in-place version.
Member quantumtrajectory::ensemble::displayLog (std::ostream &, const LoggerList &, size_t nBins, size_t nJumpsPerBin)
The different kinds of jumps should be collected into different histograms
Class quantumtrajectory::EnsembleMCWF< RANK, V >
An additional constructor could be added to initialize the ensemble by a full density operator, which could be appropriately sampled.
Class quantumtrajectory::MCWF_Trajectory< RANK >
factor out template-parameter independent code
Class quantumtrajectory::TimeAveragingMCWF_Trajectory< RANK >

Stepsize-weighting could eventually be enabled as an option by a switch

If need be, the class could be modified to accept also a ProjectingMCWF_Trajectory as a base

Page Rationales

Consider switching to Boost.MultiArray. This would also provide const views which are not present in Blitz++.

Alternative implementations are possible, consider in particular Boost.Math.

Consider switching to Eigen.

Revisit this issue (might not exist anymore in C++11)

Implement this

Merge Boost.Bind and Boost.Lambda into Boost.Phoenix

Switch to range adaptors in existing codebase

clarify their use throughout

Member run
Consider taking Trajectory by rvalue reference
Member structure::AveragedCommon::display (const Averages &averages, std::ostream &os, int precision) const
The precision argument is obsolete after rev. #04265ae since precision might be propagated just via FormDouble::overallPrecision throughout the whole framework.
Class structure::Hamiltonian< RANK >
Hamiltonian should be able not only to add its contribution to a state vector, but simply return its contribution. In Hamiltonian::addContribution, somehow signal to the function whether it has to add or replace, because replacement could be also useful in some contexts.
Member structure::Hamiltonian< RANK >::addContribution (double t, const StateVectorLow &psi, StateVectorLow &dpsidt, double t0) const
3rd argument should be passed by rvalue reference — move constructor for blitz::Array needed for this?
Member structure::QuantumSystem< RANK >::Ptr
define Ptr types outside classes as template aliases eg QuantumSystem::Ptr => QuantumSystemPtr
Class trajectory::Averageable< T >
implement general time averaging along the lines discussed in this tracker
Class trajectory::Ensemble< T, T_ELEM >
Stepsize-weighting could eventually be enabled as an option by a switch
Class trajectory::Simulated< A >
Provide optional key printing
Class trajectory::Trajectory
Consider the possibility of cloning Trajectories
Member update
Somehow echo the whole command line into the output file – difficulty: the parameter-bundle has no knowledge about the output file