Newer
Older
* Copyright (c) 2012-2021, 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 USE_PETSC
namespace MathLib
{
std::unique_ptr<PETScMatrix>
MatrixVectorTraits<PETScMatrix>::
newInstance()
{
}
std::unique_ptr<PETScMatrix>
MatrixVectorTraits<PETScMatrix>::
newInstance(PETScMatrix const& A)
{
}
std::unique_ptr<PETScMatrix>
MatrixVectorTraits<PETScMatrix>::
newInstance(MatrixSpecifications const& spec)
{
auto const nrows = spec.nrows;
auto const ncols = spec.ncols;
// Assert that the misuse of the sparsity pattern is consistent.
assert(spec.sparsity_pattern->size() == 1);
auto const max_nonzeroes = spec.sparsity_pattern->front();
PETScMatrixOption mat_opt;
mat_opt.d_nz = max_nonzeroes;
mat_opt.o_nz = max_nonzeroes;
mat_opt.is_global_size = false;
return std::make_unique<PETScMatrix>(nrows, ncols, mat_opt);
return std::make_unique<PETScMatrix>(nrows, ncols);
}
std::unique_ptr<PETScVector>
MatrixVectorTraits<PETScVector>::
newInstance()
{
}
std::unique_ptr<PETScVector>
MatrixVectorTraits<PETScVector>::
newInstance(PETScVector const& x)
{
}
std::unique_ptr<PETScVector>
MatrixVectorTraits<PETScVector>::
newInstance(MatrixSpecifications const& spec)
{
auto const is_global_size = false;
return std::make_unique<PETScVector>(spec.nrows, *spec.ghost_indices,
is_global_size);
return std::make_unique<PETScVector>(spec.nrows, is_global_size);
std::unique_ptr<PETScVector> MatrixVectorTraits<PETScVector>::newInstance(
PETScVector::IndexType const length)
{
auto const is_global_size = true;
return std::make_unique<PETScVector>(length, is_global_size);
}
} // namespace MathLib
namespace MathLib
{
std::unique_ptr<EigenMatrix>
MatrixVectorTraits<EigenMatrix>::
newInstance()
{
return std::make_unique<EigenMatrix>(0, 0); // TODO default constructor
}
std::unique_ptr<EigenMatrix>
MatrixVectorTraits<EigenMatrix>::
newInstance(EigenMatrix const& A)
{
}
std::unique_ptr<EigenMatrix>
MatrixVectorTraits<EigenMatrix>::
newInstance(MatrixSpecifications const& spec)
{
auto A = std::make_unique<EigenMatrix>(spec.nrows);
if (spec.sparsity_pattern)
setMatrixSparsity(*A, *spec.sparsity_pattern);
}
std::unique_ptr<EigenVector>
MatrixVectorTraits<EigenVector>::
newInstance()
{
}
std::unique_ptr<EigenVector>
MatrixVectorTraits<EigenVector>::
newInstance(EigenVector const& x)
{
}
std::unique_ptr<EigenVector>
MatrixVectorTraits<EigenVector>::
newInstance(MatrixSpecifications const& spec)
{
return std::make_unique<EigenVector>(spec.nrows);
std::unique_ptr<EigenVector> MatrixVectorTraits<EigenVector>::newInstance(
Eigen::SparseMatrix<double>::Index const length)
{
return std::make_unique<EigenVector>(length);
}
} // namespace MathLib