[MOAB-dev] IDs to index?
Grindeanu, Iulian R.
iulian at mcs.anl.gov
Wed Dec 2 11:37:28 CST 2015
So entity id is local, per process
It is 1-based, but you cannot assume everything is contiguous.
You can have gaps (for example if you deleted some entities)
Gaps in the entity sequence can appear if you load multiple files, or if you create new entities (ghosting?)
safest is to use "iterate-type" methods.
Iulian
________________________________
From: Nico Schlömer [nico.schloemer at gmail.com]
Sent: Wednesday, December 02, 2015 11:31 AM
To: Grindeanu, Iulian R.; moab-dev at mcs.anl.gov
Subject: Re: [MOAB-dev] IDs to index?
> 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<mailto: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<mailto:moab-dev-bounces at mcs.anl.gov> [moab-dev-bounces at mcs.anl.gov<mailto:moab-dev-bounces at mcs.anl.gov>] on behalf of Nico Schlömer [nico.schloemer at gmail.com<mailto:nico.schloemer at gmail.com>]
Sent: Wednesday, December 02, 2015 11:03 AM
To: moab-dev at mcs.anl.gov<mailto: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/a599d8c8/attachment.html>
More information about the moab-dev
mailing list