diff --git a/src/MNH/read_all_data_grib_case.f90 b/src/MNH/read_all_data_grib_case.f90 index 04a8ff5e8b5556152d2a61599a05cbe5ed0c25ef..ec83d1da95759f639525edda2af8fe611b989ce3 100644 --- a/src/MNH/read_all_data_grib_case.f90 +++ b/src/MNH/read_all_data_grib_case.f90 @@ -136,7 +136,8 @@ END MODULE MODI_READ_ALL_DATA_GRIB_CASE ! Q. Rodier 21/04/2020: correction GFS u and v wind component written in the right vertical order ! Q. Rodier 02/09/2020: Read and interpol geopotential height for interpolation on isobaric surface Grid of NCEP ! P. Wautelet 09/03/2021: move some chemistry initializations to ini_nsv -!JP Chaboureau 02/08/2021: add ERA5 reanlysis in pressure levels +!JP Chaboureau 02/08/2021: add ERA5 reanalysis in pressure levels +!JP Chaboureau 18/10/2022: correction on vertical level for GFS and ERA5 reanalyses in pressure levels !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -925,6 +926,9 @@ ALLOCATE (ZEXNM_G(INI,INLEVEL)) ZEXNM_G(:,1:INLEVEL-1) = (ZEXNF_G(:,1:INLEVEL-1)-ZEXNF_G(:,2:INLEVEL)) / & (LOG(ZEXNF_G(:,1:INLEVEL-1))-LOG(ZEXNF_G(:,2:INLEVEL))) ZEXNM_G(:,INLEVEL) = (ZPF_G(:,INLEVEL)/2./XP00)**(XRD/XCPD) +! +IF (IMODEL==10.OR.IMODEL==11) ZEXNM_G(:,:)=ZEXNF_G(:,:) ! for GFS and ERA5 on pressure levels +! DEALLOCATE (ZEXNF_G) DEALLOCATE (ZPF_G) ! @@ -1010,8 +1014,6 @@ ALLOCATE (ZRV_G(INI)) ALLOCATE (ZOUT(INO)) IF (IMODEL/=10) THEN ! others than NCEP DO JLOOP1=1, INLEVEL - !WRITE (ILUOUT0,*) 'JLOOP1=',JLOOP1,MINVAL(ZPM_G(:,JLOOP1)),MINVAL(ZT_G(:,JLOOP1)),MINVAL(ZQ_G(:,JLOOP1)) - !WRITE (ILUOUT0,*) ' ',MAXVAL(ZPM_G(:,JLOOP1)),MAXVAL(ZT_G(:,JLOOP1)),MAXVAL(ZQ_G(:,JLOOP1)) ! ! Compute Theta V and relative humidity on grib grid ! @@ -1039,17 +1041,13 @@ IF (IMODEL/=10) THEN ! others than NCEP CALL ARRAY_1D_TO_2D (INO,ZOUT,IIU,IJU,ZTHV_LS(:,:,JLOOP1)) ! END DO -ELSE !NCEP +ELSE !GFS and ERA5 on pressure levels DO JLOOP1=1, INLEVEL - !WRITE (ILUOUT0,*) 'JLOOP1=',JLOOP1,MINVAL(ZPM_G(:,JLOOP1)),MINVAL(ZT_G(:,JLOOP1)),MINVAL(ZQ_G(:,JLOOP1)) - !WRITE (ILUOUT0,*) ' ',MAXVAL(ZPM_G(:,JLOOP1)),MAXVAL(ZT_G(:,JLOOP1)),MAXVAL(ZQ_G(:,JLOOP1)) ZH_G(:) =ZQ_G(:,JLOOP1) ZRV_G(:) = (XRD/XRV)*SM_FOES(ZT_G(:,JLOOP1))*0.01*ZH_G(:) & /(ZPM_G(:,JLOOP1) -SM_FOES(ZT_G(:,JLOOP1))*0.01*ZH_G(:)) - !WRITE (ILUOUT0,*) ' ',MINVAL(ZRV_G(:)),MAXVAL(ZRV_G(:)) ZTHV_G(:)=ZT_G(:,JLOOP1) * ((XP00/ZPM_G(:,JLOOP1))**(XRD/XCPD)) * & ((1. + XRV*ZRV_G(:)/XRD) / (1. + ZRV_G(:))) - !WRITE (ILUOUT0,*) ' ',MINVAL(ZTHV_G(:)),MAXVAL(ZTHV_G(:)) ! ! Interpolation : H CALL HORIBL(ZPARAM(3),ZPARAM(4),ZPARAM(5),ZPARAM(6),INT(ZPARAM(2)),IINLO,INI, & @@ -1140,6 +1138,9 @@ ALLOCATE (ZEXNM_LS(IIU,IJU,INLEVEL)) ZEXNM_LS(:,:,1:INLEVEL-1) = (ZEXNF_LS(:,:,1:INLEVEL-1)-ZEXNF_LS(:,:,2:INLEVEL)) / & (LOG(ZEXNF_LS(:,:,1:INLEVEL-1))-LOG(ZEXNF_LS(:,:,2:INLEVEL))) ZEXNM_LS(:,:,INLEVEL) = (ZPF_LS(:,:,INLEVEL)/2./XP00)**(XRD/XCPD) +! +IF (IMODEL==10.OR.IMODEL==11) ZEXNM_LS(:,:,:)=ZEXNF_LS(:,:,:) ! for GFS and ERA5 on pressure levels +! DEALLOCATE (ZEXNF_LS) DEALLOCATE (ZPF_LS) ! diff --git a/src/MNH/ver_prep_gribex_case.f90 b/src/MNH/ver_prep_gribex_case.f90 index 8a6cc54bb401f84f1c5e5cbeafff1bb41cb6e2e9..0763ea885e8c6ac5e30e12090103cef96866a671 100644 --- a/src/MNH/ver_prep_gribex_case.f90 +++ b/src/MNH/ver_prep_gribex_case.f90 @@ -87,6 +87,8 @@ END MODULE MODI_VER_PREP_GRIBEX_CASE !! Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O !! Sep, 02, 2020 (Q. Rodier) use of geopotential height instead of !! height above orography for isobaric surface interpolation +!! Oct, 18 2022 (J.-P. Chaboureau) correction on vertical level +!! for input fields on isobaric surface (GFS and ERA5) !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -142,6 +144,7 @@ REAL,DIMENSION(:,:,:), ALLOCATABLE :: ZTKE_LS INTEGER :: JRR ! loop counter INTEGER :: JSV ! loop counter INTEGER :: JK ! loop counter +CHARACTER(LEN=4) :: YWLOC_LS ! localisation of vertical wind speed !------------------------------------------------------------------------------- ! ILUOUT0 = TLUOUT0%NLU @@ -195,6 +198,9 @@ END IF ALLOCATE(ZZMASS_LS(IIU,IJU,ILU+2*JPVEXT)) ALLOCATE(ZSV_LS(IIU,IJU,ILU+2*JPVEXT,SIZE(XSV_LS,4))) IF (HFILE(1:3)=='ATM') THEN + IF (SIZE(XB_LS)==0) THEN ! pressure level + XZMASS_LS(:,:,:)=XGH_LS(:,:,:) + END IF ALLOCATE(ZZFLUX_LS(IIU,IJU,ILU+2*JPVEXT)) ALLOCATE(ZPMHP_LS(IIU,IJU,ILU+2*JPVEXT)) ALLOCATE(ZTHV_LS(IIU,IJU,ILU+2*JPVEXT)) @@ -262,27 +268,20 @@ IF (HFILE(1:3)=='ATM') THEN END IF ! IF (HFILE(1:3)=='ATM') THEN - - IF (SIZE(XB_LS)/=0) THEN ! hybrid level (w at flux points) - CALL VER_INTERP_TO_MIXED_GRID('ATM ',.TRUE.,XZS_LS,XZSMT_LS, & + IF (SIZE(XB_LS)/=0) THEN ! hybrid level (w at flux points) + YWLOC_LS='FLUX' + ELSE ! isobaric surfaces (w at mass points) + YWLOC_LS='MASS' + END IF + !Warning, for pressure level (GFS and ERA5 only for now), ZZFLUX_LS is not correct (but not used) + CALL VER_INTERP_TO_MIXED_GRID('ATM ',.TRUE.,XZS_LS,XZSMT_LS, & ZZMASS_LS,ZSV_LS, & ZZFLUX_LS,XPS_LS,ZPMHP_LS, & ZTHV_LS,ZR_LS, & ZHU_LS, & ZTKE_LS, & ZU_LS,ZV_LS, & - ZW_LS,'FLUX' ) - ELSE ! isobaric surfaces (w at mass points) - !Warning, in that case (NCEP only for now) ZZFLUX_LS is not correct (but not used) - CALL VER_INTERP_TO_MIXED_GRID('ATM ',.TRUE.,XZS_LS,XZSMT_LS, & - XGH_LS,ZSV_LS, & - ZZFLUX_LS,XPS_LS,ZPMHP_LS, & - ZTHV_LS,ZR_LS, & - ZHU_LS, & - ZTKE_LS, & - ZU_LS,ZV_LS, & - ZW_LS,'MASS' ) - END IF + ZW_LS,YWLOC_LS ) ELSE IF (HFILE=='CHEM') THEN CALL VER_INTERP_TO_MIXED_GRID(HFILE,.TRUE.,XZS_SV_LS,XZS_SV_LS,& ZZMASS_LS,ZSV_LS ) diff --git a/src/Makefile b/src/Makefile index d996ff973445adca08d33056dbc64e8425d7c3c4..29752361f40dec77111d5e7c66db036a0f1a873f 100644 --- a/src/Makefile +++ b/src/Makefile @@ -345,20 +345,20 @@ $(CDF_MOD) : cd ${DIR_LIBAEC} && ./configure --disable-shared --prefix=${CDF_PATH} --libdir=${CDF_PATH}/lib64 CC="$(CC)" CFLAGS="$(HDF_OPT)" && \ $(MAKE) && $(MAKE) install && $(MAKE) clean cd ${DIR_HDF} && ./configure --enable-fortran --disable-shared --prefix=${CDF_PATH} --libdir=${CDF_PATH}/lib64 --with-szlib=${CDF_PATH}/include,${CDF_PATH}/lib64 \ - CC="$(CC)" CFLAGS="$(HDF_OPT)" FC="$(FC)" FCFLAGS="$(NETCDF_OPT)" LDFLAGS="-L${CDF_PATH}/lib64" LIBS="-lsz -laec -lz" && \ + CC="$(CC)" CFLAGS="$(HDF_OPT)" FC="$(FC)" FCFLAGS="$(NETCDF_OPT)" LDFLAGS="-L${CDF_PATH}/lib64" LIBS="-lsz -laec -lz -ldl " && \ $(MAKE) && $(MAKE) install && $(MAKE) clean cd ${DIR_CDFC} && ./configure --disable-shared --prefix=${CDF_PATH} --libdir=${CDF_PATH}/lib64 --disable-dap \ - CC="$(CC)" CFLAGS="$(NETCDF_OPT)" CPPFLAGS="${INC_NETCDF}" ${CDF_CONF} LDFLAGS="-L${CDF_PATH}/lib64" LIBS="-lhdf5_hl -lhdf5 -lsz -laec -lz" && \ + CC="$(CC)" CFLAGS="$(NETCDF_OPT)" CPPFLAGS="${INC_NETCDF}" ${CDF_CONF} LDFLAGS="-L${CDF_PATH}/lib64" LIBS="-lhdf5_hl -lhdf5 -lsz -laec -lz -ldl " && \ $(MAKE) && $(MAKE) install && $(MAKE) clean ifdef MNH_FOREFIRE cd ${DIR_CDFCXX} && ./configure --disable-shared --prefix=${CDF_PATH} --libdir=${CDF_PATH}/lib64 \ CXX="$(CXX)" CXXFLAGS="$(NETCDF_OPT)" FC="$(FC)" FCFLAGS="$(NETCDF_OPT) $(NETCDF_SUPPFLAGS)" FFLAGS="$(NETCDF_OPT)" \ - CPPFLAGS="${INC_NETCDF}" ${CDF_CONF} LDFLAGS="-L${CDF_PATH}/lib64" LIBS="-lnetcdf -lhdf5_hl -lhdf5 -lsz -laec -lz" && \ + CPPFLAGS="${INC_NETCDF}" ${CDF_CONF} LDFLAGS="-L${CDF_PATH}/lib64" LIBS="-lnetcdf -lhdf5_hl -lhdf5 -lsz -laec -lz -ldl " && \ $(MAKE) && $(MAKE) install && $(MAKE) clean endif cd ${DIR_CDFF} && ./configure --disable-shared --prefix=${CDF_PATH} --libdir=${CDF_PATH}/lib64 \ CC="$(CC)" CFLAGS="$(NETCDF_OPT)" FC="$(FC)" FCFLAGS="$(NETCDF_OPT) $(NETCDF_SUPPFLAGS)" FFLAGS="$(NETCDF_OPT)" \ - CPPFLAGS="${INC_NETCDF}" ${CDF_CONF} LDFLAGS="-L${CDF_PATH}/lib64" LIBS="-lnetcdf -lhdf5_hl -lhdf5 -lsz -laec -lz" && \ + CPPFLAGS="${INC_NETCDF}" ${CDF_CONF} LDFLAGS="-L${CDF_PATH}/lib64" LIBS="-lnetcdf -lhdf5_hl -lhdf5 -lsz -laec -lz -ldl " && \ $(MAKE) && $(MAKE) install && $(MAKE) clean cleanmaster : cleancdf diff --git a/src/configure b/src/configure index 348092bcedb6e841ea16a41b21f4488f56c579ad..534c5abb9260b94cad7daa6b66f06f90207be928 100755 --- a/src/configure +++ b/src/configure @@ -340,6 +340,19 @@ export CC=gcc export NEED_NCARG=${NEED_NCARG:-NO} export NEED_TOOLS=NO ;; +'Linux lxenm'*) #PC Linux ENM + export MNH_ARCH=`echo $ARCH | grep LX` + export ARCH=${MNH_ARCH:-LXgfortran} + export VER_MPI=${VER_MPI:-MPIVIDE} + export OPTLEVEL=${OPTLEVEL:-DEBUG} + export MVWORK=${MVWORK:-NO} + export VER_CDF=${VER_CDF:-CDFAUTO} + export NEED_NCARG=${NEED_NCARG:-YES} + export NEED_TOOLS=NO + export MNHENV=${MNHENV:-" +export PATH=/opt/gcc-9.4.0/bin:\$PATH +"} + ;; 'Linux lx'*|'Linux sx'*|'Linux px'*) #CNRM export MNH_ARCH=`echo $ARCH | grep LX` export ARCH=${MNH_ARCH:-LXgfortran}