diff --git a/src/SURFEX/interpol_npts.F90 b/src/SURFEX/interpol_npts.F90 index 1cf360b69b234eae1c2ae8b35684b7c5e9589793..8f3d25e867dcf7d1228eabc9f75626622e820288 100644 --- a/src/SURFEX/interpol_npts.F90 +++ b/src/SURFEX/interpol_npts.F90 @@ -46,7 +46,8 @@ !! Original 03/2004 !! Modification !! B. Decharme 2014 scan all point case if gaussien grid or NHALO = 0 -!! Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O +! P. Wautelet 05/2016-04/2018: new data structures and calls for I/O +! P. Wautelet 26/04/2019: use modd_precision parameters for datatypes of MPI communications !---------------------------------------------------------------------------- ! !* 0. DECLARATION @@ -70,6 +71,8 @@ USE PARKIND1 ,ONLY : JPRB ! #ifdef SFX_MNH USE MODD_IO, ONLY : ISP, ISNPROC, NIO_RANK +use modd_mpif +use modd_precision, only: MNHINT_MPI, MNHREAL_MPI USE MODD_VAR_ll, ONLY : NMNH_COMM_WORLD USE MODE_GATHER_ll USE MODE_TOOLS_ll, ONLY : GET_GLOBALDIMS_ll @@ -80,7 +83,7 @@ USE MODD_IO_SURF_MNH, ONLY : NIU, NJU ! IMPLICIT NONE ! -#if defined(SFX_MPI) || defined(SFX_MNH) +#if defined(SFX_MPI) INCLUDE "mpif.h" #endif ! @@ -206,8 +209,10 @@ ENDIF ! !...known by all tasks IF (NPROC>1) THEN -#if defined(SFX_MPI) || defined(SFX_MNH) +#if defined(SFX_MPI) CALL MPI_BCAST(ISIZE_TOT,IDIM_FULL*KIND(ISIZE_TOT)/4,MPI_INTEGER,NPIO,NCOMM,INFOMPI) +#elif defined(SFX_MNH) + CALL MPI_BCAST(ISIZE_TOT,IDIM_FULL,MNHINT_MPI,NPIO,NCOMM,INFOMPI) #endif ENDIF ! @@ -289,10 +294,10 @@ IF (IOLD==2) THEN DEALLOCATE(ZCOORD_2D,ZCOORD_2D_ALL) ! IF (NPROC>1) THEN - CALL MPI_BCAST(INUM_TOT,IDIM_FULL*KIND(INUM_TOT)/4,MPI_INTEGER,NPIO,NCOMM,INFOMPI) - CALL MPI_BCAST(IINDEX_TOT,IDIM_FULL*KIND(IINDEX_TOT)/4,MPI_INTEGER,NPIO,NCOMM,INFOMPI) - CALL MPI_BCAST(ZX,IDIM_FULL*KIND(ZX)/4,MPI_REAL,NPIO,NCOMM,INFOMPI) - CALL MPI_BCAST(ZY,IDIM_FULL*KIND(ZY)/4,MPI_REAL,NPIO,NCOMM,INFOMPI) + CALL MPI_BCAST(INUM_TOT,IDIM_FULL,MNHINT_MPI,NPIO,NCOMM,INFOMPI) + CALL MPI_BCAST(IINDEX_TOT,IDIM_FULL,MNHINT_MPI,NPIO,NCOMM,INFOMPI) + CALL MPI_BCAST(ZX,IDIM_FULL,MNHREAL_MPI,NPIO,NCOMM,INFOMPI) + CALL MPI_BCAST(ZY,IDIM_FULL,MNHREAL_MPI,NPIO,NCOMM,INFOMPI) ENDIF ! #endif @@ -437,9 +442,11 @@ ALLOCATE(ISIZE(0:NPROC-1)) !numbers of points to interpolated are gathered IF (NPROC>1) THEN -#if defined(SFX_MPI) || defined(SFX_MNH) +#if defined(SFX_MPI) CALL MPI_ALLGATHER(ICPT,KIND(ICPT)/4,MPI_INTEGER,& ISIZE,KIND(ISIZE)/4,MPI_INTEGER,NCOMM,INFOMPI) +#elif defined(SFX_MNH) + CALL MPI_ALLGATHER(ICPT,1,MNHINT_MPI,ISIZE,1,MNHINT_MPI,NCOMM,INFOMPI) #endif ELSE ISIZE(:) = ICPT @@ -474,12 +481,16 @@ ALLOCATE(ININD_ALL(MAXVAL(ISIZE),KNPTS,0:NPROC-1)) IF (NPROC>1) THEN !for each task DO JP=0,NPROC-1 -#if defined(SFX_MPI) || defined(SFX_MNH) +#if defined(SFX_MPI) !inind_all receives from all tasks the points they need that are !located in it CALL MPI_GATHER(ININD0(:,:,JP),MAXVAL(ISIZE)*KNPTS*KIND(ININD0)/4,MPI_INTEGER,& ININD_ALL,MAXVAL(ISIZE)*KNPTS*KIND(ININD_ALL)/4,MPI_INTEGER,& JP,NCOMM,INFOMPI) +#elif defined(SFX_MNH) + CALL MPI_GATHER(ININD0(:,:,JP),MAXVAL(ISIZE)*KNPTS,MNHINT_MPI,& + ININD_ALL, MAXVAL(ISIZE)*KNPTS,MNHINT_MPI,& + JP,NCOMM,INFOMPI) #endif ENDDO ! @@ -514,9 +525,12 @@ DEALLOCATE(ININD_ALL) ALLOCATE(ZFIELD2(ICPT,KNPTS,SIZE(PFIELD,2),0:NPROC-1)) IF (NPROC>1) THEN DO JP=0,NPROC-1 -#if defined(SFX_MPI) || defined(SFX_MNH) +#if defined(SFX_MPI) CALL MPI_GATHER(ZFIELD(1:ISIZE(JP),:,:,JP),SIZE(ZFIELD(1:ISIZE(JP),:,:,JP))*KIND(ZFIELD)/4,MPI_REAL,& ZFIELD2,ISIZE(JP)*KNPTS*SIZE(PFIELD,2)*KIND(ZFIELD2)/4,MPI_REAL,JP,NCOMM,INFOMPI) +#elif defined(SFX_MNH) + CALL MPI_GATHER(ZFIELD(1:ISIZE(JP),:,:,JP),SIZE(ZFIELD(1:ISIZE(JP),:,:,JP)),MNHREAL_MPI,& + ZFIELD2,ISIZE(JP)*KNPTS*SIZE(PFIELD,2),MNHREAL_MPI,JP,NCOMM,INFOMPI) #endif ENDDO ELSE diff --git a/src/SURFEX/make_lcover.F90 b/src/SURFEX/make_lcover.F90 index 32d01144b21e93409c23bb608fc63bf8661fc93e..7cced8572f1a879d4d63591ef6fbc70560dadd1c 100644 --- a/src/SURFEX/make_lcover.F90 +++ b/src/SURFEX/make_lcover.F90 @@ -33,7 +33,8 @@ !! ------------ !! !! Original 10/12/97 -!! Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O +! P. Wautelet 05/2016-04/2018: new data structures and calls for I/O +! P. Wautelet 26/04/2019: use modd_precision parameters for datatypes of MPI communications !! !---------------------------------------------------------------------------- ! @@ -47,12 +48,14 @@ USE PARKIND1 ,ONLY : JPRB ! #ifdef SFX_MNH USE MODD_IO, ONLY : ISP, ISNPROC, NIO_RANK +use modd_mpif +use modd_precision, only: MNHLOG_MPI USE MODD_VAR_ll, ONLY : NMNH_COMM_WORLD #endif ! IMPLICIT NONE ! -#if defined(SFX_MPI) || defined(SFX_MNH) +#if defined(SFX_MPI) INCLUDE "mpif.h" #endif ! @@ -96,9 +99,12 @@ ALLOCATE(GCOVER_ALL(SIZE(OCOVER),0:NPROC-1)) ! ! IF (NPROC>1) THEN -#if defined(SFX_MPI) || defined(SFX_MNH) +#if defined(SFX_MPI) CALL MPI_ALLGATHER(OCOVER,SIZE(OCOVER),MPI_LOGICAL,GCOVER_ALL,SIZE(OCOVER),& MPI_LOGICAL,NCOMM,INFOMPI) +#elif defined(SFX_MNH) + CALL MPI_ALLGATHER(OCOVER,SIZE(OCOVER),MNHLOG_MPI,GCOVER_ALL,SIZE(OCOVER),& + MNHLOG_MPI,NCOMM,INFOMPI) #endif ELSE GCOVER_ALL(:,0) = OCOVER(:) @@ -116,8 +122,10 @@ DEALLOCATE(GCOVER_ALL) ! ! IF (NPROC>1) THEN -#if defined(SFX_MPI) || defined(SFX_MNH) +#if defined(SFX_MPI) CALL MPI_BCAST(OCOVER,SIZE(OCOVER),MPI_LOGICAL,NPIO,NCOMM,INFOMPI) +#elif defined(SFX_MNH) + CALL MPI_BCAST(OCOVER,SIZE(OCOVER),MNHLOG_MPI,NPIO,NCOMM,INFOMPI) #endif ENDIF ! diff --git a/src/SURFEX/mode_gridtype_conf_proj.F90 b/src/SURFEX/mode_gridtype_conf_proj.F90 index 4e88934141e9499651e690231f105ef169a1cd4d..8b908913e824833cd1b94eec7f62becd3ab32033 100644 --- a/src/SURFEX/mode_gridtype_conf_proj.F90 +++ b/src/SURFEX/mode_gridtype_conf_proj.F90 @@ -1,4 +1,4 @@ -!SFX_LIC Copyright 2004-2018 CNRS, Meteo-France and Universite Paul Sabatier +!SFX_LIC Copyright 2004-2019 CNRS, Meteo-France and Universite Paul Sabatier !SFX_LIC This is part of the SURFEX software governed by the CeCILL-C licence !SFX_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt !SFX_LIC for details. version 1. @@ -33,7 +33,8 @@ CONTAINS !! ------------- !! Original 01/2004 !! M.Moge 06/2015 broadcast the space step to all MPI processes (necessary for reproductibility) -!! Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O +! P. Wautelet 05/2016-04/2018: new data structures and calls for I/O +! P. Wautelet 26/04/2019: use modd_precision parameters for datatypes of MPI communications !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -42,7 +43,7 @@ CONTAINS USE MODD_SURF_PAR, ONLY : XUNDEF, NUNDEF #ifdef MNH_PARALLEL USE MODD_MPIF -use modd_precision, only: MNHREAL_MPI +use modd_precision, only: MNHINT_MPI, MNHREAL_MPI USE MODE_SPLITTINGZ_ll, ONLY : LINI_PARAZ USE MODE_TOOLS_ll, ONLY : GET_OR_ll USE MODD_VAR_ll, ONLY : NPROC, IP, NMNH_COMM_WORLD, YSPLITTING @@ -129,24 +130,24 @@ IF ( NPROC > 1 .AND. LINI_PARAZ) THEN IYOR = NUNDEF ENDIF ! get the processes with IL>0 with the westmost points - CALL MPI_ALLREDUCE(IXOR, IXORMIN, 1, MPI_INTEGER, MPI_MIN, NMNH_COMM_WORLD, IINFO_ll) + CALL MPI_ALLREDUCE(IXOR, IXORMIN, 1, MNHINT_MPI, MPI_MIN, NMNH_COMM_WORLD, IINFO_ll) IF ( IXOR == IXORMIN ) THEN IROOT = IP-1 ELSE IROOT = NPROC ENDIF - CALL MPI_ALLREDUCE(IROOT, IROOTPROC, 1, MPI_INTEGER, MPI_MIN, NMNH_COMM_WORLD, IINFO_ll) + CALL MPI_ALLREDUCE(IROOT, IROOTPROC, 1, MNHINT_MPI, MPI_MIN, NMNH_COMM_WORLD, IINFO_ll) ! Then this process broadcasts the space steps in X direction in order to have the same space steps on all processes CALL MPI_BCAST(PGRID_PAR(9), 1, MNHREAL_MPI, IROOTPROC, NMNH_COMM_WORLD, IINFO_ll) ! ! get the processes with IL>0 with the southmost points - CALL MPI_ALLREDUCE(IYOR, IYORMIN, 1, MPI_INTEGER, MPI_MIN, NMNH_COMM_WORLD, IINFO_ll) + CALL MPI_ALLREDUCE(IYOR, IYORMIN, 1, MNHINT_MPI, MPI_MIN, NMNH_COMM_WORLD, IINFO_ll) IF ( IYOR == IYORMIN ) THEN IROOT = IP-1 ELSE IROOT = NPROC ENDIF - CALL MPI_ALLREDUCE(IROOT, IROOTPROC, 1, MPI_INTEGER, MPI_MIN, NMNH_COMM_WORLD, IINFO_ll) + CALL MPI_ALLREDUCE(IROOT, IROOTPROC, 1, MNHINT_MPI, MPI_MIN, NMNH_COMM_WORLD, IINFO_ll) ! Then this process broadcasts the space steps in Y direction in order to have the same space steps on all processes CALL MPI_BCAST(PGRID_PAR(10), 1, MNHREAL_MPI, IROOTPROC, NMNH_COMM_WORLD, IINFO_ll) ENDIF diff --git a/src/SURFEX/read_lcover.F90 b/src/SURFEX/read_lcover.F90 index 0d60f0e6191727e652f2534e92e4a24d9c8c9b40..f9fb8e5144b7502648c6797456137ade4502735a 100644 --- a/src/SURFEX/read_lcover.F90 +++ b/src/SURFEX/read_lcover.F90 @@ -1,4 +1,4 @@ -!SFX_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier +!SFX_LIC Copyright 2008-2019 CNRS, Meteo-France and Universite Paul Sabatier !SFX_LIC This is part of the SURFEX software governed by the CeCILL-C licence !SFX_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt !SFX_LIC for details. version 1. @@ -38,13 +38,16 @@ !! Original 10/2008 !! M. Moge 02/2015 parallelization for mésonh !! J. Pianezze 08/2016 replacement of MPI_COMM_WOLRD by NMNH_COMM_WORLD +! P. Wautelet 26/04/2019: use modd_precision parameters for datatypes of MPI communications !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS ! ------------ ! #ifdef MNH_PARALLEL -USE MODD_VAR_ll, ONLY : NMNH_COMM_WORLD +use modd_mpif +use modd_precision, only: MNHLOG_MPI +USE MODD_VAR_ll, ONLY: NMNH_COMM_WORLD #endif ! USE MODD_DATA_COVER_PAR, ONLY : JPCOVER @@ -57,11 +60,6 @@ USE PARKIND1 ,ONLY : JPRB ! IMPLICIT NONE ! -#ifdef MNH_PARALLEL -#ifndef NOMPI -INCLUDE "mpif.h" -#endif -#endif ! !* 0.1 Declarations of arguments ! ------------------------- @@ -104,11 +102,7 @@ OCOVER=.FALSE. OCOVER(:SIZE(GCOVER))=GCOVER(:) ! #ifdef MNH_PARALLEL -#ifndef NOMPI -CALL MPI_ALLREDUCE(GCOVER, OCOVER, SIZE(GCOVER),MPI_LOGICAL, MPI_LOR, NMNH_COMM_WORLD, IINFO) -#else -CALL MPI_ALLREDUCE(GCOVER, OCOVER, SIZE(GCOVER),MPI_LOGICAL, MPI_LOR, MPI_COMM_WORLD, IINFO) -#endif +CALL MPI_ALLREDUCE(GCOVER, OCOVER, SIZE(GCOVER), MNHLOG_MPI, MPI_LOR, NMNH_COMM_WORLD, IINFO) #endif ! DEALLOCATE(GCOVER) diff --git a/src/SURFEX/write_lcover.F90 b/src/SURFEX/write_lcover.F90 index 32a1be568e9eb8aac8db7094671173300b7423fa..6881c143d5aae3be0bd3d56b81081c453a0cec4d 100644 --- a/src/SURFEX/write_lcover.F90 +++ b/src/SURFEX/write_lcover.F90 @@ -1,4 +1,4 @@ -!SFX_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier +!SFX_LIC Copyright 1994-2019 CNRS, Meteo-France and Universite Paul Sabatier !SFX_LIC This is part of the SURFEX software governed by the CeCILL-C licence !SFX_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt !SFX_LIC for details. version 1. @@ -36,6 +36,7 @@ !! MODIFICATIONS !! ------------- !! J. Pianezze 08/2016 replacement of MPI_COMM_WOLRD by NMNH_COMM_WORLD +! P. Wautelet 26/04/2019: use modd_precision parameters for datatypes of MPI communications !! !------------------------------------------------------------------------------- ! @@ -43,7 +44,9 @@ ! ------------ ! #ifdef MNH_PARALLEL -USE MODD_VAR_ll, ONLY : NMNH_COMM_WORLD +use modd_mpif +use modd_precision, only: MNHLOG_MPI +USE MODD_VAR_ll, ONLY: NMNH_COMM_WORLD #endif ! USE MODD_DATA_COVER_PAR, ONLY : JPCOVER @@ -55,11 +58,6 @@ USE PARKIND1 ,ONLY : JPRB ! IMPLICIT NONE ! -#ifdef MNH_PARALLEL -#ifndef NOMPI -INCLUDE "mpif.h" -#endif -#endif ! !* 0.1 Declarations of arguments ! ------------------------- @@ -83,11 +81,9 @@ INTEGER :: IINFO !* ascendant compatibility IF (LHOOK) CALL DR_HOOK('WRITE_LCOVER',0,ZHOOK_HANDLE) #ifdef MNH_PARALLEL -#ifndef NOMPI -CALL MPI_ALLREDUCE(OCOVER, GCOVER, SIZE(OCOVER),MPI_LOGICAL, MPI_LOR, NMNH_COMM_WORLD, IINFO) +CALL MPI_ALLREDUCE(OCOVER, GCOVER, SIZE(OCOVER), MNHLOG_MPI, MPI_LOR, NMNH_COMM_WORLD, IINFO) OCOVER(:)=GCOVER(:) #endif -#endif YRECFM='COVER_LIST' YCOMMENT='(LOGICAL LIST)' CALL WRITE_SURF(HSELECT,HPROGRAM,YRECFM,OCOVER(:),IRESP,HCOMMENT=YCOMMENT,HDIR='-')