On Sat, Apr 26, 2025 at 8:27 AM Derek Teaney via petsc-users < petsc-users@mcs.anl.gov> wrote:
> 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 > The above two pieces of code are both wrong, in my view. > > 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 > This is also wrong. I think the rule here is: GetArray() puts the vector in an interim state. One shall not call any vector routines (ex. LocalToGlobal/GlobalToLocal) before RestoreArray(). You can only operate on the array instead. > 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 > ------------------------------------------------------------------------ > >