[MOAB-dev] question about reduce_tags behavior

Tim Tautges tautges at mcs.anl.gov
Fri Mar 30 09:20:09 CDT 2012


[cc'ing to moab-dev in case others are interested...]

I've inserted a few comments below in your code, but in general I think you've got the right idea, and if tag_reduce 
doesn't work it's probably a bug.  If you could isolate the problem in a simple example (with mesh input), I'd be happy 
to look at it.  There is a unit test now for this capability, so it's mostly tested.  If I find a bug from your example, 
I'll fix and add a test for it.

On 03/30/2012 08:28 AM, Lorenzo Alessio Botti wrote:
> Hi Tim,
> first of all sorry to bother you with something that is not fully tested yet.
> I have just installed moab-4.5...
>
> After having created a non unique global id for shared faces which I have stored as an integer in gid_tag,
> I'd like to know if the following
>
> int zero = 0;
> Tag gid_sum_tag;
> result = _instance.tag_get_handle("__global_id_sum", 1, MB_TYPE_INTEGER,
> gid_sum_tag, MB_TAG_DENSE|MB_TAG_CREAT, &zero);
> Range sharedFaces;
> result = _instance.get_entities_by_dimension(0,dim-1,sharedFaces);
> result = pcomm->filter_pstatus(sharedFaces, PSTATUS_SHARED, PSTATUS_AND);

Probably a better way to get shared faces is to use:

  ErrorCode get_shared_entities(int other_proc,
                                   Range &shared_ents,
                                   int dim = -1,
                                   const bool iface = false,
                                   const bool owned_filter = false);

> std::vector<Tag> gid_tag_vec;
> gid_tag_vec.push_back(gid_tag);
> std::vector<Tag> gid_sum_tag_vec;
> gid_sum_tag_vec.push_back(gid_sum_tag);
> pcomm->reduce_tags(gid_tag_vec, gid_sum_tag_vec, MPI_SUM, sharedFaces);

I'll make another variant with two tag handles, so you don't need to create two temporary std::vector's.

- tim

>
> is expected to put the sum of gid_tag values in the sharers in gid_sum_tag.
> My goal is then to subtract gid_tag from gid_sum_tag so that the owner processor gets the global_id that
> I have assigned to the shared face on the not owner processor and vice versa.
> I actually get a MB_FAILURE out of reduce_tags but I'm wondering if the behavior
> I expect is the correct one.
>
> If so I just have to wait... I don't want to put pressure.
> The problem is that with exchange_tags I'm able to get the "ghost" face ids only on the processor that
> doesn't own the face and this is forcing me to write a different kind of assembly code.
>
> The good news is that the agglomerated code is working in serial and parallel, see the attached files.
> In 2d the element edges are sketched white lines, in 3d the visualization of elements faces is a bit tricky...
> The dG p2 solution of the Laplace equation is as good as on a standard grid.
>
> Thanks for help.
> Lorenzo

-- 
================================================================
"You will keep in perfect peace him whose mind is
   steadfast, because he trusts in you."               Isaiah 26:3

              Tim Tautges            Argonne National Laboratory
          (tautges at mcs.anl.gov)      (telecommuting from UW-Madison)
  phone (gvoice): (608) 354-1459      1500 Engineering Dr.
             fax: (608) 263-4499      Madison, WI 53706



More information about the moab-dev mailing list