Lines Matching refs:snes

32 PetscErrorCode SNESVISetComputeVariableBounds(SNES snes, PetscErrorCode (*compute)(SNES snes, Vec l…  in SNESVISetComputeVariableBounds()  argument
37 PetscValidHeaderSpecific(snes, SNES_CLASSID, 1); in SNESVISetComputeVariableBounds()
38 PetscCall(PetscObjectQueryFunction((PetscObject)snes, "SNESVISetComputeVariableBounds_C", &f)); in SNESVISetComputeVariableBounds()
39 …if (f) PetscUseMethod(snes, "SNESVISetComputeVariableBounds_C", (SNES, PetscErrorCode (*)(SNES, Ve… in SNESVISetComputeVariableBounds()
40 else PetscCall(SNESVISetComputeVariableBounds_VI(snes, compute)); in SNESVISetComputeVariableBounds()
44 PetscErrorCode SNESVISetComputeVariableBounds_VI(SNES snes, SNESVIComputeVariableBoundsFn *compute) in SNESVISetComputeVariableBounds_VI() argument
47 snes->ops->computevariablebounds = compute; in SNESVISetComputeVariableBounds_VI()
51 static PetscErrorCode SNESVIMonitorResidual(SNES snes, PetscInt its, PetscReal fgnorm, PetscViewerA… in SNESVIMonitorResidual() argument
58 PetscCall(SNESGetFunction(snes, &F, NULL, NULL)); in SNESVIMonitorResidual()
59 PetscCall(SNESGetSolution(snes, &X)); in SNESVIMonitorResidual()
60 PetscCall(SNESVIGetActiveSetIS(snes, X, F, &isactive)); in SNESVIMonitorResidual()
62 PetscCall(PetscObjectCompose((PetscObject)Finactive, "__Vec_bc_zero__", (PetscObject)snes)); in SNESVIMonitorResidual()
74 static PetscErrorCode SNESVIMonitorActive(SNES snes, PetscInt its, PetscReal fgnorm, PetscViewerAnd… in SNESVIMonitorActive() argument
81 PetscCall(SNESGetFunction(snes, &F, NULL, NULL)); in SNESVIMonitorActive()
82 PetscCall(SNESGetSolution(snes, &X)); in SNESVIMonitorActive()
83 PetscCall(SNESVIGetActiveSetIS(snes, X, F, &isactive)); in SNESVIMonitorActive()
85 PetscCall(PetscObjectCompose((PetscObject)A, "__Vec_bc_zero__", (PetscObject)snes)); in SNESVIMonitorActive()
97 static PetscErrorCode SNESMonitorVI(SNES snes, PetscInt its, PetscReal fgnorm, void *dummy) in SNESMonitorVI() argument
104 PetscReal rnorm, fnorm, zerotolerance = snes->vizerotolerance; in SNESMonitorVI()
109 PetscCall(VecGetLocalSize(snes->vec_sol, &n)); in SNESMonitorVI()
110 PetscCall(VecGetSize(snes->vec_sol, &N)); in SNESMonitorVI()
111 PetscCall(VecGetArrayRead(snes->xl, &xl)); in SNESMonitorVI()
112 PetscCall(VecGetArrayRead(snes->xu, &xu)); in SNESMonitorVI()
113 PetscCall(VecGetArrayRead(snes->vec_sol, &x)); in SNESMonitorVI()
114 PetscCall(VecGetArrayRead(snes->vec_func, &f)); in SNESMonitorVI()
121 else SETERRQ(PetscObjectComm((PetscObject)snes), PETSC_ERR_PLIB, "Can never get here"); in SNESMonitorVI()
128 PetscCall(VecRestoreArrayRead(snes->vec_func, &f)); in SNESMonitorVI()
129 PetscCall(VecRestoreArrayRead(snes->xl, &xl)); in SNESMonitorVI()
130 PetscCall(VecRestoreArrayRead(snes->xu, &xu)); in SNESMonitorVI()
131 PetscCall(VecRestoreArrayRead(snes->vec_sol, &x)); in SNESMonitorVI()
132 …allMPI(MPIU_Allreduce(&rnorm, &fnorm, 1, MPIU_REAL, MPIU_SUM, PetscObjectComm((PetscObject)snes))); in SNESMonitorVI()
133 PetscCallMPI(MPIU_Allreduce(act, fact, 2, MPIU_INT, MPI_SUM, PetscObjectComm((PetscObject)snes))); in SNESMonitorVI()
134 …I(MPIU_Allreduce(act_bound, fact_bound, 2, MPIU_INT, MPI_SUM, PetscObjectComm((PetscObject)snes))); in SNESMonitorVI()
137 PetscCall(PetscViewerASCIIAddTab(viewer, ((PetscObject)snes)->tablevel)); in SNESMonitorVI()
138 if (snes->ntruebounds) tmp = ((double)(fact[0] + fact[1])) / ((double)snes->ntruebounds); in SNESMonitorVI()
142 PetscCall(PetscViewerASCIISubtractTab(viewer, ((PetscObject)snes)->tablevel)); in SNESMonitorVI()
152 PetscErrorCode SNESVICheckLocalMin_Private(SNES snes, Mat A, Vec F, Vec W, PetscReal fnorm, PetscBo… in SNESVICheckLocalMin_Private() argument
164 …PetscCall(PetscInfo(snes, "|| J^T F|| %g near zero implies found a local minimum\n", (double)(a1 /… in SNESVICheckLocalMin_Private()
178 …PetscCall(PetscInfo(snes, "(F^T J random)/(|| F ||*||random|| %g near zero implies found a local m… in SNESVICheckLocalMin_Private()
192 PetscErrorCode SNESConvergedDefault_VI(SNES snes, PetscInt it, PetscReal xnorm, PetscReal gradnorm,… in SNESConvergedDefault_VI() argument
195 PetscValidHeaderSpecific(snes, SNES_CLASSID, 1); in SNESConvergedDefault_VI()
202 snes->ttol = fnorm * snes->rtol; in SNESConvergedDefault_VI()
205 PetscCall(PetscInfo(snes, "Failed to converged, function norm is NaN\n")); in SNESConvergedDefault_VI()
207 } else if (fnorm < snes->abstol && (it || !snes->forceiteration)) { in SNESConvergedDefault_VI()
208 …PetscCall(PetscInfo(snes, "Converged due to function norm %g < %g\n", (double)fnorm, (double)snes-… in SNESConvergedDefault_VI()
210 } else if (snes->nfuncs >= snes->max_funcs && snes->max_funcs >= 0) { in SNESConvergedDefault_VI()
211 …tscCall(PetscInfo(snes, "Exceeded maximum number of function evaluations: %" PetscInt_FMT " > %" P… in SNESConvergedDefault_VI()
216 if (fnorm < snes->ttol) { in SNESConvergedDefault_VI()
217 …PetscCall(PetscInfo(snes, "Converged due to function norm %g < %g (relative tolerance)\n", (double… in SNESConvergedDefault_VI()
235 PetscErrorCode SNESVIProjectOntoBounds(SNES snes, Vec X) in SNESVIProjectOntoBounds() argument
244 PetscCall(VecGetArrayRead(snes->xl, &xl)); in SNESVIProjectOntoBounds()
245 PetscCall(VecGetArrayRead(snes->xu, &xu)); in SNESVIProjectOntoBounds()
252 PetscCall(VecRestoreArrayRead(snes->xl, &xl)); in SNESVIProjectOntoBounds()
253 PetscCall(VecRestoreArrayRead(snes->xu, &xu)); in SNESVIProjectOntoBounds()
272 PetscErrorCode SNESVIGetActiveSetIS(SNES snes, Vec X, Vec F, IS *ISact) in SNESVIGetActiveSetIS() argument
274 Vec Xl = snes->xl, Xu = snes->xu; in SNESVIGetActiveSetIS()
277 PetscReal zerotolerance = snes->vizerotolerance; in SNESVIGetActiveSetIS()
299 …PetscCall(ISCreateGeneral(PetscObjectComm((PetscObject)snes), nloc_isact, idx_act, PETSC_OWN_POINT… in SNESVIGetActiveSetIS()
323 PetscErrorCode SNESVIComputeInactiveSetFnorm(SNES snes, Vec F, Vec X, PetscReal *fnorm) in SNESVIComputeInactiveSetFnorm() argument
327 PetscReal zerotolerance = snes->vizerotolerance; in SNESVIComputeInactiveSetFnorm()
330 PetscValidHeaderSpecific(snes, SNES_CLASSID, 1); in SNESVIComputeInactiveSetFnorm()
333 PetscCall(VecGetArrayRead(snes->xl, &xl)); in SNESVIComputeInactiveSetFnorm()
334 PetscCall(VecGetArrayRead(snes->xu, &xu)); in SNESVIComputeInactiveSetFnorm()
342 PetscCall(VecRestoreArrayRead(snes->xl, &xl)); in SNESVIComputeInactiveSetFnorm()
343 PetscCall(VecRestoreArrayRead(snes->xu, &xu)); in SNESVIComputeInactiveSetFnorm()
345 …I(MPIU_Allreduce(MPI_IN_PLACE, fnorm, 1, MPIU_REAL, MPIU_SUM, PetscObjectComm((PetscObject)snes))); in SNESVIComputeInactiveSetFnorm()
367 PetscErrorCode SNESVIComputeInactiveSetFtY(SNES snes, Vec F, Vec X, Vec Y, PetscScalar *fty) in SNESVIComputeInactiveSetFtY() argument
371 PetscReal zerotolerance = snes->vizerotolerance; in SNESVIComputeInactiveSetFtY()
374 PetscValidHeaderSpecific(snes, SNES_CLASSID, 1); in SNESVIComputeInactiveSetFtY()
379 PetscCall(VecGetArrayRead(snes->xl, &xl)); in SNESVIComputeInactiveSetFtY()
380 PetscCall(VecGetArrayRead(snes->xu, &xu)); in SNESVIComputeInactiveSetFtY()
388 PetscCall(VecRestoreArrayRead(snes->xl, &xl)); in SNESVIComputeInactiveSetFtY()
389 PetscCall(VecRestoreArrayRead(snes->xu, &xu)); in SNESVIComputeInactiveSetFtY()
391 …I(MPIU_Allreduce(MPI_IN_PLACE, fty, 1, MPIU_SCALAR, MPIU_SUM, PetscObjectComm((PetscObject)snes))); in SNESVIComputeInactiveSetFtY()
395 static PetscErrorCode SNESVIDMComputeVariableBounds(SNES snes, Vec xl, Vec xu) in SNESVIDMComputeVariableBounds() argument
398 PetscCall(DMComputeVariableBounds(snes->dm, xl, xu)); in SNESVIDMComputeVariableBounds()
416 PetscErrorCode SNESSetUp_VI(SNES snes) in SNESSetUp_VI() argument
421 PetscCall(SNESSetWorkVecs(snes, 1)); in SNESSetUp_VI()
422 PetscCall(SNESSetUpMatrices(snes)); in SNESSetUp_VI()
424 if (!snes->ops->computevariablebounds && snes->dm) { in SNESSetUp_VI()
426 PetscCall(DMHasVariableBounds(snes->dm, &flag)); in SNESSetUp_VI()
427 if (flag) snes->ops->computevariablebounds = SNESVIDMComputeVariableBounds; in SNESSetUp_VI()
429 if (!snes->usersetbounds) { in SNESSetUp_VI()
430 if (snes->ops->computevariablebounds) { in SNESSetUp_VI()
431 if (!snes->xl) PetscCall(VecDuplicate(snes->work[0], &snes->xl)); in SNESSetUp_VI()
432 if (!snes->xu) PetscCall(VecDuplicate(snes->work[0], &snes->xu)); in SNESSetUp_VI()
433 PetscUseTypeMethod(snes, computevariablebounds, snes->xl, snes->xu); in SNESSetUp_VI()
434 } else if (!snes->xl && !snes->xu) { in SNESSetUp_VI()
436 PetscCall(VecDuplicate(snes->work[0], &snes->xl)); in SNESSetUp_VI()
437 PetscCall(VecSet(snes->xl, PETSC_NINFINITY)); in SNESSetUp_VI()
438 PetscCall(VecDuplicate(snes->work[0], &snes->xu)); in SNESSetUp_VI()
439 PetscCall(VecSet(snes->xu, PETSC_INFINITY)); in SNESSetUp_VI()
442 PetscCall(VecGetOwnershipRange(snes->work[0], i_start, i_end)); in SNESSetUp_VI()
443 PetscCall(VecGetOwnershipRange(snes->xl, i_start + 1, i_end + 1)); in SNESSetUp_VI()
444 PetscCall(VecGetOwnershipRange(snes->xu, i_start + 2, i_end + 2)); in SNESSetUp_VI()
451 PetscErrorCode SNESReset_VI(SNES snes) in SNESReset_VI() argument
454 PetscCall(VecDestroy(&snes->xl)); in SNESReset_VI()
455 PetscCall(VecDestroy(&snes->xu)); in SNESReset_VI()
456 snes->usersetbounds = PETSC_FALSE; in SNESReset_VI()
469 PetscErrorCode SNESDestroy_VI(SNES snes) in SNESDestroy_VI() argument
472 PetscCall(PetscFree(snes->data)); in SNESDestroy_VI()
475 PetscCall(PetscObjectComposeFunction((PetscObject)snes, "SNESVISetVariableBounds_C", NULL)); in SNESDestroy_VI()
476 …PetscCall(PetscObjectComposeFunction((PetscObject)snes, "SNESVISetComputeVariableBounds_C", NULL)); in SNESDestroy_VI()
504 PetscErrorCode SNESVISetVariableBounds(SNES snes, Vec xl, Vec xu) in SNESVISetVariableBounds() argument
509 PetscValidHeaderSpecific(snes, SNES_CLASSID, 1); in SNESVISetVariableBounds()
512 PetscCall(PetscObjectQueryFunction((PetscObject)snes, "SNESVISetVariableBounds_C", &f)); in SNESVISetVariableBounds()
513 if (f) PetscUseMethod(snes, "SNESVISetVariableBounds_C", (SNES, Vec, Vec), (snes, xl, xu)); in SNESVISetVariableBounds()
514 else PetscCall(SNESVISetVariableBounds_VI(snes, xl, xu)); in SNESVISetVariableBounds()
515 snes->usersetbounds = PETSC_TRUE; in SNESVISetVariableBounds()
519 PetscErrorCode SNESVISetVariableBounds_VI(SNES snes, Vec xl, Vec xu) in SNESVISetVariableBounds_VI() argument
525 PetscCall(SNESGetFunction(snes, &snes->vec_func, NULL, NULL)); in SNESVISetVariableBounds_VI()
526 …PetscCheck(snes->vec_func, PETSC_COMM_SELF, PETSC_ERR_ARG_WRONGSTATE, "Must call SNESSetFunction()… in SNESVISetVariableBounds_VI()
531 PetscCall(VecGetSize(snes->vec_func, &N)); in SNESVISetVariableBounds_VI()
537 PetscCall(VecDestroy(&snes->xl)); in SNESVISetVariableBounds_VI()
538 PetscCall(VecDestroy(&snes->xu)); in SNESVISetVariableBounds_VI()
539 snes->xl = xl; in SNESVISetVariableBounds_VI()
540 snes->xu = xu; in SNESVISetVariableBounds_VI()
546 …PetscCallMPI(MPIU_Allreduce(&cnt, &snes->ntruebounds, 1, MPIU_INT, MPI_SUM, PetscObjectComm((Petsc… in SNESVISetVariableBounds_VI()
568 PetscErrorCode SNESVIGetVariableBounds(SNES snes, Vec *xl, Vec *xu) in SNESVIGetVariableBounds() argument
571 …PetscCheck(snes->usersetbounds, PETSC_COMM_SELF, PETSC_ERR_ARG_WRONGSTATE, "Must set SNESVI bounds… in SNESVIGetVariableBounds()
572 if (xl) *xl = snes->xl; in SNESVIGetVariableBounds()
573 if (xu) *xu = snes->xu; in SNESVIGetVariableBounds()
577 PetscErrorCode SNESSetFromOptions_VI(SNES snes, PetscOptionItems PetscOptionsObject) in SNESSetFromOptions_VI() argument
583 …olerance for considering x[] value to be on a bound", "None", snes->vizerotolerance, &snes->vizero… in SNESSetFromOptions_VI()
585 …if (flg) PetscCall(SNESMonitorSet(snes, SNESMonitorVI, PETSC_VIEWER_STDOUT_(PetscObjectComm((Petsc… in SNESSetFromOptions_VI()
587 …PetscCall(SNESMonitorSetFromOptions(snes, "-snes_vi_monitor_residual", "View residual at each iter… in SNESSetFromOptions_VI()
588 …PetscCall(SNESMonitorSetFromOptions(snes, "-snes_vi_monitor_active", "View active set at each iter… in SNESSetFromOptions_VI()