19 std::unique_ptr<PETScMatrix> MatrixVectorTraits<PETScMatrix>::newInstance()
21 return std::make_unique<PETScMatrix>();
24 std::unique_ptr<PETScMatrix> MatrixVectorTraits<PETScMatrix>::newInstance(
27 return std::make_unique<PETScMatrix>(A);
30 std::unique_ptr<PETScMatrix> MatrixVectorTraits<PETScMatrix>::newInstance(
31 MatrixSpecifications
const& spec)
33 auto const nrows = spec.nrows;
34 auto const ncols = spec.ncols;
36 if (spec.sparsity_pattern)
39 assert(spec.sparsity_pattern->size() == 1);
41 auto const max_nonzeroes = spec.sparsity_pattern->front();
43 PETScMatrixOption mat_opt;
44 mat_opt.d_nz = max_nonzeroes;
45 mat_opt.o_nz = max_nonzeroes;
46 mat_opt.is_global_size =
false;
47 return std::make_unique<PETScMatrix>(nrows, ncols, mat_opt);
50 return std::make_unique<PETScMatrix>(nrows, ncols);
53 std::unique_ptr<PETScVector> MatrixVectorTraits<PETScVector>::newInstance()
55 return std::make_unique<PETScVector>();
58 std::unique_ptr<PETScVector> MatrixVectorTraits<PETScVector>::newInstance(
61 return std::make_unique<PETScVector>(x);
64 std::unique_ptr<PETScVector> MatrixVectorTraits<PETScVector>::newInstance(
65 MatrixSpecifications
const& spec)
67 auto const is_global_size =
false;
69 if (spec.ghost_indices !=
nullptr)
71 return std::make_unique<PETScVector>(spec.nrows, *spec.ghost_indices,
76 return std::make_unique<PETScVector>(spec.nrows, is_global_size);
80 std::unique_ptr<PETScVector> MatrixVectorTraits<PETScVector>::newInstance(
83 auto const is_global_size =
true;
85 return std::make_unique<PETScVector>(length, is_global_size);
93 std::unique_ptr<EigenMatrix> MatrixVectorTraits<EigenMatrix>::newInstance()
95 return std::make_unique<EigenMatrix>(0, 0);
98 std::unique_ptr<EigenMatrix> MatrixVectorTraits<EigenMatrix>::newInstance(
101 return std::make_unique<EigenMatrix>(A);
104 std::unique_ptr<EigenMatrix> MatrixVectorTraits<EigenMatrix>::newInstance(
105 MatrixSpecifications
const& spec)
107 auto A = std::make_unique<EigenMatrix>(spec.nrows);
109 if (spec.sparsity_pattern)
117 std::unique_ptr<EigenVector> MatrixVectorTraits<EigenVector>::newInstance()
119 return std::make_unique<EigenVector>();
122 std::unique_ptr<EigenVector> MatrixVectorTraits<EigenVector>::newInstance(
123 EigenVector
const& x)
125 return std::make_unique<EigenVector>(x);
128 std::unique_ptr<EigenVector> MatrixVectorTraits<EigenVector>::newInstance(
129 MatrixSpecifications
const& spec)
131 return std::make_unique<EigenVector>(spec.nrows);
134 std::unique_ptr<EigenVector> MatrixVectorTraits<EigenVector>::newInstance(
135 Eigen::SparseMatrix<double>::Index
const length)
137 return std::make_unique<EigenVector>(length);
void setMatrixSparsity(MATRIX &matrix, SPARSITY_PATTERN const &sparsity_pattern)