From 8a6c57ddf47c9573e917e71d26214c1f1ad41f79 Mon Sep 17 00:00:00 2001
From: Juan Escobar <escj@aero.obs-mip.fr>
Date: Fri, 27 Sep 2019 18:26:37 +0200
Subject: [PATCH] Juan 27/09/2019: add stand-one compile_tensor script for
 manage+mumticore & manage use mpi via MNH key , collapse on nvidia only not
 multicore

---
 .../communication.f90                         |  7 ++-
 .../conjugategradient.f90                     |  5 +-
 tensorproductmultigrid_Source/datatypes.f90   |  7 ++-
 .../discretisation.f90                        | 41 ++++++++++++-----
 tensorproductmultigrid_Source/messages.f90    |  5 +-
 tensorproductmultigrid_Source/mg_main.f90     |  5 +-
 tensorproductmultigrid_Source/mg_main_mnh.f90 |  7 ++-
 tensorproductmultigrid_Source/mode_mg.f90     |  7 ++-
 .../mode_mg_read_param.f90                    | 46 +++++++++++++++----
 tensorproductmultigrid_Source/multigrid.f90   |  9 ++--
 tensorproductmultigrid_Source/timer.f90       |  5 +-
 11 files changed, 108 insertions(+), 36 deletions(-)

diff --git a/tensorproductmultigrid_Source/communication.f90 b/tensorproductmultigrid_Source/communication.f90
index e362a6f2d..b7b1fef01 100644
--- a/tensorproductmultigrid_Source/communication.f90
+++ b/tensorproductmultigrid_Source/communication.f90
@@ -37,9 +37,12 @@
 module communication
   use messages
   use datatypes
-  use parameters
-  !use mpi
+
+#ifndef MNH
+  use mpi
+#else
   use modd_mpif
+#endif   
   use timer
 
   implicit none
diff --git a/tensorproductmultigrid_Source/conjugategradient.f90 b/tensorproductmultigrid_Source/conjugategradient.f90
index 320e272c9..30277d862 100644
--- a/tensorproductmultigrid_Source/conjugategradient.f90
+++ b/tensorproductmultigrid_Source/conjugategradient.f90
@@ -40,8 +40,11 @@ module conjugategradient
   use discretisation
   use messages
   use communication
-  !use mpi
+#ifndef MNH
+  use mpi
+#else
   use modd_mpif
+#endif
 
   implicit none
 
diff --git a/tensorproductmultigrid_Source/datatypes.f90 b/tensorproductmultigrid_Source/datatypes.f90
index ef71df25c..7f7c6eab0 100644
--- a/tensorproductmultigrid_Source/datatypes.f90
+++ b/tensorproductmultigrid_Source/datatypes.f90
@@ -39,8 +39,11 @@
 
 module datatypes
 
-  !use mpi
+#ifndef MNH
+  use mpi
+#else
   use modd_mpif
+#endif  
   use parameters
   use messages
 
@@ -341,7 +344,7 @@ private
        
        if (LUseT) then
           zphi_st => phi%st
-          !$acc kernels loop collapse(3)
+          !$acc kernels loop dtype(nvidia) collapse(3)
           do iz=1,nz
              do iy=1,nlocaly
                 do ix=1,nlocalx
diff --git a/tensorproductmultigrid_Source/discretisation.f90 b/tensorproductmultigrid_Source/discretisation.f90
index a42888a1d..9fa41dd27 100644
--- a/tensorproductmultigrid_Source/discretisation.f90
+++ b/tensorproductmultigrid_Source/discretisation.f90
@@ -65,8 +65,11 @@ module discretisation
   use messages
   use datatypes
   use communication
-  !use mpi
+#ifndef MNH
+  use mpi
+#else
   use modd_mpif
+#endif 
 
   implicit none
 
@@ -631,9 +634,10 @@ end subroutine construct_vertical_coeff
     real(kind=rl) :: tmp
     integer :: iib,iie,ijb,ije
 
