/*!\file: random * \brief random number generating functions */ /*Headers*/ /*{{{*/ #include #include #include #include /* DBL_EPSILON */ #include #include #include #include #include "../Matrix/matrix.h" #include "../Exceptions/exceptions.h" #include "../MemOps/MemOps.h" #include "../io/io.h" /*}}}*/ void univariateNormal(IssmDouble* prand, IssmDouble mean, IssmDouble sdev) { /*{{{*/ /*univariateNormal generates a random value follwoing Normal distribution*/ unsigned seed = std::chrono::steady_clock::now().time_since_epoch().count(); //random seed using time_since_epoch std::default_random_engine generator(seed); //generator of random numbers std::normal_distribution normdistri(mean,sdev); //Normal probability distribution double tfunc; *prand = normdistri(generator); } /*}}}*/ void multivariateNormal(IssmDouble** prand, int dim, IssmDouble mean, IssmDouble* covariancematrix) { /*{{{*/ IssmDouble* sampleStandardNormal = xNew(dim); IssmDouble* sampleMultivariateNormal = xNew(dim); IssmDouble* Lchol = xNewZeroInit(dim*dim); for(int ii{0};ii(sampleStandardNormal); xDelete(Lchol); } /*}}}*/ void multivariateNormal(IssmDouble** prand, int dim, IssmDouble* mean, IssmDouble* covariancematrix) { /*{{{*/ IssmDouble* sampleStandardNormal = xNew(dim); IssmDouble* sampleMultivariateNormal = xNew(dim); IssmDouble* Lchol = xNewZeroInit(dim*dim); for(int ii{0};ii(sampleStandardNormal); xDelete(Lchol); } /*}}}*/