Mesh Oriented datABase
(version 5.4.1)
Array-based unstructured mesh datastructure
|
00001 ! MOAB structured mesh extension test 00002 ! 00003 ! This test also tests fortran free-source format 00004 ! 00005 00006 #define ERROR(rval) if (0 .ne. rval) call exit(1) 00007 00008 real function reinterpret_ptr(xm, ni, nj, nk) 00009 integer ni, nj, nk 00010 real xm(ni, nj, nk) 00011 00012 reinterpret_ptr = 0.0 00013 do 10 k = 1, nk 00014 do 10 j = 1, nj 00015 do 10 i = 1, ni 00016 reinterpret_ptr = reinterpret_ptr + xm(i, j, k) 00017 10 continue 00018 return 00019 end 00020 00021 program ScdMesh 00022 implicit none 00023 integer comm1, mysize,myproc,ier 00024 #include "iMesh_f.h" 00025 iMesh_Instance mesh 00026 iBase_EntitySetHandle handle 00027 iBase_EntityHandle root_set 00028 iBase_TagHandle tagh 00029 iBase_EntityArrIterator iter 00030 integer local_dims(6),global_dims(6) 00031 integer geom_dim,num_regions, num_verts, num_quads, count 00032 integer*8 rpxm1 00033 integer i 00034 real rsum 00035 !real, dimension(:) :: xm 00036 real xm 00037 pointer (rpxm1, xm(*)) 00038 real reinterpret_ptr 00039 00040 ! declarations 00041 00042 ! create the Mesh instance 00043 00044 local_dims(1)=0 00045 local_dims(2)=0 00046 local_dims(3)=-1 00047 local_dims(4)=64 00048 local_dims(5)=64 00049 local_dims(6)=-1 00050 00051 global_dims(1)=0 00052 global_dims(2)=0 00053 global_dims(3)=-1 00054 global_dims(4)=64 00055 global_dims(5)=64 00056 global_dims(6)=-1 00057 00058 call iMesh_newMesh('MOAB', mesh, ier) 00059 ERROR(ier) 00060 00061 handle = 0 00062 call iMesh_createStructuredMesh(%VAL(mesh), local_dims, 00063 1 global_dims, %VAL(0),%VAL(0),%VAL(0), %VAL(1), %VAL(-1), 00064 1 %VAL(-1), %VAL(-1), %VAL(0), %VAL(1), %VAL(1), handle, ier) 00065 ERROR(ier) 00066 00067 call iMesh_getRootSet(%VAL(mesh), root_set, ier) 00068 ERROR(ier) 00069 00070 call iMesh_getGeometricDimension(%VAL(mesh), geom_dim, ier) 00071 ERROR(ier) 00072 00073 call iMesh_getNumOfType(%VAL(mesh), %VAL(root_set), 00074 1 %VAL(iBase_FACE), num_quads, ier) 00075 ERROR(ier) 00076 00077 call iMesh_getNumOfType(%VAL(mesh), %VAL(root_set), 00078 1 %VAL(iBase_VERTEX), num_verts, ier) 00079 ERROR(ier) 00080 00081 00082 call iMesh_initEntArrIter(%VAL(mesh), %VAL(root_set), 00083 1 %VAL(iBase_FACE), %VAL(iMesh_QUADRILATERAL),%VAL(num_quads), 00084 1 %VAL(0), iter, ier) 00085 00086 call iMesh_createTagWithOptions(%VAL(mesh), "XM1", 00087 1 "moab:TAG_STORAGE_TYPE=DENSE; moab:TAG_DEFAULT_VALUE=0.0", 00088 1 %VAL(5), %VAL(iBase_DOUBLE), tagh, ier) 00089 00090 call iMesh_tagIterate(%VAL(mesh),%VAL(tagh),%VAL(iter),rpxm1, 00091 1 count,ier) 00092 00093 call iMesh_endEntArrIter(%VAL(mesh), %VAL(iter), ier) 00094 ERROR(ier) 00095 00096 do 20 i = 1, 5*64*64 00097 xm(i) = 1.0 00098 20 continue 00099 00100 rsum = reinterpret_ptr(xm, 5, 64, 64) 00101 00102 call iMesh_dtor(%VAL(mesh), ier) 00103 ERROR(ier) 00104 00105 if (rsum .ne. 5*64*64) call exit(1) 00106 00107 call exit(0) 00108 end