1 c FindConnect: Interacting with iMesh
2 c
3 c This program shows how to get more information about a mesh, by
4 c getting connectivity two different ways (as connectivity and as
5 c adjacent 0-dimensional entities).
67 c Usage: FindConnect
89program findconnect
10 #include"iMesh_f.h"1112 c declarations
13 imesh_instance mesh
14 ibase_entityhandle ents
15 ibase_handle_t rpverts, rpallverts, ipoffsets
16pointer(rpents, ents(0:*))
17pointer(rpverts, verts(0:*))
18pointer(rpallverts, allverts(0:*))
19pointer(ipoffsets, ioffsets(0,*))
20integer ierr, ents_alloc, ents_size
21integer iverts_alloc, iverts_size
22integer allverts_alloc, allverts_size
23integer offsets_alloc, offsets_size
2425 c create the Mesh instance
26call imesh_newmesh("MOAB", mesh, ierr)
2728 c load the mesh
29call imesh_load(%VAL(mesh), %VAL(0), "125hex.vtk", "", ierr)
3031 c get all3d elements
32 ents_alloc = 033call imesh_getentities(%VAL(mesh), %VAL(0), %VAL(ibase_region),
341 %VAL(imesh_all_topologies), rpents, ents_alloc, ents_size,
351 ierr)
3637 ivert_uses = 03839 c iterate through them;
40do i = 0, ents_size-141 c get connectivity
42 iverts_alloc = 043call imesh_getentadj(%VAL(mesh), %VAL(ents(i)),
441 %VAL(ibase_vertex), rpverts, iverts_alloc, iverts_size,
451 ierr)
46 c sumnumber of vertex uses
4748 vert_uses = vert_uses + iverts_size
4950call free(rpverts)
51enddo5253 c now get adjacencies in one big block54 allverts_alloc = 055 offsets_alloc = 056call imesh_getentarradj(%VAL(mesh), %VAL(rpents),
571 %VAL(ents_size), %VAL(ibase_vertex), rpallverts,
581 allverts_alloc, allverts_size, ipoffsets, offsets_alloc,
591 offsets_size, ierr)
6061call free(rpallverts);
62call free(ipoffsets);
63call free(rpents);
6465 c compare results of two calling methods
66if (allverts_size .ne. vert_uses) then67write(*,'("Sizes didn''t agree!")')
68else69write(*,'("Sizes did agree!")')
70endif7172call imesh_dtor(%VAL(mesh), ierr)
7374end