diff --git a/src/LIB/SURCOUCHE/src/mode_netcdf.f90 b/src/LIB/SURCOUCHE/src/mode_netcdf.f90 index 060c71ca002acc71cb3c6665ec1cbed9ac2df3f9..e1270372bed07eedacebe6778df805dc57a1c68d 100644 --- a/src/LIB/SURCOUCHE/src/mode_netcdf.f90 +++ b/src/LIB/SURCOUCHE/src/mode_netcdf.f90 @@ -3,7 +3,8 @@ MODULE MODE_NETCDF !! !! Original 14/04/2015 D. Gazen !! D.Gazen & J.Escobar 24/03/2107 : Correction for compilation of netcdf4IO in REAL*4 <=> MNH_REAL=R4 -!! J.Escobar 30/06/2017 : Add activation of ZLIB compression in NCWRITX3 +!! J.Escobar 30/06/2017 : Add activation of ZLIB compression in NCWRITX3 +!! J.Escobar 14/12/2017 : Correction for MNH_INT=8 !! USE MODD_NETCDF @@ -739,7 +740,7 @@ YVARNAME = str_replace(YVARNAME, '.', '--') STATUS = NF_INQ_VARID(INCID, YVARNAME, IVARID) IF (STATUS /= NF_NOERR) THEN ! Define the scalar variable -#ifndef MNH_INT8 +#if ( MNH_INT == 4 ) STATUS = NF_DEF_VAR(INCID, YVARNAME, NF_INT, IZERO, IZERO, IVARID) #else STATUS = NF_DEF_VAR(INCID, YVARNAME, NF_INT64, IZERO, IZERO, IVARID) @@ -751,7 +752,7 @@ ELSE END IF ! Write the data -#ifndef MNH_INT8 +#if ( MNH_INT == 4 ) STATUS = NF_PUT_VAR_INT(INCID, IVARID, INT(KFIELD,KIND=IDCDF_KIND)) IF (status /= NF_NOERR) CALL HANDLE_ERR(status,__LINE__,'NCWRITN0[NF_PUT_VAR_INT]',IRESP) #else @@ -807,7 +808,7 @@ IF (STATUS /= NF_NOERR) THEN ! Get the netcdf dimensions CALL FILLVDIMS(PZCDF, INT(SHAPE(KFIELD),KIND=IDCDF_KIND), HDIR, IVDIMS) ! Define the variable -#ifndef MNH_INT8 +#if ( MNH_INT == 4 ) STATUS = NF_DEF_VAR(INCID, YVARNAME, NF_INT, INT(SIZE(IVDIMS),KIND=IDCDF_KIND), IVDIMS, IVARID) #else STATUS = NF_DEF_VAR(INCID, YVARNAME, NF_INT64, INT(SIZE(IVDIMS),KIND=IDCDF_KIND), IVDIMS, IVARID) @@ -819,7 +820,7 @@ ELSE END IF ! Write the data -#ifndef MNH_INT8 +#if ( MNH_INT == 4 ) STATUS = NF_PUT_VAR_INT(INCID, IVARID, INT(KFIELD,KIND=IDCDF_KIND)) IF (status /= NF_NOERR) CALL HANDLE_ERR(status,__LINE__,'NCWRITN1[NF_PUT_VAR_INT]',IRESP) #else @@ -861,7 +862,7 @@ IF (STATUS /= NF_NOERR) THEN CALL FILLVDIMS(PZCDF, INT(SHAPE(KFIELD),KIND=IDCDF_KIND), HDIR, IVDIMS) ! Define the variable -#ifndef MNH_INT8 +#if ( MNH_INT == 4 ) STATUS = NF_DEF_VAR(INCID, YVARNAME, NF_INT, INT(SIZE(IVDIMS),KIND=IDCDF_KIND), IVDIMS, IVARID) #else STATUS = NF_DEF_VAR(INCID, YVARNAME, NF_INT64, INT(SIZE(IVDIMS),KIND=IDCDF_KIND), IVDIMS, IVARID) @@ -873,7 +874,7 @@ ELSE END IF ! Write the data -#ifndef MNH_INT8 +#if ( MNH_INT == 4 ) STATUS = NF_PUT_VAR_INT(INCID, IVARID, INT(KFIELD,KIND=IDCDF_KIND)) IF (status /= NF_NOERR) CALL HANDLE_ERR(status,__LINE__,'NCWRITN2[NF_PUT_VAR_INT]',IRESP) #else @@ -1591,13 +1592,13 @@ IF (STATUS /= NF_NOERR) CALL HANDLE_ERR(STATUS,__LINE__,'NCREADN0[NF_INQ_VARNDIM STATUS = NF_INQ_VARTYPE(KNCID, IVARID, ITYPE) IF (STATUS /= NF_NOERR) CALL HANDLE_ERR(STATUS,__LINE__,'NCREADN0[NF_INQ_VARTYPE] '//TRIM(YVARNAME)) -#ifndef MNH_INT8 +#if ( MNH_INT == 4 ) IF (IDIMS == 0 .AND. ITYPE == NF_INT) THEN #else IF (IDIMS == 0 .AND. ITYPE == NF_INT64) THEN #endif ! Read variable -#ifndef MNH_INT8 +#if ( MNH_INT == 4 ) STATUS = NF_GET_VAR_INT(KNCID, IVARID, KFIELD) #else STATUS = NF_GET_VAR_INT64(KNCID, IVARID, KFIELD) @@ -1655,7 +1656,7 @@ IF (STATUS /= NF_NOERR) CALL HANDLE_ERR(STATUS,__LINE__,'NCREADN1[NF_INQ_VARNDIM STATUS = NF_INQ_VARTYPE(KNCID, IVARID, ITYPE) IF (STATUS /= NF_NOERR) CALL HANDLE_ERR(STATUS,__LINE__,'NCREADN1[NF_INQ_VARTYPE] '//TRIM(YVARNAME)) -#ifndef MNH_INT8 +#if ( MNH_INT == 4 ) IF (IDIMS == SIZE(SHAPE(KFIELD)) .AND. ITYPE == NF_INT) THEN #else IF (IDIMS == SIZE(SHAPE(KFIELD)) .AND. ITYPE == NF_INT64) THEN @@ -1672,7 +1673,7 @@ IF (IDIMS == SIZE(SHAPE(KFIELD)) .AND. ITYPE == NF_INT64) THEN IF (IVARSIZE == SIZE(KFIELD)) THEN ! Read variable -#ifndef MNH_INT8 +#if ( MNH_INT == 4 ) STATUS = NF_GET_VAR_INT(KNCID, IVARID, KFIELD) #else STATUS = NF_GET_VAR_INT64(KNCID, IVARID, KFIELD) @@ -1734,7 +1735,7 @@ IF (STATUS /= NF_NOERR) CALL HANDLE_ERR(STATUS,__LINE__,'NCREADN2[NF_INQ_VARNDIM STATUS = NF_INQ_VARTYPE(KNCID, IVARID, ITYPE) IF (STATUS /= NF_NOERR) CALL HANDLE_ERR(STATUS,__LINE__,'NCREADN2[NF_INQ_VARTYPE] '//TRIM(YVARNAME)) -#ifndef MNH_INT8 +#if ( MNH_INT == 4 ) IF (IDIMS == SIZE(SHAPE(KFIELD)) .AND. ITYPE == NF_INT) THEN #else IF (IDIMS == SIZE(SHAPE(KFIELD)) .AND. ITYPE == NF_INT64) THEN @@ -1751,7 +1752,7 @@ IF (IDIMS == SIZE(SHAPE(KFIELD)) .AND. ITYPE == NF_INT64) THEN IF (IVARSIZE == SIZE(KFIELD)) THEN ! Read variable -#ifndef MNH_INT8 +#if ( MNH_INT == 4 ) STATUS = NF_GET_VAR_INT(KNCID, IVARID, KFIELD) #else STATUS = NF_GET_VAR_INT64(KNCID, IVARID, KFIELD) diff --git a/src/MNH/gps_zenith.f90 b/src/MNH/gps_zenith.f90 index 52f6b240c47b718a2ed6fe7c3160d5aea9ce2fa7..4e449368fa81fa811286e4cc2cb5a9d5c2bf47f6 100644 --- a/src/MNH/gps_zenith.f90 +++ b/src/MNH/gps_zenith.f90 @@ -204,7 +204,7 @@ ZRDSRV=XRD/XRV ZXHATM(1:IIU-1) = 0.5*(XXHAT(1:IIU-1)+XXHAT(2:IIU)) ZXHATM(IIU) = 2.*XXHAT(IIU)-ZXHATM(IIU-1) ZYHATM(1:IJU-1) = 0.5*(XYHAT(1:IJU-1)+XYHAT(2:IJU)) -ZYHATM(IJU) = 2.*XXHAT(IJU)-ZXHATM(IJU-1) +ZYHATM(IJU) = 2.*XYHAT(IJU)-ZYHATM(IJU-1) ZZHATM(:,:,1:IKU-1)=0.5*(XZZ(:,:,1:IKU-1)+XZZ(:,:,2:IKU)) ZZHATM(:,:,IKU) = 2.*XZZ(:,:,IKU) -ZZHATM(:,:,IKU-1) ! diff --git a/src/MNH/gps_zenith_grid.f90 b/src/MNH/gps_zenith_grid.f90 index 346ae30a7579f45d6320e3f766071231b5e86b01..8fa8c8a551c7cfaa007e05704a38f1e7822eb35d 100644 --- a/src/MNH/gps_zenith_grid.f90 +++ b/src/MNH/gps_zenith_grid.f90 @@ -184,7 +184,7 @@ ZRDSRV=XRD/XRV ZXHATM(1:IIU-1) = 0.5*(XXHAT(1:IIU-1)+XXHAT(2:IIU)) ZXHATM(IIU) = 2.*XXHAT(IIU)-ZXHATM(IIU-1) ZYHATM(1:IJU-1) = 0.5*(XYHAT(1:IJU-1)+XYHAT(2:IJU)) -ZYHATM(IJU) = 2.*XXHAT(IJU)-ZXHATM(IJU-1) +ZYHATM(IJU) = 2.*XYHAT(IJU)-ZYHATM(IJU-1) ZZHATM(:,:,1:IKU-1)=0.5*(XZZ(:,:,1:IKU-1)+XZZ(:,:,2:IKU)) ZZHATM(:,:,IKU) = 2.*XZZ(:,:,IKU) -ZZHATM(:,:,IKU-1) ! diff --git a/src/MNH/ini_seriesn.f90 b/src/MNH/ini_seriesn.f90 index e28bca423d9340cb280b10fae5eccc5ca5e76cce..99f8d66b9cddb23fe4213f24ac10ffcc3738bfcf 100644 --- a/src/MNH/ini_seriesn.f90 +++ b/src/MNH/ini_seriesn.f90 @@ -43,6 +43,7 @@ !! Original 4/03/2002 !! Oct. 2011 : (P.Le Moigne) Surface series !! June 2016: P. Wautelet: corrected writes +!! Nov. 2017: J.-P. Chaboureau: fix a bug in dimension check !! !------------------------------------------------------------------------------- ! @@ -121,7 +122,7 @@ IF ( ( NFREQSERIES*XTSTEP < XSEGLEN ) .AND. & ( NJBOXL < IJB_ll ) .OR. & ( NJBOXL > NJBOXH ) .OR. & ( NJBOXH > IJE_ll ) .OR. & - ( NBJSLICE >= IJE_ll ) .OR. & + ( NBJSLICE > IJE_ll ) .OR. & ( NBJSLICE > SIZE(NJSLICEL(:),1) ) .OR. & ( NJSLICEL(1) < IJB_ll ) .OR. & ( NJSLICEL(1) > IJE_ll ) .OR. & diff --git a/src/MNH/nband_model.fx90 b/src/MNH/nband_model.fx90 index 9a31f7d1343133c66dd66fdabded2999dd905fac..53afd5948ba507103dc76601f246710c187b3b11 100644 --- a/src/MNH/nband_model.fx90 +++ b/src/MNH/nband_model.fx90 @@ -16,6 +16,7 @@ * and changed name of variables concerned * indicated by "*MNH" * named nband_model.f90 and compiled with -Fixed +* J.Escobar (1/12/2017) bug => intialized all ZV=0.0 in spectr SUBROUTINE NBMVEC I ( KIDIA ,KFDIA ,KLON,KLEV,KGL,KCABS,KNG1,KUABS I , KH2O ,KCO2 ,KO3,KCNT,KN2O,KCH4,KCO,KC11,KC12,KCFC @@ -526,11 +527,12 @@ C 221 CONTINUE DO 223 JABS=1,KUABS DO 222 JL=KIDIA,KFDIA - ZV(JL,JABS,JKSL)=0. +C ZV(JL,JABS,JKSL)=0. 222 CONTINUE 223 CONTINUE 224 CONTINUE C + ZV = 0.0 C LLCNT=.FALSE. *MNH IF (WNU(1).LT.CLIM(1) .OR. WNU(1).GE.CLIM(2)) ICNT=0 diff --git a/src/MNH/num_diff.f90 b/src/MNH/num_diff.f90 index 7dc3b66c4a68ebe300e9771569a9223191f33d87..af0265cb623c78bda525b7a84e8929a46a0650cd 100644 --- a/src/MNH/num_diff.f90 +++ b/src/MNH/num_diff.f90 @@ -214,6 +214,7 @@ END MODULE MODI_NUM_DIFF !! 05/07 (C.Lac) Separation between variables !! 07/09 (C.Lac) Correction on budget calls !! J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 +!! J.Escobar : 05/12/2017 : Pb SegFault , correct IF(ONUMDIFTH/OZDIFFU) nesting !! !------------------------------------------------------------------------------- ! @@ -347,20 +348,20 @@ IF (ONUMDIFTH) THEN CALL NUM_DIFF_ALGO_Z(PRTHS, PTHM, IGRID, PRHODJ, & PDK2TH, PDK4TH, PLSTHM, & TZHALO2LIST%HALO2, TZHALO2LSLIST%HALO2) -!!$ ELSE -!!$ CALL NUM_DIFF_ALGO(PRTHS, PTHM, IGRID, PRHODJ, & -!!$ PDK2TH, PDK4TH, PLSTHM, & -!!$ TZHALO2LIST%HALO2, TZHALO2LSLIST%HALO2) -!!$ ENDIF - ELSE - IF (OZDIFFU) THEN ! call z-diffusion for potential temperature - CALL NUM_DIFF_ALGO_Z(PRTHS, PTHM, IGRID, PRHODJ, & - PDK2TH, PDK4TH, PLSTHM ) ELSE - CALL NUM_DIFF_ALGO(PRTHS, PTHM, IGRID, PRHODJ, & - PDK2TH, PDK4TH, PLSTHM ) + CALL NUM_DIFF_ALGO(PRTHS, PTHM, IGRID, PRHODJ, & + PDK2TH, PDK4TH, PLSTHM, & + TZHALO2LIST%HALO2, TZHALO2LSLIST%HALO2) ENDIF - ENDIF +!!$ ELSE +!!$ IF (OZDIFFU) THEN ! call z-diffusion for potential temperature +!!$ CALL NUM_DIFF_ALGO_Z(PRTHS, PTHM, IGRID, PRHODJ, & +!!$ PDK2TH, PDK4TH, PLSTHM ) +!!$ ELSE +!!$ CALL NUM_DIFF_ALGO(PRTHS, PTHM, IGRID, PRHODJ, & +!!$ PDK2TH, PDK4TH, PLSTHM ) +!!$ ENDIF +!!$ ENDIF ! IF ( GTKEALLOC ) THEN !!$ IF(NHALO == 1) THEN @@ -383,20 +384,20 @@ IF (ONUMDIFTH) THEN CALL NUM_DIFF_ALGO_Z(PRRS(:,:,:,1), PRM(:,:,:,1), IGRID, PRHODJ, & PDK2TH, PDK4TH, & PLSRVM, TZHALO2LIST%HALO2, TZHALO2LSLIST%HALO2) -!!$ ELSE -!!$ CALL NUM_DIFF_ALGO(PRRS(:,:,:,1), PRM(:,:,:,1), IGRID, PRHODJ, & -!!$ PDK2TH, PDK4TH, PLSRVM, & -!!$ TZHALO2LIST%HALO2, TZHALO2LSLIST%HALO2) -!!$ ENDIF - ELSE - IF (OZDIFFU) THEN ! call z-diffusion for wv mixing ratio - CALL NUM_DIFF_ALGO_Z(PRRS(:,:,:,1), PRM(:,:,:,1), IGRID, PRHODJ, & - PDK2TH, PDK4TH, PLSRVM) ELSE - CALL NUM_DIFF_ALGO(PRRS(:,:,:,1), PRM(:,:,:,1), IGRID, PRHODJ, & - PDK2TH, PDK4TH, PLSRVM) + CALL NUM_DIFF_ALGO(PRRS(:,:,:,1), PRM(:,:,:,1), IGRID, PRHODJ, & + PDK2TH, PDK4TH, PLSRVM, & + TZHALO2LIST%HALO2, TZHALO2LSLIST%HALO2) ENDIF - ENDIF +!!$ ELSE +!!$ IF (OZDIFFU) THEN ! call z-diffusion for wv mixing ratio +!!$ CALL NUM_DIFF_ALGO_Z(PRRS(:,:,:,1), PRM(:,:,:,1), IGRID, PRHODJ, & +!!$ PDK2TH, PDK4TH, PLSRVM) +!!$ ELSE +!!$ CALL NUM_DIFF_ALGO(PRRS(:,:,:,1), PRM(:,:,:,1), IGRID, PRHODJ, & +!!$ PDK2TH, PDK4TH, PLSRVM) +!!$ ENDIF +!!$ ENDIF ENDIF ! ! In some situations, it makes sense to use the z-diffusion also for cloud water, but it is diff --git a/src/MNH/set_frc.f90 b/src/MNH/set_frc.f90 index c219771b1e246be0710476e0fc06e88412380802..5ef77c3ca307309f5aaec87f9a8904f5c165cbe1 100644 --- a/src/MNH/set_frc.f90 +++ b/src/MNH/set_frc.f90 @@ -95,6 +95,7 @@ END MODULE MODI_SET_FRC !! 06/12 (Masson) Removes extrapolations below or above forcing !! data. Reproduces the same data instead. !! 09/2017 Q.Rodier add LTEND_UV_FRC +!! 27/11/17 (Chaboureau) fix bug in allocation relative to LTEND_UV_FRC !! !------------------------------------------------------------------------------- ! @@ -295,6 +296,8 @@ DO JKT = 1,NFRC DEALLOCATE(ZRVF) DEALLOCATE(ZGXRF) DEALLOCATE(ZGYRF) + DEALLOCATE(ZTUF) + DEALLOCATE(ZTVF) END IF ALLOCATE(ZPRESSUF(ILEVELF)) ALLOCATE(ZTHVUF(ILEVELF)) @@ -306,11 +309,14 @@ DO JKT = 1,NFRC ALLOCATE(ZRVF(ILEVELF)) ALLOCATE(ZGXRF(ILEVELF)) ALLOCATE(ZGYRF(ILEVELF)) + ALLOCATE(ZTUF(ILEVELF)) + ALLOCATE(ZTVF(ILEVELF)) ! DO JKU =1,ILEVELF READ(ILUPRE,*) ZPRESSUF(JKU) & ,ZUF(JKU),ZVF(JKU),ZTHF(JKU),ZRVF(JKU) & - ,ZWF(JKU),ZGXRF(JKU),ZGYRF(JKU) + ,ZWF(JKU),ZGXRF(JKU),ZGYRF(JKU),ZTUF(JKU)& + ,ZTVF(JKU) END DO ! ! read sounding diff --git a/src/MNH/write_lfin.f90 b/src/MNH/write_lfin.f90 index fcb96a4c4768140b576a07b4769a8dbe14f278a3..d4c07e5cdbeaec8d54da697a48119beaa19ed844 100644 --- a/src/MNH/write_lfin.f90 +++ b/src/MNH/write_lfin.f90 @@ -164,6 +164,7 @@ END MODULE MODI_WRITE_LFIFM_n !! J.escobar 04/08/2015 suit Pb with writ_lfin JSA increment , modif in ini_nsv to have good order initialization !! Modification 01/2016 (JP Pinty) Add LIMA !! M.Mazoyer 04/16 : Add supersaturation fields +!! JP Chaboureau 27/11/2017 add wind tendency forcing !! !------------------------------------------------------------------------------- ! @@ -2380,6 +2381,22 @@ IF (LFORCING) THEN CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,YDIR,XTENDRVFRC(:,JT),IGRID,ILENCH, & YCOMMENT,IRESP) ! +! + YRECFM='TENDUFRC'//YFRC + YCOMMENT=' ' + IGRID=1 + ILENCH=LEN(YCOMMENT) + CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,YDIR,XTENDUFRC(:,JT),IGRID,ILENCH, & + YCOMMENT,IRESP) +! +! + YRECFM='TENDVFRC'//YFRC + YCOMMENT=' ' + IGRID=1 + ILENCH=LEN(YCOMMENT) + CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,YDIR,XTENDVFRC(:,JT),IGRID,ILENCH, & + YCOMMENT,IRESP) +! ! YRECFM='GXTHFRC'//YFRC YCOMMENT=' ' diff --git a/src/Makefile.MESONH.mk b/src/Makefile.MESONH.mk index 1c74c732f32cd01e7fc5164de886ca7e397db34e..e2a435b357c3349a979b70c448959a5b1f0c9606 100644 --- a/src/Makefile.MESONH.mk +++ b/src/Makefile.MESONH.mk @@ -49,9 +49,11 @@ DIR_MASTER += $(DIR_MNH) CPPFLAGS += $(CPPFLAGS_MNH) INC += $(INC_MNH) -ifeq "$(MNH_INT)" "8" -CPPFLAGS += -DMNH_INT=8 -endif +# +# MNH integer 4/8 +# +CPPFLAGS += -DMNH_INT=$(MNH_INT) +# # # Len of HREC characters diff --git a/src/Rules.LXgfortran.mk b/src/Rules.LXgfortran.mk index dec164ce1795effcc1d1151aa6f6e42b61b20d4c..b11b8f9fc16b9a0017a56af3516e2f3f00f8eb61 100644 --- a/src/Rules.LXgfortran.mk +++ b/src/Rules.LXgfortran.mk @@ -99,9 +99,10 @@ HDF_CONF= CFLAGS=-std=c99 ## LIBTOOLS flags # #if MNH_TOOLS exists => compile the tools if gfortran >= 5.X -#ifeq ($(shell test $$( gfortran -dumpversion | cut -b1 ) -ge 5 ; echo $$?),0) +ifeq "$(MNH_INT)" "4" ifeq ($(shell test $(GFV) -ge 500 ; echo $$?),0) - MNH_TOOLS = yes +MNH_TOOLS=yes +endif endif # # diff --git a/src/Rules.LXifort.mk b/src/Rules.LXifort.mk index 92f8e8b526af6363777f8fe57d1e7683d0daa87b..92c9a496070fd5998c0e357b4599f7f09634e226 100644 --- a/src/Rules.LXifort.mk +++ b/src/Rules.LXifort.mk @@ -13,7 +13,7 @@ OPT_BASE = -g -w -assume nosource_include -assume byterecl -fpe0 -ftz -fpic - OPT_PERF0 = -O0 OPT_PERF2 = -O2 OPT_PERF3 = -O3 -xHost -OPT_CHECK = -CB -ftrapuv +OPT_CHECK = -CB -ftrapuv -debug-parameters all OPT_I8 = -i8 OPT_R8 = -r8 # @@ -130,7 +130,9 @@ CNAME_GRIBEX=ifort # LIBTOOLS flags # #if MNH_TOOLS exists => compile the tools -MNH_TOOLS = yes +ifeq "$(MNH_INT)" "4" +MNH_TOOLS=yes +endif # ########################################################## # #