UQTk: Uncertainty Quantification Toolkit 3.1.5
Todo List
Class Array1D< T >
double check copy constructor
Class Array2D< T >
Define copy constructor
Class Array3D< T >

Define copy constructor

Several functions, e.g. insert/erase columns/rows, available in Array1D and Array2D, are missing.

Member Array3D< T >::Resize (const size_t &nx, const size_t &ny, const size_t &nz)
Write a better implementation that preserves the original data by copying it to a temporary array and putting the elements back where they were before. This would bring this resize() command more closely in line with vector::resize() function in the original vector class.
Member Array3D< T >::Resize (const size_t &nx, const size_t &ny, const size_t &nz, const T &t)
Write an implementation that is more closely follows the resize command in the vector class, which keeps the original elements and only initializes the new elements.
File arraytools.h

Some functions are not optimal in terms of array access.

Some functions should be templated and or moved to array class

Member delCol (Array2D< T > &A, int icol)
This should move to Array2D class
Member delCol (Array1D< T > &x, int icol)
This should move to Array1D class
Member delRow (Array2D< T > &A, int irow)
This should move to Array2D class
Member generate_multigrid (Array2D< T > &multigrid, Array2D< T > &grid)
Should ideally be written in a recursive manner, similar to computeMultiIndexTP() in tools/multiindex.cpp
Member generate_normal_lhs (Array2D< double > &rvar, int zSeed)
LHS generation is far from optimal, it is quite slow
Member Gproc::BuildGP_inv ()
Need formal timing analysis to understand in which situations this version is preferred
Member Gproc::covariance (Array1D< double > &x1, Array1D< double > &x2, Array1D< double > &param)
put an 'if' check for covtype_
Member Gproc::EvalGP_inv (Array2D< double > &xgrid, string msc, Array1D< double > &mst)
Need formal timing analysis to understand in which situations this version is preferred
Member Gproc::getSttPars (Array1D< double > &sttmat)
check that full cov_ already defined(i.e. msc) not just diagonal
Member Gproc::getXYCov (Array2D< double > &xgrid, Array2D< double > &xycov)
check that full cov_ already defined(i.e. msc) not just diagonal
Member logdeterm (Array2D< double > &mat)
Check and catch the symmetric and positiv-definite conditions.
Member loo (int ndim, double *m, void *classpointer)
Find a more elegant way to do this within the class
Member M_PI
See if we could move this to the CMake installation scripts instead
Member main (int argc, char *argv[])
Make the input arguments more transparent, i.e. what do they mean in different scenarios?
File multiindex.h
Multiindex could be a separate class and a part of core UQTk.
Member neglogPostParam (int ndim, double *m, void *classpointer)
Find a more elegant way to do this within the class
Member PCBasis::EvalBasis (const double &xi, Array1D< double > &basisEvals) const
Import the recursion coefficients in a more friendly fashion.
Member PCBasis::Init1dQuadPoints (int qdpts)
Come up with a smarter way to pick the number of quadrature points
Member PCBasis::PCBasis (const string type="LU", const double alpha=0.0, const double betta=1.0, const int maxord=10)
At some point, the basis selection should probably be implemented in a more elegant way using base and inherited classes. For the time being, Hermite-Gaussian or Legendre-Uniform will probably be the most commonly used cases. The parameters alpha and betta are relevant only for LG, SW and JB chaoses
Member PCBasis::rnstate_
need more functionalities to get/set this variable from user
File pcmaps.h

Perhaps use more robust tools, like dcdflib.

Need more testing of these tools.

Member PCSet::ComputeJointSens (Array1D< double > &coef, Array2D< double > &jointsens)
There is no double* version of this function
Member PCSet::ComputeMainSens (Array1D< double > &coef, Array1D< double > &mainsens)
There is no double* version of this function
Member PCSet::ComputeOrders (Array1D< int > &orders)
There is no double* version of this function
Member PCSet::ComputeTotSens (Array1D< double > &coef, Array1D< double > &totsens)
There is no double* version of this function
Member PCSet::Derivative (const double *p1, double *p2) const

