Skip to content
Snippets Groups Projects
VectorUtils.h 1.39 KiB
Newer Older
  • Learn to ignore specific revisions
  •  * Copyright (c) 2012-2024, OpenGeoSys Community (http://www.opengeosys.org)
    
     *            Distributed under a Modified BSD License.
     *              See accompanying file LICENSE.txt or
     *              http://www.opengeosys.org/project/license
     *
     */
    
    #include <random>
    #include "MathLib/LinAlg/MatrixVectorTraits.h"
    #include "MathLib/LinAlg/UnifiedMatrixSetters.h"
    
    
    template <typename Vector>
    void fillVectorRandomly(Vector& x)
    {
        std::random_device rd;
        std::mt19937 random_number_generator(rd());
        std::uniform_real_distribution<double> rnd;
    
        using Index = typename MathLib::MatrixVectorTraits<Vector>::Index;
        Index const size = x.size();
    
        for (Index i = 0; i < size; ++i) {
            MathLib::setVector(x, i, rnd(random_number_generator));
        }
    
    #ifdef USE_PETSC
        finalizeVectorAssembly(x);
    #endif
    
    
    inline void fillVectorRandomly(std::vector<double>& x)
    {
        std::random_device rd;
        std::mt19937 random_number_generator(rd());
        std::uniform_real_distribution<double> rnd;
    
        for (auto& value : x)
        {
            value = rnd(random_number_generator);
        }
    }
    
    
    template <std::size_t N>
    void fillVectorRandomly(std::array<double, N>& x)
    {
        std::random_device rd;
        std::mt19937 random_number_generator(rd());
        std::uniform_real_distribution<double> rnd;
    
        for (auto& value : x)
        {
            value = rnd(random_number_generator);
        }
    }