浏览代码

examples/fortran90: set real and integer sizes in the code instead of doing it throught a compiler option

Nathalie Furmento 10 年之前
父节点
当前提交
ac765f9ba4
共有 3 个文件被更改,包括 29 次插入29 次删除
  1. 1 1
      examples/Makefile.am
  2. 4 4
      examples/fortran90/f90_example.f90
  3. 24 24
      examples/fortran90/mod_compute.f90

+ 1 - 1
examples/Makefile.am

@@ -336,7 +336,7 @@ fortran90_f90_example_SOURCES =	\
 	fortran90/marshalling.c		\
 	fortran90/f90_example.f90
 
-fortran90_f90_example_FCFLAGS = -fdefault-real-8 -J$(top_builddir)/examples
+fortran90_f90_example_FCFLAGS = -J$(top_builddir)/examples
 endif
 
 #######################

+ 4 - 4
examples/fortran90/f90_example.f90

@@ -15,7 +15,7 @@
 ! See the GNU Lesser General Public License in COPYING.LGPL for more details.
 
 PROGRAM f90_example
-
+  
   USE mod_types
   USE mod_starpu
   USE mod_interface
@@ -27,9 +27,9 @@ PROGRAM f90_example
   TYPE(type_mesh)                :: mesh
   TYPE(type_numpar)              :: numpar
   TYPE(type_mesh_elt),POINTER    :: elt   => NULL()
-  INTEGER                        :: i,Nelt,res
-  INTEGER                        :: neq,ng,nb,it,it_tot
-  REAL                           :: r, coeff2
+  INTEGER(KIND=C_INT)            :: i,Nelt,res
+  INTEGER(KIND=C_INT)            :: neq,ng,nb,it,it_tot
+  REAL(KIND=C_DOUBLE)            :: r, coeff2
 
   !Initialization with arbitrary data
   Nelt           = 2

+ 24 - 24
examples/fortran90/mod_compute.f90

@@ -27,10 +27,10 @@ CONTAINS
 
   !--------------------------------------------------------------!
   SUBROUTINE init_element(ro,dro,basis,Neq_max,Np,Ng,i)
-    INTEGER,INTENT(IN)                        :: Neq_max,Np,Ng,i
-    REAL,DIMENSION(:,:),POINTER,INTENT(INOUT) :: ro,basis,dro
+    INTEGER(KIND=C_INT),INTENT(IN)                           :: Neq_max,Np,Ng,i
+    REAL(KIND=C_DOUBLE),DIMENSION(:,:),POINTER,INTENT(INOUT) :: ro,basis,dro
     !Local variables
-    INTEGER                                   :: n,nb,neq
+    INTEGER(KIND=C_INT)                                      :: n,nb,neq
 
     DO nb=1,Np
        DO neq= 1,Neq_max
@@ -54,30 +54,30 @@ CONTAINS
 
   !--------------------------------------------------------------!
   SUBROUTINE loop_element_cpu_fortran(coeff,Neq_max,Np,Ng, &
-       &   ro_ptr,dro_ptr,basis_ptr) BIND(C) 
-    INTEGER(KIND=C_INT),VALUE                 :: Neq_max,Np,Ng
-    REAL(KIND=C_DOUBLE),VALUE                 :: coeff
-    TYPE(C_PTR)                               :: ro_ptr,dro_ptr,basis_ptr
-    !Local variables 
-    REAL,DIMENSION(:,:),POINTER               :: ro,dro,basis
+       &   ro_ptr,dro_ptr,basis_ptr) BIND(C)
+    INTEGER(KIND=C_INT),VALUE                  :: Neq_max,Np,Ng
+    REAL(KIND=C_DOUBLE),VALUE                  :: coeff
+    TYPE(C_PTR)                                :: ro_ptr,dro_ptr,basis_ptr
+    !Local variables
+    REAL(KIND=C_DOUBLE),DIMENSION(:,:),POINTER :: ro,dro,basis
 
     CALL C_F_POINTER(ro_ptr,ro,[Neq_max,Np])
     CALL C_F_POINTER(dro_ptr,dro,[Neq_max,Np])
     CALL C_F_POINTER(basis_ptr,basis,[Np,Ng])
-  
+
     CALL loop_element_cpu(ro,dro,basis,coeff,Neq_max,Ng,Np)
 
   END SUBROUTINE loop_element_cpu_fortran
 
   !--------------------------------------------------------------!
   SUBROUTINE loop_element_cpu(ro,dro,basis,coeff,Neq_max,Ng,Np)
-    REAL,INTENT(IN)                           :: coeff
-    INTEGER,INTENT(IN)                        :: Neq_max,Ng,Np
-    REAL,DIMENSION(:,:),POINTER,INTENT(IN)    :: ro,basis
-    REAL,DIMENSION(:,:),POINTER,INTENT(INOUT) :: dro
+    REAL(KIND=C_DOUBLE),INTENT(IN)                           :: coeff
+    INTEGER(KIND=C_INT),INTENT(IN)                           :: Neq_max,Ng,Np
+    REAL(KIND=C_DOUBLE),DIMENSION(:,:),POINTER,INTENT(IN)    :: ro,basis
+    REAL(KIND=C_DOUBLE),DIMENSION(:,:),POINTER,INTENT(INOUT) :: dro
     !Local variables
-    REAL                                      :: coeff2,r
-    INTEGER                                   :: n,nb,neq
+    REAL(KIND=C_DOUBLE)                                      :: coeff2,r
+    INTEGER(KIND=C_INT)                                      :: n,nb,neq
 
     DO n=1,Ng
        r = 0.
@@ -100,23 +100,23 @@ CONTAINS
 
   !--------------------------------------------------------------!
   SUBROUTINE copy_element_cpu_fortran(Neq_max,Np, &
-       &   ro_ptr,dro_ptr) BIND(C) 
-    INTEGER(KIND=C_INT),VALUE                 :: Neq_max,Np
-    TYPE(C_PTR)                               :: ro_ptr,dro_ptr
-    !Local variables 
-    REAL,DIMENSION(:,:),POINTER               :: ro,dro
+       &   ro_ptr,dro_ptr) BIND(C)
+    INTEGER(KIND=C_INT),VALUE                  :: Neq_max,Np
+    TYPE(C_PTR)                                :: ro_ptr,dro_ptr
+    !Local variables
+    REAL(KIND=C_DOUBLE),DIMENSION(:,:),POINTER :: ro,dro
 
     CALL C_F_POINTER(ro_ptr,ro,[Neq_max,Np])
     CALL C_F_POINTER(dro_ptr,dro,[Neq_max,Np])
-  
+
     CALL copy_element_cpu(ro,dro)
 
   END SUBROUTINE copy_element_cpu_fortran
 
   !--------------------------------------------------------------!
   SUBROUTINE copy_element_cpu(ro,dro)
-    REAL,DIMENSION(:,:),POINTER,INTENT(INOUT) :: ro
-    REAL,DIMENSION(:,:),POINTER,INTENT(IN)    :: dro
+    REAL(KIND=C_DOUBLE),DIMENSION(:,:),POINTER,INTENT(INOUT) :: ro
+    REAL(KIND=C_DOUBLE),DIMENSION(:,:),POINTER,INTENT(IN)    :: dro
 
     ro = ro + dro