Mesh Oriented datABase  (version 5.4.1)
Array-based unstructured mesh datastructure
iMOABF.F90
Go to the documentation of this file.
00001 ! iMOAB Interface for Fortran 90/2003/2008 compatible compilers
00002 
00003 #include "moab/MOABConfig.h"
00004 
00005 module iMOAB
00006 
00007    use iso_c_binding
00008    implicit none
00009 
00010    ! constant parameters for tag type and layout
00011    ! equivalent to enum MOAB_TAG_TYPE in iMOAB.h
00012    integer, parameter :: TAG_DENSE_INTEGER  = 0
00013    integer, parameter :: TAG_DENSE_DOUBLE   = 1
00014    integer, parameter :: TAG_DENSE_HANDLE   = 2
00015    integer, parameter :: TAG_SPARSE_INTEGER = 3
00016    integer, parameter :: TAG_SPARSE_DOUBLE  = 4
00017    integer, parameter :: TAG_SPARSE_HANDLE  = 5
00018 
00019    ! constant parameters for tag definition on entities
00020    ! equivalent to enum MOAB_TAG_OWNER_TYPE in iMOAB.h
00021    integer, parameter :: TAG_OWNER_VERTICES  = 0
00022    integer, parameter :: TAG_OWNER_EDGES     = 1
00023    integer, parameter :: TAG_OWNER_FACES     = 2
00024    integer, parameter :: TAG_OWNER_ELEMENTS  = 3
00025 
00026 ! Interface to all the API routines
00027    interface
00028 
00029       integer(c_int) function iMOAB_Initialize() bind(C, name='iMOAB_InitializeFortran')
00030          ! Directly forward the call
00031          use, intrinsic :: iso_c_binding, only: c_int
00032       end function iMOAB_Initialize
00033 
00034       integer(c_int) function iMOAB_Finalize() bind(C, name='iMOAB_Finalize')
00035          ! Directly forward the call
00036          use, intrinsic :: iso_c_binding, only: c_int
00037       end function iMOAB_Finalize
00038 
00039 #ifdef MOAB_HAVE_MPI
00040       integer(c_int) function iMOAB_RegisterApplication(app_name, fcomm, compid, pid) &
00041                               bind(C, name='iMOAB_RegisterApplicationFortran')
00042 #else
00043       integer(c_int) function iMOAB_RegisterApplication(app_name, compid, pid) &
00044                               bind(C, name='iMOAB_RegisterApplicationFortran')
00045 #endif
00046         ! Interface blocks don't know about their context,
00047         ! so we need to use iso_c_binding inside all interface functions again
00048         use, intrinsic :: iso_c_binding, only: c_int, c_char, c_ptr
00049         character(kind=c_char), intent(in) :: app_name(*)
00050 #ifdef MOAB_HAVE_MPI
00051         integer, intent(in) :: fcomm
00052 #endif
00053         integer(c_int), intent(in) :: compid
00054         integer(c_int), intent(out) :: pid
00055       end function iMOAB_RegisterApplication
00056 
00057       integer(c_int) function iMOAB_DeregisterApplication(pid) bind(C, name='iMOAB_DeregisterApplicationFortran')
00058         use, intrinsic :: iso_c_binding, only: c_int
00059         integer(c_int), intent(in) :: pid
00060       end function iMOAB_DeregisterApplication
00061 
00062       integer(c_int) function iMOAB_ReadHeaderInfo(filename, num_global_vertices, num_global_elements, &
00063                                                    num_dimension, num_parts) bind(C, name='iMOAB_ReadHeaderInfo')
00064         use, intrinsic :: iso_c_binding, only: c_int, c_char
00065         character(kind=c_char), intent(in) :: filename(*)
00066         integer(c_int), intent(out) :: num_global_vertices
00067         integer(c_int), intent(out) :: num_global_elements
00068         integer(c_int), intent(out) :: num_dimension
00069         integer(c_int), intent(out) :: num_parts
00070       end function iMOAB_ReadHeaderInfo
00071 
00072       integer(c_int) function iMOAB_LoadMesh(pid, filename, read_options, num_ghost_layers) bind(C, name='iMOAB_LoadMesh')
00073         use, intrinsic :: iso_c_binding, only: c_int, c_char
00074         integer(c_int), intent(in) :: pid
00075         character(kind=c_char), intent(in) :: filename(*)
00076         character(kind=c_char), intent(in) :: read_options(*)
00077         integer(c_int), intent(in) :: num_ghost_layers
00078       end function iMOAB_LoadMesh
00079 
00080       integer(c_int) function iMOAB_CreateVertices(pid, coords_len, dim, coordinates) bind(C, name='iMOAB_CreateVertices')
00081         use, intrinsic :: iso_c_binding, only: c_int, c_double
00082         integer(c_int), intent(in) :: pid
00083         integer(c_int), intent(in) :: coords_len
00084         integer(c_int), intent(in) :: dim
00085         real(c_double), intent(in) :: coordinates(*)
00086       end function iMOAB_CreateVertices
00087 
00088       integer(c_int) function iMOAB_CreateElements(pid, num_elem, type, num_nodes_per_element, &
00089                                                    connectivity, block_ID) bind(C, name='iMOAB_CreateElements')
00090         use, intrinsic :: iso_c_binding, only: c_int
00091         integer(c_int), intent(in) :: pid
00092         integer(c_int), intent(in) :: num_elem
00093         integer(c_int), intent(in) :: type
00094         integer(c_int), intent(in) :: num_nodes_per_element
00095         integer(c_int), intent(in) :: connectivity(*)
00096         integer(c_int), intent(in) :: block_ID
00097       end function iMOAB_CreateElements
00098 
00099       integer(c_int) function iMOAB_ResolveSharedEntities(pid, num_verts, marker) bind(C, name='iMOAB_ResolveSharedEntities')
00100         use, intrinsic :: iso_c_binding, only: c_int
00101         integer(c_int), intent(in) :: pid
00102         integer(c_int), intent(in) :: num_verts
00103         integer(c_int), intent(in) :: marker(*)
00104       end function iMOAB_ResolveSharedEntities
00105 
00106       integer(c_int) function iMOAB_DetermineGhostEntities(pid, ghost_dim, num_ghost_layers, bridge_dim) &
00107                               bind(C, name='iMOAB_DetermineGhostEntities')
00108         use, intrinsic :: iso_c_binding, only: c_int
00109         integer(c_int), intent(in) :: pid
00110         integer(c_int), intent(in) :: ghost_dim
00111         integer(c_int), intent(in) :: num_ghost_layers
00112         integer(c_int), intent(in) :: bridge_dim
00113       end function iMOAB_DetermineGhostEntities
00114 
00115       integer(c_int) function iMOAB_WriteMesh(pid, filename, write_options) bind(C, name='iMOAB_WriteMesh')
00116         use, intrinsic :: iso_c_binding, only: c_int, c_char
00117         integer(c_int), intent(in) :: pid
00118         character(kind=c_char), intent(in) :: filename(*)
00119         character(kind=c_char), intent(in) :: write_options(*)
00120       end function iMOAB_WriteMesh
00121 
00122       integer(c_int) function iMOAB_UpdateMeshInfo(pid) bind(C, name='iMOAB_UpdateMeshInfo')
00123         use, intrinsic :: iso_c_binding, only: c_int
00124         integer(c_int), intent(in) :: pid
00125       end function iMOAB_UpdateMeshInfo
00126 
00127       integer(c_int) function iMOAB_GetMeshInfo(pid, num_visible_vertices, num_visible_elements, &
00128                                                 num_visible_blocks, num_visible_surfaceBC, &
00129                                                 num_visible_vertexBC) bind(C, name='iMOAB_GetMeshInfo')
00130         use, intrinsic :: iso_c_binding, only: c_int
00131         integer(c_int), intent(in) :: pid
00132         integer(c_int), intent(out) :: num_visible_vertices(3)
00133         integer(c_int), intent(out) :: num_visible_elements(3)
00134         integer(c_int), intent(out) :: num_visible_blocks(3)
00135         integer(c_int), intent(out) :: num_visible_surfaceBC(3)
00136         integer(c_int), intent(out) :: num_visible_vertexBC(3)
00137       end function iMOAB_GetMeshInfo
00138 
00139       integer(c_int) function iMOAB_GetVertexID(pid, vertices_length, global_vertex_ID) bind(C, name='iMOAB_GetVertexID')
00140         use, intrinsic :: iso_c_binding, only: c_int
00141         integer(c_int), intent(in) :: pid
00142         integer(c_int), intent(in) :: vertices_length
00143         integer(c_int), intent(out) :: global_vertex_ID(*)
00144       end function iMOAB_GetVertexID
00145 
00146       integer(c_int) function iMOAB_GetVertexOwnership(pid, vertices_length, visible_global_rank_ID) &
00147                               bind(C, name='iMOAB_GetVertexOwnership')
00148         use, intrinsic :: iso_c_binding, only: c_int
00149         integer(c_int), intent(in) :: pid
00150         integer(c_int), intent(in) :: vertices_length
00151         integer(c_int), intent(out) :: visible_global_rank_ID(*)
00152       end function iMOAB_GetVertexOwnership
00153 
00154       integer(c_int) function iMOAB_GetVisibleVerticesCoordinates(pid, coords_length, coordinates) &
00155                               bind(C, name='iMOAB_GetVisibleVerticesCoordinates')
00156         use, intrinsic :: iso_c_binding, only: c_int, c_double
00157         integer(c_int), intent(in) :: pid
00158         integer(c_int), intent(in) :: coords_length
00159         real(c_double), intent(out) :: coordinates(*)
00160       end function iMOAB_GetVisibleVerticesCoordinates
00161 
00162       integer(c_int) function iMOAB_GetBlockID(pid, block_length, global_block_IDs) bind(C, name='iMOAB_GetBlockID')
00163         use, intrinsic :: iso_c_binding, only: c_int
00164         integer(c_int), intent(in) :: pid
00165         integer(c_int), intent(in) :: block_length
00166         integer(c_int), intent(out) :: global_block_IDs(*)
00167       end function iMOAB_GetBlockID
00168 
00169       integer(c_int) function iMOAB_GetBlockInfo(pid, global_block_ID, vertices_per_element, &
00170                                                 num_elements_in_block) bind(C, name='iMOAB_GetBlockInfo')
00171         use, intrinsic :: iso_c_binding, only: c_int
00172         integer(c_int), intent(in) :: pid
00173         integer(c_int), intent(in) :: global_block_ID
00174         integer(c_int), intent(out) :: vertices_per_element
00175         integer(c_int), intent(out) :: num_elements_in_block
00176       end function iMOAB_GetBlockInfo
00177 
00178       integer(c_int) function iMOAB_GetVisibleElementsInfo(pid, num_visible_elements, element_global_IDs, &
00179                                                           ranks, block_IDs) bind(C, name='iMOAB_GetVisibleElementsInfo')
00180         use, intrinsic :: iso_c_binding, only: c_int
00181         integer(c_int), intent(in) :: pid
00182         integer(c_int), intent(out) :: num_visible_elements
00183         integer(c_int), intent(out) :: element_global_IDs(*)
00184         integer(c_int), intent(out) :: ranks(*)
00185         integer(c_int), intent(out) :: block_IDs(*)
00186       end function iMOAB_GetVisibleElementsInfo
00187 
00188       integer(c_int) function iMOAB_GetBlockElementConnectivities(pid, global_block_ID, connectivity_length, &
00189                                                                   element_connectivity) &
00190                                                                   bind(C, name='iMOAB_GetBlockElementConnectivities')
00191         use, intrinsic :: iso_c_binding, only: c_int
00192         integer(c_int), intent(in) :: pid
00193         integer(c_int), intent(in) :: global_block_ID
00194         integer(c_int), intent(in) :: connectivity_length
00195         integer(c_int), intent(out) :: element_connectivity(*)
00196       end function iMOAB_GetBlockElementConnectivities
00197 
00198       integer(c_int) function iMOAB_GetElementConnectivity(pid, elem_index, connectivity_length, &
00199                                                           element_connectivity) bind(C, name='iMOAB_GetElementConnectivity')
00200         use, intrinsic :: iso_c_binding, only: c_int
00201         integer(c_int), intent(in) :: pid
00202         integer(c_int), intent(in) :: elem_index
00203         integer(c_int), intent(in) :: connectivity_length
00204         integer(c_int), intent(out) :: element_connectivity(*)
00205       end function iMOAB_GetElementConnectivity
00206 
00207       integer(c_int) function iMOAB_GetElementOwnership(pid, global_block_ID, num_elements_in_block, &
00208                                                         element_ownership) bind(C, name='iMOAB_GetElementOwnership')
00209         use, intrinsic :: iso_c_binding, only: c_int
00210         integer(c_int), intent(in) :: pid
00211         integer(c_int), intent(in) :: global_block_ID
00212         integer(c_int), intent(out) :: num_elements_in_block
00213         integer(c_int), intent(out) :: element_ownership(*)
00214       end function iMOAB_GetElementOwnership
00215 
00216       integer(c_int) function iMOAB_GetElementID(pid, global_block_ID, num_elements_in_block, &
00217                                                 global_element_ID, local_element_ID) bind(C, name='iMOAB_GetElementID')
00218         use, intrinsic :: iso_c_binding, only: c_int
00219         integer(c_int), intent(in) :: pid
00220         integer(c_int), intent(in) :: global_block_ID
00221         integer(c_int), intent(in) :: num_elements_in_block
00222         integer(c_int), intent(in) :: global_element_ID
00223         integer(c_int), intent(out) :: local_element_ID
00224       end function iMOAB_GetElementID
00225 
00226       integer(c_int) function iMOAB_GetPointerToSurfaceBC(pid, surface_BC_length, local_element_ID, &
00227                                                           reference_surface_ID, boundary_condition_value) &
00228                                                           bind(C, name='iMOAB_GetPointerToSurfaceBC')
00229         use, intrinsic :: iso_c_binding, only: c_int
00230         integer(c_int), intent(in) :: pid
00231         integer(c_int), intent(in) :: surface_BC_length
00232         integer(c_int), intent(in) :: local_element_ID
00233         integer(c_int), intent(in) :: reference_surface_ID
00234         integer(c_int), intent(out) :: boundary_condition_value
00235       end function iMOAB_GetPointerToSurfaceBC
00236 
00237       integer(c_int) function iMOAB_GetPointerToVertexBC(pid, vertex_BC_length, local_vertex_ID, &
00238                                                         boundary_condition_value) bind(C, name='iMOAB_GetPointerToVertexBC')
00239         use, intrinsic :: iso_c_binding, only: c_int
00240         integer(c_int), intent(in) :: pid
00241         integer(c_int), intent(in) :: vertex_BC_length
00242         integer(c_int), intent(in) :: local_vertex_ID
00243         integer(c_int), intent(out) :: boundary_condition_value
00244       end function iMOAB_GetPointerToVertexBC
00245 
00246       integer(c_int) function iMOAB_DefineTagStorage(pid, tag_storage_name, tag_type, components_per_entity, &
00247                                                     tag_index) bind(C, name='iMOAB_DefineTagStorage')
00248         use, intrinsic :: iso_c_binding, only: c_int, c_char
00249         integer(c_int), intent(in) :: pid
00250         character(kind=c_char), intent(in) :: tag_storage_name(*)
00251         integer(c_int), intent(in) :: tag_type
00252         integer(c_int), intent(in) :: components_per_entity
00253         integer(c_int), intent(in) :: tag_index
00254       end function iMOAB_DefineTagStorage
00255 
00256       integer(c_int) function iMOAB_SetIntTagStorage(pid, tag_storage_name, num_tag_storage_length, entity_type, &
00257                                                     tag_storage_data) bind(C, name='iMOAB_SetIntTagStorage')
00258         use, intrinsic :: iso_c_binding, only: c_int, c_char
00259         integer(c_int), intent(in) :: pid
00260         character(kind=c_char), intent(in) :: tag_storage_name(*)
00261         integer(c_int), intent(in) :: num_tag_storage_length
00262         integer(c_int), intent(in) :: entity_type
00263         integer(c_int), intent(in) :: tag_storage_data(*)
00264       end function iMOAB_SetIntTagStorage
00265 
00266       integer(c_int) function iMOAB_GetIntTagStorage(pid, tag_storage_name, num_tag_storage_length, entity_type, &
00267                                                      tag_storage_data) bind(C, name='iMOAB_GetIntTagStorage')
00268         use, intrinsic :: iso_c_binding, only: c_int, c_char
00269         integer(c_int), intent(in) :: pid
00270         character(kind=c_char), intent(in) :: tag_storage_name(*)
00271         integer(c_int), intent(in) :: num_tag_storage_length
00272         integer(c_int), intent(in) :: entity_type
00273         integer(c_int), intent(out) :: tag_storage_data(*)
00274       end function iMOAB_GetIntTagStorage
00275 
00276       integer(c_int) function iMOAB_SetDoubleTagStorage(pid, tag_storage_name, num_tag_storage_length, entity_type, &
00277                                                         tag_storage_data) bind(C, name='iMOAB_SetDoubleTagStorage')
00278         use, intrinsic :: iso_c_binding, only: c_int, c_char, c_double
00279         integer(c_int), intent(in) :: pid
00280         character(kind=c_char), intent(in) :: tag_storage_name(*)
00281         integer(c_int), intent(in) :: num_tag_storage_length
00282         integer(c_int), intent(in) :: entity_type
00283         real(c_double), intent(in) :: tag_storage_data(*)
00284       end function iMOAB_SetDoubleTagStorage
00285 
00286       integer(c_int) function iMOAB_SetDoubleTagStorageWithGid(pid, tag_storage_name, num_tag_storage_length, entity_type, &
00287                                          tag_storage_data, globalIds) bind(C, name='iMOAB_SetDoubleTagStorageWithGid')
00288         use, intrinsic :: iso_c_binding, only: c_int, c_char, c_double
00289         integer(c_int), intent(in) :: pid
00290         character(kind=c_char), intent(in) :: tag_storage_name(*)
00291         integer(c_int), intent(in) :: num_tag_storage_length
00292         integer(c_int), intent(in) :: entity_type
00293         real(c_double), intent(in) :: tag_storage_data(*)
00294         integer(c_int), intent(in) :: globalIds(*)
00295       end function iMOAB_SetDoubleTagStorageWithGid
00296 
00297 
00298       integer(c_int) function iMOAB_GetDoubleTagStorage(pid, tag_storage_name, num_tag_storage_length, entity_type, &
00299                                                         tag_storage_data) bind(C, name='iMOAB_GetDoubleTagStorage')
00300         use, intrinsic :: iso_c_binding, only: c_int, c_char, c_double
00301         integer(c_int), intent(in) :: pid
00302         character(kind=c_char), intent(in) :: tag_storage_name(*)
00303         integer(c_int), intent(in) :: num_tag_storage_length
00304         integer(c_int), intent(in) :: entity_type
00305         real(c_double), intent(out) :: tag_storage_data(*)
00306       end function iMOAB_GetDoubleTagStorage
00307 
00308       integer(c_int) function iMOAB_SynchronizeTags(pid, num_tag, tag_indices, entity_type) bind(C, name='iMOAB_SynchronizeTags')
00309         use, intrinsic :: iso_c_binding, only: c_int
00310         integer(c_int), intent(in) :: pid
00311         integer(c_int), intent(in) :: num_tag
00312         integer(c_int), intent(in) :: tag_indices(*)
00313         integer(c_int), intent(in) :: entity_type(*)
00314       end function iMOAB_SynchronizeTags
00315 
00316       integer(c_int) function iMOAB_ReduceTagsMax(pid, tag_index, entity_type) bind(C, name='iMOAB_ReduceTagsMax')
00317         use, intrinsic :: iso_c_binding, only: c_int
00318         integer(c_int), intent(in) :: pid
00319         integer(c_int), intent(in) :: tag_index
00320         integer(c_int), intent(in) :: entity_type
00321       end function iMOAB_ReduceTagsMax
00322 
00323       integer(c_int) function iMOAB_GetNeighborElements(pid, local_index, num_adjacent_elements, adjacent_element_IDs) &
00324                               bind(C, name='iMOAB_GetNeighborElements')
00325         use, intrinsic :: iso_c_binding, only: c_int
00326         integer(c_int), intent(in) :: pid
00327         integer(c_int), intent(in) :: local_index
00328         integer(c_int), intent(out) :: num_adjacent_elements
00329         integer(c_int), intent(out) :: adjacent_element_IDs
00330       end function iMOAB_GetNeighborElements
00331 
00332       integer(c_int) function iMOAB_GetNeighborVertices(pid, local_index, num_adjacent_vertices, adjacent_vertex_IDs) &
00333                               bind(C, name='iMOAB_GetNeighborVertices')
00334         use, intrinsic :: iso_c_binding, only: c_int
00335         integer(c_int), intent(in) :: pid
00336         integer(c_int), intent(in) :: local_index
00337         integer(c_int), intent(out) :: num_adjacent_vertices
00338         integer(c_int), intent(out) :: adjacent_vertex_IDs
00339       end function iMOAB_GetNeighborVertices
00340 
00341       integer(c_int) function iMOAB_SetGlobalInfo(pid, num_global_verts, num_global_elems) bind(C, name='iMOAB_SetGlobalInfo')
00342         use, intrinsic :: iso_c_binding, only: c_int
00343         integer(c_int), intent(in) :: pid
00344         integer(c_int), intent(in) :: num_global_verts
00345         integer(c_int), intent(in) :: num_global_elems
00346       end function iMOAB_SetGlobalInfo
00347 
00348       integer(c_int) function iMOAB_GetGlobalInfo(pid, num_global_verts, num_global_elems) bind(C, name='iMOAB_GetGlobalInfo')
00349         use, intrinsic :: iso_c_binding, only: c_int
00350         integer(c_int), intent(in) :: pid
00351         integer(c_int), intent(out) :: num_global_verts
00352         integer(c_int), intent(out) :: num_global_elems
00353       end function iMOAB_GetGlobalInfo
00354 
00355       integer(c_int) function  iMOAB_DuplicateAppMesh( pid, poid )bind(C, name='iMOAB_DuplicateAppMesh')
00356       use, intrinsic :: iso_c_binding, only: c_int
00357         integer(c_int), intent(in) :: pid
00358         integer(c_int), intent(in) :: poid
00359       end function iMOAB_DuplicateAppMesh
00360 
00361   integer(c_int) function iMOAB_WriteLocalMesh(pid, prefix) bind(C, name='iMOAB_WriteLocalMesh')
00362     use, intrinsic :: iso_c_binding, only : c_int, c_char
00363     integer(c_int), intent(in) :: pid
00364     character(kind=c_char), intent(in) :: prefix(*)
00365   end function iMOAB_WriteLocalMesh
00366 
00367 #ifdef MOAB_HAVE_MPI
00368 
00369       integer(c_int) function iMOAB_SendMesh(pid, joint_comm, receivingGroup, rcompid, method) bind(C, name='iMOAB_SendMesh')
00370         use, intrinsic :: iso_c_binding, only: c_int, c_ptr
00371         integer(c_int), intent(in) :: pid
00372         integer, intent(in) :: joint_comm ! MPI_Comm
00373         integer, intent(in) :: receivingGroup ! MPI_Group
00374         integer(c_int), intent(in) :: rcompid
00375         integer(c_int), intent(in) :: method
00376       end function iMOAB_SendMesh
00377 
00378       integer(c_int) function iMOAB_ReceiveMesh(pid, joint_comm, sendingGroup, scompid) bind(C, name='iMOAB_ReceiveMesh')
00379         use, intrinsic :: iso_c_binding, only: c_int, c_ptr
00380         integer(c_int), intent(in) :: pid
00381         integer, intent(in) :: joint_comm ! MPI_Comm
00382         integer, intent(in) :: sendingGroup ! MPI_Group
00383         integer(c_int), intent(in) :: scompid
00384       end function iMOAB_ReceiveMesh
00385 
00386       integer(c_int) function iMOAB_FreeSenderBuffers(pid, context_id) bind(C, name='iMOAB_FreeSenderBuffers')
00387         use, intrinsic :: iso_c_binding, only: c_int
00388         integer(c_int), intent(in) :: pid
00389         integer(c_int), intent(in) :: context_id
00390       end function iMOAB_FreeSenderBuffers
00391 
00392       integer(c_int) function iMOAB_SendElementTag(pid, tag_storage_name, joint_comm, context_id) &
00393                               bind(C, name='iMOAB_SendElementTag')
00394         use, intrinsic :: iso_c_binding, only: c_int, c_char, c_ptr
00395         integer(c_int), intent(in) :: pid
00396         character(kind=c_char), intent(in) :: tag_storage_name(*)
00397         integer, intent(in) :: joint_comm ! MPI_Comm
00398         integer(c_int), intent(in) :: context_id
00399       end function iMOAB_SendElementTag
00400 
00401       integer(c_int) function iMOAB_ReceiveElementTag(pid, tag_storage_name, joint_comm, context_id) &
00402                               bind(C, name='iMOAB_ReceiveElementTag')
00403         use, intrinsic :: iso_c_binding, only: c_int, c_char, c_ptr
00404         integer(c_int), intent(in) :: pid
00405         character(kind=c_char), intent(in) :: tag_storage_name(*)
00406         integer, intent(in) :: joint_comm ! MPI_Comm
00407         integer(c_int), intent(in) :: context_id
00408       end function iMOAB_ReceiveElementTag
00409 
00410       integer(c_int) function iMOAB_ComputeCommGraph(pid1, pid2, joint_comm, group1, group2, type1, type2, &
00411                                                      comp1, comp2) bind(C, name='iMOAB_ComputeCommGraph')
00412         use, intrinsic :: iso_c_binding, only: c_int, c_ptr
00413         integer(c_int), intent(in) :: pid1
00414         integer(c_int), intent(in) :: pid2
00415         integer, intent(in) :: joint_comm ! MPI_Comm
00416         integer, intent(in) :: group1     ! MPI_Group
00417         integer, intent(in) :: group2     ! MPI_Group
00418         integer(c_int), intent(in) :: type1
00419         integer(c_int), intent(in) :: type2
00420         integer(c_int), intent(in) :: comp1
00421         integer(c_int), intent(in) :: comp2
00422       end function iMOAB_ComputeCommGraph
00423 
00424       integer(c_int) function iMOAB_CoverageGraph(joint_comm, pid_source, pid_migration, pid_intx, source_id, &
00425                                                   migration_id, context_id) bind(C, name='iMOAB_CoverageGraph')
00426         use, intrinsic :: iso_c_binding, only: c_int, c_ptr
00427         integer, intent(in) :: joint_comm ! MPI_Comm
00428         integer(c_int), intent(in) :: pid_source
00429         integer(c_int), intent(in) :: pid_migration
00430         integer(c_int), intent(in) :: pid_intx
00431         integer(c_int), intent(in) :: source_id
00432         integer(c_int), intent(in) :: migration_id
00433         integer(c_int), intent(in) :: context_id
00434       end function iMOAB_CoverageGraph
00435 
00436       integer(c_int) function iMOAB_DumpCommGraph(pid, context_id, is_sender, prefix) bind(C, name='iMOAB_DumpCommGraph')
00437         use, intrinsic :: iso_c_binding, only: c_int, c_char
00438         integer(c_int), intent(in) :: pid
00439         integer(c_int), intent(in) :: context_id
00440         integer(c_int), intent(in) :: is_sender
00441         character(kind=c_char), intent(in) :: prefix(*)
00442       end function iMOAB_DumpCommGraph
00443 
00444       integer(c_int) function iMOAB_MergeVertices(pid) bind(C, name='iMOAB_MergeVertices')
00445         use, intrinsic :: iso_c_binding, only: c_int
00446         integer(c_int), intent(in) :: pid
00447       end function iMOAB_MergeVertices
00448 
00449       integer(c_int) function iMOAB_MigrateMapMesh( pid1, pid2, pid3, jointcomm, groupA, groupB, type, comp1, comp2, &
00450                                                     direction) bind(C, name='iMOAB_MigrateMapMesh')
00451         use, intrinsic :: iso_c_binding, only : c_int
00452         integer(c_int), intent(in) :: pid1
00453         integer(c_int), intent(in) :: pid2
00454         integer(c_int), intent(in) :: pid3
00455         integer, intent(in) :: jointcomm  ! MPI_Comm
00456         integer, intent(in) :: groupA     ! MPI_Group
00457         integer, intent(in) :: groupB     ! MPI_Group
00458         integer(c_int), intent(in) :: type
00459         integer(c_int), intent(in) :: comp1
00460         integer(c_int), intent(in) :: comp2
00461         integer(c_int), intent(in) :: direction
00462       end function iMOAB_MigrateMapMesh
00463 
00464 ! closing endif: MOAB_HAVE_MPI
00465 #endif
00466 
00467 #ifdef MOAB_HAVE_TEMPESTREMAP
00468 
00469       integer(c_int) function iMOAB_ComputeMeshIntersectionOnSphere(pid_source, pid_target, pid_intersection) &
00470                                                                   bind(C, name='iMOAB_ComputeMeshIntersectionOnSphere')
00471         use, intrinsic :: iso_c_binding, only: c_int
00472         integer(c_int), intent(in) :: pid_source
00473         integer(c_int), intent(in) :: pid_target
00474         integer(c_int), intent(in) :: pid_intersection
00475       end function iMOAB_ComputeMeshIntersectionOnSphere
00476 
00477       integer(c_int) function iMOAB_ComputePointDoFIntersection(pid_source, pid_target, pid_intersection) &
00478                                                                 bind(C, name='iMOAB_ComputePointDoFIntersection')
00479         use, intrinsic :: iso_c_binding, only: c_int
00480         integer(c_int), intent(in) :: pid_source
00481         integer(c_int), intent(in) :: pid_target
00482         integer(c_int), intent(in) :: pid_intersection
00483       end function iMOAB_ComputePointDoFIntersection
00484 
00485 #ifdef MOAB_HAVE_NETCDF
00486 
00487       integer(c_int) function iMOAB_LoadMappingWeightsFromFile(pid_intersection, pid_cpl, column_or_row, mtype, &
00488                                                                solution_weights_identifier, remap_weights_filename) &
00489                                                                   bind(C, name='iMOAB_LoadMappingWeightsFromFile')
00490             use, intrinsic :: iso_c_binding, only : c_int, c_char
00491             integer(c_int), intent(in) :: pid_intersection
00492             integer(c_int), intent(in) :: pid_cpl
00493             integer(c_int), intent(in) :: column_or_row
00494             integer(c_int), intent(in) :: mtype
00495             character(kind=c_char), intent(in) :: solution_weights_identifier(*)
00496             character(kind=c_char), intent(in) :: remap_weights_filename(*)
00497       end function iMOAB_LoadMappingWeightsFromFile
00498 
00499       integer(c_int) function iMOAB_WriteMappingWeightsToFile(pid_intersection, solution_weights_identifier,  &
00500                                                   remap_weights_filename) bind(C, name='iMOAB_WriteMappingWeightsToFile')
00501         use, intrinsic :: iso_c_binding, only: c_int, c_char
00502         integer(c_int), intent(in) :: pid_intersection
00503         character(kind=c_char), intent(in) :: solution_weights_identifier(*)
00504         character(kind=c_char), intent(in) :: remap_weights_filename(*)
00505       end function iMOAB_WriteMappingWeightsToFile
00506 
00507 ! closing endif: MOAB_HAVE_NETCDF
00508 #endif
00509 
00510       integer(c_int) function iMOAB_ComputeScalarProjectionWeights(pid_intersection, solution_weights_identifier, &
00511                                                                   disc_method_source, disc_order_source, &
00512                                                                   disc_method_target, disc_order_target, &
00513                                                                   fNoBubble, fMonotoneTypeID, fVolumetric, &
00514                                                                   fInverseDistanceMap, fNoConservation, fValidate, &
00515                                                                   source_solution_tag_dof_name, target_solution_tag_dof_name) &
00516                                                                   bind(C, name='iMOAB_ComputeScalarProjectionWeights')
00517         use, intrinsic :: iso_c_binding, only: c_int, c_char
00518         integer(c_int), intent(in) :: pid_intersection
00519         character(kind=c_char), intent(in) :: solution_weights_identifier(*)
00520         character(kind=c_char), intent(in) :: disc_method_source(*)
00521         integer(c_int), intent(in) :: disc_order_source
00522         character(kind=c_char), intent(in) :: disc_method_target(*)
00523         integer(c_int), intent(in) :: disc_order_target
00524         integer(c_int), intent(in) :: fNoBubble
00525         integer(c_int), intent(in) :: fMonotoneTypeID
00526         integer(c_int), intent(in) :: fVolumetric
00527         integer(c_int), intent(in) :: fInverseDistanceMap
00528         integer(c_int), intent(in) :: fNoConservation
00529         integer(c_int), intent(in) :: fValidate
00530         character(kind=c_char), intent(in) :: source_solution_tag_dof_name(*)
00531         character(kind=c_char), intent(in) :: target_solution_tag_dof_name(*)
00532       end function iMOAB_ComputeScalarProjectionWeights
00533 
00534       integer(c_int) function iMOAB_ApplyScalarProjectionWeights(pid_intersection, solution_weights_identifier, &
00535                                                                 source_solution_tag_name, target_solution_tag_name) &
00536                                                                 bind(C, name='iMOAB_ApplyScalarProjectionWeights')
00537         use, intrinsic :: iso_c_binding, only: c_int, c_char
00538         integer(c_int), intent(in) :: pid_intersection
00539         character(kind=c_char), intent(in) :: solution_weights_identifier(*)
00540         character(kind=c_char), intent(in) :: source_solution_tag_name(*)
00541         character(kind=c_char), intent(in) :: target_solution_tag_name(*)
00542       end function iMOAB_ApplyScalarProjectionWeights
00543 
00544 ! closing endif: MOAB_HAVE_TEMPESTREMAP
00545 #endif
00546 
00547 #ifdef MOAB_HAVE_MPI
00548 
00549 ! Add some helper MPI converter functions
00550 
00551       ! Convert a C-based MPI-Comm handle to fortran
00552       integer function iMOAB_MPI_Comm_c2f(c_handle) bind(C, name="MOAB_MPI_Comm_c2f")
00553         use, intrinsic :: iso_c_binding, only: c_ptr
00554         type(c_ptr), value :: c_handle
00555       end function
00556 
00557       ! Convert a Fortran-based MPI-integer handle to MPI-Comm pointer
00558       type(c_ptr) function iMOAB_MPI_Comm_f2c(f_handle) bind(C, name="MOAB_MPI_Comm_f2c")
00559         use, intrinsic :: iso_c_binding, only: c_ptr
00560         integer, intent(in) :: f_handle
00561       end function
00562 
00563       ! Convert a C-based MPI-Group handle to fortran
00564       integer function iMOAB_MPI_Group_c2f(c_handle) bind(C, name="MOAB_MPI_Group_c2f")
00565         use, intrinsic :: iso_c_binding, only: c_ptr
00566         type(c_ptr), value :: c_handle
00567       end function
00568 
00569       ! Convert a Fortran-based MPI-integer handle to MPI-Group pointer
00570       type(c_ptr) function iMOAB_MPI_Group_f2c(f_handle) bind(C, name="MOAB_MPI_Group_f2c")
00571         use, intrinsic :: iso_c_binding, only: c_ptr
00572         integer, intent(in) :: f_handle
00573       end function
00574 
00575 #endif
00576 
00577    end interface
00578 
00579 end module iMOAB
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines