76 const PetscScalar one = 1.0;
77 const PetscInt nrows =
static_cast<PetscInt
>(row_pos.size());
83 PetscCallAbort(PETSC_COMM_WORLD,
84 MatSetOption(
A_, MAT_NO_OFF_PROC_ZERO_ROWS, PETSC_TRUE));
87 PetscCallAbort(PETSC_COMM_WORLD,
88 MatSetOption(
A_, MAT_KEEP_NONZERO_PATTERN, PETSC_TRUE));
92 PetscCallAbort(PETSC_COMM_WORLD,
93 MatZeroRows(
A_, nrows, &row_pos[0], one, PETSC_NULLPTR,
98 PetscCallAbort(PETSC_COMM_WORLD,
99 MatZeroRows(
A_, 0, PETSC_NULLPTR, one, PETSC_NULLPTR,
128 PetscCallAbort(PETSC_COMM_WORLD, MatCreate(PETSC_COMM_WORLD, &
A_));
129 PetscCallAbort(PETSC_COMM_WORLD,
132 PetscCallAbort(PETSC_COMM_WORLD, MatSetType(
A_, MATAIJ));
133 PetscCallAbort(PETSC_COMM_WORLD, MatSetFromOptions(
A_));
139 PetscCallAbort(PETSC_COMM_WORLD,
141 PetscCallAbort(PETSC_COMM_WORLD, MatGetSize(
A_, &
nrows_, &
ncols_));
142 PetscCallAbort(PETSC_COMM_WORLD,
150 PetscCallAbort(PETSC_COMM_WORLD,
151 MatCreate(PETSC_COMM_WORLD, &preallocator));
155 PetscCallAbort(PETSC_COMM_WORLD, MatSetType(preallocator, MATPREALLOCATOR));
156 PetscCallAbort(PETSC_COMM_WORLD, MatSetUp(preallocator));
160 PetscCallAbort(PETSC_COMM_WORLD,
161 MatGetOwnershipRange(preallocator, &row_start, &row_end));
163 PetscInt
const n_local = row_end - row_start;
175 "PETScMatrix: the sparsity pattern's local row count and PETSc's "
176 "row distribution disagree on at least one rank. On this rank the "
177 "pattern describes {} local rows, but PETSc distributed {} rows.",
186 for (PetscInt local_row = 0; local_row < n_local; ++local_row)
188 PetscInt
const global_row = row_start + local_row;
189 PetscInt
const ncols = sparsity_pattern.
nnzInRow(local_row);
190 PetscInt
const*
const cols = sparsity_pattern.
col_idx.data() +
191 sparsity_pattern.
row_ptr[local_row];
192 PetscCallAbort(PETSC_COMM_WORLD,
193 MatSetValues(preallocator, 1, &global_row, ncols, cols,
194 nullptr, INSERT_VALUES));
197 PetscCallAbort(PETSC_COMM_WORLD,
198 MatAssemblyBegin(preallocator, MAT_FINAL_ASSEMBLY));
199 PetscCallAbort(PETSC_COMM_WORLD,
200 MatAssemblyEnd(preallocator, MAT_FINAL_ASSEMBLY));
206 constexpr PetscBool fill_zeros = PETSC_TRUE;
207 PetscCallAbort(PETSC_COMM_WORLD,
208 MatPreallocatorPreallocate(preallocator, fill_zeros,
A_));
216 PetscCallAbort(PETSC_COMM_WORLD, MatDestroy(&preallocator));
235 MatSetOption(
A_, MAT_NEW_NONZERO_ALLOCATION_ERR, PETSC_FALSE));
236 PetscCallAbort(PETSC_COMM_WORLD, MatShift(
A_, value));
239 MatSetOption(
A_, MAT_NEW_NONZERO_ALLOCATION_ERR, PETSC_TRUE));