-    real, dimension(:,:,:) , pointer :: zv_st , zu_st
-    real, dimension(:)     , pointer :: za_k, zb_k, zc_k, zd_k
+    real(kind=rl), dimension(:,:,:) , pointer :: zv_st , zu_st  
+    real(kind=rl), dimension(:)     , pointer :: za_k, zb_k, zc_k, zd_k
     integer :: ii,ij
+    integer :: ize
 
     call boundary_mnh(u)
 
@@ -676,22 +680,29 @@ end subroutine construct_vertical_coeff
        iie=u%icompx_max
        ijb=u%icompy_min
        ije=u%icompy_max
+       ize=u%grid_param%nz
        !
        zv_st => v%st
        zu_st => u%st
        zb_k => vert_coeff%b
        zc_k => vert_coeff%c
        zd_k => vert_coeff%d
-
-       !$acc kernels
+    
+       !$acc kernels 
        iz=1
-       zv_st(iib:iie,ijb:ije,iz) = zd_k(iz)* ( (-zb_k(iz)-zc_k(iz))*Tij * zu_st(iib:iie,ijb:ije,iz  )  &
-                                               +zb_k(iz)          *Tij * zu_st(iib:iie,ijb:ije,iz+1)  )
+       !$acc loop independent dtype(nvidia) collapse(2)
+       do ij=ijb,ije
+          do ii=iib,iie
+             zv_st(ii,ij,iz)   = zd_k(iz)* ( (-zb_k(iz)-zc_k(iz))*Tij * zu_st(ii,ij,iz  )  &
+                                              +zb_k(iz)          *Tij * zu_st(ii,ij,iz+1)  )
+          end do
+       end do
        !
-       do iz=2,u%grid_param%nz-1    
+       do iz=2,ize-1
+          !$acc loop independent dtype(nvidia) collapse(2)
           do ij=ijb,ije
              do ii=iib,iie
