Lines Matching refs:jac

40   PC_SVD      *jac = (PC_SVD *)pc->data;  in PCSetUp_SVD()  local
47 PetscCall(MatDestroy(&jac->A)); in PCSetUp_SVD()
53 PetscCall(MatConvert(redmat, MATSEQDENSE, MAT_INITIAL_MATRIX, &jac->A)); in PCSetUp_SVD()
56 PetscCall(MatConvert(pc->pmat, MATSEQDENSE, MAT_INITIAL_MATRIX, &jac->A)); in PCSetUp_SVD()
58 if (!jac->diag) { /* assume square matrices */ in PCSetUp_SVD()
59 PetscCall(MatCreateVecs(jac->A, &jac->diag, &jac->work)); in PCSetUp_SVD()
61 if (!jac->U) { in PCSetUp_SVD()
62 PetscCall(MatDuplicate(jac->A, MAT_DO_NOT_COPY_VALUES, &jac->U)); in PCSetUp_SVD()
63 PetscCall(MatDuplicate(jac->A, MAT_DO_NOT_COPY_VALUES, &jac->Vt)); in PCSetUp_SVD()
65 PetscCall(MatGetSize(jac->A, &n, NULL)); in PCSetUp_SVD()
71 PetscCall(MatDenseGetArray(jac->A, &a)); in PCSetUp_SVD()
72 PetscCall(MatDenseGetArray(jac->U, &u)); in PCSetUp_SVD()
73 PetscCall(MatDenseGetArray(jac->Vt, &v)); in PCSetUp_SVD()
74 PetscCall(VecGetArray(jac->diag, &d)); in PCSetUp_SVD()
98 PetscCall(MatDenseRestoreArray(jac->A, &a)); in PCSetUp_SVD()
99 PetscCall(MatDenseRestoreArray(jac->U, &u)); in PCSetUp_SVD()
100 PetscCall(MatDenseRestoreArray(jac->Vt, &v)); in PCSetUp_SVD()
102 if (PetscRealPart(d[i]) > jac->zerosing) break; in PCSetUp_SVD()
103 jac->nzero = n - 1 - i; in PCSetUp_SVD()
104 if (jac->monitor) { in PCSetUp_SVD()
105 PetscCall(PetscViewerASCIIAddTab(jac->monitor, ((PetscObject)pc)->tablevel)); in PCSetUp_SVD()
106jac->monitor, " SVD: condition number %14.12e, %" PetscInt_FMT " of %" PetscInt_FMT " singular … in PCSetUp_SVD()
107 if (n < 10 || jac->monitorformat == PETSC_VIEWER_ALL) { in PCSetUp_SVD()
108 PetscCall(PetscViewerASCIIPrintf(jac->monitor, " SVD: singular values:\n")); in PCSetUp_SVD()
111 if (i != 0) PetscCall(PetscViewerASCIIPrintf(jac->monitor, "\n")); in PCSetUp_SVD()
112 PetscCall(PetscViewerASCIIPrintf(jac->monitor, " ")); in PCSetUp_SVD()
114 PetscCall(PetscViewerASCIIPrintf(jac->monitor, " %14.12e", (double)PetscRealPart(d[i]))); in PCSetUp_SVD()
116 PetscCall(PetscViewerASCIIPrintf(jac->monitor, "\n")); in PCSetUp_SVD()
118 …PetscCall(PetscViewerASCIIPrintf(jac->monitor, " SVD: smallest singular values: %14.12e %14.12e… in PCSetUp_SVD()
119 …PetscCall(PetscViewerASCIIPrintf(jac->monitor, " SVD: largest singular values : %14.12e %14.12e… in PCSetUp_SVD()
121 PetscCall(PetscViewerASCIISubtractTab(jac->monitor, ((PetscObject)pc)->tablevel)); in PCSetUp_SVD()
124 for (i = 0; i < n - jac->nzero; i++) d[i] = 1.0 / d[i]; in PCSetUp_SVD()
126 if (jac->essrank > 0) in PCSetUp_SVD()
127 …for (i = 0; i < n - jac->nzero - jac->essrank; i++) d[i] = 0.0; /* Skip all but essrank eigenvalue… in PCSetUp_SVD()
128 …PetscCall(PetscInfo(pc, "Number of zero or nearly singular values %" PetscInt_FMT "\n", jac->nzero… in PCSetUp_SVD()
129 PetscCall(VecRestoreArray(jac->diag, &d)); in PCSetUp_SVD()
136 PC_SVD *jac = (PC_SVD *)pc->data; in PCSVDGetVec() local
146 if (!jac->left2red) PetscCall(VecScatterCreateToAll(x, &jac->left2red, &jac->leftred)); in PCSVDGetVec()
148 PetscCall(VecScatterBegin(jac->left2red, x, jac->leftred, INSERT_VALUES, SCATTER_FORWARD)); in PCSVDGetVec()
149 PetscCall(VecScatterEnd(jac->left2red, x, jac->leftred, INSERT_VALUES, SCATTER_FORWARD)); in PCSVDGetVec()
151 *xred = jac->leftred; in PCSVDGetVec()
157 if (!jac->right2red) PetscCall(VecScatterCreateToAll(x, &jac->right2red, &jac->rightred)); in PCSVDGetVec()
159 … PetscCall(VecScatterBegin(jac->right2red, x, jac->rightred, INSERT_VALUES, SCATTER_FORWARD)); in PCSVDGetVec()
160 PetscCall(VecScatterEnd(jac->right2red, x, jac->rightred, INSERT_VALUES, SCATTER_FORWARD)); in PCSVDGetVec()
162 *xred = jac->rightred; in PCSVDGetVec()
173 PC_SVD *jac = (PC_SVD *)pc->data; in PCSVDRestoreVec() local
181 PetscCall(VecScatterBegin(jac->left2red, jac->leftred, x, INSERT_VALUES, SCATTER_REVERSE)); in PCSVDRestoreVec()
182 PetscCall(VecScatterEnd(jac->left2red, jac->leftred, x, INSERT_VALUES, SCATTER_REVERSE)); in PCSVDRestoreVec()
187 PetscCall(VecScatterBegin(jac->right2red, jac->rightred, x, INSERT_VALUES, SCATTER_REVERSE)); in PCSVDRestoreVec()
188 PetscCall(VecScatterEnd(jac->right2red, jac->rightred, x, INSERT_VALUES, SCATTER_REVERSE)); in PCSVDRestoreVec()
212 PC_SVD *jac = (PC_SVD *)pc->data; in PCApply_SVD() local
213 Vec work = jac->work, xred, yred; in PCApply_SVD()
219 PetscCall(MatMultTranspose(jac->U, xred, work)); in PCApply_SVD()
221 PetscCall(MatMultHermitianTranspose(jac->U, xred, work)); in PCApply_SVD()
223 PetscCall(VecPointwiseMult(work, work, jac->diag)); in PCApply_SVD()
225 PetscCall(MatMultTranspose(jac->Vt, work, yred)); in PCApply_SVD()
227 PetscCall(MatMultHermitianTranspose(jac->Vt, work, yred)); in PCApply_SVD()
236 PC_SVD *jac = (PC_SVD *)pc->data; in PCMatApply_SVD() local
240 PetscCall(MatTransposeMatMult(jac->U, X, MAT_INITIAL_MATRIX, PETSC_DETERMINE, &W)); in PCMatApply_SVD()
241 PetscCall(MatDiagonalScale(W, jac->diag, NULL)); in PCMatApply_SVD()
242 PetscCall(MatTransposeMatMult(jac->Vt, W, MAT_REUSE_MATRIX, PETSC_DETERMINE, &Y)); in PCMatApply_SVD()
249 PC_SVD *jac = (PC_SVD *)pc->data; in PCApplyTranspose_SVD() local
250 Vec work = jac->work, xred, yred; in PCApplyTranspose_SVD()
255 PetscCall(MatMult(jac->Vt, xred, work)); in PCApplyTranspose_SVD()
256 PetscCall(VecPointwiseMult(work, work, jac->diag)); in PCApplyTranspose_SVD()
257 PetscCall(MatMult(jac->U, work, yred)); in PCApplyTranspose_SVD()
265 PC_SVD *jac = (PC_SVD *)pc->data; in PCReset_SVD() local
268 PetscCall(MatDestroy(&jac->A)); in PCReset_SVD()
269 PetscCall(MatDestroy(&jac->U)); in PCReset_SVD()
270 PetscCall(MatDestroy(&jac->Vt)); in PCReset_SVD()
271 PetscCall(VecDestroy(&jac->diag)); in PCReset_SVD()
272 PetscCall(VecDestroy(&jac->work)); in PCReset_SVD()
273 PetscCall(VecScatterDestroy(&jac->right2red)); in PCReset_SVD()
274 PetscCall(VecScatterDestroy(&jac->left2red)); in PCReset_SVD()
275 PetscCall(VecDestroy(&jac->rightred)); in PCReset_SVD()
276 PetscCall(VecDestroy(&jac->leftred)); in PCReset_SVD()
291 PC_SVD *jac = (PC_SVD *)pc->data; in PCDestroy_SVD() local
295 PetscCall(PetscViewerDestroy(&jac->monitor)); in PCDestroy_SVD()
302 PC_SVD *jac = (PC_SVD *)pc->data; in PCSetFromOptions_SVD() local
307 …ing", "Singular values smaller than this treated as zero", "None", jac->zerosing, &jac->zerosing, … in PCSetFromOptions_SVD()
308 …, "Essential rank of operator (0 to use entire operator)", "None", jac->essrank, &jac->essrank, NU… in PCSetFromOptions_SVD()
309 …"Monitor the conditioning, and extremal singular values", "None", &jac->monitor, &jac->monitorform… in PCSetFromOptions_SVD()
358 PC_SVD *jac; in PCCreate_SVD() local
366 PetscCall(PetscNew(&jac)); in PCCreate_SVD()
367 jac->zerosing = 1.e-12; in PCCreate_SVD()
368 pc->data = (void *)jac; in PCCreate_SVD()