Lines Matching refs:sp

24 PetscErrorCode MatNullSpaceSetFunction(MatNullSpace sp, MatNullSpaceRemoveFn *rem, PetscCtx ctx)  in MatNullSpaceSetFunction()  argument
27 PetscValidHeaderSpecific(sp, MAT_NULLSPACE_CLASSID, 1); in MatNullSpaceSetFunction()
28 sp->remove = rem; in MatNullSpaceSetFunction()
29 sp->rmctx = ctx; in MatNullSpaceSetFunction()
56 PetscErrorCode MatNullSpaceGetVecs(MatNullSpace sp, PetscBool *has_const, PetscInt *n, const Vec *v… in MatNullSpaceGetVecs() argument
59 PetscValidHeaderSpecific(sp, MAT_NULLSPACE_CLASSID, 1); in MatNullSpaceGetVecs()
60 if (has_const) *has_const = sp->has_cnst; in MatNullSpaceGetVecs()
61 if (n) *n = sp->n; in MatNullSpaceGetVecs()
62 if (vecs) *vecs = sp->vecs; in MatNullSpaceGetVecs()
88 PetscErrorCode MatNullSpaceCreateRigidBody(Vec coords, MatNullSpace *sp) in MatNullSpaceCreateRigidBody() argument
105 PetscCall(MatNullSpaceCreate(PetscObjectComm((PetscObject)coords), PETSC_TRUE, 0, NULL, sp)); in MatNullSpaceCreateRigidBody()
157 … PetscCall(MatNullSpaceCreate(PetscObjectComm((PetscObject)coords), PETSC_FALSE, nmodes, vec, sp)); in MatNullSpaceCreateRigidBody()
176 PetscErrorCode MatNullSpaceView(MatNullSpace sp, PetscViewer viewer) in MatNullSpaceView() argument
181 PetscValidHeaderSpecific(sp, MAT_NULLSPACE_CLASSID, 1); in MatNullSpaceView()
182 if (!viewer) PetscCall(PetscViewerASCIIGetStdout(PetscObjectComm((PetscObject)sp), &viewer)); in MatNullSpaceView()
184 PetscCheckSameComm(sp, 1, viewer, 2); in MatNullSpaceView()
191 PetscCall(PetscObjectPrintClassNamePrefixType((PetscObject)sp, viewer)); in MatNullSpaceView()
193 …IIPrintf(viewer, "Contains %" PetscInt_FMT " vector%s%s\n", sp->n, sp->n == 1 ? "" : "s", sp->has_… in MatNullSpaceView()
194 … if (sp->remove) PetscCall(PetscViewerASCIIPrintf(viewer, "Has user-provided removal function\n")); in MatNullSpaceView()
196 for (i = 0; i < sp->n; i++) PetscCall(VecView(sp->vecs[i], viewer)); in MatNullSpaceView()
232 MatNullSpace sp; in MatNullSpaceCreate() local
274 …PetscCall(PetscHeaderCreate(sp, MAT_NULLSPACE_CLASSID, "MatNullSpace", "Null space", "Mat", comm, … in MatNullSpaceCreate()
276 sp->has_cnst = has_cnst; in MatNullSpaceCreate()
277 sp->n = n; in MatNullSpaceCreate()
278 sp->vecs = NULL; in MatNullSpaceCreate()
279 sp->alpha = NULL; in MatNullSpaceCreate()
280 sp->remove = NULL; in MatNullSpaceCreate()
281 sp->rmctx = NULL; in MatNullSpaceCreate()
284 PetscCall(PetscMalloc1(n, &sp->vecs)); in MatNullSpaceCreate()
285 PetscCall(PetscMalloc1(n, &sp->alpha)); in MatNullSpaceCreate()
288 sp->vecs[i] = vecs[i]; in MatNullSpaceCreate()
292 *SP = sp; in MatNullSpaceCreate()
308 PetscErrorCode MatNullSpaceDestroy(MatNullSpace *sp) in MatNullSpaceDestroy() argument
313 if (!*sp) PetscFunctionReturn(PETSC_SUCCESS); in MatNullSpaceDestroy()
314 PetscValidHeaderSpecific(*sp, MAT_NULLSPACE_CLASSID, 1); in MatNullSpaceDestroy()
315 if (--((PetscObject)*sp)->refct > 0) { in MatNullSpaceDestroy()
316 *sp = NULL; in MatNullSpaceDestroy()
320 for (i = 0; i < (*sp)->n; i++) PetscCall(VecLockReadPop((*sp)->vecs[i])); in MatNullSpaceDestroy()
322 PetscCall(VecDestroyVecs((*sp)->n, &(*sp)->vecs)); in MatNullSpaceDestroy()
323 PetscCall(PetscFree((*sp)->alpha)); in MatNullSpaceDestroy()
324 PetscCall(PetscHeaderDestroy(sp)); in MatNullSpaceDestroy()
341 PetscErrorCode MatNullSpaceRemove(MatNullSpace sp, Vec vec) in MatNullSpaceRemove() argument
347 if (!sp) PetscFunctionReturn(PETSC_SUCCESS); in MatNullSpaceRemove()
348 PetscValidHeaderSpecific(sp, MAT_NULLSPACE_CLASSID, 1); in MatNullSpaceRemove()
351 if (sp->has_cnst) { in MatNullSpaceRemove()
360 if (sp->n) { in MatNullSpaceRemove()
361 PetscCall(VecMDot(vec, sp->n, sp->vecs, sp->alpha)); in MatNullSpaceRemove()
362 for (i = 0; i < sp->n; i++) sp->alpha[i] = -sp->alpha[i]; in MatNullSpaceRemove()
363 PetscCall(VecMAXPY(vec, sp->n, sp->alpha, sp->vecs)); in MatNullSpaceRemove()
366 if (sp->remove) PetscCall((*sp->remove)(sp, vec, sp->rmctx)); in MatNullSpaceRemove()
386 PetscErrorCode MatNullSpaceTest(MatNullSpace sp, Mat mat, PetscBool *isNull) in MatNullSpaceTest() argument
396 PetscValidHeaderSpecific(sp, MAT_NULLSPACE_CLASSID, 1); in MatNullSpaceTest()
398 n = sp->n; in MatNullSpaceTest()
399 …PetscCall(PetscOptionsGetBool(((PetscObject)sp)->options, ((PetscObject)mat)->prefix, "-mat_null_s… in MatNullSpaceTest()
400 …PetscCall(PetscOptionsGetBool(((PetscObject)sp)->options, ((PetscObject)mat)->prefix, "-mat_null_s… in MatNullSpaceTest()
403 PetscCall(VecDuplicate(sp->vecs[0], &l)); in MatNullSpaceTest()
408 PetscCall(PetscViewerASCIIGetStdout(PetscObjectComm((PetscObject)sp), &viewer)); in MatNullSpaceTest()
409 if (sp->has_cnst) { in MatNullSpaceTest()
418 …PetscCall(PetscPrintf(PetscObjectComm((PetscObject)sp), "Constants are %s null vector ", consisten… in MatNullSpaceTest()
419 …PetscCall(PetscPrintf(PetscObjectComm((PetscObject)sp), "|| A * 1/sqrt(N) || = %g\n", (double)nrm)… in MatNullSpaceTest()
426 PetscUseTypeMethod(mat, mult, sp->vecs[j], l); in MatNullSpaceTest()
430 …PetscCall(PetscPrintf(PetscObjectComm((PetscObject)sp), "Null vector %" PetscInt_FMT " is %s null … in MatNullSpaceTest()
431 …PetscCall(PetscPrintf(PetscObjectComm((PetscObject)sp), "|| A * v[%" PetscInt_FMT "] || = %g\n", j… in MatNullSpaceTest()
436 …PetscCheck(!sp->remove, PetscObjectComm((PetscObject)mat), PETSC_ERR_SUP, "Cannot test a null spac… in MatNullSpaceTest()