Lines Matching refs:ksp

9 static PetscErrorCode KSPSetUp_PIPECG(KSP ksp)  in KSPSetUp_PIPECG()  argument
13 PetscCall(KSPSetWorkVecs(ksp, 9)); in KSPSetUp_PIPECG()
20 static PetscErrorCode KSPSolve_PIPECG(KSP ksp) in KSPSolve_PIPECG() argument
30 PetscCall(PCGetDiagonalScale(ksp->pc, &diagonalscale)); in KSPSolve_PIPECG()
31 … PetscObjectComm((PetscObject)ksp), PETSC_ERR_SUP, "Krylov method %s does not support diagonal sca… in KSPSolve_PIPECG()
33 X = ksp->vec_sol; in KSPSolve_PIPECG()
34 B = ksp->vec_rhs; in KSPSolve_PIPECG()
35 R = ksp->work[0]; in KSPSolve_PIPECG()
36 Z = ksp->work[1]; in KSPSolve_PIPECG()
37 P = ksp->work[2]; in KSPSolve_PIPECG()
38 N = ksp->work[3]; in KSPSolve_PIPECG()
39 W = ksp->work[4]; in KSPSolve_PIPECG()
40 Q = ksp->work[5]; in KSPSolve_PIPECG()
41 U = ksp->work[6]; in KSPSolve_PIPECG()
42 M = ksp->work[7]; in KSPSolve_PIPECG()
43 S = ksp->work[8]; in KSPSolve_PIPECG()
45 PetscCall(PCGetOperators(ksp->pc, &Amat, &Pmat)); in KSPSolve_PIPECG()
47 ksp->its = 0; in KSPSolve_PIPECG()
48 if (!ksp->guess_zero) { in KSPSolve_PIPECG()
49 PetscCall(KSP_MatMult(ksp, Amat, X, R)); /* r <- b - Ax */ in KSPSolve_PIPECG()
55 PetscCall(KSP_PCApply(ksp, R, U)); /* u <- Br */ in KSPSolve_PIPECG()
57 switch (ksp->normtype) { in KSPSolve_PIPECG()
61 PetscCall(KSP_MatMult(ksp, Amat, U, W)); /* w <- Au */ in KSPSolve_PIPECG()
67 PetscCall(KSP_MatMult(ksp, Amat, U, W)); /* w <- Au */ in KSPSolve_PIPECG()
73 PetscCall(KSP_MatMult(ksp, Amat, U, W)); /* w <- Au */ in KSPSolve_PIPECG()
75 KSPCheckDot(ksp, gamma); in KSPSolve_PIPECG()
79 PetscCall(KSP_MatMult(ksp, Amat, U, W)); in KSPSolve_PIPECG()
83 SETERRQ(PetscObjectComm((PetscObject)ksp), PETSC_ERR_SUP, "%s", KSPNormTypes[ksp->normtype]); in KSPSolve_PIPECG()
85 PetscCall(KSPLogResidualHistory(ksp, dp)); in KSPSolve_PIPECG()
86 PetscCall(KSPMonitor(ksp, 0, dp)); in KSPSolve_PIPECG()
87 ksp->rnorm = dp; in KSPSolve_PIPECG()
88 PetscCall((*ksp->converged)(ksp, 0, dp, &ksp->reason, ksp->cnvP)); /* test for convergence */ in KSPSolve_PIPECG()
89 if (ksp->reason) PetscFunctionReturn(PETSC_SUCCESS); in KSPSolve_PIPECG()
93 if (i > 0 && ksp->normtype == KSP_NORM_UNPRECONDITIONED) { in KSPSolve_PIPECG()
95 } else if (i > 0 && ksp->normtype == KSP_NORM_PRECONDITIONED) { in KSPSolve_PIPECG()
98 if (!(i == 0 && ksp->normtype == KSP_NORM_NATURAL)) PetscCall(VecDotBegin(R, U, &gamma)); in KSPSolve_PIPECG()
102 PetscCall(KSP_PCApply(ksp, W, M)); /* m <- Bw */ in KSPSolve_PIPECG()
103 PetscCall(KSP_MatMult(ksp, Amat, M, N)); /* n <- Am */ in KSPSolve_PIPECG()
105 if (i > 0 && ksp->normtype == KSP_NORM_UNPRECONDITIONED) { in KSPSolve_PIPECG()
107 } else if (i > 0 && ksp->normtype == KSP_NORM_PRECONDITIONED) { in KSPSolve_PIPECG()
110 if (!(i == 0 && ksp->normtype == KSP_NORM_NATURAL)) PetscCall(VecDotEnd(R, U, &gamma)); in KSPSolve_PIPECG()
114 if (ksp->normtype == KSP_NORM_NATURAL) dp = PetscSqrtReal(PetscAbsScalar(gamma)); in KSPSolve_PIPECG()
115 else if (ksp->normtype == KSP_NORM_NONE) dp = 0.0; in KSPSolve_PIPECG()
117 ksp->rnorm = dp; in KSPSolve_PIPECG()
118 PetscCall(KSPLogResidualHistory(ksp, dp)); in KSPSolve_PIPECG()
119 PetscCall(KSPMonitor(ksp, i, dp)); in KSPSolve_PIPECG()
120 PetscCall((*ksp->converged)(ksp, i, dp, &ksp->reason, ksp->cnvP)); in KSPSolve_PIPECG()
121 if (ksp->reason) PetscFunctionReturn(PETSC_SUCCESS); in KSPSolve_PIPECG()
144 ksp->its = i; in KSPSolve_PIPECG()
153 } while (i <= ksp->max_it); in KSPSolve_PIPECG()
154 if (!ksp->reason) ksp->reason = KSP_DIVERGED_ITS; in KSPSolve_PIPECG()
179 PETSC_EXTERN PetscErrorCode KSPCreate_PIPECG(KSP ksp) in KSPCreate_PIPECG() argument
182 PetscCall(KSPSetSupportedNorm(ksp, KSP_NORM_UNPRECONDITIONED, PC_LEFT, 2)); in KSPCreate_PIPECG()
183 PetscCall(KSPSetSupportedNorm(ksp, KSP_NORM_PRECONDITIONED, PC_LEFT, 2)); in KSPCreate_PIPECG()
184 PetscCall(KSPSetSupportedNorm(ksp, KSP_NORM_NATURAL, PC_LEFT, 2)); in KSPCreate_PIPECG()
185 PetscCall(KSPSetSupportedNorm(ksp, KSP_NORM_NONE, PC_LEFT, 1)); in KSPCreate_PIPECG()
187 ksp->ops->setup = KSPSetUp_PIPECG; in KSPCreate_PIPECG()
188 ksp->ops->solve = KSPSolve_PIPECG; in KSPCreate_PIPECG()
189 ksp->ops->destroy = KSPDestroyDefault; in KSPCreate_PIPECG()
190 ksp->ops->view = NULL; in KSPCreate_PIPECG()
191 ksp->ops->setfromoptions = NULL; in KSPCreate_PIPECG()
192 ksp->ops->buildsolution = KSPBuildSolutionDefault; in KSPCreate_PIPECG()
193 ksp->ops->buildresidual = KSPBuildResidual_CG; in KSPCreate_PIPECG()