void setVector(PETScVector& v, std::initializer_list<double> values) { std::vector<double> const vals(values); std::vector<PETScVector::IndexType> idcs(vals.size()); std::iota(idcs.begin(), idcs.end(), 0); v.set(idcs, vals); }
void applyKnownSolution(PETScMatrix &A, PETScVector &b, PETScVector &x, const std::vector<PetscInt> &vec_knownX_id, const std::vector<PetscScalar> &vec_knownX_x) { A.finalizeAssembly(); A.setRowsColumnsZero(vec_knownX_id); A.finalizeAssembly(); x.finalizeAssembly(); b.finalizeAssembly(); if(vec_knownX_id.size() > 0) { x.set(vec_knownX_id, vec_knownX_x); b.set(vec_knownX_id, vec_knownX_x); } x.finalizeAssembly(); b.finalizeAssembly(); }
void setVector(PETScVector& v, MatrixVectorTraits<PETScVector>::Index const index, double const value) { v.set(index, value); // TODO handle negative indices }