diff --git a/LIBTOOLS/tools/lfi2cdf/src/mode_util.f90 b/LIBTOOLS/tools/lfi2cdf/src/mode_util.f90 index 5bdb80c881f23805975422a43c13060985167c48..7a4d853e97417d32893df6b8ba3d94a9d8af2e8a 100644 --- a/LIBTOOLS/tools/lfi2cdf/src/mode_util.f90 +++ b/LIBTOOLS/tools/lfi2cdf/src/mode_util.f90 @@ -9,8 +9,9 @@ !----------------------------------------------------------------- MODULE mode_util USE MODD_IO, ONLY: TFILE_ELT - USE MODD_NETCDF, ONLY: DIMCDF, IDCDF_KIND + USE MODD_NETCDF, ONLY: DIMCDF, CDFINT USE MODD_PARAMETERS, ONLY: NLFIMAXCOMMENTLENGTH, NMNHNAMELGTMAX + use modd_precision, only: LFIINT USE MODE_FIELD USE MODE_IO_FIELD_READ @@ -50,8 +51,8 @@ MODULE mode_util TYPE(DIMCDF),DIMENSION(:),ALLOCATABLE :: TDIMS ! Dimensions of the field END TYPE workfield - LOGICAL(KIND=LFI_INT), PARAMETER :: ltrue = .TRUE. - LOGICAL(KIND=LFI_INT), PARAMETER :: lfalse = .FALSE. + LOGICAL(KIND=LFIINT), PARAMETER :: ltrue = .TRUE. + LOGICAL(KIND=LFIINT), PARAMETER :: lfalse = .FALSE. CHARACTER(LEN=6) :: CPROGRAM_ORIG @@ -87,9 +88,9 @@ CONTAINS INTEGER :: leng INTEGER :: IID, IRESP, IDATES, ICURDATE INTEGER :: IDXDATE, IDXTIME - INTEGER(KIND=LFI_INT) :: iresp2,ilu,ileng,ipos - INTEGER(KIND=IDCDF_KIND) :: kcdf_id, kcdf_id2, var_id - INTEGER(KIND=IDCDF_KIND) :: status + INTEGER(KIND=LFIINT) :: iresp2,ilu,ileng,ipos + INTEGER(KIND=CDFINT) :: kcdf_id, kcdf_id2, var_id + INTEGER(KIND=CDFINT) :: status LOGICAL :: ladvan LOGICAL :: GOK TYPE(TLFIDATE),DIMENSION(MAXDATES) :: TLFIDATES @@ -629,8 +630,8 @@ END DO CHARACTER(LEN=16) :: YMNHVERSION CHARACTER(LEN=:),ALLOCATABLE :: YHISTORY INTEGER :: ilen, ji - INTEGER(KIND=IDCDF_KIND) :: status - INTEGER(KIND=IDCDF_KIND) :: kcdf_id + INTEGER(KIND=CDFINT) :: status + INTEGER(KIND=CDFINT) :: kcdf_id CALL PRINT_MSG(NVERB_DEBUG,'IO','def_ncdf','called') @@ -683,7 +684,7 @@ END DO INTEGER :: IDIMS INTEGER :: INSRC INTEGER :: ISRC - INTEGER(KIND=IDCDF_KIND),DIMENSION(NF90_MAX_VAR_DIMS) :: IDIMLEN + INTEGER(KIND=CDFINT),DIMENSION(NF90_MAX_VAR_DIMS) :: IDIMLEN logical,dimension(knaf) :: gtimedep_in, gtimedep_out CHARACTER(LEN=:), ALLOCATABLE :: YTAB0D @@ -959,10 +960,10 @@ END DO TYPE(option),DIMENSION(:), INTENT(IN) :: options INTEGER, INTENT(IN) :: runmode - INTEGER :: idx, IRESP2 - INTEGER(KIND=IDCDF_KIND) :: omode - INTEGER(KIND=IDCDF_KIND) :: status - INTEGER(KIND=LFI_INT) :: ilu,iresp + INTEGER :: idx, IRESP2 + INTEGER(KIND=CDFINT) :: omode + INTEGER(KIND=CDFINT) :: status + INTEGER(KIND=LFIINT) :: ilu,iresp CALL PRINT_MSG(NVERB_DEBUG,'IO','OPEN_FILES','called') @@ -1112,8 +1113,8 @@ END DO CHARACTER(LEN=NMNHNAMELGTMAX),DIMENSION(nbvar) :: YVARS INTEGER :: ji INTEGER :: idx1, idx2 - INTEGER(KIND=IDCDF_KIND) :: status - INTEGER(KIND=IDCDF_KIND) :: omode + INTEGER(KIND=CDFINT) :: status + INTEGER(KIND=CDFINT) :: omode CALL PRINT_MSG(NVERB_DEBUG,'IO','OPEN_SPLIT_NCFILES_OUT','called') @@ -1184,14 +1185,14 @@ END DO USE MODD_DIM_n, ONLY: NKMAX USE MODD_PARAMETERS, ONLY: JPVEXT - INTEGER(KIND=IDCDF_KIND), INTENT(IN) :: KFILE_ID - INTEGER(KIND=IDCDF_KIND), INTENT(IN) :: KVAR_ID - TYPE(workfield), INTENT(INOUT) :: TPREC + INTEGER(KIND=CDFINT), INTENT(IN) :: KFILE_ID + INTEGER(KIND=CDFINT), INTENT(IN) :: KVAR_ID + TYPE(workfield), INTENT(INOUT) :: TPREC INTEGER :: ILENG INTEGER :: JDIM - INTEGER(KIND=IDCDF_KIND) :: ISTATUS - INTEGER(KIND=IDCDF_KIND),DIMENSION(NF90_MAX_VAR_DIMS) :: IDIMS_ID + INTEGER(KIND=CDFINT) :: ISTATUS + INTEGER(KIND=CDFINT),DIMENSION(NF90_MAX_VAR_DIMS) :: IDIMS_ID CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Metadata_get_nc4','called') diff --git a/src/LIB/SURCOUCHE/src/modd_io.f90 b/src/LIB/SURCOUCHE/src/modd_io.f90 index 32fc2c42a5556604329dde08bf3a1bc4b0e56a7b..a27528eebe0f92b06e94ef1464a3f3f11396d382 100644 --- a/src/LIB/SURCOUCHE/src/modd_io.f90 +++ b/src/LIB/SURCOUCHE/src/modd_io.f90 @@ -13,8 +13,9 @@ MODULE MODD_IO ! -USE MODD_NETCDF, ONLY: IDCDF_KIND, IOCDF, TPTR2DIMCDF +USE MODD_NETCDF, ONLY: IOCDF, TPTR2DIMCDF USE MODD_PARAMETERS, ONLY: NDIRNAMELGTMAX, NFILENAMELGTMAX +use modd_precision, only: CDFINT, LFIINT ! IMPLICIT NONE ! @@ -94,20 +95,20 @@ TYPE TFILEDATA INTEGER,DIMENSION(3) :: NMNHVERSION = (/0,0,0/) !MesoNH version used to create the file ! ! Fields for LFI files - INTEGER(KIND=LFI_INT) :: NLFININAR = 0 !Number of articles of the LFI file (only accurate if file opened in read mode) - INTEGER(KIND=LFI_INT) :: NLFINPRAR = 0 !Number of predicted articles of the LFI file (non crucial) - INTEGER :: NLFITYPE = -1 !Type of the file (used to generate list of files to transfer) - INTEGER :: NLFIVERB = 1 !LFI verbosity level - INTEGER(KIND=LFI_INT) :: NLFIFLU = -1 !File identifier + INTEGER(KIND=LFIINT) :: NLFININAR = 0 !Number of articles of the LFI file (only accurate if file opened in read mode) + INTEGER(KIND=LFIINT) :: NLFINPRAR = 0 !Number of predicted articles of the LFI file (non crucial) + INTEGER :: NLFITYPE = -1 !Type of the file (used to generate list of files to transfers) + INTEGER :: NLFIVERB = 1 !LFI verbosity level + INTEGER(KIND=LFIINT) :: NLFIFLU = -1 !File identifier ! ! Fields for netCDF files - INTEGER(KIND=IDCDF_KIND) :: NNCID = -1 !File identifier - INTEGER(KIND=IDCDF_KIND) :: NNCNAR = 0 !Number of articles of the netCDF file (only accurate if file opened in read mode) - LOGICAL :: LNCREDUCE_FLOAT_PRECISION = .FALSE. ! Reduce the precision of floats to single precision + INTEGER(KIND=CDFINT) :: NNCID = -1 !File identifier + INTEGER(KIND=CDFINT) :: NNCNAR = 0 !Number of articles of the netCDF file (only accurate if file opened in read mode) + LOGICAL :: LNCREDUCE_FLOAT_PRECISION = .FALSE. ! Reduce the precision of floats to single precision ! instead of double precision - LOGICAL :: LNCCOMPRESS = .FALSE. ! Do compression on fields - INTEGER(KIND=IDCDF_KIND) :: NNCCOMPRESS_LEVEL = 0 ! Compression level - TYPE(IOCDF),POINTER :: TNCDIMS => NULL() ! Structure containing netCDF dimensions + LOGICAL :: LNCCOMPRESS = .FALSE. ! Do compression on fields + INTEGER(KIND=CDFINT) :: NNCCOMPRESS_LEVEL = 0 ! Compression level + TYPE(IOCDF),POINTER :: TNCDIMS => NULL() ! Structure containing netCDF dimensions TYPE(TPTR2DIMCDF),DIMENSION(:,:),ALLOCATABLE :: TNCCOORDS ! Structure pointing to the coordinates variables ! !Fields for other files diff --git a/src/LIB/SURCOUCHE/src/modd_netcdf.f90 b/src/LIB/SURCOUCHE/src/modd_netcdf.f90 index 24541396d350d2544517e86aaef83918b1bc81f0..b73380b5636a81333b7eeafce263fc062f56bf5d 100644 --- a/src/LIB/SURCOUCHE/src/modd_netcdf.f90 +++ b/src/LIB/SURCOUCHE/src/modd_netcdf.f90 @@ -7,9 +7,10 @@ ! Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O !----------------------------------------------------------------- MODULE MODD_NETCDF -IMPLICIT NONE -INTEGER,PARAMETER :: IDCDF_KIND = SELECTED_INT_KIND(8) +use modd_precision, only: CDFINT + +IMPLICIT NONE TYPE IOCDF TYPE(DIMCDF), POINTER :: DIM_NI => NULL() @@ -26,10 +27,10 @@ TYPE IOCDF END TYPE IOCDF TYPE DIMCDF - CHARACTER(LEN=32) :: NAME = '' - INTEGER(KIND=IDCDF_KIND) :: LEN = 0 - INTEGER(KIND=IDCDF_KIND) :: ID = -1 - TYPE(DIMCDF), POINTER :: NEXT => NULL() + CHARACTER(LEN=32) :: NAME = '' + INTEGER(KIND=CDFINT) :: LEN = 0 + INTEGER(KIND=CDFINT) :: ID = -1 + TYPE(DIMCDF), POINTER :: NEXT => NULL() END TYPE DIMCDF TYPE TPTR2DIMCDF diff --git a/src/LIB/SURCOUCHE/src/modd_var_ll.f90 b/src/LIB/SURCOUCHE/src/modd_var_ll.f90 index b0688132fb2fb390fe09fa702f175279b3817949..cffb275aa3389461dd575d1c32ea877980898af4 100644 --- a/src/LIB/SURCOUCHE/src/modd_var_ll.f90 +++ b/src/LIB/SURCOUCHE/src/modd_var_ll.f90 @@ -1,17 +1,8 @@ - -!MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier +!MNH_LIC Copyright 1999-2019 CNRS, Meteo-France and Universite Paul Sabatier !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence !MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt !MNH_LIC for details. version 1. !----------------------------------------------------------------- -!--------------- special set of characters for CVS information -!----------------------------------------------------------------- -! $Source$ -! $Name$ -! $Revision$ -! $Date$ -!----------------------------------------------------------------- -!----------------------------------------------------------------- ! ################## MODULE MODD_VAR_ll @@ -46,6 +37,7 @@ ! Original 04/05/99 ! Modifications ! J.Escobar 5/06/2018 : add cpp key MNH_USE_MPI_STATUSES_IGNORE for use of true MPI_STATUSES_IGNORE +! P. Wautelet 22/03/2019: remove MPI_PRECISION and MPI_2PRECISION (replaced by MNHREAL_MPI and MNH2REAL_MPI in modd_precision) !------------------------------------------------------------------------------- ! USE MODD_STRUCTURE_ll @@ -118,11 +110,6 @@ INTEGER,SAVE :: NZ_PROC_ll = 0 ! Number of proc to use in the Z splitting ! DIMX = NIMAX + 2*JPHEXT ... ! INTEGER :: DIMX,DIMY,DIMZ -! -! MPI_PRECISION, MPI_2PRECISION -! - INTEGER :: MPI_PRECISION - INTEGER :: MPI_2PRECISION ! INTEGER, PARAMETER :: NTMAX = 100 ! diff --git a/src/LIB/SURCOUCHE/src/mode_double_double.f90 b/src/LIB/SURCOUCHE/src/mode_double_double.f90 index 19f0b36104e273539c2579bf71471b2806546eef..809944ce84da22fcc09397b1a5ff0542bc96b098 100644 --- a/src/LIB/SURCOUCHE/src/mode_double_double.f90 +++ b/src/LIB/SURCOUCHE/src/mode_double_double.f90 @@ -43,24 +43,13 @@ MODULE mode_repro_sum CONTAINS SUBROUTINE INIT_DD(KINFO) + use modd_precision, only: MNHREAL_MPI IMPLICIT NONE INTEGER, INTENT(OUT) :: KINFO ! MPI return status - REAL :: REAL_DEFAULT - INTEGER,PARAMETER :: REAL_KIND=KIND(REAL_DEFAULT) - INTEGER :: MNH_MPI_REAL - - ! - ! find the default type of REAL for MESONH on MPI - ! - IF (REAL_KIND .EQ. 4 ) THEN - MNH_MPI_REAL = MPI_REAL4 - ELSE - MNH_MPI_REAL = MPI_REAL8 - END IF ! ! define the double-double for MPI ! - CALL MPI_TYPE_CONTIGUOUS(2, MNH_MPI_REAL ,MNH_DOUBLE_DOUBLE , KINFO) + CALL MPI_TYPE_CONTIGUOUS(2, MNHREAL_MPI ,MNH_DOUBLE_DOUBLE , KINFO) CALL MPI_TYPE_COMMIT(MNH_DOUBLE_DOUBLE , KINFO) ! ! define the double-double sum = MNH_SUM_DD for MPI diff --git a/src/LIB/SURCOUCHE/src/mode_exchange2_ll.f90 b/src/LIB/SURCOUCHE/src/mode_exchange2_ll.f90 index 767482a5ccab76a4db3d721566ebbc2e0e097dcc..dec89ca379f9b9850675115ac64a81174c89ab45 100644 --- a/src/LIB/SURCOUCHE/src/mode_exchange2_ll.f90 +++ b/src/LIB/SURCOUCHE/src/mode_exchange2_ll.f90 @@ -1,14 +1,8 @@ -!MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier +!MNH_LIC Copyright 1998-2019 CNRS, Meteo-France and Universite Paul Sabatier !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence -!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt +!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt !MNH_LIC for details. version 1. !----------------------------------------------------------------- -!--------------- special set of characters for CVS information -!----------------------------------------------------------------- -! $Source$ -! $Name$ -! $Revision$ -! $Date$ !----------------------------------------------------------------- !Correction : ! J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 @@ -61,14 +55,14 @@ ! and local processor ! NHALO2_COM - MPI communicator for halo 2 ! NCOMBUFFSIZE2 - buffer size -! MPI_PRECISION - mpi precision +! MNHREAL_MPI - mpi precision ! NNEXTTAG, NMAXTAG - variable to define message tag ! !! Modifications !! ------------- ! Original May 19, 1998 ! R. Guivarch June 24, 1998 _ll -! R. Guivarch June 29, 1998 MPI_PRECISION +! R. Guivarch June 29, 1998 MNHREAL_MPI ! N. Gicquel October 30, 1998 COPY_CRSPD2 ! J.Escobar 10/02/2012 : Bug , in MPI_RECV replace ! MPI_STATUSES_IGNORE with MPI_STATUS_IGNORE @@ -691,7 +685,6 @@ ! Module MODD_VAR_ll ! IP - Number of local processor=subdomain ! NCOMBUFFSIZE2 - buffer size -! MPI_PRECISION - mpi precision ! NNEXTTAG, NMAXTAG - variable to define message tag ! !! Reference @@ -707,8 +700,8 @@ ! USE MODD_STRUCTURE_ll, ONLY : CRSPD_ll, ZONE_ll USE MODD_ARGSLIST_ll, ONLY : LIST_ll, HALO2LIST_ll -! - USE MODD_VAR_ll, ONLY : NCOMBUFFSIZE2, IP, MPI_PRECISION, NNEXTTAG, NMAXTAG + use modd_precision, only: MNHREAL_MPI + USE MODD_VAR_ll, ONLY : NCOMBUFFSIZE2, IP, NNEXTTAG, NMAXTAG USE MODE_EXCHANGE_ll, ONLY : FILLIN_BUFFERS USE MODD_MPIF !JUANZ @@ -829,13 +822,13 @@ INTEGER :: NB_REQ,NFIRST_REQ_RECV !JUAN !if defined(MNH_MPI_BSEND) IF (LMNH_MPI_BSEND) THEN - CALL MPI_BSEND(TZBUFFER, JINC, MPI_PRECISION, & + CALL MPI_BSEND(TZBUFFER, JINC, MNHREAL_MPI, & TZZONESEND%NUMBER - 1, TZZONESEND%MSSGTAG + ITAGOFFSET, & KMPI_COMM, KERROR) else !JUAN !if defined(MNH_MPI_ISEND) - CALL MPI_ISEND(TZBUFFER(1,NB_REQ), JINC, MPI_PRECISION, & + CALL MPI_ISEND(TZBUFFER(1,NB_REQ), JINC, MNHREAL_MPI, & TZZONESEND%NUMBER - 1, TZZONESEND%MSSGTAG + ITAGOFFSET, & KMPI_COMM, REQ_TAB(NB_REQ), KERROR) @@ -864,12 +857,12 @@ else !if defined (MNH_MPI_ISEND) IF ( .NOT. LMNH_MPI_BSEND) THEN NB_REQ = NB_REQ + 1 - CALL MPI_IRECV(TZBUFFER(1,NB_REQ), NCOMBUFFSIZE2, MPI_PRECISION, & + CALL MPI_IRECV(TZBUFFER(1,NB_REQ), NCOMBUFFSIZE2, MNHREAL_MPI, & TPMAILRECV%TELT%NUMBER-1, & TPMAILRECV%TELT%MSSGTAG + ITAGOFFSET, & KMPI_COMM, REQ_TAB(NB_REQ), KERROR) else - CALL MPI_RECV(TZBUFFER, NCOMBUFFSIZE2, MPI_PRECISION, & + CALL MPI_RECV(TZBUFFER, NCOMBUFFSIZE2, MNHREAL_MPI, & TPMAILRECV%TELT%NUMBER-1, & TPMAILRECV%TELT%MSSGTAG + ITAGOFFSET, & KMPI_COMM, MPI_STATUS_IGNORE, KERROR) diff --git a/src/LIB/SURCOUCHE/src/mode_exchange_ll.f90 b/src/LIB/SURCOUCHE/src/mode_exchange_ll.f90 index 0dff8c59c7e7fbb228ee7097a15b0a2f8aa54d9e..6e85037bdcbf621066df782bc2ed394fcf89fb0c 100644 --- a/src/LIB/SURCOUCHE/src/mode_exchange_ll.f90 +++ b/src/LIB/SURCOUCHE/src/mode_exchange_ll.f90 @@ -1,6 +1,6 @@ -!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier +!MNH_LIC Copyright 1998-2019 CNRS, Meteo-France and Universite Paul Sabatier !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence -!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt +!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt !MNH_LIC for details. version 1. !----------------------------------------------------------------- ! Modifications: @@ -37,7 +37,6 @@ ! IP - Number of local processor=subdomain ! TCRRT_COMDATA - Current communication data structure for current model ! and local processor -! MPI_PRECISION - mpi precision ! JPHALO - size of the halo ! NCOMBUFFSIZE1 - buffer sizs ! NHALO_COM - mpi communicator @@ -68,7 +67,7 @@ !! Modifications !! ------------- ! Original May 19, 1998 -! R. Guivarch June 29, 1998 MPI_PRECISION +! R. Guivarch June 29, 1998 MNHREAL_MPI ! N. Gicquel, P. Kloos - October 01, 1998 - COPY_CRSPD, ! COPY_ZONE, COPY_CRSPD_TRANS, COPY_ZONE_TRANS ! M. Moge 01/12/14 UPDATE_HALO_EXTENDED @@ -398,7 +397,6 @@ ! Module MODD_VAR_ll ! TCRRT_COMDATA - Current communication data structure for current model ! and local processor -! MPI_PRECISION - mpi precision ! JPHALO - size of the halo ! ! Module MODD_DIM_ll @@ -418,7 +416,8 @@ !* 0. DECLARATIONS ! USE MODD_DIM_ll, ONLY : CLBCX, CLBCY - USE MODD_VAR_ll, ONLY : TCRRT_COMDATA, MPI_PRECISION, JPHALO + use modd_precision, only: MNHREAL_MPI + USE MODD_VAR_ll, ONLY : TCRRT_COMDATA, JPHALO ! USE MODE_TOOLS_ll, ONLY : GET_INDICE_ll, LEAST_ll, LWEST_ll !JUANZ @@ -475,12 +474,12 @@ INTEGER :: NB_REQ ! !if defined(MNH_MPI_BSEND) IF (LMNH_MPI_BSEND) THEN - CALL MPI_BSEND(PFIELD(IXOR), JPHALO, MPI_PRECISION, & + CALL MPI_BSEND(PFIELD(IXOR), JPHALO, MNHREAL_MPI, & TCRRT_COMDATA%HALO1DX%NSEND_WEST(J)-1, & 1, NMNH_COMM_WORLD, KINFO) else NB_REQ = NB_REQ + 1 - CALL MPI_ISEND(PFIELD(IXOR), JPHALO, MPI_PRECISION, & + CALL MPI_ISEND(PFIELD(IXOR), JPHALO, MNHREAL_MPI, & TCRRT_COMDATA%HALO1DX%NSEND_WEST(J)-1, & 1, NMNH_COMM_WORLD, REQ_TAB(NB_REQ), KINFO) @@ -492,14 +491,14 @@ INTEGER :: NB_REQ ! !if defined(MNH_MPI_BSEND) IF (LMNH_MPI_BSEND) THEN - CALL MPI_BSEND(PFIELD(IXEND-JPHALO+1), JPHALO, MPI_PRECISION, & + CALL MPI_BSEND(PFIELD(IXEND-JPHALO+1), JPHALO, MNHREAL_MPI, & TCRRT_COMDATA%HALO1DX%NSEND_EAST(J)-1, & 2, NMNH_COMM_WORLD, KINFO) else !JUAN !if defined(MNH_MPI_ISEND) NB_REQ = NB_REQ + 1 - CALL MPI_ISEND(PFIELD(IXEND-JPHALO+1), JPHALO, MPI_PRECISION, & + CALL MPI_ISEND(PFIELD(IXEND-JPHALO+1), JPHALO, MNHREAL_MPI, & TCRRT_COMDATA%HALO1DX%NSEND_EAST(J)-1, & 2, NMNH_COMM_WORLD, REQ_TAB(NB_REQ), KINFO) @@ -519,11 +518,11 @@ INTEGER :: NB_REQ !if defined(MNH_MPI_ISEND) IF ( .NOT. LMNH_MPI_BSEND) THEN NB_REQ = NB_REQ + 1 - CALL MPI_IRECV(PFIELD(IXEND+1), JPHALO, MPI_PRECISION, & + CALL MPI_IRECV(PFIELD(IXEND+1), JPHALO, MNHREAL_MPI, & TCRRT_COMDATA%HALO1DX%NRECV_EAST-1, 1, & NMNH_COMM_WORLD, REQ_TAB(NB_REQ), KINFO) else - CALL MPI_RECV(PFIELD(IXEND+1), JPHALO, MPI_PRECISION, & + CALL MPI_RECV(PFIELD(IXEND+1), JPHALO, MNHREAL_MPI, & TCRRT_COMDATA%HALO1DX%NRECV_EAST-1, 1, & NMNH_COMM_WORLD, ISTATUS, KINFO) endif @@ -537,11 +536,11 @@ INTEGER :: NB_REQ !if defined(MNH_MPI_ISEND) IF ( .NOT. LMNH_MPI_BSEND) THEN NB_REQ = NB_REQ + 1 - CALL MPI_IRECV(PFIELD(1), JPHALO, MPI_PRECISION, & + CALL MPI_IRECV(PFIELD(1), JPHALO, MNHREAL_MPI, & TCRRT_COMDATA%HALO1DX%NRECV_WEST-1, 2, & NMNH_COMM_WORLD, REQ_TAB(NB_REQ), KINFO) else - CALL MPI_RECV(PFIELD(1), JPHALO, MPI_PRECISION, & + CALL MPI_RECV(PFIELD(1), JPHALO, MNHREAL_MPI, & TCRRT_COMDATA%HALO1DX%NRECV_WEST-1, 2, & NMNH_COMM_WORLD, ISTATUS, KINFO) endif @@ -586,7 +585,6 @@ INTEGER :: NB_REQ ! Module MODD_VAR_ll ! TCRRT_COMDATA - Current communication data structure for current model ! and local processor -! MPI_PRECISION - mpi precision ! JPHALO - size of the halo ! ! Module MODD_DIM_ll @@ -598,7 +596,8 @@ INTEGER :: NB_REQ !* 0. DECLARATIONS ! USE MODD_DIM_ll, ONLY : CLBCX, CLBCY - USE MODD_VAR_ll, ONLY : TCRRT_COMDATA, JPHALO, MPI_PRECISION + use modd_precision, only: MNHREAL_MPI + USE MODD_VAR_ll, ONLY : TCRRT_COMDATA, JPHALO ! USE MODE_TOOLS_ll, ONLY : GET_INDICE_ll, LNORTH_ll, LSOUTH_ll ! @@ -654,13 +653,13 @@ INTEGER :: NB_REQ ! !if defined(MNH_MPI_BSEND) IF (LMNH_MPI_BSEND) THEN - CALL MPI_BSEND(PFIELD(IYOR), JPHALO, MPI_PRECISION, & + CALL MPI_BSEND(PFIELD(IYOR), JPHALO, MNHREAL_MPI, & TCRRT_COMDATA%HALO1DY%NSEND_SOUTH(J)-1, & 1, NMNH_COMM_WORLD, KINFO) else NB_REQ = NB_REQ + 1 - CALL MPI_ISEND(PFIELD(IYOR), JPHALO, MPI_PRECISION, & + CALL MPI_ISEND(PFIELD(IYOR), JPHALO, MNHREAL_MPI, & TCRRT_COMDATA%HALO1DY%NSEND_SOUTH(J)-1, & 1, NMNH_COMM_WORLD, REQ_TAB(NB_REQ), KINFO) @@ -672,14 +671,14 @@ INTEGER :: NB_REQ ! !if defined(MNH_MPI_BSEND) IF (LMNH_MPI_BSEND) THEN - CALL MPI_BSEND(PFIELD(IYEND-JPHALO+1), JPHALO, MPI_PRECISION, & + CALL MPI_BSEND(PFIELD(IYEND-JPHALO+1), JPHALO, MNHREAL_MPI, & TCRRT_COMDATA%HALO1DY%NSEND_NORTH(J)-1, & 2, NMNH_COMM_WORLD, KINFO) else !JUAN !if defined(MNH_MPI_ISEND) NB_REQ = NB_REQ + 1 - CALL MPI_ISEND(PFIELD(IYEND-JPHALO+1), JPHALO, MPI_PRECISION, & + CALL MPI_ISEND(PFIELD(IYEND-JPHALO+1), JPHALO, MNHREAL_MPI, & TCRRT_COMDATA%HALO1DY%NSEND_NORTH(J)-1, & 2, NMNH_COMM_WORLD, REQ_TAB(NB_REQ), KINFO) @@ -698,11 +697,11 @@ INTEGER :: NB_REQ !if defined(MNH_MPI_ISEND) IF ( .NOT. LMNH_MPI_BSEND) THEN NB_REQ = NB_REQ + 1 - CALL MPI_IRECV(PFIELD(IYEND+1), JPHALO, MPI_PRECISION, & + CALL MPI_IRECV(PFIELD(IYEND+1), JPHALO, MNHREAL_MPI, & TCRRT_COMDATA%HALO1DY%NRECV_NORTH-1, 1, & NMNH_COMM_WORLD, REQ_TAB(NB_REQ), KINFO) else - CALL MPI_RECV(PFIELD(IYEND+1), JPHALO, MPI_PRECISION, & + CALL MPI_RECV(PFIELD(IYEND+1), JPHALO, MNHREAL_MPI, & TCRRT_COMDATA%HALO1DY%NRECV_NORTH-1, 1, & NMNH_COMM_WORLD, ISTATUS, KINFO) endif @@ -716,11 +715,11 @@ INTEGER :: NB_REQ !if defined(MNH_MPI_ISEND) IF ( .NOT. LMNH_MPI_BSEND) THEN NB_REQ = NB_REQ + 1 - CALL MPI_IRECV(PFIELD(1), JPHALO, MPI_PRECISION, & + CALL MPI_IRECV(PFIELD(1), JPHALO, MNHREAL_MPI, & TCRRT_COMDATA%HALO1DY%NRECV_SOUTH-1, 2, & NMNH_COMM_WORLD, REQ_TAB(NB_REQ), KINFO) else - CALL MPI_RECV(PFIELD(1), JPHALO, MPI_PRECISION, & + CALL MPI_RECV(PFIELD(1), JPHALO, MNHREAL_MPI, & TCRRT_COMDATA%HALO1DY%NRECV_SOUTH-1, 2, & NMNH_COMM_WORLD, ISTATUS, KINFO) endif @@ -1898,7 +1897,6 @@ INTEGER :: NB_REQ ! IP - Number of local processor=subdomain ! NCOMBUFFSIZE1 - buffer size ! NTRANS_COM - mpi communicator -! MPI_PRECISION - mpi precision ! NNEXTTAG, NMAXTAG - variable to define message tag ! ! Module MODD_PARAMETERS_ll @@ -1921,8 +1919,9 @@ INTEGER :: NB_REQ ! ------------ ! USE MODD_ARGSLIST_ll, ONLY : LIST_ll + use modd_precision, only: MNHREAL_MPI USE MODD_STRUCTURE_ll, ONLY : CRSPD_ll, ZONE_ll - USE MODD_VAR_ll, ONLY : NCOMBUFFSIZE1, IP, NTRANS_COM, MPI_PRECISION, & + USE MODD_VAR_ll, ONLY : NCOMBUFFSIZE1, IP, NTRANS_COM, & NNEXTTAG, NMAXTAG USE MODD_PARAMETERS_ll, ONLY : JPVEXT USE MODD_DIM_ll, ONLY : NKMAX_TMP_ll @@ -2095,11 +2094,11 @@ INTEGER :: NB_REQ,NFIRST_REQ_RECV ! !if defined(MNH_MPI_BSEND) IF (LMNH_MPI_BSEND) THEN - CALL MPI_BSEND(TZBUFFER, JINC, MPI_PRECISION, TZZONESEND%NUMBER - 1, & + CALL MPI_BSEND(TZBUFFER, JINC, MNHREAL_MPI, TZZONESEND%NUMBER - 1, & TZZONESEND%MSSGTAG + ITAGOFFSET, NTRANS_COM, KERROR) else - CALL MPI_ISEND(TZBUFFER(1,NB_REQ), JINC, MPI_PRECISION, TZZONESEND%NUMBER - 1, & + CALL MPI_ISEND(TZBUFFER(1,NB_REQ), JINC, MNHREAL_MPI, TZZONESEND%NUMBER - 1, & TZZONESEND%MSSGTAG + ITAGOFFSET, NTRANS_COM, REQ_TAB(NB_REQ), KERROR) endif @@ -2127,13 +2126,13 @@ INTEGER :: NB_REQ,NFIRST_REQ_RECV !if defined (MNH_MPI_ISEND) IF ( .NOT. LMNH_MPI_BSEND) THEN NB_REQ = NB_REQ + 1 - !JUAN NZ CALL MPI_IRECV(TZBUFFER(1,NB_REQ), NCOMBUFFSIZE1, MPI_PRECISION, & - CALL MPI_IRECV(TZBUFFER(1,NB_REQ), IBUFFSIZE, MPI_PRECISION, & + !JUAN NZ CALL MPI_IRECV(TZBUFFER(1,NB_REQ), NCOMBUFFSIZE1, MNHREAL_MPI, & + CALL MPI_IRECV(TZBUFFER(1,NB_REQ), IBUFFSIZE, MNHREAL_MPI, & TZZONERECV%NUMBER-1, TZZONERECV%MSSGTAG + ITAGOFFSET, & NTRANS_COM, REQ_TAB(NB_REQ), KERROR) else - !JUAN NZ CALL MPI_RECV(TZBUFFER, NCOMBUFFSIZE1, MPI_PRECISION, TZZONERECV%NUMBER-1, & - CALL MPI_RECV(TZBUFFER, IBUFFSIZE, MPI_PRECISION, TZZONERECV%NUMBER-1, & + !JUAN NZ CALL MPI_RECV(TZBUFFER, NCOMBUFFSIZE1, MNHREAL_MPI, TZZONERECV%NUMBER-1, & + CALL MPI_RECV(TZBUFFER, IBUFFSIZE, MNHREAL_MPI, TZZONERECV%NUMBER-1, & TZZONERECV%MSSGTAG + ITAGOFFSET, NTRANS_COM, IRECVSTATUS, KERROR) !JUAN ! Z axe @@ -2291,7 +2290,6 @@ INTEGER :: NB_REQ,NFIRST_REQ_RECV ! IP - Number of local processor=subdomain ! NCOMBUFFSIZE1 - buffer size ! NTRANS_COM - mpi communicator -! MPI_PRECISION - mpi precision ! NNEXTTAG, NMAXTAG - variable to define message tag ! ! Module MODD_PARAMETERS_ll @@ -2310,8 +2308,9 @@ INTEGER :: NB_REQ,NFIRST_REQ_RECV !------------------------------------------------------------------------------- ! USE MODD_ARGSLIST_ll, ONLY : LIST_ll + use modd_precision, only: MNHREAL_MPI USE MODD_STRUCTURE_ll, ONLY : CRSPD_ll, ZONE_ll - USE MODD_VAR_ll, ONLY : NCOMBUFFSIZE1, IP, MPI_PRECISION, NNEXTTAG, NMAXTAG + USE MODD_VAR_ll, ONLY : NCOMBUFFSIZE1, IP, NNEXTTAG, NMAXTAG USE MODD_DIM_ll, ONLY : NKMAX_TMP_ll USE MODD_PARAMETERS_ll, ONLY : JPVEXT ! @@ -2454,12 +2453,12 @@ endif ! JUAN !if defined(MNH_MPI_BSEND) IF (LMNH_MPI_BSEND) THEN - CALL MPI_BSEND(TZBUFFER, JINC, MPI_PRECISION, TZZONESEND%NUMBER - 1, & + CALL MPI_BSEND(TZBUFFER, JINC, MNHREAL_MPI, TZZONESEND%NUMBER - 1, & TZZONESEND%MSSGTAG + ITAGOFFSET, KMPI_COMM, KERROR) else ! JUAN !if defined (MNH_MPI_ISEND) - CALL MPI_ISEND(TZBUFFER(1,NB_REQ), JINC, MPI_PRECISION, TZZONESEND%NUMBER - 1, & + CALL MPI_ISEND(TZBUFFER(1,NB_REQ), JINC, MNHREAL_MPI, TZZONESEND%NUMBER - 1, & TZZONESEND%MSSGTAG + ITAGOFFSET, KMPI_COMM, REQ_TAB(NB_REQ), KERROR) endif @@ -2485,12 +2484,12 @@ endif !if defined (MNH_MPI_ISEND) IF ( .NOT. LMNH_MPI_BSEND) THEN NB_REQ = NB_REQ + 1 - CALL MPI_IRECV(TZBUFFER(1,NB_REQ), IBUFFSIZE, MPI_PRECISION, & + CALL MPI_IRECV(TZBUFFER(1,NB_REQ), IBUFFSIZE, MNHREAL_MPI, & TPMAILRECV%TELT%NUMBER -1 , & TPMAILRECV%TELT%MSSGTAG + ITAGOFFSET, & KMPI_COMM, REQ_TAB(NB_REQ), KERROR) else - CALL MPI_RECV(TZBUFFER, IBUFFSIZE, MPI_PRECISION, & + CALL MPI_RECV(TZBUFFER, IBUFFSIZE, MNHREAL_MPI, & TPMAILRECV%TELT%NUMBER -1 , & TPMAILRECV%TELT%MSSGTAG + ITAGOFFSET, & KMPI_COMM, IRECVSTATUS, KERROR) diff --git a/src/LIB/SURCOUCHE/src/mode_gather.f90 b/src/LIB/SURCOUCHE/src/mode_gather.f90 index adf0d740107fe9ac44bec0bb6f6e564a9303f2d5..fc88e913300251140d65b5f1786e4503868c4567 100644 --- a/src/LIB/SURCOUCHE/src/mode_gather.f90 +++ b/src/LIB/SURCOUCHE/src/mode_gather.f90 @@ -11,18 +11,11 @@ ! !----------------------------------------------------------------- -#ifdef MNH_MPI_DOUBLE_PRECISION -#define MPI_FLOAT MPI_DOUBLE_PRECISION -#else -#define MPI_FLOAT MPI_REAL -#endif - MODULE MODE_GATHER_ll USE MODD_MPIF -!JUANZ -USE MODD_VAR_ll, ONLY: NMNH_COMM_WORLD -!JUANZ +use modd_precision, only: MNHREAL_MPI +USE MODD_VAR_ll, ONLY: NMNH_COMM_WORLD IMPLICIT NONE @@ -74,7 +67,7 @@ ELSE PRINT *,'Error GATHERALL_X1' END IF ! PRECV variable of IROOT processor contains the global field -CALL MPI_BCAST(PRECV,SIZE(PRECV),MPI_FLOAT,IROOT-1,NMNH_COMM_WORLD,KRESP) +CALL MPI_BCAST(PRECV,SIZE(PRECV),MNHREAL_MPI,IROOT-1,NMNH_COMM_WORLD,KRESP) END SUBROUTINE GATHERALL_X1 @@ -99,7 +92,7 @@ ELSE PRINT *,'Error GATHERALL_X2' END IF ! PRECV variable of IROOT processor contains the global field -CALL MPI_BCAST(PRECV,SIZE(PRECV),MPI_FLOAT,IROOT-1,NMNH_COMM_WORLD,KRESP) +CALL MPI_BCAST(PRECV,SIZE(PRECV),MNHREAL_MPI,IROOT-1,NMNH_COMM_WORLD,KRESP) END SUBROUTINE GATHERALL_X2 @@ -125,7 +118,7 @@ ELSE KRESP = -1 END IF ! PRECV variable of IROOT processor contains the global field -CALL MPI_BCAST(PRECV,SIZE(PRECV),MPI_FLOAT,IROOT-1,NMNH_COMM_WORLD,KRESP) +CALL MPI_BCAST(PRECV,SIZE(PRECV),MNHREAL_MPI,IROOT-1,NMNH_COMM_WORLD,KRESP) END SUBROUTINE GATHERALL_X3 @@ -220,7 +213,7 @@ IF (ISP == KROOT) THEN IF (JI == KROOT) THEN XP = PSEND(IXO:IXE) ELSE - CALL MPI_RECV(XP,SIZE(XP),MPI_FLOAT,JI-1,99+KROOT,KCOMM,MPI_STATUS_IGNORE,IERR) + CALL MPI_RECV(XP,SIZE(XP),MNHREAL_MPI,JI-1,99+KROOT,KCOMM,MPI_STATUS_IGNORE,IERR) END IF ELSE IF (HDIR == 'YY' .AND. IXM <= IGXE .AND. IXM >= IGXO) THEN @@ -228,7 +221,7 @@ IF (ISP == KROOT) THEN IF (JI==KROOT) THEN XP = PSEND(IYO:IYE) ELSE - CALL MPI_RECV(XP,SIZE(XP),MPI_FLOAT,JI-1,99+KROOT,KCOMM,MPI_STATUS_IGNORE,IERR) + CALL MPI_RECV(XP,SIZE(XP),MNHREAL_MPI,JI-1,99+KROOT,KCOMM,MPI_STATUS_IGNORE,IERR) END IF END IF END DO @@ -241,15 +234,15 @@ ELSE IF (HDIR == 'XX' .AND. IYM <= IGYE .AND. IYM >= IGYO) THEN XP=>PSEND(IXO:IXE) NB_REQ = 1 - CALL MPI_ISEND(XP,SIZE(XP),MPI_FLOAT,KROOT-1,99+KROOT,KCOMM,REQ(NB_REQ),IERR) + CALL MPI_ISEND(XP,SIZE(XP),MNHREAL_MPI,KROOT-1,99+KROOT,KCOMM,REQ(NB_REQ),IERR) CALL MPI_WAITALL(NB_REQ,REQ,MNH_STATUSES_IGNORE,IERR) - !CALL MPI_BSEND(XP,SIZE(XP),MPI_FLOAT,KROOT-1,99+KROOT,KCOMM,IERR) + !CALL MPI_BSEND(XP,SIZE(XP),MNHREAL_MPI,KROOT-1,99+KROOT,KCOMM,IERR) ELSE IF (HDIR == 'YY' .AND. IXM <= IGXE .AND. IXM >= IGXO) THEN XP=>PSEND(IYO:IYE) NB_REQ = 1 - CALL MPI_ISEND(XP,SIZE(XP),MPI_FLOAT,KROOT-1,99+KROOT,KCOMM,REQ(NB_REQ),IERR) + CALL MPI_ISEND(XP,SIZE(XP),MNHREAL_MPI,KROOT-1,99+KROOT,KCOMM,REQ(NB_REQ),IERR) CALL MPI_WAITALL(NB_REQ,REQ,MNH_STATUSES_IGNORE,IERR) - !CALL MPI_BSEND(XP,SIZE(XP),MPI_FLOAT,KROOT-1,99+KROOT,KCOMM,IERR) + !CALL MPI_BSEND(XP,SIZE(XP),MNHREAL_MPI,KROOT-1,99+KROOT,KCOMM,IERR) END IF END IF @@ -290,7 +283,7 @@ IF (ISP == KROOT) THEN IF (JI == KROOT) THEN XP = PSEND(IXO:IXE,:) ELSE - CALL MPI_RECV(XP,SIZE(XP),MPI_FLOAT,JI-1,99+KROOT,KCOMM,MPI_STATUS_IGNORE,IERR) + CALL MPI_RECV(XP,SIZE(XP),MNHREAL_MPI,JI-1,99+KROOT,KCOMM,MPI_STATUS_IGNORE,IERR) END IF ELSE IF (HDIR == 'YY' .AND. IXM <= IGXE .AND. IXM >= IGXO) THEN @@ -298,7 +291,7 @@ IF (ISP == KROOT) THEN IF (JI==KROOT) THEN XP = PSEND(IYO:IYE,:) ELSE - CALL MPI_RECV(XP,SIZE(XP),MPI_FLOAT,JI-1,99+KROOT,KCOMM,MPI_STATUS_IGNORE,IERR) + CALL MPI_RECV(XP,SIZE(XP),MNHREAL_MPI,JI-1,99+KROOT,KCOMM,MPI_STATUS_IGNORE,IERR) END IF END IF END DO @@ -310,10 +303,10 @@ ELSE IF (HDIR == 'XX' .AND. IYM <= IGYE .AND. IYM >= IGYO) THEN XP=>PSEND(IXO:IXE,:) - CALL MPI_BSEND(XP,SIZE(XP),MPI_FLOAT,KROOT-1,99+KROOT,KCOMM,IERR) + CALL MPI_BSEND(XP,SIZE(XP),MNHREAL_MPI,KROOT-1,99+KROOT,KCOMM,IERR) ELSE IF (HDIR == 'YY' .AND. IXM <= IGXE .AND. IXM >= IGXO) THEN XP=>PSEND(IYO:IYE,:) - CALL MPI_BSEND(XP,SIZE(XP),MPI_FLOAT,KROOT-1,99+KROOT,KCOMM,IERR) + CALL MPI_BSEND(XP,SIZE(XP),MNHREAL_MPI,KROOT-1,99+KROOT,KCOMM,IERR) END IF END IF @@ -353,7 +346,7 @@ IF (ISP == KROOT) THEN IF (JI == KROOT) THEN XP = PSEND(IXO:IXE,:,:) ELSE - CALL MPI_RECV(XP,SIZE(XP),MPI_FLOAT,JI-1,99+KROOT,KCOMM,MPI_STATUS_IGNORE,IERR) + CALL MPI_RECV(XP,SIZE(XP),MNHREAL_MPI,JI-1,99+KROOT,KCOMM,MPI_STATUS_IGNORE,IERR) END IF ELSE IF (HDIR == 'YY' .AND. IXM <= IGXE .AND. IXM >= IGXO) THEN @@ -361,7 +354,7 @@ IF (ISP == KROOT) THEN IF (JI==KROOT) THEN XP = PSEND(IYO:IYE,:,:) ELSE - CALL MPI_RECV(XP,SIZE(XP),MPI_FLOAT,JI-1,99+KROOT,KCOMM,MPI_STATUS_IGNORE,IERR) + CALL MPI_RECV(XP,SIZE(XP),MNHREAL_MPI,JI-1,99+KROOT,KCOMM,MPI_STATUS_IGNORE,IERR) END IF END IF END DO @@ -373,10 +366,10 @@ ELSE IF (HDIR == 'XX' .AND. IYM <= IGYE .AND. IYM >= IGYO) THEN XP=>PSEND(IXO:IXE,:,:) - CALL MPI_BSEND(XP,SIZE(XP),MPI_FLOAT,KROOT-1,99+KROOT,KCOMM,IERR) + CALL MPI_BSEND(XP,SIZE(XP),MNHREAL_MPI,KROOT-1,99+KROOT,KCOMM,IERR) ELSE IF (HDIR == 'YY' .AND. IXM <= IGXE .AND. IXM >= IGXO) THEN XP=>PSEND(IYO:IYE,:,:) - CALL MPI_BSEND(XP,SIZE(XP),MPI_FLOAT,KROOT-1,99+KROOT,KCOMM,IERR) + CALL MPI_BSEND(XP,SIZE(XP),MNHREAL_MPI,KROOT-1,99+KROOT,KCOMM,IERR) END IF END IF @@ -416,7 +409,7 @@ IF (ISP == KROOT) THEN IF (JI == KROOT) THEN XP = PSEND(IXO:IXE,:,:,:) ELSE - CALL MPI_RECV(XP,SIZE(XP),MPI_FLOAT,JI-1,99+KROOT,KCOMM,MPI_STATUS_IGNORE,IERR) + CALL MPI_RECV(XP,SIZE(XP),MNHREAL_MPI,JI-1,99+KROOT,KCOMM,MPI_STATUS_IGNORE,IERR) END IF ELSE IF (HDIR == 'YY' .AND. IXM <= IGXE .AND. IXM >= IGXO) THEN @@ -424,7 +417,7 @@ IF (ISP == KROOT) THEN IF (JI==KROOT) THEN XP = PSEND(IYO:IYE,:,:,:) ELSE - CALL MPI_RECV(XP,SIZE(XP),MPI_FLOAT,JI-1,99+KROOT,KCOMM,MPI_STATUS_IGNORE,IERR) + CALL MPI_RECV(XP,SIZE(XP),MNHREAL_MPI,JI-1,99+KROOT,KCOMM,MPI_STATUS_IGNORE,IERR) END IF END IF END DO @@ -436,10 +429,10 @@ ELSE IF (HDIR == 'XX' .AND. IYM <= IGYE .AND. IYM >= IGYO) THEN XP=>PSEND(IXO:IXE,:,:,:) - CALL MPI_BSEND(XP,SIZE(XP),MPI_FLOAT,KROOT-1,99+KROOT,KCOMM,IERR) + CALL MPI_BSEND(XP,SIZE(XP),MNHREAL_MPI,KROOT-1,99+KROOT,KCOMM,IERR) ELSE IF (HDIR == 'YY' .AND. IXM <= IGXE .AND. IXM >= IGXO) THEN XP=>PSEND(IYO:IYE,:,:,:) - CALL MPI_BSEND(XP,SIZE(XP),MPI_FLOAT,KROOT-1,99+KROOT,KCOMM,IERR) + CALL MPI_BSEND(XP,SIZE(XP),MNHREAL_MPI,KROOT-1,99+KROOT,KCOMM,IERR) END IF END IF @@ -479,7 +472,7 @@ IF (ISP == KROOT) THEN IF (JI == KROOT) THEN XP = PSEND(IXO:IXE,:,:,:,:) ELSE - CALL MPI_RECV(XP,SIZE(XP),MPI_FLOAT,JI-1,99+KROOT,KCOMM,MPI_STATUS_IGNORE,IERR) + CALL MPI_RECV(XP,SIZE(XP),MNHREAL_MPI,JI-1,99+KROOT,KCOMM,MPI_STATUS_IGNORE,IERR) END IF ELSE IF (HDIR == 'YY' .AND. IXM <= IGXE .AND. IXM >= IGXO) THEN @@ -487,7 +480,7 @@ IF (ISP == KROOT) THEN IF (JI==KROOT) THEN XP = PSEND(IYO:IYE,:,:,:,:) ELSE - CALL MPI_RECV(XP,SIZE(XP),MPI_FLOAT,JI-1,99+KROOT,KCOMM,MPI_STATUS_IGNORE,IERR) + CALL MPI_RECV(XP,SIZE(XP),MNHREAL_MPI,JI-1,99+KROOT,KCOMM,MPI_STATUS_IGNORE,IERR) END IF END IF END DO @@ -499,10 +492,10 @@ ELSE IF (HDIR == 'XX' .AND. IYM <= IGYE .AND. IYM >= IGYO) THEN XP=>PSEND(IXO:IXE,:,:,:,:) - CALL MPI_BSEND(XP,SIZE(XP),MPI_FLOAT,KROOT-1,99+KROOT,KCOMM,IERR) + CALL MPI_BSEND(XP,SIZE(XP),MNHREAL_MPI,KROOT-1,99+KROOT,KCOMM,IERR) ELSE IF (HDIR == 'YY' .AND. IXM <= IGXE .AND. IXM >= IGXO) THEN XP=>PSEND(IYO:IYE,:,:,:,:) - CALL MPI_BSEND(XP,SIZE(XP),MPI_FLOAT,KROOT-1,99+KROOT,KCOMM,IERR) + CALL MPI_BSEND(XP,SIZE(XP),MNHREAL_MPI,KROOT-1,99+KROOT,KCOMM,IERR) END IF END IF @@ -542,7 +535,7 @@ IF (ISP == KROOT) THEN IF (JI == KROOT) THEN XP = PSEND(IXO:IXE,:,:,:,:,:) ELSE - CALL MPI_RECV(XP,SIZE(XP),MPI_FLOAT,JI-1,99+KROOT,KCOMM,MPI_STATUS_IGNORE,IERR) + CALL MPI_RECV(XP,SIZE(XP),MNHREAL_MPI,JI-1,99+KROOT,KCOMM,MPI_STATUS_IGNORE,IERR) END IF ELSE IF (HDIR == 'YY' .AND. IXM <= IGXE .AND. IXM >= IGXO) THEN @@ -550,7 +543,7 @@ IF (ISP == KROOT) THEN IF (JI==KROOT) THEN XP = PSEND(IYO:IYE,:,:,:,:,:) ELSE - CALL MPI_RECV(XP,SIZE(XP),MPI_FLOAT,JI-1,99+KROOT,KCOMM,MPI_STATUS_IGNORE,IERR) + CALL MPI_RECV(XP,SIZE(XP),MNHREAL_MPI,JI-1,99+KROOT,KCOMM,MPI_STATUS_IGNORE,IERR) END IF END IF END DO @@ -562,10 +555,10 @@ ELSE IF (HDIR == 'XX' .AND. IYM <= IGYE .AND. IYM >= IGYO) THEN XP=>PSEND(IXO:IXE,:,:,:,:,:) - CALL MPI_BSEND(XP,SIZE(XP),MPI_FLOAT,KROOT-1,99+KROOT,KCOMM,IERR) + CALL MPI_BSEND(XP,SIZE(XP),MNHREAL_MPI,KROOT-1,99+KROOT,KCOMM,IERR) ELSE IF (HDIR == 'YY' .AND. IXM <= IGXE .AND. IXM >= IGXO) THEN XP=>PSEND(IYO:IYE,:,:,:,:,:) - CALL MPI_BSEND(XP,SIZE(XP),MPI_FLOAT,KROOT-1,99+KROOT,KCOMM,IERR) + CALL MPI_BSEND(XP,SIZE(XP),MNHREAL_MPI,KROOT-1,99+KROOT,KCOMM,IERR) END IF END IF @@ -862,7 +855,7 @@ IF (ISP == KROOT) THEN CALL GET_DOMWRITE_ll(JI,'local',IXO,IXE,IYO,IYE,KXOBOX,KXEBOX,KYOBOX,KYEBOX,HINTER) XP = PSEND(IXO:IXE,IYO:IYE) ELSE - CALL MPI_RECV(XP,SIZE(XP),MPI_FLOAT,JI-1,99+KROOT,KCOMM,MPI_STATUS_IGNORE,IERR) + CALL MPI_RECV(XP,SIZE(XP),MNHREAL_MPI,JI-1,99+KROOT,KCOMM,MPI_STATUS_IGNORE,IERR) END IF END IF END DO @@ -874,10 +867,10 @@ ELSE NB_REQ = 1 ALLOCATE(X_2DP(IXO:IXE,IYO:IYE)) X_2DP=XP - CALL MPI_ISEND(X_2DP,SIZE(XP),MPI_FLOAT,KROOT-1,99+KROOT,KCOMM,REQ(NB_REQ),IERR) + CALL MPI_ISEND(X_2DP,SIZE(XP),MNHREAL_MPI,KROOT-1,99+KROOT,KCOMM,REQ(NB_REQ),IERR) CALL MPI_WAITALL(NB_REQ,REQ,MNH_STATUSES_IGNORE,IERR) DEALLOCATE(X_2DP) - !CALL MPI_BSEND(XP,SIZE(XP),MPI_FLOAT,KROOT-1,99+KROOT,KCOMM,IERR) + !CALL MPI_BSEND(XP,SIZE(XP),MNHREAL_MPI,KROOT-1,99+KROOT,KCOMM,IERR) END IF END IF @@ -911,7 +904,7 @@ IF (ISP == KROOT) THEN CALL GET_DOMWRITE_ll(JI,'local',IXO,IXE,IYO,IYE,KXOBOX,KXEBOX,KYOBOX,KYEBOX,HINTER) XP = PSEND(IXO:IXE,IYO:IYE,:) ELSE - CALL MPI_RECV(XP,SIZE(XP),MPI_FLOAT,JI-1,99+KROOT,KCOMM,MPI_STATUS_IGNORE,IERR) + CALL MPI_RECV(XP,SIZE(XP),MNHREAL_MPI,JI-1,99+KROOT,KCOMM,MPI_STATUS_IGNORE,IERR) END IF END IF END DO @@ -920,7 +913,7 @@ ELSE CALL GET_DOMWRITE_ll(ISP,'local',IXO,IXE,IYO,IYE,KXOBOX,KXEBOX,KYOBOX,KYEBOX,HINTER) IF (IXO /= 0) THEN ! intersection is not empty XP=>PSEND(IXO:IXE,IYO:IYE,:) - CALL MPI_BSEND(XP,SIZE(XP),MPI_FLOAT,KROOT-1,99+KROOT,KCOMM,IERR) + CALL MPI_BSEND(XP,SIZE(XP),MNHREAL_MPI,KROOT-1,99+KROOT,KCOMM,IERR) END IF END IF @@ -954,7 +947,7 @@ IF (ISP == KROOT) THEN CALL GET_DOMWRITE_ll(JI,'local',IXO,IXE,IYO,IYE,KXOBOX,KXEBOX,KYOBOX,KYEBOX,HINTER) XP = PSEND(IXO:IXE,IYO:IYE,:,:) ELSE - CALL MPI_RECV(XP,SIZE(XP),MPI_FLOAT,JI-1,99+KROOT,KCOMM,MPI_STATUS_IGNORE,IERR) + CALL MPI_RECV(XP,SIZE(XP),MNHREAL_MPI,JI-1,99+KROOT,KCOMM,MPI_STATUS_IGNORE,IERR) END IF END IF END DO @@ -963,7 +956,7 @@ ELSE CALL GET_DOMWRITE_ll(ISP,'local',IXO,IXE,IYO,IYE,KXOBOX,KXEBOX,KYOBOX,KYEBOX,HINTER) IF (IXO /= 0) THEN ! intersection is not empty XP=>PSEND(IXO:IXE,IYO:IYE,:,:) - CALL MPI_BSEND(XP,SIZE(XP),MPI_FLOAT,KROOT-1,99+KROOT,KCOMM,IERR) + CALL MPI_BSEND(XP,SIZE(XP),MNHREAL_MPI,KROOT-1,99+KROOT,KCOMM,IERR) END IF END IF @@ -997,7 +990,7 @@ IF (ISP == KROOT) THEN CALL GET_DOMWRITE_ll(JI,'local',IXO,IXE,IYO,IYE,KXOBOX,KXEBOX,KYOBOX,KYEBOX,HINTER) XP = PSEND(IXO:IXE,IYO:IYE,:,:,:) ELSE - CALL MPI_RECV(XP,SIZE(XP),MPI_FLOAT,JI-1,99+KROOT,KCOMM,MPI_STATUS_IGNORE,IERR) + CALL MPI_RECV(XP,SIZE(XP),MNHREAL_MPI,JI-1,99+KROOT,KCOMM,MPI_STATUS_IGNORE,IERR) END IF END IF END DO @@ -1006,7 +999,7 @@ ELSE CALL GET_DOMWRITE_ll(ISP,'local',IXO,IXE,IYO,IYE,KXOBOX,KXEBOX,KYOBOX,KYEBOX,HINTER) IF (IXO /= 0) THEN ! intersection is not empty XP=>PSEND(IXO:IXE,IYO:IYE,:,:,:) - CALL MPI_BSEND(XP,SIZE(XP),MPI_FLOAT,KROOT-1,99+KROOT,KCOMM,IERR) + CALL MPI_BSEND(XP,SIZE(XP),MNHREAL_MPI,KROOT-1,99+KROOT,KCOMM,IERR) END IF END IF @@ -1040,7 +1033,7 @@ IF (ISP == KROOT) THEN CALL GET_DOMWRITE_ll(JI,'local',IXO,IXE,IYO,IYE,KXOBOX,KXEBOX,KYOBOX,KYEBOX,HINTER) XP = PSEND(IXO:IXE,IYO:IYE,:,:,:,:) ELSE - CALL MPI_RECV(XP,SIZE(XP),MPI_FLOAT,JI-1,99+KROOT,KCOMM,MPI_STATUS_IGNORE,IERR) + CALL MPI_RECV(XP,SIZE(XP),MNHREAL_MPI,JI-1,99+KROOT,KCOMM,MPI_STATUS_IGNORE,IERR) END IF END IF END DO @@ -1049,7 +1042,7 @@ ELSE CALL GET_DOMWRITE_ll(ISP,'local',IXO,IXE,IYO,IYE,KXOBOX,KXEBOX,KYOBOX,KYEBOX,HINTER) IF (IXO /= 0) THEN ! intersection is not empty XP=>PSEND(IXO:IXE,IYO:IYE,:,:,:,:) - CALL MPI_BSEND(XP,SIZE(XP),MPI_FLOAT,KROOT-1,99+KROOT,KCOMM,IERR) + CALL MPI_BSEND(XP,SIZE(XP),MNHREAL_MPI,KROOT-1,99+KROOT,KCOMM,IERR) END IF END IF @@ -1159,7 +1152,7 @@ IF (ISP == KROOT) THEN CALL GET_DOMWRITE_ll(JI,'local',IXO,IXE,IYO,IYE,KXOBOX,KXEBOX,KYOBOX,KYEBOX) XP = PSEND(IXO:IXE,IYO:IYE) ELSE - CALL MPI_RECV(XP,SIZE(XP),MPI_FLOAT,JI-1,99+KROOT,KCOMM,MPI_STATUS_IGNORE,IERR) + CALL MPI_RECV(XP,SIZE(XP),MNHREAL_MPI,JI-1,99+KROOT,KCOMM,MPI_STATUS_IGNORE,IERR) END IF END IF END DO @@ -1168,7 +1161,7 @@ ELSE CALL GET_DOMWRITE_ll(ISP,'local',IXO,IXE,IYO,IYE,KXOBOX,KXEBOX,KYOBOX,KYEBOX) IF (IXO /= 0) THEN ! intersection is not empty XP=>PSEND(IXO:IXE,IYO:IYE) - CALL MPI_BSEND(XP,SIZE(XP),MPI_FLOAT,KROOT-1,99+KROOT,KCOMM,IERR) + CALL MPI_BSEND(XP,SIZE(XP),MNHREAL_MPI,KROOT-1,99+KROOT,KCOMM,IERR) END IF END IF diff --git a/src/LIB/SURCOUCHE/src/mode_init_ll.f90 b/src/LIB/SURCOUCHE/src/mode_init_ll.f90 index aa0d0c7c4363984001844a9c87944afceef626d3..f6d436cf531b13fbc527b896b125050a3acb53a3 100644 --- a/src/LIB/SURCOUCHE/src/mode_init_ll.f90 +++ b/src/LIB/SURCOUCHE/src/mode_init_ll.f90 @@ -3,15 +3,6 @@ !MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt !MNH_LIC for details. version 1. !----------------------------------------------------------------- - -#ifdef MNH_MPI_DOUBLE_PRECISION -#define MNH_MPI_REAL MPI_DOUBLE_PRECISION -#define MNH_MPI_2REAL MPI_2DOUBLE_PRECISION -#else -#define MNH_MPI_REAL MPI_REAL -#define MNH_MPI_2REAL MPI_2REAL -#endif - ! ################### MODULE MODE_INIT_ll ! ################### @@ -61,8 +52,6 @@ USE MODD_MPIF ! IMPLICIT NONE -! -! INCLUDE 'mpif.h' ! CONTAINS ! @@ -555,9 +544,6 @@ ! IP = IP + 1 ! - MPI_PRECISION = MNH_MPI_REAL - MPI_2PRECISION = MNH_MPI_2REAL - ! !------------------------------------------------------------------------------- ! !* 3. ALLOCATION : diff --git a/src/LIB/SURCOUCHE/src/mode_io_field_read.f90 b/src/LIB/SURCOUCHE/src/mode_io_field_read.f90 index 495fc3bbb45cdee27ac1596694f394d928c120ec..879ac1ab6641c1701a6aec1a8f7f82933cd6471f 100644 --- a/src/LIB/SURCOUCHE/src/mode_io_field_read.f90 +++ b/src/LIB/SURCOUCHE/src/mode_io_field_read.f90 @@ -14,16 +14,11 @@ ! P. Wautelet 10/04/2019: replace ABORT and STOP calls by Print_msg !----------------------------------------------------------------- -#ifdef MNH_MPI_DOUBLE_PRECISION -#define MPI_FLOAT MPI_DOUBLE_PRECISION -#else -#define MPI_FLOAT MPI_REAL -#endif - MODULE MODE_IO_FIELD_READ ! USE MODD_IO, ONLY : NVERB_FATAL,NVERB_ERROR,NVERB_WARNING,NVERB_INFO,NVERB_DEBUG,TFILEDATA USE MODD_MPIF +use modd_precision, only: MNHREAL_MPI ! USE MODE_FIELD USE MODE_IO_READ_LFI @@ -183,7 +178,7 @@ IF (IRESP==0) THEN IF (IRESP==-111) CALL IO_Field_metadata_bcast(TPFILE,TPFIELD) ! ! Broadcast Field - CALL MPI_BCAST(PFIELD,1,MPI_FLOAT,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR) + CALL MPI_BCAST(PFIELD,1,MNHREAL_MPI,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR) END IF END IF ! @@ -282,7 +277,7 @@ IF (IRESP==0) THEN ! IF (TPFIELD%CDIR /= 'XX' .AND. TPFIELD%CDIR /='YY') THEN ! Broadcast Field - CALL MPI_BCAST(PFIELD,SIZE(PFIELD),MPI_FLOAT,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR) + CALL MPI_BCAST(PFIELD,SIZE(PFIELD),MNHREAL_MPI,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR) ELSE !Scatter Field CALL SCATTER_XXFIELD(TPFIELD%CDIR,ZFIELDP,PFIELD,TPFILE%NMASTER_RANK,TPFILE%NMPICOMM,TPSPLITTING) @@ -452,7 +447,7 @@ IF (IRESP==0) THEN #endif END IF ELSE - CALL MPI_BCAST(PFIELD,SIZE(PFIELD),MPI_FLOAT,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR) + CALL MPI_BCAST(PFIELD,SIZE(PFIELD),MNHREAL_MPI,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR) END IF CALL SECOND_MNH2(T2) TIMEZ%T_READ2D_SCAT=TIMEZ%T_READ2D_SCAT + T2 - T1 @@ -614,7 +609,7 @@ IF (IRESP==0) THEN END IF ELSE ! Broadcast Field - CALL MPI_BCAST(PFIELD,SIZE(PFIELD),MPI_FLOAT,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR) + CALL MPI_BCAST(PFIELD,SIZE(PFIELD),MNHREAL_MPI,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR) END IF ELSE ! multiprocesses execution & // IO ! @@ -734,9 +729,9 @@ IF (IRESP==0) THEN NB_REQ = NB_REQ + 1 ALLOCATE(T_TX2DP(NB_REQ)%X(IXO:IXE,IYO:IYE)) T_TX2DP(NB_REQ)%X=TX2DP - CALL MPI_ISEND(T_TX2DP(NB_REQ)%X,SIZE(TX2DP),MPI_FLOAT,JI-1,199+IK_RANK, & + CALL MPI_ISEND(T_TX2DP(NB_REQ)%X,SIZE(TX2DP),MNHREAL_MPI,JI-1,199+IK_RANK, & TZFILE%NMPICOMM,REQ_TAB(NB_REQ),IERR) - !CALL MPI_BSEND(TX2DP,SIZE(TX2DP),MPI_FLOAT,JI-1,199+IK_RANK,TZFILE%NMPICOMM,IERR) + !CALL MPI_BSEND(TX2DP,SIZE(TX2DP),MNHREAL_MPI,JI-1,199+IK_RANK,TZFILE%NMPICOMM,IERR) ELSE PFIELD(:,:,JKK) = TX2DP(:,:) END IF @@ -783,7 +778,7 @@ IF (IRESP==0) THEN ZSLICE => PFIELD(:,:,JKK) !CALL SCATTER_XYFIELD(ZSLICE_ll,ZSLICE,TZFILE%NMASTER_RANK,TZFILE%NMPICOMM) IF (ISP .NE. IK_RANK) THEN - CALL MPI_RECV(ZSLICE,SIZE(ZSLICE),MPI_FLOAT,IK_RANK-1,199+IK_RANK, & + CALL MPI_RECV(ZSLICE,SIZE(ZSLICE),MNHREAL_MPI,IK_RANK-1,199+IK_RANK, & TZFILE%NMPICOMM,STATUS,IERR) END IF TZFILE => NULL() @@ -794,7 +789,7 @@ IF (IRESP==0) THEN ELSE ! Broadcast Field call Print_msg( NVERB_FATAL, 'GEN', 'IO_Field_read_byfield_X3', 'broadcast field not yet planned on Blue Gene' ) - CALL MPI_BCAST(PFIELD,SIZE(PFIELD),MPI_FLOAT,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR) + CALL MPI_BCAST(PFIELD,SIZE(PFIELD),MNHREAL_MPI,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR) END IF CALL SECOND_MNH2(T0) IF (NB_REQ .GT.0 ) THEN @@ -942,7 +937,7 @@ IF (IRESP==0) THEN CALL SCATTER_XYFIELD(ZFIELDP,PFIELD,TPFILE%NMASTER_RANK,TPFILE%NMPICOMM) END IF ELSE - CALL MPI_BCAST(PFIELD,SIZE(PFIELD),MPI_FLOAT,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR) + CALL MPI_BCAST(PFIELD,SIZE(PFIELD),MNHREAL_MPI,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR) END IF END IF END IF @@ -1067,7 +1062,7 @@ IF (IRESP==0) THEN CALL SCATTER_XYFIELD(ZFIELDP,PFIELD,TPFILE%NMASTER_RANK,TPFILE%NMPICOMM) END IF ELSE - CALL MPI_BCAST(PFIELD,SIZE(PFIELD),MPI_FLOAT,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR) + CALL MPI_BCAST(PFIELD,SIZE(PFIELD),MNHREAL_MPI,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR) END IF END IF END IF @@ -1174,7 +1169,7 @@ IF (IRESP==0) THEN ! XY Scatter Field CALL SCATTER_XYFIELD(ZFIELDP,PFIELD,TPFILE%NMASTER_RANK,TPFILE%NMPICOMM) ELSE - CALL MPI_BCAST(PFIELD,SIZE(PFIELD),MPI_FLOAT,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR) + CALL MPI_BCAST(PFIELD,SIZE(PFIELD),MNHREAL_MPI,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR) END IF END IF END IF @@ -1459,7 +1454,7 @@ IF (IRESP==0) THEN ! XX or YY Scatter Field CALL SCATTER_XXFIELD(TPFIELD%CDIR,IFIELDP,KFIELD,TPFILE%NMASTER_RANK,TPFILE%NMPICOMM) ! Broadcast Field - CALL MPI_BCAST(KFIELD,SIZE(KFIELD),MPI_FLOAT,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR) + CALL MPI_BCAST(KFIELD,SIZE(KFIELD),MNHREAL_MPI,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR) ELSE IF (TPFIELD%CDIR == 'XY') THEN IF (LPACK .AND. L2D) THEN ! 2D compact case @@ -1779,7 +1774,7 @@ IF (IRESP==0) THEN IF (IRESP==-111) CALL IO_Field_metadata_bcast(TPFILE,TPFIELD) ! CALL MPI_BCAST(ITDATE, 3,MPI_INTEGER,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR) - CALL MPI_BCAST(TPDATA%TIME,1,MPI_FLOAT, TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR) + CALL MPI_BCAST(TPDATA%TIME,1,MNHREAL_MPI, TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR) TPDATA%TDATE%YEAR = ITDATE(1) TPDATA%TDATE%MONTH = ITDATE(2) TPDATA%TDATE%DAY = ITDATE(3) @@ -1962,8 +1957,8 @@ IF (IRESP==0) THEN NB_REQ = NB_REQ + 1 ALLOCATE(T_TX3DP(NB_REQ)%X(IIB:IIE,IJB:IJE,IKU)) T_TX3DP(NB_REQ)%X=Z3D(IIB:IIE,IJB:IJE,:) - CALL MPI_ISEND(T_TX3DP(NB_REQ)%X,SIZE(TX3DP),MPI_FLOAT,JI-1,99,TPFILE%NMPICOMM,REQ_TAB(NB_REQ),IERR) - !CALL MPI_BSEND(T_TX3DP(NB_REQ)%X,SIZE(TX3DP),MPI_FLOAT,JI-1,99,TPFILE%NMPICOMM,IERR) + CALL MPI_ISEND(T_TX3DP(NB_REQ)%X,SIZE(TX3DP),MNHREAL_MPI,JI-1,99,TPFILE%NMPICOMM,REQ_TAB(NB_REQ),IERR) + !CALL MPI_BSEND(T_TX3DP(NB_REQ)%X,SIZE(TX3DP),MNHREAL_MPI,JI-1,99,TPFILE%NMPICOMM,IERR) ELSE CALL GET_DISTRIB_lb(YLBTYPE,JI,'LOC','READ',KRIM,IIB,IIE,IJB,IJE) PLB(IIB:IIE,IJB:IJE,:) = TX3DP(:,:,:) @@ -1990,9 +1985,9 @@ IF (IRESP==0) THEN CALL GET_DISTRIB_lb(YLBTYPE,ISP,'LOC','READ',KRIM,IIB,IIE,IJB,IJE) IF (IIB /= 0) THEN TX3DP=>PLB(IIB:IIE,IJB:IJE,:) - CALL MPI_RECV(TX3DP,SIZE(TX3DP),MPI_FLOAT,TPFILE%NMASTER_RANK-1,99,TPFILE%NMPICOMM,STATUS,IERR) + CALL MPI_RECV(TX3DP,SIZE(TX3DP),MNHREAL_MPI,TPFILE%NMASTER_RANK-1,99,TPFILE%NMPICOMM,STATUS,IERR) !NB_REQ = NB_REQ + 1 - !CALL MPI_IRECV(TX3DP,SIZE(TX3DP),MPI_FLOAT,TPFILE%NMASTER_RANK-1,99,TPFILE%NMPICOMM,REQ_TAB(NB_REQ),IERR) + !CALL MPI_IRECV(TX3DP,SIZE(TX3DP),MNHREAL_MPI,TPFILE%NMASTER_RANK-1,99,TPFILE%NMPICOMM,REQ_TAB(NB_REQ),IERR) !IF (NB_REQ .GT.0 ) CALL MPI_WAITALL(NB_REQ,REQ_TAB,MNH_STATUSES_IGNORE,IERR) END IF CALL SECOND_MNH2(T1) diff --git a/src/LIB/SURCOUCHE/src/mode_io_field_write.f90 b/src/LIB/SURCOUCHE/src/mode_io_field_write.f90 index a3e33e2c93fab49425ab05e0f6edf8d01739824a..44504116599a419365056964944265dfcbf11104 100644 --- a/src/LIB/SURCOUCHE/src/mode_io_field_write.f90 +++ b/src/LIB/SURCOUCHE/src/mode_io_field_write.f90 @@ -12,18 +12,13 @@ ! P. Wautelet 10/04/2019: replace ABORT and STOP calls by Print_msg !----------------------------------------------------------------- -#ifdef MNH_MPI_DOUBLE_PRECISION -#define MPI_FLOAT MPI_DOUBLE_PRECISION -#else -#define MPI_FLOAT MPI_REAL -#endif - #define MNH_SCALARS_IN_SPLITFILES 0 MODULE MODE_IO_FIELD_WRITE + USE MODD_IO, ONLY: TFILEDATA, TOUTBAK USE MODD_MPIF - USE MODD_IO, ONLY: TFILEDATA, TOUTBAK + use modd_precision, only: MNHINT_MPI, MNHREAL_MPI USE MODE_FIELD USE MODE_IO_WRITE_LFI @@ -319,7 +314,7 @@ CONTAINS IF (GNC4) CALL IO_Field_write_nc4(TPFILE,TPFIELD,PFIELD,IRESP) END IF ! - CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR) + CALL MPI_BCAST(IRESP,1,MNHINT_MPI,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR) END IF ! multiprocesses execution #if MNH_SCALARS_IN_SPLITFILES IF (TPFILE%NSUBFILES_IOZ>0) THEN @@ -420,11 +415,7 @@ CONTAINS IF (GLFI) CALL IO_Field_write_lfi(TPFILE,TPFIELD,PFIELD,IRESP) IF (GNC4) CALL IO_Field_write_nc4(TPFILE,TPFIELD,PFIELD,IRESP) ELSE ! multiprocesses execution -#if ( MNH_INT == 4 ) - CALL MPI_ALLREDUCE(SIZE(PFIELD),ISIZEMAX,1,MPI_INTEGER,MPI_MAX,TPFILE%NMPICOMM,IRESP) -#else - CALL MPI_ALLREDUCE(SIZE(PFIELD),ISIZEMAX,1,MPI_INTEGER8,MPI_MAX,TPFILE%NMPICOMM,IRESP) -#endif + CALL MPI_ALLREDUCE(SIZE(PFIELD),ISIZEMAX,1,MNHINT_MPI,MPI_MAX,TPFILE%NMPICOMM,IRESP) IF (ISIZEMAX==0) THEN CALL PRINT_MSG(NVERB_INFO,'IO','IO_Field_write_byfield_X1','ignoring variable with a zero size ('//TRIM(YRECFM)//')') IF (PRESENT(KRESP)) KRESP=0 @@ -447,7 +438,7 @@ CONTAINS IF (GNC4) CALL IO_Field_write_nc4(TPFILE,TPFIELD,ZFIELDP,IRESP) END IF ! - CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR) + CALL MPI_BCAST(IRESP,1,MNHINT_MPI,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR) END IF ! multiprocesses execution END IF ! @@ -564,11 +555,7 @@ CONTAINS END IF ELSE ! multiprocesses execution CALL SECOND_MNH2(T0) -#if ( MNH_INT == 4 ) - CALL MPI_ALLREDUCE(SIZE(PFIELD),ISIZEMAX,1,MPI_INTEGER,MPI_MAX,TPFILE%NMPICOMM,IRESP) -#else - CALL MPI_ALLREDUCE(SIZE(PFIELD),ISIZEMAX,1,MPI_INTEGER8,MPI_MAX,TPFILE%NMPICOMM,IRESP) -#endif + CALL MPI_ALLREDUCE(SIZE(PFIELD),ISIZEMAX,1,MNHINT_MPI,MPI_MAX,TPFILE%NMPICOMM,IRESP) IF (ISIZEMAX==0) THEN CALL PRINT_MSG(NVERB_INFO,'IO','IO_Field_write_byfield_X2','ignoring variable with a zero size ('//TRIM(YRECFM)//')') IF (PRESENT(KRESP)) KRESP=0 @@ -628,7 +615,7 @@ CONTAINS CALL SECOND_MNH2(T2) TIMEZ%T_WRIT2D_WRIT=TIMEZ%T_WRIT2D_WRIT + T2 - T1 ! - CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR) + CALL MPI_BCAST(IRESP,1,MNHINT_MPI,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR) END IF END IF ! @@ -767,11 +754,7 @@ CONTAINS IF (GNC4) CALL IO_Field_write_nc4(TPFILE,TPFIELD,PFIELD,IRESP) END IF ELSEIF ( TPFILE%NSUBFILES_IOZ==0 .OR. YDIR=='--' ) THEN ! multiprocesses execution & 1 proc IO -#if ( MNH_INT == 4 ) - CALL MPI_ALLREDUCE(SIZE(PFIELD),ISIZEMAX,1,MPI_INTEGER,MPI_MAX,TPFILE%NMPICOMM,IRESP) -#else - CALL MPI_ALLREDUCE(SIZE(PFIELD),ISIZEMAX,1,MPI_INTEGER8,MPI_MAX,TPFILE%NMPICOMM,IRESP) -#endif + CALL MPI_ALLREDUCE(SIZE(PFIELD),ISIZEMAX,1,MNHINT_MPI,MPI_MAX,TPFILE%NMPICOMM,IRESP) IF (ISIZEMAX==0) THEN CALL PRINT_MSG(NVERB_INFO,'IO','IO_Field_write_byfield_X3','ignoring variable with a zero size ('//TRIM(YRECFM)//')') IF (PRESENT(KRESP)) KRESP=0 @@ -801,14 +784,10 @@ CONTAINS IF (GNC4) CALL IO_Field_write_nc4(TPFILE,TPFIELD,ZFIELDP,IRESP) END IF ! - CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR) + CALL MPI_BCAST(IRESP,1,MNHINT_MPI,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR) ! ELSE ! multiprocesses execution & // IO -#if ( MNH_INT == 4 ) - CALL MPI_ALLREDUCE(SIZE(PFIELD),ISIZEMAX,1,MPI_INTEGER,MPI_MAX,TPFILE%NMPICOMM,IRESP) -#else - CALL MPI_ALLREDUCE(SIZE(PFIELD),ISIZEMAX,1,MPI_INTEGER8,MPI_MAX,TPFILE%NMPICOMM,IRESP) -#endif + CALL MPI_ALLREDUCE(SIZE(PFIELD),ISIZEMAX,1,MNHINT_MPI,MPI_MAX,TPFILE%NMPICOMM,IRESP) IF (ISIZEMAX==0) THEN CALL PRINT_MSG(NVERB_INFO,'IO','IO_Field_write_byfield_X3','ignoring variable with a zero size ('//TRIM(YRECFM)//')') IF (PRESENT(KRESP)) KRESP=0 @@ -919,9 +898,9 @@ CONTAINS ZSLICE => PFIELD(:,:,JKK) TX2DP=>ZSLICE(IXO:IXE,IYO:IYE) T_TX2DP(NB_REQ)%X=ZSLICE(IXO:IXE,IYO:IYE) - CALL MPI_ISEND(T_TX2DP(NB_REQ)%X,SIZE(TX2DP),MPI_FLOAT,IK_RANK-1,99+IK_RANK & + CALL MPI_ISEND(T_TX2DP(NB_REQ)%X,SIZE(TX2DP),MNHREAL_MPI,IK_RANK-1,99+IK_RANK & & ,TZFILE%NMPICOMM,REQ_TAB(NB_REQ),IERR) - !CALL MPI_BSEND(TX2DP,SIZE(TX2DP),MPI_FLOAT,IK_RANK-1,99+IK_RANK,TZFILE%NMPICOMM,IERR) + !CALL MPI_BSEND(TX2DP,SIZE(TX2DP),MNHREAL_MPI,IK_RANK-1,99+IK_RANK,TZFILE%NMPICOMM,IERR) END IF END IF CALL SECOND_MNH2(T1) @@ -957,7 +936,7 @@ CONTAINS ZSLICE => PFIELD(:,:,JKK) TX2DP = ZSLICE(IXO:IXE,IYO:IYE) ELSE - CALL MPI_RECV(TX2DP,SIZE(TX2DP),MPI_FLOAT,JI-1,99+IK_RANK,TZFILE%NMPICOMM,STATUS,IERR) + CALL MPI_RECV(TX2DP,SIZE(TX2DP),MNHREAL_MPI,JI-1,99+IK_RANK,TZFILE%NMPICOMM,STATUS,IERR) END IF END IF END DO @@ -1090,11 +1069,7 @@ CONTAINS IF (GNC4) CALL IO_Field_write_nc4(TPFILE,TPFIELD,PFIELD,IRESP) END IF ELSE -#if ( MNH_INT == 4 ) - CALL MPI_ALLREDUCE(SIZE(PFIELD),ISIZEMAX,1,MPI_INTEGER,MPI_MAX,TPFILE%NMPICOMM,IRESP) -#else - CALL MPI_ALLREDUCE(SIZE(PFIELD),ISIZEMAX,1,MPI_INTEGER8,MPI_MAX,TPFILE%NMPICOMM,IRESP) -#endif + CALL MPI_ALLREDUCE(SIZE(PFIELD),ISIZEMAX,1,MNHINT_MPI,MPI_MAX,TPFILE%NMPICOMM,IRESP) IF (ISIZEMAX==0) THEN CALL PRINT_MSG(NVERB_INFO,'IO','IO_Field_write_byfield_X4','ignoring variable with a zero size ('//TRIM(YRECFM)//')') IF (PRESENT(KRESP)) KRESP=0 @@ -1123,7 +1098,7 @@ CONTAINS IF (GNC4) CALL IO_Field_write_nc4(TPFILE,TPFIELD,ZFIELDP,IRESP) END IF ! - CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR) + CALL MPI_BCAST(IRESP,1,MNHINT_MPI,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR) END IF ! multiprocess execution END IF ! @@ -1228,11 +1203,7 @@ CONTAINS IF (GNC4) CALL IO_Field_write_nc4(TPFILE,TPFIELD,PFIELD,IRESP) END IF ELSE -#if ( MNH_INT == 4 ) - CALL MPI_ALLREDUCE(SIZE(PFIELD),ISIZEMAX,1,MPI_INTEGER,MPI_MAX,TPFILE%NMPICOMM,IRESP) -#else - CALL MPI_ALLREDUCE(SIZE(PFIELD),ISIZEMAX,1,MPI_INTEGER8,MPI_MAX,TPFILE%NMPICOMM,IRESP) -#endif + CALL MPI_ALLREDUCE(SIZE(PFIELD),ISIZEMAX,1,MNHINT_MPI,MPI_MAX,TPFILE%NMPICOMM,IRESP) IF (ISIZEMAX==0) THEN CALL PRINT_MSG(NVERB_INFO,'IO','IO_Field_write_byfield_X5','ignoring variable with a zero size ('//TRIM(YRECFM)//')') IF (PRESENT(KRESP)) KRESP=0 @@ -1262,7 +1233,7 @@ CONTAINS IF (GNC4) CALL IO_Field_write_nc4(TPFILE,TPFIELD,ZFIELDP,IRESP) END IF ! - CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR) + CALL MPI_BCAST(IRESP,1,MNHINT_MPI,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR) END IF ! multiprocess execution END IF ! @@ -1356,11 +1327,7 @@ CONTAINS IF (GLFI) CALL IO_Field_write_lfi(TPFILE,TPFIELD,PFIELD,IRESP) IF (GNC4) CALL IO_Field_write_nc4(TPFILE,TPFIELD,PFIELD,IRESP) ELSE -#if ( MNH_INT == 4 ) - CALL MPI_ALLREDUCE(SIZE(PFIELD),ISIZEMAX,1,MPI_INTEGER,MPI_MAX,TPFILE%NMPICOMM,IRESP) -#else - CALL MPI_ALLREDUCE(SIZE(PFIELD),ISIZEMAX,1,MPI_INTEGER8,MPI_MAX,TPFILE%NMPICOMM,IRESP) -#endif + CALL MPI_ALLREDUCE(SIZE(PFIELD),ISIZEMAX,1,MNHINT_MPI,MPI_MAX,TPFILE%NMPICOMM,IRESP) IF (ISIZEMAX==0) THEN CALL PRINT_MSG(NVERB_INFO,'IO','IO_Field_write_byfield_X6','ignoring variable with a zero size ('//TRIM(YRECFM)//')') IF (PRESENT(KRESP)) KRESP=0 @@ -1385,7 +1352,7 @@ CONTAINS IF (GNC4) CALL IO_Field_write_nc4(TPFILE,TPFIELD,ZFIELDP,IRESP) END IF ! - CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR) + CALL MPI_BCAST(IRESP,1,MNHINT_MPI,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR) END IF ! multiprocess execution END IF ! @@ -1468,7 +1435,7 @@ CONTAINS IF (GNC4) CALL IO_Field_write_nc4(TPFILE,TPFIELD,KFIELD,IRESP) END IF ! - CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR) + CALL MPI_BCAST(IRESP,1,MNHINT_MPI,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR) END IF ! multiprocess execution #if MNH_SCALARS_IN_SPLITFILES IF (TPFILE%NSUBFILES_IOZ>0) THEN @@ -1568,11 +1535,7 @@ CONTAINS IF (GLFI) CALL IO_Field_write_lfi(TPFILE,TPFIELD,KFIELD,IRESP) IF (GNC4) CALL IO_Field_write_nc4(TPFILE,TPFIELD,KFIELD,IRESP) ELSE ! multiprocesses execution -#if ( MNH_INT == 4 ) - CALL MPI_ALLREDUCE(SIZE(KFIELD),ISIZEMAX,1,MPI_INTEGER,MPI_MAX,TPFILE%NMPICOMM,IRESP) -#else - CALL MPI_ALLREDUCE(SIZE(KFIELD),ISIZEMAX,1,MPI_INTEGER8,MPI_MAX,TPFILE%NMPICOMM,IRESP) -#endif + CALL MPI_ALLREDUCE(SIZE(KFIELD),ISIZEMAX,1,MNHINT_MPI,MPI_MAX,TPFILE%NMPICOMM,IRESP) IF (ISIZEMAX==0) THEN CALL PRINT_MSG(NVERB_INFO,'IO','IO_Field_write_byfield_N1','ignoring variable with a zero size ('//TRIM(YRECFM)//')') IF (PRESENT(KRESP)) KRESP=0 @@ -1595,7 +1558,7 @@ CONTAINS IF (GNC4) CALL IO_Field_write_nc4(TPFILE,TPFIELD,IFIELDP,IRESP) END IF ! - CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR) + CALL MPI_BCAST(IRESP,1,MNHINT_MPI,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR) END IF END IF ! @@ -1706,11 +1669,7 @@ CONTAINS IF (GNC4) CALL IO_Field_write_nc4(TPFILE,TPFIELD,KFIELD,IRESP) END IF ELSE ! multiprocesses execution -#if ( MNH_INT == 4 ) - CALL MPI_ALLREDUCE(SIZE(KFIELD),ISIZEMAX,1,MPI_INTEGER,MPI_MAX,TPFILE%NMPICOMM,IRESP) -#else - CALL MPI_ALLREDUCE(SIZE(KFIELD),ISIZEMAX,1,MPI_INTEGER8,MPI_MAX,TPFILE%NMPICOMM,IRESP) -#endif + CALL MPI_ALLREDUCE(SIZE(KFIELD),ISIZEMAX,1,MNHINT_MPI,MPI_MAX,TPFILE%NMPICOMM,IRESP) IF (ISIZEMAX==0) THEN CALL PRINT_MSG(NVERB_INFO,'IO','IO_Field_write_byfield_N2','ignoring variable with a zero size ('//TRIM(YRECFM)//')') IF (PRESENT(KRESP)) KRESP=0 @@ -1745,7 +1704,7 @@ CONTAINS CALL SECOND_MNH2(T2) TIMEZ%T_WRIT2D_WRIT=TIMEZ%T_WRIT2D_WRIT + T2 - T1 ! - CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR) + CALL MPI_BCAST(IRESP,1,MNHINT_MPI,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR) END IF END IF ! @@ -1856,11 +1815,7 @@ CONTAINS IF (GNC4) CALL IO_Field_write_nc4(TPFILE,TPFIELD,KFIELD,IRESP) END IF ELSE ! multiprocesses execution -#if ( MNH_INT == 4 ) - CALL MPI_ALLREDUCE(SIZE(KFIELD),ISIZEMAX,1,MPI_INTEGER,MPI_MAX,TPFILE%NMPICOMM,IRESP) -#else - CALL MPI_ALLREDUCE(SIZE(KFIELD),ISIZEMAX,1,MPI_INTEGER8,MPI_MAX,TPFILE%NMPICOMM,IRESP) -#endif + CALL MPI_ALLREDUCE(SIZE(KFIELD),ISIZEMAX,1,MNHINT_MPI,MPI_MAX,TPFILE%NMPICOMM,IRESP) IF (ISIZEMAX==0) THEN CALL PRINT_MSG(NVERB_INFO,'IO','IO_Field_write_byfield_N3','ignoring variable with a zero size ('//TRIM(YRECFM)//')') IF (PRESENT(KRESP)) KRESP=0 @@ -1890,7 +1845,7 @@ CONTAINS IF (GNC4) CALL IO_Field_write_nc4(TPFILE,TPFIELD,IFIELDP,IRESP) END IF ! - CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR) + CALL MPI_BCAST(IRESP,1,MNHINT_MPI,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR) END IF END IF ! @@ -1977,7 +1932,7 @@ CONTAINS IF (GNC4) CALL IO_Field_write_nc4(TPFILE,TPFIELD,OFIELD,IRESP) END IF ! - CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR) + CALL MPI_BCAST(IRESP,1,MNHINT_MPI,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR) END IF ! multiprocesses execution #if MNH_SCALARS_IN_SPLITFILES IF (TPFILE%NSUBFILES_IOZ>0) THEN @@ -2077,11 +2032,7 @@ CONTAINS IF (GLFI) CALL IO_Field_write_lfi(TPFILE,TPFIELD,OFIELD,IRESP) IF (GNC4) CALL IO_Field_write_nc4(TPFILE,TPFIELD,OFIELD,IRESP) ELSE ! multiprocesses execution -#if ( MNH_INT == 4 ) - CALL MPI_ALLREDUCE(SIZE(OFIELD),ISIZEMAX,1,MPI_INTEGER,MPI_MAX,TPFILE%NMPICOMM,IRESP) -#else - CALL MPI_ALLREDUCE(SIZE(OFIELD),ISIZEMAX,1,MPI_INTEGER8,MPI_MAX,TPFILE%NMPICOMM,IRESP) -#endif + CALL MPI_ALLREDUCE(SIZE(OFIELD),ISIZEMAX,1,MNHINT_MPI,MPI_MAX,TPFILE%NMPICOMM,IRESP) IF (ISIZEMAX==0) THEN CALL PRINT_MSG(NVERB_INFO,'IO','IO_Field_write_byfield_L1','ignoring variable with a zero size ('//TRIM(YRECFM)//')') IF (PRESENT(KRESP)) KRESP=0 @@ -2104,7 +2055,7 @@ CONTAINS IF (GNC4) CALL IO_Field_write_nc4(TPFILE,TPFIELD,GFIELDP,IRESP) END IF ! - CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR) + CALL MPI_BCAST(IRESP,1,MNHINT_MPI,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR) END IF END IF ! @@ -2191,7 +2142,7 @@ CONTAINS IF (GNC4) CALL IO_Field_write_nc4(TPFILE,TPFIELD,HFIELD,IRESP) END IF ! - CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR) + CALL MPI_BCAST(IRESP,1,MNHINT_MPI,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR) END IF END IF ! @@ -2296,7 +2247,7 @@ CONTAINS IF (GNC4) CALL IO_Field_write_nc4(TPFILE,TPFIELD,HFIELD,IRESP) END IF ! - CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR) + CALL MPI_BCAST(IRESP,1,MNHINT_MPI,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR) END IF END IF ! @@ -2378,7 +2329,7 @@ CONTAINS IF (GNC4) CALL IO_Field_write_nc4(TPFILE,TPFIELD,TFIELD,IRESP) END IF ! - CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR) + CALL MPI_BCAST(IRESP,1,MNHINT_MPI,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR) END IF END IF ! @@ -2511,7 +2462,7 @@ CONTAINS IF (IIB /= 0) THEN TX3DP=>Z3D(IIB:IIE,IJB:IJE,:) IF (ISP /= JI) THEN - CALL MPI_RECV(TX3DP,SIZE(TX3DP),MPI_FLOAT,JI-1,99,TPFILE%NMPICOMM,STATUS,IERR) + CALL MPI_RECV(TX3DP,SIZE(TX3DP),MNHREAL_MPI,JI-1,99,TPFILE%NMPICOMM,STATUS,IERR) ELSE CALL GET_DISTRIB_lb(YLBTYPE,JI,'LOC','WRITE',IRIM,IIB,IIE,IJB,IJE) TX3DP = PLB(IIB:IIE,IJB:IJE,:) @@ -2537,9 +2488,9 @@ CONTAINS NB_REQ = NB_REQ + 1 ALLOCATE(T_TX3DP(NB_REQ)%X(IIB:IIE,IJB:IJE,IKU)) T_TX3DP(NB_REQ)%X=PLB(IIB:IIE,IJB:IJE,:) - CALL MPI_ISEND(T_TX3DP(NB_REQ)%X,SIZE(TX3DP),MPI_FLOAT,TPFILE%NMASTER_RANK-1,99, & + CALL MPI_ISEND(T_TX3DP(NB_REQ)%X,SIZE(TX3DP),MNHREAL_MPI,TPFILE%NMASTER_RANK-1,99, & TPFILE%NMPICOMM,REQ_TAB(NB_REQ),IERR) - !CALL MPI_BSEND(TX3DP,SIZE(TX3DP),MPI_FLOAT,TPFILE%NMASTER_RANK-1,99,TPFILE%NMPICOMM,IERR) + !CALL MPI_BSEND(TX3DP,SIZE(TX3DP),MNHREAL_MPI,TPFILE%NMASTER_RANK-1,99,TPFILE%NMPICOMM,IERR) END IF IF (NB_REQ .GT.0 ) THEN CALL MPI_WAITALL(NB_REQ,REQ_TAB,MNH_STATUSES_IGNORE,IERR) @@ -2548,7 +2499,7 @@ CONTAINS DEALLOCATE(T_TX3DP,REQ_TAB) END IF ! - CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR) + CALL MPI_BCAST(IRESP,1,MNHINT_MPI,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR) END IF END IF ! @@ -2632,7 +2583,7 @@ CONTAINS IF (GNC4) CALL IO_Field_write_nc4(TPFILE,TPFIELD,ZFIELDP,IRESP) END IF ! - CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR) + CALL MPI_BCAST(IRESP,1,MNHINT_MPI,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR) END IF ! multiprocesses execution END IF ! diff --git a/src/LIB/SURCOUCHE/src/mode_io_file_lfi.f90 b/src/LIB/SURCOUCHE/src/mode_io_file_lfi.f90 index f8645e9ca4a287eeb9d79986b552a59f5e5dca2c..1d07379957d7f74d8d407d23b450d51f87f96067 100644 --- a/src/LIB/SURCOUCHE/src/mode_io_file_lfi.f90 +++ b/src/LIB/SURCOUCHE/src/mode_io_file_lfi.f90 @@ -19,6 +19,7 @@ module mode_io_file_lfi use modd_io, only: tfiledata +use modd_precision, only: LFIINT use mode_msg @@ -45,9 +46,9 @@ subroutine IO_File_create_lfi(tpfile, kstatus) character(len=:), allocatable :: yfilem ! name of the file character(len=:), allocatable :: yforstatus ! Status for open of a file (for LFI) ('OLD','NEW','UNKNOWN','SCRATCH','REPLACE') - integer(kind=LFI_INT) :: iresou, inumbr - integer(kind=LFI_INT) :: imelev, inprar - integer(kind=LFI_INT) :: ininar ! Number of articles present in LFI file + integer(kind=LFIINT) :: iresou, inumbr + integer(kind=LFIINT) :: imelev, inprar + integer(kind=LFIINT) :: ininar ! Number of articles present in LFI file logical :: gnewfi logical :: gnamfi, gfater, gstats @@ -92,7 +93,7 @@ subroutine IO_File_close_lfi(tpfile, kstatus) character(len=*), parameter :: YSTATUS = 'KEEP' - integer(kind=LFI_INT) :: istatus + integer(kind=LFIINT) :: istatus call print_msg(NVERB_DEBUG,'IO','IO_File_close_lfi','called for '//trim(tpfile%cname)) @@ -124,9 +125,9 @@ subroutine IO_File_open_lfi(tpfile, kstatus) character(len=:),allocatable :: yfilem ! name of the file character(len=:),allocatable :: yforstatus ! Status for open of a file (for LFI) ('OLD','NEW','UNKNOWN','SCRATCH','REPLACE') integer :: istatus - integer(kind=LFI_INT) :: iresou, inumbr - integer(kind=LFI_INT) :: imelev, inprar - integer(kind=LFI_INT) :: ininar ! Number of articles present in LFI file + integer(kind=LFIINT) :: iresou, inumbr + integer(kind=LFIINT) :: imelev, inprar + integer(kind=LFIINT) :: ininar ! Number of articles present in LFI file logical :: gnewfi logical :: gnamfi, gfater, gstats diff --git a/src/LIB/SURCOUCHE/src/mode_io_file_nc4.f90 b/src/LIB/SURCOUCHE/src/mode_io_file_nc4.f90 index 160a79a6d876974572730b761cc578b785a75d48..746e5746e59b97bb174194ac81d125d22a6f9a1f 100644 --- a/src/LIB/SURCOUCHE/src/mode_io_file_nc4.f90 +++ b/src/LIB/SURCOUCHE/src/mode_io_file_nc4.f90 @@ -21,15 +21,15 @@ #if defined(MNH_IOCDF4) module mode_io_file_nc4 -use modd_io, only: tfiledata -use modd_netcdf, only: IDCDF_KIND +use modd_io, only: tfiledata +use modd_precision, only: CDFINT use mode_io_tools_nc4, only: IO_Err_handle_nc4, IO_Knowndims_set_nc4, IO_Iocdf_alloc_nc4 use mode_msg -use NETCDF, only: NF90_CLOBBER, NF90_GLOBAL, NF90_NETCDF4, NF90_NOERR, NF90_NOWRITE, & - NF90_CLOSE, NF90_CREATE, NF90_GET_ATT, NF90_INQUIRE, NF90_INQUIRE_ATTRIBUTE, & - NF90_OPEN, NF90_PUT_ATT, NF90_STRERROR +use NETCDF, only: NF90_CLOBBER, NF90_GLOBAL, NF90_NETCDF4, NF90_NOERR, NF90_NOWRITE, & + NF90_CLOSE, NF90_CREATE, NF90_GET_ATT, NF90_INQUIRE, NF90_INQUIRE_ATTRIBUTE, & + NF90_OPEN, NF90_PUT_ATT, NF90_STRERROR implicit none @@ -47,7 +47,7 @@ subroutine IO_File_create_nc4(tpfile,hprogram_orig) character(len=*),optional, intent(in) :: hprogram_orig !to emulate a file coming from this program character(len=:),allocatable :: yfilem ! name of the file - integer(kind=IDCDF_KIND) :: istatus + integer(kind=CDFINT) :: istatus call print_msg(NVERB_DEBUG,'IO','IO_File_create_nc4','called for '//trim(tpfile%cname)) @@ -69,10 +69,10 @@ end subroutine IO_File_create_nc4 subroutine IO_File_close_nc4(tpfile,kstatus) use mode_io_tools_nc4, only: IO_Iocdf_dealloc_nc4 - type(tfiledata), intent(inout) :: tpfile - integer(kind=IDCDF_KIND), optional, intent(out) :: kstatus + type(tfiledata), intent(inout) :: tpfile + integer(kind=CDFINT), optional, intent(out) :: kstatus - integer(kind=IDCDF_KIND) :: istatus + integer(kind=CDFINT) :: istatus call print_msg(NVERB_DEBUG,'IO','IO_File_close_nc4','called for '//trim(tpfile%cname)) @@ -103,7 +103,7 @@ subroutine IO_File_open_nc4(tpfile) type(tfiledata), intent(inout) :: tpfile character(len=:),allocatable :: yfilem ! name of the file - integer(kind=IDCDF_KIND) :: istatus + integer(kind=CDFINT) :: istatus call print_msg(NVERB_DEBUG,'IO','IO_File_open_nc4','called for '//trim(tpfile%cname)) @@ -134,8 +134,8 @@ subroutine IO_Cleanly_closed_check_nc4(tpfile) type(tfiledata), intent(in) :: tpfile character(len=:), allocatable :: yclean - integer(kind=IDCDF_KIND) :: ilen, istatus - integer, dimension(3) :: imnhversion + integer(kind=CDFINT) :: ilen, istatus + integer, dimension(3) :: imnhversion call print_msg(NVERB_DEBUG,'IO','IO_Cleanly_closed_check_nc4','called for '//trim(tpfile%cname)) @@ -177,7 +177,7 @@ end subroutine IO_Cleanly_closed_check_nc4 subroutine IO_Cleanly_closed_set_nc4(tpfile) type(tfiledata), intent(in) :: tpfile - integer(kind=IDCDF_KIND) :: istatus + integer(kind=CDFINT) :: istatus call print_msg(NVERB_DEBUG,'IO','IO_Cleanly_closed_set_nc4','called for '//trim(tpfile%cname)) @@ -189,7 +189,7 @@ end subroutine IO_Cleanly_closed_set_nc4 subroutine IO_Not_cleanly_closed_set_nc4(tpfile) type(tfiledata), intent(in) :: tpfile - integer(kind=IDCDF_KIND) :: istatus + integer(kind=CDFINT) :: istatus call print_msg(NVERB_DEBUG,'IO','IO_Not_cleanly_closed_set_nc4','called for '//trim(tpfile%cname)) diff --git a/src/LIB/SURCOUCHE/src/mode_io_manage_struct.f90 b/src/LIB/SURCOUCHE/src/mode_io_manage_struct.f90 index 31ccdc17a3460c90a5406797b24a62afe5a1a397..4e6bce3f26e7f74836495171a3da9dcab91a5e6b 100644 --- a/src/LIB/SURCOUCHE/src/mode_io_manage_struct.f90 +++ b/src/LIB/SURCOUCHE/src/mode_io_manage_struct.f90 @@ -20,6 +20,8 @@ MODULE MODE_IO_MANAGE_STRUCT ! USE MODD_IO +use modd_precision, only: LFIINT +! USE MODE_MSG ! IMPLICIT NONE @@ -660,7 +662,7 @@ CHARACTER(LEN=*), OPTIONAL,INTENT(IN) :: HFORM !Formatted/unformatt CHARACTER(LEN=*), OPTIONAL,INTENT(IN) :: HACCESS !Direct/sequential/stream CHARACTER(LEN=*), OPTIONAL,INTENT(IN) :: HFORMAT !Fileformat (NETCDF4, LFI, LFICDF4...) CHARACTER(LEN=*), OPTIONAL,INTENT(IN) :: HDIRNAME !File directory -INTEGER(KIND=LFI_INT), OPTIONAL,INTENT(IN) :: KLFINPRAR !Number of predicted articles of the LFI file (non crucial) +INTEGER(KIND=LFIINT), OPTIONAL,INTENT(IN) :: KLFINPRAR !Number of predicted articles of the LFI file (non crucial) INTEGER, OPTIONAL,INTENT(IN) :: KLFITYPE !Type of the file (used to generate list of files to transfers) INTEGER, OPTIONAL,INTENT(IN) :: KLFIVERB !LFI verbosity level INTEGER, OPTIONAL,INTENT(IN) :: KRECL !Record length @@ -673,7 +675,7 @@ LOGICAL, OPTIONAL,INTENT(IN) :: OOLD !FALSE if new file ( logical, optional,intent(in) :: osplit_ioz !Is the file split vertically ! INTEGER :: IMI,IRESP -INTEGER(KIND=LFI_INT) :: ILFINPRAR +INTEGER(KIND=LFIINT) :: ILFINPRAR INTEGER :: ILFITYPE INTEGER :: ILFIVERB LOGICAL :: GOLD diff --git a/src/LIB/SURCOUCHE/src/mode_io_read_lfi.f90 b/src/LIB/SURCOUCHE/src/mode_io_read_lfi.f90 index 7b2f6e855fa12299b491035f84887da5805f4bcb..525930eefaaacc6ab5082f76e814085488220ca2 100644 --- a/src/LIB/SURCOUCHE/src/mode_io_read_lfi.f90 +++ b/src/LIB/SURCOUCHE/src/mode_io_read_lfi.f90 @@ -14,6 +14,7 @@ module mode_io_read_lfi ! USE MODD_IO USE MODD_PARAMETERS, ONLY: NLFIMAXCOMMENTLENGTH +use modd_precision, only: LFIINT ! USE MODE_FIELD, ONLY : TFIELDDATA USE MODE_MSG @@ -55,7 +56,7 @@ INTEGER, INTENT(OUT) :: KRESP ! return-code if problems occured ! !* 0.2 Declarations of local variables ! -INTEGER(KIND=LFI_INT) :: IRESP,ITOTAL +INTEGER(KIND=LFIINT) :: IRESP,ITOTAL INTEGER :: ILENG INTEGER(KIND=8),DIMENSION(:),ALLOCATABLE :: IWORK LOGICAL :: GGOOD @@ -94,7 +95,7 @@ INTEGER, INTENT(OUT) :: KRESP ! return-code if problems occured ! !* 0.2 Declarations of local variables ! -INTEGER(KIND=LFI_INT) :: IRESP,ITOTAL +INTEGER(KIND=LFIINT) :: IRESP,ITOTAL INTEGER :: ILENG INTEGER(KIND=8),DIMENSION(:),ALLOCATABLE :: IWORK LOGICAL :: GGOOD @@ -128,7 +129,7 @@ INTEGER, INTENT(OUT) :: KRESP ! return-code if problems occured ! !* 0.2 Declarations of local variables ! -INTEGER(KIND=LFI_INT) :: IRESP,ITOTAL +INTEGER(KIND=LFIINT) :: IRESP,ITOTAL INTEGER :: ILENG INTEGER(KIND=8),DIMENSION(:),ALLOCATABLE :: IWORK LOGICAL :: GGOOD @@ -162,7 +163,7 @@ INTEGER, INTENT(OUT) :: KRESP ! return-code if problems occured ! !* 0.2 Declarations of local variables ! -INTEGER(KIND=LFI_INT) :: IRESP,ITOTAL +INTEGER(KIND=LFIINT) :: IRESP,ITOTAL INTEGER :: ILENG INTEGER(KIND=8),DIMENSION(:),ALLOCATABLE :: IWORK LOGICAL :: GGOOD @@ -196,7 +197,7 @@ INTEGER, INTENT(OUT) :: KRESP ! return-code if problems occur ! !* 0.2 Declarations of local variables ! -INTEGER(KIND=LFI_INT) :: IRESP,ITOTAL +INTEGER(KIND=LFIINT) :: IRESP,ITOTAL INTEGER :: ILENG INTEGER(KIND=8),DIMENSION(:),ALLOCATABLE :: IWORK LOGICAL :: GGOOD @@ -230,7 +231,7 @@ INTEGER, INTENT(OUT) :: KRESP ! return-code if problems occ ! !* 0.2 Declarations of local variables ! -INTEGER(KIND=LFI_INT) :: IRESP,ITOTAL +INTEGER(KIND=LFIINT) :: IRESP,ITOTAL INTEGER :: ILENG INTEGER(KIND=8),DIMENSION(:),ALLOCATABLE :: IWORK LOGICAL :: GGOOD @@ -264,7 +265,7 @@ INTEGER, INTENT(OUT) :: KRESP ! return-code if problems o ! !* 0.2 Declarations of local variables ! -INTEGER(KIND=LFI_INT) :: IRESP,ITOTAL +INTEGER(KIND=LFIINT) :: IRESP,ITOTAL INTEGER :: ILENG INTEGER(KIND=8),DIMENSION(:),ALLOCATABLE :: IWORK LOGICAL :: GGOOD @@ -298,7 +299,7 @@ INTEGER, INTENT(OUT) :: KRESP ! return-code if problems occured ! !* 0.2 Declarations of local variables ! -INTEGER(KIND=LFI_INT) :: IRESP,ITOTAL +INTEGER(KIND=LFIINT) :: IRESP,ITOTAL INTEGER :: ILENG INTEGER(KIND=8),DIMENSION(:),ALLOCATABLE :: IWORK LOGICAL :: GGOOD @@ -332,7 +333,7 @@ INTEGER, INTENT(OUT) :: KRESP ! return-code if problems occured ! !* 0.2 Declarations of local variables ! -INTEGER(KIND=LFI_INT) :: IRESP,ITOTAL +INTEGER(KIND=LFIINT) :: IRESP,ITOTAL INTEGER :: ILENG INTEGER(KIND=8),DIMENSION(:),ALLOCATABLE :: IWORK LOGICAL :: GGOOD @@ -366,7 +367,7 @@ INTEGER, INTENT(OUT) :: KRESP ! return-code if problems occure ! !* 0.2 Declarations of local variables ! -INTEGER(KIND=LFI_INT) :: IRESP,ITOTAL +INTEGER(KIND=LFIINT) :: IRESP,ITOTAL INTEGER :: ILENG INTEGER(KIND=8),DIMENSION(:),ALLOCATABLE :: IWORK LOGICAL :: GGOOD @@ -400,7 +401,7 @@ INTEGER, INTENT(OUT) :: KRESP ! return-code if problems occured ! !* 0.2 Declarations of local variables ! -INTEGER(KIND=LFI_INT) :: IRESP,ITOTAL +INTEGER(KIND=LFIINT) :: IRESP,ITOTAL INTEGER :: ILENG INTEGER :: IFIELD INTEGER(KIND=8),DIMENSION(:),ALLOCATABLE :: IWORK @@ -447,7 +448,7 @@ INTEGER, INTENT(OUT) :: KRESP ! return-code if problems occured ! !* 0.2 Declarations of local variables ! -INTEGER(KIND=LFI_INT) :: IRESP,ITOTAL +INTEGER(KIND=LFIINT) :: IRESP,ITOTAL INTEGER :: ILENG INTEGER :: JI INTEGER, DIMENSION(SIZE(OFIELD)) :: IFIELD @@ -502,7 +503,7 @@ INTEGER, INTENT(OUT) :: KRESP ! return-code if problems occured ! !* 0.2 Declarations of local variables ! -INTEGER(KIND=LFI_INT) :: IRESP,ITOTAL +INTEGER(KIND=LFIINT) :: IRESP,ITOTAL INTEGER :: ILENG, ILENGMAX, JLOOP INTEGER(KIND=8),DIMENSION(:),ALLOCATABLE :: IWORK LOGICAL :: GGOOD @@ -552,7 +553,7 @@ INTEGER, INTENT(OUT) :: KRESP ! return-code if problems occured ! !* 0.2 Declarations of local variables ! -INTEGER(KIND=LFI_INT) :: IRESP, ITOTAL +INTEGER(KIND=LFIINT) :: IRESP, ITOTAL INTEGER :: ILENG INTEGER(KIND=8),DIMENSION(:),ALLOCATABLE :: IWORK LOGICAL :: GGOOD @@ -616,13 +617,13 @@ TYPE(TFILEDATA), INTENT(IN) :: TPFILE TYPE(TFIELDDATA), INTENT(INOUT) :: TPFIELD INTEGER, INTENT(IN) :: KLENG INTEGER(KIND=8),DIMENSION(:),ALLOCATABLE,INTENT(OUT) :: KWORK -INTEGER(KIND=LFI_INT), INTENT(OUT) :: KTOTAL -INTEGER(KIND=LFI_INT), INTENT(OUT) :: KRESP +INTEGER(KIND=LFIINT), INTENT(OUT) :: KTOTAL +INTEGER(KIND=LFIINT), INTENT(OUT) :: KRESP LOGICAL, INTENT(OUT) :: OGOOD ! INTEGER :: IERRLEVEL,IROW,J INTEGER,DIMENSION(JPXKRK) :: ICOMMENT -INTEGER(KIND=LFI_INT) :: ICOMLEN,INUMBR,IPOSEX +INTEGER(KIND=LFIINT) :: ICOMLEN,INUMBR,IPOSEX CHARACTER(LEN=:),ALLOCATABLE :: YMSG CHARACTER(LEN=12) :: YRECLENGTH_FILE, YRECLENGTH_MEM CHARACTER(LEN=12) :: YVAL_FILE, YVAL_MEM diff --git a/src/LIB/SURCOUCHE/src/mode_io_read_nc4.f90 b/src/LIB/SURCOUCHE/src/mode_io_read_nc4.f90 index 0f82d0974bae14151ce9f0ffec94f030953528d8..3aaed8fb95ca02eccf016fb1b8256d33b3dc435f 100644 --- a/src/LIB/SURCOUCHE/src/mode_io_read_nc4.f90 +++ b/src/LIB/SURCOUCHE/src/mode_io_read_nc4.f90 @@ -16,7 +16,7 @@ module mode_io_read_nc4 use modd_io, only: tfiledata -use modd_netcdf, only: IDCDF_KIND +use modd_precision, only: CDFINT use mode_field, only: tfielddata use mode_io_tools_nc4, only: IO_Mnhname_clean, IO_Err_handle_nc4 @@ -53,15 +53,15 @@ USE MODD_PARAMETERS, ONLY: NGRIDUNKNOWN ! TYPE(TFILEDATA), INTENT(IN) :: TPFILE TYPE(TFIELDDATA), INTENT(INOUT) :: TPFIELD -INTEGER(KIND=IDCDF_KIND), INTENT(IN) :: KVARID +INTEGER(KIND=CDFINT), INTENT(IN) :: KVARID INTEGER, INTENT(OUT) :: KRESP ! return-code CHARACTER(LEN=*),OPTIONAL,INTENT(IN) :: HCALENDAR ! INTEGER :: IERRLEVEL INTEGER :: ILEN INTEGER :: IGRID -INTEGER(KIND=IDCDF_KIND) :: INCID -INTEGER(KIND=IDCDF_KIND) :: STATUS +INTEGER(KIND=CDFINT) :: INCID +INTEGER(KIND=CDFINT) :: STATUS CHARACTER(LEN=12) :: YVAL_FILE, YVAL_MEM CHARACTER(LEN=:),ALLOCATABLE :: YVALUE LOGICAL :: GOLDMNH !if old version of MesoNH (<5.4, old files without complete and correct metadata) @@ -263,13 +263,13 @@ TYPE(TFIELDDATA), INTENT(INOUT) :: TPFIELD REAL, INTENT(INOUT) :: PFIELD INTEGER, INTENT(OUT) :: KRESP ! return-code -INTEGER(KIND=IDCDF_KIND) :: STATUS -INTEGER(KIND=IDCDF_KIND) :: INCID -INTEGER(KIND=IDCDF_KIND) :: IVARID -INTEGER(KIND=IDCDF_KIND) :: ITYPE ! variable type -INTEGER(KIND=IDCDF_KIND) :: IDIMS ! number of dimensions -CHARACTER(LEN=30) :: YVARNAME -INTEGER :: IRESP +INTEGER(KIND=CDFINT) :: STATUS +INTEGER(KIND=CDFINT) :: INCID +INTEGER(KIND=CDFINT) :: IVARID +INTEGER(KIND=CDFINT) :: ITYPE ! variable type +INTEGER(KIND=CDFINT) :: IDIMS ! number of dimensions +CHARACTER(LEN=30) :: YVARNAME +INTEGER :: IRESP CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_read_nc4_X0',TRIM(TPFILE%CNAME)//': reading '//TRIM(TPFIELD%CMNHNAME)) @@ -318,15 +318,15 @@ TYPE(TFIELDDATA), INTENT(INOUT) :: TPFIELD REAL,DIMENSION(:),INTENT(INOUT) :: PFIELD INTEGER, INTENT(OUT) :: KRESP ! return-code -INTEGER(KIND=IDCDF_KIND) :: STATUS -INTEGER(KIND=IDCDF_KIND) :: INCID -INTEGER(KIND=IDCDF_KIND) :: IVARID -INTEGER(KIND=IDCDF_KIND) :: ITYPE ! variable type -INTEGER(KIND=IDCDF_KIND) :: IDIMS ! number of dimensions -INTEGER(KIND=IDCDF_KIND),DIMENSION(NF90_MAX_VAR_DIMS) :: IVDIMS -CHARACTER(LEN=30) :: YVARNAME -INTEGER(KIND=IDCDF_KIND) :: IDIMLEN -INTEGER :: IRESP +INTEGER(KIND=CDFINT) :: STATUS +INTEGER(KIND=CDFINT) :: INCID +INTEGER(KIND=CDFINT) :: IVARID +INTEGER(KIND=CDFINT) :: ITYPE ! variable type +INTEGER(KIND=CDFINT) :: IDIMS ! number of dimensions +INTEGER(KIND=CDFINT),DIMENSION(NF90_MAX_VAR_DIMS) :: IVDIMS +CHARACTER(LEN=30) :: YVARNAME +INTEGER(KIND=CDFINT) :: IDIMLEN +INTEGER :: IRESP CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_read_nc4_X1',TRIM(TPFILE%CNAME)//': reading '//TRIM(TPFIELD%CMNHNAME)) @@ -385,15 +385,15 @@ TYPE(TFIELDDATA), INTENT(INOUT) :: TPFIELD REAL,DIMENSION(:,:),INTENT(INOUT) :: PFIELD INTEGER, INTENT(OUT) :: KRESP ! return-code -INTEGER(KIND=IDCDF_KIND) :: STATUS -INTEGER(KIND=IDCDF_KIND) :: INCID -INTEGER(KIND=IDCDF_KIND) :: IVARID -INTEGER(KIND=IDCDF_KIND) :: ITYPE ! variable type -INTEGER(KIND=IDCDF_KIND) :: IDIMS ! number of dimensions -INTEGER(KIND=IDCDF_KIND),DIMENSION(NF90_MAX_VAR_DIMS) :: IVDIMS -CHARACTER(LEN=30) :: YVARNAME -INTEGER(KIND=IDCDF_KIND),DIMENSION(3) :: IDIMLEN -INTEGER :: IRESP +INTEGER(KIND=CDFINT) :: STATUS +INTEGER(KIND=CDFINT) :: INCID +INTEGER(KIND=CDFINT) :: IVARID +INTEGER(KIND=CDFINT) :: ITYPE ! variable type +INTEGER(KIND=CDFINT) :: IDIMS ! number of dimensions +INTEGER(KIND=CDFINT),DIMENSION(NF90_MAX_VAR_DIMS) :: IVDIMS +CHARACTER(LEN=30) :: YVARNAME +INTEGER(KIND=CDFINT),DIMENSION(3) :: IDIMLEN +INTEGER :: IRESP CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_read_nc4_X2',TRIM(TPFILE%CNAME)//': reading '//TRIM(TPFIELD%CMNHNAME)) @@ -467,15 +467,15 @@ TYPE(TFIELDDATA), INTENT(INOUT) :: TPFIELD REAL,DIMENSION(:,:,:),INTENT(INOUT) :: PFIELD INTEGER, INTENT(OUT) :: KRESP ! return-code -INTEGER(KIND=IDCDF_KIND) :: STATUS -INTEGER(KIND=IDCDF_KIND) :: INCID -INTEGER(KIND=IDCDF_KIND) :: IVARID -INTEGER(KIND=IDCDF_KIND) :: ITYPE ! variable type -INTEGER(KIND=IDCDF_KIND) :: IDIMS ! number of dimensions -INTEGER(KIND=IDCDF_KIND),DIMENSION(NF90_MAX_VAR_DIMS) :: IVDIMS -INTEGER(KIND=IDCDF_KIND),DIMENSION(3) :: IDIMLEN -CHARACTER(LEN=30) :: YVARNAME -INTEGER :: IRESP +INTEGER(KIND=CDFINT) :: STATUS +INTEGER(KIND=CDFINT) :: INCID +INTEGER(KIND=CDFINT) :: IVARID +INTEGER(KIND=CDFINT) :: ITYPE ! variable type +INTEGER(KIND=CDFINT) :: IDIMS ! number of dimensions +INTEGER(KIND=CDFINT),DIMENSION(NF90_MAX_VAR_DIMS) :: IVDIMS +INTEGER(KIND=CDFINT),DIMENSION(3) :: IDIMLEN +CHARACTER(LEN=30) :: YVARNAME +INTEGER :: IRESP CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_read_nc4_X3',TRIM(TPFILE%CNAME)//': reading '//TRIM(TPFIELD%CMNHNAME)) @@ -538,15 +538,15 @@ TYPE(TFIELDDATA), INTENT(INOUT) :: TPFIELD REAL,DIMENSION(:,:,:,:),INTENT(INOUT) :: PFIELD INTEGER, INTENT(OUT) :: KRESP ! return-code -INTEGER(KIND=IDCDF_KIND) :: STATUS -INTEGER(KIND=IDCDF_KIND) :: INCID -INTEGER(KIND=IDCDF_KIND) :: IVARID -INTEGER(KIND=IDCDF_KIND) :: ITYPE ! variable type -INTEGER(KIND=IDCDF_KIND) :: IDIMS ! number of dimensions -INTEGER(KIND=IDCDF_KIND),DIMENSION(NF90_MAX_VAR_DIMS) :: IVDIMS -INTEGER(KIND=IDCDF_KIND),DIMENSION(4) :: IDIMLEN -CHARACTER(LEN=30) :: YVARNAME -INTEGER :: IRESP +INTEGER(KIND=CDFINT) :: STATUS +INTEGER(KIND=CDFINT) :: INCID +INTEGER(KIND=CDFINT) :: IVARID +INTEGER(KIND=CDFINT) :: ITYPE ! variable type +INTEGER(KIND=CDFINT) :: IDIMS ! number of dimensions +INTEGER(KIND=CDFINT),DIMENSION(NF90_MAX_VAR_DIMS) :: IVDIMS +INTEGER(KIND=CDFINT),DIMENSION(4) :: IDIMLEN +CHARACTER(LEN=30) :: YVARNAME +INTEGER :: IRESP CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_read_nc4_X4',TRIM(TPFILE%CNAME)//': reading '//TRIM(TPFIELD%CMNHNAME)) @@ -612,15 +612,15 @@ TYPE(TFIELDDATA), INTENT(INOUT) :: TPFIELD REAL,DIMENSION(:,:,:,:,:),INTENT(INOUT) :: PFIELD INTEGER, INTENT(OUT) :: KRESP ! return-code -INTEGER(KIND=IDCDF_KIND) :: STATUS -INTEGER(KIND=IDCDF_KIND) :: INCID -INTEGER(KIND=IDCDF_KIND) :: IVARID -INTEGER(KIND=IDCDF_KIND) :: ITYPE ! variable type -INTEGER(KIND=IDCDF_KIND) :: IDIMS ! number of dimensions -INTEGER(KIND=IDCDF_KIND),DIMENSION(NF90_MAX_VAR_DIMS) :: IVDIMS -INTEGER(KIND=IDCDF_KIND),DIMENSION(5) :: IDIMLEN -CHARACTER(LEN=30) :: YVARNAME -INTEGER :: IRESP +INTEGER(KIND=CDFINT) :: STATUS +INTEGER(KIND=CDFINT) :: INCID +INTEGER(KIND=CDFINT) :: IVARID +INTEGER(KIND=CDFINT) :: ITYPE ! variable type +INTEGER(KIND=CDFINT) :: IDIMS ! number of dimensions +INTEGER(KIND=CDFINT),DIMENSION(NF90_MAX_VAR_DIMS) :: IVDIMS +INTEGER(KIND=CDFINT),DIMENSION(5) :: IDIMLEN +CHARACTER(LEN=30) :: YVARNAME +INTEGER :: IRESP CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_read_nc4_X5',TRIM(TPFILE%CNAME)//': reading '//TRIM(TPFIELD%CMNHNAME)) @@ -689,15 +689,15 @@ TYPE(TFIELDDATA), INTENT(INOUT) :: TPFIELD REAL,DIMENSION(:,:,:,:,:,:),INTENT(INOUT) :: PFIELD INTEGER, INTENT(OUT) :: KRESP ! return-code -INTEGER(KIND=IDCDF_KIND) :: STATUS -INTEGER(KIND=IDCDF_KIND) :: INCID -INTEGER(KIND=IDCDF_KIND) :: IVARID -INTEGER(KIND=IDCDF_KIND) :: ITYPE ! variable type -INTEGER(KIND=IDCDF_KIND) :: IDIMS ! number of dimensions -INTEGER(KIND=IDCDF_KIND),DIMENSION(NF90_MAX_VAR_DIMS) :: IVDIMS -INTEGER(KIND=IDCDF_KIND),DIMENSION(6) :: IDIMLEN -CHARACTER(LEN=30) :: YVARNAME -INTEGER :: IRESP +INTEGER(KIND=CDFINT) :: STATUS +INTEGER(KIND=CDFINT) :: INCID +INTEGER(KIND=CDFINT) :: IVARID +INTEGER(KIND=CDFINT) :: ITYPE ! variable type +INTEGER(KIND=CDFINT) :: IDIMS ! number of dimensions +INTEGER(KIND=CDFINT),DIMENSION(NF90_MAX_VAR_DIMS) :: IVDIMS +INTEGER(KIND=CDFINT),DIMENSION(6) :: IDIMLEN +CHARACTER(LEN=30) :: YVARNAME +INTEGER :: IRESP CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_read_nc4_X6',TRIM(TPFILE%CNAME)//': reading '//TRIM(TPFIELD%CMNHNAME)) @@ -768,13 +768,13 @@ TYPE(TFIELDDATA), INTENT(INOUT) :: TPFIELD INTEGER, INTENT(INOUT) :: KFIELD INTEGER, INTENT(OUT) :: KRESP ! return-code -INTEGER(KIND=IDCDF_KIND) :: STATUS -INTEGER(KIND=IDCDF_KIND) :: INCID -INTEGER(KIND=IDCDF_KIND) :: IVARID -INTEGER(KIND=IDCDF_KIND) :: ITYPE ! variable type -INTEGER(KIND=IDCDF_KIND) :: IDIMS ! number of dimensions -CHARACTER(LEN=30) :: YVARNAME -INTEGER :: IRESP +INTEGER(KIND=CDFINT) :: STATUS +INTEGER(KIND=CDFINT) :: INCID +INTEGER(KIND=CDFINT) :: IVARID +INTEGER(KIND=CDFINT) :: ITYPE ! variable type +INTEGER(KIND=CDFINT) :: IDIMS ! number of dimensions +CHARACTER(LEN=30) :: YVARNAME +INTEGER :: IRESP CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_read_nc4_N0',TRIM(TPFILE%CNAME)//': reading '//TRIM(TPFIELD%CMNHNAME)) @@ -824,15 +824,15 @@ TYPE(TFIELDDATA), INTENT(INOUT) :: TPFIELD INTEGER, DIMENSION(:), INTENT(INOUT) :: KFIELD INTEGER, INTENT(OUT) :: KRESP ! return-code -INTEGER(KIND=IDCDF_KIND) :: STATUS -INTEGER(KIND=IDCDF_KIND) :: INCID -INTEGER(KIND=IDCDF_KIND) :: IVARID -INTEGER(KIND=IDCDF_KIND) :: ITYPE ! variable type -INTEGER(KIND=IDCDF_KIND) :: IDIMS ! number of dimensions -INTEGER(KIND=IDCDF_KIND),DIMENSION(NF90_MAX_VAR_DIMS) :: IVDIMS -CHARACTER(LEN=30) :: YVARNAME -INTEGER(KIND=IDCDF_KIND) :: IDIMLEN -INTEGER :: IRESP +INTEGER(KIND=CDFINT) :: STATUS +INTEGER(KIND=CDFINT) :: INCID +INTEGER(KIND=CDFINT) :: IVARID +INTEGER(KIND=CDFINT) :: ITYPE ! variable type +INTEGER(KIND=CDFINT) :: IDIMS ! number of dimensions +INTEGER(KIND=CDFINT),DIMENSION(NF90_MAX_VAR_DIMS) :: IVDIMS +CHARACTER(LEN=30) :: YVARNAME +INTEGER(KIND=CDFINT) :: IDIMLEN +INTEGER :: IRESP CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_read_nc4_N1',TRIM(TPFILE%CNAME)//': reading '//TRIM(TPFIELD%CMNHNAME)) @@ -892,15 +892,15 @@ TYPE(TFIELDDATA), INTENT(INOUT) :: TPFIELD INTEGER, DIMENSION(:,:), INTENT(INOUT) :: KFIELD INTEGER, INTENT(OUT) :: KRESP ! return-code -INTEGER(KIND=IDCDF_KIND) :: STATUS -INTEGER(KIND=IDCDF_KIND) :: INCID -INTEGER(KIND=IDCDF_KIND) :: IVARID -INTEGER(KIND=IDCDF_KIND) :: ITYPE ! variable type -INTEGER(KIND=IDCDF_KIND) :: IDIMS ! number of dimensions -INTEGER(KIND=IDCDF_KIND),DIMENSION(NF90_MAX_VAR_DIMS) :: IVDIMS -CHARACTER(LEN=30) :: YVARNAME -INTEGER(KIND=IDCDF_KIND),DIMENSION(3) :: IDIMLEN -INTEGER :: IRESP +INTEGER(KIND=CDFINT) :: STATUS +INTEGER(KIND=CDFINT) :: INCID +INTEGER(KIND=CDFINT) :: IVARID +INTEGER(KIND=CDFINT) :: ITYPE ! variable type +INTEGER(KIND=CDFINT) :: IDIMS ! number of dimensions +INTEGER(KIND=CDFINT),DIMENSION(NF90_MAX_VAR_DIMS) :: IVDIMS +CHARACTER(LEN=30) :: YVARNAME +INTEGER(KIND=CDFINT),DIMENSION(3) :: IDIMLEN +INTEGER :: IRESP CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_read_nc4_N2',TRIM(TPFILE%CNAME)//': reading '//TRIM(TPFIELD%CMNHNAME)) @@ -974,14 +974,14 @@ TYPE(TFIELDDATA), INTENT(INOUT) :: TPFIELD LOGICAL, INTENT(INOUT) :: OFIELD INTEGER, INTENT(OUT) :: KRESP ! return-code -INTEGER(KIND=IDCDF_KIND) :: STATUS -INTEGER(KIND=IDCDF_KIND) :: INCID -INTEGER(KIND=IDCDF_KIND) :: IVARID -INTEGER(KIND=IDCDF_KIND) :: ITYPE ! variable type -INTEGER(KIND=IDCDF_KIND) :: IDIMS ! number of dimensions -CHARACTER(LEN=30) :: YVARNAME -INTEGER :: IRESP -INTEGER :: IFIELD +INTEGER(KIND=CDFINT) :: STATUS +INTEGER(KIND=CDFINT) :: INCID +INTEGER(KIND=CDFINT) :: IVARID +INTEGER(KIND=CDFINT) :: ITYPE ! variable type +INTEGER(KIND=CDFINT) :: IDIMS ! number of dimensions +CHARACTER(LEN=30) :: YVARNAME +INTEGER :: IRESP +INTEGER :: IFIELD CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_read_nc4_L0',TRIM(TPFILE%CNAME)//': reading '//TRIM(TPFIELD%CMNHNAME)) @@ -1044,17 +1044,17 @@ TYPE(TFIELDDATA), INTENT(INOUT) :: TPFIELD LOGICAL,DIMENSION(:),INTENT(INOUT) :: OFIELD INTEGER, INTENT(OUT) :: KRESP ! return-code -INTEGER(KIND=IDCDF_KIND) :: STATUS -INTEGER(KIND=IDCDF_KIND) :: INCID -INTEGER(KIND=IDCDF_KIND) :: IVARID -INTEGER(KIND=IDCDF_KIND) :: ITYPE ! variable type -INTEGER(KIND=IDCDF_KIND) :: IDIMS ! number of dimensions -INTEGER(KIND=IDCDF_KIND),DIMENSION(NF90_MAX_VAR_DIMS) :: IVDIMS -INTEGER(KIND=IDCDF_KIND) :: IDIMLEN -CHARACTER(LEN=30) :: YVARNAME -INTEGER :: IRESP -INTEGER :: JI -INTEGER,DIMENSION(SIZE(OFIELD)) :: IFIELD +INTEGER(KIND=CDFINT) :: STATUS +INTEGER(KIND=CDFINT) :: INCID +INTEGER(KIND=CDFINT) :: IVARID +INTEGER(KIND=CDFINT) :: ITYPE ! variable type +INTEGER(KIND=CDFINT) :: IDIMS ! number of dimensions +INTEGER(KIND=CDFINT),DIMENSION(NF90_MAX_VAR_DIMS) :: IVDIMS +INTEGER(KIND=CDFINT) :: IDIMLEN +CHARACTER(LEN=30) :: YVARNAME +INTEGER :: IRESP +INTEGER :: JI +INTEGER,DIMENSION(SIZE(OFIELD)) :: IFIELD CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_read_nc4_L1',TRIM(TPFILE%CNAME)//': reading '//TRIM(TPFIELD%CMNHNAME)) @@ -1131,16 +1131,16 @@ TYPE(TFIELDDATA), INTENT(INOUT) :: TPFIELD CHARACTER(LEN=*), INTENT(INOUT) :: HFIELD INTEGER, INTENT(OUT) :: KRESP ! return-code -INTEGER(KIND=IDCDF_KIND) :: STATUS -INTEGER(KIND=IDCDF_KIND) :: INCID -INTEGER(KIND=IDCDF_KIND) :: IVARID -INTEGER(KIND=IDCDF_KIND) :: ITYPE ! variable type -INTEGER(KIND=IDCDF_KIND) :: IDIMS ! number of dimensions -INTEGER(KIND=IDCDF_KIND),DIMENSION(NF90_MAX_VAR_DIMS) :: IVDIMS -CHARACTER(LEN=30) :: YVARNAME -CHARACTER(LEN=:),ALLOCATABLE :: YSTR -INTEGER(KIND=IDCDF_KIND) :: IDIMLEN -INTEGER :: IRESP +INTEGER(KIND=CDFINT) :: STATUS +INTEGER(KIND=CDFINT) :: INCID +INTEGER(KIND=CDFINT) :: IVARID +INTEGER(KIND=CDFINT) :: ITYPE ! variable type +INTEGER(KIND=CDFINT) :: IDIMS ! number of dimensions +INTEGER(KIND=CDFINT),DIMENSION(NF90_MAX_VAR_DIMS) :: IVDIMS +CHARACTER(LEN=30) :: YVARNAME +CHARACTER(LEN=:),ALLOCATABLE :: YSTR +INTEGER(KIND=CDFINT) :: IDIMLEN +INTEGER :: IRESP CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_read_nc4_C0',TRIM(TPFILE%CNAME)//': reading '//TRIM(TPFIELD%CMNHNAME)) @@ -1200,14 +1200,14 @@ TYPE(TFIELDDATA), INTENT(INOUT) :: TPFIELD TYPE (DATE_TIME), INTENT(INOUT) :: TPDATA INTEGER, INTENT(OUT) :: KRESP ! return-code -INTEGER(KIND=IDCDF_KIND) :: STATUS -INTEGER(KIND=IDCDF_KIND) :: INCID -INTEGER(KIND=IDCDF_KIND) :: IVARID -INTEGER(KIND=IDCDF_KIND) :: ITYPE ! variable type -INTEGER(KIND=IDCDF_KIND) :: IDIMS ! number of dimensions +INTEGER(KIND=CDFINT) :: STATUS +INTEGER(KIND=CDFINT) :: INCID +INTEGER(KIND=CDFINT) :: IVARID +INTEGER(KIND=CDFINT) :: ITYPE ! variable type +INTEGER(KIND=CDFINT) :: IDIMS ! number of dimensions CHARACTER(LEN=30) :: YVARNAME CHARACTER(LEN=:),ALLOCATABLE :: YSTR -INTEGER(KIND=IDCDF_KIND) :: IDIMLEN +INTEGER(KIND=CDFINT) :: IDIMLEN INTEGER :: IDX,IRESP CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_read_nc4_T0',TRIM(TPFILE%CNAME)//': reading '//TRIM(TPFIELD%CMNHNAME)) diff --git a/src/LIB/SURCOUCHE/src/mode_io_tools.f90 b/src/LIB/SURCOUCHE/src/mode_io_tools.f90 index 8b666ab4631bdf4c9ff584485cf91288872ee57e..b4d2a3d5fd80491940d3e6e0bb281ef086894af0 100644 --- a/src/LIB/SURCOUCHE/src/mode_io_tools.f90 +++ b/src/LIB/SURCOUCHE/src/mode_io_tools.f90 @@ -25,8 +25,8 @@ FUNCTION IO_Level2filenumber_get(k,nb_proc_io) ! return the file number where to write the K level of data ! IMPLICIT NONE - INTEGER(kind=MNH_MPI_RANK_KIND) :: k,nb_proc_io - INTEGER(kind=MNH_MPI_RANK_KIND) :: IO_Level2filenumber_get + INTEGER :: k,nb_proc_io + INTEGER :: IO_Level2filenumber_get IO_Level2filenumber_get = MOD ((k-1) , nb_proc_io ) @@ -37,12 +37,12 @@ FUNCTION IO_Rank_master_get(IFILE,nb_proc,nb_proc_io,offset_rank) ! return the proc number which must write the 'IFILE' file ! IMPLICIT NONE - INTEGER(kind=MNH_MPI_RANK_KIND) :: IFILE,nb_proc,nb_proc_io - INTEGER(kind=MNH_MPI_RANK_KIND),OPTIONAL :: offset_rank + INTEGER, INTENT(IN) :: IFILE, nb_proc, nb_proc_io + INTEGER, OPTIONAL, INTENT(IN) :: offset_rank - INTEGER(kind=MNH_MPI_RANK_KIND) :: IO_Rank_master_get + INTEGER :: IO_Rank_master_get - INTEGER(kind=MNH_MPI_RANK_KIND) :: ipas,irest + INTEGER :: ipas, irest ipas = nb_proc / nb_proc_io irest = MOD ( nb_proc , nb_proc_io ) diff --git a/src/LIB/SURCOUCHE/src/mode_io_tools_lfi.f90 b/src/LIB/SURCOUCHE/src/mode_io_tools_lfi.f90 index c320a2c7d96366591a506bf7345f9e1a88dd2b88..d9af6e616af8b6383004d278fa2b644a6d277334 100644 --- a/src/LIB/SURCOUCHE/src/mode_io_tools_lfi.f90 +++ b/src/LIB/SURCOUCHE/src/mode_io_tools_lfi.f90 @@ -10,7 +10,8 @@ !----------------------------------------------------------------- module mode_io_tools_lfi -use modd_io, only: tfiledata +use modd_io, only: tfiledata +use modd_precision, only: LFIINT implicit none @@ -21,9 +22,9 @@ public :: IO_Verbosity_prepare_lfi contains subroutine IO_Verbosity_prepare_lfi(tpfile, kmelev, ostats) - type(tfiledata), intent(in) :: tpfile - integer(kind=LFI_INT), intent(out) :: kmelev - logical, intent(out) :: ostats + type(tfiledata), intent(in) :: tpfile + integer(kind=LFIINT), intent(out) :: kmelev + logical, intent(out) :: ostats select case (tpfile%nlfiverb) case(:2) diff --git a/src/LIB/SURCOUCHE/src/mode_io_tools_nc4.f90 b/src/LIB/SURCOUCHE/src/mode_io_tools_nc4.f90 index 638340f2306717b389265f8cbec96e448a78afb3..21734960714a0e90b1f0376525c179b08705d1a0 100644 --- a/src/LIB/SURCOUCHE/src/mode_io_tools_nc4.f90 +++ b/src/LIB/SURCOUCHE/src/mode_io_tools_nc4.f90 @@ -14,8 +14,9 @@ #if defined(MNH_IOCDF4) module mode_io_tools_nc4 -use modd_io, only: tfiledata -use modd_netcdf, only: dimcdf, IDCDF_KIND, iocdf, tdim_dummy +use modd_io, only: tfiledata +use modd_netcdf, only: dimcdf, iocdf, tdim_dummy +use modd_precision, only: CDFINT use mode_field, only: tfielddata use mode_msg @@ -329,7 +330,7 @@ END SUBROUTINE IO_Knowndims_set_nc4 SUBROUTINE IO_Iocdf_dealloc_nc4(PIOCDF) TYPE(IOCDF), POINTER :: PIOCDF -INTEGER(KIND=IDCDF_KIND) :: IRESP +INTEGER(KIND=CDFINT) :: IRESP CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Iocdf_dealloc_nc4','called') @@ -357,10 +358,10 @@ END SUBROUTINE IO_Iocdf_dealloc_nc4 SUBROUTINE IO_Vdims_fill_nc4(TPFILE, TPFIELD, KSHAPE, KVDIMS) -TYPE(TFILEDATA), INTENT(IN) :: TPFILE -TYPE(TFIELDDATA), INTENT(IN) :: TPFIELD -INTEGER(KIND=IDCDF_KIND),DIMENSION(:),INTENT(IN) :: KSHAPE -INTEGER(KIND=IDCDF_KIND),DIMENSION(:),ALLOCATABLE,INTENT(OUT) :: KVDIMS +TYPE(TFILEDATA), INTENT(IN) :: TPFILE +TYPE(TFIELDDATA), INTENT(IN) :: TPFIELD +INTEGER(KIND=CDFINT),DIMENSION(:), INTENT(IN) :: KSHAPE +INTEGER(KIND=CDFINT),DIMENSION(:),ALLOCATABLE,INTENT(OUT) :: KVDIMS ! INTEGER :: IGRID INTEGER :: JI @@ -431,19 +432,19 @@ END SUBROUTINE IO_Vdims_fill_nc4 FUNCTION IO_Dimcdf_get_nc4(TPFILE, KLEN, HDIMNAME) -TYPE(TFILEDATA), INTENT(IN) :: TPFILE -INTEGER(KIND=IDCDF_KIND),INTENT(IN) :: KLEN -CHARACTER(LEN=*), OPTIONAL :: HDIMNAME ! When provided don't search but - ! simply create with name HDIMNAME +TYPE(TFILEDATA), INTENT(IN) :: TPFILE +INTEGER(KIND=CDFINT), INTENT(IN) :: KLEN +CHARACTER(LEN=*), OPTIONAL, INTENT(IN) :: HDIMNAME ! When provided don't search but + ! simply create with name HDIMNAME TYPE(DIMCDF), POINTER :: IO_Dimcdf_get_nc4 TYPE(DIMCDF), POINTER :: TMP INTEGER :: COUNT CHARACTER(LEN=16) :: YSUFFIX CHARACTER(LEN=20) :: YDIMNAME -INTEGER(KIND=IDCDF_KIND) :: STATUS -LOGICAL :: GCHKLEN !Check if KLEN is valid -TYPE(IOCDF), POINTER :: PIOCDF +INTEGER(KIND=CDFINT) :: STATUS +LOGICAL :: GCHKLEN !Check if KLEN is valid +TYPE(IOCDF), POINTER :: PIOCDF CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Dimcdf_get_nc4','called') @@ -497,14 +498,14 @@ END FUNCTION IO_Dimcdf_get_nc4 FUNCTION IO_Strdimid_get_nc4(TPFILE,KLEN) -TYPE(TFILEDATA), INTENT(IN) :: TPFILE -INTEGER(KIND=IDCDF_KIND),INTENT(IN) :: KLEN -INTEGER(KIND=IDCDF_KIND) :: IO_Strdimid_get_nc4 +TYPE(TFILEDATA), INTENT(IN) :: TPFILE +INTEGER(KIND=CDFINT), INTENT(IN) :: KLEN +INTEGER(KIND=CDFINT) :: IO_Strdimid_get_nc4 TYPE(DIMCDF), POINTER :: TMP TYPE(IOCDF), POINTER :: TZIOCDF CHARACTER(LEN=16) :: YSUFFIX -INTEGER(KIND=IDCDF_KIND) :: STATUS +INTEGER(KIND=CDFINT) :: STATUS CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Strdimid_get_nc4','called') @@ -557,11 +558,11 @@ END FUNCTION IO_Iocdf_alloc_nc4 subroutine IO_Err_handle_nc4(kstatus,hsubr,hncsubr,hvar,kresp) -integer(kind=IDCDF_KIND),intent(in) :: kstatus -character(len=*), intent(in) :: hsubr -character(len=*), intent(in) :: hncsubr -character(len=*), intent(in) :: hvar -integer, optional, intent(out) :: kresp +integer(kind=CDFINT), intent(in) :: kstatus +character(len=*), intent(in) :: hsubr +character(len=*), intent(in) :: hncsubr +character(len=*), intent(in) :: hvar +integer, optional, intent(out) :: kresp ! Don't stop (by default) the code when kresp is present ! and ensure kresp is a negative integer diff --git a/src/LIB/SURCOUCHE/src/mode_io_write_lfi.f90 b/src/LIB/SURCOUCHE/src/mode_io_write_lfi.f90 index 5dc2195e007b0a9b675c98dc743747bbf74957af..26f18bc04cee5ec685bbc4d1d07d1c83964aa6fa 100644 --- a/src/LIB/SURCOUCHE/src/mode_io_write_lfi.f90 +++ b/src/LIB/SURCOUCHE/src/mode_io_write_lfi.f90 @@ -14,6 +14,7 @@ module mode_io_write_lfi ! USE MODD_IO USE MODD_PARAMETERS, ONLY: NLFIMAXCOMMENTLENGTH +use modd_precision, only: LFIINT ! USE MODE_FIELD, ONLY: TFIELDDATA USE MODE_MSG @@ -56,7 +57,7 @@ INTEGER, INTENT(OUT):: KRESP ! return-code if problems araised !* 0.2 Declarations of local variables ! INTEGER :: ILENG -INTEGER(KIND=LFI_INT) :: IRESP, ITOTAL +INTEGER(KIND=LFIINT) :: IRESP, ITOTAL INTEGER(KIND=8),DIMENSION(:),ALLOCATABLE :: IWORK CHARACTER(LEN=LEN_HREC) :: YRECFM ! @@ -95,7 +96,7 @@ INTEGER, INTENT(OUT):: KRESP ! return-code if problems araised !* 0.2 Declarations of local variables ! INTEGER :: ILENG -INTEGER(kind=LFI_INT) :: IRESP, ITOTAL +INTEGER(kind=LFIINT) :: IRESP, ITOTAL INTEGER(KIND=8),DIMENSION(:),ALLOCATABLE :: IWORK CHARACTER(LEN=LEN_HREC) :: YRECFM ! @@ -142,7 +143,7 @@ INTEGER,OPTIONAL, INTENT(IN) :: KZFILE ! Number of the Z-level splitted !* 0.2 Declarations of local variables ! INTEGER :: ILENG -INTEGER(kind=LFI_INT) :: IRESP, ITOTAL +INTEGER(kind=LFIINT) :: IRESP, ITOTAL INTEGER(KIND=8),DIMENSION(:),ALLOCATABLE :: IWORK CHARACTER(LEN=4) :: YSUFFIX CHARACTER(LEN=LEN(TPFIELD%CMNHNAME)+4) :: YVARNAME @@ -206,7 +207,7 @@ INTEGER, INTENT(OUT):: KRESP ! return-code if problems araised !* 0.2 Declarations of local variables ! INTEGER :: ILENG -INTEGER(kind=LFI_INT) :: IRESP, ITOTAL +INTEGER(kind=LFIINT) :: IRESP, ITOTAL INTEGER(KIND=8),DIMENSION(:),ALLOCATABLE :: IWORK CHARACTER(LEN=LEN_HREC) :: YRECFM ! @@ -251,7 +252,7 @@ INTEGER, INTENT(OUT):: KRESP ! return-code if problems araised !* 0.2 Declarations of local variables ! INTEGER :: ILENG -INTEGER(kind=LFI_INT) :: IRESP, ITOTAL +INTEGER(kind=LFIINT) :: IRESP, ITOTAL INTEGER(KIND=8),DIMENSION(:),ALLOCATABLE :: IWORK CHARACTER(LEN=LEN_HREC) :: YRECFM ! @@ -296,7 +297,7 @@ INTEGER, INTENT(OUT):: KRESP ! return-code if problems araised !* 0.2 Declarations of local variables ! INTEGER :: ILENG -INTEGER(kind=LFI_INT) :: IRESP, ITOTAL +INTEGER(kind=LFIINT) :: IRESP, ITOTAL INTEGER(KIND=8),DIMENSION(:),ALLOCATABLE :: IWORK CHARACTER(LEN=LEN_HREC) :: YRECFM ! @@ -341,7 +342,7 @@ INTEGER, INTENT(OUT):: KRESP ! return-code if problems arais !* 0.2 Declarations of local variables ! INTEGER :: ILENG -INTEGER(kind=LFI_INT) :: IRESP, ITOTAL +INTEGER(kind=LFIINT) :: IRESP, ITOTAL INTEGER(KIND=8),DIMENSION(:),ALLOCATABLE :: IWORK CHARACTER(LEN=LEN_HREC) :: YRECFM ! @@ -386,7 +387,7 @@ INTEGER, INTENT(OUT):: KRESP ! return-code if problems araised !* 0.2 Declarations of local variables ! INTEGER :: ILENG -INTEGER(kind=LFI_INT) :: IRESP, ITOTAL +INTEGER(kind=LFIINT) :: IRESP, ITOTAL INTEGER(KIND=8),DIMENSION(:),ALLOCATABLE :: IWORK CHARACTER(LEN=LEN_HREC) :: YRECFM ! @@ -425,7 +426,7 @@ INTEGER, INTENT(OUT):: KRESP ! return-code if problems araised !* 0.2 Declarations of local variables ! INTEGER :: ILENG -INTEGER(kind=LFI_INT) :: IRESP, ITOTAL +INTEGER(kind=LFIINT) :: IRESP, ITOTAL INTEGER(KIND=8),DIMENSION(:),ALLOCATABLE :: IWORK CHARACTER(LEN=LEN_HREC) :: YRECFM ! @@ -470,7 +471,7 @@ INTEGER, INTENT(OUT):: KRESP ! return-code if problems araised !* 0.2 Declarations of local variables ! INTEGER :: ILENG -INTEGER(kind=LFI_INT) :: IRESP, ITOTAL +INTEGER(kind=LFIINT) :: IRESP, ITOTAL INTEGER(KIND=8),DIMENSION(:),ALLOCATABLE :: IWORK CHARACTER(LEN=LEN_HREC) :: YRECFM ! @@ -515,7 +516,7 @@ INTEGER, INTENT(OUT):: KRESP ! return-code if problems araised !* 0.2 Declarations of local variables ! INTEGER :: ILENG -INTEGER(kind=LFI_INT) :: IRESP, ITOTAL +INTEGER(kind=LFIINT) :: IRESP, ITOTAL INTEGER(KIND=8),DIMENSION(:),ALLOCATABLE :: IWORK CHARACTER(LEN=LEN_HREC) :: YRECFM ! @@ -561,7 +562,7 @@ INTEGER, INTENT(OUT):: KRESP ! return-code if problems araised ! INTEGER :: IFIELD INTEGER :: ILENG -INTEGER(kind=LFI_INT) :: IRESP, ITOTAL +INTEGER(kind=LFIINT) :: IRESP, ITOTAL INTEGER(KIND=8),DIMENSION(:),ALLOCATABLE :: IWORK CHARACTER(LEN=LEN_HREC) :: YRECFM ! @@ -608,7 +609,7 @@ INTEGER, INTENT(OUT):: KRESP ! return-code if problems araised ! INTEGER, DIMENSION(SIZE(OFIELD)) :: IFIELD INTEGER :: ILENG -INTEGER(kind=LFI_INT) :: IRESP, ITOTAL +INTEGER(kind=LFIINT) :: IRESP, ITOTAL INTEGER(KIND=8),DIMENSION(:),ALLOCATABLE :: IWORK CHARACTER(LEN=LEN_HREC) :: YRECFM ! @@ -662,7 +663,7 @@ INTEGER, INTENT(OUT):: KRESP ! return-code if problems araised !* 0.2 Declarations of local variables ! INTEGER :: ILENG, ILENGMAX, JLOOP -INTEGER(kind=LFI_INT) :: IRESP, ITOTAL +INTEGER(kind=LFIINT) :: IRESP, ITOTAL INTEGER(KIND=8),DIMENSION(:),ALLOCATABLE :: IWORK CHARACTER(LEN=LEN_HREC) :: YRECFM ! @@ -720,7 +721,7 @@ INTEGER, INTENT(OUT):: KRESP ! return-code if problems araised !* 0.2 Declarations of local variables ! INTEGER :: ILENG -INTEGER(kind=LFI_INT) :: IRESP, ITOTAL +INTEGER(kind=LFIINT) :: IRESP, ITOTAL TYPE(TFIELDDATA) :: TZFIELD INTEGER, DIMENSION(3) :: ITDATE ! date array INTEGER(KIND=8),DIMENSION(:),ALLOCATABLE :: IWORK @@ -785,8 +786,8 @@ SUBROUTINE WRITE_PREPARE(TPFIELD,KLENG,KWORK,KTOTAL,KRESP) TYPE(TFIELDDATA), INTENT(IN) :: TPFIELD INTEGER, INTENT(IN) :: KLENG INTEGER(KIND=8),DIMENSION(:),ALLOCATABLE,INTENT(INOUT) :: KWORK -INTEGER(kind=LFI_INT), INTENT(OUT) :: KTOTAL -INTEGER(kind=LFI_INT), INTENT(OUT) :: KRESP +INTEGER(kind=LFIINT), INTENT(OUT) :: KTOTAL +INTEGER(kind=LFIINT), INTENT(OUT) :: KRESP ! INTEGER :: ICOMLEN INTEGER :: J diff --git a/src/LIB/SURCOUCHE/src/mode_io_write_nc4.f90 b/src/LIB/SURCOUCHE/src/mode_io_write_nc4.f90 index 0fc391c6989e19a5b08bfcbbe14161f223159974..ebd476354fc5dba27d7ebfd8eb33b5adc5f3cf80 100644 --- a/src/LIB/SURCOUCHE/src/mode_io_write_nc4.f90 +++ b/src/LIB/SURCOUCHE/src/mode_io_write_nc4.f90 @@ -17,13 +17,14 @@ module mode_io_write_nc4 use modd_io, only: gsmonoproc, tfiledata -use modd_netcdf, only: dimcdf, IDCDF_KIND, iocdf +use modd_netcdf, only: dimcdf, iocdf +use modd_precision, only: CDFINT, MNHINT_NF90, MNHREAL_NF90 use mode_field, only: tfielddata use mode_io_tools_nc4, only: IO_Mnhname_clean, IO_Vdims_fill_nc4, IO_Dimcdf_get_nc4, IO_Strdimid_get_nc4, IO_Err_handle_nc4 use mode_msg -use NETCDF, only: NF90_CHAR, NF90_DOUBLE, NF90_FLOAT, NF90_INT, NF90_INT1, NF90_INT64, & +use NETCDF, only: NF90_CHAR, NF90_FLOAT, NF90_INT1, & NF90_GLOBAL, NF90_NOERR, & NF90_DEF_VAR, NF90_DEF_VAR_DEFLATE, NF90_GET_ATT, NF90_INQ_VARID, & NF90_INQUIRE_ATTRIBUTE, NF90_PUT_ATT, NF90_PUT_VAR @@ -49,8 +50,8 @@ END INTERFACE IO_Field_write_nc4 integer,parameter :: NSTRINGCHUNKSIZE = 16 !Dimension of the chunks of strings !(to limit the number of dimensions for strings) -integer(kind=IDCDF_KIND),parameter :: SHUFFLE = 1 !Set to 1 for (usually) better compression -integer(kind=IDCDF_KIND),parameter :: DEFLATE = 1 +integer(kind=CDFINT),parameter :: SHUFFLE = 1 !Set to 1 for (usually) better compression +integer(kind=CDFINT),parameter :: DEFLATE = 1 contains @@ -61,16 +62,16 @@ USE MODD_CONF_n, ONLY: CSTORAGE_TYPE ! USE MODE_FIELD, ONLY: TYPEINT, TYPEREAL ! -TYPE(TFILEDATA), INTENT(IN) :: TPFILE -TYPE(TFIELDDATA), INTENT(IN) :: TPFIELD -INTEGER(KIND=IDCDF_KIND), INTENT(IN) :: KVARID -LOGICAL, INTENT(IN) :: OEXISTED !True if variable was already defined -INTEGER(KIND=IDCDF_KIND),DIMENSION(:),OPTIONAL,INTENT(IN) :: KSHAPE -CHARACTER(LEN=*), OPTIONAL,INTENT(IN) :: HCALENDAR -LOGICAL, OPTIONAL,INTENT(IN) :: OISCOORD ! Is a coordinate variable (->do not write coordinates attribute) +TYPE(TFILEDATA), INTENT(IN) :: TPFILE +TYPE(TFIELDDATA), INTENT(IN) :: TPFIELD +INTEGER(KIND=CDFINT), INTENT(IN) :: KVARID +LOGICAL, INTENT(IN) :: OEXISTED !True if variable was already defined +INTEGER(KIND=CDFINT), DIMENSION(:), OPTIONAL, INTENT(IN) :: KSHAPE +CHARACTER(LEN=*), OPTIONAL, INTENT(IN) :: HCALENDAR +LOGICAL, OPTIONAL, INTENT(IN) :: OISCOORD ! Is a coordinate variable (->do not write coordinates attribute) ! -INTEGER(KIND=IDCDF_KIND) :: INCID -INTEGER(KIND=IDCDF_KIND) :: STATUS +INTEGER(KIND=CDFINT) :: INCID +INTEGER(KIND=CDFINT) :: STATUS CHARACTER(LEN=:),ALLOCATABLE :: YCOORDS LOGICAL :: GISCOORD ! @@ -255,13 +256,13 @@ TYPE(TFIELDDATA), INTENT(IN) :: TPFIELD REAL, INTENT(IN) :: PFIELD INTEGER, INTENT(OUT):: KRESP ! -INTEGER(KIND=IDCDF_KIND) :: STATUS -INTEGER(KIND=IDCDF_KIND) :: INCID -CHARACTER(LEN=LEN(TPFIELD%CMNHNAME)) :: YVARNAME -INTEGER(KIND=IDCDF_KIND) :: IVARID -INTEGER(KIND=IDCDF_KIND), DIMENSION(:), ALLOCATABLE :: IVDIMS -INTEGER :: IRESP -LOGICAL :: GEXISTED !True if variable was already defined +INTEGER(KIND=CDFINT) :: STATUS +INTEGER(KIND=CDFINT) :: INCID +CHARACTER(LEN=LEN(TPFIELD%CMNHNAME)) :: YVARNAME +INTEGER(KIND=CDFINT) :: IVARID +INTEGER(KIND=CDFINT), DIMENSION(:), ALLOCATABLE :: IVDIMS +INTEGER :: IRESP +LOGICAL :: GEXISTED !True if variable was already defined ! CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_write_nc4_X0',TRIM(TPFILE%CNAME)//': writing '//TRIM(TPFIELD%CMNHNAME)) ! @@ -278,22 +279,14 @@ STATUS = NF90_INQ_VARID(INCID, YVARNAME, IVARID) IF (STATUS /= NF90_NOERR) THEN IF (TPFIELD%LTIMEDEP) THEN ! Get the netcdf dimensions - CALL IO_Vdims_fill_nc4(TPFILE, TPFIELD, INT(SHAPE(PFIELD),KIND=IDCDF_KIND), IVDIMS) + CALL IO_Vdims_fill_nc4(TPFILE, TPFIELD, INT(SHAPE(PFIELD),KIND=CDFINT), IVDIMS) ! Define the variable -#if (MNH_REAL == 8) - STATUS = NF90_DEF_VAR(INCID, YVARNAME, NF90_DOUBLE, IVDIMS, IVARID) -#else - STATUS = NF90_DEF_VAR(INCID, YVARNAME, NF90_FLOAT, IVDIMS, IVARID) -#endif + STATUS = NF90_DEF_VAR(INCID, YVARNAME, MNHREAL_NF90, IVDIMS, IVARID) IF (status /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_write_nc4_X0','NF90_DEF_VAR',trim(YVARNAME)) DEALLOCATE(IVDIMS) ELSE ! Define the scalar variable -#if (MNH_REAL == 8) - STATUS = NF90_DEF_VAR(INCID, YVARNAME, NF90_DOUBLE, IVARID) -#else - STATUS = NF90_DEF_VAR(INCID, YVARNAME, NF90_FLOAT, IVARID) -#endif + STATUS = NF90_DEF_VAR(INCID, YVARNAME, MNHREAL_NF90, IVARID) IF (status /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_write_nc4_X0','NF90_DEF_VAR',trim(YVARNAME)) END IF ELSE @@ -318,13 +311,13 @@ TYPE(TFIELDDATA), INTENT(IN) :: TPFIELD REAL,DIMENSION(:), INTENT(IN) :: PFIELD ! array containing the data field INTEGER, INTENT(OUT):: KRESP ! -INTEGER(KIND=IDCDF_KIND) :: STATUS -INTEGER(KIND=IDCDF_KIND) :: INCID -CHARACTER(LEN=LEN(TPFIELD%CMNHNAME)+4) :: YVARNAME -INTEGER(KIND=IDCDF_KIND) :: IVARID -INTEGER(KIND=IDCDF_KIND), DIMENSION(:), ALLOCATABLE :: IVDIMS -INTEGER :: IRESP -LOGICAL :: GEXISTED !True if variable was already defined +INTEGER(KIND=CDFINT) :: STATUS +INTEGER(KIND=CDFINT) :: INCID +CHARACTER(LEN=LEN(TPFIELD%CMNHNAME)+4) :: YVARNAME +INTEGER(KIND=CDFINT) :: IVARID +INTEGER(KIND=CDFINT), DIMENSION(:), ALLOCATABLE :: IVDIMS +INTEGER :: IRESP +LOGICAL :: GEXISTED !True if variable was already defined ! CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_write_nc4_X1',TRIM(TPFILE%CNAME)//': writing '//TRIM(TPFIELD%CMNHNAME)) ! @@ -346,17 +339,13 @@ IF (STATUS /= NF90_NOERR) THEN END IF ! Get the netcdf dimensions - CALL IO_Vdims_fill_nc4(TPFILE, TPFIELD, INT(SHAPE(PFIELD),KIND=IDCDF_KIND), IVDIMS) + CALL IO_Vdims_fill_nc4(TPFILE, TPFIELD, INT(SHAPE(PFIELD),KIND=CDFINT), IVDIMS) ! Define the variable IF (TPFILE%LNCREDUCE_FLOAT_PRECISION) THEN STATUS = NF90_DEF_VAR(INCID, YVARNAME, NF90_FLOAT, IVDIMS, IVARID) ELSE -#if (MNH_REAL == 8) - STATUS = NF90_DEF_VAR(INCID, YVARNAME, NF90_DOUBLE, IVDIMS, IVARID) -#else - STATUS = NF90_DEF_VAR(INCID, YVARNAME, NF90_FLOAT, IVDIMS, IVARID) -#endif + STATUS = NF90_DEF_VAR(INCID, YVARNAME, MNHREAL_NF90, IVDIMS, IVARID) END IF IF (status /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_write_nc4_X1','NF90_DEF_VAR',trim(YVARNAME)) ! Add compression if asked for @@ -391,16 +380,16 @@ INTEGER,OPTIONAL, INTENT(IN) :: KVERTLEVEL ! Number of the vertical level ( INTEGER,OPTIONAL, INTENT(IN) :: KZFILE ! Number of the Z-level splitted file LOGICAL,OPTIONAL, INTENT(IN) :: OISCOORD ! Is a coordinate variable (->do not write coordinates attribute) ! -INTEGER(KIND=IDCDF_KIND) :: STATUS -INTEGER(KIND=IDCDF_KIND) :: INCID -CHARACTER(LEN=4) :: YSUFFIX -CHARACTER(LEN=LEN(TPFIELD%CMNHNAME)+4) :: YVARNAME -INTEGER(KIND=IDCDF_KIND) :: IVARID -INTEGER(KIND=IDCDF_KIND), DIMENSION(:), ALLOCATABLE :: IVDIMS -INTEGER :: IRESP -TYPE(TFIELDDATA) :: TZFIELD -TYPE(TFILEDATA),POINTER :: TZFILE -LOGICAL :: GEXISTED !True if variable was already defined +INTEGER(KIND=CDFINT) :: STATUS +INTEGER(KIND=CDFINT) :: INCID +CHARACTER(LEN=4) :: YSUFFIX +CHARACTER(LEN=LEN(TPFIELD%CMNHNAME)+4) :: YVARNAME +INTEGER(KIND=CDFINT) :: IVARID +INTEGER(KIND=CDFINT), DIMENSION(:), ALLOCATABLE :: IVDIMS +INTEGER :: IRESP +TYPE(TFIELDDATA) :: TZFIELD +TYPE(TFILEDATA),POINTER :: TZFILE +LOGICAL :: GEXISTED !True if variable was already defined ! IRESP = 0 ! @@ -441,17 +430,13 @@ IF (STATUS /= NF90_NOERR) THEN END IF ! Get the netcdf dimensions - CALL IO_Vdims_fill_nc4(TZFILE, TZFIELD, INT(SHAPE(PFIELD),KIND=IDCDF_KIND), IVDIMS) + CALL IO_Vdims_fill_nc4(TZFILE, TZFIELD, INT(SHAPE(PFIELD),KIND=CDFINT), IVDIMS) ! Define the variable IF (TZFILE%LNCREDUCE_FLOAT_PRECISION) THEN STATUS = NF90_DEF_VAR(INCID, YVARNAME, NF90_FLOAT, IVDIMS, IVARID) ELSE -#if (MNH_REAL == 8) - STATUS = NF90_DEF_VAR(INCID, YVARNAME, NF90_DOUBLE, IVDIMS, IVARID) -#else - STATUS = NF90_DEF_VAR(INCID, YVARNAME, NF90_FLOAT, IVDIMS, IVARID) -#endif + STATUS = NF90_DEF_VAR(INCID, YVARNAME, MNHREAL_NF90, IVDIMS, IVARID) END IF IF (status /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_write_nc4_X2','NF90_DEF_VAR',trim(YVARNAME)) ! Add compression if asked for @@ -465,7 +450,7 @@ ELSE END IF ! Write metadata -CALL IO_Field_attr_write_nc4(TZFILE,TZFIELD,IVARID,GEXISTED,KSHAPE=INT(SHAPE(PFIELD),KIND=IDCDF_KIND),OISCOORD=OISCOORD) +CALL IO_Field_attr_write_nc4(TZFILE,TZFIELD,IVARID,GEXISTED,KSHAPE=INT(SHAPE(PFIELD),KIND=CDFINT),OISCOORD=OISCOORD) ! Write the data STATUS = NF90_PUT_VAR(INCID, IVARID, PFIELD) IF (status /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_write_nc4_X2','NF90_PUT_VAR',trim(YVARNAME),IRESP) @@ -483,13 +468,13 @@ TYPE(TFIELDDATA), INTENT(IN) :: TPFIELD REAL,DIMENSION(:,:,:), INTENT(IN) :: PFIELD ! array containing the data field INTEGER, INTENT(OUT):: KRESP ! -INTEGER(KIND=IDCDF_KIND) :: STATUS -INTEGER(KIND=IDCDF_KIND) :: INCID -CHARACTER(LEN=LEN(TPFIELD%CMNHNAME)) :: YVARNAME -INTEGER(KIND=IDCDF_KIND) :: IVARID -INTEGER(KIND=IDCDF_KIND), DIMENSION(:), ALLOCATABLE :: IVDIMS -INTEGER :: IRESP -LOGICAL :: GEXISTED !True if variable was already defined +INTEGER(KIND=CDFINT) :: STATUS +INTEGER(KIND=CDFINT) :: INCID +CHARACTER(LEN=LEN(TPFIELD%CMNHNAME)) :: YVARNAME +INTEGER(KIND=CDFINT) :: IVARID +INTEGER(KIND=CDFINT), DIMENSION(:), ALLOCATABLE :: IVDIMS +INTEGER :: IRESP +LOGICAL :: GEXISTED !True if variable was already defined ! ! CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_write_nc4_X3',TRIM(TPFILE%CNAME)//': writing '//TRIM(TPFIELD%CMNHNAME)) @@ -512,17 +497,13 @@ IF (STATUS /= NF90_NOERR) THEN END IF ! Get the netcdf dimensions - CALL IO_Vdims_fill_nc4(TPFILE, TPFIELD, INT(SHAPE(PFIELD),KIND=IDCDF_KIND), IVDIMS) + CALL IO_Vdims_fill_nc4(TPFILE, TPFIELD, INT(SHAPE(PFIELD),KIND=CDFINT), IVDIMS) ! Define the variable IF (TPFILE%LNCREDUCE_FLOAT_PRECISION) THEN STATUS = NF90_DEF_VAR(INCID, YVARNAME, NF90_FLOAT, IVDIMS, IVARID) ELSE -#if (MNH_REAL == 8) - STATUS = NF90_DEF_VAR(INCID, YVARNAME, NF90_DOUBLE, IVDIMS, IVARID) -#else - STATUS = NF90_DEF_VAR(INCID, YVARNAME, NF90_FLOAT, IVDIMS, IVARID) -#endif + STATUS = NF90_DEF_VAR(INCID, YVARNAME, MNHREAL_NF90, IVDIMS, IVARID) END IF IF (status /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_write_nc4_X3','NF90_DEF_VAR',trim(YVARNAME)) @@ -537,7 +518,7 @@ ELSE END IF ! Write metadata -CALL IO_Field_attr_write_nc4(TPFILE,TPFIELD,IVARID,GEXISTED,KSHAPE=INT(SHAPE(PFIELD),KIND=IDCDF_KIND)) +CALL IO_Field_attr_write_nc4(TPFILE,TPFIELD,IVARID,GEXISTED,KSHAPE=INT(SHAPE(PFIELD),KIND=CDFINT)) ! Write the data STATUS = NF90_PUT_VAR(INCID, IVARID, PFIELD) IF (status /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_write_nc4_X3','NF90_PUT_VAR',trim(YVARNAME),IRESP) @@ -555,13 +536,13 @@ TYPE(TFIELDDATA), INTENT(IN) :: TPFIELD REAL,DIMENSION(:,:,:,:), INTENT(IN) :: PFIELD ! array containing the data field INTEGER, INTENT(OUT):: KRESP ! -INTEGER(KIND=IDCDF_KIND) :: STATUS -INTEGER(KIND=IDCDF_KIND) :: INCID -CHARACTER(LEN=LEN(TPFIELD%CMNHNAME)) :: YVARNAME -INTEGER(KIND=IDCDF_KIND) :: IVARID -INTEGER(KIND=IDCDF_KIND), DIMENSION(:), ALLOCATABLE :: IVDIMS -INTEGER :: IRESP -LOGICAL :: GEXISTED !True if variable was already defined +INTEGER(KIND=CDFINT) :: STATUS +INTEGER(KIND=CDFINT) :: INCID +CHARACTER(LEN=LEN(TPFIELD%CMNHNAME)) :: YVARNAME +INTEGER(KIND=CDFINT) :: IVARID +INTEGER(KIND=CDFINT), DIMENSION(:), ALLOCATABLE :: IVDIMS +INTEGER :: IRESP +LOGICAL :: GEXISTED !True if variable was already defined ! ! CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_write_nc4_X4',TRIM(TPFILE%CNAME)//': writing '//TRIM(TPFIELD%CMNHNAME)) @@ -584,17 +565,13 @@ IF (STATUS /= NF90_NOERR) THEN END IF ! Get the netcdf dimensions - CALL IO_Vdims_fill_nc4(TPFILE, TPFIELD, INT(SHAPE(PFIELD),KIND=IDCDF_KIND), IVDIMS) + CALL IO_Vdims_fill_nc4(TPFILE, TPFIELD, INT(SHAPE(PFIELD),KIND=CDFINT), IVDIMS) ! Define the variable IF (TPFILE%LNCREDUCE_FLOAT_PRECISION) THEN STATUS = NF90_DEF_VAR(INCID, YVARNAME, NF90_FLOAT, IVDIMS, IVARID) ELSE -#if (MNH_REAL == 8) - STATUS = NF90_DEF_VAR(INCID, YVARNAME, NF90_DOUBLE, IVDIMS, IVARID) -#else - STATUS = NF90_DEF_VAR(INCID, YVARNAME, NF90_FLOAT, IVDIMS, IVARID) -#endif + STATUS = NF90_DEF_VAR(INCID, YVARNAME, MNHREAL_NF90, IVDIMS, IVARID) END IF IF (status /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_write_nc4_X4','NF90_DEF_VAR',trim(YVARNAME)) @@ -609,7 +586,7 @@ ELSE END IF ! Write metadata -CALL IO_Field_attr_write_nc4(TPFILE,TPFIELD,IVARID,GEXISTED,KSHAPE=INT(SHAPE(PFIELD),KIND=IDCDF_KIND)) +CALL IO_Field_attr_write_nc4(TPFILE,TPFIELD,IVARID,GEXISTED,KSHAPE=INT(SHAPE(PFIELD),KIND=CDFINT)) ! Write the data STATUS = NF90_PUT_VAR(INCID, IVARID, PFIELD) IF (status /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_write_nc4_X4','NF90_PUT_VAR',trim(YVARNAME),IRESP) @@ -627,13 +604,13 @@ TYPE(TFIELDDATA), INTENT(IN) :: TPFIELD REAL,DIMENSION(:,:,:,:,:), INTENT(IN) :: PFIELD ! array containing the data field INTEGER, INTENT(OUT):: KRESP ! -INTEGER(KIND=IDCDF_KIND) :: STATUS -INTEGER(KIND=IDCDF_KIND) :: INCID -CHARACTER(LEN=LEN(TPFIELD%CMNHNAME)) :: YVARNAME -INTEGER(KIND=IDCDF_KIND) :: IVARID -INTEGER(KIND=IDCDF_KIND), DIMENSION(:), ALLOCATABLE :: IVDIMS -INTEGER :: IRESP -LOGICAL :: GEXISTED !True if variable was already defined +INTEGER(KIND=CDFINT) :: STATUS +INTEGER(KIND=CDFINT) :: INCID +CHARACTER(LEN=LEN(TPFIELD%CMNHNAME)) :: YVARNAME +INTEGER(KIND=CDFINT) :: IVARID +INTEGER(KIND=CDFINT), DIMENSION(:), ALLOCATABLE :: IVDIMS +INTEGER :: IRESP +LOGICAL :: GEXISTED !True if variable was already defined ! ! CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_write_nc4_X5',TRIM(TPFILE%CNAME)//': writing '//TRIM(TPFIELD%CMNHNAME)) @@ -656,17 +633,13 @@ IF (STATUS /= NF90_NOERR) THEN END IF ! Get the netcdf dimensions - CALL IO_Vdims_fill_nc4(TPFILE, TPFIELD, INT(SHAPE(PFIELD),KIND=IDCDF_KIND), IVDIMS) + CALL IO_Vdims_fill_nc4(TPFILE, TPFIELD, INT(SHAPE(PFIELD),KIND=CDFINT), IVDIMS) ! Define the variable IF (TPFILE%LNCREDUCE_FLOAT_PRECISION) THEN STATUS = NF90_DEF_VAR(INCID, YVARNAME, NF90_FLOAT, IVDIMS, IVARID) ELSE -#if (MNH_REAL == 8) - STATUS = NF90_DEF_VAR(INCID, YVARNAME, NF90_DOUBLE, IVDIMS, IVARID) -#else - STATUS = NF90_DEF_VAR(INCID, YVARNAME, NF90_FLOAT, IVDIMS, IVARID) -#endif + STATUS = NF90_DEF_VAR(INCID, YVARNAME, MNHREAL_NF90, IVDIMS, IVARID) END IF IF (status /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_write_nc4_X5','NF90_DEF_VAR',trim(YVARNAME)) @@ -681,7 +654,7 @@ ELSE END IF ! Write metadata -CALL IO_Field_attr_write_nc4(TPFILE,TPFIELD,IVARID,GEXISTED,KSHAPE=INT(SHAPE(PFIELD),KIND=IDCDF_KIND)) +CALL IO_Field_attr_write_nc4(TPFILE,TPFIELD,IVARID,GEXISTED,KSHAPE=INT(SHAPE(PFIELD),KIND=CDFINT)) ! Write the data STATUS = NF90_PUT_VAR(INCID, IVARID, PFIELD) IF (status /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_write_nc4_X5','NF90_PUT_VAR',trim(YVARNAME),IRESP) @@ -699,13 +672,13 @@ TYPE(TFIELDDATA), INTENT(IN) :: TPFIELD REAL,DIMENSION(:,:,:,:,:,:), INTENT(IN) :: PFIELD ! array containing the data field INTEGER, INTENT(OUT):: KRESP ! -INTEGER(KIND=IDCDF_KIND) :: STATUS -INTEGER(KIND=IDCDF_KIND) :: INCID -CHARACTER(LEN=LEN(TPFIELD%CMNHNAME)) :: YVARNAME -INTEGER(KIND=IDCDF_KIND) :: IVARID -INTEGER(KIND=IDCDF_KIND), DIMENSION(:), ALLOCATABLE :: IVDIMS -INTEGER :: IRESP -LOGICAL :: GEXISTED !True if variable was already defined +INTEGER(KIND=CDFINT) :: STATUS +INTEGER(KIND=CDFINT) :: INCID +CHARACTER(LEN=LEN(TPFIELD%CMNHNAME)) :: YVARNAME +INTEGER(KIND=CDFINT) :: IVARID +INTEGER(KIND=CDFINT), DIMENSION(:), ALLOCATABLE :: IVDIMS +INTEGER :: IRESP +LOGICAL :: GEXISTED !True if variable was already defined ! ! CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_write_nc4_X6',TRIM(TPFILE%CNAME)//': writing '//TRIM(TPFIELD%CMNHNAME)) @@ -728,17 +701,13 @@ IF (STATUS /= NF90_NOERR) THEN END IF ! Get the netcdf dimensions - CALL IO_Vdims_fill_nc4(TPFILE, TPFIELD, INT(SHAPE(PFIELD),KIND=IDCDF_KIND), IVDIMS) + CALL IO_Vdims_fill_nc4(TPFILE, TPFIELD, INT(SHAPE(PFIELD),KIND=CDFINT), IVDIMS) ! Define the variable IF (TPFILE%LNCREDUCE_FLOAT_PRECISION) THEN STATUS = NF90_DEF_VAR(INCID, YVARNAME, NF90_FLOAT, IVDIMS, IVARID) ELSE -#if (MNH_REAL == 8) - STATUS = NF90_DEF_VAR(INCID, YVARNAME, NF90_DOUBLE, IVDIMS, IVARID) -#else - STATUS = NF90_DEF_VAR(INCID, YVARNAME, NF90_FLOAT, IVDIMS, IVARID) -#endif + STATUS = NF90_DEF_VAR(INCID, YVARNAME, MNHREAL_NF90, IVDIMS, IVARID) END IF IF (status /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_write_nc4_X6','NF90_DEF_VAR',trim(YVARNAME)) @@ -753,7 +722,7 @@ ELSE END IF ! Write metadata -CALL IO_Field_attr_write_nc4(TPFILE,TPFIELD,IVARID,GEXISTED,KSHAPE=INT(SHAPE(PFIELD),KIND=IDCDF_KIND)) +CALL IO_Field_attr_write_nc4(TPFILE,TPFIELD,IVARID,GEXISTED,KSHAPE=INT(SHAPE(PFIELD),KIND=CDFINT)) ! Write the data STATUS = NF90_PUT_VAR(INCID, IVARID, PFIELD) IF (status /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_write_nc4_X6','NF90_PUT_VAR',trim(YVARNAME),IRESP) @@ -778,14 +747,14 @@ TYPE(TFIELDDATA), INTENT(IN) :: TPFIELD INTEGER, INTENT(IN) :: KFIELD INTEGER, INTENT(OUT):: KRESP ! -INTEGER(KIND=IDCDF_KIND) :: STATUS -INTEGER(KIND=IDCDF_KIND) :: INCID -CHARACTER(LEN=LEN(TPFIELD%CMNHNAME)) :: YVARNAME -INTEGER(KIND=IDCDF_KIND) :: IVARID -INTEGER(KIND=IDCDF_KIND), DIMENSION(:), ALLOCATABLE :: IVDIMS -INTEGER :: IRESP -LOGICAL :: GEXISTED !True if variable was already defined -TYPE(IOCDF), POINTER :: TZIOCDF +INTEGER(KIND=CDFINT) :: STATUS +INTEGER(KIND=CDFINT) :: INCID +CHARACTER(LEN=LEN(TPFIELD%CMNHNAME)) :: YVARNAME +INTEGER(KIND=CDFINT) :: IVARID +INTEGER(KIND=CDFINT), DIMENSION(:), ALLOCATABLE :: IVDIMS +INTEGER :: IRESP +LOGICAL :: GEXISTED !True if variable was already defined +TYPE(IOCDF), POINTER :: TZIOCDF ! CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_write_nc4_N0',TRIM(TPFILE%CNAME)//': writing '//TRIM(TPFIELD%CMNHNAME)) ! @@ -802,22 +771,14 @@ STATUS = NF90_INQ_VARID(INCID, YVARNAME, IVARID) IF (STATUS /= NF90_NOERR) THEN IF (TPFIELD%LTIMEDEP) THEN ! Get the netcdf dimensions - CALL IO_Vdims_fill_nc4(TPFILE, TPFIELD, INT(SHAPE(KFIELD),KIND=IDCDF_KIND), IVDIMS) + CALL IO_Vdims_fill_nc4(TPFILE, TPFIELD, INT(SHAPE(KFIELD),KIND=CDFINT), IVDIMS) ! Define the variable -#if ( MNH_INT == 4 ) - STATUS = NF90_DEF_VAR(INCID, YVARNAME, NF90_INT, IVDIMS, IVARID) -#else - STATUS = NF90_DEF_VAR(INCID, YVARNAME, NF90_INT64, IVDIMS, IVARID) -#endif + STATUS = NF90_DEF_VAR(INCID, YVARNAME, MNHINT_NF90, IVDIMS, IVARID) IF (status /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_write_nc4_N0','NF90_DEF_VAR',trim(YVARNAME)) DEALLOCATE(IVDIMS) ELSE ! Define the scalar variable -#if ( MNH_INT == 4 ) - STATUS = NF90_DEF_VAR(INCID, YVARNAME, NF90_INT, IVARID) -#else - STATUS = NF90_DEF_VAR(INCID, YVARNAME, NF90_INT64, IVARID) -#endif + STATUS = NF90_DEF_VAR(INCID, YVARNAME, MNHINT_NF90, IVARID) IF (status /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_write_nc4_N0','NF90_DEF_VAR',trim(YVARNAME)) END IF ELSE @@ -847,7 +808,7 @@ END IF #endif IF (YVARNAME == 'KMAX' .AND. .NOT. ASSOCIATED(TPFILE%TNCDIMS%DIM_LEVEL)) THEN TZIOCDF => TPFILE%TNCDIMS - TZIOCDF%DIM_LEVEL=>IO_Dimcdf_get_nc4(TPFILE,INT(KFIELD+2*JPVEXT,KIND=IDCDF_KIND),'Z') + TZIOCDF%DIM_LEVEL=>IO_Dimcdf_get_nc4(TPFILE,INT(KFIELD+2*JPVEXT,KIND=CDFINT),'Z') END IF KRESP = IRESP @@ -868,13 +829,13 @@ TYPE(TFIELDDATA), INTENT(IN) :: TPFIELD INTEGER, DIMENSION(:), INTENT(IN) :: KFIELD INTEGER, INTENT(OUT):: KRESP ! -INTEGER(KIND=IDCDF_KIND) :: STATUS -INTEGER(KIND=IDCDF_KIND) :: INCID -CHARACTER(LEN=LEN(TPFIELD%CMNHNAME)) :: YVARNAME -INTEGER(KIND=IDCDF_KIND) :: IVARID -INTEGER(KIND=IDCDF_KIND), DIMENSION(:), ALLOCATABLE :: IVDIMS -INTEGER :: IRESP -LOGICAL :: GEXISTED !True if variable was already defined +INTEGER(KIND=CDFINT) :: STATUS +INTEGER(KIND=CDFINT) :: INCID +CHARACTER(LEN=LEN(TPFIELD%CMNHNAME)) :: YVARNAME +INTEGER(KIND=CDFINT) :: IVARID +INTEGER(KIND=CDFINT), DIMENSION(:), ALLOCATABLE :: IVDIMS +INTEGER :: IRESP +LOGICAL :: GEXISTED !True if variable was already defined ! CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_write_nc4_N1',TRIM(TPFILE%CNAME)//': writing '//TRIM(TPFIELD%CMNHNAME)) ! @@ -896,15 +857,11 @@ IF (STATUS /= NF90_NOERR) THEN END IF ! Get the netcdf dimensions - CALL IO_Vdims_fill_nc4(TPFILE, TPFIELD, INT(SHAPE(KFIELD),KIND=IDCDF_KIND), IVDIMS) + CALL IO_Vdims_fill_nc4(TPFILE, TPFIELD, INT(SHAPE(KFIELD),KIND=CDFINT), IVDIMS) ! Define the variable -#if ( MNH_INT == 4 ) - STATUS = NF90_DEF_VAR(INCID, YVARNAME, NF90_INT, IVDIMS, IVARID) -#else - STATUS = NF90_DEF_VAR(INCID, YVARNAME, NF90_INT64, IVDIMS, IVARID) -#endif - IF (status /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_write_nc4_N1','NF90_DEF_VAR',trim(YVARNAME)) + STATUS = NF90_DEF_VAR(INCID, YVARNAME, MNHINT_NF90, IVDIMS, IVARID) + IF (status /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_WRITE_FIELD_NC4_N1','NF90_DEF_VAR',trim(YVARNAME)) ELSE GEXISTED = .TRUE. CALL PRINT_MSG(NVERB_WARNING,'IO','IO_Field_write_nc4_N1',TRIM(TPFILE%CNAME)//': '//TRIM(YVARNAME)//' already defined') @@ -929,13 +886,13 @@ TYPE(TFIELDDATA), INTENT(IN) :: TPFIELD INTEGER,DIMENSION(:,:),INTENT(IN) :: KFIELD ! array containing the data field INTEGER, INTENT(OUT):: KRESP ! -INTEGER(KIND=IDCDF_KIND) :: STATUS -INTEGER(KIND=IDCDF_KIND) :: INCID -CHARACTER(LEN=LEN(TPFIELD%CMNHNAME)) :: YVARNAME -INTEGER(KIND=IDCDF_KIND) :: IVARID -INTEGER(KIND=IDCDF_KIND), DIMENSION(:), ALLOCATABLE :: IVDIMS -INTEGER :: IRESP -LOGICAL :: GEXISTED !True if variable was already defined +INTEGER(KIND=CDFINT) :: STATUS +INTEGER(KIND=CDFINT) :: INCID +CHARACTER(LEN=LEN(TPFIELD%CMNHNAME)) :: YVARNAME +INTEGER(KIND=CDFINT) :: IVARID +INTEGER(KIND=CDFINT), DIMENSION(:), ALLOCATABLE :: IVDIMS +INTEGER :: IRESP +LOGICAL :: GEXISTED !True if variable was already defined ! IRESP = 0 ! @@ -958,14 +915,10 @@ IF (STATUS /= NF90_NOERR) THEN END IF ! Get the netcdf dimensions - CALL IO_Vdims_fill_nc4(TPFILE, TPFIELD, INT(SHAPE(KFIELD),KIND=IDCDF_KIND), IVDIMS) + CALL IO_Vdims_fill_nc4(TPFILE, TPFIELD, INT(SHAPE(KFIELD),KIND=CDFINT), IVDIMS) ! Define the variable -#if ( MNH_INT == 4 ) - STATUS = NF90_DEF_VAR(INCID, YVARNAME, NF90_INT, IVDIMS, IVARID) -#else - STATUS = NF90_DEF_VAR(INCID, YVARNAME, NF90_INT64, IVDIMS, IVARID) -#endif + STATUS = NF90_DEF_VAR(INCID, YVARNAME, MNHINT_NF90, IVDIMS, IVARID) IF (status /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_write_nc4_N2','NF90_DEF_VAR',trim(YVARNAME)) ! Add compression if asked for IF (TPFILE%LNCCOMPRESS) THEN @@ -978,7 +931,7 @@ ELSE END IF ! Write metadata -CALL IO_Field_attr_write_nc4(TPFILE,TPFIELD,IVARID,GEXISTED,KSHAPE=INT(SHAPE(KFIELD),KIND=IDCDF_KIND)) +CALL IO_Field_attr_write_nc4(TPFILE,TPFIELD,IVARID,GEXISTED,KSHAPE=INT(SHAPE(KFIELD),KIND=CDFINT)) ! Write the data STATUS = NF90_PUT_VAR(INCID, IVARID, KFIELD) IF (status /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_write_nc4_N2','NF90_PUT_VAR',trim(YVARNAME),IRESP) @@ -995,13 +948,13 @@ TYPE(TFIELDDATA), INTENT(IN) :: TPFIELD INTEGER,DIMENSION(:,:,:),INTENT(IN) :: KFIELD ! array containing the data field INTEGER, INTENT(OUT):: KRESP ! -INTEGER(KIND=IDCDF_KIND) :: STATUS -INTEGER(KIND=IDCDF_KIND) :: INCID -CHARACTER(LEN=LEN(TPFIELD%CMNHNAME)) :: YVARNAME -INTEGER(KIND=IDCDF_KIND) :: IVARID -INTEGER(KIND=IDCDF_KIND), DIMENSION(:), ALLOCATABLE :: IVDIMS -INTEGER :: IRESP -LOGICAL :: GEXISTED !True if variable was already defined +INTEGER(KIND=CDFINT) :: STATUS +INTEGER(KIND=CDFINT) :: INCID +CHARACTER(LEN=LEN(TPFIELD%CMNHNAME)) :: YVARNAME +INTEGER(KIND=CDFINT) :: IVARID +INTEGER(KIND=CDFINT), DIMENSION(:), ALLOCATABLE :: IVDIMS +INTEGER :: IRESP +LOGICAL :: GEXISTED !True if variable was already defined ! IRESP = 0 ! @@ -1024,14 +977,10 @@ IF (STATUS /= NF90_NOERR) THEN END IF ! Get the netcdf dimensions - CALL IO_Vdims_fill_nc4(TPFILE, TPFIELD, INT(SHAPE(KFIELD),KIND=IDCDF_KIND), IVDIMS) + CALL IO_Vdims_fill_nc4(TPFILE, TPFIELD, INT(SHAPE(KFIELD),KIND=CDFINT), IVDIMS) ! Define the variable -#if ( MNH_INT == 4 ) - STATUS = NF90_DEF_VAR(INCID, YVARNAME, NF90_INT, IVDIMS, IVARID) -#else - STATUS = NF90_DEF_VAR(INCID, YVARNAME, NF90_INT64, IVDIMS, IVARID) -#endif + STATUS = NF90_DEF_VAR(INCID, YVARNAME, MNHINT_NF90, IVDIMS, IVARID) IF (status /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_write_nc4_N3','NF90_DEF_VAR',trim(YVARNAME)) ! Add compression if asked for IF (TPFILE%LNCCOMPRESS) THEN @@ -1044,7 +993,7 @@ ELSE END IF ! Write metadata -CALL IO_Field_attr_write_nc4(TPFILE,TPFIELD,IVARID,GEXISTED,KSHAPE=INT(SHAPE(KFIELD),KIND=IDCDF_KIND)) +CALL IO_Field_attr_write_nc4(TPFILE,TPFIELD,IVARID,GEXISTED,KSHAPE=INT(SHAPE(KFIELD),KIND=CDFINT)) ! Write the data STATUS = NF90_PUT_VAR(INCID, IVARID, KFIELD) IF (status /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_write_nc4_N3','NF90_PUT_VAR',trim(YVARNAME),IRESP) @@ -1063,14 +1012,14 @@ TYPE(TFIELDDATA), INTENT(IN) :: TPFIELD LOGICAL, INTENT(IN) :: OFIELD INTEGER, INTENT(OUT):: KRESP ! -INTEGER :: IFIELD -INTEGER(KIND=IDCDF_KIND) :: STATUS -INTEGER(KIND=IDCDF_KIND) :: INCID -CHARACTER(LEN=LEN(TPFIELD%CMNHNAME)) :: YVARNAME -INTEGER(KIND=IDCDF_KIND) :: IVARID -INTEGER(KIND=IDCDF_KIND), DIMENSION(:), ALLOCATABLE :: IVDIMS -INTEGER :: IRESP -LOGICAL :: GEXISTED !True if variable was already defined +INTEGER :: IFIELD +INTEGER(KIND=CDFINT) :: STATUS +INTEGER(KIND=CDFINT) :: INCID +CHARACTER(LEN=LEN(TPFIELD%CMNHNAME)) :: YVARNAME +INTEGER(KIND=CDFINT) :: IVARID +INTEGER(KIND=CDFINT), DIMENSION(:), ALLOCATABLE :: IVDIMS +INTEGER :: IRESP +LOGICAL :: GEXISTED !True if variable was already defined ! CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_write_nc4_L0',TRIM(TPFILE%CNAME)//': writing '//TRIM(TPFIELD%CMNHNAME)) ! @@ -1087,7 +1036,7 @@ STATUS = NF90_INQ_VARID(INCID, YVARNAME, IVARID) IF (STATUS /= NF90_NOERR) THEN IF (TPFIELD%LTIMEDEP) THEN ! Get the netcdf dimensions - CALL IO_Vdims_fill_nc4(TPFILE, TPFIELD, INT(SHAPE(OFIELD),KIND=IDCDF_KIND), IVDIMS) + CALL IO_Vdims_fill_nc4(TPFILE, TPFIELD, INT(SHAPE(OFIELD),KIND=CDFINT), IVDIMS) ! Define the variable ! Use of NF90_INT1 datatype (=NF90_BYTE) that is enough to store a boolean STATUS = NF90_DEF_VAR(INCID, YVARNAME, NF90_INT1, IVDIMS, IVARID) @@ -1129,14 +1078,14 @@ TYPE(TFIELDDATA), INTENT(IN) :: TPFIELD LOGICAL, DIMENSION(:), INTENT(IN) :: OFIELD INTEGER, INTENT(OUT):: KRESP ! -INTEGER, DIMENSION(SIZE(OFIELD)) :: IFIELD -INTEGER(KIND=IDCDF_KIND) :: STATUS -INTEGER(KIND=IDCDF_KIND) :: INCID -CHARACTER(LEN=LEN(TPFIELD%CMNHNAME)) :: YVARNAME -INTEGER(KIND=IDCDF_KIND) :: IVARID -INTEGER(KIND=IDCDF_KIND), DIMENSION(:), ALLOCATABLE :: IVDIMS -INTEGER :: IRESP -LOGICAL :: GEXISTED !True if variable was already defined +INTEGER, DIMENSION(SIZE(OFIELD)) :: IFIELD +INTEGER(KIND=CDFINT) :: STATUS +INTEGER(KIND=CDFINT) :: INCID +CHARACTER(LEN=LEN(TPFIELD%CMNHNAME)) :: YVARNAME +INTEGER(KIND=CDFINT) :: IVARID +INTEGER(KIND=CDFINT), DIMENSION(:), ALLOCATABLE :: IVDIMS +INTEGER :: IRESP +LOGICAL :: GEXISTED !True if variable was already defined ! CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_write_nc4_L1',TRIM(TPFILE%CNAME)//': writing '//TRIM(TPFIELD%CMNHNAME)) ! @@ -1158,7 +1107,7 @@ IF (STATUS /= NF90_NOERR) THEN END IF ! Get the netcdf dimensions - CALL IO_Vdims_fill_nc4(TPFILE, TPFIELD, INT(SHAPE(OFIELD),KIND=IDCDF_KIND), IVDIMS) + CALL IO_Vdims_fill_nc4(TPFILE, TPFIELD, INT(SHAPE(OFIELD),KIND=CDFINT), IVDIMS) ! Define the variable ! Use of NF90_INT1 datatype (=NF90_BYTE) that is enough to store a boolean @@ -1195,14 +1144,14 @@ TYPE(TFIELDDATA), INTENT(IN) :: TPFIELD CHARACTER(LEN=*), INTENT(IN) :: HFIELD INTEGER, INTENT(OUT):: KRESP ! -INTEGER(KIND=IDCDF_KIND) :: STATUS -INTEGER(KIND=IDCDF_KIND) :: INCID -CHARACTER(LEN=LEN(TPFIELD%CMNHNAME)) :: YVARNAME -INTEGER(KIND=IDCDF_KIND) :: IVARID -INTEGER(KIND=IDCDF_KIND), DIMENSION(1) :: IVDIMS -INTEGER :: IRESP, ILEN -CHARACTER(LEN=:),ALLOCATABLE :: YFIELD -LOGICAL :: GEXISTED !True if variable was already defined +INTEGER(KIND=CDFINT) :: STATUS +INTEGER(KIND=CDFINT) :: INCID +CHARACTER(LEN=LEN(TPFIELD%CMNHNAME)) :: YVARNAME +INTEGER(KIND=CDFINT) :: IVARID +INTEGER(KIND=CDFINT), DIMENSION(1) :: IVDIMS +INTEGER :: IRESP, ILEN +CHARACTER(LEN=:),ALLOCATABLE :: YFIELD +LOGICAL :: GEXISTED !True if variable was already defined ! CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_write_nc4_C0',TRIM(TPFILE%CNAME)//': writing '//TRIM(TPFIELD%CMNHNAME)) ! @@ -1228,7 +1177,7 @@ IF (TPFIELD%LTIMEDEP) & STATUS = NF90_INQ_VARID(INCID, YVARNAME, IVARID) IF (STATUS /= NF90_NOERR) THEN ! Get the netcdf string dimensions id - IVDIMS(1) = IO_Strdimid_get_nc4(TPFILE,INT(ILEN,KIND=IDCDF_KIND)) + IVDIMS(1) = IO_Strdimid_get_nc4(TPFILE,INT(ILEN,KIND=CDFINT)) ! Define the variable STATUS = NF90_DEF_VAR(INCID, YVARNAME, NF90_CHAR, IVDIMS, IVARID) IF (status /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_write_nc4_C0','NF90_DEF_VAR',trim(YVARNAME)) @@ -1259,17 +1208,17 @@ TYPE(TFIELDDATA), INTENT(IN) :: TPFIELD CHARACTER(LEN=*),DIMENSION(:),INTENT(IN) :: HFIELD INTEGER, INTENT(OUT) :: KRESP ! -INTEGER(KIND=IDCDF_KIND),PARAMETER :: IONE = 1 +INTEGER(KIND=CDFINT),PARAMETER :: IONE = 1 ! -INTEGER(KIND=IDCDF_KIND) :: STATUS -INTEGER(KIND=IDCDF_KIND) :: INCID -CHARACTER(LEN=LEN(TPFIELD%CMNHNAME)) :: YVARNAME -INTEGER(KIND=IDCDF_KIND) :: IVARID -INTEGER(KIND=IDCDF_KIND), DIMENSION(2) :: IVDIMS -INTEGER(KIND=IDCDF_KIND), DIMENSION(:), ALLOCATABLE :: IVDIMSTMP -INTEGER(KIND=IDCDF_KIND) :: ILEN, ISIZE -INTEGER :: IRESP -LOGICAL :: GEXISTED !True if variable was already defined +INTEGER(KIND=CDFINT) :: STATUS +INTEGER(KIND=CDFINT) :: INCID +CHARACTER(LEN=LEN(TPFIELD%CMNHNAME)) :: YVARNAME +INTEGER(KIND=CDFINT) :: IVARID +INTEGER(KIND=CDFINT), DIMENSION(2) :: IVDIMS +INTEGER(KIND=CDFINT), DIMENSION(:), ALLOCATABLE :: IVDIMSTMP +INTEGER(KIND=CDFINT) :: ILEN, ISIZE +INTEGER :: IRESP +LOGICAL :: GEXISTED !True if variable was already defined ! CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_write_nc4_C1',TRIM(TPFILE%CNAME)//': writing '//TRIM(TPFIELD%CMNHNAME)) ! @@ -1331,17 +1280,17 @@ TYPE(TFIELDDATA), INTENT(IN) :: TPFIELD TYPE (DATE_TIME), INTENT(IN) :: TPDATA INTEGER, INTENT(OUT):: KRESP ! -INTEGER(KIND=IDCDF_KIND) :: STATUS -INTEGER(KIND=IDCDF_KIND) :: INCID -CHARACTER(LEN=LEN(TPFIELD%CMNHNAME)) :: YVARNAME -INTEGER(KIND=IDCDF_KIND) :: IVARID -INTEGER(KIND=IDCDF_KIND), DIMENSION(1) :: IVDIMS -INTEGER :: IRESP -TYPE(TFIELDDATA) :: TZFIELD -CHARACTER(LEN=40) :: YUNITS -LOGICAL :: GEXISTED !True if variable was already defined -REAL :: ZDELTATIME !Distance in seconds since reference date and time -TYPE(DATE_TIME) :: TZREF +INTEGER(KIND=CDFINT) :: STATUS +INTEGER(KIND=CDFINT) :: INCID +CHARACTER(LEN=LEN(TPFIELD%CMNHNAME)) :: YVARNAME +INTEGER(KIND=CDFINT) :: IVARID +INTEGER(KIND=CDFINT), DIMENSION(1) :: IVDIMS +INTEGER :: IRESP +TYPE(TFIELDDATA) :: TZFIELD +CHARACTER(LEN=40) :: YUNITS +LOGICAL :: GEXISTED !True if variable was already defined +REAL :: ZDELTATIME !Distance in seconds since reference date and time +TYPE(DATE_TIME) :: TZREF ! CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_write_nc4_T0',TRIM(TPFILE%CNAME)//': writing '//TRIM(TPFIELD%CMNHNAME)) ! @@ -1383,12 +1332,8 @@ IF (TPFIELD%LTIMEDEP) & STATUS = NF90_INQ_VARID(INCID, YVARNAME, IVARID) IF (STATUS /= NF90_NOERR) THEN ! Define the scalar variable -#if (MNH_REAL == 8) - STATUS = NF90_DEF_VAR(INCID, YVARNAME, NF90_DOUBLE, IVARID) -#else - STATUS = NF90_DEF_VAR(INCID, YVARNAME, NF90_FLOAT, IVARID) -#endif - IF (status /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_write_nc4_T0','NF90_DEF_VAR',trim(YVARNAME)) + STATUS = NF90_DEF_VAR(INCID, YVARNAME, MNHREAL_NF90, IVARID) + IF (status /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_write_nc4_T0','NF90_DEF_VAR',trim(YVARNAME)) ELSE GEXISTED = .TRUE. CALL PRINT_MSG(NVERB_WARNING,'IO','IO_Field_write_nc4_T0',TRIM(TPFILE%CNAME)//': '//TRIM(YVARNAME)//' already defined') @@ -1424,7 +1369,7 @@ TZFIELD%CCOMMENT = 'YYYYMMDD' STATUS = NF90_INQ_VARID(INCID, TZFIELD%CMNHNAME, IVARID) IF (STATUS /= NF90_NOERR) THEN ! Get the netcdf dimensions - CALL IO_Vdims_fill_nc4(TPFILE, TPFIELD, INT(SHAPE(ITDATE),KIND=IDCDF_KIND), IVDIMS) + CALL IO_Vdims_fill_nc4(TPFILE, TPFIELD, INT(SHAPE(ITDATE),KIND=CDFINT), IVDIMS) ! Define the variable STATUS = NF90_DEF_VAR(INCID, TZFIELD%CMNHNAME, NF90_INT, IVDIMS, IVARID) @@ -1454,11 +1399,7 @@ TZFIELD%CCOMMENT = 'SECONDS' STATUS = NF90_INQ_VARID(INCID, TZFIELD%CMNHNAME, IVARID) IF (STATUS /= NF90_NOERR) THEN ! Define the scalar variable -#if (MNH_REAL == 8) - STATUS = NF90_DEF_VAR(INCID, TZFIELD%CMNHNAME, NF90_DOUBLE, IVARID) -#else - STATUS = NF90_DEF_VAR(INCID, TZFIELD%CMNHNAME, NF90_FLOAT, IVARID) -#endif + STATUS = NF90_DEF_VAR(INCID, TZFIELD%CMNHNAME, MNHREAL_NF90, IVARID) IF (status /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_write_nc4_T0','NF90_DEF_VAR',trim(TZFIELD%CMNHNAME)) CALL IO_Field_attr_write_nc4(TPFILE,TZFIELD,IVARID,GEXISTED) ELSE @@ -1494,7 +1435,7 @@ CHARACTER(LEN=:),ALLOCATABLE :: YPROGRAM INTEGER :: IIU, IJU, IKU INTEGER :: ID, IID, IRESP INTEGER :: IMI -INTEGER(KIND=IDCDF_KIND) :: INCID +INTEGER(KIND=CDFINT) :: INCID LOGICAL :: GCHANGEMODEL LOGICAL,POINTER :: GSLEVE REAL,DIMENSION(:),POINTER :: ZXHAT, ZYHAT, ZZHAT @@ -1656,9 +1597,9 @@ SUBROUTINE WRITE_HOR_COORD(TDIM,HLONGNAME,HSTDNAME,HAXIS,PSHIFT,KBOUNDLOW,KBOUND INTEGER :: IRESP INTEGER :: ISIZE INTEGER :: JI - INTEGER(KIND=IDCDF_KIND) :: IVARID - INTEGER(KIND=IDCDF_KIND) :: IVDIM - INTEGER(KIND=IDCDF_KIND) :: STATUS + INTEGER(KIND=CDFINT) :: IVARID + INTEGER(KIND=CDFINT) :: IVDIM + INTEGER(KIND=CDFINT) :: STATUS LOGICAL :: GALLOC REAL,DIMENSION(:),POINTER :: ZTAB @@ -1702,11 +1643,7 @@ SUBROUTINE WRITE_HOR_COORD(TDIM,HLONGNAME,HSTDNAME,HAXIS,PSHIFT,KBOUNDLOW,KBOUND STATUS = NF90_INQ_VARID(INCID, YVARNAME, IVARID) IF (STATUS /= NF90_NOERR) THEN ! Define the coordinate variable -#if (MNH_REAL == 8) - STATUS = NF90_DEF_VAR(INCID, YVARNAME, NF90_DOUBLE, IVDIM, IVARID) -#else - STATUS = NF90_DEF_VAR(INCID, YVARNAME, NF90_FLOAT, IVDIM, IVARID) -#endif + STATUS = NF90_DEF_VAR(INCID, YVARNAME, MNHREAL_NF90, IVDIM, IVARID) IF (status /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'WRITE_HOR_COORD','NF90_DEF_VAR',trim(YVARNAME)) ELSE CALL PRINT_MSG(NVERB_ERROR,'IO','WRITE_HOR_COORD',TRIM(YVARNAME)//' already defined') @@ -1802,9 +1739,9 @@ SUBROUTINE WRITE_VER_COORD(TDIM,HLONGNAME,HSTDNAME,HCOMPNAME,PSHIFT,KBOUNDLOW,KB INTEGER :: IRESP INTEGER :: ISIZE INTEGER :: JI - INTEGER(KIND=IDCDF_KIND) :: IVARID - INTEGER(KIND=IDCDF_KIND) :: IVDIM - INTEGER(KIND=IDCDF_KIND) :: STATUS + INTEGER(KIND=CDFINT) :: IVARID + INTEGER(KIND=CDFINT) :: IVDIM + INTEGER(KIND=CDFINT) :: STATUS ISIZE = TDIM%LEN YVARNAME = TRIM(TDIM%NAME) @@ -1813,11 +1750,7 @@ SUBROUTINE WRITE_VER_COORD(TDIM,HLONGNAME,HSTDNAME,HCOMPNAME,PSHIFT,KBOUNDLOW,KB STATUS = NF90_INQ_VARID(INCID, YVARNAME, IVARID) IF (STATUS /= NF90_NOERR) THEN ! Define the coordinate variable -#if (MNH_REAL == 8) - STATUS = NF90_DEF_VAR(INCID, YVARNAME, NF90_DOUBLE, IVDIM, IVARID) -#else - STATUS = NF90_DEF_VAR(INCID, YVARNAME, NF90_FLOAT, IVDIM, IVARID) -#endif + STATUS = NF90_DEF_VAR(INCID, YVARNAME, MNHREAL_NF90, IVDIM, IVARID) IF (status /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'WRITE_VER_COORD','NF90_DEF_VAR',trim(YVARNAME)) ELSE CALL PRINT_MSG(NVERB_ERROR,'IO','WRITE_VER_COORD',TRIM(YVARNAME)//' already defined') @@ -1884,9 +1817,9 @@ SUBROUTINE WRITE_TIME_COORD(TDIM) REAL :: ZDELTATIME CHARACTER(LEN=40) :: YUNITS CHARACTER(LEN=:),ALLOCATABLE :: YVARNAME - INTEGER(KIND=IDCDF_KIND) :: IVARID - INTEGER(KIND=IDCDF_KIND) :: IVDIM - INTEGER(KIND=IDCDF_KIND) :: STATUS + INTEGER(KIND=CDFINT) :: IVARID + INTEGER(KIND=CDFINT) :: IVDIM + INTEGER(KIND=CDFINT) :: STATUS TYPE(DATE_TIME) :: TZREF @@ -1897,11 +1830,7 @@ SUBROUTINE WRITE_TIME_COORD(TDIM) STATUS = NF90_INQ_VARID(INCID, YVARNAME, IVARID) IF (STATUS /= NF90_NOERR) THEN ! Define the coordinate variable -#if (MNH_REAL == 8) - STATUS = NF90_DEF_VAR(INCID, YVARNAME, NF90_DOUBLE, IVDIM, IVARID) -#else - STATUS = NF90_DEF_VAR(INCID, YVARNAME, NF90_FLOAT, IVDIM, IVARID) -#endif + STATUS = NF90_DEF_VAR(INCID, YVARNAME, MNHREAL_NF90, IVDIM, IVARID) IF (status /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'WRITE_TIME_COORD','NF90_DEF_VAR',trim(YVARNAME)) ELSE CALL PRINT_MSG(NVERB_ERROR,'IO','WRITE_TIME_COORD',TRIM(YVARNAME)//' already defined') @@ -1941,7 +1870,7 @@ SUBROUTINE IO_Header_write_nc4(TPFILE) ! TYPE(TFILEDATA), INTENT(IN) :: TPFILE ! File structure ! -INTEGER(KIND=IDCDF_KIND) :: ISTATUS +INTEGER(KIND=CDFINT) :: ISTATUS ! IF (TRIM(TPFILE%CFORMAT)/='NETCDF4' .AND. TRIM(TPFILE%CFORMAT)/='LFICDF4') RETURN ! @@ -1993,7 +1922,7 @@ INTEGER,PARAMETER :: YEAR=1, MONTH=2, DAY=3, HH=5, MM=6, SS=7 CHARACTER(len=5) :: YZONE CHARACTER(LEN=:),ALLOCATABLE :: YCMD, YHISTORY, YHISTORY_NEW, YHISTORY_PREV INTEGER :: ILEN_CMD, ILEN_PREV -INTEGER(KIND=IDCDF_KIND) :: ISTATUS +INTEGER(KIND=CDFINT) :: ISTATUS INTEGER,DIMENSION(8) :: IDATETIME ! IF (TRIM(TPFILE%CFORMAT)/='NETCDF4' .AND. TRIM(TPFILE%CFORMAT)/='LFICDF4') RETURN diff --git a/src/LIB/SURCOUCHE/src/mode_mppdb.f90 b/src/LIB/SURCOUCHE/src/mode_mppdb.f90 index 78ef176e9b855366bfa5dcc56f48dfc174268254..e283130d55260372751aab4f92cbba07611cb468 100644 --- a/src/LIB/SURCOUCHE/src/mode_mppdb.f90 +++ b/src/LIB/SURCOUCHE/src/mode_mppdb.f90 @@ -273,7 +273,7 @@ CONTAINS SUBROUTINE MPPDB_CHECK3D(PTAB,MESSAGE,PRECISION) USE MODD_PARAMETERS_ll, ONLY : JPHEXT - USE MODD_VAR_ll , ONLY : MPI_PRECISION + use modd_precision, only: MNHREAL_MPI USE MODD_MPIF , ONLY : MPI_INTEGER, MPI_STATUS_IGNORE, MPI_SUM USE MODE_GATHER_ll @@ -353,7 +353,7 @@ CONTAINS ALLOCATE(TAB_SON_ll(IIU_SON_ll,IJU_SON_ll,IKU_SON_ll)) ! - CALL MPI_RECV(TAB_SON_ll,SIZE(TAB_SON_ll),MPI_PRECISION,I_FIRST_SON, & + CALL MPI_RECV(TAB_SON_ll,SIZE(TAB_SON_ll),MNHREAL_MPI,I_FIRST_SON, & ITAG2, MPPDB_INTRA_COMM,MPI_STATUS_IGNORE, IINFO_ll) ! @@ -415,7 +415,7 @@ CONTAINS CALL MPI_BSEND(IHEXT_SON_ll,1,MPI_INTEGER,I_FIRST_FATHER, & ITAG1, MPPDB_INTRA_COMM, IINFO_ll) - CALL MPI_BSEND(TAB_ll,SIZE(TAB_ll),MPI_PRECISION,I_FIRST_FATHER, & + CALL MPI_BSEND(TAB_ll,SIZE(TAB_ll),MNHREAL_MPI,I_FIRST_FATHER, & ITAG2, MPPDB_INTRA_COMM, IINFO_ll) END IF @@ -469,8 +469,8 @@ CONTAINS USE MODD_PARAMETERS_ll, ONLY : JPHEXT USE MODE_GATHER_ll - USE MODD_VAR_ll , ONLY : MPI_PRECISION USE MODD_MPIF , ONLY : MPI_INTEGER, MPI_STATUS_IGNORE, MPI_SUM + use modd_precision, only: MNHREAL_MPI USE MODD_VAR_ll , ONLY : NMNH_COMM_WORLD @@ -543,7 +543,7 @@ CONTAINS ALLOCATE(TAB_SON_ll(IIU_SON_ll,IJU_SON_ll)) ! - CALL MPI_RECV(TAB_SON_ll,SIZE(TAB_SON_ll),MPI_PRECISION,I_FIRST_SON, & + CALL MPI_RECV(TAB_SON_ll,SIZE(TAB_SON_ll),MNHREAL_MPI,I_FIRST_SON, & ITAG, MPPDB_INTRA_COMM,MPI_STATUS_IGNORE, IINFO_ll) ! @@ -600,7 +600,7 @@ CONTAINS I_FIRST_FATHER = 0 CALL MPI_BSEND(JPHEXT,1,MPI_INTEGER,I_FIRST_FATHER, & ITAG, MPPDB_INTRA_COMM, IINFO_ll) - CALL MPI_BSEND(TAB_ll,SIZE(TAB_ll),MPI_PRECISION,I_FIRST_FATHER, & + CALL MPI_BSEND(TAB_ll,SIZE(TAB_ll),MNHREAL_MPI,I_FIRST_FATHER, & ITAG, MPPDB_INTRA_COMM, IINFO_ll) END IF END IF @@ -619,7 +619,8 @@ CONTAINS USE MODD_IO, ONLY: GSMONOPROC, ISP, ISNPROC, L2D, LPACK USE MODD_MPIF, ONLY: MPI_INTEGER, MPI_STATUS_IGNORE USE MODD_PARAMETERS_ll, ONLY: JPHEXT - USE MODD_VAR_ll, ONLY: MPI_PRECISION, NMNH_COMM_WORLD + USE MODD_VAR_ll, ONLY: NMNH_COMM_WORLD + use modd_precision, only: MNHREAL_MPI USE MODE_DISTRIB_LB USE MODE_TOOLS_ll, ONLY: GET_GLOBALDIMS_ll @@ -687,7 +688,7 @@ CONTAINS IF (IIB /= 0) THEN TX3DP=>Z3D(IIB:IIE,IJB:IJE,:) IF (ISP /= JI) THEN - CALL MPI_RECV(TX3DP,SIZE(TX3DP),MPI_PRECISION,JI-1 & + CALL MPI_RECV(TX3DP,SIZE(TX3DP),MNHREAL_MPI,JI-1 & ,99,NMNH_COMM_WORLD,MPI_STATUS_IGNORE,IINFO_ll) ELSE CALL GET_DISTRIB_LB(HLBTYPE,JI,'LOC','WRITE',KRIM,IIB,IIE,IJB,IJE) @@ -703,7 +704,7 @@ CONTAINS CALL GET_DISTRIB_LB(HLBTYPE,ISP,'LOC','WRITE',KRIM,IIB,IIE,IJB,IJE) IF (IIB /= 0) THEN TX3DP=>PLB(IIB:IIE,IJB:IJE,:) - CALL MPI_BSEND(TX3DP,SIZE(TX3DP),MPI_PRECISION,0,99,NMNH_COMM_WORLD,IINFO_ll) + CALL MPI_BSEND(TX3DP,SIZE(TX3DP),MNHREAL_MPI,0,99,NMNH_COMM_WORLD,IINFO_ll) END IF END IF @@ -734,7 +735,7 @@ CONTAINS ! ALLOCATE(TAB_SON_ll(IIU_SON_ll,IJU_SON_ll,IKU_SON_ll)) ! - CALL MPI_RECV(TAB_SON_ll,SIZE(TAB_SON_ll),MPI_PRECISION,I_FIRST_SON, & + CALL MPI_RECV(TAB_SON_ll,SIZE(TAB_SON_ll),MNHREAL_MPI,I_FIRST_SON, & ITAG, MPPDB_INTRA_COMM,MPI_STATUS_IGNORE, IINFO_ll) ! IDIFF_HEXT = MIN(JPHEXT,IHEXT_SON_ll) @@ -787,7 +788,7 @@ CONTAINS IHEXT_SON_ll = JPHEXT CALL MPI_BSEND(IHEXT_SON_ll,1,MPI_INTEGER,I_FIRST_FATHER, & ITAG, MPPDB_INTRA_COMM, IINFO_ll) - CALL MPI_BSEND(PLB,SIZE(PLB),MPI_PRECISION,I_FIRST_FATHER, & + CALL MPI_BSEND(PLB,SIZE(PLB),MNHREAL_MPI,I_FIRST_FATHER, & ITAG, MPPDB_INTRA_COMM, IINFO_ll) END IF END IF @@ -801,7 +802,6 @@ CONTAINS SUBROUTINE MPPDB_CHECK_SURFEX2D(PTAB,MESSAGE,PRECISION,KLUOUT,HTYPE,KIU,KJU) USE MODD_PARAMETERS, ONLY : JPHEXT - USE MODD_VAR_ll , ONLY : MPI_PRECISION USE MODI_GET_1D_MASK USE MODI_UNPACK_SAME_RANK USE MODI_GET_SURF_MASK_n @@ -899,7 +899,6 @@ CONTAINS SUBROUTINE MPPDB_CHECK_SURFEX3D(PTAB,MESSAGE,PRECISION,KLUOUT,HTYPE,KZSIZE) USE MODD_PARAMETERS, ONLY : JPHEXT - USE MODD_VAR_ll , ONLY : MPI_PRECISION USE MODI_GET_1D_MASK USE MODI_UNPACK_SAME_RANK USE MODI_GET_SURF_MASK_n diff --git a/src/LIB/SURCOUCHE/src/mode_scatter.f90 b/src/LIB/SURCOUCHE/src/mode_scatter.f90 index 8ee7b755f4c09e4ca64ac16573865ba1b7477090..12518db8bd6a1bd8222d637aee2de2264bf163a3 100644 --- a/src/LIB/SURCOUCHE/src/mode_scatter.f90 +++ b/src/LIB/SURCOUCHE/src/mode_scatter.f90 @@ -4,12 +4,6 @@ !MNH_LIC for details. version 1. !----------------------------------------------------------------- -#ifdef MNH_MPI_DOUBLE_PRECISION -#define MPI_FLOAT MPI_DOUBLE_PRECISION -#else -#define MPI_FLOAT MPI_REAL -#endif - MODULE MODE_SCATTER_ll ! @@ -18,6 +12,7 @@ MODULE MODE_SCATTER_ll ! USE MODD_MPIF +use modd_precision, only: MNHREAL_MPI IMPLICIT NONE @@ -87,9 +82,9 @@ IF (ISP == KROOT) THEN NB_REQ = NB_REQ + 1 ALLOCATE(T_TX1DP(NB_REQ)%X(SIZE(TX1DP))) T_TX1DP(NB_REQ)%X=TX1DP - CALL MPI_ISEND(T_TX1DP(NB_REQ)%X,SIZE(TX1DP),MPI_FLOAT,JI-1,199+KROOT,KCOMM& + CALL MPI_ISEND(T_TX1DP(NB_REQ)%X,SIZE(TX1DP),MNHREAL_MPI,JI-1,199+KROOT,KCOMM& & ,REQ_TAB(NB_REQ),IERR) - !CALL MPI_BSEND(T12DP,SIZE(T12DP),MPI_FLOAT,JI-1,199+KROOT,KCOMM& + !CALL MPI_BSEND(T12DP,SIZE(T12DP),MNHREAL_MPI,JI-1,199+KROOT,KCOMM& ! & ,IERR) ELSE PRECV(:) = TX1DP(:) @@ -102,7 +97,7 @@ IF (ISP == KROOT) THEN DEALLOCATE(T_TX1DP) DEALLOCATE(REQ_TAB) ELSE - CALL MPI_RECV(PRECV,SIZE(PRECV),MPI_FLOAT,KROOT-1,199+KROOT,KCOMM& + CALL MPI_RECV(PRECV,SIZE(PRECV),MNHREAL_MPI,KROOT-1,199+KROOT,KCOMM& & ,MPI_STATUS_IGNORE,IERR) END IF @@ -142,14 +137,14 @@ IF (ISP == KROOT) THEN END IF IF (ISP /= JI) THEN - CALL MPI_BSEND(TX2DP,SIZE(TX2DP),MPI_FLOAT,JI-1,199+KROOT,KCOMM& + CALL MPI_BSEND(TX2DP,SIZE(TX2DP),MNHREAL_MPI,JI-1,199+KROOT,KCOMM& & ,IERR) ELSE PRECV(:,:) = TX2DP(:,:) END IF END DO ELSE - CALL MPI_RECV(PRECV,SIZE(PRECV),MPI_FLOAT,KROOT-1,199+KROOT,KCOMM& + CALL MPI_RECV(PRECV,SIZE(PRECV),MNHREAL_MPI,KROOT-1,199+KROOT,KCOMM& & ,MPI_STATUS_IGNORE,IERR) END IF @@ -179,14 +174,14 @@ IF (ISP == KROOT) THEN END IF IF (ISP /= JI) THEN - CALL MPI_BSEND(TX2DP,SIZE(TX2DP),MPI_FLOAT,JI-1,199+KROOT,KCOMM& + CALL MPI_BSEND(TX2DP,SIZE(TX2DP),MNHREAL_MPI,JI-1,199+KROOT,KCOMM& & ,IERR) ELSE PRECV(:,:,:) = TX2DP(:,:,:) END IF END DO ELSE - CALL MPI_RECV(PRECV,SIZE(PRECV),MPI_FLOAT,KROOT-1,199+KROOT,KCOMM& + CALL MPI_RECV(PRECV,SIZE(PRECV),MNHREAL_MPI,KROOT-1,199+KROOT,KCOMM& & ,MPI_STATUS_IGNORE,IERR) END IF @@ -216,14 +211,14 @@ IF (ISP == KROOT) THEN END IF IF (ISP /= JI) THEN - CALL MPI_BSEND(TX2DP,SIZE(TX2DP),MPI_FLOAT,JI-1,199+KROOT,KCOMM& + CALL MPI_BSEND(TX2DP,SIZE(TX2DP),MNHREAL_MPI,JI-1,199+KROOT,KCOMM& & ,IERR) ELSE PRECV(:,:,:,:) = TX2DP(:,:,:,:) END IF END DO ELSE - CALL MPI_RECV(PRECV,SIZE(PRECV),MPI_FLOAT,KROOT-1,199+KROOT,KCOMM& + CALL MPI_RECV(PRECV,SIZE(PRECV),MNHREAL_MPI,KROOT-1,199+KROOT,KCOMM& & ,MPI_STATUS_IGNORE,IERR) END IF @@ -253,14 +248,14 @@ IF (ISP == KROOT) THEN END IF IF (ISP /= JI) THEN - CALL MPI_BSEND(TX2DP,SIZE(TX2DP),MPI_FLOAT,JI-1,199+KROOT,KCOMM& + CALL MPI_BSEND(TX2DP,SIZE(TX2DP),MNHREAL_MPI,JI-1,199+KROOT,KCOMM& & ,IERR) ELSE PRECV(:,:,:,:,:) = TX2DP(:,:,:,:,:) END IF END DO ELSE - CALL MPI_RECV(PRECV,SIZE(PRECV),MPI_FLOAT,KROOT-1,199+KROOT,KCOMM& + CALL MPI_RECV(PRECV,SIZE(PRECV),MNHREAL_MPI,KROOT-1,199+KROOT,KCOMM& & ,MPI_STATUS_IGNORE,IERR) END IF @@ -290,14 +285,14 @@ IF (ISP == KROOT) THEN END IF IF (ISP /= JI) THEN - CALL MPI_BSEND(TX2DP,SIZE(TX2DP),MPI_FLOAT,JI-1,199+KROOT,KCOMM& + CALL MPI_BSEND(TX2DP,SIZE(TX2DP),MNHREAL_MPI,JI-1,199+KROOT,KCOMM& & ,IERR) ELSE PRECV(:,:,:,:,:,:) = TX2DP(:,:,:,:,:,:) END IF END DO ELSE - CALL MPI_RECV(PRECV,SIZE(PRECV),MPI_FLOAT,KROOT-1,199+KROOT,KCOMM& + CALL MPI_RECV(PRECV,SIZE(PRECV),MNHREAL_MPI,KROOT-1,199+KROOT,KCOMM& & ,MPI_STATUS_IGNORE,IERR) END IF @@ -409,9 +404,9 @@ IF (ISP == KROOT) THEN NB_REQ = NB_REQ + 1 ALLOCATE(T_TX2DP(NB_REQ)%X(IXO:IXE,IYO:IYE)) T_TX2DP(NB_REQ)%X=TX2DP - CALL MPI_ISEND(T_TX2DP(NB_REQ)%X,SIZE(TX2DP),MPI_FLOAT,JI-1,199+KROOT,KCOMM& + CALL MPI_ISEND(T_TX2DP(NB_REQ)%X,SIZE(TX2DP),MNHREAL_MPI,JI-1,199+KROOT,KCOMM& & ,REQ_TAB(NB_REQ),IERR) - !CALL MPI_BSEND(TX2DP,SIZE(TX2DP),MPI_FLOAT,JI-1,199+KROOT,KCOMM& + !CALL MPI_BSEND(TX2DP,SIZE(TX2DP),MNHREAL_MPI,JI-1,199+KROOT,KCOMM& ! & ,IERR) ELSE PRECV(:,:) = TX2DP(:,:) @@ -424,7 +419,7 @@ IF (ISP == KROOT) THEN DEALLOCATE(T_TX2DP) DEALLOCATE(REQ_TAB) ELSE - CALL MPI_RECV(PRECV,SIZE(PRECV),MPI_FLOAT,KROOT-1,199+KROOT,KCOMM& + CALL MPI_RECV(PRECV,SIZE(PRECV),MNHREAL_MPI,KROOT-1,199+KROOT,KCOMM& & ,MPI_STATUS_IGNORE,IERR) END IF @@ -449,14 +444,14 @@ IF (ISP == KROOT) THEN TX3DP=>PSEND(IXO:IXE,IYO:IYE,:) IF (ISP /= JI) THEN - CALL MPI_BSEND(TX3DP,SIZE(TX3DP),MPI_FLOAT,JI-1,199+KROOT,KCOMM& + CALL MPI_BSEND(TX3DP,SIZE(TX3DP),MNHREAL_MPI,JI-1,199+KROOT,KCOMM& & ,IERR) ELSE PRECV(:,:,:) = TX3DP(:,:,:) END IF END DO ELSE - CALL MPI_RECV(PRECV,SIZE(PRECV),MPI_FLOAT,KROOT-1,199+KROOT,KCOMM& + CALL MPI_RECV(PRECV,SIZE(PRECV),MNHREAL_MPI,KROOT-1,199+KROOT,KCOMM& & ,MPI_STATUS_IGNORE,IERR) END IF @@ -481,14 +476,14 @@ IF (ISP == KROOT) THEN TX3DP=>PSEND(IXO:IXE,IYO:IYE,:,:) IF (ISP /= JI) THEN - CALL MPI_BSEND(TX3DP,SIZE(TX3DP),MPI_FLOAT,JI-1,199+KROOT,KCOMM& + CALL MPI_BSEND(TX3DP,SIZE(TX3DP),MNHREAL_MPI,JI-1,199+KROOT,KCOMM& & ,IERR) ELSE PRECV(:,:,:,:) = TX3DP(:,:,:,:) END IF END DO ELSE - CALL MPI_RECV(PRECV,SIZE(PRECV),MPI_FLOAT,KROOT-1,199+KROOT,KCOMM& + CALL MPI_RECV(PRECV,SIZE(PRECV),MNHREAL_MPI,KROOT-1,199+KROOT,KCOMM& & ,MPI_STATUS_IGNORE,IERR) END IF @@ -513,14 +508,14 @@ IF (ISP == KROOT) THEN TX3DP=>PSEND(IXO:IXE,IYO:IYE,:,:,:) IF (ISP /= JI) THEN - CALL MPI_BSEND(TX3DP,SIZE(TX3DP),MPI_FLOAT,JI-1,199+KROOT,KCOMM& + CALL MPI_BSEND(TX3DP,SIZE(TX3DP),MNHREAL_MPI,JI-1,199+KROOT,KCOMM& & ,IERR) ELSE PRECV(:,:,:,:,:) = TX3DP(:,:,:,:,:) END IF END DO ELSE - CALL MPI_RECV(PRECV,SIZE(PRECV),MPI_FLOAT,KROOT-1,199+KROOT,KCOMM& + CALL MPI_RECV(PRECV,SIZE(PRECV),MNHREAL_MPI,KROOT-1,199+KROOT,KCOMM& & ,MPI_STATUS_IGNORE,IERR) END IF @@ -545,14 +540,14 @@ IF (ISP == KROOT) THEN TX3DP=>PSEND(IXO:IXE,IYO:IYE,:,:,:,:) IF (ISP /= JI) THEN - CALL MPI_BSEND(TX3DP,SIZE(TX3DP),MPI_FLOAT,JI-1,199+KROOT,KCOMM& + CALL MPI_BSEND(TX3DP,SIZE(TX3DP),MNHREAL_MPI,JI-1,199+KROOT,KCOMM& & ,IERR) ELSE PRECV(:,:,:,:,:,:) = TX3DP(:,:,:,:,:,:) END IF END DO ELSE - CALL MPI_RECV(PRECV,SIZE(PRECV),MPI_FLOAT,KROOT-1,199+KROOT,KCOMM& + CALL MPI_RECV(PRECV,SIZE(PRECV),MNHREAL_MPI,KROOT-1,199+KROOT,KCOMM& & ,MPI_STATUS_IGNORE,IERR) END IF diff --git a/src/LIB/SURCOUCHE/src/mode_splittingz_ll.f90 b/src/LIB/SURCOUCHE/src/mode_splittingz_ll.f90 index 7b1b5680a3ddc49ba167bd504198d24b701477d5..fc5c40069db48cc06299afa288b986b0cf1d54db 100644 --- a/src/LIB/SURCOUCHE/src/mode_splittingz_ll.f90 +++ b/src/LIB/SURCOUCHE/src/mode_splittingz_ll.f90 @@ -3,15 +3,6 @@ !MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt !MNH_LIC for details. version 1. !----------------------------------------------------------------- - -#ifdef MNH_MPI_DOUBLE_PRECISION -#define MNH_MPI_REAL MPI_DOUBLE_PRECISION -#define MNH_MPI_2REAL MPI_2DOUBLE_PRECISION -#else -#define MNH_MPI_REAL MPI_REAL -#define MNH_MPI_2REAL MPI_2REAL -#endif - ! ######################## MODULE MODE_SPLITTINGZ_ll ! ######################## @@ -180,9 +171,6 @@ CONTAINS ! CALL MPI_COMM_DUP(NMNH_COMM_WORLD, NGRID_COM, KINFO_ll) ! - MPI_PRECISION = MNH_MPI_REAL - MPI_2PRECISION = MNH_MPI_2REAL - ! ! For bug with intelmpi+ilp64+i8 declare MNH_STATUSES_IGNORE ! #ifndef MNH_USE_MPI_STATUSES_IGNORE @@ -1813,12 +1801,10 @@ END FUNCTION LSOUTHZ_ll SUBROUTINE ALL_SEND_RECV(TSEND_BOX_FROM,TRECV_BOX_TO, & PFIELDIN, PFIELDOUT, KINFO) ! - USE MODD_STRUCTURE_ll , ONLY : BOX_ll - USE MODD_VAR_ll , ONLY : MPI_PRECISION - !JUANZ - !USE MODD_MPIF , ONLY : MPI_COMM_WORLD - USE MODD_VAR_ll , ONLY : NMNH_COMM_WORLD - !JUANZ + use modd_precision, only: MNHREAL_MPI + USE MODD_STRUCTURE_ll, ONLY: BOX_ll + USE MODD_VAR_ll, ONLY: NMNH_COMM_WORLD + ! IMPLICIT NONE ! ! Argument @@ -1851,8 +1837,8 @@ END FUNCTION LSOUTHZ_ll END IF END DO ! - CALL mpi_alltoallv(ZSEND,TSEND_BOX_FROM%NCNT,TSEND_BOX_FROM%NSTRT,MPI_PRECISION,& - ZRECV,TRECV_BOX_TO%NCNT ,TRECV_BOX_TO%NSTRT ,MPI_PRECISION,& + CALL mpi_alltoallv(ZSEND,TSEND_BOX_FROM%NCNT,TSEND_BOX_FROM%NSTRT,MNHREAL_MPI,& + ZRECV,TRECV_BOX_TO%NCNT ,TRECV_BOX_TO%NSTRT ,MNHREAL_MPI,& TSEND_BOX_FROM%NCOM,KINFO) ! JCNT = 0 diff --git a/src/LIB/SURCOUCHE/src/mode_sum2_ll.f90 b/src/LIB/SURCOUCHE/src/mode_sum2_ll.f90 index 1580724bde78a06009543ca6cfc72bdcc3b7e87a..23638d194e3273217719c90a1de448a05a7ec9e0 100644 --- a/src/LIB/SURCOUCHE/src/mode_sum2_ll.f90 +++ b/src/LIB/SURCOUCHE/src/mode_sum2_ll.f90 @@ -1,16 +1,8 @@ -!MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier +!MNH_LIC Copyright 1994-2019 CNRS, Meteo-France and Universite Paul Sabatier !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence -!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt +!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt !MNH_LIC for details. version 1. !----------------------------------------------------------------- -!--------------- special set of characters for CVS information -!----------------------------------------------------------------- -! $Source$ -! $Name$ -! $Revision$ -! $Date$ -!----------------------------------------------------------------- -!----------------------------------------------------------------- ! ################### MODULE MODE_SUM2_ll @@ -576,7 +568,6 @@ ENDIF ! ! Module MODD_VAR_ll ! IP - -! MPI_2PRECISION ! !! Author !! ------ @@ -590,7 +581,8 @@ ENDIF ! !* 0. DECLARATIONS ! - USE MODD_VAR_ll, ONLY : IP, MPI_2PRECISION + use modd_precision, only: MNH2REAL_MPI + USE MODD_VAR_ll, ONLY: IP ! IMPLICIT NONE ! @@ -623,7 +615,7 @@ ENDIF ! ZBUFIN (1) = PVALUE ZBUFIN (2) = IP - CALL MPI_ALLREDUCE(ZBUFIN, ZBUFOUT, 1, MPI_2PRECISION, MPI_MAXLOC, & + CALL MPI_ALLREDUCE(ZBUFIN, ZBUFOUT, 1, MNH2REAL_MPI, MPI_MAXLOC, & NMNH_COMM_WORLD, IERR) ! ! @@ -675,7 +667,6 @@ ENDIF ! Module MODD_VAR_ll ! TCRRT_PROCONF - Current configuration for current model ! IP - -! MPI_2PRECISION ! !! Author !! ------ @@ -689,9 +680,9 @@ ENDIF ! !* 0. DECLARATIONS ! - USE MODD_VAR_ll, ONLY : IP, MPI_2PRECISION, TCRRT_PROCONF -! - USE MODD_STRUCTURE_ll, ONLY : MODELSPLITTING_ll + use modd_precision, only: MNH2REAL_MPI + USE MODD_STRUCTURE_ll, ONLY: MODELSPLITTING_ll + USE MODD_VAR_ll, ONLY: IP, TCRRT_PROCONF ! IMPLICIT NONE ! @@ -731,7 +722,7 @@ ENDIF ZBUFIN (1) = PVALUE ZBUFIN (2) = IP ! - CALL MPI_ALLREDUCE(ZBUFIN, ZBUFOUT, 1, MPI_2PRECISION, MPI_MAXLOC, & + CALL MPI_ALLREDUCE(ZBUFIN, ZBUFOUT, 1, MNH2REAL_MPI, MPI_MAXLOC, & NMNH_COMM_WORLD, INFO_ll) ! !------------------------------------------------------------------------------- diff --git a/src/LIB/SURCOUCHE/src/mode_sum_ll.f90 b/src/LIB/SURCOUCHE/src/mode_sum_ll.f90 index 0fb29815036b842f1abdd0421a85e933b2eac5a1..9f588cfa24ba1c630a33bbeb1152e0b995ac5504 100644 --- a/src/LIB/SURCOUCHE/src/mode_sum_ll.f90 +++ b/src/LIB/SURCOUCHE/src/mode_sum_ll.f90 @@ -1,15 +1,8 @@ -!MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier +!MNH_LIC Copyright 1994-2019 CNRS, Meteo-France and Universite Paul Sabatier !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence -!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt +!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt !MNH_LIC for details. version 1. !----------------------------------------------------------------- -!--------------- special set of characters for CVS information -!----------------------------------------------------------------- -! $Source$ -! $Name$ -! $Revision$ -! $Date$ -!----------------------------------------------------------------- !Correction : ! J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 !----------------------------------------------------------------- @@ -57,7 +50,6 @@ ! NPROC - ! IP - ! JPHALO - -! MPI_PRECISION - ! ! Module MODD_STRUCTURE_ll ! type MODELSPLITTING_ll @@ -65,11 +57,8 @@ !------------------------------------------------------------------------------ ! USE MODD_MPIF - !JUANZ - USE MODD_VAR_ll, ONLY : NMNH_COMM_WORLD - !JUANZ -! -! INCLUDE 'mpif.h' + use modd_precision, only: MNHREAL_MPI + USE MODD_VAR_ll, ONLY: NMNH_COMM_WORLD ! CONTAINS ! @@ -110,7 +99,6 @@ ! Module MODD_VAR_ll ! TCRRT_COMDATA - Current communication data structure for current model ! and local processor -! MPI_PRECISION - ! !! Reference !! --------- @@ -127,9 +115,9 @@ ! !* 0. DECLARATIONS ! - USE MODD_PARAMETERS_ll, ONLY : JPHEXT, JPVEXT - USE MODD_VAR_ll, ONLY : TCRRT_COMDATA, MPI_PRECISION - USE MODE_TOOLS_ll, ONLY : LNORTH_ll, LSOUTH_ll, LEAST_ll, LWEST_ll + USE MODD_PARAMETERS_ll, ONLY: JPHEXT, JPVEXT + USE MODD_VAR_ll, ONLY: TCRRT_COMDATA + USE MODE_TOOLS_ll, ONLY: LNORTH_ll, LSOUTH_ll, LEAST_ll, LWEST_ll ! IMPLICIT NONE ! @@ -299,7 +287,7 @@ ! !* 3.4 Summation with all the processors ! - CALL MPI_ALLREDUCE(ZBUF, ZBUFD, IDIM, MPI_PRECISION, & + CALL MPI_ALLREDUCE(ZBUF, ZBUFD, IDIM, MNHREAL_MPI, & MPI_SUM, NMNH_COMM_WORLD, KINFO) ! !* 3.5 Return the result @@ -357,7 +345,6 @@ ! Module MODD_VAR_ll ! TCRRT_COMDATA - Current communication data structure for current model ! and local processor -! MPI_PRECISION - ! !! Implicit Arguments !! ------------------ @@ -377,10 +364,10 @@ ! !* 0. DECLARATIONS ! - USE MODD_PARAMETERS_ll, ONLY : JPHEXT, JPVEXT - USE MODD_VAR_ll, ONLY : TCRRT_COMDATA, MPI_PRECISION + USE MODD_PARAMETERS_ll, ONLY: JPHEXT, JPVEXT + USE MODD_VAR_ll, ONLY: TCRRT_COMDATA ! - USE MODE_TOOLS_ll, ONLY : LNORTH_ll, LSOUTH_ll, LEAST_ll, LWEST_ll + USE MODE_TOOLS_ll, ONLY: LNORTH_ll, LSOUTH_ll, LEAST_ll, LWEST_ll ! IMPLICIT NONE ! @@ -601,7 +588,7 @@ ! !* 3.4 Summation with all the processors ! - CALL MPI_ALLREDUCE(ZBUF, ZBUFD, IDIM, MPI_PRECISION, & + CALL MPI_ALLREDUCE(ZBUF, ZBUFD, IDIM, MNHREAL_MPI, & MPI_SUM, NMNH_COMM_WORLD, KINFO) ! !* 3.5 Return the result @@ -659,7 +646,6 @@ ! Module MODD_VAR_ll ! TCRRT_COMDATA - Current communication data structure for current model ! and local processor -! MPI_PRECISION - ! !! Implicit Arguments !! ------------------ @@ -680,10 +666,10 @@ ! !* 0. DECLARATIONS ! - USE MODD_PARAMETERS_ll, ONLY : JPHEXT, JPVEXT - USE MODD_VAR_ll, ONLY : TCRRT_COMDATA, MPI_PRECISION + USE MODD_PARAMETERS_ll, ONLY: JPHEXT, JPVEXT + USE MODD_VAR_ll, ONLY: TCRRT_COMDATA ! - USE MODE_TOOLS_ll, ONLY : LNORTH_ll, LSOUTH_ll, LEAST_ll, LWEST_ll + USE MODE_TOOLS_ll, ONLY: LNORTH_ll, LSOUTH_ll, LEAST_ll, LWEST_ll ! IMPLICIT NONE ! @@ -903,7 +889,7 @@ ! !* 3.4 Summation with all the processors ! - CALL MPI_ALLREDUCE(ZBUF, ZBUFD, IDIM, MPI_PRECISION, & + CALL MPI_ALLREDUCE(ZBUF, ZBUFD, IDIM, MNHREAL_MPI, & MPI_SUM, NMNH_COMM_WORLD, KINFO) ! !* 3.5 Return the result @@ -961,7 +947,6 @@ ! Module MODD_VAR_ll ! TCRRT_COMDATA - Current communication data structure for current model ! and local processor -! MPI_PRECISION - ! !! Implicit Arguments !! ------------------ @@ -982,10 +967,10 @@ ! !* 0. DECLARATIONS ! - USE MODD_PARAMETERS_ll, ONLY : JPHEXT, JPVEXT - USE MODD_VAR_ll, ONLY : TCRRT_COMDATA, MPI_PRECISION + USE MODD_PARAMETERS_ll, ONLY: JPHEXT, JPVEXT + USE MODD_VAR_ll, ONLY: TCRRT_COMDATA ! - USE MODE_TOOLS_ll, ONLY : LNORTH_ll, LSOUTH_ll, LEAST_ll, LWEST_ll + USE MODE_TOOLS_ll, ONLY: LNORTH_ll, LSOUTH_ll, LEAST_ll, LWEST_ll ! USE MODE_TOOLS_ll ! @@ -1136,7 +1121,7 @@ REAL, DIMENSION(:,:), ALLOCATABLE :: ZSUM_ll ! !* 3.4 Summation with all the processors ! -!!$ CALL MPI_ALLREDUCE(ZSUM3D, SUM3D_ll, 1, MPI_PRECISION, & +!!$ CALL MPI_ALLREDUCE(ZSUM3D, SUM3D_ll, 1, MNHREAL_MPI, & !!$ MPI_SUM, NMNH_COMM_WORLD, KINFO) !!$! !!$! gathers the total 2D field @@ -1197,7 +1182,6 @@ REAL, DIMENSION(:,:), ALLOCATABLE :: ZSUM_ll ! and local processor ! TCRRT_PROCONF - Current configuration for current model ! NPROC - -! MPI_PRECISION - ! !! Reference !! --------- @@ -1216,11 +1200,11 @@ REAL, DIMENSION(:,:), ALLOCATABLE :: ZSUM_ll ! !* 0. DECLARATIONS ! - USE MODD_PARAMETERS_ll, ONLY : JPHEXT - USE MODD_STRUCTURE_ll, ONLY : MODELSPLITTING_ll - USE MODD_VAR_ll, ONLY : IP, TCRRT_COMDATA, TCRRT_PROCONF, NPROC, MPI_PRECISION + USE MODD_PARAMETERS_ll, ONLY: JPHEXT + USE MODD_STRUCTURE_ll, ONLY: MODELSPLITTING_ll + USE MODD_VAR_ll, ONLY: IP, TCRRT_COMDATA, TCRRT_PROCONF, NPROC ! - USE MODE_TOOLS_ll, ONLY : LNORTH_ll, LSOUTH_ll, LEAST_ll, LWEST_ll + USE MODE_TOOLS_ll, ONLY: LNORTH_ll, LSOUTH_ll, LEAST_ll, LWEST_ll ! IMPLICIT NONE ! @@ -1339,8 +1323,8 @@ REAL, DIMENSION(:,:), ALLOCATABLE :: ZSUM_ll ! ALLOCATE(ZGLOBFIELD(IGE-IGB+1)) CALL MPI_ALLGATHERV(PFIELD(IB-IORE(IDIR)+1:), ISIZE, & - MPI_PRECISION, ZGLOBFIELD, ISIZES, IDISPL, & - MPI_PRECISION, NMNH_COMM_WORLD, IERR) + MNHREAL_MPI, ZGLOBFIELD, ISIZES, IDISPL, & + MNHREAL_MPI, NMNH_COMM_WORLD, IERR) ! !------------------------------------------------------------------------------- ! @@ -1399,7 +1383,6 @@ REAL, DIMENSION(:,:), ALLOCATABLE :: ZSUM_ll ! and local processor ! TCRRT_PROCONF - Current configuration for current model ! NPROC - -! MPI_PRECISION - ! !! Reference !! --------- @@ -1418,10 +1401,10 @@ REAL, DIMENSION(:,:), ALLOCATABLE :: ZSUM_ll ! !* 0. DECLARATIONS ! - USE MODD_PARAMETERS_ll, ONLY : JPHEXT, JPVEXT - USE MODD_VAR_ll, ONLY : TCRRT_COMDATA, MPI_PRECISION + USE MODD_PARAMETERS_ll, ONLY: JPHEXT, JPVEXT + USE MODD_VAR_ll, ONLY: TCRRT_COMDATA ! - USE MODE_TOOLS_ll, ONLY : LNORTH_ll, LSOUTH_ll, LEAST_ll, LWEST_ll + USE MODE_TOOLS_ll, ONLY: LNORTH_ll, LSOUTH_ll, LEAST_ll, LWEST_ll ! IMPLICIT NONE ! @@ -1560,7 +1543,7 @@ REAL, DIMENSION(:,:), ALLOCATABLE :: ZSUM_ll ! !* 3.4 Reduction with all the processors ! - CALL MPI_ALLREDUCE(ZMAX, MAX_ll, 1, MPI_PRECISION, & + CALL MPI_ALLREDUCE(ZMAX, MAX_ll, 1, MNHREAL_MPI, & MPI_MAX, NMNH_COMM_WORLD, KINFO) ! ENDIF @@ -1612,7 +1595,6 @@ REAL, DIMENSION(:,:), ALLOCATABLE :: ZSUM_ll ! and local processor ! TCRRT_PROCONF - Current configuration for current model ! NPROC - -! MPI_PRECISION - ! !! Reference !! --------- @@ -1631,10 +1613,10 @@ REAL, DIMENSION(:,:), ALLOCATABLE :: ZSUM_ll ! !* 0. DECLARATIONS ! - USE MODD_PARAMETERS_ll, ONLY : JPHEXT, JPVEXT - USE MODD_VAR_ll, ONLY : TCRRT_COMDATA, MPI_PRECISION + USE MODD_PARAMETERS_ll, ONLY: JPHEXT, JPVEXT + USE MODD_VAR_ll, ONLY: TCRRT_COMDATA ! - USE MODE_TOOLS_ll, ONLY : LNORTH_ll, LSOUTH_ll, LEAST_ll, LWEST_ll + USE MODE_TOOLS_ll, ONLY: LNORTH_ll, LSOUTH_ll, LEAST_ll, LWEST_ll ! IMPLICIT NONE ! @@ -1773,7 +1755,7 @@ REAL, DIMENSION(:,:), ALLOCATABLE :: ZSUM_ll ! ! 3.4 Reduction with all the processors ! - CALL MPI_ALLREDUCE(ZMIN, MIN_ll, 1, MPI_PRECISION, & + CALL MPI_ALLREDUCE(ZMIN, MIN_ll, 1, MNHREAL_MPI, & MPI_MIN, NMNH_COMM_WORLD, KINFO) ! ENDIF @@ -1809,7 +1791,6 @@ REAL, DIMENSION(:,:), ALLOCATABLE :: ZSUM_ll ! Module MODD_VAR_ll ! TCRRT_COMDATA - Current communication data structure for current model ! and local processor -! MPI_PRECISION - ! !! Reference !! --------- @@ -1826,7 +1807,7 @@ REAL, DIMENSION(:,:), ALLOCATABLE :: ZSUM_ll ! !* 0. DECLARATIONS ! - USE MODD_VAR_ll, ONLY : TCRRT_COMDATA, MPI_PRECISION + USE MODD_VAR_ll, ONLY : TCRRT_COMDATA ! ! IMPLICIT NONE @@ -1862,7 +1843,7 @@ REAL, DIMENSION(:,:), ALLOCATABLE :: ZSUM_ll ! --------------------------------- ! CALL MPI_ALLREDUCE(ZBUF, ZBUFD, SIZE(PFIELD,3), & - MPI_PRECISION, MPI_SUM, NMNH_COMM_WORLD, KINFO) + MNHREAL_MPI, MPI_SUM, NMNH_COMM_WORLD, KINFO) ! !------------------------------------------------------------------------------- ! @@ -1899,8 +1880,6 @@ REAL, DIMENSION(:,:), ALLOCATABLE :: ZSUM_ll !! Implicit Arguments !! ------------------ ! -! Module MODD_VAR_ll -! MPI_PRECISION - ! !! Reference !! --------- @@ -1916,8 +1895,6 @@ REAL, DIMENSION(:,:), ALLOCATABLE :: ZSUM_ll !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS -! - USE MODD_VAR_ll, ONLY : MPI_PRECISION ! IMPLICIT NONE ! @@ -1953,7 +1930,7 @@ REAL, DIMENSION(:,:), ALLOCATABLE :: ZSUM_ll !* 2. REDUCTION WITH ALL THE PROCESSORS : ! --------------------------------- ! - CALL MPI_ALLREDUCE(ZSUM, SUMMASKCOMP_ll, 1, MPI_PRECISION, & + CALL MPI_ALLREDUCE(ZSUM, SUMMASKCOMP_ll, 1, MNHREAL_MPI, & MPI_SUM, NMNH_COMM_WORLD, KINFO) ! !------------------------------------------------------------------------------- @@ -1995,7 +1972,6 @@ REAL, DIMENSION(:,:), ALLOCATABLE :: ZSUM_ll ! and local processor ! TCRRT_PROCONF - Current configuration for current model ! IP - -! MPI_PRECISION - ! JPHALO - ! !! Author @@ -2010,12 +1986,10 @@ REAL, DIMENSION(:,:), ALLOCATABLE :: ZSUM_ll ! !* 0. DECLARATIONS ! - USE MODD_STRUCTURE_ll, ONLY : MODELSPLITTING_ll + USE MODD_STRUCTURE_ll, ONLY: MODELSPLITTING_ll + USE MODD_VAR_ll, ONLY: IP, TCRRT_COMDATA, TCRRT_PROCONF, JPHALO ! - USE MODD_VAR_ll, ONLY : IP, TCRRT_COMDATA, TCRRT_PROCONF, JPHALO, & - MPI_PRECISION -! - USE MODE_TOOLS_ll, ONLY : LWEST_ll, LEAST_ll + USE MODE_TOOLS_ll, ONLY: LWEST_ll, LEAST_ll ! IMPLICIT NONE ! @@ -2071,7 +2045,7 @@ REAL, DIMENSION(:,:), ALLOCATABLE :: ZSUM_ll !* 3. MERGE LOCAL SUMS ! ---------------- ! - CALL MPI_ALLREDUCE(ZBUF, PRES, SIZE(PRES), MPI_PRECISION, MPI_SUM, & + CALL MPI_ALLREDUCE(ZBUF, PRES, SIZE(PRES), MNHREAL_MPI, MPI_SUM, & NMNH_COMM_WORLD,KINFO) ! !----------------------------------------------------------------- @@ -2113,7 +2087,6 @@ REAL, DIMENSION(:,:), ALLOCATABLE :: ZSUM_ll ! and local processor ! TCRRT_PROCONF - Current configuration for current model ! IP - -! MPI_PRECISION - ! JPHALO - ! !! Author @@ -2129,14 +2102,11 @@ REAL, DIMENSION(:,:), ALLOCATABLE :: ZSUM_ll ! !* 0. DECLARATIONS ! - USE MODD_STRUCTURE_ll, ONLY : MODELSPLITTING_ll -! - USE MODD_VAR_ll, ONLY : IP, TCRRT_COMDATA, TCRRT_PROCONF, JPHALO, & - MPI_PRECISION -! - USE MODE_TOOLS_ll, ONLY : LWEST_ll, LEAST_ll, LNORTH_ll, LSOUTH_ll + USE MODD_STRUCTURE_ll, ONLY: MODELSPLITTING_ll + USE MODD_VAR_ll, ONLY: IP, TCRRT_COMDATA, TCRRT_PROCONF, JPHALO ! - USE MODE_REPRO_SUM + USE MODE_REPRO_SUM + USE MODE_TOOLS_ll, ONLY: LWEST_ll, LEAST_ll, LNORTH_ll, LSOUTH_ll ! !* 0. DECLARATIONS ! ------------ @@ -2282,7 +2252,6 @@ REAL, DIMENSION(:,:), ALLOCATABLE :: ZSUM_ll ! and local processor ! TCRRT_PROCONF - Current configuration for current model ! IP - -! MPI_PRECISION - ! JPHALO - ! !! Author @@ -2298,12 +2267,10 @@ REAL, DIMENSION(:,:), ALLOCATABLE :: ZSUM_ll ! !* 0. DECLARATIONS ! - USE MODD_STRUCTURE_ll, ONLY : MODELSPLITTING_ll + USE MODD_STRUCTURE_ll, ONLY: MODELSPLITTING_ll + USE MODD_VAR_ll, ONLY: IP, TCRRT_COMDATA, TCRRT_PROCONF, JPHALO ! - USE MODD_VAR_ll, ONLY : IP, TCRRT_COMDATA, TCRRT_PROCONF, JPHALO, & - MPI_PRECISION -! - USE MODE_TOOLS_ll, ONLY : LWEST_ll, LEAST_ll, LNORTH_ll, LSOUTH_ll + USE MODE_TOOLS_ll, ONLY: LWEST_ll, LEAST_ll, LNORTH_ll, LSOUTH_ll ! !* 0. DECLARATIONS ! ------------ @@ -2364,7 +2331,7 @@ REAL, DIMENSION(:,:), ALLOCATABLE :: ZSUM_ll ! !* 2. Merge local sums ! - CALL MPI_ALLREDUCE(ZBUF, PRES, SIZE(PRES, 1) * SIZE(PRES, 2), MPI_PRECISION, MPI_SUM, NMNH_COMM_WORLD,KINFO) + CALL MPI_ALLREDUCE(ZBUF, PRES, SIZE(PRES, 1) * SIZE(PRES, 2), MNHREAL_MPI, MPI_SUM, NMNH_COMM_WORLD,KINFO) ! !----------------------------------------------------------------- ELSE @@ -2396,7 +2363,7 @@ REAL, DIMENSION(:,:), ALLOCATABLE :: ZSUM_ll ! !* 2. Merge local sums ! - CALL MPI_ALLREDUCE(ZBUF, PRES, SIZE(PRES, 1) * SIZE(PRES,2), MPI_PRECISION, MPI_SUM, NMNH_COMM_WORLD,KINFO) + CALL MPI_ALLREDUCE(ZBUF, PRES, SIZE(PRES, 1) * SIZE(PRES,2), MNHREAL_MPI, MPI_SUM, NMNH_COMM_WORLD,KINFO) ENDIF ENDIF @@ -2429,8 +2396,6 @@ REAL, DIMENSION(:,:), ALLOCATABLE :: ZSUM_ll !! Implicit Arguments !! ------------------ ! -! Module MODD_VAR_ll -! MPI_PRECISION - ! !! Author !! ------ @@ -2445,7 +2410,7 @@ REAL, DIMENSION(:,:), ALLOCATABLE :: ZSUM_ll ! !* 0. DECLARATIONS ! - USE MODE_REPRO_SUM + USE MODE_REPRO_SUM ! IMPLICIT NONE ! @@ -2502,8 +2467,6 @@ END SUBROUTINE REDUCE_SUM_0DD_ll !! Implicit Arguments !! ------------------ ! -! Module MODD_VAR_ll -! MPI_PRECISION - ! !! Author !! ------ @@ -2517,8 +2480,6 @@ END SUBROUTINE REDUCE_SUM_0DD_ll !----------------------------------------------------------------- ! !* 0. DECLARATIONS -! - USE MODD_VAR_ll, ONLY : MPI_PRECISION ! IMPLICIT NONE ! @@ -2537,7 +2498,7 @@ END SUBROUTINE REDUCE_SUM_0DD_ll !* 1. CALL THE MPI_ALLREDUCE ROUTINE ! ------------------------------ ! - CALL MPI_ALLREDUCE(PRES, ZRES, 1, MPI_PRECISION, & + CALL MPI_ALLREDUCE(PRES, ZRES, 1, MNHREAL_MPI, & MPI_SUM, NMNH_COMM_WORLD, KINFO) ! PRES = ZRES @@ -2620,8 +2581,6 @@ END SUBROUTINE REDUCE_SUM_1DD_ll !! Implicit Arguments !! ------------------ ! -! Module MODD_VAR_ll -! MPI_PRECISION - ! !! Author !! ------ @@ -2635,8 +2594,6 @@ END SUBROUTINE REDUCE_SUM_1DD_ll !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS -! - USE MODD_VAR_ll, ONLY : MPI_PRECISION ! IMPLICIT NONE ! @@ -2655,7 +2612,7 @@ END SUBROUTINE REDUCE_SUM_1DD_ll !* 1. CALL THE MPI_ALLREDUCE ROUTINE ! ------------------------------ ! - CALL MPI_ALLREDUCE(PRES, ZRES, SIZE(PRES,1), MPI_PRECISION, & + CALL MPI_ALLREDUCE(PRES, ZRES, SIZE(PRES,1), MNHREAL_MPI, & MPI_SUM, NMNH_COMM_WORLD, KINFO) ! PRES = ZRES @@ -2692,8 +2649,6 @@ END SUBROUTINE REDUCE_SUM_1DD_ll !! Implicit Arguments !! ------------------ ! -! Module MODD_VAR_ll -! MPI_PRECISION - ! !! Author !! ------ @@ -2707,8 +2662,6 @@ END SUBROUTINE REDUCE_SUM_1DD_ll !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS -! - USE MODD_VAR_ll, ONLY : MPI_PRECISION ! IMPLICIT NONE ! @@ -2731,7 +2684,7 @@ END SUBROUTINE REDUCE_SUM_1DD_ll ! IDIM = SIZE(PRES,1) * SIZE(PRES,2) ! - CALL MPI_ALLREDUCE(PRES, ZRES, IDIM, MPI_PRECISION, MPI_SUM, & + CALL MPI_ALLREDUCE(PRES, ZRES, IDIM, MNHREAL_MPI, MPI_SUM, & NMNH_COMM_WORLD, KINFO) ! PRES = ZRES @@ -2768,8 +2721,6 @@ END SUBROUTINE REDUCE_SUM_1DD_ll !! Implicit Arguments !! ------------------ ! -! Module MODD_VAR_ll -! MPI_PRECISION - ! !! Author !! ------ @@ -2783,8 +2734,6 @@ END SUBROUTINE REDUCE_SUM_1DD_ll !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS -! - USE MODD_VAR_ll, ONLY : MPI_PRECISION ! IMPLICIT NONE ! @@ -2808,7 +2757,7 @@ END SUBROUTINE REDUCE_SUM_1DD_ll ! IDIM = SIZE(PRES,1) * SIZE(PRES,2) * SIZE(PRES,3) ! - CALL MPI_ALLREDUCE(PRES, ZRES, IDIM, MPI_PRECISION, MPI_SUM, & + CALL MPI_ALLREDUCE(PRES, ZRES, IDIM, MNHREAL_MPI, MPI_SUM, & NMNH_COMM_WORLD, KINFO) ! PRES = ZRES @@ -3046,8 +2995,6 @@ END SUBROUTINE REDUCE_SUM_1DD_ll !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS -! - USE MODD_VAR_ll, ONLY : MPI_PRECISION ! IMPLICIT NONE ! diff --git a/src/LIB/SURCOUCHE/src/mode_tools_ll.f90 b/src/LIB/SURCOUCHE/src/mode_tools_ll.f90 index 6e450dffbec00d2f642c1764b78fca22a4ab3b5b..626cc3614f8a594ac5dfcb5b7f25af6c99dfd506 100644 --- a/src/LIB/SURCOUCHE/src/mode_tools_ll.f90 +++ b/src/LIB/SURCOUCHE/src/mode_tools_ll.f90 @@ -46,8 +46,9 @@ ! Juan/Didier 12/03/2009: array bound bug correction with 1proc/MPIVIDE ! J. Escobar 27/06/2011 correction for gridnesting with different SHAPE ! - USE MODD_STRUCTURE_ll USE MODD_MPIF + use modd_precision, only: MNHREAL_MPI + USE MODD_STRUCTURE_ll !JUANZ USE MODD_VAR_ll, ONLY : NMNH_COMM_WORLD !JUANZ @@ -1094,7 +1095,6 @@ ENDIF ! NPROC - Number of processors ! TCRRT_PROCONF - Current configuration for current model ! IP - Number of the local processor -! MPI_PRECISION - mpi precision ! ! Module MODD_PARAMETERS_ll ! JPHEXT - halo size @@ -1116,16 +1116,12 @@ ENDIF ! !* 0. DECLARATIONS ! - USE MODD_PARAMETERS_ll, ONLY : JPHEXT - USE MODD_STRUCTURE_ll, ONLY : MODELSPLITTING_ll - USE MODD_VAR_ll, ONLY : NPROC, TCRRT_PROCONF, IP, MPI_PRECISION + USE MODD_PARAMETERS_ll, ONLY: JPHEXT + USE MODD_STRUCTURE_ll, ONLY: MODELSPLITTING_ll + USE MODD_VAR_ll, ONLY: NPROC, TCRRT_PROCONF, IP ! IMPLICIT NONE ! -!* 0.099 Include MPI parameters -! -! INCLUDE 'mpif.h' -! !* 0.1 declarations of arguments ! REAL, DIMENSION(:,:), TARGET, INTENT(IN) :: PARRAY ! horizontal field @@ -1328,8 +1324,8 @@ ENDIF !* 3.3 Have the values of the local slice on each proc known ! by all procs on the global slice ! - CALL MPI_ALLGATHERV(ZPTR, ISIZE, MPI_PRECISION, PGLOBALSLICE, & - ISIZES, IDISPL, MPI_PRECISION, ICOMM_GLOBALSLICE, IERR) + CALL MPI_ALLGATHERV(ZPTR, ISIZE, MNHREAL_MPI, PGLOBALSLICE, & + ISIZES, IDISPL, MNHREAL_MPI, ICOMM_GLOBALSLICE, IERR) ! !* 3.4 Delete slice communicator ! @@ -1360,7 +1356,7 @@ ENDIF IF (ICOMM .NE. MPI_COMM_NULL) THEN ! CALL MPI_BCAST(IGLOBALSLICELENGTH, 1, MPI_INTEGER, IPROCS(1), ICOMM, IERR) - CALL MPI_BCAST(PGLOBALSLICE(IDISPL1+1), IGLOBALSLICELENGTH, MPI_PRECISION, & + CALL MPI_BCAST(PGLOBALSLICE(IDISPL1+1), IGLOBALSLICELENGTH, MNHREAL_MPI, & IPROCS(1), ICOMM, IERR) ! CALL MPI_COMM_FREE(ICOMM, IERR) @@ -1412,7 +1408,6 @@ ENDIF ! NPROC - Number of processors ! TCRRT_PROCONF - Current configuration for current model ! IP - Number of the local processor -! MPI_PRECISION - mpi precision ! ! Module MODD_PARAMETERS_ll ! JPHEXT, JPVEXT - halo size @@ -1434,16 +1429,12 @@ ENDIF ! !* 0. DECLARATIONS ! - USE MODD_PARAMETERS_ll, ONLY : JPHEXT, JPVEXT - USE MODD_STRUCTURE_ll, ONLY : MODELSPLITTING_ll - USE MODD_VAR_ll, ONLY : NPROC, TCRRT_PROCONF, IP, MPI_PRECISION + USE MODD_PARAMETERS_ll, ONLY: JPHEXT, JPVEXT + USE MODD_STRUCTURE_ll, ONLY: MODELSPLITTING_ll + USE MODD_VAR_ll, ONLY: NPROC, TCRRT_PROCONF, IP ! IMPLICIT NONE ! -!* 0.099 Include MPI parameters -! -! INCLUDE 'mpif.h' -! !* 0.1 declarations of arguments ! REAL, DIMENSION(:,:,:), TARGET, INTENT(IN) :: PARRAY ! horizontal field @@ -1664,9 +1655,9 @@ ENDIF ! by all procs on the global slice ! DO JK = 1, IGLOBALSLICEHEIGHT - CALL MPI_ALLGATHERV(ZPTR(1,JK), ISIZE, MPI_PRECISION, & + CALL MPI_ALLGATHERV(ZPTR(1,JK), ISIZE, MNHREAL_MPI, & PGLOBALSLICE(1,JK), ISIZES, IDISPL, & - MPI_PRECISION, ICOMM_GLOBALSLICE, IERR) + MNHREAL_MPI, ICOMM_GLOBALSLICE, IERR) ENDDO ! !* 3.4 Delete slice communicator @@ -1700,7 +1691,7 @@ ENDIF ! CALL MPI_BCAST(IGLOBALSLICELENGTH, 1, MPI_INTEGER, IPROCS(1), ICOMM, IERR) DO JK = 1, IGLOBALSLICEHEIGHT - CALL MPI_BCAST(PGLOBALSLICE(1,JK), IGLOBALSLICELENGTH, MPI_PRECISION, & + CALL MPI_BCAST(PGLOBALSLICE(1,JK), IGLOBALSLICELENGTH, MNHREAL_MPI, & IPROCS(1), ICOMM, IERR) ENDDO ! @@ -1760,7 +1751,6 @@ ENDIF ! NPROC - Number of processors ! TCRRT_PROCONF - Current configuration for current model ! IP - Number of the local processor -! MPI_PRECISION - mpi precision ! ! Module MODD_PARAMETERS_ll ! JPHEXT, JPVEXT - halo size @@ -1781,16 +1771,12 @@ ENDIF ! !* 0. DECLARATIONS ! - USE MODD_PARAMETERS_ll, ONLY : JPHEXT - USE MODD_VAR_ll, ONLY : NPROC,TCRRT_PROCONF,IP,MPI_PRECISION - USE MODD_STRUCTURE_ll, ONLY : MODELSPLITTING_ll + USE MODD_PARAMETERS_ll, ONLY: JPHEXT + USE MODD_STRUCTURE_ll, ONLY: MODELSPLITTING_ll + USE MODD_VAR_ll, ONLY: NPROC, TCRRT_PROCONF, IP ! IMPLICIT NONE ! -!* 0.099 Include MPI parameters -! -! INCLUDE 'mpif.h' -! !* 0.1 declarations of arguments ! REAL, DIMENSION(:,:), TARGET, INTENT(IN) :: PARRAY ! horizontal field @@ -2020,8 +2006,8 @@ ENDIF !* 3.3 Have the values of the local slice on each proc known ! by all procs on the global slice ! - CALL MPI_ALLGATHERV(ZPTR, ISIZE, MPI_PRECISION, ITOTALSLICE, ISIZES, & - IDISPL, MPI_PRECISION, ICOMM_SLICE, IERR) + CALL MPI_ALLGATHERV(ZPTR, ISIZE, MNHREAL_MPI, ITOTALSLICE, ISIZES, & + IDISPL, MNHREAL_MPI, ICOMM_SLICE, IERR) ! DEALLOCATE(ISIZES, IDISPL) ! @@ -2054,7 +2040,7 @@ ENDIF IF (ICOMM .NE. MPI_COMM_NULL) THEN ! CALL MPI_BCAST(ISLICELENGTH, 1, MPI_INTEGER, IPROCS(1), ICOMM, IERR) - CALL MPI_BCAST(ITOTALSLICE, ISLICELENGTH, MPI_PRECISION, & + CALL MPI_BCAST(ITOTALSLICE, ISLICELENGTH, MNHREAL_MPI, & IPROCS(1), ICOMM, IERR) CALL MPI_COMM_FREE(ICOMM, IERR) ENDIF @@ -2108,7 +2094,6 @@ ENDIF ! NPROC - Number of processors ! TCRRT_PROCONF - Current configuration for current model ! IP - Number of the local processor -! MPI_PRECISION - mpi precision ! ! Module MODD_PARAMETERS_ll ! JPHEXT, JPVEXT - halo size @@ -2129,16 +2114,12 @@ ENDIF ! !* 0. DECLARATIONS ! - USE MODD_PARAMETERS_ll, ONLY : JPHEXT, JPVEXT - USE MODD_VAR_ll, ONLY : NPROC,TCRRT_PROCONF,IP,MPI_PRECISION - USE MODD_STRUCTURE_ll, ONLY : MODELSPLITTING_ll + USE MODD_PARAMETERS_ll, ONLY: JPHEXT, JPVEXT + USE MODD_STRUCTURE_ll, ONLY: MODELSPLITTING_ll + USE MODD_VAR_ll, ONLY: NPROC, TCRRT_PROCONF, IP ! IMPLICIT NONE ! -!* 0.099 Include MPI parameters -! -! INCLUDE 'mpif.h' -! !* 0.1 declarations of arguments ! REAL, DIMENSION(:,:,:), TARGET, INTENT(IN) :: PARRAY ! horizontal field @@ -2380,9 +2361,9 @@ ENDIF ! by all procs on the global slice ! DO JK = 1, ISLICEHEIGHT - CALL MPI_ALLGATHERV(ZPTR(1,JK), ISIZE, MPI_PRECISION, & + CALL MPI_ALLGATHERV(ZPTR(1,JK), ISIZE, MNHREAL_MPI, & ITOTALSLICE(1,JK), & - ISIZES, IDISPL, MPI_PRECISION, ICOMM_SLICE, IERR) + ISIZES, IDISPL, MNHREAL_MPI, ICOMM_SLICE, IERR) ENDDO ! !* 3.4 Delete slice communicator @@ -2416,7 +2397,7 @@ ENDIF ! CALL MPI_BCAST(ISLICELENGTH, 1, MPI_INTEGER, IPROCS(1), ICOMM, IERR) DO JK = 1, ISLICEHEIGHT - CALL MPI_BCAST(ITOTALSLICE(1,JK), ISLICELENGTH, MPI_PRECISION, & + CALL MPI_BCAST(ITOTALSLICE(1,JK), ISLICELENGTH, MNHREAL_MPI, & IPROCS(1), ICOMM, IERR) ENDDO ! @@ -3294,8 +3275,6 @@ ENDIF !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS -! - USE MODD_VAR_ll, ONLY : MPI_PRECISION ! IMPLICIT NONE ! @@ -3315,7 +3294,7 @@ ENDIF !------------------------------------------------------------------------------- ! IMEANSQRTLOC = SUM(SQRT(PARRAY)) -CALL MPI_ALLREDUCE(IMEANSQRTLOC, PMEANSQRT, 1, MPI_PRECISION, MPI_SUM, NMNH_COMM_WORLD,IINFO) +CALL MPI_ALLREDUCE(IMEANSQRTLOC, PMEANSQRT, 1, MNHREAL_MPI, MPI_SUM, NMNH_COMM_WORLD,IINFO) PMEANSQRT = PMEANSQRT / KSIZEGLB ! !----------------------------------------------------------------------- diff --git a/src/MNH/advection.f90 b/src/MNH/advection.f90 deleted file mode 100644 index 363bd919cf0e3357588eecae9c4120610ff8b6e8..0000000000000000000000000000000000000000 --- a/src/MNH/advection.f90 +++ /dev/null @@ -1,181 +0,0 @@ -!MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier -!MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence -!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt -!MNH_LIC for details. version 1. -!----------------------------------------------------------------- -! ##################### - MODULE MODI_ADVECTION -! ##################### -! -INTERFACE - SUBROUTINE ADVECTION (HUVW_ADV_SCHEME,HMET_ADV_SCHEME,HSV_ADV_SCHEME, & - KLITER, HLBCX, HLBCY,KRR, KSV, KTCOUNT, & - PTSTEP_MET, PTSTEP_SV, & - PUM, PVM, PWM, PTHM, PRM, PTKEM, PSVM, & - PUT, PVT, PWT, PTHT, PRT, PTKET, PSVT, & - PRHODJ, PDXX, PDYY, PDZZ, PDZX, PDZY, & - PRUS,PRVS, PRWS, PRTHS, PRRS, PRTKES, PRSVS ) -! -! -CHARACTER(LEN=6), INTENT(IN) :: HMET_ADV_SCHEME, & ! Control of the - HSV_ADV_SCHEME, & ! scheme applied - HUVW_ADV_SCHEME ! to the selected - ! variables -! -INTEGER, INTENT(IN) :: KLITER ! Iteration number for - ! the MPDATA scheme -! -CHARACTER(LEN=4),DIMENSION(2),INTENT(IN):: HLBCX, HLBCY ! X- and Y-direc LBC -! -INTEGER, INTENT(IN) :: KRR ! Number of moist variables -INTEGER, INTENT(IN) :: KSV ! Number of Scalar Variables -INTEGER, INTENT(IN) :: KTCOUNT ! iteration count -REAL, INTENT(IN) :: PTSTEP_MET ! Effective time step for - ! meteorological scalar variables - ! (depending on advection scheme) -REAL, INTENT(IN) :: PTSTEP_SV ! Effective time step for - ! tracer scalar variables - ! (depending on advection scheme) -REAL, DIMENSION(:,:,:), INTENT(IN) :: PTHM, PTKEM -REAL, DIMENSION(:,:,:,:), INTENT(IN) :: PRM , PSVM - ! Variables at t-dt -REAL, DIMENSION(:,:,:), INTENT(IN) :: PUM, PVM, PWM - ! Variables at t-dt -REAL, DIMENSION(:,:,:), INTENT(IN) :: PUT , PVT , PWT, PRHODJ -REAL, DIMENSION(:,:,:), INTENT(IN) :: PTHT, PTKET -REAL, DIMENSION(:,:,:,:), INTENT(IN) :: PRT , PSVT - ! Variables at t -REAL, DIMENSION(:,:,:), INTENT(IN) :: PDXX,PDYY,PDZZ,PDZX,PDZY - ! metric coefficients -REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PRUS , PRVS , PRWS -REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PRTHS, PRTKES -REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PRRS , PRSVS - ! Sources terms -! -! -END SUBROUTINE ADVECTION -! -END INTERFACE -! -END MODULE MODI_ADVECTION -! ########################################################################## - SUBROUTINE ADVECTION (HUVW_ADV_SCHEME,HMET_ADV_SCHEME,HSV_ADV_SCHEME, & - KLITER, HLBCX, HLBCY,KRR, KSV, KTCOUNT, & - PTSTEP_MET, PTSTEP_SV, & - PUM, PVM, PWM, PTHM, PRM, PTKEM, PSVM, & - PUT, PVT, PWT, PTHT, PRT, PTKET, PSVT, & - PRHODJ, PDXX, PDYY, PDZZ, PDZX, PDZY, & - PRUS,PRVS, PRWS, PRTHS, PRRS, PRTKES, PRSVS ) -! ########################################################################## -! -!!**** *ADVECTION * - routine to call the specialized advection routines -!! -!! PURPOSE -!! ------- -!! The purpose of this routine is to control the advection routines. -!! For that, it is first necessary to compute the metric coefficients -!! and the contravariant components of the momentum. -!! -!!** METHOD -!! ------ -!! The advection of momenta is calculated using a centred (second order) -!! scheme. Three schemes can be used to calculated the advection of a -!! scalar: centred (2nd) (ADVECSCALAR), Flux-Corrected Transport Scalar -!! (FCT_SCALAR) and a Multidimensional Positive Definite Advection Transport -!! Algorithm (MPDATA). -!! Once the scheme is selected, it is applied to the following group of -!! variables: METeorologicals (temperature, water substances, TKE, -!! dissipation TKE) and Scalar Variables. It is possible to select different -!! advection schemes for each group of variables. -!! -!! EXTERNAL -!! -------- -!! Functions MXM,MYM,MZM : computes the averages along the 3 directions -!! CONTRAV : computes the contravariant components. -!! ADVECUVW : computes the advection terms for momentum. -!! ADVECSCALAR : computes the advection terms for scalar fields. -!! ADD3DFIELD_ll : add a field to 3D-list -!! ADVEC_4TH_ORDER : 4th order advection scheme -!! -!! IMPLICIT ARGUMENTS -!! ------------------ -!! NONE -!! -!! REFERENCE -!! --------- -!! Book1 and book2 ( routine ADVECTION ) -!! -!! AUTHOR -!! ------ -!! J.-P. Pinty * Laboratoire d'Aerologie* -!! J.-P. Lafore * Meteo France * -!! -!! MODIFICATIONS -!! ------------- -!! Original 06/07/94 -!! 01/04/95 (Ph. Hereil J. Nicolau) add the model number -!! 23/10/95 (J. Vila and JP Lafore) advection schemes scalar -!! 16/01/97 (JP Pinty) change presentation -!! 30/04/98 (J. Stein P Jabouille) extrapolation for the cyclic -!! case and parallelisation -!! 24/06/99 (P Jabouille) case of NHALO>1 -!! 25/10/05 (JP Pinty) 4th order scheme -!! 24/04/06 (C.Lac) Split scalar and passive -!! tracer routines -!! 08/06 (T.Maric) PPM scheme -!! -!------------------------------------------------------------------------------- -! -!* 0. DECLARATIONS -! ------------ -! -! -! -!------------------------------------------------------------------------------- -! -IMPLICIT NONE -! -!* 0.1 Declarations of dummy arguments : -! -CHARACTER(LEN=6), INTENT(IN) :: HMET_ADV_SCHEME, & ! Control of the - HSV_ADV_SCHEME, & ! scheme applied - HUVW_ADV_SCHEME ! to the selected - ! variables -! -INTEGER, INTENT(IN) :: KLITER ! Iteration number for - ! the MPDATA scheme -! -CHARACTER(LEN=4),DIMENSION(2),INTENT(IN):: HLBCX, HLBCY ! X- and Y-direc LBC -! -INTEGER, INTENT(IN) :: KRR ! Number of moist variables -INTEGER, INTENT(IN) :: KSV ! Number of Scalar Variables -! -INTEGER, INTENT(IN) :: KTCOUNT ! iteration count -REAL, INTENT(IN) :: PTSTEP_MET ! Effective time step for - ! meteorological scalar variables - ! (depending on advection scheme) -REAL, INTENT(IN) :: PTSTEP_SV ! Effective time step for - ! tracer scalar variables - ! (depending on advection scheme) -! -REAL, DIMENSION(:,:,:), INTENT(IN) :: PTHM, PTKEM -REAL, DIMENSION(:,:,:,:), INTENT(IN) :: PRM , PSVM - ! Variables at t-dt -REAL, DIMENSION(:,:,:), INTENT(IN) :: PUM, PVM, PWM - ! Variables at t-dt -REAL, DIMENSION(:,:,:), INTENT(IN) :: PUT , PVT , PWT -REAL, DIMENSION(:,:,:), INTENT(IN) :: PTHT, PTKET, PRHODJ -REAL, DIMENSION(:,:,:,:), INTENT(IN) :: PRT , PSVT - ! Variables at t -REAL, DIMENSION(:,:,:), INTENT(IN) :: PDXX,PDYY,PDZZ,PDZX,PDZY - ! metric coefficients -REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PRUS , PRVS, PRWS -REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PRTHS, PRTKES -REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PRRS , PRSVS - ! Sources terms -! -! -! ROUTINE TO REMOVE -!------------------------------------------------------------------------------- -! -END SUBROUTINE ADVECTION diff --git a/src/MNH/aeroopt_get.f90 b/src/MNH/aeroopt_get.f90 index c58b83a01cf31d2828f9cf3190bea346100b6bd1..485e87b687a9f0bbaf59085bedd73a4dd3d3a4aa 100644 --- a/src/MNH/aeroopt_get.f90 +++ b/src/MNH/aeroopt_get.f90 @@ -1,6 +1,6 @@ -!MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier +!MNH_LIC Copyright 1994-2019 CNRS, Meteo-France and Universite Paul Sabatier !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence -!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt +!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt !MNH_LIC for details. version 1. ! ################### MODULE MODI_AEROOPT_GET @@ -68,7 +68,8 @@ !! ------ !! Benjamin Aouizerats (CNRM/GMEI) !! -!! +! Modifications: +! P. Wautelet 22/02/2019: add kind parameter for CMPLX intrinsics (if not it default to single precision) !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -160,48 +161,48 @@ DO JMDE=1,NMODE_AER - Ri(1,1)=CMPLX(1.80,-7.40E-1) - Ri(1,2)=CMPLX(1.80,-7.40E-1) - Ri(1,3)=CMPLX(1.83,-7.40E-1) - Ri(1,4)=CMPLX(1.88,-6.90E-1) - Ri(1,5)=CMPLX(1.97,-6.80E-1) - Ri(1,6)=CMPLX(2.10,-7.20E-1) - - Ri(2,1)=CMPLX(1.45,-1.00E-3) - Ri(2,2)=CMPLX(1.45,-1.00E-3) - Ri(2,3)=CMPLX(1.45,-1.00E-3) - Ri(2,4)=CMPLX(1.46,-1.00E-3) - Ri(2,5)=CMPLX(1.49,-1.00E-3) - Ri(2,6)=CMPLX(1.42,-1.26E-2) - - Ri(3,1)=CMPLX(1.36,-3.60E-8) - Ri(3,2)=CMPLX(1.34,-3.00E-9) - Ri(3,3)=CMPLX(1.33,-1.80E-8) - Ri(3,4)=CMPLX(1.33,-5.75E-7) - Ri(3,5)=CMPLX(1.31,-1.28E-4) - Ri(3,6)=CMPLX(1.42,-2.54E-1) + Ri(1,1)=CMPLX(1.80,-7.40E-1,kind=kind(Ri(1,1))) + Ri(1,2)=CMPLX(1.80,-7.40E-1,kind=kind(Ri(1,1))) + Ri(1,3)=CMPLX(1.83,-7.40E-1,kind=kind(Ri(1,1))) + Ri(1,4)=CMPLX(1.88,-6.90E-1,kind=kind(Ri(1,1))) + Ri(1,5)=CMPLX(1.97,-6.80E-1,kind=kind(Ri(1,1))) + Ri(1,6)=CMPLX(2.10,-7.20E-1,kind=kind(Ri(1,1))) + + Ri(2,1)=CMPLX(1.45,-1.00E-3,kind=kind(Ri(1,1))) + Ri(2,2)=CMPLX(1.45,-1.00E-3,kind=kind(Ri(1,1))) + Ri(2,3)=CMPLX(1.45,-1.00E-3,kind=kind(Ri(1,1))) + Ri(2,4)=CMPLX(1.46,-1.00E-3,kind=kind(Ri(1,1))) + Ri(2,5)=CMPLX(1.49,-1.00E-3,kind=kind(Ri(1,1))) + Ri(2,6)=CMPLX(1.42,-1.26E-2,kind=kind(Ri(1,1))) + + Ri(3,1)=CMPLX(1.36,-3.60E-8,kind=kind(Ri(1,1))) + Ri(3,2)=CMPLX(1.34,-3.00E-9,kind=kind(Ri(1,1))) + Ri(3,3)=CMPLX(1.33,-1.80E-8,kind=kind(Ri(1,1))) + Ri(3,4)=CMPLX(1.33,-5.75E-7,kind=kind(Ri(1,1))) + Ri(3,5)=CMPLX(1.31,-1.28E-4,kind=kind(Ri(1,1))) + Ri(3,6)=CMPLX(1.42,-2.54E-1,kind=kind(Ri(1,1))) - Ri(4,1)=CMPLX(1.52,-5.00E-4) - Ri(4,2)=CMPLX(1.52,-5.00E-4) - Ri(4,3)=CMPLX(1.52,-5.00E-4) - Ri(4,4)=CMPLX(1.52,-5.00E-4) - Ri(4,5)=CMPLX(1.51,-5.00E-4) - Ri(4,6)=CMPLX(1.35,-1.40E-2) + Ri(4,1)=CMPLX(1.52,-5.00E-4,kind=kind(Ri(1,1))) + Ri(4,2)=CMPLX(1.52,-5.00E-4,kind=kind(Ri(1,1))) + Ri(4,3)=CMPLX(1.52,-5.00E-4,kind=kind(Ri(1,1))) + Ri(4,4)=CMPLX(1.52,-5.00E-4,kind=kind(Ri(1,1))) + Ri(4,5)=CMPLX(1.51,-5.00E-4,kind=kind(Ri(1,1))) + Ri(4,6)=CMPLX(1.35,-1.40E-2,kind=kind(Ri(1,1))) - Ri(5,1)=CMPLX(1.53,-5.00E-3) - Ri(5,2)=CMPLX(1.53,-5.00E-3) - Ri(5,3)=CMPLX(1.53,-6.00E-3) - Ri(5,4)=CMPLX(1.52,-1.30E-2) - Ri(5,5)=CMPLX(1.52,-1.30E-2) - Ri(5,6)=CMPLX(1.45,-5.00E-1) + Ri(5,1)=CMPLX(1.53,-5.00E-3,kind=kind(Ri(1,1))) + Ri(5,2)=CMPLX(1.53,-5.00E-3,kind=kind(Ri(1,1))) + Ri(5,3)=CMPLX(1.53,-6.00E-3,kind=kind(Ri(1,1))) + Ri(5,4)=CMPLX(1.52,-1.30E-2,kind=kind(Ri(1,1))) + Ri(5,5)=CMPLX(1.52,-1.30E-2,kind=kind(Ri(1,1))) + Ri(5,6)=CMPLX(1.45,-5.00E-1,kind=kind(Ri(1,1))) - Ri(6,1)=CMPLX(1.448,-0.00292) - Ri(6,2)=CMPLX(1.448,-0.00292) - Ri(6,3)=CMPLX(1.4777,-0.01897) - Ri(6,4)=CMPLX(1.44023,-0.00116) - Ri(6,5)=CMPLX(1.41163,-0.00106) - Ri(6,6)=CMPLX(1.41163,-0.00106) + Ri(6,1)=CMPLX(1.448,-0.00292,kind=kind(Ri(1,1))) + Ri(6,2)=CMPLX(1.448,-0.00292,kind=kind(Ri(1,1))) + Ri(6,3)=CMPLX(1.4777,-0.01897,kind=kind(Ri(1,1))) + Ri(6,4)=CMPLX(1.44023,-0.00116,kind=kind(Ri(1,1))) + Ri(6,5)=CMPLX(1.41163,-0.00106,kind=kind(Ri(1,1))) + Ri(6,6)=CMPLX(1.41163,-0.00106,kind=kind(Ri(1,1))) ! Computation of the refractive index for the whole aerosol mode according to ! Maxwell-Garnett mixing rule @@ -235,17 +236,18 @@ DO JWVL=1,KSWB !Number of SW wavelengths - eps1(:,:,:)=CMPLX((Ri(1,JWVL)*VBC(:,:,:)+Ri(2,JWVL)*VOC(:,:,:)+VDDST(:,:,:)*Ri(6,JWVL))/(VBC(:,:,:)+VOC(:,:,:)))**2 - Req(:,:,:,JWVL)=sqrt(CMPLX(eps1(:,:,:))) + eps1(:,:,:)=CMPLX((Ri(1,JWVL)*VBC(:,:,:)+Ri(2,JWVL)*VOC(:,:,:)+VDDST(:,:,:)*Ri(6,JWVL))/(VBC(:,:,:)+VOC(:,:,:)), & + kind=kind(eps1(1,1,1)))**2 + Req(:,:,:,JWVL)=sqrt(CMPLX(eps1(:,:,:),kind=kind(eps1(1,1,1)))) WHERE (VEXTR(:,:,:).NE.0. ) eps2(:,:,:)=CMPLX((VSOA(:,:,:)*Ri(2,JWVL)+VH2O(:,:,:)*Ri(3,JWVL)+VAM(:,:,:)*Ri(4,JWVL)& +VSU(:,:,:)*Ri(4,JWVL)+VNI(:,:,:)*Ri(5,JWVL))/& - (VSOA(:,:,:)+VH2O(:,:,:)+VAM(:,:,:)+VSU(:,:,:)+VNI(:,:,:)))**2 + (VSOA(:,:,:)+VH2O(:,:,:)+VAM(:,:,:)+VSU(:,:,:)+VNI(:,:,:)),kind=kind(eps2(1,1,1)))**2 f1(:,:,:)=(VOC(:,:,:)+VBC(:,:,:))/(VSOA(:,:,:)+VH2O(:,:,:)+VAM(:,:,:)+VSU(:,:,:)+VNI(:,:,:)+VOC(:,:,:)+VBC(:,:,:)) eps3(:,:,:)=CMPLX(eps2(:,:,:)*(eps1(:,:,:)+2*eps2(:,:,:)+2*f1(:,:,:)*(eps1(:,:,:)-eps2(:,:,:)))/& - (eps1(:,:,:)+2*eps2(:,:,:)-f1(:,:,:)*(eps1(:,:,:)-eps2(:,:,:)))) - Req(:,:,:,JWVL)=sqrt(CMPLX(eps3(:,:,:))) + (eps1(:,:,:)+2*eps2(:,:,:)-f1(:,:,:)*(eps1(:,:,:)-eps2(:,:,:))),kind=kind(eps3(1,1,1))) + Req(:,:,:,JWVL)=sqrt(CMPLX(eps3(:,:,:),kind=kind(eps3(1,1,1)))) ENDWHERE ENDDO @@ -254,8 +256,8 @@ +ZMASS(:,:,:,8,JMDE)+ZMASS(:,:,:,9,JMDE)+ZMASS(:,:,:,10,JMDE)+ZMASS(:,:,:,11,JMDE)& +ZMASS(:,:,:,12,JMDE)+ZMASS(:,:,:,13,JMDE)+ZMASS(:,:,:,14,JMDE)+ZMASS(:,:,:,15,JMDE)& +ZMASS(:,:,:,16,JMDE) - PII(:,:,:,:) = aimag(CMPLX(Req(:,:,:,:))) - PIR(:,:,:,:) = real(CMPLX(Req(:,:,:,:))) + PII(:,:,:,:) = aimag(CMPLX(Req(:,:,:,:),kind=kind(PII(1,1,1,1)))) + PIR(:,:,:,:) = real( CMPLX(Req(:,:,:,:),kind=kind(PIR(1,1,1,1)))) !Get aerosol optical properties from look up tables diff --git a/src/MNH/bhmie.f90 b/src/MNH/bhmie.f90 index 5e1d0e340da78c6e97a3b1ad2262b172155834c4..8aeb78f034168f8f402e5f1edb9e4c9f96cd92d6 100644 --- a/src/MNH/bhmie.f90 +++ b/src/MNH/bhmie.f90 @@ -63,7 +63,8 @@ END MODULE MODI_BHMIE !! portable. In event that portable version is !! needed, use src/bhmie_f77.f !! 93/06/01 (BTD): Changed AMAX1 to generic function MAX -!! 22/01/2019 (P.Wautelet): correct kind of complex datatype +! P. Wautelet 22/01/2019: correct kind of complex datatype +! P. Wautelet 22/02/2019: add kind parameter for CMPLX intrinsics (if not it default to single precision) !!*********************************************************************** ! !* 0. DECLARATIONS @@ -151,11 +152,11 @@ ZPSI0 = COS(PSIZE_PARAM) ZPSI1 = SIN(PSIZE_PARAM) ZCHI0 =-SIN(PSIZE_PARAM) ZCHI1 = COS(PSIZE_PARAM) -ZZXI1 = CMPLX(ZPSI1,-ZCHI1) +ZZXI1 = CMPLX(ZPSI1,-ZCHI1,kind=kind(ZZXI1)) ZONE = -1. ! -ZZAN1 = CMPLX(0.0,0.0) -ZZBN1 = CMPLX(0.0,0.0) +ZZAN1 = CMPLX(0.0d0,0.0d0,kind=kind(ZZAN1)) +ZZBN1 = CMPLX(0.0d0,0.0d0,kind=kind(ZZBN1)) DO J = 1,ISTOP ZEN = FLOAT(J) ZFN = (2.0*ZEN+1.0)/(ZEN*(ZEN+1.0)) @@ -167,7 +168,7 @@ DO J = 1,ISTOP ! ZPSI = (2.0*ZEN-1.0)*ZPSI1/PSIZE_PARAM-ZPSI0 ZCHI = (2.0*ZEN-1.0)*ZCHI1/PSIZE_PARAM-ZCHI0 - ZZXI = CMPLX(ZPSI,-ZCHI) + ZZXI = CMPLX(ZPSI,-ZCHI,kind=kind(ZZXI)) ! !*** Compute AN and BN: ! @@ -206,7 +207,7 @@ DO J = 1,ISTOP ZPSI1 = ZPSI ZCHI0 = ZCHI1 ZCHI1 = ZCHI - ZZXI1 = CMPLX(ZPSI1,-ZCHI1) + ZZXI1 = CMPLX(ZPSI1,-ZCHI1,kind=kind(ZZXI1)) ! !*** Compute pi_n for next value of n ! For each angle J, compute pi_n+1 diff --git a/src/MNH/bhmie_bhcoat.f90 b/src/MNH/bhmie_bhcoat.f90 index 6f315742c24959b912f69f0b1abe4b63e1cb555c..c235f2ab1bbdb94b9b7aa90b53c1f8207c08033a 100644 --- a/src/MNH/bhmie_bhcoat.f90 +++ b/src/MNH/bhmie_bhcoat.f90 @@ -1,6 +1,6 @@ -!MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier +!MNH_LIC Copyright 1994-2019 CNRS, Meteo-France and Universite Paul Sabatier !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence -!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt +!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt !MNH_LIC for details. version 1. ! ######################## MODULE MODI_BHMIE_BHCOAT @@ -46,6 +46,7 @@ END MODULE MODI_BHMIE_BHCOAT !! !! History: !! 92/11/24 (BTD) Explicit declaration of all variables +! P. Wautelet 22/02/2019: add kind parameter for CMPLX intrinsics (if not it default to single precision) !!*********************************************************************** ! !* 0. DECLARATIONS @@ -114,8 +115,8 @@ ZPSI0Y = COS(PSIZE_PARAM_COAT) ZPSI1Y = SIN(PSIZE_PARAM_COAT) ZCHI0Y =-SIN(PSIZE_PARAM_COAT) ZCHI1Y = COS(PSIZE_PARAM_COAT) -ZZXI0Y = CMPLX(ZPSI0Y,-ZCHI0Y) -ZZXI1Y = CMPLX(ZPSI1Y,-ZCHI1Y) +ZZXI0Y = CMPLX(ZPSI0Y,-ZCHI0Y,kind=kind(ZZXI0Y)) +ZZXI1Y = CMPLX(ZPSI1Y,-ZCHI1Y,kind=kind(ZZXI1Y)) ! ZZCHI0Y2 =-SIN(ZZY2) ZZCHI1Y2 = COS(ZZY2) @@ -130,7 +131,7 @@ DO JJ = 1,ISTOP ZEN = FLOAT(JJ) ZPSIY = (2.0*ZEN-1.)*ZPSI1Y/PSIZE_PARAM_COAT - ZPSI0Y ZCHIY = (2.0*ZEN-1.)*ZCHI1Y/PSIZE_PARAM_COAT - ZCHI0Y - ZZXIY = CMPLX(ZPSIY,-ZCHIY) + ZZXIY = CMPLX(ZPSIY,-ZCHIY,kind=kind(ZZXIY)) ! ZZD1Y2 = 1.0/(ZEN/ZZY2-ZZD0Y2) - ZEN/ZZY2 ! @@ -179,7 +180,7 @@ DO JJ = 1,ISTOP ZPSI1Y = ZPSIY ZCHI0Y = ZCHI1Y ZCHI1Y = ZCHIY - ZZXI1Y = CMPLX(ZPSI1Y,-ZCHI1Y) + ZZXI1Y = CMPLX(ZPSI1Y,-ZCHI1Y,kind=kind(ZZXI1Y)) ! ZZCHI0X2 = ZZCHI1X2 ZZCHI1X2 = ZZCHIX2 diff --git a/src/MNH/bl89.f90 b/src/MNH/bl89.f90 index 6835f449241cc58aed7328184012f2d70bd5036c..860afcf7985344f55f85f9b8efc2314ceb658774 100644 --- a/src/MNH/bl89.f90 +++ b/src/MNH/bl89.f90 @@ -81,6 +81,7 @@ USE MODD_CONF, ONLY: CPROGRAM USE MODD_CST USE MODD_CTURB USE MODD_PARAMETERS +use modd_precision, only: MNHREAL ! ! IMPLICIT NONE @@ -347,13 +348,8 @@ DO JK=IKTB,IKTE !* 7. final mixing length ! DO J1D=1,IIU*IJU -#if (MNH_REAL == 8) - ZLWORK1=MAX(ZLMDN(J1D,JK),1.E-10) - ZLWORK2=MAX(ZLWORK(J1D),1.E-10) -#else - ZLWORK1=MAX(ZLMDN(J1D,JK),1.D-10) - ZLWORK2=MAX(ZLWORK(J1D),1.D-10) -#endif + ZLWORK1=MAX(ZLMDN(J1D,JK),1.E-10_MNHREAL) + ZLWORK2=MAX(ZLWORK(J1D),1.E-10_MNHREAL) ZPOTE = ZLWORK1 / ZLWORK2 ZLWORK2=1.d0 + ZPOTE**(2./3.) ZLM(J1D,JK) = Z2SQRT2*ZLWORK1/(ZLWORK2*SQRT(ZLWORK2)) diff --git a/src/MNH/ch_ph_polyroot.f90 b/src/MNH/ch_ph_polyroot.f90 index c041941588f47f8666268289c14d087e71435b1e..1ae312322653d95160aca63c61bb343769fc91e3 100644 --- a/src/MNH/ch_ph_polyroot.f90 +++ b/src/MNH/ch_ph_polyroot.f90 @@ -1,4 +1,4 @@ -!MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier +!MNH_LIC Copyright 2007-2019 CNRS, Meteo-France and Universite Paul Sabatier !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence !MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt !MNH_LIC for details. version 1. @@ -34,6 +34,7 @@ END MODULE MODI_CH_PH_POLYROOT !! MODIFICATIONS !! ------------- !! Original 26/03/07 +! P. Wautelet 22/02/2019: add kind parameter for CMPLX intrinsics (if not it default to single precision) !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -66,10 +67,10 @@ ZZDEFLATED_COEF(:) = PPCOEF(:) ! First estimate of the roots ! DO JJ=KORDER,1,-1 - ZROOT = CMPLX(0.0,0.0) + ZROOT = CMPLX(0.0d0,0.0d0,kind=kind(ZROOT)) CALL LAGUERRE(ZZDEFLATED_COEF, JJ, ZROOT, IITER) IF( ABS(AIMAG(ZROOT))<=2.0*ZEPS**(2*ABS(REAL(ZROOT))) ) THEN - ZROOT = CMPLX(REAL(ZROOT),0.0) + ZROOT = CMPLX(REAL(ZROOT,kind=kind(ZROOT)),0.0d0,kind=kind(ZROOT)) END IF PPALL_ROOTS(JJ) = ZROOT ZB = ZZDEFLATED_COEF(JJ+1) @@ -125,8 +126,8 @@ CONTAINS IITS = JITER ZZB = PA(IM+1) ZERR = ABS(ZZB) - ZZD = CMPLX(0.0,0.0) - ZZF = CMPLX(0.0,0.0) + ZZD = CMPLX(0.0d0,0.0d0,kind=kind(ZZD)) + ZZF = CMPLX(0.0d0,0.0d0,kind=kind(ZZF)) ZABX = ABS(PX) DO JJ=IM,1,-1 ZZF = PX*ZZF+ZZD @@ -154,7 +155,7 @@ CONTAINS IF(MAX(ZABP,ZABM) > 0.0) THEN ZZDX = FLOAT(IM)/ZZGP ELSE - ZZDX = EXP(CMPLX(LOG(1.0+ZABX),FLOAT(JITER))) + ZZDX = EXP(CMPLX(LOG(1.0+ZABX),REAL(JITER,kind=kind(ZZDX)),kind=kind(ZZDX))) END IF END IF ZZX1 = PX-ZZDX diff --git a/src/MNH/ch_solve_ph.f90 b/src/MNH/ch_solve_ph.f90 index f9b994cdf4c09e497aaa3dc9d9e887cb9bbd09c0..5662675448f93e31415070fdd57f08e60b6e1b5e 100644 --- a/src/MNH/ch_solve_ph.f90 +++ b/src/MNH/ch_solve_ph.f90 @@ -1,12 +1,8 @@ -!MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier +!MNH_LIC Copyright 2007-2019 CNRS, Meteo-France and Universite Paul Sabatier !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence -!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt +!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt !MNH_LIC for details. version 1. !----------------------------------------------------------------- -!--------------- special set of characters for RCS information -!----------------------------------------------------------------- -! $Source: /home//MESONH/MNH-V4-6-5/src/SRC_CHIMAQ/ch_solve_ph.f90 -!----------------------------------------------------------------- !! ####################### MODULE MODI_CH_SOLVE_PH !! ####################### @@ -63,6 +59,7 @@ END MODULE MODI_CH_SOLVE_PH !! M. Leriche 16/11/07 add sulfuric acid !! J.-P. Pinty 11/07/07 add CO3-- and SO3-- !! M. Leriche 05/06/08 add sum of ions +! P. Wautelet 22/02/2019: add kind parameter for CMPLX intrinsics (if not it default to single precision) !! !! EXTERNAL !! -------- @@ -217,9 +214,7 @@ ZCOEFS(:,2) = ZCOEFS(:,2) -2.0*(K11*K21*K3*KW*K22*(C1*K12+K12*C2)) ! ALLOCATE(ZZCOEFS(KLW,IORDER+1)) ALLOCATE(ZZROOTS(KLW,IORDER)) -DO JJ=1,IORDER+1 - ZZCOEFS(:,JJ) = CMPLX(ZCOEFS(:,JJ),0.0) -END DO +ZZCOEFS(:,:) = CMPLX(ZCOEFS(:,:),0.0d0,kind=kind(ZCOEFS(1,1))) GPOLISH=.TRUE. ! DO JI = 1, KLW diff --git a/src/MNH/clustering.f90 b/src/MNH/clustering.f90 index a42562bbb7640e36ba3f9d2f2cf0702691bbba1d..882de5a753ef9996e2b6b0aaed370d1d39bfd646 100644 --- a/src/MNH/clustering.f90 +++ b/src/MNH/clustering.f90 @@ -1,3 +1,8 @@ +!MNH_LIC Copyright 2013-2019 CNRS, Meteo-France and Universite Paul Sabatier +!MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence +!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt +!MNH_LIC for details. version 1. +!----------------------------------------------------------------- ! ################ MODULE MODI_CLUSTERING ! ################ @@ -60,13 +65,13 @@ END MODULE MODI_CLUSTERING ! !* 0. DECLARATIONS ! ------------ - USE MODD_MPIF , ONLY : MPI_INTEGER +USE MODD_ARGSLIST_ll, ONLY: LIST_ll +USE MODD_DYN_n, ONLY: XDXHATM, XDYHATM +USE MODD_MPIF , ONLY: MPI_INTEGER +use MODD_PRECISION, only: MNHREAL_MPI +USE MODD_VAR_ll, ONLY: NPROC, IP, NMNH_COMM_WORLD +! USE MODE_ll -USE MODD_ARGSLIST_ll, ONLY : LIST_ll -USE MODD_VAR_ll, ONLY : MPI_PRECISION, NPROC, IP, NMNH_COMM_WORLD -USE MODD_DYN_n, ONLY : XDXHATM, XDYHATM -!USE& -! MPI ! IMPLICIT NONE ! @@ -670,7 +675,7 @@ CALL MPI_ALLGATHERV(ILOCLISTLVL2, ICPT, MPI_INTEGER, IGLBLISTLVL, ICLUSNBR, IPRO NMNH_COMM_WORLD, INFO) CALL MPI_ALLGATHERV(ILOCLISTSEC2, ICPT, MPI_INTEGER, IGLBLISTSEC, ICLUSNBR, IPROCDPL, MPI_INTEGER, & NMNH_COMM_WORLD, INFO) -CALL MPI_ALLGATHERV(ZLOCLISTFLD2, ICPT, MPI_PRECISION, ZGLBLISTFLD, ICLUSNBR, IPROCDPL, MPI_PRECISION, & +CALL MPI_ALLGATHERV(ZLOCLISTFLD2, ICPT, MNHREAL_MPI, ZGLBLISTFLD, ICLUSNBR, IPROCDPL, MNHREAL_MPI, & NMNH_COMM_WORLD, INFO) ! !* 6.3 EACH PROC COMPUTES GLOBAL SECTIONS AND FIELD AVERAGE OF ITS CLUSTERS diff --git a/src/MNH/diag.f90 b/src/MNH/diag.f90 index b9feff89e8ae375a275254a369052cda6d5bded6..93b355bd51876b3a7c9ae170af87d4fb8d0bb0af 100644 --- a/src/MNH/diag.f90 +++ b/src/MNH/diag.f90 @@ -90,6 +90,7 @@ !! 11/2017 (D. Ricard, P. Marquet) add diagnostics for THETAS ! P. Wautelet 07/02/2019: force TYPE to a known value for IO_File_add2list ! P. Wautelet 11/02/2019: added missing use of MODI_CH_MONITOR_n +! P. Wautelet 28/03/2019: use MNHTIME for time measurement variables !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -125,6 +126,7 @@ USE MODD_PARAM_LIMA, ONLY: LLIMA_DIAG USE MODD_PARAM_MFSHALL_n USE MODD_PARAM_n USE MODD_PARAM_RAD_n +use modd_precision, only: LFIINT, MNHTIME USE MODD_PROFILER_n USE MODD_RADAR USE MODD_RADIATIONS_n @@ -184,10 +186,10 @@ CHARACTER (LEN=4) :: YTURB ! initial flag to call to turbulence schemes CHARACTER (LEN=40) :: YFMT,YFMT2! format for cpu analysis printing INTEGER :: IRESP ! return code in FM routines INTEGER :: ILUOUT0 ! Logical unit number for the output listing -REAL*8,DIMENSION(2) :: ZTIME0,ZTIME1,ZTIME2,ZRAD,ZDCONV,ZSHADOWS,ZGROUND, & - ZTRACER,ZDRAG,ZTURB,ZMAFL,ZCHEM,ZTIME_BU ! CPU time -REAL*8,DIMENSION(2) :: ZSTART,ZINIT,ZWRIT,ZBALL,ZPHYS,ZSURF,ZWRITS,ZTRAJ ! storing variables -INTEGER(KIND=LFI_INT) :: INPRAR ! number of articles predicted in the LFIFM file +REAL(kind=MNHTIME), DIMENSION(2) :: ZTIME0, ZTIME1, ZTIME2, ZRAD, ZDCONV, ZSHADOWS, ZGROUND, & + ZTRACER, ZDRAG, ZTURB, ZMAFL, ZCHEM, ZTIME_BU ! CPU times +REAL(kind=MNHTIME), DIMENSION(2) :: ZSTART, ZINIT, ZWRIT, ZBALL, ZPHYS, ZSURF, ZWRITS, ZTRAJ ! storing variables +INTEGER(KIND=LFIINT) :: INPRAR ! number of articles predicted in the LFIFM file LOGICAL :: GCLOSE_OUT = .FALSE. ! conditional closure of the OUTPUT FM-file INTEGER :: ISTEPBAL ! loop indice for balloons and aircraft INTEGER :: ILUNAM ! Logical unit numbers for the namelist file @@ -675,18 +677,18 @@ END IF !* call to physics monitor ! GCLOSE_OUT=.TRUE. -ZRAD=0. -ZSHADOWS=0. -ZDCONV=0. -ZGROUND=0. -ZTRACER=0. -ZTURB=0. -ZDRAG=0. -ZMAFL=0. -ZCHEM=0. -XTIME_LES=0. -XTIME_LES_BU_PROCESS=0. -XTIME_BU_PROCESS=0. +ZRAD = 0.0_MNHTIME +ZSHADOWS = 0.0_MNHTIME +ZDCONV = 0.0_MNHTIME +ZGROUND = 0.0_MNHTIME +ZTRACER = 0.0_MNHTIME +ZTURB = 0.0_MNHTIME +ZDRAG = 0.0_MNHTIME +ZMAFL = 0.0_MNHTIME +ZCHEM = 0.0_MNHTIME +XTIME_LES = 0.0_MNHTIME +XTIME_LES_BU_PROCESS = 0.0_MNHTIME +XTIME_BU_PROCESS = 0.0_MNHTIME CALL PHYS_PARAM_n(1,TOUTDATAFILE,GCLOSE_OUT, & ZRAD,ZSHADOWS,ZDCONV,ZGROUND,ZMAFL,ZDRAG, & ZTURB,ZTRACER, ZTIME_BU,ZWETDEPAER,GMASKkids,GCLOUD_ONLY) diff --git a/src/MNH/diagnos_les_mf.f90 b/src/MNH/diagnos_les_mf.f90 index 2f2cecafcc1a1a9b72075a2d2983090f00d4c35a..31fa13da74a1fc2c0444f1495a15a465801a4214 100644 --- a/src/MNH/diagnos_les_mf.f90 +++ b/src/MNH/diagnos_les_mf.f90 @@ -1,7 +1,8 @@ -!MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier +!MNH_LIC Copyright 2009-2019 CNRS, Meteo-France and Universite Paul Sabatier !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence -!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt +!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt !MNH_LIC for details. version 1. +!----------------------------------------------------------------- ! ########################### MODULE MODI_DIAGNOS_LES_MF ! ########################### @@ -20,10 +21,10 @@ INTERFACE ! !* 1.1 Declaration of Arguments ! -! +use modd_precision, only: MNHTIME ! INTEGER, INTENT(IN) :: KIU, KJU, KKU ! 3D grid size -REAL*8,DIMENSION(2), INTENT(OUT) :: PTIME_LES +REAL(kind=MNHTIME), DIMENSION(2), INTENT(OUT) :: PTIME_LES REAL, DIMENSION(:,:), INTENT(IN) :: PTHL_UP,PRT_UP,PRV_UP,& PRC_UP,PRI_UP ! updraft properties REAL, DIMENSION(:,:), INTENT(IN) :: PU_UP, PV_UP @@ -74,20 +75,23 @@ END MODULE MODI_DIAGNOS_LES_MF !! AUTHOR !! ------ !! J.pergaud -!! V.Masson : Optimization 09/2010 +! +! Modifications: +! V. Masson 09/2010: Optimization +! P. Wautelet 28/03/2019: use MNHTIME for time measurement variables !! -------------------------------------------------------------------------- ! !* 0. DECLARATIONS ! ------------ ! USE MODD_LES +use modd_precision, only: MNHTIME +! +USE MODE_MNH_TIMING ! USE MODI_LES_VER_INT USE MODI_LES_MEAN_ll USE MODI_SHUMAN -!JUANZ -USE MODE_MNH_TIMING -!JUANZ ! IMPLICIT NONE @@ -95,7 +99,7 @@ IMPLICIT NONE ! ! INTEGER, INTENT(IN) :: KIU, KJU, KKU ! 3D grid size -REAL*8,DIMENSION(2), INTENT(OUT) :: PTIME_LES +REAL(kind=MNHTIME), DIMENSION(2), INTENT(OUT) :: PTIME_LES REAL, DIMENSION(:,:), INTENT(IN) :: PTHL_UP,PRT_UP,PRV_UP,& PRC_UP,PRI_UP ! updraft properties REAL, DIMENSION(:,:), INTENT(IN) :: PU_UP, PV_UP @@ -119,7 +123,7 @@ REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZTHLUP_MF_LES,ZRTUP_MF_LES, & ZWUP_MF_LES,ZFRACUP_MF_LES, & ZTHVUP_MF_LES,ZRVUP_MF_LES, & ZRIUP_MF_LES -REAL*8,DIMENSION(2) :: ZTIME1, ZTIME2 +REAL(kind=MNHTIME), DIMENSION(2) :: ZTIME1, ZTIME2 !------------------------------------------------------------------------ ! diff --git a/src/MNH/error_on_temperature.f90 b/src/MNH/error_on_temperature.f90 index 50b3d4d1865f438d30a1d75ddbc94f40eb6ef31c..bcdbb9aaeb8034aa6d4bf020fef48fdc7b097cc4 100644 --- a/src/MNH/error_on_temperature.f90 +++ b/src/MNH/error_on_temperature.f90 @@ -1,6 +1,6 @@ -!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier +!MNH_LIC Copyright 1996-2019 CNRS, Meteo-France and Universite Paul Sabatier !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence -!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt +!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt !MNH_LIC for details. version 1. !----------------------------------------------------------------- ! ######spl @@ -60,6 +60,7 @@ END MODULE MODI_ERROR_ON_TEMPERATURE !! 26/08/97 (V. Masson) call to new linear vertical !! interpolation routine !! Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O +! P. Wautelet 22/02/2019: replace Hollerith edit descriptor (deleted from Fortran 95 standard) !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -198,7 +199,7 @@ WRITE(ILUOUT0,*) '' WRITE(ILUOUT0,*) 'Temperature RMS between begin and end of PREP_REAL_CASE :' WRITE(ILUOUT0,*) '' DO JP=20,1,-1 - WRITE(ILUOUT0,'(6Hlevel ,F5.0,7H hPa : ,F5.3,2H K)') ZPLEVELS(JP)/100.,ZTRMS(JP) + WRITE(ILUOUT0,'( "level", F5.0, " hPa : ", F5.3, " K")') ZPLEVELS(JP)/100.,ZTRMS(JP) END DO WRITE(ILUOUT0,*) '' ! diff --git a/src/MNH/extend_grid_parameter_mnh.f90 b/src/MNH/extend_grid_parameter_mnh.f90 index 09d06299039e54a684cf25c7ef023918ebc132f2..3d5fc09a13966b120e77dbb6db3755d0e3a69ed0 100644 --- a/src/MNH/extend_grid_parameter_mnh.f90 +++ b/src/MNH/extend_grid_parameter_mnh.f90 @@ -1,7 +1,8 @@ -!MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier +!MNH_LIC Copyright 2015-2019 CNRS, Meteo-France and Universite Paul Sabatier !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence -!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt +!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt !MNH_LIC for details. version 1. +!----------------------------------------------------------------- ! ############################################################# SUBROUTINE EXTEND_GRID_PARAMETERX1_MNH(HGRID,HREC,KDIM,KSIZE,KIMAX,KJMAX,PFIELD,PFIELD_EXTEND) ! ############################################################# @@ -16,10 +17,13 @@ ! 07/2015 (M.Moge) initializing ZY and ZY to zero ! 08/2015 (M.Moge) bug fix in the call to UPDATE_NHALO1D : IIMAX_ll instead of IJMAX_ll ! -USE MODD_IO_SURF_MNH, ONLY : NHALO -USE MODD_VAR_ll, ONLY : NPROC, IP, MPI_PRECISION, NMNH_COMM_WORLD +USE MODD_IO_SURF_MNH, ONLY: NHALO USE MODD_MPIF -USE MODE_TOOLS_ll, ONLY : INTERSECTION, LWEST_ll, LEAST_ll, LNORTH_ll, LSOUTH_ll +use MODD_PRECISION, only: MNHREAL_MPI +USE MODD_VAR_ll, ONLY: NPROC, IP, NMNH_COMM_WORLD +! +USE MODE_TOOLS_ll, ONLY: INTERSECTION, LWEST_ll, LEAST_ll, LNORTH_ll, LSOUTH_ll +! USE MODI_UPDATE_NHALO1D ! IMPLICIT NONE @@ -76,7 +80,7 @@ IF (HREC=='XX' .OR. HREC=='DX') THEN IF (NIMAX>1) ZDX = PFIELD(2) - PFIELD(1) IF (NIMAX==1) ZDX = PFIELD(1) ! in 1D conf, one assumes that grid ! is located between X=DX/2 and X=3DX/2 - CALL MPI_BCAST(ZDX, 1, MPI_PRECISION, 0, NMNH_COMM_WORLD, IINFO_ll) + CALL MPI_BCAST(ZDX, 1, MNHREAL_MPI, 0, NMNH_COMM_WORLD, IINFO_ll) IF( LWEST_ll() ) THEN DO JI=NHALO,1,-1 ZX(JI) = ZX(JI+1) - ZDX @@ -119,7 +123,7 @@ ELSEIF (HREC=='YY' .OR. HREC=='DY') THEN IF (NJMAX>1) ZDY = PFIELD(1+KIMAX) - PFIELD(1) IF (NJMAX==1) ZDY = PFIELD(1) ! in 1D or 2D conf, one assumes that grid ! is located between Y=DY/2 and Y=3DY/2 - CALL MPI_BCAST(ZDY, 1, MPI_PRECISION, 0, NMNH_COMM_WORLD, IINFO_ll) + CALL MPI_BCAST(ZDY, 1, MNHREAL_MPI, 0, NMNH_COMM_WORLD, IINFO_ll) IF( LSOUTH_ll() ) THEN DO JJ=NHALO,1,-1 ZY(JJ) = ZY(JJ+1) - ZDY diff --git a/src/MNH/fft.f b/src/MNH/fft.f index 92b071484c38a33cc41395b80eef96731cb1f94a..b0fa5e744f3412393c4203053420bed13b5b414d 100644 --- a/src/MNH/fft.f +++ b/src/MNH/fft.f @@ -1,12 +1,10 @@ -!MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier +!MNH_LIC Copyright 1994-2019 CNRS, Meteo-France and Universite Paul Sabatier !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence -!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt +!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt !MNH_LIC for details. version 1. !----------------------------------------------------------------- -!--------------- special set of characters for RCS information -!----------------------------------------------------------------- -! $Source$ $Revision$ -! MASDEV4_7 solver 2006/05/18 13:07:25 +! Modifications: +! P. Wautelet 22/02/2019: replace Hollerith edit descriptor (deleted from Fortran 95 standard) !----------------------------------------------------------------- SUBROUTINE SET99(TRIGS,IFAX,N) IMPLICIT LOGICAL (L) @@ -55,7 +53,7 @@ C LOOK FOR SIXES FIRST, STORE FACTORS IN DESCENDING ORDER IF (IFAC.GT.1) GO TO 20 C WRITE(6,40) N - 40 FORMAT(4H1N =,I4,27H - CONTAINS ILLEGAL FACTORS) + 40 FORMAT('1N =', I4, ' - CONTAINS ILLEGAL FACTORS') RETURN C C NOW REVERSE ORDER OF FACTORS diff --git a/src/MNH/flash_geom_elec.f90 b/src/MNH/flash_geom_elec.f90 index 0cfaf8ddd18a7635f618bfc1efdd52aaf9b20835..d2a5b05e6522074b2500c6902501bc488b29c4e7 100644 --- a/src/MNH/flash_geom_elec.f90 +++ b/src/MNH/flash_geom_elec.f90 @@ -92,8 +92,9 @@ END MODULE MODI_FLASH_GEOM_ELEC_n !! J.Escobar : 20/06/2018 : Correction of computation of global index I8VECT !! J.Escobar : 10/12/2018 : // Correction , mpi_bcast CG & CG_POS parameter !! & initialize INBLIGHT on all proc for filling/saving AREA* arrays -!! Philippe Wautelet: 10/01/2019: use NEWUNIT argument of OPEN -!! Philippe Wautelet: 22/01/2019: use standard FLUSH statement instead of non standard intrinsics!! +! P. Wautelet 10/01/2019: use NEWUNIT argument of OPEN +! P. Wautelet 22/01/2019: use standard FLUSH statement instead of non standard intrinsics!! +! P. Wautelet 22/02/2019: use MOD intrinsics with same kind for all arguments (to respect Fortran standard) ! P. Wautelet 10/04/2019: replace ABORT and STOP calls by Print_msg !------------------------------------------------------------------------------- ! @@ -119,6 +120,7 @@ USE MODD_LMA_SIMULATOR USE MODD_METRICS_n, ONLY: XDXX, XDYY, XDZZ ! in linox_production USE MODD_NSV, ONLY: NSV_ELECBEG, NSV_ELECEND, NSV_ELEC USE MODD_PARAMETERS, ONLY: JPHEXT, JPVEXT +use MODD_PRECISION, only: MNHREAL_MPI USE MODD_RAIN_ICE_DESCR, ONLY: XLBR, XLBEXR, XLBS, XLBEXS, & XLBG, XLBEXG, XLBH, XLBEXH, & XRTMIN @@ -852,9 +854,9 @@ ENDIF CALL MPPDB_CHECK3DM("flash:: 5. ZFLASH(IL)",PRECISION,& ZFLASH(:,:,:,IL)) ! - CALL MPI_BCAST (GNEW_FLASH(IL),1, MPI_LOGICAL, IPROC_TRIG(IL), & + CALL MPI_BCAST (GNEW_FLASH(IL),1, MPI_LOGICAL, IPROC_TRIG(IL), & NMNH_COMM_WORLD, IERR) - CALL MPI_BCAST (ZEM_TRIG(IL), 1, MPI_PRECISION, IPROC_TRIG(IL), & + CALL MPI_BCAST (ZEM_TRIG(IL), 1, MNHREAL_MPI, IPROC_TRIG(IL), & NMNH_COMM_WORLD, IERR) CALL MPI_BCAST (INB_FL_REAL(IL), 1, MPI_INTEGER, IPROC_TRIG(IL), & NMNH_COMM_WORLD, IERR) @@ -1689,11 +1691,11 @@ DO IL = 1, INB_CELL ! ---------------------------- ! CALL MPI_BCAST (ZEM_TRIG(IL), 1, & - MPI_PRECISION, IPROC_TRIG(IL), NMNH_COMM_WORLD, IERR) - CALL MPI_BCAST (ISEG_LOC(:,IL), 3*SIZE(PRT,3), & + MNHREAL_MPI, IPROC_TRIG(IL), NMNH_COMM_WORLD, IERR) + CALL MPI_BCAST (ISEG_LOC(:,IL), 3*SIZE(PRT,3), & MPI_INTEGER, IPROC_TRIG(IL), NMNH_COMM_WORLD, IERR) CALL MPI_BCAST (ZCOORD_TRIG(:,IL), 3, & - MPI_PRECISION, IPROC_TRIG(IL), NMNH_COMM_WORLD, IERR) + MNHREAL_MPI, IPROC_TRIG(IL), NMNH_COMM_WORLD, IERR) CALL MPI_BCAST (ISIGNE_EZ(IL), 1, & MPI_INTEGER, IPROC_TRIG(IL), NMNH_COMM_WORLD, IERR) ! @@ -1959,7 +1961,7 @@ DO IL = 1, INB_CELL END DO END IF ! - CALL MPI_BCAST (ZSIGN(IL), 1, MPI_PRECISION, IPROC_TRIG(IL), & + CALL MPI_BCAST (ZSIGN(IL), 1, MNHREAL_MPI, IPROC_TRIG(IL), & NMNH_COMM_WORLD, IERR) END DO ! @@ -2192,7 +2194,7 @@ DO WHILE (IM .LE. IDELTA_IND .AND. ISTOP .NE. 1) IF (IRANK_LL(IORDER_LL(ICHOICE)) .EQ. IPROC) THEN JK = 1 + (I8VECT_LL(ICHOICE)-1) / ( IJU_ll*IIU_ll ) JJ = 1 + ( (I8VECT_LL(ICHOICE)-1) - IJU_ll*IIU_ll*(JK-1) ) / IIU_ll - IYOR +1 - JI = 1 + MOD((I8VECT_LL(ICHOICE)-1) , IIU_ll) - IXOR +1 + JI = 1 + MOD((I8VECT_LL(ICHOICE)-1) , int(IIU_ll,kind(I8VECT_LL(1)))) - IXOR +1 !print*,"OUT => I8VECT_LL(ICHOICE)=",I8VECT_ll(ICHOICE),JI,JJ,JK,ICHOICE ZFLASH(JI,JJ,JK,IL) = 2. END IF @@ -2307,8 +2309,8 @@ IF (IPROC .EQ. 0) THEN INBSEG_PROC_X3(:) = 3 * INBSEG_PROC(:) END IF ! -CALL MPI_GATHERV (ZSEND, 3*INSEGPROC, MPI_PRECISION, ZRECV, INBSEG_PROC_X3, & - IDECAL3, MPI_PRECISION, 0, NMNH_COMM_WORLD, IERR) +CALL MPI_GATHERV (ZSEND, 3*INSEGPROC, MNHREAL_MPI, ZRECV, INBSEG_PROC_X3, & + IDECAL3, MNHREAL_MPI, 0, NMNH_COMM_WORLD, IERR) ! IF (IPROC .EQ. 0) THEN ZCOORD_SEG_ALL(1:3*INSEGCELL,IL) = ZRECV(1:3*INSEGCELL) @@ -2380,15 +2382,15 @@ IF (LLMA) THEN ! ALLOCATE (ZRECV(INSEGCELL)) ! - CALL MPI_GATHERV (ZLMAPOS, INSEGPROC, MPI_PRECISION, ZRECV, INBSEG_PROC, & - IDECAL, MPI_PRECISION, 0, NMNH_COMM_WORLD, IERR) + CALL MPI_GATHERV (ZLMAPOS, INSEGPROC, MNHREAL_MPI, ZRECV, INBSEG_PROC, & + IDECAL, MNHREAL_MPI, 0, NMNH_COMM_WORLD, IERR) ! IF (IPROC .EQ. 0) THEN ZLMA_NEUT_POS(1:INSEGCELL,IL) = ZRECV(1:INSEGCELL) END IF ! - CALL MPI_GATHERV (ZLMANEG, INSEGPROC, MPI_PRECISION, ZRECV, INBSEG_PROC, & - IDECAL, MPI_PRECISION, 0, NMNH_COMM_WORLD, IERR) + CALL MPI_GATHERV (ZLMANEG, INSEGPROC, MNHREAL_MPI, ZRECV, INBSEG_PROC, & + IDECAL, MNHREAL_MPI, 0, NMNH_COMM_WORLD, IERR) ! IF (IPROC .EQ. 0) THEN ZLMA_NEUT_NEG(1:INSEGCELL,IL) = ZRECV(1:INSEGCELL) @@ -2408,17 +2410,17 @@ IF (LLMA) THEN INBSEG_PROC_XNSV(:) = NSV_ELEC * INBSEG_PROC(:) END IF ! - CALL MPI_GATHERV (ZLMAQMT, NSV_ELEC*INSEGPROC, MPI_PRECISION, ZRECV, & - INBSEG_PROC_XNSV, & - IDECALN, MPI_PRECISION, 0, NMNH_COMM_WORLD, IERR ) + CALL MPI_GATHERV (ZLMAQMT, NSV_ELEC*INSEGPROC, MNHREAL_MPI, ZRECV, & + INBSEG_PROC_XNSV, & + IDECALN, MNHREAL_MPI, 0, NMNH_COMM_WORLD, IERR ) ! IF (IPROC .EQ. 0) THEN ZLMA_QMT(1:NSV_ELEC*INSEGCELL,IL) = ZRECV(1:NSV_ELEC*INSEGCELL) END IF ! - CALL MPI_GATHERV (ZLMAPRT, NSV_ELEC*INSEGPROC, MPI_PRECISION, ZRECV, & - INBSEG_PROC_XNSV, & - IDECALN, MPI_PRECISION, 0, NMNH_COMM_WORLD, IERR) + CALL MPI_GATHERV (ZLMAPRT, NSV_ELEC*INSEGPROC, MNHREAL_MPI, ZRECV, & + INBSEG_PROC_XNSV, & + IDECALN, MNHREAL_MPI, 0, NMNH_COMM_WORLD, IERR ) ! IF (IPROC .EQ. 0) THEN ZLMA_PRT(1:NSV_ELEC*INSEGCELL,IL) = ZRECV(1:NSV_ELEC*INSEGCELL) diff --git a/src/MNH/flat_invz.f90 b/src/MNH/flat_invz.f90 index e253264a9e229a59c4c9bf7f3caedfe1283b4167..b7b38a84621ae4f99a90aba6f437f0b71b6b6f78 100644 --- a/src/MNH/flat_invz.f90 +++ b/src/MNH/flat_invz.f90 @@ -1,12 +1,8 @@ -!MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier +!MNH_LIC Copyright 1994-2019 CNRS, Meteo-France and Universite Paul Sabatier !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence -!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt +!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt !MNH_LIC for details. version 1. !----------------------------------------------------------------- -!--------------- special set of characters for RCS information -!----------------------------------------------------------------- -! $Source$ $Revision$ $Date$ -!----------------------------------------------------------------- ! #################### MODULE MODI_FLAT_INVZ ! #################### @@ -130,13 +126,15 @@ SUBROUTINE FLAT_INVZ(HLBCX,HLBCY,PDXHATM,PDYHATM,PRHOM,PAF,PBF,PCF, & !! points under the ground and out of the domain !! Modification Lugato, Guivarch (June 1998) Parallelisation !! Escobar, Stein (July 2000) optimisation +! P. Wautelet 28/03/2019: use MNHTIME for time measurement variables !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS ! ------------ ! - USE MODD_PARAMETERS USE MODD_CONF + USE MODD_PARAMETERS + use modd_precision, only: MNHTIME ! USE MODE_ll USE MODD_ARGSLIST_ll, ONLY : LIST_ll @@ -258,7 +256,7 @@ SUBROUTINE FLAT_INVZ(HLBCX,HLBCY,PDXHATM,PDYHATM,PRHOM,PAF,PBF,PCF, & REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZBAND_YT ! array in Y slices distribution transpose REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZBAND_YRT ! array in Y slices distribution transpose ! - REAL*8,DIMENSION(2) :: T0,T1 + REAL(kind=MNHTIME), DIMENSION(2) :: ZT0,ZT1 !JUAN Z_SPLITTING ! ! @@ -481,13 +479,13 @@ SUBROUTINE FLAT_INVZ(HLBCX,HLBCY,PDXHATM,PDYHATM,PRHOM,PAF,PBF,PCF, & !!$ print*,"IP=",IP," SIZE(ZBAND_SXP1_YP2_Z)=",SIZE(ZBAND_SXP1_YP2_Z,1),SIZE(ZBAND_SXP1_YP2_Z,2) ZBAND_SXP1_YP2_Z = ZY_B (IIBI:IIEI,IJBI:IJEI,:) ZBAND_SX_YP2_ZP1 = 0.0 - CALL SECOND_MNH2(T0) + CALL SECOND_MNH2(ZT0) CALL REMAP_SXP1_YP2_Z_SX_YP2_ZP1_ll(ZBAND_SXP1_YP2_Z,ZBAND_SX_YP2_ZP1,IINFO_ll) !CALL REMAP_B_SX_YP2_ZP1_ll(ZBAND_B,ZBAND_SX_YP2_ZP1,IINFO_ll) !ZWORK_SX_YP2_ZP1 = ZWORK_SX_YP2_ZP1 - ZBAND_SX_YP2_ZP1 - CALL SECOND_MNH2(T1) - TIMEZ%T_MAP_B_SX_YP2_ZP1 = TIMEZ%T_MAP_B_SX_YP2_ZP1 + T1 - T0 + CALL SECOND_MNH2(ZT1) + TIMEZ%T_MAP_B_SX_YP2_ZP1 = TIMEZ%T_MAP_B_SX_YP2_ZP1 + ZT1 - ZT0 END IF ! NZ_SPLITTING ! !JUAN Z_SPLITTING @@ -527,10 +525,10 @@ SUBROUTINE FLAT_INVZ(HLBCX,HLBCY,PDXHATM,PDYHATM,PRHOM,PAF,PBF,PCF, & IIMAX,ILOT_SX_YP2_ZP1,-1 ) END IF ZBAND_SXP2_Y_ZP1=0.0 - CALL SECOND_MNH2(T0) + CALL SECOND_MNH2(ZT0) CALL REMAP_SX_YP2_ZP1_SXP2_Y_ZP1_ll(ZBAND_SX_YP2_ZP1,ZBAND_SXP2_Y_ZP1,IINFO_ll) - CALL SECOND_MNH2(T1) - TIMEZ%T_MAP_SX_YP2_ZP1_SXP2_Y_ZP1 = TIMEZ%T_MAP_SX_YP2_ZP1_SXP2_Y_ZP1 + T1 - T0 + CALL SECOND_MNH2(ZT1) + TIMEZ%T_MAP_SX_YP2_ZP1_SXP2_Y_ZP1 = TIMEZ%T_MAP_SX_YP2_ZP1_SXP2_Y_ZP1 + ZT1 - ZT0 END IF ! NZ_SPLITTING ! !JUAN Z_SPLITTING @@ -612,10 +610,10 @@ SUBROUTINE FLAT_INVZ(HLBCX,HLBCY,PDXHATM,PDYHATM,PRHOM,PAF,PBF,PCF, & !!$ IF (( IAND(NZ_SPLITTING,2) > 0 ) .AND. ( IAND(NZ_SPLITTING,16) > 0 ) ) THEN !!$ CALL FAST_TRANSPOSE(ZBAND_SXP2_Y_ZP1T,ZBAND_SXP2_Y_ZP1,IJ_SXP2_Y_ZP1+2,II_SXP2_Y_ZP1,IK_SXP2_Y_ZP1) !!$ ZBAND_B = 0.0 -!!$ CALL SECOND_MNH2(T0) +!!$ CALL SECOND_MNH2(ZT0) !!$ CALL REMAP_SXP2_Y_ZP1_B_ll(ZBAND_SXP2_Y_ZP1,ZBAND_B,IINFO_ll) -!!$ CALL SECOND_MNH2(T1) -!!$ TIMEZ.T_MAP_SXP2_Y_ZP1_B = TIMEZ.T_MAP_SXP2_Y_ZP1_B + T1 - T0 +!!$ CALL SECOND_MNH2(ZT1) +!!$ TIMEZ.T_MAP_SXP2_Y_ZP1_B = TIMEZ.T_MAP_SXP2_Y_ZP1_B + ZT1 - ZT0 !!$ ! !!$ ! singular matrix case : the last term is computed by setting the !!$ ! average of the pressure field equal to zero. @@ -646,10 +644,10 @@ SUBROUTINE FLAT_INVZ(HLBCX,HLBCY,PDXHATM,PDYHATM,PRHOM,PAF,PBF,PCF, & IF ( ( IAND(NZ_SPLITTING,2) > 0 ) .AND. ( IAND(NZ_SPLITTING,8) > 0 )) THEN CALL FAST_TRANSPOSE(ZBAND_SXP2_Y_ZP1T,ZBAND_SXP2_Y_ZP1,IJ_SXP2_Y_ZP1+2,II_SXP2_Y_ZP1,IK_SXP2_Y_ZP1) ZBAND_SXP2_YP1_Z = 0.0 - CALL SECOND_MNH2(T0) + CALL SECOND_MNH2(ZT0) CALL REMAP_SXP2_Y_ZP1_SXP2_YP1_Z_ll(ZBAND_SXP2_Y_ZP1,ZBAND_SXP2_YP1_Z,IINFO_ll) - CALL SECOND_MNH2(T1) - TIMEZ%T_MAP_SXP2_Y_ZP1_SXP2_YP1_Z = TIMEZ%T_MAP_SXP2_Y_ZP1_SXP2_YP1_Z + T1 - T0 + CALL SECOND_MNH2(ZT1) + TIMEZ%T_MAP_SXP2_Y_ZP1_SXP2_YP1_Z = TIMEZ%T_MAP_SXP2_Y_ZP1_SXP2_YP1_Z + ZT1 - ZT0 ! ! singular matrix case : the last term is computed by setting the ! average of the pressure field equal to zero. @@ -718,19 +716,19 @@ SUBROUTINE FLAT_INVZ(HLBCX,HLBCY,PDXHATM,PDYHATM,PRHOM,PAF,PBF,PCF, & !!$ IF ( ( IAND(NZ_SPLITTING,2) > 0 ) .AND.( IAND(NZ_SPLITTING,16) > 0 ) ) THEN !!$ ! -!!$ CALL SECOND_MNH2(T0) +!!$ CALL SECOND_MNH2(ZT0) !!$ CALL REMAP_B_SXP2_Y_ZP1_ll(ZBAND_BR,ZBAND_SXP2_Y_ZP1R,IINFO_ll) -!!$ CALL SECOND_MNH2(T1) -!!$ TIMEZ.T_MAP_B_SXP2_Y_ZP1 = TIMEZ.T_MAP_B_SXP2_Y_ZP1 + T1 - T0 +!!$ CALL SECOND_MNH2(ZT1) +!!$ TIMEZ.T_MAP_B_SXP2_Y_ZP1 = TIMEZ.T_MAP_B_SXP2_Y_ZP1 + ZT1 - ZT0 !!$ ENDIF ! JUAN P1/P2 SPLITTING IF ( ( IAND(NZ_SPLITTING,2) > 0 ) .AND. ( IAND(NZ_SPLITTING,8) > 0 ) ) THEN ! - CALL SECOND_MNH2(T0) + CALL SECOND_MNH2(ZT0) CALL REMAP_SXP2_YP1_Z_SXP2_Y_ZP1_ll(ZBAND_SXP2_YP1_ZR,ZBAND_SXP2_Y_ZP1R,IINFO_ll) !TEST CALL REMAP_SXP2_YP1_Z_SXP2_Y_ZP1_ll(ZBAND_SXP2_YP1_ZR,ZBAND_SXP2_Y_ZP1RBIS,IINFO_ll) - CALL SECOND_MNH2(T1) - TIMEZ%T_MAP_SXP2_YP1_Z_SXP2_Y_ZP1 = TIMEZ%T_MAP_SXP2_YP1_Z_SXP2_Y_ZP1 + T1 - T0 + CALL SECOND_MNH2(ZT1) + TIMEZ%T_MAP_SXP2_YP1_Z_SXP2_Y_ZP1 = TIMEZ%T_MAP_SXP2_YP1_Z_SXP2_Y_ZP1 + ZT1 - ZT0 ENDIF IF ( IAND(NZ_SPLITTING,2) > 0 ) THEN CALL FAST_TRANSPOSE(ZBAND_SXP2_Y_ZP1R,ZBAND_SXP2_Y_ZP1RT,II_SXP2_Y_ZP1,IJ_SXP2_Y_ZP1+2,IK_SXP2_Y_ZP1) @@ -754,10 +752,10 @@ SUBROUTINE FLAT_INVZ(HLBCX,HLBCY,PDXHATM,PDYHATM,PRHOM,PAF,PBF,PCF, & ! Transposition Y-> X ! ZBAND_SX_YP2_ZP1=0 - CALL SECOND_MNH2(T0) + CALL SECOND_MNH2(ZT0) CALL REMAP_SXP2_Y_ZP1_SX_YP2_ZP1_ll(ZBAND_SXP2_Y_ZP1R,ZBAND_SX_YP2_ZP1,IINFO_ll) - CALL SECOND_MNH2(T1) - TIMEZ%T_MAP_SXP2_Y_ZP1_SX_YP2_ZP1 = TIMEZ%T_MAP_SXP2_Y_ZP1_SX_YP2_ZP1 + T1 - T0 + CALL SECOND_MNH2(ZT1) + TIMEZ%T_MAP_SXP2_Y_ZP1_SX_YP2_ZP1 = TIMEZ%T_MAP_SXP2_Y_ZP1_SX_YP2_ZP1 + ZT1 - ZT0 ! IF (HLBCX(1) == 'CYCL') THEN ! re-set (N+1) values with (2) values ( stored here to avoid to lost them ) @@ -787,11 +785,11 @@ SUBROUTINE FLAT_INVZ(HLBCX,HLBCY,PDXHATM,PDYHATM,PRHOM,PAF,PBF,PCF, & !JUAN Z_SPLITTING ! IF ( IAND(NZ_SPLITTING,2) > 0 ) THEN - CALL SECOND_MNH2(T0) + CALL SECOND_MNH2(ZT0) !CALL REMAP_SX_YP2_ZP1_B_ll(ZBAND_SX_YP2_ZP1,ZBAND_B,IINFO_ll) CALL REMAP_SX_YP2_ZP1_SXP1_YP2_Z_ll(ZBAND_SX_YP2_ZP1,ZBAND_SXP1_YP2_Z,IINFO_ll) - CALL SECOND_MNH2(T1) - TIMEZ%T_MAP_SX_YP2_ZP1_B = TIMEZ%T_MAP_SX_YP2_ZP1_B + T1 - T0 + CALL SECOND_MNH2(ZT1) + TIMEZ%T_MAP_SX_YP2_ZP1_B = TIMEZ%T_MAP_SX_YP2_ZP1_B + ZT1 - ZT0 IF ( IAND(NZ_SPLITTING,1) > 0 ) THEN ! for test save 2D value CALL GET_HALO(ZBAND_B) diff --git a/src/MNH/ini_cst.f90 b/src/MNH/ini_cst.f90 index 0e422740d9b8d8c76f467a92a5bc04977456ed41..91526bed4b1eb67a892802e447ef6ca75e0b6428 100644 --- a/src/MNH/ini_cst.f90 +++ b/src/MNH/ini_cst.f90 @@ -71,6 +71,7 @@ END MODULE MODI_INI_CST ! ------------ ! USE MODD_CST +use modd_precision, only: MNHREAL ! IMPLICIT NONE ! @@ -159,18 +160,20 @@ XMNH_EPSILON = EPSILON (XMNH_EPSILON ) XMNH_HUGE = HUGE (XMNH_HUGE ) XMNH_HUGE_12_LOG = LOG ( SQRT(XMNH_HUGE) ) -#ifdef MNH_MPI_DOUBLE_PRECISION -XMNH_TINY = 1.0e-80 -XEPS_DT = 1.0e-5 -XRES_FLAT_CART = 1.0e-12 -XRES_OTHER = 1.0e-9 -XRES_PREP = 1.0e-8 -#else +#if (MNH_REAL == 8) +XMNH_TINY = 1.0e-80_MNHREAL +XEPS_DT = 1.0e-5_MNHREAL +XRES_FLAT_CART = 1.0e-12_MNHREAL +XRES_OTHER = 1.0e-9_MNHREAL +XRES_PREP = 1.0e-8_MNHREAL +#elif (MNH_REAL == 4) XMNH_TINY = TINY (XMNH_TINY ) -XEPS_DT = 1.5e-4 -XRES_FLAT_CART = 1.0e-12 -XRES_OTHER = 1.0e-7 -XRES_PREP = 1.0e-4 +XEPS_DT = 1.5e-4_MNHREAL +XRES_FLAT_CART = 1.0e-12_MNHREAL +XRES_OTHER = 1.0e-7_MNHREAL +XRES_PREP = 1.0e-4_MNHREAL +#else +#error "Invalid MNH_REAL" #endif XMNH_TINY_12 = SQRT (XMNH_TINY ) diff --git a/src/MNH/ini_modeln.f90 b/src/MNH/ini_modeln.f90 index e14a50045c919d1d5b6ce8ee87c4eebca97d96f3..62002a731c199d67d89665d367de2054bcd26f83 100644 --- a/src/MNH/ini_modeln.f90 +++ b/src/MNH/ini_modeln.f90 @@ -371,6 +371,7 @@ USE MODD_PASPOL_n USE MODD_DRAG_n USE MODD_BLOWSNOW USE MODD_BLOWSNOW_n +use modd_precision, only: LFIINT ! ! USE MODI_INI_BUDGET @@ -1674,9 +1675,9 @@ IF (KMI == 1) THEN DO IMI = 1 , NMODEL WRITE(IO_SURF_MNH_MODEL(IMI)%COUTFILE,'(A,".",I1,".",A)') CEXP,IMI,TRIM(ADJUSTL(CSEG)) WRITE(YNAME, '(A,".",I1,".",A)') CEXP,IMI,TRIM(ADJUSTL(CSEG))//'.000' - CALL IO_File_add2list(LUNIT_MODEL(IMI)%TDIAFILE,YNAME,'MNHDIACHRONIC','WRITE', & - HDIRNAME=CIO_DIR, & - KLFINPRAR=INT(50,KIND=LFI_INT),KLFITYPE=1,KLFIVERB=NVERB, & + CALL IO_File_add2list(LUNIT_MODEL(IMI)%TDIAFILE,YNAME,'MNHDIACHRONIC','WRITE', & + HDIRNAME=CIO_DIR, & + KLFINPRAR=INT(50,KIND=LFIINT),KLFITYPE=1,KLFIVERB=NVERB, & TPDADFILE=LUNIT_MODEL(NDAD(IMI))%TDIAFILE ) END DO ! diff --git a/src/MNH/modd_precision.f90 b/src/MNH/modd_precision.f90 new file mode 100644 index 0000000000000000000000000000000000000000..e302e46b96e79d9a950ebb5a1cf3f9f39db68547 --- /dev/null +++ b/src/MNH/modd_precision.f90 @@ -0,0 +1,120 @@ +!MNH_LIC Copyright 2019-2019 CNRS, Meteo-France and Universite Paul Sabatier +!MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence +!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt +!MNH_LIC for details. version 1. +!----------------------------------------------------------------- +! Author: +! P. Wautelet 08/03/2019 +! Modifications: +! P. Wautelet 22/03/2019: add MNHINT/REAL32/64_MPI, MNH2REAL32/64_MPI + more public parameters +! P. Wautelet 27/03/2019: add MNHTIME and MNHTIME_MPI +!----------------------------------------------------------------- +module modd_precision + +use modd_mpif + +#ifdef MNH_IOCDF4 +use NETCDF, only: NF90_DOUBLE, NF90_FLOAT, NF90_INT, NF90_INT64 +#endif + +implicit none + +private + +public :: MNHINT32, MNHINT64, MNHREAL32, MNHREAL64, MNHREAL128 + +public :: MNHINT32_MPI, MNHINT64_MPI +public :: MNHREAL32_MPI, MNHREAL64_MPI +public :: MNH2REAL32_MPI, MNH2REAL64_MPI + +public :: MNHINT, MNHREAL +public :: MNHINT_MPI, MNHREAL_MPI, MNH2REAL_MPI +public :: MNHTIME, MNHTIME_MPI + +public :: LFIINT + +#ifdef MNH_IOCDF4 +public :: CDFINT, MNHINT_NF90, MNHREAL_NF90 +#endif + + +integer, parameter :: MNHINT32 = selected_int_kind( r = 9 ) +integer, parameter :: MNHINT64 = selected_int_kind( r = 18 ) + +integer, parameter :: MNHREAL32 = selected_real_kind( p = 6, r = 37 ) +integer, parameter :: MNHREAL64 = selected_real_kind( p = 15, r = 307 ) +integer, parameter :: MNHREAL128 = selected_real_kind( p = 33, r = 4931 ) + +integer, parameter :: MNHINT32_MPI = MPI_INTEGER4 +integer, parameter :: MNHINT64_MPI = MPI_INTEGER8 + +integer, parameter :: MNHREAL32_MPI = MPI_REAL4 +integer, parameter :: MNHREAL64_MPI = MPI_REAL8 + +integer, parameter :: MNH2REAL32_MPI = MPI_2REAL +integer, parameter :: MNH2REAL64_MPI = MPI_2DOUBLE_PRECISION + + +! Kinds for MesoNH +#if ( MNH_INT == 4 ) +integer, parameter :: MNHINT = MNHINT32 +integer, parameter :: MNHINT_MPI = MNHINT32_MPI +#elif ( MNH_INT == 8 ) +integer, parameter :: MNHINT = MNHINT64 +integer, parameter :: MNHINT_MPI = MNHINT64_MPI +#else +#error "Invalid MNH_INT" +#endif + +#if ( MNH_REAL == 4 ) +integer, parameter :: MNHREAL = MNHREAL32 +integer, parameter :: MNHREAL_MPI = MNHREAL32_MPI +integer, parameter :: MNH2REAL_MPI = MNH2REAL32_MPI +#elif ( MNH_REAL == 8 ) +integer, parameter :: MNHREAL = MNHREAL64 +integer, parameter :: MNHREAL_MPI = MNHREAL64_MPI +integer, parameter :: MNH2REAL_MPI = MNH2REAL64_MPI +#elif ( MNH_REAL == 16 ) +integer, parameter :: MNHREAL = MNHREAL128 +integer, parameter :: MNHREAL_MPI = MPI_REAL16 +#error "No MNH2REAL_MPI for MNH_REAL=16" +#else +#error "Invalid MNH_REAL" +#endif + +integer, parameter :: MNHTIME = MNHREAL64 +integer, parameter :: MNHTIME_MPI = MNHREAL64_MPI + + +! Kinds for LFI +#if ( LFI_INT == 4 ) +integer, parameter :: LFIINT = MNHINT32 +#elif ( LFI_INT == 8 ) +integer, parameter :: LFIINT = MNHINT64 +#else +#error "Invalid LFI_INT" +#endif + + +#ifdef MNH_IOCDF4 +! Kinds for netCDF +integer, parameter :: CDFINT = selected_int_kind( r = 9 ) + +#if (MNH_INT == 4) +integer, parameter :: MNHINT_NF90 = NF90_INT +#elif (MNH_INT == 8) +integer, parameter :: MNHINT_NF90 = NF90_INT64 +#else +#error "Invalid MNH_INT" +#endif + +#if (MNH_REAL == 4) +integer, parameter :: MNHREAL_NF90 = NF90_FLOAT +#elif (MNH_REAL == 8) +integer, parameter :: MNHREAL_NF90 = NF90_DOUBLE +#else +#error "Invalid MNH_REAL" +#endif +#endif + +end module modd_precision diff --git a/src/MNH/modd_sub_modeln.f90 b/src/MNH/modd_sub_modeln.f90 index 48bfede318410cd24a6a6431857a57c50da89ed0..b6e364b2222e189bce38a1b8f00314c1b815b2bc 100644 --- a/src/MNH/modd_sub_modeln.f90 +++ b/src/MNH/modd_sub_modeln.f90 @@ -4,17 +4,19 @@ !MNH_LIC for details. version 1. !----------------------------------------------------------------- ! Modifications: -! Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O -! J. Escobar : 18/06/2018 , bug compile R*4 => real*8 pointer XT_VISC +! P. Wautelet 05/2016-04/2018: new data structures and calls for I/O +! J. Escobar 18/06/2018: bug compile R*4 => real*8 pointer XT_VISC ! P. Wautelet 08/02/2019: add missing NULL association for pointers +! P. Wautelet 28/03/2019: use MNHTIME for time measurement variables !----------------------------------------------------------------- ! ################# MODULE MODD_SUB_MODEL_n ! ################# ! -USE MODD_ARGSLIST_ll, ONLY : LIST_ll, HALO2LIST_ll -! -USE MODD_PARAMETERS, ONLY: JPMODELMAX +USE MODD_ARGSLIST_ll, ONLY: LIST_ll, HALO2LIST_ll +USE MODD_PARAMETERS, ONLY: JPMODELMAX +use modd_precision, only: MNHTIME + IMPLICIT NONE TYPE SUB_MODEL_t @@ -32,18 +34,18 @@ TYPE SUB_MODEL_t TYPE(HALO2LIST_ll), POINTER :: TZHALO2MT_ll => NULL() TYPE(HALO2LIST_ll), POINTER :: TZHALO2SC_ll => NULL() INTEGER :: IBAK, IOUT ! number of the backup / output - REAL*8,DIMENSION(2) :: XT_START - REAL*8,DIMENSION(2) :: XT_STORE,XT_BOUND,XT_GUESS - REAL*8,DIMENSION(2) :: XT_ADV,XT_SOURCES,XT_DRAG - REAL*8,DIMENSION(2) :: XT_ADVUVW,XT_GRAV,XT_VISC - REAL*8,DIMENSION(2) :: XT_DIFF,XT_RELAX,XT_PARAM,XT_SPECTRA - REAL*8,DIMENSION(2) :: XT_HALO,XT_RAD_BOUND,XT_PRESS - REAL*8,DIMENSION(2) :: XT_CLOUD,XT_STEP_SWA,XT_STEP_MISC - REAL*8,DIMENSION(2) :: XT_ELEC - REAL*8,DIMENSION(2) :: XT_COUPL,XT_1WAY,XT_STEP_BUD - REAL*8,DIMENSION(2) :: XT_RAD,XT_DCONV,XT_GROUND,XT_TRACER,XT_MAFL - REAL*8,DIMENSION(2) :: XT_TURB,XT_2WAY,XT_SHADOWS - REAL*8,DIMENSION(2) :: XT_FORCING,XT_NUDGING,XT_CHEM + REAL(kind=MNHTIME), DIMENSION(2) :: XT_START + REAL(kind=MNHTIME), DIMENSION(2) :: XT_STORE, XT_BOUND, XT_GUESS + REAL(kind=MNHTIME), DIMENSION(2) :: XT_ADV, XT_SOURCES, XT_DRAG + REAL(kind=MNHTIME), DIMENSION(2) :: XT_ADVUVW, XT_GRAV, XT_VISC + REAL(kind=MNHTIME), DIMENSION(2) :: XT_DIFF, XT_RELAX, XT_PARAM, XT_SPECTRA + REAL(kind=MNHTIME), DIMENSION(2) :: XT_HALO, XT_RAD_BOUND, XT_PRESS + REAL(kind=MNHTIME), DIMENSION(2) :: XT_CLOUD, XT_STEP_SWA, XT_STEP_MISC + REAL(kind=MNHTIME), DIMENSION(2) :: XT_ELEC + REAL(kind=MNHTIME), DIMENSION(2) :: XT_COUPL, XT_1WAY, XT_STEP_BUD + REAL(kind=MNHTIME), DIMENSION(2) :: XT_RAD, XT_DCONV, XT_GROUND, XT_TRACER, XT_MAFL + REAL(kind=MNHTIME), DIMENSION(2) :: XT_TURB, XT_2WAY, XT_SHADOWS + REAL(kind=MNHTIME), DIMENSION(2) :: XT_FORCING, XT_NUDGING, XT_CHEM REAL, DIMENSION(:,:,:), POINTER :: ZWT_ACT_NUC=>NULL() ! Vertical motion used for ACTivation/NUCleation @@ -60,19 +62,19 @@ TYPE(HALO2LIST_ll), POINTER :: TZHALO2M_ll=>NULL(), TZLSHALO2_ll=>NULL() TYPE(HALO2LIST_ll), POINTER :: TZHALO2T_ll=>NULL(), TZHALO2MT_ll=>NULL(), TZHALO2SC_ll=>NULL() INTEGER, POINTER :: IBAK=>NULL() INTEGER, POINTER :: IOUT=>NULL() -REAL*8,DIMENSION(:), POINTER :: XT_START=>NULL() -REAL*8,DIMENSION(:), POINTER :: XT_STORE=>NULL(),XT_BOUND=>NULL(),XT_GUESS=>NULL() -REAL*8,DIMENSION(:), POINTER :: XT_ADV=>NULL(),XT_SOURCES=>NULL(),XT_DRAG=>NULL() -REAL*8,DIMENSION(:), POINTER :: XT_ADVUVW=>NULL(),XT_GRAV=>NULL() -REAL*8,DIMENSION(:), POINTER :: XT_DIFF=>NULL(),XT_RELAX=>NULL(),XT_PARAM=>NULL(),XT_SPECTRA=>NULL() -REAL*8,DIMENSION(:), POINTER :: XT_HALO=>NULL(),XT_RAD_BOUND=>NULL(),XT_PRESS=>NULL() -REAL*8,DIMENSION(:), POINTER :: XT_VISC=>NULL() -REAL*8,DIMENSION(:), POINTER :: XT_CLOUD=>NULL(),XT_STEP_SWA=>NULL(),XT_STEP_MISC=>NULL() -REAL*8,DIMENSION(:), POINTER :: XT_ELEC=>NULL(),XT_SHADOWS=>NULL() -REAL*8,DIMENSION(:), POINTER :: XT_COUPL=>NULL(),XT_1WAY=>NULL(),XT_STEP_BUD=>NULL() -REAL*8,DIMENSION(:), POINTER :: XT_RAD=>NULL(),XT_DCONV=>NULL(),XT_GROUND=>NULL(),XT_MAFL=>NULL() -REAL*8,DIMENSION(:), POINTER :: XT_TURB=>NULL(),XT_2WAY=>NULL(),XT_TRACER=>NULL() -REAL*8,DIMENSION(:), POINTER :: XT_FORCING=>NULL(),XT_NUDGING=>NULL(),XT_CHEM=>NULL() +REAL(kind=MNHTIME), DIMENSION(:), POINTER :: XT_START=>NULL() +REAL(kind=MNHTIME), DIMENSION(:), POINTER :: XT_STORE=>NULL(), XT_BOUND=>NULL(), XT_GUESS=>NULL() +REAL(kind=MNHTIME), DIMENSION(:), POINTER :: XT_ADV=>NULL(), XT_SOURCES=>NULL(), XT_DRAG=>NULL() +REAL(kind=MNHTIME), DIMENSION(:), POINTER :: XT_ADVUVW=>NULL(), XT_GRAV=>NULL() +REAL(kind=MNHTIME), DIMENSION(:), POINTER :: XT_DIFF=>NULL(), XT_RELAX=>NULL(), XT_PARAM=>NULL(), XT_SPECTRA=>NULL() +REAL(kind=MNHTIME), DIMENSION(:), POINTER :: XT_HALO=>NULL(), XT_RAD_BOUND=>NULL(), XT_PRESS=>NULL() +REAL(kind=MNHTIME), DIMENSION(:), POINTER :: XT_VISC=>NULL() +REAL(kind=MNHTIME), DIMENSION(:), POINTER :: XT_CLOUD=>NULL(), XT_STEP_SWA=>NULL(), XT_STEP_MISC=>NULL() +REAL(kind=MNHTIME), DIMENSION(:), POINTER :: XT_ELEC=>NULL(), XT_SHADOWS=>NULL() +REAL(kind=MNHTIME), DIMENSION(:), POINTER :: XT_COUPL=>NULL(), XT_1WAY=>NULL(), XT_STEP_BUD=>NULL() +REAL(kind=MNHTIME), DIMENSION(:), POINTER :: XT_RAD=>NULL(), XT_DCONV=>NULL(), XT_GROUND=>NULL(), XT_MAFL=>NULL() +REAL(kind=MNHTIME), DIMENSION(:), POINTER :: XT_TURB=>NULL(), XT_2WAY=>NULL(), XT_TRACER=>NULL() +REAL(kind=MNHTIME), DIMENSION(:), POINTER :: XT_FORCING=>NULL(), XT_NUDGING=>NULL(), XT_CHEM=>NULL() REAL, DIMENSION(:,:,:), POINTER :: ZWT_ACT_NUC=>NULL() LOGICAL, DIMENSION(:,:), POINTER :: GMASKkids=>NULL() LOGICAL, POINTER :: GCLOSE_OUT=>NULL() diff --git a/src/MNH/modd_timez.f90 b/src/MNH/modd_timez.f90 index 9c9235ed4da7b7779e6ac6cbd3007a64e2b62dff..3c44998639d52ba7647196195ecb8080f404c027 100644 --- a/src/MNH/modd_timez.f90 +++ b/src/MNH/modd_timez.f90 @@ -5,51 +5,54 @@ !----------------------------------------------------------------- ! Modifications ! P. Wautelet 08/02/2019: add missing NULL association for pointers +! P. Wautelet 28/03/2019: use MNHTIME for time measurement variables +!----------------------------------------------------------------- MODULE MODD_TIMEZ USE MODD_PARAMETERS, ONLY: JPMODELMAX + use modd_precision, only: MNHTIME TYPE SUB_TIMEZ_T - REAL*8,DIMENSION(2) :: T_MAP_B_SX_YP2_ZP1 = 0.0 - REAL*8,DIMENSION(2) :: T_MAP_SX_YP2_ZP1_SXP2_Y_ZP1 = 0.0 - REAL*8,DIMENSION(2) :: T_MAP_SXP2_Y_ZP1_B = 0.0 - REAL*8,DIMENSION(2) :: T_MAP_B_SXP2_Y_ZP1 = 0.0 - REAL*8,DIMENSION(2) :: T_MAP_SXP2_Y_ZP1_SX_YP2_ZP1 = 0.0 - REAL*8,DIMENSION(2) :: T_MAP_SX_YP2_ZP1_B = 0.0 - REAL*8,DIMENSION(2) :: T_MAP_SXP2_Y_ZP1_SXP2_YP1_Z = 0.0 - REAL*8,DIMENSION(2) :: T_MAP_SXP2_YP1_Z_SXP2_Y_ZP1 = 0.0 - - REAL*8,DIMENSION(2) :: T_MAP_SXP1_YP2_Z_SX_YP2_ZP1 = 0.0 - REAL*8,DIMENSION(2) :: T_MAP_SXP2_Y_ZP1_SXP1_YP2_Z = 0.0 - REAL*8,DIMENSION(2) :: T_MAP_SXP1_YP2_Z_SXP2_Y_ZP1 = 0.0 - REAL*8,DIMENSION(2) :: T_MAP_SX_YP2_ZP1_SXP1_YP2_Z = 0.0 - - REAL*8,DIMENSION(2) :: T_WRIT3D_RECV = 0.0 - REAL*8,DIMENSION(2) :: T_WRIT3D_SEND = 0.0 - REAL*8,DIMENSION(2) :: T_WRIT3D_WRIT = 0.0 - REAL*8,DIMENSION(2) :: T_WRIT3D_WAIT = 0.0 - REAL*8,DIMENSION(2) :: T_WRIT3D_ALL = 0.0 - - REAL*8,DIMENSION(2) :: T_WRIT2D_GATH = 0.0 - REAL*8,DIMENSION(2) :: T_WRIT2D_WRIT = 0.0 - REAL*8,DIMENSION(2) :: T_WRIT2D_ALL = 0.0 - - REAL*8,DIMENSION(2) :: T_READ3D_RECV = 0.0 - REAL*8,DIMENSION(2) :: T_READ3D_SEND = 0.0 - REAL*8,DIMENSION(2) :: T_READ3D_READ = 0.0 - REAL*8,DIMENSION(2) :: T_READ3D_WAIT = 0.0 - REAL*8,DIMENSION(2) :: T_READ3D_ALL = 0.0 - - REAL*8,DIMENSION(2) :: T_READ2D_SCAT = 0.0 - REAL*8,DIMENSION(2) :: T_READ2D_READ = 0.0 - REAL*8,DIMENSION(2) :: T_READ2D_ALL = 0.0 - - REAL*8,DIMENSION(2) :: T_READLB_RECV = 0.0 - REAL*8,DIMENSION(2) :: T_READLB_SEND = 0.0 - REAL*8,DIMENSION(2) :: T_READLB_READ = 0.0 - REAL*8,DIMENSION(2) :: T_READLB_WAIT = 0.0 - REAL*8,DIMENSION(2) :: T_READLB_ALL = 0.0 - + REAL(kind=MNHTIME), DIMENSION(2) :: T_MAP_B_SX_YP2_ZP1 = 0.0_MNHTIME + REAL(kind=MNHTIME), DIMENSION(2) :: T_MAP_SX_YP2_ZP1_SXP2_Y_ZP1 = 0.0_MNHTIME + REAL(kind=MNHTIME), DIMENSION(2) :: T_MAP_SXP2_Y_ZP1_B = 0.0_MNHTIME + REAL(kind=MNHTIME), DIMENSION(2) :: T_MAP_B_SXP2_Y_ZP1 = 0.0_MNHTIME + REAL(kind=MNHTIME), DIMENSION(2) :: T_MAP_SXP2_Y_ZP1_SX_YP2_ZP1 = 0.0_MNHTIME + REAL(kind=MNHTIME), DIMENSION(2) :: T_MAP_SX_YP2_ZP1_B = 0.0_MNHTIME + REAL(kind=MNHTIME), DIMENSION(2) :: T_MAP_SXP2_Y_ZP1_SXP2_YP1_Z = 0.0_MNHTIME + REAL(kind=MNHTIME), DIMENSION(2) :: T_MAP_SXP2_YP1_Z_SXP2_Y_ZP1 = 0.0_MNHTIME + + REAL(kind=MNHTIME), DIMENSION(2) :: T_MAP_SXP1_YP2_Z_SX_YP2_ZP1 = 0.0_MNHTIME + REAL(kind=MNHTIME), DIMENSION(2) :: T_MAP_SXP2_Y_ZP1_SXP1_YP2_Z = 0.0_MNHTIME + REAL(kind=MNHTIME), DIMENSION(2) :: T_MAP_SXP1_YP2_Z_SXP2_Y_ZP1 = 0.0_MNHTIME + REAL(kind=MNHTIME), DIMENSION(2) :: T_MAP_SX_YP2_ZP1_SXP1_YP2_Z = 0.0_MNHTIME + + REAL(kind=MNHTIME), DIMENSION(2) :: T_WRIT3D_RECV = 0.0_MNHTIME + REAL(kind=MNHTIME), DIMENSION(2) :: T_WRIT3D_SEND = 0.0_MNHTIME + REAL(kind=MNHTIME), DIMENSION(2) :: T_WRIT3D_WRIT = 0.0_MNHTIME + REAL(kind=MNHTIME), DIMENSION(2) :: T_WRIT3D_WAIT = 0.0_MNHTIME + REAL(kind=MNHTIME), DIMENSION(2) :: T_WRIT3D_ALL = 0.0_MNHTIME + + REAL(kind=MNHTIME), DIMENSION(2) :: T_WRIT2D_GATH = 0.0_MNHTIME + REAL(kind=MNHTIME), DIMENSION(2) :: T_WRIT2D_WRIT = 0.0_MNHTIME + REAL(kind=MNHTIME), DIMENSION(2) :: T_WRIT2D_ALL = 0.0_MNHTIME + + REAL(kind=MNHTIME), DIMENSION(2) :: T_READ3D_RECV = 0.0_MNHTIME + REAL(kind=MNHTIME), DIMENSION(2) :: T_READ3D_SEND = 0.0_MNHTIME + REAL(kind=MNHTIME), DIMENSION(2) :: T_READ3D_READ = 0.0_MNHTIME + REAL(kind=MNHTIME), DIMENSION(2) :: T_READ3D_WAIT = 0.0_MNHTIME + REAL(kind=MNHTIME), DIMENSION(2) :: T_READ3D_ALL = 0.0_MNHTIME + + REAL(kind=MNHTIME), DIMENSION(2) :: T_READ2D_SCAT = 0.0_MNHTIME + REAL(kind=MNHTIME), DIMENSION(2) :: T_READ2D_READ = 0.0_MNHTIME + REAL(kind=MNHTIME), DIMENSION(2) :: T_READ2D_ALL = 0.0_MNHTIME + + REAL(kind=MNHTIME), DIMENSION(2) :: T_READLB_RECV = 0.0_MNHTIME + REAL(kind=MNHTIME), DIMENSION(2) :: T_READLB_SEND = 0.0_MNHTIME + REAL(kind=MNHTIME), DIMENSION(2) :: T_READLB_READ = 0.0_MNHTIME + REAL(kind=MNHTIME), DIMENSION(2) :: T_READLB_WAIT = 0.0_MNHTIME + REAL(kind=MNHTIME), DIMENSION(2) :: T_READLB_ALL = 0.0_MNHTIME + END TYPE SUB_TIMEZ_T TYPE(SUB_TIMEZ_t), DIMENSION(JPMODELMAX), TARGET, SAVE :: SUB_TIMEZN diff --git a/src/MNH/mode_RBK90_Integrator.f90 b/src/MNH/mode_RBK90_Integrator.f90 index f1e50b243763abbc3ca480862584fc761c81ee29..ae11720e3cd8fdc1ce7ab60d602dd20a5e4ce0d5 100644 --- a/src/MNH/mode_RBK90_Integrator.f90 +++ b/src/MNH/mode_RBK90_Integrator.f90 @@ -61,6 +61,7 @@ MODULE MODE_RBK90_Integrator USE MODD_RBK90_JacobianSP_n, ONLY: LU_DIM_SPECIES USE MODD_RBK90_Parameters_n, ONLY: NVAR USE MODD_RBK90_Global_n, ONLY: STEPMIN + use modd_precision, only: MNHREAL IMPLICIT NONE PUBLIC SAVE @@ -737,11 +738,7 @@ Stage: DO istage = 1, ros_S END DO Err = SQRT(Err/N) -#if (MNH_REAL == 8) - ros_ErrorNorm = MAX(Err,1.0e-10) -#else - ros_ErrorNorm = MAX(Err,1.0d-10) -#endif + ros_ErrorNorm = MAX(Err,1.0e-10_MNHREAL) END FUNCTION ros_ErrorNorm diff --git a/src/MNH/mode_RBK90_linearalgebra.f90 b/src/MNH/mode_RBK90_linearalgebra.f90 index ac5dc5fa499a92341e9b5cc42b1a92852f9d1eb7..8fd23aa139e89b8c906915ccda98c36e80e102e0 100644 --- a/src/MNH/mode_RBK90_linearalgebra.f90 +++ b/src/MNH/mode_RBK90_linearalgebra.f90 @@ -1,10 +1,11 @@ -!MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier +!MNH_LIC Copyright 1994-2019 CNRS, Meteo-France and Universite Paul Sabatier !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence !MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt !MNH_LIC for details. version 1. - -!****************************************************************** - +!----------------------------------------------------------------- +! Modifications: +! P. Wautelet 22/02/2019: DOUBLE COMPLEX -> COMPLEX(kind(0.0d0)) to respect Fortran standard +!----------------------------------------------------------------- ! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ! ! Linear Algebra Data and Routines File @@ -97,7 +98,7 @@ SUBROUTINE KppDecompCmplx( JVS, IER ) USE MODD_RBK90_JacobianSP_n INTEGER :: IER - DOUBLE COMPLEX :: JVS(LU_NONZERO), W(NVAR), a + COMPLEX (KIND(0.0D0)) :: JVS(LU_NONZERO), W(NVAR), a REAL :: b = 0.0 INTEGER :: k, kk, j, jj @@ -243,7 +244,7 @@ SUBROUTINE KppSolveCmplx( JVS, X ) USE MODD_RBK90_JacobianSP_n INTEGER :: i, j - DOUBLE COMPLEX :: JVS(LU_NONZERO), X(NVAR), sum + COMPLEX (KIND(0.0D0)) :: JVS(LU_NONZERO), X(NVAR), sum DO i=1,NVAR DO j = LU_CROW(i), LU_DIAG(i)-1 @@ -305,7 +306,7 @@ SUBROUTINE KppSolveTRCmplx( JVS, X ) USE MODD_RBK90_JacobianSP_n INTEGER :: i, j - DOUBLE COMPLEX :: JVS(LU_NONZERO), X(NVAR) + COMPLEX (KIND(0.0D0)) :: JVS(LU_NONZERO), X(NVAR) DO i=1,NVAR X(i) = X(i)/JVS(LU_DIAG(i)) diff --git a/src/MNH/mode_datetime.f90 b/src/MNH/mode_datetime.f90 index a09557b7873d37e4cccc9963726b9041bde6b123..2684e11d48a4426dea6321524ba93edc6ebe080a 100644 --- a/src/MNH/mode_datetime.f90 +++ b/src/MNH/mode_datetime.f90 @@ -1,8 +1,11 @@ -!MNH_LIC Copyright 2018 CNRS, Meteo-France and Universite Paul Sabatier +!MNH_LIC Copyright 2018-2019 CNRS, Meteo-France and Universite Paul Sabatier !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence !MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt !MNH_LIC for details. version 1. !----------------------------------------------------------------- +! Modifications: +! P. Wautelet 22/02/2019: use MOD intrinsics with same kind for all arguments (to respect Fortran standard) +!----------------------------------------------------------------- MODULE MODE_DATETIME ! USE MODD_TYPE_DATE @@ -57,7 +60,7 @@ IDAY_CUR = TZDATE%TDATE%DAY ZSEC = TZDATE%TIME ! !Compute number of days since beginning of the year -IF ( ((MOD(IYEAR_CUR,4)==0).AND.(MOD(IYEAR_CUR,100)/=0)) .OR. (MOD(IYEAR_CUR,400)==0)) ILEAPS=1 +IF ( ((MOD(IYEAR_CUR,4_8)==0).AND.(MOD(IYEAR_CUR,100_8)/=0)) .OR. (MOD(IYEAR_CUR,400_8)==0)) ILEAPS=1 SELECT CASE(IMONTH_CUR) CASE(1) IDAYS = IDAY_CUR-1 diff --git a/src/MNH/mode_elec_ll.f90 b/src/MNH/mode_elec_ll.f90 index dc4f100ef866a173dba2e57f4fbd8596b477c9aa..0f613fff81e6cdac7597973e73827849d8cf4fd6 100644 --- a/src/MNH/mode_elec_ll.f90 +++ b/src/MNH/mode_elec_ll.f90 @@ -1,7 +1,8 @@ -!MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier +!MNH_LIC Copyright 2010-2019 CNRS, Meteo-France and Universite Paul Sabatier !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence !MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt !MNH_LIC for details. version 1. +!------------------------------------------------------------------------ ! ################### MODULE MODE_ELEC_ll ! ################### @@ -24,7 +25,8 @@ !------------------------------------------------------------------------ ! USE MODD_MPIF -USE MODD_VAR_ll, ONLY : NMNH_COMM_WORLD +use modd_precision, only: MNHREAL_MPI +USE MODD_VAR_ll, ONLY: NMNH_COMM_WORLD ! IMPLICIT NONE ! @@ -32,7 +34,6 @@ IMPLICIT NONE ! ! INTEGER, PARAMETER :: IFIRST_PROC = 0 ! 0/1 to increase numerotation of proc number -INTEGER, PARAMETER :: MPI_PRECISION = MPI_DOUBLE_PRECISION ! ! INTERFACE SUM_ELEC_ll @@ -115,7 +116,7 @@ ZTAB = PSUM_INOUT INFO = -1 ! ! Sum(Proc) -CALL MPI_ALLREDUCE(ZTAB, PSUM_INOUT, IDIM, MPI_PRECISION, & +CALL MPI_ALLREDUCE(ZTAB, PSUM_INOUT, IDIM, MNHREAL_MPI, & MPI_SUM, NMNH_COMM_WORLD, INFO) ! END SUBROUTINE RSUM_ELEC_ll @@ -152,7 +153,7 @@ INFO = -1 ! !* 1.1 max(Proc) ! -CALL MPI_ALLREDUCE(ZTAB, PMIN_INOUT, IDIM, MPI_PRECISION, & +CALL MPI_ALLREDUCE(ZTAB, PMIN_INOUT, IDIM, MNHREAL_MPI, & MPI_MIN, NMNH_COMM_WORLD, INFO) ! !* 1.2 find the proc number of the maximum @@ -202,7 +203,7 @@ INFO = -1 ! !* 1.1 max(Proc) ! -CALL MPI_ALLREDUCE(ZTAB, PMAX_INOUT, IDIM, MPI_PRECISION, & +CALL MPI_ALLREDUCE(ZTAB, PMAX_INOUT, IDIM, MNHREAL_MPI, & MPI_MAX, NMNH_COMM_WORLD, INFO) ! !* 1.2 find the proc number of the maximum @@ -420,7 +421,7 @@ INFO = -1 ! !* 1.1 sum(Proc) ! -CALL MPI_ALLREDUCE(ZTAB, PSUM_INOUT, IDIM, MPI_PRECISION, & +CALL MPI_ALLREDUCE(ZTAB, PSUM_INOUT, IDIM, MNHREAL_MPI, & MPI_SUM, NMNH_COMM_WORLD, INFO) ! END SUBROUTINE RSUM0_ELEC_ll diff --git a/src/MNH/mode_mnh_timing.f90 b/src/MNH/mode_mnh_timing.f90 index 35d7c559ad4193581e19a2e885659d9287214e37..23c09916f99873b55b4e47dba0c2a45538611ad8 100644 --- a/src/MNH/mode_mnh_timing.f90 +++ b/src/MNH/mode_mnh_timing.f90 @@ -2,42 +2,56 @@ !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence !MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt !MNH_LIC for details. version 1. +!------------------------------------------------------------------------ MODULE MODE_MNH_TIMING ! -! Modification : -! J.ESCOBAR 13/11/2008 : change (2) in (:) for bug in IBM-SP6 compiler -! J.Escobar 1/09/2011 : reduce 'timing' format -! J.Escobar 12/02/2013 : tribulle to slow on large BG partition , inhib it by a early return in the code -! Philippe Wautelet: 10/01/2019: use NEWUNIT argument of OPEN -! +! Modifications: +! J. escobar 13/11/2008: change (2) in (:) for bug in IBM-SP6 compiler +! J. Escobar 01/09/2011: reduce 'timing' format +! J. Escobar 12/02/2013: triabulle too slow on large BG partition, inhib it by a early return in the code +! P. Wautelet 10/01/2019: use NEWUNIT argument of OPEN +! P. Wautelet 22/03/2019: use MNHREAL64 and MNHREAL64_MPI + typo corrections +! P. Wautelet 27/03/2019: use MNHTIME and MNHTIME_MPI instead of MNHREAL64 and MNHREAL64_MPI +! P. Wautelet 28/03/2019: use TFILE instead of unit number for set_iluout_timing +!------------------------------------------------------------------------ + +implicit none -INTEGER :: NLUOUT_TIMING +private + +public :: SECOND_MNH2, SET_ILUOUT_TIMING, TIME_HEADER_ll, TIME_STAT_ll +public :: TIMING_SEPARATOR, TIMING_LEGEND + +INTEGER :: NLUOUT_TIMING CONTAINS !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +subroutine second_mnh2(xt) -SUBROUTINE SECOND_MNH2(XT) -! USE modd_mpif -! -REAL*8,DIMENSION(2) :: XT -! -CALL CPU_TIME(XT(1)) -XT(2) = MPI_Wtime() -END SUBROUTINE SECOND_MNH2 +use modd_precision, only: MNHTIME + +real(kind=MNHTIME),dimension(2) :: xt +call cpu_time( xt(1) ) +xt(2) = MPI_WTIME() + +end subroutine second_mnh2 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +subroutine set_iluout_timing(tfile) -!JUAN - SUBROUTINE SET_ILUOUT_TIMING(KLUOUT) - IMPLICIT NONE - INTEGER, INTENT(IN) :: KLUOUT - NLUOUT_TIMING = KLUOUT - END SUBROUTINE SET_ILUOUT_TIMING +use modd_io, only: tfiledata + +implicit none +type(tfiledata), intent(in) :: tfile + +nluout_timing = tfile%nlu + +end subroutine set_iluout_timing !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! @@ -53,7 +67,7 @@ END SUBROUTINE SECOND_MNH2 SUBROUTINE TIMING_LEGEND() CALL TIMING_SEPARATOR('-') - WRITE(NLUOUT_TIMING,FMT="( '| CPUTIM/ELAPSE |& + WRITE(NLUOUT_TIMING,FMT="( '| CPUTIME/ELAPSED |& &| SUM(PROC) |MEAN(PROC)| MIN(PROC | MAX(PROC)| PERCENT %|')" ) CALL TIMING_SEPARATOR('-') END SUBROUTINE TIMING_LEGEND @@ -84,33 +98,30 @@ END SUBROUTINE SECOND_MNH2 !* 0. DECLARATIONS ! USE MODD_MPIF - USE MODD_VAR_ll, ONLY : MPI_PRECISION, NPROC, IP - !JUANZ - USE MODD_VAR_ll, ONLY : NMNH_COMM_WORLD - !JUANZ + use modd_precision, only: MNHTIME, MNHTIME_MPI + USE MODD_VAR_ll, ONLY: IP, NMNH_COMM_WORLD, NPROC ! IMPLICIT NONE ! !* 0.1 Declarations of dummy arguments : ! - REAL*8,DIMENSION(:), INTENT(IN) :: PRES ! (1)=CPU & (2)=ELAPSE Proccessors Timing -! - REAL*8,DIMENSION(:), INTENT(INOUT) :: PSUM ! (1)=SUM(CPU) & (2)=SUM(ELAPSE) Timing -! - CHARACTER(len=*), INTENT(IN),OPTIONAL :: HPRINT - CHARACTER , INTENT(IN),OPTIONAL :: HSEP - CHARACTER(len=*), INTENT(IN),OPTIONAL :: HFULL + REAL(kind=MNHTIME), DIMENSION(:), INTENT(IN) :: PRES ! (1)=CPU & (2)=ELAPSED Processes Timing + REAL(kind=MNHTIME), DIMENSION(:), INTENT(INOUT) :: PSUM ! (1)=SUM(CPU) & (2)=SUM(ELAPSED) Timing + CHARACTER(len=*), OPTIONAL, INTENT(IN) :: HPRINT + CHARACTER , OPTIONAL, INTENT(IN) :: HSEP + CHARACTER(len=*), OPTIONAL, INTENT(IN) :: HFULL ! !* 0.2 Declarations of local variables : ! INTEGER,PARAMETER :: NSTAT=5 - REAL*8,DIMENSION(2,NSTAT) :: ZSTAT ! (1)=Sum(proc),(2)=Sum/Nproc,(3)=Min(proc),(4)=Max(proc),(5)=Purcent(1) + INTEGER :: INFO,IROOT,JP CHARACTER(len=30) :: VIDE = "" - CHARACTER(len=30) :: FILE = "" + CHARACTER(len=30) :: FILE = "" INTEGER :: IC - REAL*8,DIMENSION(2,NPROC) :: ZSTAT_ALL + REAL(kind=MNHTIME), DIMENSION(2,NSTAT) :: ZSTAT ! (1)=Sum(proc),(2)=Sum/Nproc,(3)=Min(proc),(4)=Max(proc),(5)=Percent(1) + REAL(kind=MNHTIME), DIMENSION(2,NPROC) :: ZSTAT_ALL INTEGER, DIMENSION(NPROC) :: IND INTEGER :: ILU ! @@ -120,15 +131,15 @@ END SUBROUTINE SECOND_MNH2 ! ------------------------------ INFO = -1 ! 1.1 Sum(Proc) - CALL MPI_ALLREDUCE(PRES, ZSTAT(:,1), 2, MPI_REAL8, & + CALL MPI_ALLREDUCE(PRES, ZSTAT(:,1), 2, MNHTIME_MPI, & MPI_SUM, NMNH_COMM_WORLD, INFO) ! 1.2 Sum/Proc ZSTAT(:,2) = ZSTAT(:,1 ) / NPROC ! 1.3 Min(Proc) - CALL MPI_ALLREDUCE(PRES, ZSTAT(:,3), 2, MPI_REAL8, & + CALL MPI_ALLREDUCE(PRES, ZSTAT(:,3), 2, MNHTIME_MPI, & MPI_MIN, NMNH_COMM_WORLD, INFO) ! 1.4 Max(Proc) - CALL MPI_ALLREDUCE(PRES, ZSTAT(:,4), 2, MPI_REAL8, & + CALL MPI_ALLREDUCE(PRES, ZSTAT(:,4), 2, MNHTIME_MPI, & MPI_MAX, NMNH_COMM_WORLD, INFO) @@ -138,8 +149,8 @@ INFO = -1 ! ELSEIF ( ZSTAT(1,1) > 0.0 ) THEN - ! use Psum , for print stat & pourcent - ! Purcent + ! use Psum , for print stat & percent + ! Percent WHERE ( PSUM /= 0.0 ) ZSTAT(:,5) = 100.0 * ZSTAT(:,1) / PSUM(:) ELSEWHERE @@ -148,14 +159,14 @@ INFO = -1 ! print stat ! IF (PRESENT(HSEP)) CALL TIMING_SEPARATOR(HSEP) - WRITE(NLUOUT_TIMING,FMT= "('|',A30,'| CPUTIM ||',F15.3,'|',4(F10.3,'|'),F7.3,'|')" ) HPRINT//VIDE,ZSTAT(1,:) - WRITE(NLUOUT_TIMING,FMT= "('|',A30,'| ELAPSE ||',F15.3,'|',4(F10.3,'|'),F7.3,'|')" ) HPRINT//VIDE,ZSTAT(2,:) + WRITE(NLUOUT_TIMING,FMT= "('|',A29,'| CPUTIME ||',F15.3,'|',4(F10.3,'|'),F7.3,'|')" ) HPRINT//VIDE,ZSTAT(1,:) + WRITE(NLUOUT_TIMING,FMT= "('|',A29,'| ELAPSED ||',F15.3,'|',4(F10.3,'|'),F7.3,'|')" ) HPRINT//VIDE,ZSTAT(2,:) IF (PRESENT(HFULL)) THEN ! gather all data !CALL TIMING_SEPARATOR(HSEP) IROOT = 0 - CALL MPI_GATHER(PRES(:),2,MPI_REAL8,ZSTAT_ALL(:,1),2,MPI_REAL8,& + CALL MPI_GATHER(PRES(:),2,MNHTIME_MPI,ZSTAT_ALL(:,1),2,MNHTIME_MPI,& IROOT,NMNH_COMM_WORLD, INFO) IF (IP.EQ.1) THEN FILE = trim(adjustl(HPRINT)) @@ -188,17 +199,17 @@ INFO = -1 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! subroutine triabulle(vec,ind) -implicit none - -real*8 , intent(inout) :: vec(:) -integer, intent(out) :: ind(:) +use modd_precision, only: MNHTIME +implicit none -integer :: n +real(kind=MNHTIME), dimension(:), intent(inout) :: vec +integer, dimension(:), intent(out) :: ind logical :: a integer :: i integer :: mem +integer :: n n = size(vec) a = .true. @@ -207,7 +218,7 @@ do i=1,n enddo return -!JUAN TO SLOW ON BG !!! +!JUAN TOO SLOW ON BG !!! do while (a) a=.false. diff --git a/src/MNH/mode_tmat.f90 b/src/MNH/mode_tmat.f90 index 361bc6f9b9f99526b751e36c782776b4bb06f202..9de6651339a1a9b187f10cde8f36629bf357b551 100644 --- a/src/MNH/mode_tmat.f90 +++ b/src/MNH/mode_tmat.f90 @@ -15,7 +15,8 @@ ! ! Modif par Olivier Caumont (04/2008) pour interfa�age avec diagnostic ! radar de M�so-NH. -! P. Wautelet 22/01/2019: replace double precision declarations by real(kind(0.0d0)) (to allow compilation by NAG compiler) +! P. Wautelet 22/01/2019: replace double precision declarations by real(kind(0.0d0)) (to allow compilation by NAG compiler) +! P. Wautelet 22/02/2019: add kind parameter for CMPLX intrinsics (if not it default to single precision) ! P. Wautelet 10/04/2019: replace ABORT and STOP calls by Print_msg ! !**************************************************************************** @@ -1385,8 +1386,8 @@ DV1N=M*DV1(N) DV2N=DV2(N) - CT11=CMPLX(XRT11(M1,N,NN),XIT11(M1,N,NN)) - CT22=CMPLX(XRT22(M1,N,NN),XIT22(M1,N,NN)) + CT11=CMPLX(XRT11(M1,N,NN),XIT11(M1,N,NN),kind=kind(CT11)) + CT22=CMPLX(XRT22(M1,N,NN),XIT22(M1,N,NN),kind=kind(CT22)) IF (M.EQ.0) THEN @@ -1397,8 +1398,8 @@ ELSE - CT12=CMPLX(XRT12(M1,N,NN),XIT12(M1,N,NN)) - CT21=CMPLX(XRT21(M1,N,NN),XIT21(M1,N,NN)) + CT12=CMPLX(XRT12(M1,N,NN),XIT12(M1,N,NN),kind=kind(CT12)) + CT21=CMPLX(XRT21(M1,N,NN),XIT21(M1,N,NN),kind=kind(CT21)) CN1=CAL(N,NN)*FC CN2=CAL(N,NN)*FS diff --git a/src/MNH/modeln.f90 b/src/MNH/modeln.f90 index 44fde5f596477bcc1cbcaa3d7b283a8a9b1130a8..37e126a8af2544f9c6302e4ea5bcfd042fa6db1d 100644 --- a/src/MNH/modeln.f90 +++ b/src/MNH/modeln.f90 @@ -257,6 +257,8 @@ END MODULE MODI_MODEL_n ! (nsubfiles_ioz is now determined in IO_File_add2list) !! 02/2019 C.Lac add rain fraction as an output field !! Bielli S. 02/2019 Sea salt : significant sea wave height influences salt emission; 5 salt modes +! P. Wautelet 28/03/2019: use MNHTIME for time measurement variables +! P. Wautelet 28/03/2019: use TFILE instead of unit number for set_iluout_timing !!------------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -325,6 +327,7 @@ USE MODD_PARAM_MFSHALL_n USE MODD_PARAM_n USE MODD_PAST_FIELD_n USE MODD_PRECIP_n +use modd_precision, only: MNHTIME USE MODD_PROFILER_n USE MODD_RADIATIONS_n, ONLY: XTSRAD,XSCAFLASWD,XDIRFLASWD,XDIRSRFSWD, XAER, XDTHRAD USE MODD_RAIN_ICE_DESCR, ONLY: XRTMIN @@ -443,9 +446,8 @@ INTEGER :: IVERB ! LFI verbosity level LOGICAL :: GSTEADY_DMASS ! conditional call to mass computation ! ! for computing time analysis -REAL*8,DIMENSION(2) :: ZTIME,ZTIME1,ZTIME2,ZEND,ZTOT,ZALL,ZTOT_PT -! -REAL*8,DIMENSION(2) :: ZTIME_STEP,ZTIME_STEP_PTS +REAL(kind=MNHTIME), DIMENSION(2) :: ZTIME, ZTIME1, ZTIME2, ZEND, ZTOT, ZALL, ZTOT_PT +REAL(kind=MNHTIME), DIMENSION(2) :: ZTIME_STEP,ZTIME_STEP_PTS CHARACTER :: YMI INTEGER :: IPOINTS CHARACTER(len=16) :: YTCOUNT,YPOINTS @@ -713,45 +715,45 @@ IF (KTCOUNT == 1) THEN ! ! ! - XT_START = 0.0 - ! - XT_STORE = 0.0 - XT_BOUND = 0.0 - XT_GUESS = 0.0 - XT_FORCING = 0.0 - XT_NUDGING = 0.0 - XT_ADV = 0.0 - XT_ADVUVW = 0.0 - XT_GRAV = 0.0 - XT_SOURCES = 0.0 + XT_START = 0.0_MNHTIME + ! + XT_STORE = 0.0_MNHTIME + XT_BOUND = 0.0_MNHTIME + XT_GUESS = 0.0_MNHTIME + XT_FORCING = 0.0_MNHTIME + XT_NUDGING = 0.0_MNHTIME + XT_ADV = 0.0_MNHTIME + XT_ADVUVW = 0.0_MNHTIME + XT_GRAV = 0.0_MNHTIME + XT_SOURCES = 0.0_MNHTIME ! - XT_DIFF = 0.0 - XT_RELAX = 0.0 - XT_PARAM = 0.0 - XT_SPECTRA = 0.0 - XT_HALO = 0.0 - XT_VISC = 0.0 - XT_RAD_BOUND = 0.0 - XT_PRESS = 0.0 + XT_DIFF = 0.0_MNHTIME + XT_RELAX = 0.0_MNHTIME + XT_PARAM = 0.0_MNHTIME + XT_SPECTRA = 0.0_MNHTIME + XT_HALO = 0.0_MNHTIME + XT_VISC = 0.0_MNHTIME + XT_RAD_BOUND = 0.0_MNHTIME + XT_PRESS = 0.0_MNHTIME ! - XT_CLOUD = 0.0 - XT_STEP_SWA = 0.0 - XT_STEP_MISC = 0.0 - XT_COUPL = 0.0 - XT_1WAY = 0.0 - XT_STEP_BUD = 0.0 + XT_CLOUD = 0.0_MNHTIME + XT_STEP_SWA = 0.0_MNHTIME + XT_STEP_MISC = 0.0_MNHTIME + XT_COUPL = 0.0_MNHTIME + XT_1WAY = 0.0_MNHTIME + XT_STEP_BUD = 0.0_MNHTIME ! - XT_RAD = 0.0 - XT_DCONV = 0.0 - XT_GROUND = 0.0 - XT_TURB = 0.0 - XT_MAFL = 0.0 - XT_DRAG = 0.0 - XT_TRACER = 0.0 - XT_SHADOWS = 0.0 - XT_ELEC = 0.0 - XT_CHEM = 0.0 - XT_2WAY = 0.0 + XT_RAD = 0.0_MNHTIME + XT_DCONV = 0.0_MNHTIME + XT_GROUND = 0.0_MNHTIME + XT_TURB = 0.0_MNHTIME + XT_MAFL = 0.0_MNHTIME + XT_DRAG = 0.0_MNHTIME + XT_TRACER = 0.0_MNHTIME + XT_SHADOWS = 0.0_MNHTIME + XT_ELEC = 0.0_MNHTIME + XT_CHEM = 0.0_MNHTIME + XT_2WAY = 0.0_MNHTIME ! END IF ! @@ -2126,7 +2128,7 @@ IF (OEXIT) THEN ! ! Set File Timing OUTPUT ! - CALL SET_ILUOUT_TIMING(ILUOUT) + CALL SET_ILUOUT_TIMING(TLUOUT) ! ! Compute global time ! diff --git a/src/MNH/phys_paramn.f90 b/src/MNH/phys_paramn.f90 index 9fa7c447d60013f2be4909fd3ef6048edb9bcc23..a722563f12d687a12b26e24453a9b0e8be2c21a8 100644 --- a/src/MNH/phys_paramn.f90 +++ b/src/MNH/phys_paramn.f90 @@ -4,7 +4,7 @@ !MNH_LIC for details. version 1. !----------------------------------------------------------------- ! ######################## - MODULE MODI_PHYS_PARAM_n + MODULE MODI_PHYS_PARAM_n ! ######################## ! ! @@ -14,18 +14,17 @@ INTERFACE PRAD,PSHADOWS,PKAFR,PGROUND,PMAFL,PDRAG,PTURB,PTRACER, & PTIME_BU, PWETDEPAER, OMASKkids,OCLOUD_ONLY ) ! -USE MODD_IO, ONLY: TFILEDATA +USE MODD_IO, ONLY: TFILEDATA +use modd_precision, only: MNHTIME ! INTEGER, INTENT(IN) :: KTCOUNT ! temporal iteration count TYPE(TFILEDATA), INTENT(IN) :: TPFILE ! Synchronous output file LOGICAL, INTENT(IN) :: OCLOSE_OUT! conditional closure of the ! OUTPUT FM-file -! advection schemes -REAL*8,DIMENSION(2), INTENT(INOUT) :: PRAD,PSHADOWS,PKAFR,PGROUND,PTURB,PMAFL,PDRAG,PTRACER ! to store CPU - ! time for computing time - -REAL*8,DIMENSION(2), INTENT(INOUT) :: PTIME_BU ! time used in budget&LES budgets - ! statistics +! advection schemes +REAL(kind=MNHTIME), DIMENSION(2), INTENT(INOUT) :: PRAD,PSHADOWS,PKAFR,PGROUND,PTURB,PMAFL,PDRAG,PTRACER ! to store CPU + ! time for computing time +REAL(kind=MNHTIME), DIMENSION(2), INTENT(INOUT) :: PTIME_BU ! time used in budget&LES budgets statistics REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PWETDEPAER LOGICAL, DIMENSION(:,:), INTENT(IN) :: OMASKkids ! kids domains mask LOGICAL, INTENT(OUT) :: OCLOUD_ONLY ! conditionnal radiation computations for @@ -231,8 +230,9 @@ END MODULE MODI_PHYS_PARAM_n !! C.Lac 10/2017 : ch_monitor and aer_monitor extracted from phys_param !! to be called directly by modeln as the last process !! 02/2018 Q.Libois ECRAD -!! 28/03/2018 P. Wautelet: replace TEMPORAL_DIST by DATETIME_DISTANCE -!! Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O +! P. Wautelet 28/03/2018: replace TEMPORAL_DIST by DATETIME_DISTANCE +! P. Wautelet 05/2016-04/2018: new data structures and calls for I/O +! P. Wautelet 28/03/2019: use MNHTIME for time measurement variables !!------------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -292,6 +292,7 @@ USE MODD_PARAM_MFSHALL_n USE MODI_SHALLOW_MF_PACK USE MODD_CLOUD_MF_n USE MODD_ADV_n, ONLY : XRTKEMS +use modd_precision, only: MNHTIME ! USE MODI_SURF_RAD_MODIF USE MODI_GROUND_PARAM_n @@ -345,11 +346,10 @@ INTEGER, INTENT(IN) :: KTCOUNT ! temporal iteration count TYPE(TFILEDATA), INTENT(IN) :: TPFILE ! Synchronous output file LOGICAL, INTENT(IN) :: OCLOSE_OUT! conditional closure of the ! OUTPUT FM-file -! advection schemes -REAL*8,DIMENSION(2), INTENT(INOUT) :: PRAD,PSHADOWS,PKAFR,PGROUND,PTURB,PMAFL,PDRAG,PTRACER ! to store CPU - ! time for computing time - ! statistics -REAL*8,DIMENSION(2), INTENT(INOUT) :: PTIME_BU ! time used in budget&LES budgets +! advection schemes +REAL(kind=MNHTIME), DIMENSION(2), INTENT(INOUT) :: PRAD,PSHADOWS,PKAFR,PGROUND,PTURB,PMAFL,PDRAG,PTRACER ! to store CPU + ! time for computing time +REAL(kind=MNHTIME), DIMENSION(2), INTENT(INOUT) :: PTIME_BU ! time used in budget&LES budgets statistics REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PWETDEPAER LOGICAL, DIMENSION(:,:), INTENT(IN) :: OMASKkids ! kids domains mask LOGICAL, INTENT(OUT) :: OCLOUD_ONLY ! conditionnal radiation computations for @@ -401,8 +401,8 @@ REAL :: ZRAD_GLOB_ll ! 'real' global parallel mask of 'GRAD' INTEGER :: INFO_ll ! error report of parallel routines ! the only cloudy columns ! -REAL*8,DIMENSION(2) :: ZTIME1,ZTIME2,ZTIME3,ZTIME4 ! for computing time analysis -REAL*8,DIMENSION(2) :: ZTIME_LES_MF ! time spent in LES computation in shallow conv. +REAL(kind=MNHTIME), DIMENSION(2) :: ZTIME1, ZTIME2, ZTIME3, ZTIME4 ! for computing time analysis +REAL(kind=MNHTIME), DIMENSION(2) :: ZTIME_LES_MF ! time spent in LES computation in shallow conv. LOGICAL :: GDCONV ! conditionnal call for the deep convection ! computations REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZRC, ZRI, ZWT ! additional dummies @@ -452,12 +452,12 @@ IKB = 1 + JPVEXT IKE = IKU - JPVEXT CALL GET_INDICE_ll (IIB,IJB,IIE,IJE) ! -ZTIME1 = 0.0 -ZTIME2 = 0.0 -ZTIME3 = 0.0 -ZTIME4 = 0.0 -PTIME_BU = 0. -ZTIME_LES_MF = 0.0 +ZTIME1 = 0.0_MNHTIME +ZTIME2 = 0.0_MNHTIME +ZTIME3 = 0.0_MNHTIME +ZTIME4 = 0.0_MNHTIME +PTIME_BU = 0._MNHTIME +ZTIME_LES_MF = 0.0_MNHTIME PWETDEPAER(:,:,:,:) = 0. ! !* allocation of variables used in more than one parameterization diff --git a/src/MNH/prep_ideal_case.f90 b/src/MNH/prep_ideal_case.f90 index f14b703c0ac66d82eb86dba4e3e4a5bb184d9a97..b5aba7c9534ab6f71a48987110735d6947f14f3e 100644 --- a/src/MNH/prep_ideal_case.f90 +++ b/src/MNH/prep_ideal_case.f90 @@ -310,9 +310,11 @@ !! 06/2016 (G.Delautier) phasage surfex 8 !! P.Wautelet : 08/07/2016 : removed MNH_NCWRIT define !! 01/2018 (G.Delautier) SURFEX 8.1 -!! 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 07/02/2019: force TYPE to a known value for IO_File_add2list ! P. Wautelet 14/02/2019: remove CLUOUT/CLUOUT0 and associated variables +! P. Wautelet 28/03/2019: use MNHTIME for time measurement variables +! P. Wautelet 28/03/2019: use TFILE instead of unit number for set_iluout_timing !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -351,6 +353,7 @@ USE MODD_IO, ONLY: NIO_VERB, NVERB_DEBUG, TFILE_DUMMY, TFILE_OUTPUTLISTIN USE MODD_CONF_n USE MODD_NSV, ONLY : NSV,NSV_CHEM, & NSV_DSTEND, NSV_DSTBEG +use modd_precision, only: LFIINT, MNHREAL_MPI, MNHTIME ! USE MODN_BLANK ! @@ -449,7 +452,7 @@ INTEGER :: NLUPRE,NLUOUT ! Logical unit numbers for EXPRE file ! and for output_listing file INTEGER :: NRESP ! return code in FM routines INTEGER :: NTYPE ! type of file (cpio or not) -INTEGER(KIND=LFI_INT) :: NNPRAR ! number of articles predicted in the LFIFM file +INTEGER(KIND=LFIINT) :: NNPRAR ! number of articles predicted in the LFIFM file LOGICAL :: GFOUND ! Return code when searching namelist ! INTEGER :: JLOOP,JILOOP,JJLOOP ! Loop indexes @@ -555,7 +558,7 @@ REAL, DIMENSION(:,:,:), ALLOCATABLE ::ZTHL,ZT,ZRT,ZFRAC_ICE,& REAL :: ZDIST ! !JUAN TIMING -REAL*8,DIMENSION(2) :: ZTIME1,ZTIME2,ZEND,ZTOT +REAL(kind=MNHTIME), DIMENSION(2) :: ZTIME1, ZTIME2, ZEND, ZTOT CHARACTER :: YMI INTEGER :: IMI INTEGER::JK @@ -623,8 +626,8 @@ CALL VERSION CPROGRAM='IDEAL ' ! !JUAN TIMING - XT_START = 0.0 - XT_STORE = 0.0 + XT_START = 0.0_MNHTIME + XT_STORE = 0.0_MNHTIME ! CALL SECOND_MNH2(ZEND) ! @@ -1211,7 +1214,7 @@ IF( LEN_TRIM(CPGD_FILE) /= 0 ) THEN ! determine whether the model is flat or no ! ZZS_MAX = ABS( MAXVAL(XZS(NIB:NIU-JPHEXT,NJB:NJU-JPHEXT))) - CALL MPI_ALLREDUCE(ZZS_MAX, ZZS_MAX_ll, 1, MPI_PRECISION, MPI_MAX, & + CALL MPI_ALLREDUCE(ZZS_MAX, ZZS_MAX_ll, 1, MNHREAL_MPI, MPI_MAX, & NMNH_COMM_WORLD,IINFO_ll) IF( ABS(ZZS_MAX_ll) < 1.E-10 ) THEN LFLAT=.TRUE. @@ -1872,7 +1875,7 @@ END IF ! ! Set File Timing OUTPUT ! - CALL SET_ILUOUT_TIMING(NLUOUT) + CALL SET_ILUOUT_TIMING(TLUOUT0) ! ! Compute global time ! diff --git a/src/MNH/prep_pgd.f90 b/src/MNH/prep_pgd.f90 index 81ab9dd5e885dd79aafacac0f8d1db8aba6edeb9..86b375631f93207762fa91052e5412c6c11d7679 100644 --- a/src/MNH/prep_pgd.f90 +++ b/src/MNH/prep_pgd.f90 @@ -90,6 +90,7 @@ USE MODD_LUNIT, ONLY : TLUOUT0 USE MODD_LUNIT_n,ONLY : LUNIT_MODEL USE MODD_PARAMETERS, ONLY : XUNDEF USE MODD_IO, ONLY : NIO_VERB,NVERB_DEBUG,TFILEDATA,TFILE_OUTPUTLISTING,TFILE_SURFEX +use modd_precision, only: LFIINT USE MODD_IO_SURF_MNH, ONLY : NHALO USE MODD_SPAWN, ONLY : NDXRATIO,NDYRATIO,NXSIZE,NYSIZE,NXOR,NYOR ! @@ -248,7 +249,7 @@ CALL PGD_SURF_ATM(YSURF_CUR,'MESONH',' ',' ',.FA !* 3. Writes the physiographic fields ! ------------------------------- ! -CALL IO_File_add2list(TZFILE,CPGDFILE,'PGD','WRITE',KLFINPRAR=INT(1,KIND=LFI_INT),KLFITYPE=1,KLFIVERB=5) +CALL IO_File_add2list(TZFILE,CPGDFILE,'PGD','WRITE',KLFINPRAR=INT(1,KIND=LFIINT),KLFITYPE=1,KLFIVERB=5) ! CALL IO_File_open(TZFILE) ! diff --git a/src/MNH/pressurez.f90 b/src/MNH/pressurez.f90 index 70969b1e7532d5dec626903af516c6c763c00c28..c9eca886954b3cf6d30b5b7690592d9a635f182e 100644 --- a/src/MNH/pressurez.f90 +++ b/src/MNH/pressurez.f90 @@ -231,8 +231,9 @@ USE MODD_DYN_n, ONLY: LRES, XRES USE MODD_LUNIT_n, ONLY: TLUOUT USE MODD_MPIF USE MODD_PARAMETERS +use modd_precision, only: MNHREAL_MPI USE MODD_REF, ONLY: LBOUSS -USE MODD_VAR_ll, ONLY: MPI_PRECISION, NMNH_COMM_WORLD , NPROC +USE MODD_VAR_ll, ONLY: NMNH_COMM_WORLD , NPROC ! USE MODE_ll USE MODE_MPPDB @@ -685,7 +686,7 @@ IF (LBUDGET_W) CALL BUDGET (PRWS,3,'PRES_BU_RW') ! ----------------------------- ! ZMAX = MAXVAL(ABS ( PRHODREF(:,:,IKB)-PRHODREF(:,:,IKE)) ) -CALL MPI_ALLREDUCE(ZMAX, ZMAX_ll, 1, MPI_PRECISION, MPI_MAX, & +CALL MPI_ALLREDUCE(ZMAX, ZMAX_ll, 1, MNHREAL_MPI, MPI_MAX, & NMNH_COMM_WORLD, KINFO) !IF ( ABS(PRHODREF(IIB,IJB,IKB)-PRHODREF(IIB,IJB,IKE)) > 1.E-12 & ! .AND. KTCOUNT >0 ) THEN diff --git a/src/MNH/read_chem_data_netcdf_case.f90 b/src/MNH/read_chem_data_netcdf_case.f90 index 6e63593d2a7bc74009222b4c0bb1154d551e3aa9..778b9e29c97c92e0e4d788fff847280ba6944660 100644 --- a/src/MNH/read_chem_data_netcdf_case.f90 +++ b/src/MNH/read_chem_data_netcdf_case.f90 @@ -104,10 +104,10 @@ USE MODD_GRID_n USE MODD_IO, ONLY: TFILEDATA USE MODD_LUNIT, ONLY: TLUOUT0 USE MODE_MODELN_HANDLER -USE MODD_NETCDF, ONLY:IDCDF_KIND USE MODD_NSV USE MODD_PARAMETERS -USE MODD_PARAM_n, ONLY : CTURB +USE MODD_PARAM_n, ONLY: CTURB +USE MODD_PRECISION, ONLY: CDFINT USE MODD_PREP_REAL USE MODD_TIME USE MODD_TIME_n @@ -190,12 +190,12 @@ TYPE(TFILEDATA),POINTER :: TZFILE ! ! For netcdf ! -integer(kind=IDCDF_KIND) :: status, ncid, varid -integer(kind=IDCDF_KIND) :: lat_varid, lon_varid, lev_varid, time_varid -integer(kind=IDCDF_KIND) :: hyam_varid, hybm_varid, p0_varid, t_varid, q_varid, ps_varid -integer(kind=IDCDF_KIND) :: recid, latid, lonid, levid, timeid -integer(kind=IDCDF_KIND) :: latlen, lonlen, levlen, nrecs,timelen -integer(kind=IDCDF_KIND) :: itimeindex, KILEN, jrec +integer(kind=CDFINT) :: status, ncid, varid +integer(kind=CDFINT) :: lat_varid, lon_varid, lev_varid, time_varid +integer(kind=CDFINT) :: hyam_varid, hybm_varid, p0_varid, t_varid, q_varid, ps_varid +integer(kind=CDFINT) :: recid, latid, lonid, levid, timeid +integer(kind=CDFINT) :: latlen, lonlen, levlen, nrecs,timelen +integer(kind=CDFINT) :: itimeindex, KILEN, jrec CHARACTER(LEN=40) :: recname REAL, DIMENSION(:), ALLOCATABLE :: lats REAL, DIMENSION(:), ALLOCATABLE :: lons @@ -767,7 +767,7 @@ CONTAINS ! ############################# use mode_msg - integer(kind=IDCDF_KIND) status + integer(kind=CDFINT) status if ( status /= NF90_NOERR ) then call Print_msg( NVERB_FATAL, 'IO', 'HANDLE_ERR', NF90_STRERROR(status) ) diff --git a/src/MNH/read_surf_mnh.f90 b/src/MNH/read_surf_mnh.f90 index 862e27e31c8b6b0fa185592f4c76e5df620c007e..e274f4d85c008a739630af86561798170bc3d9fb 100644 --- a/src/MNH/read_surf_mnh.f90 +++ b/src/MNH/read_surf_mnh.f90 @@ -5,6 +5,7 @@ !----------------------------------------------------------------- ! Modifications: !! Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O +! P. Wautelet 22/02/2019: set HCOMMENT for all subroutines (dummy argument with intent OUT) ! P. Wautelet 10/04/2019: replace ABORT and STOP calls by Print_msg !----------------------------------------------------------------- MODULE MODE_READ_SURF_MNH_TOOLS @@ -158,7 +159,7 @@ IMPLICIT NONE CHARACTER(LEN=LEN_HREC),INTENT(IN) :: HREC ! name of the article to be read REAL, INTENT(OUT) :: PFIELD ! the real scalar to be read INTEGER, INTENT(OUT) :: KRESP ! KRESP : return-code if a problem appears -CHARACTER(LEN=100), INTENT(OUT) :: HCOMMENT ! comment +CHARACTER(LEN=*), INTENT(OUT) :: HCOMMENT ! comment ! !* 0.2 Declarations of local variables ! @@ -176,6 +177,7 @@ TYPE(TFIELDDATA) :: TZFIELD CALL PRINT_MSG(NVERB_DEBUG,'IO','READ_SURFX0_MNH',TRIM(TPINFILE%CNAME)//': reading '//TRIM(HREC)) ! ILUOUT = TOUT%NLU +HCOMMENT='' ! IF (HREC=='LONORI' .OR. HREC=='LATORI') THEN IF (TPINFILE%NMNHVERSION(1)<4 .OR. (TPINFILE%NMNHVERSION(1)==4 .AND. TPINFILE%NMNHVERSION(2)<=5)) THEN @@ -232,6 +234,7 @@ IF ( HREC=='LAT0' .OR. HREC=='LON0' .OR. HREC=='RPK' .OR. HREC=='BETA' & ELSE CALL PREPARE_METADATA_READ_SURF(HREC,'--',0,TYPEREAL,0,'READ_SURFX0_MNH',TZFIELD) CALL IO_Field_read(TPINFILE,TZFIELD,PFIELD,KRESP) + HCOMMENT = TZFIELD%CCOMMENT END IF IF (KRESP /=0) THEN @@ -312,7 +315,7 @@ CHARACTER(LEN=LEN_HREC),INTENT(IN) :: HREC ! name of the article to be read INTEGER, INTENT(IN) :: KL ! number of points REAL, DIMENSION(KL), INTENT(OUT):: PFIELD ! array containing the data field INTEGER, INTENT(OUT):: KRESP ! KRESP : return-code if a problem appears -CHARACTER(LEN=100), INTENT(OUT):: HCOMMENT ! comment +CHARACTER(LEN=*), INTENT(OUT):: HCOMMENT ! comment CHARACTER(LEN=1), INTENT(IN) :: HDIR ! type of field : ! ! 'H' for HOR : with hor. dim.; and distributed. ! ! 'A' for ALL : with hor. dim.; and not distributed. @@ -344,6 +347,7 @@ CALL PRINT_MSG(NVERB_DEBUG,'IO','READ_SURFX1_MNH',TRIM(TPINFILE%CNAME)//': readi ! KRESP = 0 ILUOUT = TOUT%NLU +HCOMMENT = ' ' ! IF (HDIR=='A'.OR.HDIR=='E') THEN IIU = NIU_ALL @@ -380,7 +384,6 @@ ELSE IF (HREC=='LON') THEN ELSE IF (HREC=='MESH_SIZE') THEN PFIELD(:) = 0. - HCOMMENT = ' ' ELSE IF (HREC=='XX') THEN !! reading of a 1D field along X in the file @@ -395,6 +398,7 @@ ELSE IF (HREC=='XX') THEN TZFIELD%CDIR = '--' END IF CALL IO_Field_read(TPINFILE,TZFIELD,ZWORK1D,KRESP) + HCOMMENT = TZFIELD%CCOMMENT DO JJ = 1,IJU ZWORK(IIB:IIE,JJ) = 0.5 * ZWORK1D(IIB:IIE) + 0.5 * ZWORK1D(IIB+1:IIE+1) END DO @@ -414,6 +418,7 @@ ELSE IF (HREC=='DX') THEN TZFIELD%CDIR = '--' END IF CALL IO_Field_read(TPINFILE,TZFIELD,ZWORK1D,KRESP) + HCOMMENT = TZFIELD%CCOMMENT DO JJ = 1,IJU ZWORK(IIB:IIE,JJ) = - ZWORK1D(IIB:IIE) + ZWORK1D(IIB+1:IIE+1) END DO @@ -433,6 +438,7 @@ ELSE IF (HREC=='YY') THEN TZFIELD%CDIR = '--' END IF CALL IO_Field_read(TPINFILE,TZFIELD,ZWORK1D,KRESP) + HCOMMENT = TZFIELD%CCOMMENT DO JI = 1,IIU ZWORK(JI,IJB:IJE) = 0.5 * ZWORK1D(IJB:IJE) + 0.5 * ZWORK1D(IJB+1:IJE+1) END DO @@ -452,6 +458,7 @@ ELSE IF (HREC=='DY') THEN TZFIELD%CDIR = '--' END IF CALL IO_Field_read(TPINFILE,TZFIELD,ZWORK1D,KRESP) + HCOMMENT = TZFIELD%CCOMMENT DO JI = 1,IIU ZWORK(JI,IJB:IJE) = - ZWORK1D(IJB:IJE) + ZWORK1D(IJB+1:IJE+1) END DO @@ -501,6 +508,7 @@ ELSE CALL PREPARE_METADATA_READ_SURF(YREC,'--',4,TYPEREAL,1,'READ_SURFX1_MNH',TZFIELD) CALL IO_Field_read(TPINFILE,TZFIELD,PFIELD,KRESP) END IF + HCOMMENT = TZFIELD%CCOMMENT ! IF (KRESP /=0) THEN WRITE(ILUOUT,*) 'WARNING' @@ -595,7 +603,7 @@ INTEGER, INTENT(IN) :: KL1 ! number of points INTEGER, INTENT(IN) :: KL2 ! second dimension REAL, DIMENSION(KL1,KL2),INTENT(OUT) :: PFIELD ! array containing the data field INTEGER, INTENT(OUT) :: KRESP ! KRESP : return-code if a problem appears -CHARACTER(LEN=100), INTENT(OUT) :: HCOMMENT ! comment +CHARACTER(LEN=*), INTENT(OUT) :: HCOMMENT ! comment CHARACTER(LEN=1), INTENT(IN) :: HDIR ! type of field : ! ! 'H' for HOR : with hor. dim.; and distributed. ! ! 'A' for ALL : with hor. dim.; and not distributed. @@ -638,6 +646,8 @@ ELSE CALL IO_Field_read(TPINFILE,TZFIELD,PFIELD,KRESP) END IF ! +HCOMMENT = TZFIELD%CCOMMENT +! IF (KRESP /=0) THEN WRITE(ILUOUT,*) 'WARNING' WRITE(ILUOUT,*) '-------' @@ -731,7 +741,7 @@ INTEGER, INTENT(IN) :: KL1,KL2 ! number of points REAL, DIMENSION(KL1,KL2), INTENT(OUT):: PFIELD ! array containing the data field LOGICAL,DIMENSION(JPCOVER),INTENT(IN) :: OFLAG ! mask for array filling INTEGER, INTENT(OUT):: KRESP ! KRESP : return-code if a problem appears -CHARACTER(LEN=100), INTENT(OUT):: HCOMMENT ! comment +CHARACTER(LEN=*), INTENT(OUT):: HCOMMENT ! comment CHARACTER(LEN=1), INTENT(IN) :: HDIR ! type of field : ! ! 'H' for HOR : with hor. dim.; and distributed. ! ! 'A' for ALL : with hor. dim.; and not distributed. @@ -839,6 +849,8 @@ ELSE CALL IO_Field_read(TPINFILE,TZFIELD,ZWORK3D(:,:,:),KRESP) END IF ! +HCOMMENT = TZFIELD%CCOMMENT +! IF (KRESP /=0) THEN WRITE(ILUOUT,*) 'WARNING' WRITE(ILUOUT,*) '-------' @@ -923,7 +935,7 @@ INTEGER, INTENT(IN) :: KL1 ! number of points INTEGER, INTENT(IN) :: KCOVER ! index of the vertical level, it should be a index such that LCOVER(KCOVER)=.TRUE. REAL, DIMENSION(KL1), INTENT(OUT):: PFIELD ! array containing the data field INTEGER, INTENT(OUT):: KRESP ! KRESP : return-code if a problem appears -CHARACTER(LEN=100), INTENT(OUT):: HCOMMENT ! comment +CHARACTER(LEN=*), INTENT(OUT):: HCOMMENT ! comment CHARACTER(LEN=1), INTENT(IN) :: HDIR ! type of field : ! ! 'H' for HOR : with hor. dim.; and distributed. ! ! 'A' for ALL : with hor. dim.; and not distributed. @@ -1024,6 +1036,8 @@ ELSE call Print_msg( NVERB_FATAL, 'IO', 'READ_SURFX2COV_1COV_MNH', 'GCOVER_PACKED=TRUE and we try to read the covers one by one' ) END IF ! +HCOMMENT = TZFIELD%CCOMMENT +! IF (KRESP /=0) THEN WRITE(ILUOUT,*) 'WARNING' WRITE(ILUOUT,*) '-------' @@ -1100,7 +1114,7 @@ IMPLICIT NONE CHARACTER(LEN=LEN_HREC),INTENT(IN) :: HREC ! name of the article to be read INTEGER, INTENT(OUT) :: KFIELD ! the integer to be read INTEGER, INTENT(OUT) :: KRESP ! KRESP : return-code if a problem appears -CHARACTER(LEN=100), INTENT(OUT) :: HCOMMENT ! comment +CHARACTER(LEN=*), INTENT(OUT) :: HCOMMENT ! comment ! !* 0.2 Declarations of local variables ! @@ -1114,6 +1128,7 @@ CALL PRINT_MSG(NVERB_DEBUG,'IO','READ_SURFN0_MNH',TRIM(TPINFILE%CNAME)//': readi ! KRESP=0 ILUOUT = TOUT%NLU +HCOMMENT='' ! IF (HREC=='DIM_FULL' .AND. ( CPROGRAM=='IDEAL ' .OR. & CPROGRAM=='SPAWN ' .OR. CPROGRAM=='ZOOMPG' ))THEN @@ -1123,6 +1138,7 @@ IF (HREC=='DIM_FULL' .AND. ( CPROGRAM=='IDEAL ' .OR. & ELSE CALL PREPARE_METADATA_READ_SURF(HREC,'--',0,TYPEINT,0,'READ_SURFN0_MNH',TZFIELD) CALL IO_Field_read(TPINFILE,TZFIELD,KFIELD,KRESP) + HCOMMENT = TZFIELD%CCOMMENT IF (KRESP /=0) THEN WRITE(ILUOUT,*) 'WARNING' @@ -1195,7 +1211,7 @@ CHARACTER(LEN=LEN_HREC),INTENT(IN) :: HREC ! name of the article to be read INTEGER, INTENT(IN) :: KL ! number of points INTEGER, DIMENSION(KL), INTENT(OUT) :: KFIELD ! the integer to be read INTEGER, INTENT(OUT) :: KRESP ! KRESP : return-code if a problem appears -CHARACTER(LEN=100), INTENT(OUT) :: HCOMMENT ! comment +CHARACTER(LEN=*), INTENT(OUT) :: HCOMMENT ! comment CHARACTER(LEN=1), INTENT(IN) :: HDIR ! type of field : ! ! 'H' : field with ! ! horizontal spatial dim. @@ -1236,9 +1252,11 @@ ELSE IF (HDIR=='H') THEN CALL PACK_2D_1D(NMASK,IWORK(NIB:NIE,NJB:NJE),KFIELD) END IF ! -DEALLOCATE(IWORK) - + DEALLOCATE(IWORK) ENDIF + +HCOMMENT = TZFIELD%CCOMMENT + !------------------------------------------------------------------------------- END SUBROUTINE READ_SURFN1_MNH ! @@ -1302,7 +1320,7 @@ IMPLICIT NONE CHARACTER(LEN=LEN_HREC),INTENT(IN) :: HREC ! name of the article to be read CHARACTER(LEN=40), INTENT(OUT) :: HFIELD ! the integer to be read INTEGER, INTENT(OUT) :: KRESP ! KRESP : return-code if a problem appears -CHARACTER(LEN=100), INTENT(OUT) :: HCOMMENT ! comment +CHARACTER(LEN=*), INTENT(OUT) :: HCOMMENT ! comment ! !* 0.2 Declarations of local variables ! @@ -1325,6 +1343,7 @@ CALL PRINT_MSG(NVERB_DEBUG,'IO','READ_SURFC0_MNH',TRIM(TPINFILE%CNAME)//': readi ! KRESP = 0 ILUOUT = TOUT%NLU +HCOMMENT = '' ! IF (TPINFILE%NMNHVERSION(1)<4 .OR. (TPINFILE%NMNHVERSION(1)==4 .AND. TPINFILE%NMNHVERSION(2)<6)) THEN SELECT CASE(TRIM(HREC)) @@ -1387,6 +1406,7 @@ ELSE IF ( HREC=='GRID_TYPE'.AND. ( & ELSE CALL PREPARE_METADATA_READ_SURF(HREC,'--',0,TYPECHAR,0,'READ_SURFC0_MNH',TZFIELD) CALL IO_Field_read(TPINFILE,TZFIELD,HFIELD,KRESP) + HCOMMENT = TZFIELD%CCOMMENT ! IF (KRESP /=0) THEN CALL PRINT_MSG(NVERB_FATAL,'IO','READ_SURFC0_MNH',TRIM(TPINFILE%CNAME)//': error when reading article '//TRIM(HREC)// & @@ -1458,7 +1478,7 @@ CHARACTER(LEN=LEN_HREC),INTENT(IN) :: HREC ! name of the article to be read INTEGER, INTENT(IN) :: KL ! number of points LOGICAL, DIMENSION(KL), INTENT(OUT) :: OFIELD ! array containing the data field INTEGER, INTENT(OUT) :: KRESP ! KRESP : return-code if a problem appears -CHARACTER(LEN=100), INTENT(OUT) :: HCOMMENT ! comment +CHARACTER(LEN=*), INTENT(OUT) :: HCOMMENT ! comment CHARACTER(LEN=1), INTENT(IN) :: HDIR ! type of field : ! ! 'H' : field with ! ! horizontal spatial dim. @@ -1510,6 +1530,9 @@ ELSE IF (HDIR=='H') THEN ! DEALLOCATE(GWORK) END IF + +HCOMMENT = TZFIELD%CCOMMENT + !------------------------------------------------------------------------------- END SUBROUTINE READ_SURFL1_MNH ! @@ -1568,7 +1591,7 @@ IMPLICIT NONE CHARACTER(LEN=LEN_HREC),INTENT(IN) :: HREC ! name of the article to be read LOGICAL, INTENT(OUT) :: OFIELD ! array containing the data field INTEGER, INTENT(OUT) :: KRESP ! KRESP : return-code if a problem appears -CHARACTER(LEN=100), INTENT(OUT) :: HCOMMENT ! comment +CHARACTER(LEN=*), INTENT(OUT) :: HCOMMENT ! comment ! !* 0.2 Declarations of local variables ! @@ -1668,7 +1691,7 @@ INTEGER, INTENT(OUT) :: KMONTH ! month INTEGER, INTENT(OUT) :: KDAY ! day REAL, INTENT(OUT) :: PTIME ! time INTEGER, INTENT(OUT) :: KRESP ! KRESP : return-code if a problem appears -CHARACTER(LEN=100), INTENT(OUT) :: HCOMMENT ! comment +CHARACTER(LEN=*), INTENT(OUT) :: HCOMMENT ! comment !* 0.2 Declarations of local variables ! @@ -1687,6 +1710,7 @@ TYPE(DATE_TIME) :: TZDATETIME CALL PRINT_MSG(NVERB_DEBUG,'IO','READ_SURFT0_MNH',TRIM(TPINFILE%CNAME)//': reading '//TRIM(HREC)) ! ILUOUT = TOUT%NLU +HCOMMENT = '' ! IF (TPINFILE%NMNHVERSION(1)<4 .OR. (TPINFILE%NMNHVERSION(1)==4 .AND. TPINFILE%NMNHVERSION(2)<6)) THEN CALL IO_Field_read(TPINFILE,'STORAGE_TYPE',YFILETYPE2) @@ -1792,7 +1816,7 @@ INTEGER, DIMENSION(KL1), INTENT(OUT) :: KMONTH ! month INTEGER, DIMENSION(KL1), INTENT(OUT) :: KDAY ! day REAL, DIMENSION(KL1), INTENT(OUT) :: PTIME ! time INTEGER, INTENT(OUT) :: KRESP ! KRESP : return-code if a problem appears -CHARACTER(LEN=100), INTENT(OUT) :: HCOMMENT ! comment +CHARACTER(LEN=*), INTENT(OUT) :: HCOMMENT ! comment !* 0.2 Declarations of local variables ! @@ -1810,6 +1834,7 @@ TYPE(TFIELDDATA) :: TZFIELD CALL PRINT_MSG(NVERB_DEBUG,'IO','READ_SURFT1_MNH',TRIM(TPINFILE%CNAME)//': reading '//TRIM(HREC)) ! ILUOUT = TOUT%NLU +HCOMMENT = '' ! IF (TPINFILE%NMNHVERSION(1)<4 .OR. (TPINFILE%NMNHVERSION(1)==4 .AND. TPINFILE%NMNHVERSION(2)<6)) THEN CALL IO_Field_read(TPINFILE,'STORAGE_TYPE',YFILETYPE2) @@ -1842,7 +1867,7 @@ TZFIELD%CSTDNAME = '' TZFIELD%CLONGNAME = TRIM(TZFIELD%CMNHNAME) TZFIELD%CUNITS = '' TZFIELD%CDIR = '--' -TZFIELD%CCOMMENT = TRIM(HCOMMENT) +TZFIELD%CCOMMENT = '' TZFIELD%NGRID = 0 TZFIELD%NTYPE = TYPEINT TZFIELD%NDIMS = 2 @@ -1867,7 +1892,7 @@ TZFIELD%CSTDNAME = '' TZFIELD%CLONGNAME = TRIM(TZFIELD%CMNHNAME) TZFIELD%CUNITS = '' TZFIELD%CDIR = '--' -TZFIELD%CCOMMENT = TRIM(HCOMMENT) +TZFIELD%CCOMMENT = '' TZFIELD%NGRID = 0 TZFIELD%NTYPE = TYPEREAL TZFIELD%NDIMS = 1 diff --git a/src/MNH/retrieve2_nest_infon.f90 b/src/MNH/retrieve2_nest_infon.f90 index 1e3b0776c7e6ce2162b703f1c5b9aa4541fa2424..b974932530682ad0186d3465847a2dbb0b6597e9 100644 --- a/src/MNH/retrieve2_nest_infon.f90 +++ b/src/MNH/retrieve2_nest_infon.f90 @@ -89,7 +89,7 @@ END MODULE MODI_RETRIEVE2_NEST_INFO_n !! J Stein 04/07/01 add cartesian case !! M.Faivre 2014 !! J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 -!! J.Escobar : 01/06/2016 : Bug in type of ZBUF INTEGER => REAL & use MPI_PRECISION for r4/R8 compatibility +!! J.Escobar : 01/06/2016 : Bug in type of ZBUF INTEGER => REAL & use MNHREAL_MPI for r4/R8 compatibility !! Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O !------------------------------------------------------------------------------- ! @@ -106,8 +106,9 @@ USE MODD_MPIF USE MODD_PARAMETERS USE MODD_PGDDIM USE MODD_PGDGRID +use modd_precision, only: MNHREAL_MPI USE MODD_STRUCTURE_ll, ONLY: ZONE_ll -USE MODD_VAR_ll, ONLY: YSPLITTING, NMNH_COMM_WORLD, MPI_PRECISION +USE MODD_VAR_ll, ONLY: YSPLITTING, NMNH_COMM_WORLD ! USE MODE_GRIDPROJ USE MODE_MODELN_HANDLER @@ -302,13 +303,13 @@ ENDIF ! get the value of XXHAT and XYHAT at the origin of global son model ZXHATFIRSTENTRY_C = XXHAT(JPHEXT+1) ZYHATFIRSTENTRY_C = XYHAT(JPHEXT+1) - CALL MPI_ALLREDUCE(XXHAT(JPHEXT+1), ZXHATFIRSTENTRY_C, 1,MPI_PRECISION, MPI_MIN, NMNH_COMM_WORLD, IINFO_ll) - CALL MPI_ALLREDUCE(XYHAT(JPHEXT+1), ZYHATFIRSTENTRY_C, 1,MPI_PRECISION, MPI_MIN, NMNH_COMM_WORLD, IINFO_ll) + CALL MPI_ALLREDUCE(XXHAT(JPHEXT+1), ZXHATFIRSTENTRY_C, 1,MNHREAL_MPI, MPI_MIN, NMNH_COMM_WORLD, IINFO_ll) + CALL MPI_ALLREDUCE(XYHAT(JPHEXT+1), ZYHATFIRSTENTRY_C, 1,MNHREAL_MPI, MPI_MIN, NMNH_COMM_WORLD, IINFO_ll) ! get the latitude and longitude ZLAT2 and ZLON2 at the origin of global son model ZLAT2GLB = ZLAT2 ZLON2GLB = ZLON2 - CALL MPI_ALLREDUCE(ZLAT2, ZLAT2GLB, 1,MPI_PRECISION, MPI_MIN, NMNH_COMM_WORLD, IINFO_ll) - CALL MPI_ALLREDUCE(ZLON2, ZLON2GLB, 1,MPI_PRECISION, MPI_MIN, NMNH_COMM_WORLD, IINFO_ll) + CALL MPI_ALLREDUCE(ZLAT2, ZLAT2GLB, 1,MNHREAL_MPI, MPI_MIN, NMNH_COMM_WORLD, IINFO_ll) + CALL MPI_ALLREDUCE(ZLON2, ZLON2GLB, 1,MNHREAL_MPI, MPI_MIN, NMNH_COMM_WORLD, IINFO_ll) ! identify the process that own the origin of global son model, and communicate the global indices of the origin to all processes IF ( ZXHATFIRSTENTRY_C > XPGDXHAT(JPHEXT+1) .AND. ZXHATFIRSTENTRY_C <= XPGDXHAT(SIZE(XPGDXHAT)-JPHEXT) .AND. & @@ -365,8 +366,8 @@ DO IPROC = 0,ISNPROC-1 !loop on all processes ZXHATFIRSTENTRY_C = XXHAT(JPHEXT+1) ZYHATFIRSTENTRY_C = XYHAT(JPHEXT+1) ! broadcast XXHAT(JPHEXT+1) and find which process' father subdomain contains the coords of the first physical entry of local son subdomain - CALL MPI_BCAST( ZXHATFIRSTENTRY_C, 1, MPI_PRECISION, IPROC, NMNH_COMM_WORLD, IINFO_ll ) - CALL MPI_BCAST( ZYHATFIRSTENTRY_C, 1, MPI_PRECISION, IPROC, NMNH_COMM_WORLD, IINFO_ll ) + CALL MPI_BCAST( ZXHATFIRSTENTRY_C, 1, MNHREAL_MPI, IPROC, NMNH_COMM_WORLD, IINFO_ll ) + CALL MPI_BCAST( ZYHATFIRSTENTRY_C, 1, MNHREAL_MPI, IPROC, NMNH_COMM_WORLD, IINFO_ll ) ! ! communicating the value of XPGDXHAT (X direction) at the origin of local son subdomain IF ( IPROC == ISP-1 .AND. ZXHATFIRSTENTRY_C >= XPGDXHAT(JPHEXT+1) & @@ -389,9 +390,9 @@ DO IPROC = 0,ISNPROC-1 !loop on all processes ! the index of the first physical point of the local son subdomain of IPROC is II on the current process ! send XPGDXHAT(II) to process IPROC ZSENDBUF = XPGDXHAT(II) - CALL MPI_SEND( ZSENDBUF,1,MPI_PRECISION,IPROC,ISP+II,NMNH_COMM_WORLD,IINFO_ll ) + CALL MPI_SEND( ZSENDBUF,1,MNHREAL_MPI,IPROC,ISP+II,NMNH_COMM_WORLD,IINFO_ll ) ELSE IF ( IPROC == ISP-1 ) THEN - CALL MPI_RECV( ZRECVBUF,1,MPI_PRECISION,MPI_ANY_SOURCE,MPI_ANY_TAG,NMNH_COMM_WORLD,MPI_STATUS_IGNORE,IINFO_ll ) + CALL MPI_RECV( ZRECVBUF,1,MNHREAL_MPI,MPI_ANY_SOURCE,MPI_ANY_TAG,NMNH_COMM_WORLD,MPI_STATUS_IGNORE,IINFO_ll ) ZPGDXHATIXY1 = ZRECVBUF ELSE ! the other processes do nothing... @@ -418,9 +419,9 @@ DO IPROC = 0,ISNPROC-1 !loop on all processes ! the index of the first physical point of the local son subdomain is II on the current process ! send XPGDYHAT(II) to process IPROC ZSENDBUF = XPGDYHAT(II) - CALL MPI_SEND( ZSENDBUF,1,MPI_PRECISION,IPROC,ISP+II,NMNH_COMM_WORLD,IINFO_ll ) + CALL MPI_SEND( ZSENDBUF,1,MNHREAL_MPI,IPROC,ISP+II,NMNH_COMM_WORLD,IINFO_ll ) ELSE IF ( IPROC == ISP-1 ) THEN - CALL MPI_RECV( ZRECVBUF,1,MPI_PRECISION,MPI_ANY_SOURCE,MPI_ANY_TAG,NMNH_COMM_WORLD,MPI_STATUS_IGNORE,IINFO_ll ) + CALL MPI_RECV( ZRECVBUF,1,MNHREAL_MPI,MPI_ANY_SOURCE,MPI_ANY_TAG,NMNH_COMM_WORLD,MPI_STATUS_IGNORE,IINFO_ll ) ZPGDYHATIXY1 = ZRECVBUF ELSE ! the other processes do nothing... @@ -437,8 +438,8 @@ DO IPROC = 0,ISNPROC-1 !loop on all processes ZXHATFIRSTENTRY_C = XXHAT(JPHEXT+1) ZYHATFIRSTENTRY_C = XYHAT(JPHEXT+1) ! broadcast XXHAT(JPHEXT+1) and find which process' father subdomain contains the coords of the first physical entry of local son subdomain - CALL MPI_BCAST( ZXHATFIRSTENTRY_C, 1, MPI_PRECISION, IPROC, NMNH_COMM_WORLD, IINFO_ll ) - CALL MPI_BCAST( ZYHATFIRSTENTRY_C, 1, MPI_PRECISION, IPROC, NMNH_COMM_WORLD, IINFO_ll ) + CALL MPI_BCAST( ZXHATFIRSTENTRY_C, 1, MNHREAL_MPI, IPROC, NMNH_COMM_WORLD, IINFO_ll ) + CALL MPI_BCAST( ZYHATFIRSTENTRY_C, 1, MNHREAL_MPI, IPROC, NMNH_COMM_WORLD, IINFO_ll ) ! ! communicating the value of XPGDXHAT (X direction) at the origin of local son subdomain IF ( IPROC == ISP-1 .AND. ZXHATFIRSTENTRY_C >= XPGDXHAT(JPHEXT+1) & @@ -462,9 +463,9 @@ DO IPROC = 0,ISNPROC-1 !loop on all processes ! XPGDXHAT(II+1) is also defined on current process since HALO is at least 1 ! send XPGDXHAT(II+1) to process IPROC ZSENDBUF = XPGDXHAT(II+1) - CALL MPI_SEND( ZSENDBUF,1,MPI_PRECISION,IPROC,ISP+II+1,NMNH_COMM_WORLD,IINFO_ll ) + CALL MPI_SEND( ZSENDBUF,1,MNHREAL_MPI,IPROC,ISP+II+1,NMNH_COMM_WORLD,IINFO_ll ) ELSE IF ( IPROC == ISP-1 ) THEN - CALL MPI_RECV( ZRECVBUF,1,MPI_PRECISION,MPI_ANY_SOURCE,MPI_ANY_TAG,NMNH_COMM_WORLD,MPI_STATUS_IGNORE,IINFO_ll ) + CALL MPI_RECV( ZRECVBUF,1,MNHREAL_MPI,MPI_ANY_SOURCE,MPI_ANY_TAG,NMNH_COMM_WORLD,MPI_STATUS_IGNORE,IINFO_ll ) ZPGDXHATIXY1_1 = ZRECVBUF ELSE ! the other processes do nothing... @@ -492,9 +493,9 @@ DO IPROC = 0,ISNPROC-1 !loop on all processes ! XPGDYHAT(II+1) is also defined on current process since HALO is at least 1 ! send XPGDYHAT(II+1) to process IPROC ZSENDBUF = XPGDYHAT(II+1) - CALL MPI_SEND( ZSENDBUF,1,MPI_PRECISION,IPROC,ISP+II+1,NMNH_COMM_WORLD,IINFO_ll ) + CALL MPI_SEND( ZSENDBUF,1,MNHREAL_MPI,IPROC,ISP+II+1,NMNH_COMM_WORLD,IINFO_ll ) ELSE IF ( IPROC == ISP-1 ) THEN - CALL MPI_RECV( ZRECVBUF,1,MPI_PRECISION,MPI_ANY_SOURCE,MPI_ANY_TAG,NMNH_COMM_WORLD,MPI_STATUS_IGNORE,IINFO_ll ) + CALL MPI_RECV( ZRECVBUF,1,MNHREAL_MPI,MPI_ANY_SOURCE,MPI_ANY_TAG,NMNH_COMM_WORLD,MPI_STATUS_IGNORE,IINFO_ll ) ZPGDYHATIXY1_1 = ZRECVBUF ELSE ! the other processes do nothing... @@ -534,8 +535,8 @@ DO IPROC = 0,ISNPROC-1 !loop on all processes ZXHATLASTENTRY_C = XXHAT(SIZE(XXHAT)-JPHEXT) ZYHATLASTENTRY_C = XYHAT(SIZE(XYHAT)-JPHEXT) ! broadcast XXHAT(SIZE(XXHAT)-JPHEXT) and find which process' father subdomain contains the coords of the last physical entry of local son subdomain - CALL MPI_BCAST( ZXHATLASTENTRY_C, 1, MPI_PRECISION, IPROC, NMNH_COMM_WORLD, IINFO_ll ) - CALL MPI_BCAST( ZYHATLASTENTRY_C, 1, MPI_PRECISION, IPROC, NMNH_COMM_WORLD, IINFO_ll ) + CALL MPI_BCAST( ZXHATLASTENTRY_C, 1, MNHREAL_MPI, IPROC, NMNH_COMM_WORLD, IINFO_ll ) + CALL MPI_BCAST( ZYHATLASTENTRY_C, 1, MNHREAL_MPI, IPROC, NMNH_COMM_WORLD, IINFO_ll ) ! ! communicating the value of XPGDXHAT (X direction) at the origin of local son subdomain IF ( IPROC == ISP-1 .AND. ZXHATLASTENTRY_C >= XPGDXHAT(JPHEXT+1) & @@ -565,9 +566,9 @@ DO IPROC = 0,ISNPROC-1 !loop on all processes ! send XPGDXHAT(II) to process IPROC ! XPGDYHAT(II+1) is also defined on current process since HALO is at least 1 ZSENDBUF = XPGDXHAT(II) - CALL MPI_SEND( ZSENDBUF,1,MPI_PRECISION,IPROC,ISP+II,NMNH_COMM_WORLD,IINFO_ll ) + CALL MPI_SEND( ZSENDBUF,1,MNHREAL_MPI,IPROC,ISP+II,NMNH_COMM_WORLD,IINFO_ll ) ELSE IF ( IPROC == ISP-1 ) THEN - CALL MPI_RECV( ZRECVBUF,1,MPI_PRECISION,MPI_ANY_SOURCE,MPI_ANY_TAG,NMNH_COMM_WORLD,MPI_STATUS_IGNORE,IINFO_ll ) + CALL MPI_RECV( ZRECVBUF,1,MNHREAL_MPI,MPI_ANY_SOURCE,MPI_ANY_TAG,NMNH_COMM_WORLD,MPI_STATUS_IGNORE,IINFO_ll ) ZPGDXHATIXY2_1 = ZRECVBUF ELSE ! the other processes do nothing... @@ -600,9 +601,9 @@ DO IPROC = 0,ISNPROC-1 !loop on all processes ! the index of the last physical point of the local son subdomain is II on the current process ! send XPGDYHAT(II) to process IPROC ZSENDBUF = XPGDYHAT(II) - CALL MPI_SEND( ZSENDBUF,1,MPI_PRECISION,IPROC,ISP+II,NMNH_COMM_WORLD,IINFO_ll ) + CALL MPI_SEND( ZSENDBUF,1,MNHREAL_MPI,IPROC,ISP+II,NMNH_COMM_WORLD,IINFO_ll ) ELSE IF ( IPROC == ISP-1 ) THEN - CALL MPI_RECV( ZRECVBUF,1,MPI_PRECISION,MPI_ANY_SOURCE,MPI_ANY_TAG,NMNH_COMM_WORLD,MPI_STATUS_IGNORE,IINFO_ll ) + CALL MPI_RECV( ZRECVBUF,1,MNHREAL_MPI,MPI_ANY_SOURCE,MPI_ANY_TAG,NMNH_COMM_WORLD,MPI_STATUS_IGNORE,IINFO_ll ) ZPGDYHATIXY2_1 = ZRECVBUF ELSE ! the other processes do nothing... @@ -616,8 +617,8 @@ ENDDO ! 3.3 - now we have the coordinates (ZPGDXHATIXY2_1, ZPGDYHATIXY2_1) of the point in father grid just right+north of the LOCAL son subdomain ! We compute the coordinates of the last point in father grid of the GLOBAL son subdomain -CALL MPI_ALLREDUCE(ZPGDXHATIXY2_1, IXSUPCOORD1, 1,MPI_PRECISION, MPI_MAX, NMNH_COMM_WORLD, IINFO_ll) -CALL MPI_ALLREDUCE(ZPGDYHATIXY2_1, IYSUPCOORD1, 1,MPI_PRECISION, MPI_MAX, NMNH_COMM_WORLD, IINFO_ll) +CALL MPI_ALLREDUCE(ZPGDXHATIXY2_1, IXSUPCOORD1, 1,MNHREAL_MPI, MPI_MAX, NMNH_COMM_WORLD, IINFO_ll) +CALL MPI_ALLREDUCE(ZPGDYHATIXY2_1, IYSUPCOORD1, 1,MNHREAL_MPI, MPI_MAX, NMNH_COMM_WORLD, IINFO_ll) ! we compute the index of this point in local father grid IF ( IXSUPCOORD1 >= XPGDXHAT(1+JPHEXT) .AND. IXSUPCOORD1 <= XPGDXHAT(SIZE(XPGDXHAT)-JPHEXT) .AND. & diff --git a/src/MNH/rms_at_z.f90 b/src/MNH/rms_at_z.f90 index 94cbf821132f48c0a728a64e953881cddbca3e41..3e2b11a93f91901a81b4a46c2aec087dabe7c3da 100644 --- a/src/MNH/rms_at_z.f90 +++ b/src/MNH/rms_at_z.f90 @@ -1,6 +1,6 @@ -!MNH_LIC Copyright 1996-2018 CNRS, Meteo-France and Universite Paul Sabatier +!MNH_LIC Copyright 1996-2019 CNRS, Meteo-France and Universite Paul Sabatier !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence -!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt +!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt !MNH_LIC for details. version 1. !----------------------------------------------------------------- !################### @@ -62,6 +62,7 @@ END MODULE MODI_RMS_AT_Z !! 26/08/97 (V. Masson) call to new linear vertical !! interpolation routine !! Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O +! P. Wautelet 22/02/2019: replace Hollerith edit descriptor (deleted from Fortran 95 standard) !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -172,7 +173,7 @@ WRITE(ILUOUT0,*) '' WRITE(ILUOUT0,*) HTITLE WRITE(ILUOUT0,*) '' DO JZ=1,40 - WRITE(ILUOUT0,'(6Hlevel ,F6.0,5H m : ,F9.3)') ZZLEVELS(JZ),ZRMS(JZ) + WRITE(ILUOUT0,'( "level ", F6.0, " m : ", F9.3 )') ZZLEVELS(JZ),ZRMS(JZ) END DO WRITE(ILUOUT0,*) '' ! diff --git a/src/MNH/shallow_mf_pack.f90 b/src/MNH/shallow_mf_pack.f90 index 7ffbbb145b9383d1f7bbbe47d9a7f1938478afaf..5e76f58c51e5632ec4c68795e8c7457b3d025a16 100644 --- a/src/MNH/shallow_mf_pack.f90 +++ b/src/MNH/shallow_mf_pack.f90 @@ -2,6 +2,7 @@ !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence !MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt !MNH_LIC for details. version 1. +!----------------------------------------------------------------- ! ###################### MODULE MODI_SHALLOW_MF_PACK ! ###################### @@ -21,10 +22,11 @@ INTERFACE PSIGMF,PRC_MF,PRI_MF,PCF_MF,PFLXZTHVMF ) ! ################################################################# !! -USE MODD_IO, ONLY: TFILEDATA -! +use MODD_IO, only: TFILEDATA +use modd_precision, only: MNHTIME +! !* 1.1 Declaration of Arguments -! +! ! INTEGER, INTENT(IN) :: KRR ! number of moist var. INTEGER, INTENT(IN) :: KRRL ! number of liquid water var. @@ -39,7 +41,7 @@ LOGICAL, INTENT(IN) :: OCLOSE_OUT ! switch for synchronous LOGICAL, INTENT(IN) :: OMF_FLX ! switch to write the ! MF fluxes in the synchronous FM-file TYPE(TFILEDATA), INTENT(IN) :: TPFILE ! Output file -REAL*8,DIMENSION(2), INTENT(OUT) :: PTIME_LES ! time spent in LES computations +REAL(kind=MNHTIME),DIMENSION(2), INTENT(OUT) :: PTIME_LES ! time spent in LES computations REAL, INTENT(IN) :: PIMPL_MF ! degre of implicitness REAL, INTENT(IN) :: PTSTEP ! Dynamical timestep @@ -110,32 +112,35 @@ END MODULE MODI_SHALLOW_MF_PACK !! AUTHOR !! ------ !! V.Masson 09/2010 -!! Modification R. Honnert 07/2012 : introduction of vertical wind -!! for the height of the thermal -!! M. Leriche 02/2017 : avoid negative values for sv tendencies -!! Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O -!! S. Riette 11/2016: support for CFRAC_ICE_SHALLOW_MF -!! -------------------------------------------------------------------------- +! -------------------------------------------------------------------------- +! Modifications: +! R. Honnert 07/2012: introduction of vertical wind for the height of the thermal +! M. Leriche 02/2017: avoid negative values for sv tendencies +! P. Wautelet 05/2016-04/2018: new data structures and calls for I/O +! S. Riette 11/2016: support for CFRAC_ICE_SHALLOW_MF +! P. Wautelet 28/03/2019: use MNHTIME for time measurement variables +! -------------------------------------------------------------------------- ! !* 0. DECLARATIONS ! ------------ ! -USE MODD_PARAMETERS -USE MODD_CST +USE MODD_BUDGET USE MODD_CONF +USE MODD_CST USE MODD_IO, ONLY: TFILEDATA USE MODD_NSV +USE MODD_PARAMETERS USE MODD_PARAM_ICE, ONLY: CFRAC_ICE_SHALLOW_MF USE MODD_PARAM_MFSHALL_n -USE MODD_BUDGET +use modd_precision, only: MNHTIME USE MODE_FIELD, ONLY: TFIELDDATA, TYPEREAL USE MODE_IO_FIELD_WRITE, only: IO_Field_write -USE MODI_SHALLOW_MF USE MODI_BUDGET -USE MODI_SHUMAN USE MODI_DIAGNOS_LES_MF +USE MODI_SHALLOW_MF +USE MODI_SHUMAN ! IMPLICIT NONE @@ -156,7 +161,7 @@ LOGICAL, INTENT(IN) :: OCLOSE_OUT ! switch for synchronous LOGICAL, INTENT(IN) :: OMF_FLX ! switch to write the ! MF fluxes in the synchronous FM-file TYPE(TFILEDATA), INTENT(IN) :: TPFILE ! Output file -REAL*8,DIMENSION(2), INTENT(OUT) :: PTIME_LES ! time spent in LES computations +REAL(kind=MNHTIME),DIMENSION(2), INTENT(OUT) :: PTIME_LES ! time spent in LES computations REAL, INTENT(IN) :: PIMPL_MF ! degre of implicitness REAL, INTENT(IN) :: PTSTEP ! Dynamical timestep diff --git a/src/MNH/spawn_model2.f90 b/src/MNH/spawn_model2.f90 index 6fc15703de06b2be114f0bb9c24b1281c78a5b94..33c2a15786a8a92e74f21b6969f1b52bf10baa54 100644 --- a/src/MNH/spawn_model2.f90 +++ b/src/MNH/spawn_model2.f90 @@ -193,7 +193,8 @@ END MODULE MODI_SPAWN_MODEL2 !! 10/2016 (C.Lac) Add droplet deposition !! Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O ! P. Wautelet 07/02/2019: force TYPE to a known value for IO_File_add2list -!! Bielli S. 02/2019 Sea salt : significant sea wave height influences salt emission; 5 salt modes +! S. Bielli 02/2019: sea salt: significant sea wave height influences salt emission; 5 salt modes +! P. Wautelet 22/02/2019: replace Hollerith edit descriptor (deleted from Fortran 95 standard) ! P. Wautelet 14/03/2019: correct ZWS when variable not present in file ! P. Wautelet 10/04/2019: replace ABORT and STOP calls by Print_msg !------------------------------------------------------------------------------- @@ -234,6 +235,7 @@ USE MODD_PASPOL_n !$20140515 USE MODD_VAR_ll, ONLY : NPROC USE MODD_IO, ONLY: TFILEDATA,TFILE_DUMMY,TFILE_SURFEX +use modd_precision, only: MNHREAL_MPI ! USE MODE_GRIDCART ! Executive modules USE MODE_GRIDPROJ @@ -290,6 +292,7 @@ USE MODD_PASPOL, ONLY : LPASPOL ! USE MODD_MPIF USE MODD_VAR_ll +use modd_precision, only: LFIINT ! IMPLICIT NONE ! @@ -317,7 +320,7 @@ LOGICAL, INTENT(IN) :: OSPAWN_SURF ! flag to spawn surface fields ! ! INTEGER :: ILUOUT ! Logical unit number for the output listing -INTEGER(KIND=LFI_INT) :: INPRAR ! Number of articles predicted in the LFIFM file +INTEGER(KIND=LFIINT) :: INPRAR ! Number of articles predicted in the LFIFM file ! ! INTEGER :: IIU ! Upper dimension in x direction @@ -1158,7 +1161,7 @@ ZTIME1 = ZTIME2 !* vertical interpolation ! ZZS_MAX = ABS( MAXVAL(XZS(:,:))) -CALL MPI_ALLREDUCE(ZZS_MAX, ZZS_MAX_ll, 1, MPI_PRECISION, MPI_MAX, & +CALL MPI_ALLREDUCE(ZZS_MAX, ZZS_MAX_ll, 1, MNHREAL_MPI, MPI_MAX, & NMNH_COMM_WORLD,IINFO_ll) IF ( (ZZS_MAX_ll>0.) .AND. (NDXRATIO/=1 .OR. NDYRATIO/=1) ) THEN CALL MPPDB_CHECK3D(XUT,"SPAWN_M2 before VER_INTERP_FIELD:XUT",PRECISION) @@ -1203,7 +1206,7 @@ IF (NVERB>=2) THEN WRITE(ILUOUT,*) ' ' WRITE(ILUOUT,*) 'humidity (I=',IIJ(1),';J=',IIJ(2),')' DO JK=IKB,IKE - WRITE(ILUOUT,'(F6.2,2H %)') ZHUT(IIJ(1),IIJ(2),JK) + WRITE(ILUOUT,'(F6.2," %")') ZHUT(IIJ(1),IIJ(2),JK) END DO END IF !* 5.8 Retrieve model thermodynamical variables : diff --git a/src/MNH/spawn_zs.f90 b/src/MNH/spawn_zs.f90 index f015f586f890fc2f8cd16ac26ab4ae5f4e2d05e5..ea7ad57684df040d48e490829a65991582d45b1c 100644 --- a/src/MNH/spawn_zs.f90 +++ b/src/MNH/spawn_zs.f90 @@ -103,9 +103,10 @@ END MODULE MODI_SPAWN_ZS !* 0. DECLARATIONS ! ------------ ! -USE MODD_PARAMETERS, ONLY : JPHEXT ! Declarative modules -USE MODD_CONF, ONLY : NVERB +USE MODD_PARAMETERS, ONLY: JPHEXT ! Declarative modules +USE MODD_CONF, ONLY: NVERB USE MODD_LUNIT_n, ONLY: TLUOUT +use modd_precision, only: MNHREAL_MPI ! USE MODD_BIKHARDT_n ! @@ -191,7 +192,7 @@ INTEGER :: KDXRATIO_C, KDYRATIO_C !$20140704 !$20140711 not INT, REAL !! REAL :: ZMAXVAL -REAL :: LOCMAXVAL +REAL :: ZLOCMAXVAL !$20140801 INTEGER :: IORX, IORY, IIBINT,IJBINT,IIEINT,IJEINT INTEGER :: IXOR_C_ll, IXEND_C_ll ! origin and end of the local subdomain of the child model 2 @@ -413,8 +414,8 @@ IF (KDXRATIO/=1 .OR. KDYRATIO/=1) THEN ! ALLOCATE(ZDZS_3D(SIZE(ZDZS_C,1),SIZE(ZDZS_C,2),1)) ! WARNING : this is highly inefficient, this copy is unecessary ZDZS_3D(:,:,1)=ZDZS_C(:,:) ! We could write a function MAX2D_ll or use a POINTER for ZDZS_3D - LOCMAXVAL=MAXVAL(ABS(ZDZS_C)) - CALL MPI_ALLREDUCE(LOCMAXVAL,ZMAXVAL,1,MPI_PRECISION,MPI_MAX,NMNH_COMM_WORLD,IINFO_ll) + ZLOCMAXVAL=MAXVAL(ABS(ZDZS_C)) + CALL MPI_ALLREDUCE(ZLOCMAXVAL,ZMAXVAL,1,MNHREAL_MPI,MPI_MAX,NMNH_COMM_WORLD,IINFO_ll) IF (ZMAXVAL<1.E-3) THEN EXIT ENDIF diff --git a/src/MNH/updraft_sope.f90 b/src/MNH/updraft_sope.f90 deleted file mode 100644 index 141eef53ba470547b024926ddd0187ba1e7bb8b7..0000000000000000000000000000000000000000 --- a/src/MNH/updraft_sope.f90 +++ /dev/null @@ -1,148 +0,0 @@ -!MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier -!MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence -!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt -!MNH_LIC for details. version 1. -! ################################# - MODULE MODI_UPDRAFT_SOPE -! ################################# -! -INTERFACE -! - SUBROUTINE UPDRAFT_SOPE(KRR,KRRL,KRRI,OMIXUV, & - PZZ,PDZZ,PSFTH,PSFRV,PPABSM,PRHODREF, & - PTKEM,PTHM,PRM,PTHLM,PRTM,PUM,PVM,PSVM, & - PTHL_UP,PRT_UP,PRV_UP,PU_UP,PV_UP,PSV_UP, & - PRC_UP,PRI_UP,PTHV_UP,PW_UP,PFRAC_UP,PEMF,& - PDETR,PENTR,KKLCL,KKETL,KKCTL ) -! -! -! -INTEGER, INTENT(IN) :: KRR ! number of moist var. -INTEGER, INTENT(IN) :: KRRL ! number of liquid water var. -INTEGER, INTENT(IN) :: KRRI ! number of ice water var. -LOGICAL, INTENT(IN) :: OMIXUV ! True if mixing of momentum - -REAL, DIMENSION(:,:,:), INTENT(IN) :: PZZ ! Height at the flux point - -REAL, DIMENSION(:,:,:), INTENT(IN) :: PDZZ ! depth between mass levels - -REAL, DIMENSION(:,:), INTENT(IN) :: PSFTH,PSFRV - ! normal surface fluxes of theta,rv -! -! prognostic variables at t- deltat -REAL, DIMENSION(:,:,:), INTENT(IN) :: PPABSM ! Pressure at time t-1 -REAL, DIMENSION(:,:,:), INTENT(IN) :: PRHODREF ! dry density of the - ! reference state -REAL, DIMENSION(:,:,:), INTENT(IN) :: PTKEM ! TKE -REAL, DIMENSION(:,:,:), INTENT(IN) :: PUM,PVM ! momentum -! -REAL, DIMENSION(:,:,:,:), INTENT(IN) :: PSVM ! Scalar variables -! -! thermodynamical variables which are transformed in conservative var. -REAL, DIMENSION(:,:,:), INTENT(IN) :: PTHM ! pot. temp. = PTHLM in turb.f90 -REAL, DIMENSION(:,:,:,:), INTENT(IN) :: PRM ! water species -REAL, DIMENSION(:,:,:), INTENT(IN) :: PTHLM,PRTM !cons. var. -REAL, DIMENSION(:,:,:), INTENT(OUT) :: PTHL_UP,PRT_UP ! updraft properties -REAL, DIMENSION(:,:,:), INTENT(OUT) :: PRV_UP,PRC_UP,PRI_UP,&!Thl,Rt,Rv,Rc,Ri - PW_UP,PFRAC_UP,PEMF, &!w,Updraft Fraction, Mass Flux - PDETR,PENTR,PTHV_UP, &!entrainment, detrainment, ThV - PU_UP, PV_UP !updraft wind component -REAL, DIMENSION(:,:,:,:), INTENT(OUT) :: PSV_UP ! updraft scalar variables -INTEGER, DIMENSION(:,:), INTENT(OUT) :: KKLCL,KKETL,KKCTL !index for LCL,ETL,CTL -! -! -END SUBROUTINE UPDRAFT_SOPE - -END INTERFACE -! -END MODULE MODI_UPDRAFT_SOPE -! -! -! ################################################################# - SUBROUTINE UPDRAFT_SOPE(KRR,KRRL,KRRI,OMIXUV, & - PZZ,PDZZ,PSFTH,PSFRV,PPABSM,PRHODREF, & - PTKEM,PTHM,PRM,PTHLM,PRTM,PUM,PVM,PSVM, & - PTHL_UP,PRT_UP,PRV_UP,PU_UP,PV_UP,PSV_UP, & - PRC_UP,PRI_UP,PTHV_UP,PW_UP,PFRAC_UP,PEMF, & - PDETR,PENTR,KKLCL,KKETL,KKCTL ) -! ################################################################# -!! -!!**** *UPDRAFT_SOPE* - Interfacing routine -!! -!! PURPOSE -!! ------- -!!**** Reshape arrays before updraft computations -!! -! -!!** METHOD -!! ------ -!! -!! EXTERNAL -!! -------- -!! -!! IMPLICIT ARGUMENTS -!! ------------------ -!! -!! !! REFERENCE -!! --------- -!! -!! AUTHOR -!! ------ -!! J.Pergaud -!! -------------------------------------------------------------------------- -! -!* 0. DECLARATIONS -! ------------ -! -USE MODD_PARAMETERS -USE MODD_CST -USE MODD_CONF -USE MODD_NSV - -USE MODI_COMPUTE_UPDRAFT - -IMPLICIT NONE - -!* 1.1 Declaration of Arguments -! -! -INTEGER, INTENT(IN) :: KRR ! number of moist var. -INTEGER, INTENT(IN) :: KRRL ! number of liquid water var. -INTEGER, INTENT(IN) :: KRRI ! number of ice water var. -LOGICAL, INTENT(IN) :: OMIXUV ! True if mixing of momentum - -REAL, DIMENSION(:,:,:), INTENT(IN) :: PZZ ! Height at the flux point - -REAL, DIMENSION(:,:,:), INTENT(IN) :: PDZZ ! depth between mass levels - -REAL, DIMENSION(:,:), INTENT(IN) :: PSFTH,PSFRV - ! normal surface fluxes of theta,rv -! -! prognostic variables at t- deltat -REAL, DIMENSION(:,:,:), INTENT(IN) :: PPABSM ! Pressure at time t-1 -REAL, DIMENSION(:,:,:), INTENT(IN) :: PRHODREF ! dry density of the - ! reference state -REAL, DIMENSION(:,:,:), INTENT(IN) :: PTKEM ! TKE -REAL, DIMENSION(:,:,:), INTENT(IN) :: PUM,PVM ! momentum - -REAL, DIMENSION(:,:,:,:), INTENT(IN) :: PSVM ! Scalar variables -! -! thermodynamical variables which are transformed in conservative var. -REAL, DIMENSION(:,:,:), INTENT(IN) :: PTHM ! pot. temp. = PTHLM in turb.f90 -REAL, DIMENSION(:,:,:,:), INTENT(IN) :: PRM ! water species -REAL, DIMENSION(:,:,:), INTENT(IN) :: PTHLM,PRTM !cons. var. -REAL, DIMENSION(:,:,:), INTENT(OUT) :: PTHL_UP,PRT_UP ! updraft properties -REAL, DIMENSION(:,:,:), INTENT(OUT) :: PRV_UP,PRC_UP,PRI_UP,&!Thl,Rt,Rv,Rc,Ri - PW_UP,PFRAC_UP,PEMF, &!w,Updraft Fraction, Mass Flux - PDETR,PENTR,PTHV_UP, &!entrainment, detrainment, ThV - PU_UP, PV_UP !updraft wind component - -REAL, DIMENSION(:,:,:,:), INTENT(OUT) :: PSV_UP ! updraft scalar variables - -INTEGER, DIMENSION(:,:), INTENT(OUT) :: KKLCL,KKETL,KKCTL !index for LCL,ETL,CTL -! -! -! - -END SUBROUTINE UPDRAFT_SOPE - diff --git a/src/MNH/ver_int_thermo.f90 b/src/MNH/ver_int_thermo.f90 index 38b931424684c25adf53f4d8e8029f37b7e40b8c..0463f3006389a1eb7e2022e1b07b647026303091 100644 --- a/src/MNH/ver_int_thermo.f90 +++ b/src/MNH/ver_int_thermo.f90 @@ -134,6 +134,7 @@ END MODULE MODI_VER_INT_THERMO !! 08/2015 (M.Moge) add UPDATE_HALO_ll(PR(:,:,:,1)) in part 6.3 !! J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 !! Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O +! P. Wautelet 22/02/2019: replace Hollerith edit descriptor (deleted from Fortran 95 standard) !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -589,13 +590,13 @@ IF (NVERB>=1) THEN WRITE(ILUOUT0,*) ' ' WRITE(ILUOUT0,*) 'Altitude and humidity on shifted grid (I=',IIJ(1),';J=',IIJ(2),')' DO JK=IKB,IKE - WRITE(ILUOUT0,'(6Hlevel ,F6.0,5H m : ,F6.2,2H %)') ZZMASS_SH(IIJ(1),IIJ(2),JK),ZHU_SH(IIJ(1),IIJ(2),JK) + WRITE(ILUOUT0,'( "level ", F6.0, " m : ", F6.2, " %" )') ZZMASS_SH(IIJ(1),IIJ(2),JK),ZHU_SH(IIJ(1),IIJ(2),JK) END DO ! WRITE(ILUOUT0,*) ' ' WRITE(ILUOUT0,*) 'Altitude and humidity on MESO-NH grid (I=',IIJ(1),';J=',IIJ(2),')' DO JK=IKB,IKE - WRITE(ILUOUT0,'(6Hlevel ,F6.0,5H m : ,F6.2,2H %)') ZZMASS (IIJ(1),IIJ(2),JK),ZHU (IIJ(1),IIJ(2),JK) + WRITE(ILUOUT0,'( "level ", F6.0, " m : ", F6.2, " %" )') ZZMASS (IIJ(1),IIJ(2),JK),ZHU (IIJ(1),IIJ(2),JK) END DO END IF ! diff --git a/src/MNH/ver_interp_to_mixed_grid.f90 b/src/MNH/ver_interp_to_mixed_grid.f90 index f1a882848f3dc259cb54ceb074c95e86dcfafcf7..dd63ee4930a93e915281f554d08de0426983dcd1 100644 --- a/src/MNH/ver_interp_to_mixed_grid.f90 +++ b/src/MNH/ver_interp_to_mixed_grid.f90 @@ -160,6 +160,7 @@ END MODULE MODI_VER_INTERP_TO_MIXED_GRID !! 2014 (M.Faivre) !! J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 !! Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O +! P. Wautelet 22/02/2019: replace Hollerith edit descriptor (deleted from Fortran 95 standard) !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -448,13 +449,13 @@ ZCOUNT = FLOAT((IIE-IIB+1)*(IJE-IJB+1)) WRITE(ILUOUT0,*) ' ' WRITE(ILUOUT0,*) 'Altitude and humidity on large-scale grid (I=',IIJ(1),';J=',IIJ(2),')' DO JK=1,ILU - WRITE(ILUOUT0,'(6Hlevel ,F6.0,5H m : ,F6.2,2H %)') PZMASS_LS(IIJ(1),IIJ(2),JK),PHU_LS(IIJ(1),IIJ(2),JK) + WRITE(ILUOUT0,'( "level ", F6.0, " m : ", F6.2, " %" )') PZMASS_LS(IIJ(1),IIJ(2),JK),PHU_LS(IIJ(1),IIJ(2),JK) END DO ! WRITE(ILUOUT0,*) ' ' WRITE(ILUOUT0,*) 'Altitude and humidity on mixed grid (I=',IIJ(1),';J=',IIJ(2),')' DO JK=JPVEXT+1,IKE - WRITE(ILUOUT0,'(6Hlevel ,F6.0,5H m : ,F6.2,2H %)') XZMASS_MX(IIJ(1),IIJ(2),JK),ZHU_MX(IIJ(1),IIJ(2),JK) + WRITE(ILUOUT0,'( "level ", F6.0, " m : ", F6.2, " %" )') XZMASS_MX(IIJ(1),IIJ(2),JK),ZHU_MX(IIJ(1),IIJ(2),JK) END DO END IF ! diff --git a/src/MNH/write_lfifm1_for_diag.f90 b/src/MNH/write_lfifm1_for_diag.f90 index 086c612361f34deb835812a13f8dec670c0500a1..20aa0f4647beb92f0df37401df66e993e28eb2f0 100644 --- a/src/MNH/write_lfifm1_for_diag.f90 +++ b/src/MNH/write_lfifm1_for_diag.f90 @@ -204,6 +204,7 @@ USE MODD_RADAR, ONLY: XLAT_RAD,XELEV,& NCURV_INTERPOL,LATT,LCART_RAD,NPTS_H,NPTS_V,XGRID,& LREFR,LDNDZ,NMAX,CNAME_RAD,NDIFF,& XLON_RAD,XALT_RAD,XLAM_RAD,XDT_RAD,LWBSCS,LWREFL +use modd_precision, only: MNHREAL_MPI ! USE MODI_RADAR_SIMULATOR ! @@ -3856,7 +3857,7 @@ IF(LRADAR .AND. LUSERR) THEN DEALLOCATE(CLATLON) END DO ELSE ! polar output - CALL MPI_ALLREDUCE(ZWORK42, ZWORK42_BIS, SIZE(ZWORK42), MPI_PRECISION, MPI_MAX, NMNH_COMM_WORLD, IERR) + CALL MPI_ALLREDUCE(ZWORK42, ZWORK42_BIS, SIZE(ZWORK42), MNHREAL_MPI, MPI_MAX, NMNH_COMM_WORLD, IERR) DO JI=1,NBRAD IEL=NBELEV(JI) DO JEL=1,IEL diff --git a/src/MNH/zoom_pgd.f90 b/src/MNH/zoom_pgd.f90 index 384239fd2a6dceae94ddb8562ebd2e0b8f183bce..90103c5141e3712d2c40af6ca916c184b0856162 100644 --- a/src/MNH/zoom_pgd.f90 +++ b/src/MNH/zoom_pgd.f90 @@ -55,6 +55,7 @@ USE MODD_PARAMETERS, ONLY : XUNDEF, NUNDEF, JPVEXT, JPHEXT, JPMODELMAX USE MODD_PARAM_n, ONLY : CSURF USE MODD_DIM_n, ONLY : NIMAX, NJMAX USE MODD_CONF_n, ONLY : CSTORAGE_TYPE +use modd_precision, only: LFIINT ! USE MODE_POS USE MODE_IO, only: IO_Config_set, IO_Init @@ -149,7 +150,7 @@ CALL IO_Config_set() !* 2.1 Open PGD file ! ------------- ! -CALL IO_File_add2list(TZPGDFILE,TRIM(CPGDFILE),'PGD','READ',KLFINPRAR=INT(1,KIND=LFI_INT),KLFITYPE=2,KLFIVERB=5) +CALL IO_File_add2list(TZPGDFILE,TRIM(CPGDFILE),'PGD','READ',KLFINPRAR=INT(1,KIND=LFIINT),KLFITYPE=2,KLFIVERB=5) CALL IO_File_open(TZPGDFILE) ! !* 2.2 Reading of initial grid @@ -195,7 +196,7 @@ IF ( (LEN_TRIM(YZOOMFILE) == 0) .OR. (ADJUSTL(YZOOMFILE) == ADJUSTL(CPGDFILE)) ) YZOOMFILE=ADJUSTL(ADJUSTR(CPGDFILE)//'.z'//ADJUSTL(YZOOMNBR)) END IF ! -CALL IO_File_add2list(TZZOOMFILE,TRIM(YZOOMFILE),'PGD','WRITE',KLFINPRAR=INT(1,KIND=LFI_INT),KLFITYPE=1,KLFIVERB=5) +CALL IO_File_add2list(TZZOOMFILE,TRIM(YZOOMFILE),'PGD','WRITE',KLFINPRAR=INT(1,KIND=LFIINT),KLFITYPE=1,KLFIVERB=5) !PW: TODO: points to dad file (if existing) ! TZZOOMFILE%TDADFILE => ! CALL IO_File_open(TZZOOMFILE) diff --git a/src/Makefile.MESONH.mk b/src/Makefile.MESONH.mk index f13c78f644ffaf9d254a38d27884fa245338141a..29b7632752570545afd3a6d14ae69d03e824289f 100644 --- a/src/Makefile.MESONH.mk +++ b/src/Makefile.MESONH.mk @@ -106,7 +106,7 @@ endif # PRE_BUG TEST !!! # DIR_SURCOUCHE += LIB/SURCOUCHE/src -#CPPFLAGS_SURCOUCHE = -DMNH_MPI_DOUBLE_PRECISION -DMNH_MPI_BSEND -DNAGf95 +#CPPFLAGS_SURCOUCHE = -DMNH_MPI_BSEND # ifdef DIR_SURCOUCHE DIR_MASTER += $(DIR_SURCOUCHE) diff --git a/src/Rules.AIX64.mk b/src/Rules.AIX64.mk index 66354ef6cdc555676de69493dcdeadcedc1e1e5f..2f125e2cef063ec5d03bb90cdd492d1e824289d5 100644 --- a/src/Rules.AIX64.mk +++ b/src/Rules.AIX64.mk @@ -1,6 +1,6 @@ -#MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier +#MNH_LIC Copyright 1994-2019 CNRS, Meteo-France and Universite Paul Sabatier #MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence -#MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt +#MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt #MNH_LIC for details. version 1. ########################################################## # # @@ -30,9 +30,7 @@ OPT_BASE_I4 := $(OPT_BASE) ifeq "$(MNH_INT)" "8" OPT_BASE += $(OPT_I8) LFI_INT ?=8 -MNH_MPI_RANK_KIND ?=8 else -MNH_MPI_RANK_KIND ?=4 LFI_INT ?=4 endif OPT = $(OPT_BASE) $(OPT_PERF2) @@ -83,7 +81,7 @@ endif CPP = /usr/lib/cpp -C -P -qlanglvl=classic # CPPFLAGS_SURFEX = -CPPFLAGS_SURCOUCHE = -DMNH_MPI_DOUBLE_PRECISION -DMNH_SP4 -DMNH_MPI_RANK_KIND=$(MNH_MPI_RANK_KIND) +CPPFLAGS_SURCOUCHE = -DMNH_SP4 CPPFLAGS_RAD = CPPFLAGS_NEWLFI = -DLINUX -DLFI_INT=${LFI_INT} CPPFLAGS_MNH = -DAMAX1=MAX -DMNH -DSFX_MNH diff --git a/src/Rules.BG.mk b/src/Rules.BG.mk index 444869a73e2a1d37d6b6a693254d4f005633b2f7..068f99dea7da2ab34b6b4125f9ca99fd70b8306e 100644 --- a/src/Rules.BG.mk +++ b/src/Rules.BG.mk @@ -1,6 +1,6 @@ -#MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier +#MNH_LIC Copyright 1994-2019 CNRS, Meteo-France and Universite Paul Sabatier #MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence -#MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt +#MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt #MNH_LIC for details. version 1. ########################################################## # # @@ -35,9 +35,7 @@ OPT_BASE_I4 := $(OPT_BASE) ifeq "$(MNH_INT)" "8" OPT_BASE += $(OPT_I8) LFI_INT ?=8 -MNH_MPI_RANK_KIND ?=8 else -MNH_MPI_RANK_KIND ?=4 LFI_INT ?=4 endif # @@ -93,8 +91,8 @@ CPP = cpp -P -traditional -Wcomment CC = mpixlc_r # CPPFLAGS_SURFEX = -#CPPFLAGS_SURCOUCHE = -DMNH_MPI_DOUBLE_PRECISION -DMNH_SP4 -DMNH_MPI_ISEND -DMNH_MPI_RANK_KIND=$(MNH_MPI_RANK_KIND) -CPPFLAGS_SURCOUCHE = -DMNH_MPI_DOUBLE_PRECISION -DMNH_SP4 -DMNH_MPI_BSEND -DMNH_MPI_RANK_KIND=$(MNH_MPI_RANK_KIND) +#CPPFLAGS_SURCOUCHE = -DMNH_SP4 -DMNH_MPI_ISEND +CPPFLAGS_SURCOUCHE = -DMNH_SP4 -DMNH_MPI_BSEND CPPFLAGS_RAD = CPPFLAGS_NEWLFI = -DLINUX -DLFI_INT=${LFI_INT} CPPFLAGS_MNH = -DAMAX1=MAX -DMNH -DSFX_MNH diff --git a/src/Rules.BGQ.mk b/src/Rules.BGQ.mk index bf050c31748cb66ff2c3db86fea862ed9c496a08..79f9363bd0dcb0e67e1fcf720242c3580f6b77d4 100644 --- a/src/Rules.BGQ.mk +++ b/src/Rules.BGQ.mk @@ -1,6 +1,6 @@ -#MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier +#MNH_LIC Copyright 1994-2019 CNRS, Meteo-France and Universite Paul Sabatier #MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence -#MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt +#MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt #MNH_LIC for details. version 1. ########################################################## # # @@ -39,10 +39,8 @@ OPT_BASE_I4 := $(OPT_BASE) $(OPT_I4) ifeq "$(MNH_INT)" "8" OPT_BASE += $(OPT_I8) LFI_INT ?=8 -MNH_MPI_RANK_KIND ?=8 else OPT_BASE += $(OPT_I4) -MNH_MPI_RANK_KIND ?=4 LFI_INT ?=4 endif # @@ -142,8 +140,8 @@ CPP = cpp -P -traditional -Wcomment # CPPFLAGS_SURFEX = -#CPPFLAGS_SURCOUCHE = -DMNH_MPI_DOUBLE_PRECISION -DMNH_SP4 -DMNH_MPI_ISEND -DMNH_MPI_RANK_KIND=$(MNH_MPI_RANK_KIND) -CPPFLAGS_SURCOUCHE = -DMNH_MPI_DOUBLE_PRECISION -DMNH_SP4 -DMNH_MPI_BSEND -DMNH_MPI_RANK_KIND=$(MNH_MPI_RANK_KIND) -DSNGL=REAL +#CPPFLAGS_SURCOUCHE = -DMNH_SP4 -DMNH_MPI_ISEND +CPPFLAGS_SURCOUCHE = -DMNH_SP4 -DMNH_MPI_BSEND -DSNGL=REAL CPPFLAGS_RAD = CPPFLAGS_NEWLFI = -DLINUX -DLFI_INT=${LFI_INT} CPPFLAGS_MNH = -DAMAX1=MAX -DMNH -DSFX_MNH diff --git a/src/Rules.LXNAGfor.mk b/src/Rules.LXNAGfor.mk index b25f67d91923e4d248542858f80673edcbea419d..318cb4ba34a70725def6ace645a075ffe1ba2494 100644 --- a/src/Rules.LXNAGfor.mk +++ b/src/Rules.LXNAGfor.mk @@ -23,16 +23,13 @@ MNH_INT ?=4 # ifneq "$(MNH_REAL)" "4" OPT_BASE += $(OPT_R8) -CPPFLAGS_SURCOUCHE += -DMNH_MPI_DOUBLE_PRECISION endif # OPT_BASE_I4 := $(OPT_BASE) ifeq "$(MNH_INT)" "8" OPT_BASE += $(OPT_I8) LFI_INT ?=8 -MNH_MPI_RANK_KIND ?=8 else -MNH_MPI_RANK_KIND ?=4 LFI_INT ?=4 endif # @@ -71,7 +68,7 @@ FX90FLAGS = $(OPT) -fixed CPP = cpp -P -traditional -Wcomment # CPPFLAGS_SURFEX = -CPPFLAGS_SURCOUCHE += -DDEV_NULL -DMNH_MPI_RANK_KIND=$(MNH_MPI_RANK_KIND) +CPPFLAGS_SURCOUCHE += -DDEV_NULL CPPFLAGS_RAD = CPPFLAGS_NEWLFI = -DSWAPIO -DLINUX -DLFI_INT=${LFI_INT} CPPFLAGS_MNH = -DMNH -DSFX_MNH diff --git a/src/Rules.LXarm.mk b/src/Rules.LXarm.mk index ecaf40945e8b125f5a544fcc87f3e1b8fec2c8db..c9b81e0b274aaca96506cf445314a8873526a9c1 100644 --- a/src/Rules.LXarm.mk +++ b/src/Rules.LXarm.mk @@ -1,6 +1,6 @@ -#MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier +#MNH_LIC Copyright 1994-2019 CNRS, Meteo-France and Universite Paul Sabatier #MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence -#MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt +#MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt #MNH_LIC for details. version 1. ########################################################## # # @@ -33,16 +33,13 @@ MNH_INT ?=4 # ifneq "$(MNH_REAL)" "4" OPT_BASE += $(OPT_R8) -CPPFLAGS_SURCOUCHE += -DMNH_MPI_DOUBLE_PRECISION endif # OPT_BASE_I4 := $(OPT_BASE) ifeq "$(MNH_INT)" "8" OPT_BASE += $(OPT_I8) LFI_INT ?=8 -MNH_MPI_RANK_KIND ?=8 else -MNH_MPI_RANK_KIND ?=4 LFI_INT ?=4 endif # @@ -87,7 +84,7 @@ FX90FLAGS = $(OPT) CPP = cpp -P -traditional -Wcomment # CPPFLAGS_SURFEX = -CPPFLAGS_SURCOUCHE += -DDEV_NULL -DMNH_MPI_RANK_KIND=$(MNH_MPI_RANK_KIND) +CPPFLAGS_SURCOUCHE += -DDEV_NULL CPPFLAGS_RAD = CPPFLAGS_NEWLFI = -DSWAPIO -DLINUX -DLFI_INT=${LFI_INT} CPPFLAGS_MNH = -DMNH -DSFX_MNH diff --git a/src/Rules.LXcray.mk b/src/Rules.LXcray.mk index be29f2b68595d933fa8b02ea9b1091507c433969..4e4b34b870f3dc1def5c79d66e45cc772b4b1049 100644 --- a/src/Rules.LXcray.mk +++ b/src/Rules.LXcray.mk @@ -1,6 +1,6 @@ -#MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier +#MNH_LIC Copyright 1994-2019 CNRS, Meteo-France and Universite Paul Sabatier #MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence -#MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt +#MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt #MNH_LIC for details. version 1. ########################################################## # # @@ -28,9 +28,7 @@ ifeq "$(MNH_INT)" "8" #OPT_BASE += $(OPT_I8) OPT_BASE = -sdefault64 -hpic -em -ef LFI_INT ?=8 -MNH_MPI_RANK_KIND ?=8 else -MNH_MPI_RANK_KIND ?=4 LFI_INT ?=4 endif # @@ -83,7 +81,7 @@ LDFLAGS = -Wl,-warn-once $(PAR) $(OPT_BASE) CPP = cpp -P -traditional -Wcomment # CPPFLAGS_SURFEX = -CPPFLAGS_SURCOUCHE = -DMNH_MPI_DOUBLE_PRECISION -DDEV_NULL -DMNH_MPI_RANK_KIND=$(MNH_MPI_RANK_KIND) +CPPFLAGS_SURCOUCHE = -DDEV_NULL CPPFLAGS_RAD = CPPFLAGS_NEWLFI = -DSWAPIO -DLINUX -DLFI_INT=${LFI_INT} CPPFLAGS_MNH = -DMNH -DSFX_MNH diff --git a/src/Rules.LXg95.mk b/src/Rules.LXg95.mk index d4ee573a578dd6744973bb1e26c023eab79f413d..7a1add9c315f623c9f06569b07761c4f92b1953a 100644 --- a/src/Rules.LXg95.mk +++ b/src/Rules.LXg95.mk @@ -1,6 +1,6 @@ -#MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier +#MNH_LIC Copyright 1994-2019 CNRS, Meteo-France and Universite Paul Sabatier #MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence -#MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt +#MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt #MNH_LIC for details. version 1. ########################################################## # # @@ -23,9 +23,7 @@ OPT_BASE_I4 := $(OPT_BASE) ifeq "$(MNH_INT)" "8" OPT_BASE += $(OPT_I8) LFI_INT ?=8 -MNH_MPI_RANK_KIND ?=8 else -MNH_MPI_RANK_KIND ?=4 LFI_INT ?=4 endif # @@ -64,7 +62,7 @@ CPP = cpp -P -traditional -Wcomment # LFI_INT ?=4 CPPFLAGS_SURFEX = -CPPFLAGS_SURCOUCHE = -DMNH_MPI_DOUBLE_PRECISION -DMNH_MPI_BSEND -DDEV_NULL -DMNH_MPI_RANK_KIND=$(MNH_MPI_RANK_KIND) +CPPFLAGS_SURCOUCHE = -DMNH_MPI_BSEND -DDEV_NULL CPPFLAGS_RAD = CPPFLAGS_NEWLFI = -DSWAPIO -DLINUX -DLFI_INT=${LFI_INT} CPPFLAGS_MNH = -DAINT=INT -DAMOD=MOD -DMNH -DSFX_MNH diff --git a/src/Rules.LXgfortran.mk b/src/Rules.LXgfortran.mk index cbe49e42eff42db8c3ec05bc9588d96170182c30..fdb1257865b00cf7563e691d92c8014b8ffec455 100644 --- a/src/Rules.LXgfortran.mk +++ b/src/Rules.LXgfortran.mk @@ -1,6 +1,6 @@ -#MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier +#MNH_LIC Copyright 1994-2019 CNRS, Meteo-France and Universite Paul Sabatier #MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence -#MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt +#MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt #MNH_LIC for details. version 1. ########################################################## # # @@ -30,16 +30,13 @@ MNH_INT ?=4 # ifneq "$(MNH_REAL)" "4" OPT_BASE += $(OPT_R8) -CPPFLAGS_SURCOUCHE += -DMNH_MPI_DOUBLE_PRECISION endif # OPT_BASE_I4 := $(OPT_BASE) ifeq "$(MNH_INT)" "8" OPT_BASE += $(OPT_I8) LFI_INT ?=8 -MNH_MPI_RANK_KIND ?=8 else -MNH_MPI_RANK_KIND ?=4 LFI_INT ?=4 endif # @@ -79,7 +76,7 @@ FX90FLAGS = $(OPT) CPP = cpp -P -traditional -Wcomment # CPPFLAGS_SURFEX = -CPPFLAGS_SURCOUCHE += -DDEV_NULL -DMNH_MPI_RANK_KIND=$(MNH_MPI_RANK_KIND) +CPPFLAGS_SURCOUCHE += -DDEV_NULL CPPFLAGS_RAD = CPPFLAGS_NEWLFI = -DSWAPIO -DLINUX -DLFI_INT=${LFI_INT} CPPFLAGS_MNH = -DMNH -DSFX_MNH diff --git a/src/Rules.LXifort.mk b/src/Rules.LXifort.mk index 23f4c3f7df4d0c7a95c33a5208fcbec8ca070d8d..e89ea60a34fab24e948a7040ae516eb254a807aa 100644 --- a/src/Rules.LXifort.mk +++ b/src/Rules.LXifort.mk @@ -1,6 +1,6 @@ -#MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier +#MNH_LIC Copyright 1994-2019 CNRS, Meteo-France and Universite Paul Sabatier #MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence -#MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt +#MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt #MNH_LIC for details. version 1. ########################################################## # # @@ -24,16 +24,13 @@ MNH_INT ?=4 # ifneq "$(MNH_REAL)" "4" OPT_BASE += $(OPT_R8) -CPPFLAGS_SURCOUCHE += -DMNH_MPI_DOUBLE_PRECISION endif # OPT_BASE_I4 := $(OPT_BASE) ifeq "$(MNH_INT)" "8" OPT_BASE += $(OPT_I8) LFI_INT ?=8 -MNH_MPI_RANK_KIND ?=8 else -MNH_MPI_RANK_KIND ?=4 LFI_INT ?=4 endif # @@ -176,7 +173,7 @@ LDFLAGS = -Wl,-warn-once $(PAR) -Wl,-rpath=$(LD_LIBRARY_PATH) $(OPT_BASE) CPP = cpp -P -traditional -Wcomment # CPPFLAGS_SURFEX = -CPPFLAGS_SURCOUCHE += -DDEV_NULL -DMNH_MPI_RANK_KIND=$(MNH_MPI_RANK_KIND) +CPPFLAGS_SURCOUCHE += -DDEV_NULL CPPFLAGS_RAD = CPPFLAGS_NEWLFI = -DSWAPIO -DLINUX -DLFI_INT=${LFI_INT} CPPFLAGS_MNH = -DMNH -DSFX_MNH diff --git a/src/Rules.LXpathf95.mk b/src/Rules.LXpathf95.mk index cc0d1aa43f16cb6228b7598a690e22bd283dc7df..d116ac262a9690d95c1d54cbc1119b73d111737a 100644 --- a/src/Rules.LXpathf95.mk +++ b/src/Rules.LXpathf95.mk @@ -1,6 +1,6 @@ -#MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier +#MNH_LIC Copyright 1994-2019 CNRS, Meteo-France and Universite Paul Sabatier #MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence -#MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt +#MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt #MNH_LIC for details. version 1. ########################################################## # # @@ -42,7 +42,7 @@ LDFLAGS = -Wl,-noinhibit-exec -Wl,-warn-once CPP = cpp -P -traditional -Wcomment # CPPFLAGS_SURFEX = -CPPFLAGS_SURCOUCHE = -DMNH_MPI_DOUBLE_PRECISION -DMNH_MPI_BSEND -DDEV_NULL +CPPFLAGS_SURCOUCHE = -DMNH_MPI_BSEND -DDEV_NULL CPPFLAGS_RAD = CPPFLAGS_NEWLFI = -DSWAPIO -DLINUX CPPFLAGS_MNH = -DAINT=INT -DAMOD=MOD -DMNH -DSFX_MNH diff --git a/src/Rules.LXpgi.mk b/src/Rules.LXpgi.mk index 0a1fc76d781fd2ebe0e1efc850cfee758035b49b..3b50623706d93a6c5cb5738fddfd6886b6ed4602 100644 --- a/src/Rules.LXpgi.mk +++ b/src/Rules.LXpgi.mk @@ -1,6 +1,6 @@ -#MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier +#MNH_LIC Copyright 1994-2019 CNRS, Meteo-France and Universite Paul Sabatier #MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence -#MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt +#MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt #MNH_LIC for details. version 1. ########################################################## # # @@ -33,16 +33,13 @@ MNH_INT ?=4 # ifneq "$(MNH_REAL)" "4" OPT_BASE += $(OPT_R8) -CPPFLAGS_SURCOUCHE += -DMNH_MPI_DOUBLE_PRECISION endif # OPT_BASE_I4 := $(OPT_BASE) ifeq "$(MNH_INT)" "8" OPT_BASE += $(OPT_I8) LFI_INT ?=8 -MNH_MPI_RANK_KIND ?=8 else -MNH_MPI_RANK_KIND ?=4 LFI_INT ?=4 endif # @@ -99,7 +96,7 @@ CPP = cpp -P -traditional -Wcomment # CPPFLAGS_SURFEX = -CPPFLAGS_SURCOUCHE += -DMNH_MPI_RANK_KIND=$(MNH_MPI_RANK_KIND) +CPPFLAGS_SURCOUCHE += CPPFLAGS_RAD = CPPFLAGS_NEWLFI = -DSWAPIO -DLINUX -DLFI_INT=${LFI_INT} CPPFLAGS_MNH = -DMNH -DMNH_PGI -DSFX_MNH diff --git a/src/Rules.SX8.mk b/src/Rules.SX8.mk index c3c00c85472744d80a01da2ece0a4ce60d5d0a7a..669582ee8fde48898ce5487f9c76a4ab90ee61dc 100644 --- a/src/Rules.SX8.mk +++ b/src/Rules.SX8.mk @@ -1,6 +1,6 @@ -#MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier +#MNH_LIC Copyright 1994-2019 CNRS, Meteo-France and Universite Paul Sabatier #MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence -#MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt +#MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt #MNH_LIC for details. version 1. ########################################################## # # @@ -29,9 +29,7 @@ OPT_BASE_I4 := $(OPT_BASE) ifeq "$(MNH_INT)" "8" OPT_BASE += $(OPT_I8) LFI_INT ?=8 -MNH_MPI_RANK_KIND ?=8 else -MNH_MPI_RANK_KIND ?=4 LFI_INT ?=4 endif # @@ -86,7 +84,7 @@ CPP = cpp -P -traditional -Wcomment AR=sxar # CPPFLAGS_SURFEX = -CPPFLAGS_SURCOUCHE = -DMNH_MPI_DOUBLE_PRECISION -DMNH_SX5 -DMNH_MPI_BSEND -DMNH_MPI_RANK_KIND=$(MNH_MPI_RANK_KIND) +CPPFLAGS_SURCOUCHE = -DMNH_SX5 -DMNH_MPI_BSEND CPPFLAGS_RAD = CPPFLAGS_NEWLFI = -DMNH_SX5 -DLFI_INT=${LFI_INT} CPPFLAGS_MNH = -DMNH -DSFX_MNH diff --git a/src/SURFEX/ini_csts.F90 b/src/SURFEX/ini_csts.F90 index 39462a53aff2b787418c5341955ebce5e3e22abc..a17a39e36b87555f47b3de7347072396f751e4c4 100644 --- a/src/SURFEX/ini_csts.F90 +++ b/src/SURFEX/ini_csts.F90 @@ -54,6 +54,9 @@ ! ------------ ! USE MODD_CSTS +#ifdef SFX_MNH +USE MODD_PRECISION, ONLY: MNHREAL +#endif ! ! USE YOMHOOK ,ONLY : LHOOK, DR_HOOK @@ -78,10 +81,12 @@ REAL(KIND=JPRB) :: ZHOOK_HANDLE IF (LHOOK) CALL DR_HOOK('INI_CSTS',0,ZHOOK_HANDLE) #ifdef SFX_MNH -#ifdef MNH_MPI_DOUBLE_PRECISION -XSURF_TINY = 1.0e-80 -#else +#if (MNH_REAL == 8) +XSURF_TINY = 1.0e-80_MNHREAL +#elif (MNH_REAL == 4) XSURF_TINY = TINY (XSURF_TINY ) +#else +#error "Invalid MNH_REAL" #endif #else XSURF_TINY = 1.0e-80 diff --git a/src/SURFEX/modd_surf_par.F90 b/src/SURFEX/modd_surf_par.F90 index 2947cd3b09848242c0076ed458ca118df77cdd36..f38334f2d6003bdf0e8379982f11d71094f4bd59 100644 --- a/src/SURFEX/modd_surf_par.F90 +++ b/src/SURFEX/modd_surf_par.F90 @@ -33,6 +33,9 @@ MODULE MODD_SURF_PAR !* 0. DECLARATIONS ! ------------ ! +#ifdef SFX_MNH +USE MODD_PRECISION, ONLY: MNHREAL +#endif ! IMPLICIT NONE ! @@ -43,10 +46,12 @@ INTEGER :: NBUGFIX ! bugfix number of this version #ifndef SFX_MNH REAL, PARAMETER :: XUNDEF = 1.E+20 #else -#ifdef MNH_MPI_DOUBLE_PRECISION -REAL, PARAMETER :: XUNDEF = 1.E+20! HUGE(XUNDEF) ! Z'7FFFFFFFFFFFFFFF' ! undefined value +#if (MNH_REAL == 8) +REAL, PARAMETER :: XUNDEF = 1.E+20_MNHREAL ! HUGE(XUNDEF) ! Z'7FFFFFFFFFFFFFFF' ! undefined value +#elif (MNH_REAL == 4) +REAL, PARAMETER :: XUNDEF = 1.E+9_MNHREAL ! HUGE(XUNDEF) ! Z'7FBFFFFF' ! undefined value #else -REAL, PARAMETER :: XUNDEF = 1.E+9 ! HUGE(XUNDEF) ! Z'7FBFFFFF' ! undefined value +#error "Invalid MNH_REAL" #endif #endif INTEGER, PARAMETER :: NUNDEF = 1E+9 ! HUGE(NUNDEF) ! undefined value diff --git a/src/SURFEX/mode_gridtype_conf_proj.F90 b/src/SURFEX/mode_gridtype_conf_proj.F90 index ef34076286ae63ed2a5c7583305d2049e8cebae7..4e88934141e9499651e690231f105ef169a1cd4d 100644 --- a/src/SURFEX/mode_gridtype_conf_proj.F90 +++ b/src/SURFEX/mode_gridtype_conf_proj.F90 @@ -41,10 +41,11 @@ CONTAINS ! USE MODD_SURF_PAR, ONLY : XUNDEF, NUNDEF #ifdef MNH_PARALLEL -USE MODD_VAR_ll, ONLY : NPROC, IP, MPI_PRECISION, NMNH_COMM_WORLD, YSPLITTING USE MODD_MPIF +use modd_precision, only: 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 #endif ! IMPLICIT NONE @@ -136,7 +137,7 @@ IF ( NPROC > 1 .AND. LINI_PARAZ) THEN ENDIF CALL MPI_ALLREDUCE(IROOT, IROOTPROC, 1, MPI_INTEGER, 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, MPI_PRECISION, IROOTPROC, NMNH_COMM_WORLD, IINFO_ll) + 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) @@ -147,7 +148,7 @@ IF ( NPROC > 1 .AND. LINI_PARAZ) THEN ENDIF CALL MPI_ALLREDUCE(IROOT, IROOTPROC, 1, MPI_INTEGER, 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, MPI_PRECISION, IROOTPROC, NMNH_COMM_WORLD, IINFO_ll) + CALL MPI_BCAST(PGRID_PAR(10), 1, MNHREAL_MPI, IROOTPROC, NMNH_COMM_WORLD, IINFO_ll) ENDIF #endif !