Thanks Barry -- this solved the issue. "probably will be fine" was fine with 3.17 and maybe 3.19, but definitely not fine with 3.20.
For others the faulty logic is: GetArray(dn_local, &dn) //WRONG Loop over cases VecSet(dn_local, 0.) Fill up dn LocalToGlobal RestoreArray Where as one should do: Loop over cases VecSet(dn_local, 0.) GetArray(dn_local, &dn) // RIGHT Fill up dn LocalToGlobal RestoreArray So, while nothing is copied, if I think of dn as a copy (and not a view) the logic will always be correct. Now I have a related question about "Technically you should not be calling VecSet() with any outstanding arrays but it will probably be fine." What about GlobalToLocal? should I always GetArray for the local array after the GlobalToLocal So, is this also bad logic: GetArray(n_local, &n) Loop over cases: GlobalToLocal(n_global, &n_local) do stuff with n LocalToGlobal(n_local, n_global) RestoreArray as opposed to Loop over cases: GlobalToLocal(n_global, &n_local) GetArray(n_local, &n) do stuff with n LocalToGlobal(n_local, n_global) RestoreArray Thanks again for all your help, Derek On Fri, Apr 25, 2025 at 5:30 PM Barry Smith <bsm...@petsc.dev> wrote: > > Technically you should not be calling VecSet() with any outstanding > arrays but it will probably be fine. > > Even though GetArray() does not copy the array values; both > GetArray/RestoreArray and Set track the current "state" of the vector and > that count might get confused if they are used improperly. > > > > On Apr 25, 2025, at 4:42 PM, Derek Teaney <derek.tea...@stonybrook.edu> > wrote: > > Thanks, I am working on providing a standalone code. A related question > is - if I did have a view of a local vector provided by: > > data_node ***dn_array; > DMDAVecGetArray(domain, dn_local, &dn_array); > > Can I assume through multiple calls to VecSet that the view dn_array is > valid, or should this be restored, between calls. > > Thanks, > > Derek > > On Fri, Apr 25, 2025 at 1:26 PM Barry Smith <bsm...@petsc.dev> wrote: > >> >> You absolutely should not need to do an assembly after a VecSet. >> Please post a full reproducer that demonstrates the problem. >> >> Barry >> >> >> On Apr 25, 2025, at 1:23 PM, Derek Teaney via petsc-users < >> petsc-users@mcs.anl.gov> wrote: >> >> Hi, >> >> I was under the (mistaken) impression that one does not need to due a >> VecAssemblyBegin etc following a VecSet, e.g. >> >> VecSet(dn_local, 0.); >> VecAssemblyBegin(dn_local) ; >> VecAssemblyEnd(dn_local) ; >> >> Seems to give different results without the Assembly. >> >> Thanks for clarifying, >> >> Derek >> >> -- >> ------------------------------------------------------------------------ >> Derek Teaney >> Professor and Graduate Program Director >> Dept. of Physics & Astronomy >> Stony Brook University >> Stony Brook, NY 11794-3800 >> Tel: (631) 632-4489 >> Fax: (631) 632-9718 >> e-mail: derek.tea...@stonybrook.edu >> ------------------------------------------------------------------------ >> >> >> > > -- > ------------------------------------------------------------------------ > Derek Teaney > Professor and Graduate Program Director > Dept. of Physics & Astronomy > Stony Brook University > Stony Brook, NY 11794-3800 > Tel: (631) 632-4489 > Fax: (631) 632-9718 > e-mail: derek.tea...@stonybrook.edu > ------------------------------------------------------------------------ > > > -- ------------------------------------------------------------------------ Derek Teaney Professor and Graduate Program Director Dept. of Physics & Astronomy Stony Brook University Stony Brook, NY 11794-3800 Tel: (631) 632-4489 Fax: (631) 632-9718 e-mail: derek.tea...@stonybrook.edu ------------------------------------------------------------------------