Lines Matching refs:snes
19 PetscErrorCode SNESVIGetInactiveSet(SNES snes, IS *inact) in SNESVIGetInactiveSet() argument
21 SNES_VINEWTONRSLS *vi = (SNES_VINEWTONRSLS *)snes->data; in SNESVIGetInactiveSet()
249 static PetscErrorCode SNESCreateSubVectors_VINEWTONRSLS(SNES snes, PetscInt n, Vec *newv) in SNESCreateSubVectors_VINEWTONRSLS() argument
254 PetscCall(VecCreate(PetscObjectComm((PetscObject)snes), &v)); in SNESCreateSubVectors_VINEWTONRSLS()
262 static PetscErrorCode SNESVIResetPCandKSP(SNES snes, Mat Amat, Mat Pmat) in SNESVIResetPCandKSP() argument
267 PetscCall(SNESGetKSP(snes, &snesksp)); in SNESVIResetPCandKSP()
296 static PetscErrorCode SNESSolve_VINEWTONRSLS(SNES snes) in SNESSolve_VINEWTONRSLS() argument
298 SNES_VINEWTONRSLS *vi = (SNES_VINEWTONRSLS *)snes->data; in SNESSolve_VINEWTONRSLS()
309 PetscCall(SNESGetKSP(snes, &ksp)); in SNESSolve_VINEWTONRSLS()
313 snes->numFailures = 0; in SNESSolve_VINEWTONRSLS()
314 snes->numLinearSolveFailures = 0; in SNESSolve_VINEWTONRSLS()
315 snes->reason = SNES_CONVERGED_ITERATING; in SNESSolve_VINEWTONRSLS()
317 maxits = snes->max_its; /* maximum number of iterations */ in SNESSolve_VINEWTONRSLS()
318 X = snes->vec_sol; /* solution vector */ in SNESSolve_VINEWTONRSLS()
319 F = snes->vec_func; /* residual vector */ in SNESSolve_VINEWTONRSLS()
320 Y = snes->work[0]; /* work vectors */ in SNESSolve_VINEWTONRSLS()
322 …PetscCall(SNESLineSearchSetVIFunctions(snes->linesearch, SNESVIProjectOntoBounds, SNESVIComputeIna… in SNESSolve_VINEWTONRSLS()
323 PetscCall(SNESLineSearchSetVecs(snes->linesearch, X, NULL, NULL, NULL, NULL)); in SNESSolve_VINEWTONRSLS()
324 PetscCall(SNESLineSearchSetUp(snes->linesearch)); in SNESSolve_VINEWTONRSLS()
326 PetscCall(PetscObjectSAWsTakeAccess((PetscObject)snes)); in SNESSolve_VINEWTONRSLS()
327 snes->iter = 0; in SNESSolve_VINEWTONRSLS()
328 snes->norm = 0.0; in SNESSolve_VINEWTONRSLS()
329 PetscCall(PetscObjectSAWsGrantAccess((PetscObject)snes)); in SNESSolve_VINEWTONRSLS()
331 PetscCall(SNESVIProjectOntoBounds(snes, X)); in SNESSolve_VINEWTONRSLS()
332 PetscCall(SNESComputeFunction(snes, X, F)); in SNESSolve_VINEWTONRSLS()
333 PetscCall(SNESVIComputeInactiveSetFnorm(snes, F, X, &fnorm)); in SNESSolve_VINEWTONRSLS()
335 SNESCheckFunctionDomainError(snes, fnorm); in SNESSolve_VINEWTONRSLS()
336 PetscCall(PetscObjectSAWsTakeAccess((PetscObject)snes)); in SNESSolve_VINEWTONRSLS()
337 snes->norm = fnorm; in SNESSolve_VINEWTONRSLS()
338 PetscCall(PetscObjectSAWsGrantAccess((PetscObject)snes)); in SNESSolve_VINEWTONRSLS()
339 PetscCall(SNESLogConvergenceHistory(snes, fnorm, 0)); in SNESSolve_VINEWTONRSLS()
342 PetscCall(SNESConverged(snes, 0, 0.0, 0.0, fnorm)); in SNESSolve_VINEWTONRSLS()
343 PetscCall(SNESMonitor(snes, 0, fnorm)); in SNESSolve_VINEWTONRSLS()
344 if (snes->reason) PetscFunctionReturn(PETSC_SUCCESS); in SNESSolve_VINEWTONRSLS()
356 PetscTryTypeMethod(snes, update, snes->iter); in SNESSolve_VINEWTONRSLS()
357 PetscCall(SNESComputeJacobian(snes, X, snes->jacobian, snes->jacobian_pre)); in SNESSolve_VINEWTONRSLS()
358 SNESCheckJacobianDomainError(snes); in SNESSolve_VINEWTONRSLS()
365 PetscCall(SNESVIGetActiveSetIS(snes, X, F, &IS_act)); in SNESSolve_VINEWTONRSLS()
368 PetscCall((*vi->checkredundancy)(snes, IS_act, &IS_redact, vi->ctxP)); in SNESSolve_VINEWTONRSLS()
381 …PetscCall(MatCreateSubMatrix(snes->jacobian, vi->IS_inact, vi->IS_inact, MAT_INITIAL_MATRIX, &jac_… in SNESSolve_VINEWTONRSLS()
405 …PetscCall(ISCreateGeneral(PetscObjectComm((PetscObject)snes), cnt, nrows, PETSC_OWN_POINTER, &vi->… in SNESSolve_VINEWTONRSLS()
407 …PetscCall(MatCreateSubMatrix(snes->jacobian, vi->IS_inact, vi->IS_inact, MAT_INITIAL_MATRIX, &jac_… in SNESSolve_VINEWTONRSLS()
410 PetscCall(DMSetVI(snes->dm, vi->IS_inact)); in SNESSolve_VINEWTONRSLS()
426 PetscCall(SNESCreateSubVectors_VINEWTONRSLS(snes, nis_inact, &F_inact)); in SNESSolve_VINEWTONRSLS()
427 PetscCall(SNESCreateSubVectors_VINEWTONRSLS(snes, nis_act, &Y_act)); in SNESSolve_VINEWTONRSLS()
428 PetscCall(SNESCreateSubVectors_VINEWTONRSLS(snes, nis_inact, &Y_inact)); in SNESSolve_VINEWTONRSLS()
446 …if (snes->jacobian != snes->jacobian_pre) PetscCall(MatCreateSubMatrix(snes->jacobian_pre, vi->IS_… in SNESSolve_VINEWTONRSLS()
451 PetscCall(SNESVIResetPCandKSP(snes, jac_inact_inact, prejac_inact_inact)); in SNESSolve_VINEWTONRSLS()
459 PetscCall(KSPSetOperators(snes->ksp, jac_inact_inact, prejac_inact_inact)); in SNESSolve_VINEWTONRSLS()
460 PetscCall(KSPSetUp(snes->ksp)); in SNESSolve_VINEWTONRSLS()
464 PetscCall(KSPGetPC(snes->ksp, &pc)); in SNESSolve_VINEWTONRSLS()
490 PetscCall(KSPSolve(snes->ksp, F_inact, Y_inact)); in SNESSolve_VINEWTONRSLS()
508 if (snes->jacobian != snes->jacobian_pre) PetscCall(MatDestroy(&prejac_inact_inact)); in SNESSolve_VINEWTONRSLS()
510 PetscCall(KSPGetConvergedReason(snes->ksp, &kspreason)); in SNESSolve_VINEWTONRSLS()
512 if (++snes->numLinearSolveFailures >= snes->maxLinearSolveFailures) { in SNESSolve_VINEWTONRSLS()
513 …o(snes, "iter=%" PetscInt_FMT ", number linear solve failures %" PetscInt_FMT " greater than curre… in SNESSolve_VINEWTONRSLS()
514 snes->reason = SNES_DIVERGED_LINEAR_SOLVE; in SNESSolve_VINEWTONRSLS()
519 PetscCall(KSPGetIterationNumber(snes->ksp, &lits)); in SNESSolve_VINEWTONRSLS()
520 snes->linear_its += lits; in SNESSolve_VINEWTONRSLS()
521 …PetscCall(PetscInfo(snes, "iter=%" PetscInt_FMT ", linear solve iterations=%" PetscInt_FMT "\n", s… in SNESSolve_VINEWTONRSLS()
534 PetscCall(VecCopy(Y, snes->vec_sol_update)); in SNESSolve_VINEWTONRSLS()
537 PetscCall(SNESLineSearchApply(snes->linesearch, X, F, &gnorm, Y)); in SNESSolve_VINEWTONRSLS()
538 PetscCall(DMDestroyVI(snes->dm)); in SNESSolve_VINEWTONRSLS()
539 if (snes->reason) break; in SNESSolve_VINEWTONRSLS()
540 PetscCall(SNESLineSearchGetReason(snes->linesearch, &lsreason)); in SNESSolve_VINEWTONRSLS()
542 if (snes->stol * xnorm > ynorm) { in SNESSolve_VINEWTONRSLS()
543 snes->reason = SNES_CONVERGED_SNORM_RELATIVE; in SNESSolve_VINEWTONRSLS()
546 snes->reason = SNES_DIVERGED_FUNCTION_DOMAIN; in SNESSolve_VINEWTONRSLS()
549 snes->reason = SNES_DIVERGED_FUNCTION_NANORINF; in SNESSolve_VINEWTONRSLS()
552 snes->reason = SNES_DIVERGED_OBJECTIVE_DOMAIN; in SNESSolve_VINEWTONRSLS()
555 snes->reason = SNES_DIVERGED_JACOBIAN_DOMAIN; in SNESSolve_VINEWTONRSLS()
557 } else if (++snes->numFailures >= snes->maxFailures) { in SNESSolve_VINEWTONRSLS()
560 snes->reason = SNES_DIVERGED_LINE_SEARCH; in SNESSolve_VINEWTONRSLS()
561 PetscCall(SNESVICheckLocalMin_Private(snes, snes->jacobian, F, X, gnorm, &ismin)); in SNESSolve_VINEWTONRSLS()
562 if (ismin) snes->reason = SNES_DIVERGED_LOCAL_MIN; in SNESSolve_VINEWTONRSLS()
566 PetscCall(SNESLineSearchGetNorms(snes->linesearch, &xnorm, &gnorm, &ynorm)); in SNESSolve_VINEWTONRSLS()
567 …PetscCall(PetscInfo(snes, "fnorm=%18.16e, gnorm=%18.16e, ynorm=%18.16e, lssucceed=%d\n", (double)f… in SNESSolve_VINEWTONRSLS()
571 PetscCall(PetscObjectSAWsTakeAccess((PetscObject)snes)); in SNESSolve_VINEWTONRSLS()
572 snes->iter = i + 1; in SNESSolve_VINEWTONRSLS()
573 snes->norm = fnorm; in SNESSolve_VINEWTONRSLS()
574 snes->xnorm = xnorm; in SNESSolve_VINEWTONRSLS()
575 snes->ynorm = ynorm; in SNESSolve_VINEWTONRSLS()
576 PetscCall(PetscObjectSAWsGrantAccess((PetscObject)snes)); in SNESSolve_VINEWTONRSLS()
577 PetscCall(SNESLogConvergenceHistory(snes, snes->norm, lits)); in SNESSolve_VINEWTONRSLS()
579 if (snes->ops->converged != SNESConvergedSkip) PetscCall(VecNorm(X, NORM_2, &xnorm)); in SNESSolve_VINEWTONRSLS()
580 PetscCall(SNESConverged(snes, snes->iter, xnorm, ynorm, fnorm)); in SNESSolve_VINEWTONRSLS()
581 PetscCall(SNESMonitor(snes, snes->iter, snes->norm)); in SNESSolve_VINEWTONRSLS()
582 if (snes->reason) break; in SNESSolve_VINEWTONRSLS()
585 PetscCall(DMDestroyVI(snes->dm)); in SNESSolve_VINEWTONRSLS()
607 PetscErrorCode SNESVISetRedundancyCheck(SNES snes, PetscErrorCode (*func)(SNES, IS, IS *, void *), … in SNESVISetRedundancyCheck() argument
609 SNES_VINEWTONRSLS *vi = (SNES_VINEWTONRSLS *)snes->data; in SNESVISetRedundancyCheck()
612 PetscValidHeaderSpecific(snes, SNES_CLASSID, 1); in SNESVISetRedundancyCheck()
626 PetscErrorCode SNESVIRedundancyCheck_Matlab(SNES snes, IS is_act, IS *is_redact, PetscCtx ctx) in SNESVIRedundancyCheck_Matlab() argument
635 PetscValidHeaderSpecific(snes, SNES_CLASSID, 1); in SNESVIRedundancyCheck_Matlab()
638 PetscCheckSameComm(snes, 1, is_act, 2); in SNESVIRedundancyCheck_Matlab()
642 …PetscCall(ISCreateGeneral(PetscObjectComm((PetscObject)snes), 0, indices, PETSC_OWN_POINTER, is_re… in SNESVIRedundancyCheck_Matlab()
644 PetscCall(PetscArraycpy(&ls, &snes, 1)); in SNESVIRedundancyCheck_Matlab()
662 PetscErrorCode SNESVISetRedundancyCheckMatlab(SNES snes, const char *func, mxArray *ctx) in SNESVISetRedundancyCheckMatlab() argument
671 PetscCall(SNESVISetRedundancyCheck(snes, SNESVIRedundancyCheck_Matlab, sctx)); in SNESVISetRedundancyCheckMatlab()
677 static PetscErrorCode SNESSetUp_VINEWTONRSLS(SNES snes) in SNESSetUp_VINEWTONRSLS() argument
679 SNES_VINEWTONRSLS *vi = (SNES_VINEWTONRSLS *)snes->data; in SNESSetUp_VINEWTONRSLS()
685 PetscCall(SNESSetUp_VI(snes)); in SNESSetUp_VINEWTONRSLS()
690 PetscCall(VecGetOwnershipRange(snes->work[0], &rstart, &rend)); in SNESSetUp_VINEWTONRSLS()
691 PetscCall(VecGetLocalSize(snes->work[0], &n)); in SNESSetUp_VINEWTONRSLS()
694 …PetscCall(ISCreateGeneral(PetscObjectComm((PetscObject)snes), n, indices, PETSC_OWN_POINTER, &vi->… in SNESSetUp_VINEWTONRSLS()
697 if (!snes->linesearch) { in SNESSetUp_VINEWTONRSLS()
698 PetscCall(SNESGetLineSearch(snes, &linesearch)); in SNESSetUp_VINEWTONRSLS()
704 static PetscErrorCode SNESReset_VINEWTONRSLS(SNES snes) in SNESReset_VINEWTONRSLS() argument
706 SNES_VINEWTONRSLS *vi = (SNES_VINEWTONRSLS *)snes->data; in SNESReset_VINEWTONRSLS()
709 PetscCall(SNESReset_VI(snes)); in SNESReset_VINEWTONRSLS()
733 PETSC_EXTERN PetscErrorCode SNESCreate_VINEWTONRSLS(SNES snes) in SNESCreate_VINEWTONRSLS() argument
739 snes->ops->reset = SNESReset_VINEWTONRSLS; in SNESCreate_VINEWTONRSLS()
740 snes->ops->setup = SNESSetUp_VINEWTONRSLS; in SNESCreate_VINEWTONRSLS()
741 snes->ops->solve = SNESSolve_VINEWTONRSLS; in SNESCreate_VINEWTONRSLS()
742 snes->ops->destroy = SNESDestroy_VI; in SNESCreate_VINEWTONRSLS()
743 snes->ops->setfromoptions = SNESSetFromOptions_VI; in SNESCreate_VINEWTONRSLS()
744 snes->ops->view = NULL; in SNESCreate_VINEWTONRSLS()
745 snes->ops->converged = SNESConvergedDefault_VI; in SNESCreate_VINEWTONRSLS()
747 snes->usesksp = PETSC_TRUE; in SNESCreate_VINEWTONRSLS()
748 snes->usesnpc = PETSC_FALSE; in SNESCreate_VINEWTONRSLS()
750 PetscCall(SNESGetLineSearch(snes, &linesearch)); in SNESCreate_VINEWTONRSLS()
754 snes->alwayscomputesfinalresidual = PETSC_TRUE; in SNESCreate_VINEWTONRSLS()
756 PetscCall(SNESParametersInitialize(snes)); in SNESCreate_VINEWTONRSLS()
759 snes->data = (void *)vi; in SNESCreate_VINEWTONRSLS()
762 …PetscCall(PetscObjectComposeFunction((PetscObject)snes, "SNESVISetVariableBounds_C", SNESVISetVari… in SNESCreate_VINEWTONRSLS()
763 …PetscCall(PetscObjectComposeFunction((PetscObject)snes, "SNESVISetComputeVariableBounds_C", SNESVI… in SNESCreate_VINEWTONRSLS()