-                zv_st(ii,ij,iz) = zd_k(iz)*  ( ((-zb_k(iz)-zc_k(iz))*Tij - 4.0_rl ) * zu_st(ii,ij,iz)    &
+                zv_st(ii,ij,iz) = zd_k(iz)* ( ((-zb_k(iz)-zc_k(iz))*Tij - 4.0_rl ) * zu_st(ii,ij,iz)    &
                                                 +zb_k(iz)          *Tij            * zu_st(ii,ij,iz+1)  &
                                                          +zc_k(iz) *Tij            * zu_st(ii,ij,iz-1)  &
                                            +                                         zu_st(ii+1,ij,iz) &
@@ -703,9 +714,15 @@ end subroutine construct_vertical_coeff
           end do
        end do
        !
-       iz=u%grid_param%nz        
-       zv_st(iib:iie,ijb:ije,iz) = zd_k(iz)*  (  (-zb_k(iz)-zc_k(iz))*Tij  * zu_st(iib:iie,ijb:ije,iz)    &
-                                                          +zc_k(iz) *Tij  * zu_st(iib:iie,ijb:ije,iz-1)  )
+       iz=ize
+       !$acc loop independent dtype(nvidia) collapse(2)
+       do ij=ijb,ije
+          do ii=iib,iie
+             zv_st(ii,ij,iz) = zd_k(iz)*  (  (-zb_k(iz)-zc_k(iz))*Tij  * zu_st(ii,ij,iz)    &
+                                                       +zc_k(iz) *Tij  * zu_st(ii,ij,iz-1)  )
+          end do
+       end do
+
        !$acc end kernels
     endif
     
diff --git a/tensorproductmultigrid_Source/messages.f90 b/tensorproductmultigrid_Source/messages.f90
index ce0fd76c3..7b4345777 100644
--- a/tensorproductmultigrid_Source/messages.f90
+++ b/tensorproductmultigrid_Source/messages.f90
@@ -36,8 +36,11 @@
 module messages
 
   use parameters
-  !use mpi
+#ifndef MNH
+  use mpi
+#else
   use modd_mpif
+#endif  
 
   implicit none
 
diff --git a/tensorproductmultigrid_Source/mg_main.f90 b/tensorproductmultigrid_Source/mg_main.f90
index 2ce0607a8..a97d51b49 100644
--- a/tensorproductmultigrid_Source/mg_main.f90
+++ b/tensorproductmultigrid_Source/mg_main.f90
@@ -51,8 +51,11 @@ program mg_main
   use messages
   use communication
   use timer
-  !use mpi
+#ifndef MNH
+  use mpi
+#else
   use modd_mpif
+#endif
 
   use mode_mg_read_param
   use mode_mg
diff --git a/tensorproductmultigrid_Source/mg_main_mnh.f90 b/tensorproductmultigrid_Source/mg_main_mnh.f90
index 4263ea443..cbe833f9a 100644
--- a/tensorproductmultigrid_Source/mg_main_mnh.f90
+++ b/tensorproductmultigrid_Source/mg_main_mnh.f90
@@ -51,8 +51,11 @@ module mode_mg_main_mnh
   use messages
   use communication
   use timer
-  !use mpi
+#ifndef MNH
+  use mpi
+#else
   use modd_mpif
+#endif
 
   use mode_mg_read_param
   use mode_mg
@@ -143,7 +146,7 @@ end subroutine mg_main_get_u_mnh
 
     call  mg_main_mnh_init()
 
-    DO it=1,10
+    DO it=1,1
        
        call mg_main_initialise_rhs_mnh()
        call mg_main_initialise_u_mnh()
diff --git a/tensorproductmultigrid_Source/mode_mg.f90 b/tensorproductmultigrid_Source/mode_mg.f90
index c388cee40..806825f1b 100644
--- a/tensorproductmultigrid_Source/mode_mg.f90
+++ b/tensorproductmultigrid_Source/mode_mg.f90
@@ -8,8 +8,11 @@ module mode_mg
  use solver
  use parameters
  use timer
- !use mpi
- use modd_mpif
+#ifndef MNH
+  use mpi
+#else
+  use modd_mpif
+#endif
  use profiles
 
  use mode_mg_read_param
diff --git a/tensorproductmultigrid_Source/mode_mg_read_param.f90 b/tensorproductmultigrid_Source/mode_mg_read_param.f90
index 87b1ae7f2..63c7f5ff7 100644
--- a/tensorproductmultigrid_Source/mode_mg_read_param.f90
+++ b/tensorproductmultigrid_Source/mode_mg_read_param.f90
@@ -36,8 +36,11 @@ subroutine read_general_parameters(filename,savefields_out)
   use parameters
   use communication
   use messages
-  !use mpi
+#ifndef MNH
+  use mpi
+#else
   use modd_mpif
+#endif 
   implicit none
   character(*), intent(in) :: filename
   logical, intent(out) :: savefields_out
@@ -68,8 +71,11 @@ subroutine read_solver_parameters(filename,solver_param_out)
   use parameters
   use communication
   use messages
-  !use mpi
+#ifndef MNH
+  use mpi
+#else
   use modd_mpif
+#endif
   implicit none
   character(*), intent(in) :: filename
   type(solver_parameters), intent(out) :: solver_param_out
@@ -121,8 +127,11 @@ subroutine read_grid_parameters_mnh(filename,grid_param,KN,KNZ,PL,PH)
   use datatypes
   use communication
   use messages
-  !use mpi
+#ifndef MNH
+  use mpi
+#else
   use modd_mpif
+#endif 
   implicit none
   character(*), intent(in) :: filename
   type(grid_parameters), intent(out) :: grid_param
@@ -193,8 +202,12 @@ subroutine read_grid_parameters(filename,grid_param)
   use datatypes
   use communication
   use messages
-  !use mpi
+#ifndef MNH
+  use mpi
+#else
   use modd_mpif
+#endif
+  
   implicit none
   character(*), intent(in) :: filename
   type(grid_parameters), intent(out) :: grid_param
@@ -251,8 +264,11 @@ subroutine read_comm_parameters(filename,comm_param)
   use parameters
   use communication
   use messages
-  !use mpi
+#ifndef MNH
+  use mpi
+#else
   use modd_mpif
+#endif 
   implicit none
   character(*), intent(in) :: filename
   type(comm_parameters), intent(out) :: comm_param
@@ -290,8 +306,11 @@ subroutine read_model_parameters(filename,model_param)
   use discretisation
   use communication
   use messages
-  !use mpi
+#ifndef MNH
+  use mpi
+#else
   use modd_mpif
+#endif 
   implicit none
   character(*), intent(in) :: filename
   type(model_parameters), intent(out) :: model_param
@@ -328,8 +347,11 @@ subroutine read_smoother_parameters(filename,smoother_param)
   use discretisation
   use communication
   use messages
-  !use mpi
+#ifndef MNH
+  use mpi
+#else
   use modd_mpif
+#endif
   implicit none
   character(*), intent(in) :: filename
   type(smoother_parameters), intent(out) :: smoother_param
@@ -393,8 +415,11 @@ subroutine read_multigrid_parameters(filename,mg_param)
   use multigrid
   use communication
   use messages
-  !use mpi
+#ifndef MNH
+  use mpi
+#else
   use modd_mpif
+#endif 
   implicit none
   character(*), intent(in) :: filename
   type(mg_parameters), intent(out) :: mg_param
@@ -493,8 +518,11 @@ subroutine read_conjugategradient_parameters(filename,cg_param)
   use conjugategradient
   use communication
   use messages
-  !use mpi
+#ifndef MNH
+  use mpi
+#else
   use modd_mpif
+#endif 
   implicit none
   character(*), intent(in) :: filename
   type(cg_parameters), intent(out) :: cg_param
diff --git a/tensorproductmultigrid_Source/multigrid.f90 b/tensorproductmultigrid_Source/multigrid.f90
index 2a594d28e..d00404df2 100644
--- a/tensorproductmultigrid_Source/multigrid.f90
+++ b/tensorproductmultigrid_Source/multigrid.f90
@@ -36,8 +36,11 @@
 !==================================================================
 module multigrid
 
-  !use mpi
+#ifndef MNH
+  use mpi
+#else
   use modd_mpif
+#endif
   use parameters
   use datatypes
   use discretisation
@@ -483,7 +486,7 @@ contains
       if (LUseT) then 
          zphifine_st => phifine%st
          zphicoarse_st => phicoarse%st
-         !$acc kernels loop independent collapse(3)
+         !$acc kernels loop independent dtype(nvidia) collapse(3)
          do iz=1,phicoarse%grid_param%nz
             do iy=iy_min,iy_max
                do ix=ix_min,ix_max
@@ -807,7 +810,7 @@ contains
          zphifine_st => phifine%st
          zphicoarse_st => phicoarse%st
 
-         !$acc kernels loop independent collapse(5)
+         !$acc kernels loop independent dtype(nvidia) collapse(5)
          do iz=1,phicoarse%grid_param%nz 
             do diy = -1,0
                do dix = -1,0
diff --git a/tensorproductmultigrid_Source/timer.f90 b/tensorproductmultigrid_Source/timer.f90
index 6966c9bb8..da0f17907 100644
--- a/tensorproductmultigrid_Source/timer.f90
+++ b/tensorproductmultigrid_Source/timer.f90
@@ -36,8 +36,11 @@
 
 module timer
 
-  !use mpi
+#ifndef MNH
+  use mpi
+#else
   use modd_mpif
+#endif 
   use parameters
 
   implicit none
-- 
GitLab