Skip to content
Snippets Groups Projects
MatrixVectorTraits.cpp 3.64 KiB
Newer Older
  • Learn to ignore specific revisions
  • /**
     * \copyright
     * Copyright (c) 2012-2016, 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 "MatrixVectorTraits.h"
    
    #ifdef OGS_USE_EIGEN
    
    namespace MathLib
    {
    
    std::unique_ptr<Eigen::MatrixXd>
    MatrixVectorTraits<Eigen::MatrixXd>::
    newInstance()
    {
        return std::unique_ptr<Eigen::MatrixXd>(new Eigen::MatrixXd);
    }
    
    std::unique_ptr<Eigen::MatrixXd>
    MatrixVectorTraits<Eigen::MatrixXd>::
    newInstance(Eigen::MatrixXd const& A)
    {
        return std::unique_ptr<Eigen::MatrixXd>(new Eigen::MatrixXd(A));
    }
    
    std::unique_ptr<Eigen::MatrixXd>
    MatrixVectorTraits<Eigen::MatrixXd>::
    newInstance(MatrixSpecifications const& spec)
    {
        return std::unique_ptr<Eigen::MatrixXd>(new Eigen::MatrixXd(spec.nrows, spec.ncols));
    }
    
    std::unique_ptr<Eigen::VectorXd>
    MatrixVectorTraits<Eigen::VectorXd>::
    newInstance()
    {
        return std::unique_ptr<Eigen::VectorXd>(new Eigen::VectorXd);
    }
    
    std::unique_ptr<Eigen::VectorXd>
    MatrixVectorTraits<Eigen::VectorXd>::
    newInstance(Eigen::VectorXd const& A)
    {
        return std::unique_ptr<Eigen::VectorXd>(new Eigen::VectorXd(A));
    }
    
    std::unique_ptr<Eigen::VectorXd>
    MatrixVectorTraits<Eigen::VectorXd>::
    newInstance(MatrixSpecifications const& spec)
    {
        return std::unique_ptr<Eigen::VectorXd>(new Eigen::VectorXd(spec.nrows));
    }
    
    } // namespace MathLib
    
    #endif // OGS_USE_EIGEN
    
    
    #ifdef USE_PETSC
    
    namespace MathLib
    {
    
    std::unique_ptr<PETScMatrix>
    MatrixVectorTraits<PETScMatrix>::
    newInstance()
    {
        return std::unique_ptr<PETScMatrix>(new PETScMatrix(0, 0)); // TODO default constructor
    }
    
    std::unique_ptr<PETScMatrix>
    MatrixVectorTraits<PETScMatrix>::
    newInstance(PETScMatrix const& A)
    {
        return std::unique_ptr<PETScMatrix>(new PETScMatrix(A));
    }
    
    std::unique_ptr<PETScMatrix>
    MatrixVectorTraits<PETScMatrix>::
    newInstance(MatrixSpecifications const& spec)
    {
        return std::unique_ptr<PETScMatrix>(new PETScMatrix(spec.nrows)); // TODO sparsity pattern
    }
    
    std::unique_ptr<PETScVector>
    MatrixVectorTraits<PETScVector>::
    newInstance()
    {
        return std::unique_ptr<PETScVector>(new PETScVector);
    }
    
    std::unique_ptr<PETScVector>
    MatrixVectorTraits<PETScVector>::
    newInstance(PETScVector const& x)
    {
        return std::unique_ptr<PETScVector>(new PETScVector(x));
    }
    
    std::unique_ptr<PETScVector>
    MatrixVectorTraits<PETScVector>::
    newInstance(MatrixSpecifications const& spec)
    {
        return std::unique_ptr<PETScVector>(new PETScVector(spec.nrows));
    }
    
    } // namespace MathLib
    
    
    #elif defined(OGS_USE_EIGEN)
    
    namespace MathLib
    {
    
    std::unique_ptr<EigenMatrix>
    MatrixVectorTraits<EigenMatrix>::
    newInstance()
    {
        return std::unique_ptr<EigenMatrix>(new EigenMatrix(0, 0)); // TODO default constructor
    }
    
    std::unique_ptr<EigenMatrix>
    MatrixVectorTraits<EigenMatrix>::
    newInstance(EigenMatrix const& A)
    {
        return std::unique_ptr<EigenMatrix>(new EigenMatrix(A));
    }
    
    std::unique_ptr<EigenMatrix>
    MatrixVectorTraits<EigenMatrix>::
    newInstance(MatrixSpecifications const& spec)
    {
        return std::unique_ptr<EigenMatrix>(new EigenMatrix(spec.nrows)); // TODO sparsity pattern
    }
    
    std::unique_ptr<EigenVector>
    MatrixVectorTraits<EigenVector>::
    newInstance()
    {
        return std::unique_ptr<EigenVector>(new EigenVector);
    }
    
    std::unique_ptr<EigenVector>
    MatrixVectorTraits<EigenVector>::
    newInstance(EigenVector const& x)
    {
        return std::unique_ptr<EigenVector>(new EigenVector(x));
    }
    
    std::unique_ptr<EigenVector>
    MatrixVectorTraits<EigenVector>::
    newInstance(MatrixSpecifications const& spec)
    {
        return std::unique_ptr<EigenVector>(new EigenVector(spec.nrows));
    }
    
    } // namespace MathLib
    
    #endif // defined(OGS_USE_EIGEN)