Yes, that is correct. --Junchao Zhang
On Sat, Apr 26, 2025 at 10:35 AM Derek Teaney <derek.tea...@stonybrook.edu> wrote: > Ok -- got it -- thanks so just do the RestoreArray before the final step, > e.g. > > Loop over cases > VecSet(dn_local, 0.) > GetArray(dn_local, &dn) // RIGHT > Fill up dn > Restore Array > LocalToGlobal > > > On Sat, Apr 26, 2025 at 9:50 AM Junchao Zhang <junchao.zh...@gmail.com> > wrote: > >> 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 >>> ------------------------------------------------------------------------ >>> >>> > > -- > ------------------------------------------------------------------------ > 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 > ------------------------------------------------------------------------ > >