Supports LU and HG bases only

Supports only for 1d PCs

Member PCSet::Derivative (const Array1D< double > &p1, Array1D< double > &p2) const

Supports LU and HG bases only

Supports only for 1d PCs

Member PCSet::Div (const double *p1, const double *p2, double *p3) const
Remove duplication of data and parameters that was required for enforcing imposed "const" constraints on some of the arguments and the class data members when they are being passed to fortran.
Member PCSet::DrawSampleVar (Array2D< double > &samples) const
There is no double* version of this function
Member PCSet::EncodeMindex (Array1D< Array2D< int > > &sp_mindex)
There is no double* version of this function
Member PCSet::EvalBasisAtCustPts (const Array2D< double > &custPoints, Array2D< double > &psi)
There is no double* version of this function
Member PCSet::EvalNormSq (Array1D< double > &normsq)
There is no double* version of this function
Member PCSet::EvalNormSqExact (Array1D< double > &normsq)
There is no double* version of this function
Member PCSet::EvalPCAtCustPoints (Array1D< double > &xch, Array2D< double > &custPoints, Array1D< double > &p)
There is no double* version of this function
Member PCSet::GalerkProjection (const Array1D< double > &fcn, Array1D< double > &ck)

Overload this with forward function pointers

There is no double* version of this function

Member PCSet::GalerkProjectionMC (const Array2D< double > &x, const Array1D< double > &fcn, Array1D< double > &ck)

Overload this with forward function pointers

There is no double* version of this function

Member PCSet::GetNormSq (Array1D< double > &normsq) const
this seems like a duplication, see below GetPsiSq()
Member PCSet::Initialize (const string ordertype)
Test and allow intrusive implementation with customized multiindices
Member PCSet::InitMeanStDv (const double &m, const double &s, double *p) const
Make this function work for general multi-indices, and for any number of stochastic dimensions
Member PCSet::InitMeanStDv (const double &m, const double &s, Array1D< double > &p) const
Make this function work for general multi-indices, and for any number of stochastic dimensions
Member PCSet::LogIntRhsWrapper (sunrealtype t, N_Vector y, N_Vector ydot, void *f_data)
Why is this function a static int instead of static void? Should there be a return statement at the end?
Member PCSet::PolynMulti (const Array1D< double > &polycf, const Array2D< int > &mindex, const Array2D< double > &p1, Array1D< double > &p2) const
A double* version should be added.
Member PCSet::SetQuadRule (const string grid_type, const string fs_type, int param)
Need to improve it
Member PCSet::StDv (const double *p) const
Lift the assumption by looking for the constant term in the multiindex
Member PCSet::StDv (const Array1D< double > &p) const
Lift the assumption by looking for the constant term in the multiindex
File probability.h
There shuold be a RNG class as a part of core UQTk - most of these functions will fit there.
Member Quad::create1DRule_pdf (Array1D< double > &qdpts, Array1D< double > &wghts, int ngr, double a, double b)
Recursive coefficients are given in a file 'ab.dat'; will need to make this more friendly
Member setdiff_s (Array1D< int > &A, Array1D< int > &B, Array1D< int > &C)
In future, this should sort A too and replace setdiff
Member usage ()
Add more detailed information on options. E.g. what are the different options for type of random variable? When does the order need to be specified?
Member WBCS (Array2D< double > &PHI, Array1D< double > &y, Array1D< double > &sigma2, double eta, Array1D< double > &lambda_init, int adaptive, int optimal, double scale, int verbose, Array1D< double > &weights, Array1D< int > &used, Array1D< double > &errbars, Array1D< double > &basis, Array1D< double > &alpha, Array2D< double > &Sig)

The array manipulations are not optimized - perhaps they need to be reconsidered using, say, fortran matrix-vector manipulation routines

The array manipulations are not optimized - perhaps they need to be reconsidered using, say, fortran matrix-vector manipulation routines

Member XMLElement::get_child (const std::string &)
Make this more elegant with the STL find_if function