On Tue, Jul 12, 2022 at 8:25 AM Pierre Jolivet <[email protected]> wrote:
> > > On 12 Jul 2022, at 2:50 PM, Matthew Knepley <[email protected]> wrote: > > On Tue, Jul 12, 2022 at 7:41 AM Matthew Knepley <[email protected]> wrote: > >> On Tue, Jul 12, 2022 at 7:39 AM Pierre Jolivet <[email protected]> wrote: >> >>> >>> >>> On 12 Jul 2022, at 2:32 PM, Matthew Knepley <[email protected]> wrote: >>> >>> On Mon, Jul 11, 2022 at 1:17 PM Pierre Jolivet <[email protected]> wrote: >>> >>>> Hello, >>>> Could anyone help me understand what is going on in the following >>>> example, please? >>>> I have a VecNest. >>>> I either: a) initialize all values to 0.0, then set a specific part of >>>> the vector to nonzero or b) initialize a part of the vector to 0.0 and set >>>> the other part to nonzero. >>>> I don’t see why a) and b) produce different results. >>>> >>>> $ ./ex1111 -pc_type fieldsplit -ksp_monitor_true_residual >>>> -ksp_converged_reason -fieldsplit_pc_type jacobi -ksp_pc_side right >>>> -ksp_view_final_residual -nest_subvec true >>>> 0 KSP unpreconditioned resid norm 8.375635517980e-01 true resid norm >>>> 8.375635517980e-01 ||r(i)||/||b|| 1.000000000000e+00 >>>> 1 KSP unpreconditioned resid norm 4.748816884247e-01 true resid norm >>>> 4.748816884247e-01 ||r(i)||/||b|| 5.669798875623e-01 >>>> 2 KSP unpreconditioned resid norm 4.713006778679e-01 true resid norm >>>> 4.713006778679e-01 ||r(i)||/||b|| 5.627043784990e-01 >>>> 3 KSP unpreconditioned resid norm 7.092979927129e-02 true resid norm >>>> 7.092979927129e-02 ||r(i)||/||b|| 8.468587144106e-02 >>>> 4 KSP unpreconditioned resid norm 1.457836310255e-02 true resid norm >>>> 1.457836310255e-02 ||r(i)||/||b|| 1.740567992870e-02 >>>> 5 KSP unpreconditioned resid norm 1.625040500524e-14 true resid norm >>>> 1.633468028779e-14 ||r(i)||/||b|| 1.950261595401e-14 >>>> Linear solve converged due to CONVERGED_RTOL iterations 5 >>>> KSP final norm of residual 1.63347e-14 >>>> $ ./ex1111 -pc_type fieldsplit -ksp_monitor_true_residual >>>> -ksp_converged_reason -fieldsplit_pc_type jacobi -ksp_pc_side right >>>> -ksp_view_final_residual -nest_subvec false >>>> 0 KSP unpreconditioned resid norm 0.000000000000e+00 true resid norm >>>> 8.375635517980e-01 ||r(i)||/||b|| inf >>>> Linear solve converged due to CONVERGED_ATOL iterations 0 >>>> KSP final norm of residual 0.837564 >>>> >>> >>> I find if I assemble the vector, I get the same answers. Will try to >>> figure out what assembly is doing. >>> >>> >>> It’s probably reseting all these values >>> https://petsc.org/main/src/vec/vec/interface/rvector.c.html#line511, >>> which I believe are being used in VecNorm() inside VecNormalize(). >>> I guess any call to VecNestSubVec() should invalidate those as well, >>> otherwise we get wrong cached norms. >>> I will give this a go. >>> >> >> I believe the bug is the following: >> >> You change values in a subvector, which does StateIncrease on the >> subvector, but not StateIncrease on the nest vector, so it has its cached >> norm >> >> I am not sure what to do about this, since how can the parent know you >> pulled out the subvector? Will think. >> > > Okay, the error is more subtle. VecSet() automatically computes some > norms. VecNestGetSubVec() is broken with respect to caching. > I think the right fix now is VecNestGetSubVec/s() should increase the > state no matter what. If we want to get more precise, we need > to have Restore() for the subvecs, which checks the state of the subvector > when it is restored. > > Do you want to change it? > > > https://gitlab.com/petsc/petsc/-/merge_requests/5420 gets the job done, > and is hopefully not too far from what you had in mind. > If anyone is not confortable with the incurred cost (e.g., of recomputing > some norms), please let me know. > This is great. Thanks for finding it. Matt > Thanks, > Pierre > > Thanks, > > Matt > > >> Matt >> >> >>> Thanks, >>> Pierre >>> >>> Thanks, >>> >>> Matt >>> >>> >>>> Thanks, >>>> Pierre >>>> >>>> >>> >>> -- >>> What most experimenters take for granted before they begin their >>> experiments is infinitely more interesting than any results to which their >>> experiments lead. >>> -- Norbert Wiener >>> >>> https://www.cse.buffalo.edu/~knepley/ >>> <http://www.cse.buffalo.edu/~knepley/> >>> >>> >>> >> >> -- >> What most experimenters take for granted before they begin their >> experiments is infinitely more interesting than any results to which their >> experiments lead. >> -- Norbert Wiener >> >> https://www.cse.buffalo.edu/~knepley/ >> <http://www.cse.buffalo.edu/~knepley/> >> > > > -- > What most experimenters take for granted before they begin their > experiments is infinitely more interesting than any results to which their > experiments lead. > -- Norbert Wiener > > https://www.cse.buffalo.edu/~knepley/ > <http://www.cse.buffalo.edu/~knepley/> > > > -- What most experimenters take for granted before they begin their experiments is infinitely more interesting than any results to which their experiments lead. -- Norbert Wiener https://www.cse.buffalo.edu/~knepley/ <http://www.cse.buffalo.edu/~knepley/>
