00001 
00002        include 'idxlf.h'
00003        
00004        integer, parameter :: FEM_BYTE=IDXL_BYTE
00005        integer, parameter :: FEM_INT=IDXL_INT
00006        integer, parameter :: FEM_REAL=IDXL_REAL
00007        integer, parameter :: FEM_DOUBLE=IDXL_DOUBLE
00008 
00009        integer, parameter :: FEM_SUM=IDXL_SUM
00010        integer, parameter :: FEM_PROD=IDXL_PROD
00011        integer, parameter :: FEM_MAX=IDXL_MAX
00012        integer, parameter :: FEM_MIN=IDXL_MIN
00013 
00014        integer, parameter :: FEM_MESH_OUTPUT=0
00015        integer, parameter :: FEM_MESH_UPDATE=1
00016        integer, parameter :: FEM_MESH_FINALIZE=2
00017 
00018        integer, parameter :: FEM_TRIANGULAR=3
00019        integer, parameter :: FEM_TETRAHEDRAL=4
00020        integer, parameter :: FEM_HEXAHEDRAL=8
00021        integer, parameter :: FEM_QUADRILATERAL=4
00022        
00023        integer, parameter :: FEM_ENTITY_FIRST=1610000000
00024        integer, parameter :: FEM_NODE=(FEM_ENTITY_FIRST+0)
00025        integer, parameter :: FEM_ELEM=(FEM_ENTITY_FIRST+1000)
00026        integer, parameter :: FEM_ELEMENT=FEM_ELEM
00027        integer, parameter :: FEM_SPARSE=(FEM_ENTITY_FIRST+2000)
00028        integer, parameter :: FEM_EDGE=FEM_SPARSE
00029        integer, parameter :: FEM_FACE=FEM_SPARSE
00030        integer, parameter :: FEM_GHOST=10000
00031        
00032        integer, parameter :: FEM_DATA=0
00033        integer, parameter :: FEM_ATTRIB_TAG_MAX=1000000000
00034        integer, parameter :: FEM_ATTRIB_FIRST=1620000000
00035        integer, parameter :: FEM_CONN=(FEM_ATTRIB_FIRST+1)
00036        integer, parameter :: FEM_CONNECTIVITY=FEM_CONN
00037        integer, parameter :: FEM_SPARSE_ELEM=(FEM_ATTRIB_FIRST+2)
00038        integer, parameter :: FEM_COOR=(FEM_ATTRIB_FIRST+3)
00039        integer, parameter :: FEM_COORD=FEM_COOR
00040        integer, parameter :: FEM_COORDINATES=FEM_COOR
00041        integer, parameter :: FEM_GLOBALNO=(FEM_ATTRIB_FIRST+4)
00042        integer, parameter :: FEM_PARTITION=(FEM_ATTRIB_FIRST+5)
00043        integer, parameter :: FEM_SYMMETRIES=(FEM_ATTRIB_FIRST+6)
00044        integer, parameter :: FEM_NODE_PRIMARY=(FEM_ATTRIB_FIRST+7)
00045        integer, parameter :: FEM_CHUNK=(FEM_ATTRIB_FIRST+8)
00046        integer, parameter :: FEM_BOUNDARY=(FEM_ATTRIB_FIRST+9)
00047        integer, parameter :: FEM_NODE_ELEM_ADJACENCY=(FEM_ATTRIB_FIRST+10)
00048        integer, parameter :: FEM_NODE_NODE_ADJACENCY=(FEM_ATTRIB_FIRST+11)
00049        integer, parameter :: FEM_ELEM_ELEM_ADJACENCY=(FEM_ATTRIB_FIRST+12)
00050        integer, parameter :: FEM_ELEM_ELEM_ADJ_TYPES=(FEM_ATTRIB_FIRST+13)
00051 !      integer, parameter :: FEM_IS_VALID_ATTR=(FEM_ATTRIB_FIRST+14)         
00052        integer, parameter :: FEM_MESH_SIZING=(FEM_ATTRIB_FIRST+15)
00053        integer, parameter :: FEM_INDEX_0=IDXL_INDEX_0
00054        integer, parameter :: FEM_INDEX_1=IDXL_INDEX_1
00055 
00056 
00057        external FEM_Print
00058        
00059        external FEM_Mesh_set_conn
00060        external FEM_Mesh_get_conn
00061        external FEM_Mesh_conn
00062        external FEM_Mesh_set_data
00063        external FEM_Mesh_get_data
00064        external FEM_Mesh_data
00065        external FEM_Mesh_data_layout
00066        external FEM_Mesh_data_offset
00067        external FEM_Mesh_pup
00068        
00069        external FEM_Set_mesh
00070 
00071        external FEM_Set_node
00072        external FEM_Get_node
00073        external FEM_Set_elem
00074        external FEM_Get_elem
00075        external FEM_Set_elem_conn_r
00076        external FEM_Get_elem_conn_r
00077        external FEM_Set_node_data_r
00078        external FEM_Get_node_data_r
00079        external FEM_Set_elem_data_r
00080        external FEM_Get_elem_data_r
00081        
00082        external FEM_Set_sparse
00083        external FEM_Set_sparse_elem
00084        external FEM_Get_sparse
00085 
00086        external FEM_Add_linear_periodicity
00087        external FEM_Sym_coordinates
00088 
00089        external FEM_Set_sym_nodes
00090        external FEM_Get_sym
00091 
00092        external FEM_Set_partition
00093 
00094        external FEM_Add_ghost_layer
00095        external FEM_Add_ghost_elem
00096        external FEM_Add_ghost_stencil
00097        external FEM_Add_ghost_stencil_type
00098 
00099        external FEM_Get_Comm_Nodes
00100 
00101        external FEM_Reduce_field
00102        external FEM_Reduce
00103        external FEM_Update_field
00104        external FEM_Update_ghost_field
00105        external FEM_Read_field
00106        integer, external :: foffsetof
00107 
00108        external FEM_Barrier
00109        external FEM_Get_ghost_list
00110 
00111        integer, external :: FEM_Register
00112        external FEM_Migrate 
00113        external FEM_Async_Migrate
00114 
00115        external FEM_Update_mesh
00116 
00117        external FEM_Add_elem2face_tuples
00118 
00119        interface
00120        
00121        subroutine FEM_Init(comm) 
00122            integer,intent(in) :: comm
00123        end subroutine
00124        integer function FEM_My_partition()
00125        end function
00126        integer function FEM_Num_partitions()
00127        end function 
00128        double precision function FEM_Timer()
00129        end function
00130        subroutine FEM_Done()
00131        end subroutine
00132        subroutine FEM_Print_partition()
00133        end subroutine
00134        subroutine FEM_Mesh_print(mesh)
00135           integer, intent(in) :: mesh
00136        end subroutine
00137        
00138        integer function FEM_Mesh_allocate()
00139        end function
00140        integer function FEM_Mesh_copy(mesh)
00141           integer, intent(in) :: mesh
00142        end function
00143        subroutine FEM_Mesh_deallocate(mesh) 
00144           integer, intent(in) :: mesh
00145        end subroutine
00146        
00147        integer function FEM_Mesh_read(prefix,partNo,nParts)
00148           integer, intent(in) :: partNo,nParts
00149           character (LEN=*), intent(in) :: prefix
00150        end function
00151        subroutine FEM_Mesh_write(mesh,prefix,partNo,nParts) 
00152           integer, intent(in) :: mesh
00153           integer, intent(in) :: partNo,nParts
00154           character (LEN=*), intent(in) :: prefix
00155        end subroutine
00156        
00157        integer function FEM_Mesh_assemble(nParts,parts)
00158           integer, intent(in) :: nParts
00159           integer, intent(in) :: parts(nParts)
00160        end function
00161        subroutine FEM_Mesh_partition(mesh,nParts,parts) 
00162           integer, intent(in) :: mesh
00163           integer, intent(in) :: nParts
00164           integer, intent(out) :: parts(nParts)
00165        end subroutine
00166        
00167        integer function FEM_Mesh_recv(source,tag,comm)
00168           integer, intent(in) :: source,tag,comm
00169        end function
00170        subroutine FEM_Mesh_send(mesh,source,tag,comm) 
00171           integer, intent(in) :: mesh
00172           integer, intent(in) :: source,tag,comm
00173        end subroutine
00174        
00175        integer function FEM_Mesh_reduce(mesh,master,comm)
00176           integer, intent(in) :: mesh
00177           integer, intent(in) :: master,comm
00178        end function
00179        integer function FEM_Mesh_broadcast(mesh,master,comm) 
00180           integer, intent(in) :: mesh
00181           integer, intent(in) :: master,comm
00182        end function
00183        
00184        
00185        integer function FEM_Mesh_default_read()
00186        end function
00187        integer function FEM_Mesh_default_write()
00188        end function
00189        subroutine FEM_Mesh_set_default_read(mesh)
00190          integer, intent(in) :: mesh
00191        end subroutine
00192        subroutine FEM_Mesh_set_default_write(mesh)
00193          integer, intent(in) :: mesh
00194        end subroutine
00195        
00196        function FEM_Mesh_get_length(mesh,ent)
00197          integer, intent(in) :: mesh,ent
00198          integer :: FEM_Mesh_get_length
00199        end function
00200        subroutine FEM_Mesh_set_length(mesh,ent,newLength)
00201          integer, intent(in) :: mesh,ent,newLength
00202        end subroutine
00203        function FEM_Mesh_get_width(mesh,ent)
00204          integer, intent(in) :: mesh,ent
00205          integer :: FEM_Mesh_get_width
00206        end function
00207        subroutine FEM_Mesh_set_width(mesh,ent,attr,newWidth)
00208          integer, intent(in) :: mesh,ent,attr,newWidth
00209        end subroutine
00210        function FEM_Mesh_get_datatype(mesh,ent,attr)
00211          integer, intent(in) :: mesh,ent,attr
00212          integer :: FEM_Mesh_get_datatype
00213        end function
00214        
00215        integer function FEM_Mesh_get_entities(mesh,entities)
00216          integer, intent(in) :: mesh
00217          integer, intent(out) :: entities(:)
00218        end function
00219        integer function FEM_Mesh_get_attributes(mesh,entity,attrs)
00220          integer, intent(in) :: mesh, entity
00221          integer, intent(out) :: attrs(:)
00222        end function
00223        
00224        
00225        function FEM_Create_simple_field(base_type, vec_len)
00226           integer, intent(in)  :: base_type, vec_len
00227           integer  :: FEM_Create_Simple_Field
00228        end function 
00229        
00230        function FEM_Create_field(base_type, vec_len, init_offset, distance)
00231           integer, intent(in)  :: base_type, vec_len, init_offset, distance
00232           integer  :: FEM_Create_Field
00233        end function 
00234        
00235        function FEM_Comm_shared(mesh,ent)
00236           integer, intent(in)  :: mesh,ent
00237           integer  :: FEM_Comm_shared
00238        end function 
00239        function FEM_Comm_ghost(mesh,ent)
00240           integer, intent(in)  :: mesh,ent
00241           integer  :: FEM_Comm_ghost
00242        end function 
00243        
00244        function FEM_Get_node_ghost()
00245          integer :: FEM_Get_node_ghost
00246        end function
00247        function FEM_Get_elem_ghost(elemType)
00248          integer, intent(in) :: elemType
00249          integer :: FEM_Get_elem_ghost
00250        end function    
00251 
00252        subroutine FEM_Exchange_ghost_lists(elemType,nIdx,localIdx)
00253          integer,intent (in) :: elemType,nIdx
00254          integer, intent(in) :: localIdx(nIdx)
00255        end subroutine
00256 
00257        function FEM_Get_ghost_list_length()
00258          integer :: FEM_Get_ghost_list_length
00259        end function
00260 
00261        function FEM_Get_sparse_length(sID)
00262          integer :: FEM_Get_sparse_length
00263          integer, intent(in) ::sID
00264        end function
00265 
00266        subroutine FEM_Serial_split(nChunk)
00267          integer,intent (in) :: nChunk
00268        end subroutine
00269        subroutine FEM_Serial_begin(chunk)
00270          integer,intent (in) :: chunk
00271        end subroutine
00272        subroutine FEM_Serial_read(chunk,nChunks)
00273          integer,intent (in) :: chunk,nChunks
00274        end subroutine
00275        subroutine FEM_Serial_assemble()
00276        end subroutine
00277        
00278        function FEM_Get_comm_partners()
00279          integer :: FEM_Get_comm_partners
00280        end function
00281        function FEM_Get_comm_partner(partnerNo)
00282          integer, intent(in) :: partnerNo
00283          integer :: FEM_Get_comm_partner
00284        end function
00285        function FEM_Get_comm_count(partnerNo)
00286          integer, intent(in) :: partnerNo
00287          integer :: FEM_Get_comm_count
00288        end function
00289 
00290        subroutine FEM_Get_roccom_pconn_size(mesh,total_len,ghost_len)
00291          integer, intent(in) :: mesh
00292          integer, intent(out) :: total_len,ghost_len
00293        end subroutine
00294 
00295 
00296        subroutine FEM_Mesh_create_node_elem_adjacency(fem_mesh)
00297          integer, intent(in) :: fem_mesh
00298        end subroutine
00299          
00300        subroutine FEM_Mesh_create_node_node_adjacency(fem_mesh)
00301          integer, intent(in) :: fem_mesh
00302        end subroutine
00303          
00304        subroutine FEM_Mesh_create_elem_elem_adjacency(fem_mesh)
00305          integer, intent(in) :: fem_mesh
00306        end subroutine
00307          
00308        subroutine   FEM_Mesh_get2ElementsOnEdge(fem_mesh,n1,n2,e1,e2)
00309          integer, intent(in)  :: fem_mesh, n1, n2
00310          integer, intent(out) :: e1, e2
00311        end subroutine      
00312 
00313        subroutine  FEM_Mesh_allocate_valid_attr(fem_mesh, entity_type)
00314          integer, intent(in)  :: fem_mesh, entity_type
00315        end subroutine   
00316          
00317        integer function  FEM_is_valid(fem_mesh,entityType,entityIdx)
00318          integer, intent(in)  :: fem_mesh, entityType, entityIdx
00319        end function       
00320 
00321        integer function FEM_count_valid(fem_mesh,entityType,entityIdx)
00322          integer, intent(in)  :: fem_mesh, entityType, entityIdx
00323        end function    
00324 
00325        end interface
00326