> On Jul 27, 2016, at 4:42 PM, Xiangdong <[email protected]> wrote:
> 
> Hello everyone,
> 
> I have a global dmda vector vg. On each processor, if I want to know the norm 
> of local portion of vg, which function should I call?
> 
> So far I am thinking of using DMDAVecGetArray and then write a loop to 
> compute the norm of this local array. 
> 
> Is there a simple function available to call? like 
> *vg->ops->norm_local(vg,NORM_2, &normlocal)? 

There isn't a public interface to this call because it really isn't a 
mathematically well defined object; the subdomains in the decomposition of the 
array are arbitrary based on the number of processes used.

   Anyways if you want it and it is the NON-overlapping portion then yes, you 
can write a little routine (basically just cut and paste VecNorm()) call it say 
VecNormLocal() and have it call the function pointer you indicated above. Note 
for the 2 norm the norm_local() returns the square of the norm so you need to 
take the square root.

   If you want the overlapping portion of the vector then you should just do 
the DMDAVecGetArray() as you already do.

   Barry


 
> 
> Thanks.
> 
> Best,
> Xiangdong 
> 

Reply via email to