Lines Matching refs:snes

53 PetscErrorCode SNESVIComputeFunction(SNES snes, Vec X, Vec phi, void *functx)  in SNESVIComputeFunction()  argument
55 SNES_VINEWTONSSLS *vi = (SNES_VINEWTONSSLS *)snes->data; in SNESVIComputeFunction()
56 Vec Xl = snes->xl, Xu = snes->xu, F = snes->vec_func; in SNESVIComputeFunction()
62 PetscCall((*vi->computeuserfunction)(snes, X, F, functx)); in SNESVIComputeFunction()
96 static PetscErrorCode SNESVIComputeBsubdifferentialVectors(SNES snes, Vec X, Vec F, Mat jac, Vec Da… in SNESVIComputeBsubdifferentialVectors() argument
104 PetscCall(VecGetArray(snes->xl, &l)); in SNESVIComputeBsubdifferentialVectors()
105 PetscCall(VecGetArray(snes->xu, &u)); in SNESVIComputeBsubdifferentialVectors()
135 PetscCall(VecRestoreArray(snes->xl, &l)); in SNESVIComputeBsubdifferentialVectors()
136 PetscCall(VecRestoreArray(snes->xu, &u)); in SNESVIComputeBsubdifferentialVectors()
195 static PetscErrorCode SNESSolve_VINEWTONSSLS(SNES snes) in SNESSolve_VINEWTONSSLS() argument
197 SNES_VINEWTONSSLS *vi = (SNES_VINEWTONSSLS *)snes->data; in SNESSolve_VINEWTONSSLS()
207 PetscCall(SNESGetDM(snes, &dm)); in SNESSolve_VINEWTONSSLS()
213 snes->numFailures = 0; in SNESSolve_VINEWTONSSLS()
214 snes->numLinearSolveFailures = 0; in SNESSolve_VINEWTONSSLS()
215 snes->reason = SNES_CONVERGED_ITERATING; in SNESSolve_VINEWTONSSLS()
217 maxits = snes->max_its; /* maximum number of iterations */ in SNESSolve_VINEWTONSSLS()
218 X = snes->vec_sol; /* solution vector */ in SNESSolve_VINEWTONSSLS()
219 F = snes->vec_func; /* residual vector */ in SNESSolve_VINEWTONSSLS()
220 Y = snes->work[0]; /* work vectors */ in SNESSolve_VINEWTONSSLS()
222 PetscCall(PetscObjectSAWsTakeAccess((PetscObject)snes)); in SNESSolve_VINEWTONSSLS()
223 snes->iter = 0; in SNESSolve_VINEWTONSSLS()
224 snes->norm = 0.0; in SNESSolve_VINEWTONSSLS()
225 PetscCall(PetscObjectSAWsGrantAccess((PetscObject)snes)); in SNESSolve_VINEWTONSSLS()
227 PetscCall(SNESVIProjectOntoBounds(snes, X)); in SNESSolve_VINEWTONSSLS()
228 PetscCall(SNESComputeFunction(snes, X, vi->phi)); in SNESSolve_VINEWTONSSLS()
229 if (snes->functiondomainerror) { /* this is wrong because functiondomainerror is not collective */ in SNESSolve_VINEWTONSSLS()
230 snes->reason = SNES_DIVERGED_FUNCTION_DOMAIN; in SNESSolve_VINEWTONSSLS()
231 snes->functiondomainerror = PETSC_FALSE; in SNESSolve_VINEWTONSSLS()
240 SNESCheckFunctionDomainError(snes, vi->merit); in SNESSolve_VINEWTONSSLS()
242 PetscCall(PetscObjectSAWsTakeAccess((PetscObject)snes)); in SNESSolve_VINEWTONSSLS()
243 snes->norm = vi->phinorm; in SNESSolve_VINEWTONSSLS()
244 PetscCall(PetscObjectSAWsGrantAccess((PetscObject)snes)); in SNESSolve_VINEWTONSSLS()
245 PetscCall(SNESLogConvergenceHistory(snes, vi->phinorm, 0)); in SNESSolve_VINEWTONSSLS()
248 PetscCall(SNESConverged(snes, 0, 0.0, 0.0, vi->phinorm)); in SNESSolve_VINEWTONSSLS()
249 PetscCall(SNESMonitor(snes, 0, vi->phinorm)); in SNESSolve_VINEWTONSSLS()
250 if (snes->reason) { in SNESSolve_VINEWTONSSLS()
257 PetscTryTypeMethod(snes, update, snes->iter); in SNESSolve_VINEWTONSSLS()
263 PetscCall(SNESComputeJacobian(snes, X, snes->jacobian, snes->jacobian_pre)); in SNESSolve_VINEWTONSSLS()
264 SNESCheckJacobianDomainError(snes); in SNESSolve_VINEWTONSSLS()
268 PetscCall(SNESVIComputeBsubdifferentialVectors(snes, X, F, snes->jacobian, vi->Da, vi->Db)); in SNESSolve_VINEWTONSSLS()
270 PetscCall(SNESVIComputeJacobian(snes->jacobian, snes->jacobian_pre, vi->Da, vi->Db)); in SNESSolve_VINEWTONSSLS()
272 PetscCall(SNESVIComputeMeritFunctionGradient(snes->jacobian, vi->phi, vi->dpsi)); in SNESSolve_VINEWTONSSLS()
273 PetscCall(KSPSetOperators(snes->ksp, snes->jacobian, snes->jacobian_pre)); in SNESSolve_VINEWTONSSLS()
274 PetscCall(KSPSolve(snes->ksp, vi->phi, Y)); in SNESSolve_VINEWTONSSLS()
275 PetscCall(KSPGetConvergedReason(snes->ksp, &kspreason)); in SNESSolve_VINEWTONSSLS()
278 if (++snes->numLinearSolveFailures >= snes->maxLinearSolveFailures) { in SNESSolve_VINEWTONSSLS()
279 …o(snes, "iter=%" PetscInt_FMT ", number linear solve failures %" PetscInt_FMT " greater than curre… in SNESSolve_VINEWTONSSLS()
280 snes->reason = SNES_DIVERGED_LINEAR_SOLVE; in SNESSolve_VINEWTONSSLS()
284 PetscCall(KSPGetIterationNumber(snes->ksp, &lits)); in SNESSolve_VINEWTONSSLS()
285 snes->linear_its += lits; in SNESSolve_VINEWTONSSLS()
286 …PetscCall(PetscInfo(snes, "iter=%" PetscInt_FMT ", linear solve iterations=%" PetscInt_FMT "\n", s… in SNESSolve_VINEWTONSSLS()
299 PetscCall(VecCopy(Y, snes->vec_sol_update)); in SNESSolve_VINEWTONSSLS()
302 PetscCall(SNESLineSearchApply(snes->linesearch, X, vi->phi, &gnorm, Y)); in SNESSolve_VINEWTONSSLS()
303 PetscCall(SNESLineSearchGetReason(snes->linesearch, &lssucceed)); in SNESSolve_VINEWTONSSLS()
304 PetscCall(SNESLineSearchGetNorms(snes->linesearch, &xnorm, &gnorm, &ynorm)); in SNESSolve_VINEWTONSSLS()
305 …PetscCall(PetscInfo(snes, "fnorm=%18.16e, gnorm=%18.16e, ynorm=%18.16e, lssucceed=%d\n", (double)v… in SNESSolve_VINEWTONSSLS()
306 if (snes->reason == SNES_DIVERGED_FUNCTION_COUNT) break; in SNESSolve_VINEWTONSSLS()
307 if (snes->functiondomainerror) { in SNESSolve_VINEWTONSSLS()
308 snes->reason = SNES_DIVERGED_FUNCTION_DOMAIN; in SNESSolve_VINEWTONSSLS()
309 snes->functiondomainerror = PETSC_FALSE; in SNESSolve_VINEWTONSSLS()
314 if (++snes->numFailures >= snes->maxFailures) { in SNESSolve_VINEWTONSSLS()
316 snes->reason = SNES_DIVERGED_LINE_SEARCH; in SNESSolve_VINEWTONSSLS()
317 PetscCall(SNESVICheckLocalMin_Private(snes, snes->jacobian, vi->phi, X, gnorm, &ismin)); in SNESSolve_VINEWTONSSLS()
318 if (ismin) snes->reason = SNES_DIVERGED_LOCAL_MIN; in SNESSolve_VINEWTONSSLS()
326 PetscCall(PetscObjectSAWsTakeAccess((PetscObject)snes)); in SNESSolve_VINEWTONSSLS()
327 snes->iter = i + 1; in SNESSolve_VINEWTONSSLS()
328 snes->norm = vi->phinorm; in SNESSolve_VINEWTONSSLS()
329 snes->xnorm = xnorm; in SNESSolve_VINEWTONSSLS()
330 snes->ynorm = ynorm; in SNESSolve_VINEWTONSSLS()
331 PetscCall(PetscObjectSAWsGrantAccess((PetscObject)snes)); in SNESSolve_VINEWTONSSLS()
332 PetscCall(SNESLogConvergenceHistory(snes, snes->norm, lits)); in SNESSolve_VINEWTONSSLS()
334 if (snes->ops->converged != SNESConvergedSkip) PetscCall(VecNorm(X, NORM_2, &xnorm)); in SNESSolve_VINEWTONSSLS()
335 PetscCall(SNESConverged(snes, snes->iter, xnorm, ynorm, vi->phinorm)); in SNESSolve_VINEWTONSSLS()
336 PetscCall(SNESMonitor(snes, snes->iter, snes->norm)); in SNESSolve_VINEWTONSSLS()
337 if (snes->reason) break; in SNESSolve_VINEWTONSSLS()
343 static PetscErrorCode SNESSetUp_VINEWTONSSLS(SNES snes) in SNESSetUp_VINEWTONSSLS() argument
345 SNES_VINEWTONSSLS *vi = (SNES_VINEWTONSSLS *)snes->data; in SNESSetUp_VINEWTONSSLS()
348 PetscCall(SNESSetUp_VI(snes)); in SNESSetUp_VINEWTONSSLS()
349 PetscCall(VecDuplicate(snes->work[0], &vi->dpsi)); in SNESSetUp_VINEWTONSSLS()
350 PetscCall(VecDuplicate(snes->work[0], &vi->phi)); in SNESSetUp_VINEWTONSSLS()
351 PetscCall(VecDuplicate(snes->work[0], &vi->Da)); in SNESSetUp_VINEWTONSSLS()
352 PetscCall(VecDuplicate(snes->work[0], &vi->Db)); in SNESSetUp_VINEWTONSSLS()
353 PetscCall(VecDuplicate(snes->work[0], &vi->z)); in SNESSetUp_VINEWTONSSLS()
354 PetscCall(VecDuplicate(snes->work[0], &vi->t)); in SNESSetUp_VINEWTONSSLS()
358 static PetscErrorCode SNESReset_VINEWTONSSLS(SNES snes) in SNESReset_VINEWTONSSLS() argument
360 SNES_VINEWTONSSLS *vi = (SNES_VINEWTONSSLS *)snes->data; in SNESReset_VINEWTONSSLS()
363 PetscCall(SNESReset_VI(snes)); in SNESReset_VINEWTONSSLS()
373 static PetscErrorCode SNESSetFromOptions_VINEWTONSSLS(SNES snes, PetscOptionItems PetscOptionsObjec… in SNESSetFromOptions_VINEWTONSSLS() argument
376 PetscCall(SNESSetFromOptions_VI(snes, PetscOptionsObject)); in SNESSetFromOptions_VINEWTONSSLS()
400 PETSC_EXTERN PetscErrorCode SNESCreate_VINEWTONSSLS(SNES snes) in SNESCreate_VINEWTONSSLS() argument
406 snes->ops->reset = SNESReset_VINEWTONSSLS; in SNESCreate_VINEWTONSSLS()
407 snes->ops->setup = SNESSetUp_VINEWTONSSLS; in SNESCreate_VINEWTONSSLS()
408 snes->ops->solve = SNESSolve_VINEWTONSSLS; in SNESCreate_VINEWTONSSLS()
409 snes->ops->destroy = SNESDestroy_VI; in SNESCreate_VINEWTONSSLS()
410 snes->ops->setfromoptions = SNESSetFromOptions_VINEWTONSSLS; in SNESCreate_VINEWTONSSLS()
411 snes->ops->view = NULL; in SNESCreate_VINEWTONSSLS()
413 snes->usesksp = PETSC_TRUE; in SNESCreate_VINEWTONSSLS()
414 snes->usesnpc = PETSC_FALSE; in SNESCreate_VINEWTONSSLS()
416 PetscCall(SNESGetLineSearch(snes, &linesearch)); in SNESCreate_VINEWTONSSLS()
422 snes->alwayscomputesfinalresidual = PETSC_FALSE; in SNESCreate_VINEWTONSSLS()
424 PetscCall(SNESParametersInitialize(snes)); in SNESCreate_VINEWTONSSLS()
427 snes->data = (void *)vi; in SNESCreate_VINEWTONSSLS()
429 …PetscCall(PetscObjectComposeFunction((PetscObject)snes, "SNESVISetVariableBounds_C", SNESVISetVari… in SNESCreate_VINEWTONSSLS()
430 …PetscCall(PetscObjectComposeFunction((PetscObject)snes, "SNESVISetComputeVariableBounds_C", SNESVI… in SNESCreate_VINEWTONSSLS()