[MOAB-dev] Question about iMesh and Fortran 90/2003
Tim Tautges
tautges at mcs.anl.gov
Fri Nov 15 16:14:54 CST 2013
Are you reading in a mesh or pushing one into MOAB? If the former, I could probably implement a "ASSIGN_GLOBAL_IDS"
read option that would generate those, then you'd just need to read them out of the tag. If you don't mind writing your
own iMeshP/iMesh extension function, there's also already the function ParallelComm::assign_global_ids you could use.
- tim
On 11/15/2013 02:24 PM, Chris Eldred wrote:
> Hey Tim,
>
> Using an integer tag to number vertices/faces/edges myself seems like
> the easiest option. I should just be able to use the handle array as
> an input into iMesh_getIntArrData to get the integer tag array, which
> is basically converting from handles to some form of (global) integer
> id.
>
> Thanks,
> Chris
>
> On Fri, Nov 15, 2013 at 1:14 PM, Tim Tautges <tautges at mcs.anl.gov> wrote:
>> Hi Chris,
>> Using the id associated with handles in C++ MOAB is dicey, since there
>> aren't any guarantees that integer space is contiguous, and in parallel that
>> gives local ids but not global ones. The quick answer to your question is
>> that you may want to use an integer tag and number your vertices yourself,
>> then use the handle array you get back as connectivity as input to the
>> function to get that integer tag data for those vertices.
>>
>> Secondly, I just this morning committed another example that shows how to
>> use iMesh from F90 that may help. It's not exactly what you're doing, but
>> it may show some more things about accessing MOAB through ISO_C_BINDING.
>> It's on my to-do list to document F90+iMesh/MOAB better.
>>
>> I'll also look over your code in a minute, but wanted to get this answer out
>> quickly.
>>
>> - tim
>>
>>
>> On 11/14/2013 08:20 PM, Chris Eldred wrote:
>>>
>>> Hey Moab-Dev,
>>>
>>> I am trying to write a Fortran code that uses iMesh to call MOAB, and
>>> I keep running into errors. What I would like to be able to do it is
>>> to convert an adjacency returned by iMesh_getEntAdj from type(c_ptr)
>>> to integers. In MOAB using C++ this seems to be trivial (use id =
>>> id_from_handle(HANDLE) . It would also be useful to have the dual of
>>> this operator (handle = handle_from_id(ID) ). I can't seem to get it
>>> to work in Fortran however. My code is:
>>>
>>> subroutine get_adjacency(entity, entity_requested, adjacencyptr,
>>> adjacency_size)
>>> implicit none
>>>
>>> integer(kind=c_int) :: alloc, adjacency_size
>>> integer(kind=c_int) :: entity_requested
>>> integer(kind=c_int), pointer, dimension(:) :: adjacency
>>> type(c_ptr) :: entity
>>> type(c_ptr) :: adjacencyptr_C
>>> type(c_ptr), pointer, dimension(:) :: adjacencyptr
>>>
>>> alloc = 0
>>> call iMesh_getEntAdj( mesh, entity, entity_requested, adjacencyptr_C,
>>> alloc, adjacency_size, ierr)
>>> CHECK("Couldn't get adjacencies")
>>> call C_F_POINTER(adjacencyptr_C, adjacencyptr, [alloc])
>>> adjacency = transfer(adjacencyptr,adjacency,adjacency_size)
>>>
>>> end subroutine get_adjacency
>>>
>>> I have tried using the transfer function, but that produces memory
>>> (segmentation fault) errors. Everything before this line works fine. I
>>> am using the Fortran 2003 modules (iMesh_iso.F03) from
>>>
>>> https://redmine.scorec.rpi.edu/anonsvn/itaps/software/trunk/interfaces/iMesh/examples/FindAdjacency/.
>>> I've also looked through the iBase and iMesh documentation, but there
>>> is very little information there about using Fortran instead of C/C++.
>>> I am not very familiar with mixed C/Fortran programming, so it is
>>> entirely possible that I just don't understand what is going on.
>>>
>>> Thanks,
>>> Chris Eldred
>>>
>>
>> --
>> ================================================================
>> "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
>>
>
>
>
--
================================================================
"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