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