[MOAB-dev] IDs to index?

Nico Schlömer nico.schloemer at gmail.com
Wed Dec 2 11:31:06 CST 2015


> you can use Core::id_from_handle( ) to return 1, 2, 3 in your example

Just what I was looking for.
Am I right assuming that this EntityId is a local (per-process) ID and that
it is 1-based?

Cheers,
Nico

On Wed, Dec 2, 2015 at 6:25 PM Grindeanu, Iulian R. <iulian at mcs.anl.gov>
wrote:

> the EntityHandle is a special MOAB entity, you can think of as a pointer.
> (it is unsigned long on linux)
> first 4 bits are used for type, next  are used for entity id
>
> Range is a std-like container for those entity handles
>
> if you convert to hex, you will see this::
>
> (gdb) p /x 5764607523034234881
> $6 = 0x5000000000000001
>
> it means it is of type 5 (tet), and the first one in the sequence
> you can use Core::id_from_handle( ) to return 1, 2, 3 in your example
>
> You can use "iterate" methods to loop through, some examples are here
>
> http://ftp.mcs.anl.gov/pub/fathom/moab-docs/classmoab_1_1Interface.html#ab1251d0eb25a27ea3e655d2279b3fa01
>
>
> http://ftp.mcs.anl.gov/pub/fathom/moab-docs/DirectAccessNoHoles_8cpp-example.html#a17
>
> http://ftp.mcs.anl.gov/pub/fathom/moab-docs/contents.html#twotwo
>
> in most cases, you will have only one sequence (from 1 to the number of
> entities of that type)
>
> Iulian
>
>
> ------------------------------
> *From:* moab-dev-bounces at mcs.anl.gov [moab-dev-bounces at mcs.anl.gov] on
> behalf of Nico Schlömer [nico.schloemer at gmail.com]
> *Sent:* Wednesday, December 02, 2015 11:03 AM
> *To:* moab-dev at mcs.anl.gov
> *Subject:* [MOAB-dev] IDs to index?
>
> Hi everyone,
>
> I just checked out the elem values for some mesh,
> ```
>   // Get regions, by dimension, so we stay generic to entity type
>   Range elems;
>   rval = mb->get_entities_by_dimension(0, 3, elems);MB_CHK_ERR(rval);
>   cout << "Number of elements is " << elems.size() << endl;
>
>   for (size_t k = 0; k < elems.size(); k++) {
>     std::cout << "elems[" << k << "] = " << elems[k] << std::endl;
>   }
> ```
> and get
> ```
> elems[0] = 5764607523034234881
> elems[1] = 5764607523034234882
> elems[2] = 5764607523034234883
> // ...
> ```
> That came as a bit of a surprise to me since I had expected low
> consecutive numbers, but I guess there's no guarantee for that.
>
> Now, I would like to store additional data per element, and I initially
> planned to just create a `std::vector<double>`. However, to associate the
> data `data[42]` with a particular `elem`, I'll have to do something else. I
> suppose I could use a `std::map<EntityHandle, double>` instead.
>
> How to you typically organize this? Is there, for example, a helper method
> that converts an `elem` ID into something that I can use as an index into
> `data`?
>
> Cheers,
> Nico
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/moab-dev/attachments/20151202/6a54814f/attachment.html>


More information about the moab-dev mailing list