diff --git a/src/MNH/diag.f90 b/src/MNH/diag.f90 index 449c093b5f86a71f165e3673571741a01db86b87..b74d9be93abfb67033973409eb3bedd84c051d03 100644 --- a/src/MNH/diag.f90 +++ b/src/MNH/diag.f90 @@ -74,7 +74,7 @@ !! P.Tulet : 11/2015 : new diagnostic for aerosol !! 09/2015 (S. Bielli) Add netcdf call for phys_param !! 04/2016 (G.Delautier) replace print by write in OUTPUT LISTING -!! +!! 06/2016 (G.Delautier) phasage surfex 8 !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -149,10 +149,10 @@ USE MODI_MNHGET_SURF_PARAM_n USE MODI_VERSION USE MODI_INIT_MNH USE MODI_MENU_DIACHRO -USE MODI_GOTO_SURFEX USE MODI_WRITE_SURF_ATM_N USE MODI_DIAG_SURF_ATM_N -USE MODI_WRITE_DIAG_SURF_ATM_N +USE MODI_WRITE_DIAG_SURF_ATM_N +USE MODD_MNH_SURFEX_n ! #ifdef MNH_NCWRIT USE MODN_NCOUT @@ -740,32 +740,36 @@ ZTIME1=ZTIME2 !* 6.0 Surface diagnostics ! IF (CSURF=='EXTE') THEN - CALL GOTO_SURFEX(1,.TRUE.) + CALL GOTO_SURFEX(1) #ifdef MNH_NCWRIT NC_WRITE= LNETCDF NC_FILE = 'sf1' - CALL WRITE_SURF_ATM_n('MESONH','ALL',.FALSE.) + CALL WRITE_SURF_ATM_n(YSURF_CUR,'MESONH','ALL',.FALSE.) IF ( LNETCDF ) THEN DEF_NC=.FALSE. ! print * , ' SECOND WRITE ' - CALL WRITE_SURF_ATM_n('MESONH','ALL',.FALSE.) + CALL WRITE_SURF_ATM_n(YSURF_CUR,'MESONH','ALL',.FALSE.) DEF_NC=.TRUE. END IF - CALL DIAG_SURF_ATM_n('MESONH') + CALL DIAG_SURF_ATM_n(YSURF_CUR%IM%DGEI, YSURF_CUR%FM%DGF, YSURF_CUR%DGL, YSURF_CUR%IM%DGI, & + YSURF_CUR%SM%DGS, YSURF_CUR%DGU, YSURF_CUR%TM%DGT, YSURF_CUR%WM%DGW, & + YSURF_CUR%U, YSURF_CUR%USS,'MESONH') NC_WRITE= LNETCDF NC_FILE = 'sf2' - CALL WRITE_DIAG_SURF_ATM_n('MESONH','ALL') + CALL WRITE_DIAG_SURF_ATM_n(YSURF_CUR,'MESONH','ALL') IF ( LNETCDF ) THEN DEF_NC=.FALSE. ! print * , ' SECOND WRITE ' - CALL WRITE_DIAG_SURF_ATM_n('MESONH','ALL') + CALL WRITE_DIAG_SURF_ATM_n(YSURF_CUR,'MESONH','ALL') DEF_NC=.TRUE. END IF !!!!!! MODIF SB #else - CALL WRITE_SURF_ATM_n('MESONH','ALL',.FALSE.) - CALL DIAG_SURF_ATM_n('MESONH') - CALL WRITE_DIAG_SURF_ATM_n('MESONH','ALL') + CALL WRITE_SURF_ATM_n(YSURF_CUR,'MESONH','ALL',.FALSE.) + CALL DIAG_SURF_ATM_n(YSURF_CUR%IM%DGEI, YSURF_CUR%FM%DGF, YSURF_CUR%DGL, YSURF_CUR%IM%DGI, & + YSURF_CUR%SM%DGS, YSURF_CUR%DGU, YSURF_CUR%TM%DGT, YSURF_CUR%WM%DGW, & + YSURF_CUR%U, YSURF_CUR%USS,'MESONH') + CALL WRITE_DIAG_SURF_ATM_n(YSURF_CUR,'MESONH','ALL') #endif WRITE(ILUOUT0,*) ' ' WRITE(ILUOUT0,*) 'DIAG AFTER WRITE_DIAG_SURF_ATM_n' diff --git a/src/MNH/goto_model_surfex_mnh.f90 b/src/MNH/goto_model_surfex_mnh.f90 index 818bd1026588796f32ec1e28a23dfcb1b5d19d0b..e96c9c8a18827196d7be92f5f4a766e0da0856ce 100644 --- a/src/MNH/goto_model_surfex_mnh.f90 +++ b/src/MNH/goto_model_surfex_mnh.f90 @@ -13,7 +13,7 @@ MODULE MODI_GOTO_MODEL_SURFEX_MNH ! INTERFACE ! ############################### - SUBROUTINE GOTO_MODEL_SURFEX_MNH(KMI, KINFO_ll) + SUBROUTINE GOTO_MODEL_SURFEX_MNH(U,KMI, KINFO_ll) ! ############################### !! !! PURPOSE @@ -51,18 +51,14 @@ MODULE MODI_GOTO_MODEL_SURFEX_MNH !* 0. DECLARATION ! ----------- ! -! USE MODE_ll - USE MODE_TOOLS_ll, ONLY : GET_GLOBALDIMS_ll, GET_DIM_PHYS_ll - USE MODD_SURF_ATM_n, ONLY : NDIM_FULL, NSIZE_FULL, NIMAX_SURF_ll, NJMAX_SURF_ll, NIMAX_SURF_LOC, NJMAX_SURF_LOC -! USE MODD_PARAMETERS, ONLY : JPHEXT, JPVEXT - ! -! USE MODI_GOTO_SURFEX + USE MODD_SURF_ATM_n, ONLY : SURF_ATM_t ! IMPLICIT NONE ! !* 0.1 Declaration of dummy arguments ! ------------------------------ ! + TYPE(SURF_ATM_t), INTENT(INOUT) :: U INTEGER, INTENT(IN) :: KMI !model id INTEGER, INTENT(OUT) :: KINFO_ll END SUBROUTINE GOTO_MODEL_SURFEX_MNH @@ -71,7 +67,7 @@ MODULE MODI_GOTO_MODEL_SURFEX_MNH ! END MODULE MODI_GOTO_MODEL_SURFEX_MNH ! ############################### - SUBROUTINE GOTO_MODEL_SURFEX_MNH(KMI, KINFO_ll) + SUBROUTINE GOTO_MODEL_SURFEX_MNH(U,KMI, KINFO_ll) ! ############################### !! !! PURPOSE @@ -102,12 +98,13 @@ END MODULE MODI_GOTO_MODEL_SURFEX_MNH !! ------------ !! !! Original 08/2015 +!! 06/2016 (G.Delautier) phasage surfex 8 !---------------------------------------------------------------------------- ! !* 0. DECLARATION ! ----------- ! -USE MODD_SURF_ATM_n, ONLY : NDIM_FULL, NSIZE_FULL, NIMAX_SURF_ll, NJMAX_SURF_ll, NIMAX_SURF_LOC, NJMAX_SURF_LOC +USE MODD_SURF_ATM_n, ONLY : SURF_ATM_t ! !USE MODE_ll USE MODE_TOOLS_ll, ONLY : GET_GLOBALDIMS_ll, GET_DIM_PHYS_ll @@ -115,13 +112,13 @@ USE MODD_PARAMETERS, ONLY : JPHEXT, JPVEXT USE MODD_VAR_ll, ONLY : YSPLITTING USE MODE_MODELN_HANDLER ! -USE MODI_GOTO_SURFEX ! IMPLICIT NONE ! !* 0.1 Declaration of dummy arguments ! ------------------------------ ! +TYPE(SURF_ATM_t), INTENT(INOUT) :: U INTEGER, INTENT(IN) :: KMI !model id INTEGER, INTENT(OUT) :: KINFO_ll ! @@ -148,8 +145,8 @@ CHARACTER*1 :: HSPLIT !CALL GO_TOMODEL_ll(KMI,KINFO_ll) !CALL GOTO_MODEL(KMI) ! -CALL GET_GLOBALDIMS_ll(NIMAX_SURF_ll,NJMAX_SURF_ll) -NDIM_FULL = NIMAX_SURF_ll*NJMAX_SURF_ll +CALL GET_GLOBALDIMS_ll(U%NIMAX_SURF_ll,U%NJMAX_SURF_ll) +U%NDIM_FULL = U%NIMAX_SURF_ll*U%NJMAX_SURF_ll ! IF ( YSPLITTING == "BSPLITTING" ) THEN HSPLIT = 'B' @@ -160,8 +157,8 @@ ELSE IF ( YSPLITTING == "YSPLITTING" ) THEN ELSE HSPLIT = '' ENDIF -CALL GET_DIM_PHYS_ll(HSPLIT,NIMAX_SURF_LOC,NJMAX_SURF_LOC) -NSIZE_FULL = NIMAX_SURF_LOC*NJMAX_SURF_LOC +CALL GET_DIM_PHYS_ll(HSPLIT,U%NIMAX_SURF_LOC,U%NJMAX_SURF_LOC) +U%NSIZE_FULL = U%NIMAX_SURF_LOC*U%NJMAX_SURF_LOC ! !------------------------------------------------------------------------------- ! diff --git a/src/MNH/ground_paramn.f90 b/src/MNH/ground_paramn.f90 index ef0cccfbc9a72388aa40c92c607c942069469af6..e5a5a624ee2570ec41f5051ff6fea4b2068b0e8a 100644 --- a/src/MNH/ground_paramn.f90 +++ b/src/MNH/ground_paramn.f90 @@ -104,6 +104,7 @@ END MODULE MODI_GROUND_PARAM_n !! (D.Gazen) 01/12/03 change emissions handling for surf. externalization !! (J.escobar) 18/10/2012 missing USE MODI_COUPLING_SURF_ATM_n & MODI_DIAG_SURF_ATM_n ! (J.escobar) 2/2014 add Forefire coupling +!! 06/2016 (G.Delautier) phasage surfex 8 !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -145,6 +146,7 @@ USE MODI_SHUMAN USE MODI_MNHGET_SURF_PARAM_n USE MODI_COUPLING_SURF_ATM_n USE MODI_DIAG_SURF_ATM_n +USE MODD_MNH_SURFEX_n ! USE MODE_ll USE MODD_ARGSLIST_ll, ONLY : LIST_ll @@ -289,6 +291,11 @@ REAL, DIMENSION(:,:), ALLOCATABLE :: ZP_DIR_ALB ! direct albedo REAL, DIMENSION(:,:), ALLOCATABLE :: ZP_SCA_ALB ! diffuse albedo REAL, DIMENSION(:), ALLOCATABLE :: ZP_EMIS ! emissivity +REAL, DIMENSION(:), ALLOCATABLE :: ZP_TSURF +REAL, DIMENSION(:), ALLOCATABLE :: ZP_Z0 +REAL, DIMENSION(:), ALLOCATABLE :: ZP_Z0H +REAL, DIMENSION(:), ALLOCATABLE :: ZP_QSURF + REAL, DIMENSION(:), ALLOCATABLE :: ZP_PEW_A_COEF ! coefficients for REAL, DIMENSION(:), ALLOCATABLE :: ZP_PEW_B_COEF ! implicit coupling REAL, DIMENSION(:), ALLOCATABLE :: ZP_PET_A_COEF @@ -501,21 +508,23 @@ CALL TEMPORAL_DIST(TDTCUR%TDATE%YEAR,TDTCUR%TDATE%MONTH, & ! ! Call to surface schemes ! -CALL COUPLING_SURF_ATM_n('MESONH', 'E',ZTIMEC, & +CALL COUPLING_SURF_ATM_n(YSURF_CUR,'MESONH', 'E',ZTIMEC, & XTSTEP, TDTCUR%TDATE%YEAR, TDTCUR%TDATE%MONTH, TDTCUR%TDATE%DAY, TDTCUR%TIME, & IDIM1D,NSV,SIZE(XSW_BANDS), & ZP_TSUN, ZP_ZENITH,ZP_ZENITH, ZP_AZIM, & ZP_ZREF, ZP_ZREF, ZP_ZS, ZP_U, ZP_V, ZP_QA, ZP_TA, ZP_RHOA, ZP_SV, ZP_CO2, CSV,& ZP_RAIN, ZP_SNOW, ZP_LW, ZP_DIR_SW, ZP_SCA_SW, XSW_BANDS, ZP_PS, ZP_PA, & ZP_SFTQ, ZP_SFTH, ZP_SFTS, ZP_SFCO2, ZP_SFU, ZP_SFV, & - ZP_TSRAD, ZP_DIR_ALB, ZP_SCA_ALB, ZP_EMIS, & + ZP_TSRAD, ZP_DIR_ALB, ZP_SCA_ALB, ZP_EMIS, ZP_TSURF, ZP_Z0, ZP_Z0H, ZP_QSURF, & ZP_PEW_A_COEF, ZP_PEW_B_COEF, & ZP_PET_A_COEF, ZP_PEQ_A_COEF, ZP_PET_B_COEF, ZP_PEQ_B_COEF, & 'OK' ) ! IF (CPROGRAM=='DIAG ' .OR. LDIAG_IN_RUN) THEN - CALL DIAG_SURF_ATM_n('MESONH') + CALL DIAG_SURF_ATM_n(YSURF_CUR%IM%DGEI, YSURF_CUR%FM%DGF, YSURF_CUR%DGL, YSURF_CUR%IM%DGI, & + YSURF_CUR%SM%DGS, YSURF_CUR%DGU, YSURF_CUR%TM%DGT, YSURF_CUR%WM%DGW, & + YSURF_CUR%U, YSURF_CUR%USS,'MESONH') CALL MNHGET_SURF_PARAM_n(PRN=ZP_RN,PH=ZP_H,PLE=ZP_LE,PGFLUX=ZP_GFLUX, & PT2M=ZP_T2M,PQ2M=ZP_Q2M,PHU2M=ZP_HU2M, & PZON10M=ZP_ZON10M,PMER10M=ZP_MER10M ) @@ -707,6 +716,10 @@ ALLOCATE(ZP_TSRAD (KDIM1D)) ALLOCATE(ZP_DIR_ALB (KDIM1D,SIZE(PDIR_ALB,3))) ALLOCATE(ZP_SCA_ALB (KDIM1D,SIZE(PSCA_ALB,3))) ALLOCATE(ZP_EMIS (KDIM1D)) +ALLOCATE(ZP_TSURF (KDIM1D)) +ALLOCATE(ZP_Z0 (KDIM1D)) +ALLOCATE(ZP_Z0H (KDIM1D)) +ALLOCATE(ZP_QSURF (KDIM1D)) ALLOCATE(ZP_RN (KDIM1D)) ALLOCATE(ZP_H (KDIM1D)) ALLOCATE(ZP_LE (KDIM1D)) diff --git a/src/MNH/ini_modeln.f90 b/src/MNH/ini_modeln.f90 index 47e7df0a8b967fa3932f620efa3706ea233f55d9..b50f47d86b423400689fa1260f91658a7a50d914 100644 --- a/src/MNH/ini_modeln.f90 +++ b/src/MNH/ini_modeln.f90 @@ -265,6 +265,7 @@ END MODULE MODI_INI_MODEL_n !! J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 !! V. Masson Feb 2015 replaces, for aerosols, cover fractions by sea, town, bare soil fractions !! J.Escobar : 19/04/2016 : Pb IOZ/NETCDF , missing OPARALLELIO=.FALSE. for PGD files +!! 06/2016 (G.Delautier) phasage surfex 8 !--------------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -398,7 +399,7 @@ USE MODD_FOREFIRE_n USE MODI_INIT_FOREFIRE_n #endif USE MODI_INI_LES_N -USE MODI_GOTO_SURFEX +USE MODD_MNH_SURFEX_n USE MODI_INI_SERIES_N ! Eddy fluxes ! Ajout PP USE MODD_DEF_EDDY_FLUX_n ! for VT and WT fluxes @@ -1894,7 +1895,7 @@ IF (CSURF=='EXTE' .AND. (CPROGRAM=='MESONH' .OR. CPROGRAM=='DIAG ')) THEN CINIFILEPGD = HINIFILE END IF ! - CALL GOTO_SURFEX(KMI,.TRUE.) + CALL GOTO_SURFEX(KMI) !* initialization of surface CALL INIT_GROUND_PARAM_n ('ALL',SIZE(CSV),CSV,ZCO2, & XZENITH,XAZIM,XSW_BANDS,ZDIR_ALB,ZSCA_ALB, & @@ -1967,7 +1968,7 @@ IF (CRAD == 'ECMW') THEN ALLOCATE(ZTOWN(IIU,IJU)) ALLOCATE(ZBARE(IIU,IJU)) IF (CSURF=='EXTE') THEN - CALL GOTO_SURFEX(KMI,.TRUE.) + CALL GOTO_SURFEX(KMI) CALL MNHGET_SURF_PARAM_n(PSEA=ZSEA,PTOWN=ZTOWN,PBARE=ZBARE) ELSE ZSEA (:,:) = 1. diff --git a/src/MNH/init_ground_paramn.f90 b/src/MNH/init_ground_paramn.f90 index 2e6eb0ced83e70ee9a71eba184de69fcb63ed34a..b562cb1020d2c20b048e99f1787fa3629523f334 100644 --- a/src/MNH/init_ground_paramn.f90 +++ b/src/MNH/init_ground_paramn.f90 @@ -67,6 +67,7 @@ END MODULE MODI_INIT_GROUND_PARAM_n !! Original 01/2003 !! 01/12/03 (D.Gazen) change emissions handling for surf. externalization !! Nov. 2010 (J.Escobar) PGI BUG , add SIZE(CSV) to interface +!! 06/2016 (G.Delautier) phasage surfex 8 !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -86,6 +87,7 @@ USE MODD_CH_AEROSOL, ONLY : CAERONAMES USE MODD_PARAMETERS, ONLY : XUNDEF, JPVEXT ! USE MODI_INIT_SURF_ATM_N +USE MODD_MNH_SURFEX_n ! IMPLICIT NONE ! @@ -116,6 +118,7 @@ REAL, DIMENSION(:,:), ALLOCATABLE :: ZDIR_ALB ! direct albedo REAL, DIMENSION(:,:), ALLOCATABLE :: ZSCA_ALB ! diffuse albedo REAL, DIMENSION(:), ALLOCATABLE :: ZEMIS ! emissivity REAL, DIMENSION(:), ALLOCATABLE :: ZTSRAD ! radiative temperature +REAL, DIMENSION(:), ALLOCATABLE :: ZTSURF ! INTEGER :: ISWB ! number of SW bands INTEGER :: IIU ! 1st array size @@ -145,6 +148,7 @@ ALLOCATE(ZDIR_ALB(ILU,ISWB)) ALLOCATE(ZSCA_ALB(ILU,ISWB)) ALLOCATE(ZEMIS (ILU)) ALLOCATE(ZTSRAD (ILU)) +ALLOCATE(ZTSURF (ILU)) !------------------------------------------------------------------------------- ! ZRHODREF= RESHAPE(XRHODREF(IIB:IIE,IJB:IJE,JPVEXT+1), (/ ILU /) ) @@ -166,11 +170,11 @@ DO JLAYER=NSV_AERBEG,NSV_AEREND END DO ! ISV = SIZE(HSV) -CALL INIT_SURF_ATM_n('MESONH',HINIT,.FALSE., & +CALL INIT_SURF_ATM_n(YSURF_CUR,'MESONH',HINIT,.FALSE., & ILU,ISV,SIZE(PSW_BANDS), & HSV,ZCO2,ZRHODREF, & ZZENITH,ZAZIM,PSW_BANDS,ZDIR_ALB,ZSCA_ALB, & - ZEMIS,ZTSRAD, & + ZEMIS,ZTSRAD,ZTSURF, & TIME_MODEL(1)%TDTCUR%TDATE%YEAR, TIME_MODEL(1)%TDTCUR%TDATE%MONTH,& TIME_MODEL(1)%TDTCUR%TDATE%DAY, TIME_MODEL(1)%TDTCUR%TIME, & ' ',' ', & diff --git a/src/MNH/init_mnh.f90 b/src/MNH/init_mnh.f90 index 80d314b4c231de5d46f15270eed2abae8e37dd7f..e1ead4db5c89143430f996ff9874745859f1d741 100644 --- a/src/MNH/init_mnh.f90 +++ b/src/MNH/init_mnh.f90 @@ -75,6 +75,7 @@ !! P.Jabouille 15/07/99 special initialisation for spawning !! J.P Chaboureau 2015 add ini_spectre_n !! J.Escoabr 2/03/2016 bypass , reset NHALO=1 for SPAWNING +!! 06/2016 (G.Delautier) phasage surfex 8 !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -99,7 +100,7 @@ USE MODI_INI_SIZE_SPAWN USE MODI_RESET_EXSEG USE MODE_MODELN_HANDLER USE MODI_READ_ALL_NAMELISTS -USE MODI_ALLOC_SURFEX +USE MODD_MNH_SURFEX_n USE MODI_INI_SPECTRE_n !JUAN USE MODE_SPLITTINGZ_ll @@ -205,13 +206,17 @@ CALL INI_PARAZ_ll(IINFO_ll) !------------------------------------------------------------------------------- ! ! -CALL ALLOC_SURFEX(NMODEL) +! Allocations of Surfex Types +CALL SURFEX_ALLOC_LIST(NMODEL) +DO JMI=1,NMODEL + YSURF_CUR => YSURF_LIST(JMI) ! -IF (CPROGRAM=='SPAWN ' .OR. CPROGRAM=='REAL ') THEN - CALL READ_ALL_NAMELISTS('MESONH','PRE',.FALSE.) -ELSE - CALL READ_ALL_NAMELISTS('MESONH','ALL',.TRUE.) -ENDIF + IF (CPROGRAM=='SPAWN ' .OR. CPROGRAM=='REAL ') THEN + CALL READ_ALL_NAMELISTS(YSURF_CUR,'MESONH','PRE',.FALSE.) + ELSE + CALL READ_ALL_NAMELISTS(YSURF_CUR,'MESONH','ALL',.TRUE.) + ENDIF +ENDDO ! ! !------------------------------------------------------------------------------- diff --git a/src/MNH/mesonh.f90 b/src/MNH/mesonh.f90 index 834639429ee77c6beb0afce22a6b39b0559ea311..05d460927af2428d3972c7cded95d807b7255c00 100644 --- a/src/MNH/mesonh.f90 +++ b/src/MNH/mesonh.f90 @@ -77,6 +77,7 @@ !! J.Escobar 19/03/2008 rename INIT to INIT_MNH --> grib problem !! J.Escobar 6/11/2014 remove test on LCHECK otherwise never call MPPDB_INIT !! J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 +!! 06/2016 (G.Delautier) phasage surfex 8 !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -95,7 +96,7 @@ USE MODE_MODELN_HANDLER ! USE MODI_VERSION USE MODI_INIT_MNH -USE MODI_DEALLOC_SURFEX +USE MODD_MNH_SURFEX_n ! USE MODE_MPPDB ! @@ -171,7 +172,7 @@ ELSE END IF ! ! -CALL DEALLOC_SURFEX +CALL SURFEX_DEALLO_LIST ! !------------------------------------------------------------------------------- ! diff --git a/src/MNH/mnhget_surf_paramn.f90 b/src/MNH/mnhget_surf_paramn.f90 index 2c11b827c8ac414b0529401df06ad3de057a7ff4..f6d5bd927c1e0041bd4115ab3820511aa95ffd08 100644 --- a/src/MNH/mnhget_surf_paramn.f90 +++ b/src/MNH/mnhget_surf_paramn.f90 @@ -77,6 +77,7 @@ END MODULE MODI_MNHGET_SURF_PARAM_n !! J.Escobar 21/03/2013: for HALOK comment all NHALO=1 test !! & correction of index linearisation for NHALO<>1 !! S. Donier 06/2015 : bug surface aerosols +!! 06/2016 (G.Delautier) phasage surfex 8 !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -91,6 +92,7 @@ USE MODI_GET_FRAC_N USE MODI_GET_JCOVER_N USE MODI_GET_FLUX_N USE MODI_GET_ZS_N +USE MODD_MNH_SURFEX_n USE MODI_GET_SURF_VAR_n ! IMPLICIT NONE @@ -151,6 +153,7 @@ REAL, DIMENSION(:), ALLOCATABLE :: ZZON10M! zonal Wind at 10 meters (m/s) REAL, DIMENSION(:), ALLOCATABLE :: ZMER10M! meridian Wind at 10 meters (m/s) REAL, DIMENSION(:), ALLOCATABLE :: ZNETLW ! Net surface Longwave flux (W/m2) REAL, DIMENSION(:), ALLOCATABLE :: ZNETSW ! Net surface Shortwave flux (W/m2) +REAL, DIMENSION(:), ALLOCATABLE :: ZCD, ZEVAP, ZSUBL ! !------------------------------------------------------------------------------- CALL GET_INDICE_ll (IIB,IJB,IIE,IJE) @@ -163,7 +166,7 @@ IF (PRESENT(PCOVER)) THEN ALLOCATE(ZCOVER( ILU )) ! A verifier car GET_COVER a une option TOWN !!' DO JCOVER=1,SIZE(PCOVER,3) - CALL GET_COVER_n('MESONH',ILU,ICOVER,ZCOVER) + CALL GET_COVER_n(YSURF_CUR%U,'MESONH',ICOVER,ZCOVER) CALL REMOVE_HALO(ZCOVER,PCOVER(:,:,JCOVER)) END DO DEALLOCATE(ZCOVER) @@ -175,7 +178,7 @@ IF (PRESENT(PSEA) .OR. PRESENT(PTOWN) .OR. & ALLOCATE(ZWATER ( ILU )) ALLOCATE(ZNATURE( ILU )) ALLOCATE(ZTOWN ( ILU )) - CALL GET_FRAC_n('MESONH',ILU,ZSEA,ZWATER,ZNATURE,ZTOWN) + CALL GET_FRAC_n(YSURF_CUR%U,'MESONH',ILU,ZSEA,ZWATER,ZNATURE,ZTOWN) IF (PRESENT(PSEA)) THEN CALL REMOVE_HALO(ZSEA,PSEA) END IF @@ -186,13 +189,17 @@ END IF ! IF (PRESENT(PBARE)) THEN ALLOCATE(ZBARE ( ILU )) - CALL GET_SURF_VAR_n('MESONH', ILU, 1, PNATURE=ZNATURE, PBARE=ZBARE) + CALL GET_SURF_VAR_n(YSURF_CUR%FM%DGF,YSURF_CUR%IM%I,YSURF_CUR%IM%DGI,& + YSURF_CUR%IM%DGMI,YSURF_CUR%SM%DGS,YSURF_CUR%DGU,& + YSURF_CUR%TM%DGT,YSURF_CUR%WM%DGW,YSURF_CUR%FM%F,& + YSURF_CUR%UG, YSURF_CUR%U, YSURF_CUR%USS,& + 'MESONH', ILU, 1, PNATURE=ZNATURE, PBARE=ZBARE) CALL REMOVE_HALO(ZBARE,PBARE) DEALLOCATE(ZBARE) END IF ! IF (PRESENT(KCOVER)) THEN - CALL GET_JCOVER_n('MESONH',KCOVER) + CALL GET_JCOVER_n(YSURF_CUR%U,'MESONH',KCOVER) END IF ! IF (PRESENT(PRN) .OR.PRESENT(PH) .OR.PRESENT(PLE) .OR.PRESENT(PGFLUX).OR. & @@ -202,8 +209,9 @@ IF (PRESENT(PRN) .OR.PRESENT(PH) .OR.PRESENT(PLE) .OR.PRESENT(PGFLUX).OR. & ALLOCATE(ZT2M (ILU), ZQ2M (ILU), ZHU2M(ILU)) ALLOCATE(ZZON10M(ILU), ZMER10M(ILU)) ALLOCATE(ZNETLW (ILU), ZNETSW (ILU)) - CALL GET_FLUX_n('MESONH', ILU,ZRN,ZH,ZLE,ZLEI,ZGFLUX,ZT2M,ZQ2M,ZHU2M,ZZON10M,ZMER10M,& - ZNETLW,ZNETSW) + ALLOCATE(ZCD(ILU), ZEVAP(ILU), ZSUBL(ILU)) + CALL GET_FLUX_n(YSURF_CUR%DGU,'MESONH', ILU,ZRN,ZH,ZLE,ZLEI,ZGFLUX,ZT2M,ZQ2M,ZHU2M,ZZON10M,ZMER10M,& + ZNETLW,ZNETSW,ZCD,ZEVAP,ZSUBL) IF(PRESENT(PRN)) PRN=ZRN IF(PRESENT(PH)) PH=ZH IF(PRESENT(PLE)) PLE=ZLE @@ -216,12 +224,13 @@ IF (PRESENT(PRN) .OR.PRESENT(PH) .OR.PRESENT(PLE) .OR.PRESENT(PGFLUX).OR. & IF(PRESENT(PMER10M)) PMER10M=ZMER10M DEALLOCATE(ZRN, ZH, ZLE,ZLEI, ZGFLUX, ZT2M, ZQ2M, ZHU2M, ZZON10M, ZMER10M) DEALLOCATE(ZNETLW,ZNETSW) + DEALLOCATE(ZCD,ZEVAP,ZSUBL) END IF ! IF (PRESENT(PZS)) THEN PZS(:,:) = XUNDEF ALLOCATE(ZZS ( ILU )) - CALL GET_ZS_n('MESONH',ILU,ZZS) + CALL GET_ZS_n(YSURF_CUR%U,'MESONH',ILU,ZZS) CALL REMOVE_HALO(ZZS,PZS) DEALLOCATE(ZZS) END IF @@ -231,7 +240,11 @@ IF (PRESENT(PH_TREE) .OR.PRESENT(PLAI_TREE)) THEN PLAI_TREE(:,:) = XUNDEF ALLOCATE(ZVH ( ILU )) ALLOCATE(ZLAI ( ILU )) - CALL GET_SURF_VAR_n('MESONH',ILU,1,PLAI_TREE=ZLAI,PH_TREE=ZVH) + CALL GET_SURF_VAR_n(YSURF_CUR%FM%DGF,YSURF_CUR%IM%I,YSURF_CUR%IM%DGI,& + YSURF_CUR%IM%DGMI,YSURF_CUR%SM%DGS,YSURF_CUR%DGU,& + YSURF_CUR%TM%DGT,YSURF_CUR%WM%DGW,YSURF_CUR%FM%F,& + YSURF_CUR%UG, YSURF_CUR%U, YSURF_CUR%USS,& + 'MESONH',ILU,1,PNATURE=ZNATURE,PLAI_TREE=ZLAI,PH_TREE=ZVH) CALL REMOVE_HALO(ZLAI,PLAI_TREE) CALL REMOVE_HALO(ZVH,PH_TREE) DEALLOCATE(ZVH) diff --git a/src/MNH/mnhinit_io_surfn.f90 b/src/MNH/mnhinit_io_surfn.f90 index 29347f45547f13c3677763760840d74bf7c53617..f3740b99c7d126acccf9c90ac0db323ea2ddc96b 100644 --- a/src/MNH/mnhinit_io_surfn.f90 +++ b/src/MNH/mnhinit_io_surfn.f90 @@ -53,6 +53,7 @@ END MODULE MODI_MNHINIT_IO_SURF_n !! MODIFICATIONS !! ------------- !! Original 09/2003 +!! 06/2016 (G.Delautier) phasage surfex 8 !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -79,6 +80,7 @@ USE MODE_MODELN_HANDLER USE MODI_GET_1D_MASK USE MODI_GET_TYPE_DIM_N USE MODI_GET_SURF_MASK_N +USE MODD_MNH_SURFEX_n ! IMPLICIT NONE ! @@ -167,9 +169,9 @@ CALL GET_1D_MASK(ILU_ALL,ILU_ALL,ZFULL,NMASK_ALL) DEALLOCATE(ZFULL) ! !* dimension and mask for distributed field on processors -CALL GET_TYPE_DIM_n(HMASK,ILM) +CALL GET_TYPE_DIM_n(YSURF_CUR%DTCO,YSURF_CUR%U,HMASK,ILM) ALLOCATE(NMASK(ILM)) -CALL GET_SURF_MASK_n(HMASK,ILM,NMASK,ILU,NLUOUT) +CALL GET_SURF_MASK_n(YSURF_CUR%DTCO,YSURF_CUR%U,HMASK,ILM,NMASK,ILU,NLUOUT) ! !------------------------------------------------------------------------------- ! diff --git a/src/MNH/mnhput_zsn.f90 b/src/MNH/mnhput_zsn.f90 index 5abb95ed543031b63f990d7ee1876fa39da7b930..ee64bfec3cf7b58f19d7f954335f1e712067c808 100644 --- a/src/MNH/mnhput_zsn.f90 +++ b/src/MNH/mnhput_zsn.f90 @@ -51,6 +51,7 @@ END MODULE MODI_MNHPUT_ZS_n !! MODIFICATIONS !! ------------- !! Original 01/2004 +!! 06/2016 (G.Delautier) phasage surfex 8 !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -64,6 +65,7 @@ USE MODD_DIM_n, ONLY : NIMAX, NJMAX USE MODD_GRID_n, ONLY : XZS ! USE MODI_PUT_ZS_N +USE MODD_MNH_SURFEX_n ! USE MODI_GET_LUOUT ! @@ -101,7 +103,9 @@ IL = (IIE-IIB+1)*(IJE-IJB+1) ALLOCATE(ZZS(IL)) ZZS(:) = RESHAPE (XZS(IIB:IIE,IJB:IJE), (/ IL /) ) ! -CALL PUT_ZS_n('MESONH',IL,ZZS(:)) +CALL PUT_ZS_n(YSURF_CUR%FM%F,YSURF_CUR%IM%I,YSURF_CUR%SM%S,& + YSURF_CUR%U,YSURF_CUR%TM%TOP,YSURF_CUR%WM%W,'MESONH',IL,ZZS(:)) +! CALL MPPDB_CHECK_SURFEX2D(ZZS,"mnhput_zs_n:ZZS",PRECISION,ILUOUT) CALL MPPDB_CHECK2D(XZS,"mnhput_zs_n:MODD_GRID_n::XZS",PRECISION) ! diff --git a/src/MNH/modeln.f90 b/src/MNH/modeln.f90 index 9cb3df58fa91929766a5dd6aa6831654d5802dc6..80b376ab0a9c7138810f0274924a13001db3882e 100644 --- a/src/MNH/modeln.f90 +++ b/src/MNH/modeln.f90 @@ -237,6 +237,7 @@ END MODULE MODI_MODEL_n !! of write_phys_param !! J.Escobar : 19/04/2016 : Pb IOZ/NETCDF , missing OPARALLELIO=.FALSE. for PGD files !! M.Mazoyer : 04/2016 DTHRAD used for radiative cooling when LACTIT +!! 06/2016 (G.Delautier) phasage surfex 8 !!------------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -372,7 +373,6 @@ USE MODD_TIMEZ USE MODE_MNH_TIMING ! USE MODI_SETLB_LG -USE MODI_GOTO_SURFEX USE MODI_WRITE_SURF_ATM_N USE MODI_SET_MASK USE MODI_DIAG_SURF_ATM_N @@ -387,6 +387,8 @@ USE MODE_UTIL USE MODI_GET_HALO USE MODE_MPPDB ! +USE MODD_MNH_SURFEX_n +! IMPLICIT NONE ! !* 0.1 declarations of arguments @@ -860,7 +862,7 @@ XT_BOUND = XT_BOUND + ZTIME2 - ZTIME1 ! !------------------------------------------------------------------------------- !* initializes surface number -IF (CSURF=='EXTE') CALL GOTO_SURFEX(IMI,.TRUE.) +IF (CSURF=='EXTE') CALL GOTO_SURFEX(IMI) !------------------------------------------------------------------------------- ! !* 4. STORAGE IN A SYNCHRONOUS FILE @@ -920,18 +922,18 @@ DO JOUT = 1,NOUT_NUMB CALL MNHWRITE_ZS_DUMMY_n(CPROGRAM) #endif IF (CSURF=='EXTE') THEN - CALL GOTO_SURFEX(IMI,.TRUE.) + CALL GOTO_SURFEX(IMI) #ifdef MNH_NCWRIT NC_WRITE = LNETCDF NC_FILE = 'sf1' - CALL WRITE_SURF_ATM_n('MESONH','ALL',.FALSE.) + CALL WRITE_SURF_ATM_n(YSURF_CUR,'MESONH','ALL',.FALSE.) IF ( LNETCDF ) THEN DEF_NC=.FALSE. - CALL WRITE_SURF_ATM_n('MESONH','ALL',.FALSE.) + CALL WRITE_SURF_ATM_n(YSURF_CUR,'MESONH','ALL',.FALSE.) DEF_NC=.TRUE. END IF #else - CALL WRITE_SURF_ATM_n('MESONH','ALL',.FALSE.) + CALL WRITE_SURF_ATM_n(YSURF_CUR,'MESONH','ALL',.FALSE.) #endif END IF ! @@ -1317,20 +1319,22 @@ END IF DO JOUT = 1,NOUT_NUMB IF (KTCOUNT == NOUT_TIMES(JOUT)) THEN IF (CSURF=='EXTE') THEN - CALL GOTO_SURFEX(IMI,.TRUE.) - CALL DIAG_SURF_ATM_n('MESONH') + CALL GOTO_SURFEX(IMI) + CALL DIAG_SURF_ATM_n(YSURF_CUR%IM%DGEI, YSURF_CUR%FM%DGF, YSURF_CUR%DGL, YSURF_CUR%IM%DGI, & + YSURF_CUR%SM%DGS, YSURF_CUR%DGU, YSURF_CUR%TM%DGT, YSURF_CUR%WM%DGW, & + YSURF_CUR%U, YSURF_CUR%USS,'MESONH') #ifdef MNH_NCWRIT NC_WRITE=LNETCDF NC_FILE='sf2' - CALL WRITE_DIAG_SURF_ATM_n('MESONH','ALL') + CALL WRITE_DIAG_SURF_ATM_n(YSURF_CUR,'MESONH','ALL') IF ( LNETCDF ) THEN DEF_NC=.FALSE. - CALL WRITE_DIAG_SURF_ATM_n('MESONH','ALL') + CALL WRITE_DIAG_SURF_ATM_n(YSURF_CUR,'MESONH','ALL') DEF_NC=.TRUE. NC_WRITE = .FALSE. END IF #else - CALL WRITE_DIAG_SURF_ATM_n('MESONH','ALL') + CALL WRITE_DIAG_SURF_ATM_n(YSURF_CUR,'MESONH','ALL') #endif END IF END IF diff --git a/src/MNH/pgd_grid_io_init_mnh.f90 b/src/MNH/pgd_grid_io_init_mnh.f90 index 052bc66554732c2a4c629aa5ffccccb0b2b00c8c..7f21b8eb48c695e9aa6914e970217ab77a86a192 100644 --- a/src/MNH/pgd_grid_io_init_mnh.f90 +++ b/src/MNH/pgd_grid_io_init_mnh.f90 @@ -132,6 +132,7 @@ END MODULE MODI_PGD_GRID_IO_INIT_MNH !! Original 01/2004 !! 10/10/2011 J.Escobar call INI_PARAZ_ll !! 2014 M.Faivre +!! 06/2016 (G.Delautier) phasage surfex 8 !---------------------------------------------------------------------------- ! !* 0. DECLARATION @@ -149,6 +150,8 @@ USE MODE_SPLITTINGZ_ll USE MODI_GET_SURF_GRID_DIM_N USE MODI_GET_LUOUT ! +USE MODD_MNH_SURFEX_n +! IMPLICIT NONE ! !* 0.1 Declaration of dummy arguments @@ -196,12 +199,12 @@ IF ( PRESENT(KIMAX) .AND. PRESENT(KJMAX) .AND. PRESENT(HGRID) .AND. PRESENT(OREC IDXRATIO = KDXRATIO IDYRATIO = KDYRATIO ELSE - CALL GET_SURF_GRID_DIM_n(YGRID,GRECT,IIMAX,IJMAX,KGRID_PAR,PGRID_PAR) + CALL GET_SURF_GRID_DIM_n(YSURF_CUR%UG,YGRID,GRECT,IIMAX,IJMAX,KGRID_PAR,PGRID_PAR) IDXRATIO = 1 IDYRATIO = 1 ENDIF #else - CALL GET_SURF_GRID_DIM_n(YGRID,GRECT,IIMAX,IJMAX) + CALL GET_SURF_GRID_DIM_n(YSURF_CUR%UG,YGRID,GRECT,IIMAX,IJMAX) IDXRATIO = 1 IDYRATIO = 1 #endif diff --git a/src/MNH/phys_paramn.f90 b/src/MNH/phys_paramn.f90 index 53a1a07b3af756cd554a8f2226bff9fb2853d033..09a1918e8c35a3aa5f97d52d408e989ae2cde604 100644 --- a/src/MNH/phys_paramn.f90 +++ b/src/MNH/phys_paramn.f90 @@ -221,6 +221,7 @@ END MODULE MODI_PHYS_PARAM_n !! follow the number of the dad model !! J.Escobar 21/03/2013: for HALOK comment all NHALO=1 test !! 2014 (M.Faivre) +!! 06/2016 (G.Delautier) phasage surfex 8 !!------------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -321,7 +322,7 @@ USE MODI_EDDYUV_FLUX_ONE_WAY_n ! Ajout PP USE MODD_DEF_EDDY_FLUX_n ! Ajout PP USE MODD_DEF_EDDYUV_FLUX_n ! Ajout PP USE MODD_LATZ_EDFLX -USE MODI_GOTO_SURFEX +USE MODD_MNH_SURFEX_n USE MODI_SWITCH_SBG_LES_N ! USE MODE_MPPDB @@ -1059,7 +1060,7 @@ PTIME_BU = PTIME_BU + XTIME_LES_BU_PROCESS + XTIME_BU_PROCESS ZTIME1 = ZTIME2 ! IF (CSURF=='EXTE') THEN - CALL GOTO_SURFEX(IMI,.TRUE.) + CALL GOTO_SURFEX(IMI) ! IF( LTRANS ) THEN XUT(:,:,1+JPVEXT) = XUT(:,:,1+JPVEXT) + XUTRANS diff --git a/src/MNH/prep_ideal_case.f90 b/src/MNH/prep_ideal_case.f90 index 58d2b89d076c1fe2d5f4f32100540707ad8c4bcb..852fdd356260697a300a24a517fd2877a6f603d5 100644 --- a/src/MNH/prep_ideal_case.f90 +++ b/src/MNH/prep_ideal_case.f90 @@ -311,6 +311,7 @@ !! Bug : detected with cray compiler , !! missing '&' in continuation string 3/12/2014 J.Escobar !! J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 +!! 06/2016 (G.Delautier) phasage surfex 8 !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -386,14 +387,12 @@ USE MODI_ZSMT_PIC USE MODI_ZSMT_PGD USE MODI_READ_VER_GRID USE MODI_READ_ALL_NAMELISTS -USE MODI_GOTO_SURFEX USE MODI_PGD_GRID_SURF_ATM USE MODI_SPLIT_GRID USE MODI_PGD_SURF_ATM USE MODI_ICE_ADJUST_BIS USE MODI_WRITE_PGD_SURF_ATM_n USE MODI_PREP_SURF_MNH -USE MODI_ALLOC_SURFEX ! !JUAN USE MODE_SPLITTINGZ_ll @@ -411,8 +410,7 @@ USE MODI_TH_R_FROM_THL_RT_3D USE MODI_VERSION USE MODI_INIT_PGD_SURF_ATM USE MODI_WRITE_SURF_ATM_N -USE MODI_DEALLOC_SURF_ATM_N -USE MODI_DEALLOC_SURFEX +USE MODD_MNH_SURFEX_n ! Modif ADVFRC USE MODD_2D_FRC USE MODD_ADVFRC_n ! Modif for grid-nesting @@ -1772,22 +1770,22 @@ IF (CSURF =='EXTE') THEN STOP ENDIF ENDIF - CALL ALLOC_SURFEX(1) - CALL READ_ALL_NAMELISTS('MESONH','PRE',.FALSE.) + CALL SURFEX_ALLOC_LIST(1) + YSURF_CUR => YSURF_LIST(1) + CALL READ_ALL_NAMELISTS(YSURF_CUR,'MESONH','PRE',.FALSE.) ! Switch to model 1 surface variables - CALL GOTO_SURFEX(1,.TRUE.) + CALL GOTO_SURFEX(1) !* definition of physiographic fields ! computed ... IF (LEN_TRIM(CPGD_FILE)==0 .OR. .NOT. LREAD_GROUND_PARAM) THEN CPGDFILE = CINIFILE - CALL PGD_GRID_SURF_ATM('MESONH',CINIFILE,'MESONH',.TRUE.) -! CALL SPLIT_GRID('MESONH') - CALL PGD_SURF_ATM ('MESONH',CINIFILE,'MESONH',.TRUE.) + CALL PGD_GRID_SURF_ATM(YSURF_CUR%UG, YSURF_CUR%U,YSURF_CUR%GCP,'MESONH',CINIFILE,'MESONH',.TRUE.) + CALL PGD_SURF_ATM (YSURF_CUR,'MESONH',CINIFILE,'MESONH',.TRUE.) CPGDFILE = CINIFILEPGD ELSE ! ... or read from file. CPGDFILE = CPGD_FILE - CALL INIT_PGD_SURF_ATM('MESONH','PGD', & + CALL INIT_PGD_SURF_ATM(YSURF_CUR,'MESONH','PGD', & ' ',' ',& TDTCUR%TDATE%YEAR, TDTCUR%TDATE%MONTH, & TDTCUR%TDATE%DAY, TDTCUR%TIME ) @@ -1812,10 +1810,10 @@ IF (CSURF =='EXTE') THEN CALL WRITE_HGRID(1,CINIFILEPGD,' ') NC_FILE='sf1' NC_WRITE=LNETCDF - CALL WRITE_PGD_SURF_ATM_n('MESONH') + CALL WRITE_PGD_SURF_ATM_n(YSURF_CUR,'MESONH') IF ( LNETCDF ) THEN DEF_NC=.FALSE. - CALL WRITE_PGD_SURF_ATM_n('MESONH') + CALL WRITE_PGD_SURF_ATM_n(YSURF_CUR,'MESONH') DEF_NC=.TRUE. NC_WRITE = .FALSE. END IF @@ -1826,20 +1824,18 @@ IF (CSURF =='EXTE') THEN CALL FMWRIT(CINIFILEPGD,'L2D ',CLUOUT,'--',L2D,0,1,' ',NRESP) CALL FMWRIT(CINIFILEPGD,'PACK ',CLUOUT,'--',LPACK,0,1,' ',NRESP) CALL WRITE_HGRID(1,CINIFILEPGD,' ') - CALL WRITE_PGD_SURF_ATM_n('MESONH') + CALL WRITE_PGD_SURF_ATM_n(YSURF_CUR,'MESONH') #endif CSTORAGE_TYPE='TT' ENDIF ! - !* deallocation of physiographic fields - CALL DEALLOC_SURF_ATM_n ! !* rereading of physiographic fields and definition of prognostic fields !* writing of all surface fields COUTFMFILE = CINIFILE CALL PREP_SURF_MNH(' ',' ') - CALL DEALLOC_SURFEX + CALL SURFEX_DEALLO_LIST ELSE CSURF = "NONE" END IF diff --git a/src/MNH/prep_nest_pgd.f90 b/src/MNH/prep_nest_pgd.f90 index a377c308c96464ec355470ba8624f44987eb2cf2..f6218f71c627bf6af99a35bc985f732fca4a5074 100644 --- a/src/MNH/prep_nest_pgd.f90 +++ b/src/MNH/prep_nest_pgd.f90 @@ -92,6 +92,7 @@ !! 06/2015 (M.Moge) parallelization !! J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 !! J.Escobar : 19/04/2016 : Pb IOZ/NETCDF , missing OPARALLELIO=.FALSE. for PGD files +!! 06/2016 (G.Delautier) phasage surfex 8 !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -121,16 +122,13 @@ USE MODE_ll USE MODE_MODELN_HANDLER ! USE MODI_VERSION -USE MODI_ALLOC_SURFEX USE MODI_READ_ALL_NAMELISTS -USE MODI_GOTO_SURFEX USE MODI_INIT_HORGRID_ll_n USE MODI_INIT_PGD_SURF_ATM USE MODI_WRITE_PGD_SURF_ATM_N -USE MODI_DEALLOC_SURFEX +USE MODD_MNH_SURFEX_n ! #ifdef MNH_NCWRIT -USE MODD_SURF_ATM_GRID_n, ONLY : XLON, XLAT USE MODN_NCOUT USE MODE_UTIL #endif @@ -202,8 +200,9 @@ CALL SET_JP_ll(JPMODELMAX,JPHEXT,JPVEXT,JPHEXT) ! CALL FMLOOK_ll(CLUOUT0,CLUOUT0,ILUOUT0,IRESP) ! -CALL ALLOC_SURFEX(NMODEL) -CALL READ_ALL_NAMELISTS('MESONH','PRE',.FALSE.) +CALL SURFEX_ALLOC_LIST(NMODEL) +YSURF_CUR => YSURF_LIST(1) +CALL READ_ALL_NAMELISTS(YSURF_CUR,'MESONH','PRE',.FALSE.) ! !------------------------------------------------------------------------------- ! @@ -266,7 +265,7 @@ END DO DO JPGD=1,NMODEL CALL GOTO_MODEL(JPGD) CALL GO_TOMODEL_ll(JPGD,IINFO_ll) - CALL GOTO_SURFEX(JPGD,.TRUE.) + CALL GOTO_SURFEX(JPGD) CALL FMREAD(CPGD(JPGD),'L1D ',CLUOUT0,'--',L1D_ALL(JPGD),IGRID,ILENCH,YCOMMENT,IRESP) CALL FMREAD(CPGD(JPGD),'L2D ',CLUOUT0,'--',L2D_ALL(JPGD),IGRID,ILENCH,YCOMMENT,IRESP) CALL FMREAD(CPGD(JPGD),'PACK ',CLUOUT0,'--',LPACK_ALL(JPGD),IGRID,ILENCH,YCOMMENT,IRESP) @@ -283,7 +282,7 @@ END DO ! DO JPGD=1,NMODEL - CALL GOTO_SURFEX(JPGD,.TRUE.) + CALL GOTO_SURFEX(JPGD) CALL GOTO_MODEL(JPGD) CALL GO_TOMODEL_ll(JPGD,IINFO_ll) !!$ CALL INIT_HORGRID_ll_n() @@ -300,7 +299,7 @@ WRITE(ILUOUT0,FMT=*) 'field ZS of all models' DO JPGD=NMODEL,1,-1 CALL GOTO_MODEL(JPGD) CALL GO_TOMODEL_ll(JPGD,IINFO_ll) - CALL GOTO_SURFEX(JPGD,.TRUE.) + CALL GOTO_SURFEX(JPGD) CALL NEST_FIELD_n('ZS ') END DO ! @@ -311,7 +310,7 @@ WRITE(ILUOUT0,FMT=*) 'field ZSMT of all models' DO JPGD=1,NMODEL CALL GOTO_MODEL(JPGD) CALL GO_TOMODEL_ll(JPGD,IINFO_ll) - CALL GOTO_SURFEX(JPGD,.TRUE.) + CALL GOTO_SURFEX(JPGD) CALL NEST_ZSMT_n('ZSMT ') END DO @@ -326,8 +325,8 @@ DO JPGD=1,NMODEL CALL GO_TOMODEL_ll(JPGD,IINFO_ll) CPGDFILE = CPGD(JPGD) CALL GOTO_MODEL(JPGD) - CALL GOTO_SURFEX(JPGD,.TRUE.) - CALL INIT_PGD_SURF_ATM('MESONH','PGD', & + CALL GOTO_SURFEX(JPGD) + CALL INIT_PGD_SURF_ATM(YSURF_CUR,'MESONH','PGD', & ' ',' ',& NUNDEF,NUNDEF,NUNDEF,XUNDEF ) END IF @@ -341,7 +340,7 @@ END DO DO JPGD=1,NMODEL CALL GOTO_MODEL(JPGD) CALL GO_TOMODEL_ll(JPGD,IINFO_ll) - CALL GOTO_SURFEX(JPGD,.TRUE.) + CALL GOTO_SURFEX(JPGD) CALL MNHPUT_ZS_n END DO ! @@ -355,10 +354,10 @@ DO JPGD=1,NMODEL CPGDFILE = CPGD(JPGD) COUTFMFILE = CNESTPGD(JPGD) CALL GOTO_MODEL(JPGD) - CALL GOTO_SURFEX(JPGD,.TRUE.) + CALL GOTO_SURFEX(JPGD) #ifdef MNH_NCWRIT NC_WRITE = LNETCDF - CALL WRITE_PGD_SURF_ATM_n('MESONH') + CALL WRITE_PGD_SURF_ATM_n(YSURF_CUR,'MESONH') IF (LNETCDF.AND..NOT.LCARTESIAN) THEN LLFIFM = .FALSE. LLFIFM = .TRUE. @@ -367,14 +366,14 @@ DO JPGD=1,NMODEL CALL WRITE_ZSMT_n(CNESTPGD(JPGD)) IF ( LNETCDF ) THEN DEF_NC=.FALSE. - CALL WRITE_PGD_SURF_ATM_n('MESONH') + CALL WRITE_PGD_SURF_ATM_n(YSURF_CUR,'MESONH') !* 11. SMOOTH OROGRAPHY WRITING CALL WRITE_ZSMT_n(CNESTPGD(JPGD)) DEF_NC=.TRUE. NC_WRITE = .FALSE. END IF #else - CALL WRITE_PGD_SURF_ATM_n('MESONH') + CALL WRITE_PGD_SURF_ATM_n(YSURF_CUR,'MESONH') CALL WRITE_ZSMT_n(CNESTPGD(JPGD)) #endif END DO @@ -444,7 +443,7 @@ CALL CLOSE_ll(CLUOUT0) ! CALL END_PARA_ll(IINFO_ll) ! -CALL DEALLOC_SURFEX +CALL SURFEX_DEALLO_LIST ! !------------------------------------------------------------------------------- diff --git a/src/MNH/prep_pgd.f90 b/src/MNH/prep_pgd.f90 index 7689fe3584a9309a7046915d623896a3a53e4fbe..e1433f6e9a5fcc2259bb80f64950c521a3299c24 100644 --- a/src/MNH/prep_pgd.f90 +++ b/src/MNH/prep_pgd.f90 @@ -67,6 +67,7 @@ !! J.Escobar : 05/10/2015 : missing JPHEXT for LAT/LON/ZS/ZSMT writing !! M.Moge 11/2015 disable the creation of files on multiple !! Z-levels when using parallel IO for PREP_PGD +!! 06/2016 (G.Delautier) phasage surfex 8 !---------------------------------------------------------------------------- ! !* 0. DECLARATION @@ -96,23 +97,19 @@ USE MODD_CONF, ONLY : NHALO_CONF_MNH => NHALO !JUAN USE MODN_CONFIO ! -USE MODI_ALLOC_SURFEX USE MODI_READ_ALL_NAMELISTS -USE MODI_GOTO_SURFEX USE MODI_VERSION USE MODI_PGD_GRID_SURF_ATM USE MODI_SPLIT_GRID USE MODI_PGD_SURF_ATM USE MODI_WRITE_PGD_SURF_ATM_N -USE MODI_DEALLOC_SURFEX +USE MODD_MNH_SURFEX_n ! -USE MODD_SURF_ATM_GRID_n, ONLY : XLON, XLAT #ifdef MNH_NCWRIT USE MODN_NCOUT USE MODE_UTIL USE MODE_FMREAD #endif -USE MODD_SURF_ATM_GRID_n, ONLY : NGRID_PAR, XGRID_PAR USE MODE_MPPDB USE MODI_EXTEND_GRID_ON_HALO ! @@ -135,7 +132,6 @@ LOGICAL :: LHSLOP=.FALSE. ! filtering of slopes higher than XHSL REAL :: XHSLOP=1.2 ! if LHSLOP filtering of slopes higher than XHSLOP INTEGER :: NSLEVE =12 ! number of iteration for filter for smooth orography REAL :: XSMOOTH_ZS = XUNDEF ! optional uniform smooth orography for SLEVE coordinate -!#ifdef MNH_NCWRIT REAL, DIMENSION(:,:),ALLOCATABLE :: ZWORK ! work array for lat and lon reshape REAL, DIMENSION(:,:),ALLOCATABLE :: ZWORK_LAT ! work array for lat and lon reshape REAL, DIMENSION(:,:),ALLOCATABLE :: ZWORK_LON ! work array for lat and lon reshape @@ -145,7 +141,6 @@ INTEGER :: IGRID ! grid location INTEGER :: ILENCH ! length of comment string CHARACTER(LEN=100):: YCOMMENT ! comment string INTEGER :: IIMAX, IJMAX -!#endif INTEGER :: NHALO_MNH ! NAMELIST/NAM_PGDFILE/CPGDFILE, NHALO @@ -212,11 +207,12 @@ IF (GFOUND) READ(UNIT=ILUNAM,NML=NAM_NCOUT) CALL CLOSE_ll('PRE_PGD1.nam') ! ! -CALL ALLOC_SURFEX(1) -CALL READ_ALL_NAMELISTS('MESONH','PRE',.FALSE.) +CALL SURFEX_ALLOC_LIST(1) +YSURF_CUR => YSURF_LIST(1) +CALL READ_ALL_NAMELISTS(YSURF_CUR,'MESONH','PRE',.FALSE.) ! CALL GOTO_MODEL(1) -CALL GOTO_SURFEX(1,.TRUE.) +CALL GOTO_SURFEX(1) ! CALL VERSION CSTORAGE_TYPE = 'PG' @@ -230,15 +226,17 @@ CALL INI_CST !* Initializes the grid ! -------------------- ! -CALL PGD_GRID_SURF_ATM('MESONH',' ',' ',.FALSE.) +CALL PGD_GRID_SURF_ATM(YSURF_CUR%UG, YSURF_CUR%U,YSURF_CUR%GCP,'MESONH',& + ' ',' ',.FALSE.) ! -CALL EXTEND_GRID_ON_HALO('MESONH',NGRID_PAR, XGRID_PAR) +CALL EXTEND_GRID_ON_HALO('MESONH',YSURF_CUR%UG, YSURF_CUR%U,& + YSURF_CUR%UG%NGRID_PAR, YSURF_CUR%UG%XGRID_PAR) ! ! !* Initializes all physiographic fields ! ------------------------------------ ! -CALL PGD_SURF_ATM('MESONH',' ',' ',.FALSE.) +CALL PGD_SURF_ATM(YSURF_CUR,'MESONH',' ',' ',.FALSE.) ! ! !* 3. Writes the physiographic fields @@ -280,7 +278,7 @@ CALL FMWRIT(COUTFMFILE,'JPHEXT ',CLUOUT0,'--',JPHEXT,0,1,' ',IRESP) ! #ifdef MNH_NCWRIT NC_WRITE = LNETCDF -CALL WRITE_PGD_SURF_ATM_n('MESONH') +CALL WRITE_PGD_SURF_ATM_n(YSURF_CUR,'MESONH') IF (LNETCDF.AND..NOT.LCARTESIAN) THEN LLFIFM = .FALSE. !!!! WRITE LAT and LON @@ -288,11 +286,11 @@ IF (LNETCDF.AND..NOT.LCARTESIAN) THEN ALLOCATE(ZWORK(IIMAX+NHALO*2,IJMAX+NHALO*2)) ALLOCATE(ZWORK_LAT(IIMAX+2*JPHEXT,IJMAX+2*JPHEXT)) ALLOCATE(ZWORK_LON(IIMAX+2*JPHEXT,IJMAX+2*JPHEXT)) - ZWORK=RESHAPE(XLAT, (/ (IIMAX+NHALO*2),(IJMAX+NHALO*2) /) ) + ZWORK=RESHAPE(YSURF_CUR%UG%XLAT, (/ (IIMAX+NHALO*2),(IJMAX+NHALO*2) /) ) ZWORK_LAT=ZWORK(NHALO:(IIMAX+NHALO+1),NHALO:(IJMAX+NHALO+1)) !! CALL FMWRIT(COUTFMFILE,'LAT',CLUOUT0,'XY',ZWORK_LAT,1,21,'X_Y_latitude (degree)',IRESP) - ZWORK=RESHAPE(XLON, (/ IIMAX+NHALO*2,IJMAX+NHALO*2 /) ) + ZWORK=RESHAPE(YSURF_CUR%UG%XLON, (/ IIMAX+NHALO*2,IJMAX+NHALO*2 /) ) ZWORK_LON=ZWORK(NHALO:(IIMAX+NHALO+1),NHALO:(IJMAX+NHALO+1)) CALL FMWRIT(COUTFMFILE,'LON',CLUOUT0,'XY',ZWORK_LON,1,22,'X_Y_longitude (degree)',IRESP) DEALLOCATE(ZWORK) @@ -305,7 +303,7 @@ CALL ZSMT_PGD(COUTFMFILE,NZSFILTER,NSLEVE,XSMOOTH_ZS) IF ( LNETCDF ) THEN DEF_NC=.FALSE. - CALL WRITE_PGD_SURF_ATM_n('MESONH') + CALL WRITE_PGD_SURF_ATM_n(YSURF_CUR,'MESONH') IF (LNETCDF.AND..NOT.LCARTESIAN) THEN LLFIFM = .FALSE. !!!! WRITE LAT and LON @@ -324,7 +322,7 @@ IF ( LNETCDF ) THEN NC_WRITE = .FALSE. END IF #else -CALL WRITE_PGD_SURF_ATM_n('MESONH') +CALL WRITE_PGD_SURF_ATM_n(YSURF_CUR,'MESONH') !* 4. Computes and writes smooth orography for SLEVE coordinate ! --------------------------------------------------------- !CALL ZSMT_PGD(COUTFMFILE,NZSFILTER,NSLEVE,XSMOOTH_ZS,LHSLOP,XHSLOP) @@ -335,9 +333,9 @@ IF (.NOT.LCARTESIAN) THEN ALLOCATE(ZWORK(IIMAX+NHALO*2,IJMAX+NHALO*2)) ALLOCATE(ZWORK_LAT(IIMAX+2*JPHEXT,IJMAX+2*JPHEXT)) ALLOCATE(ZWORK_LON(IIMAX+2*JPHEXT,IJMAX+2*JPHEXT)) - ZWORK=RESHAPE(XLAT, (/ (IIMAX+NHALO*2),(IJMAX+NHALO*2) /) ) + ZWORK=RESHAPE(YSURF_CUR%UG%XLAT, (/ (IIMAX+NHALO*2),(IJMAX+NHALO*2) /) ) ZWORK_LAT=ZWORK(NHALO:(IIMAX+NHALO+1),NHALO:(IJMAX+NHALO+1)) - ZWORK=RESHAPE(XLON, (/ IIMAX+NHALO*2,IJMAX+NHALO*2 /) ) + ZWORK=RESHAPE(YSURF_CUR%UG%XLON, (/ IIMAX+NHALO*2,IJMAX+NHALO*2 /) ) ZWORK_LON=ZWORK(NHALO:(IIMAX+NHALO+1),NHALO:(IJMAX+NHALO+1)) YRECFM='LAT' YCOMMENT='X_Y_latitude (degree)' @@ -367,7 +365,7 @@ CALL FMCLOS_ll(COUTFMFILE,'KEEP',CLUOUT0,IRESP,OPARALLELIO=.FALSE.) ! CALL END_PARA_ll(IINFO_ll) ! -CALL DEALLOC_SURFEX +CALL SURFEX_DEALLO_LIST ! !------------------------------------------------------------------------------- ! diff --git a/src/MNH/prep_real_case.f90 b/src/MNH/prep_real_case.f90 index 0d3a0aae571d04862b389b48b2cab9083093d957..9e97f27f9a598b19ac20f2b9e8e4153bef158773 100644 --- a/src/MNH/prep_real_case.f90 +++ b/src/MNH/prep_real_case.f90 @@ -379,6 +379,7 @@ !! Aug 2015 (M.Moge) removing EXTRAPOL on XDXX and XDYY in part 8 !! J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 !! M.Leriche 2015 : add LUSECHEM dans NAM_CH_CONF +!! 06/2016 (G.Delautier) phasage surfex 8 !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -457,10 +458,8 @@ USE MODE_EXTRAPOL USE MODI_SECOND_MNH USE MODI_VERSION USE MODI_DEALLOC_PARA_LL -USE MODI_ALLOC_SURFEX USE MODI_READ_ALL_NAMELISTS -USE MODI_GOTO_SURFEX -USE MODI_DEALLOC_SURFEX +USE MODD_MNH_SURFEX_n ! USE MODE_MPPDB ! @@ -1075,12 +1074,13 @@ IF (.NOT. LCOUPLING ) THEN ! IF (CSURF=="EXTE") THEN IF (YATMFILETYPE/='MESONH') THEN - CALL ALLOC_SURFEX(1) - CALL READ_ALL_NAMELISTS('MESONH','PRE',.FALSE.) + CALL SURFEX_ALLOC_LIST(1) + YSURF_CUR => YSURF_LIST(1) + CALL READ_ALL_NAMELISTS(YSURF_CUR,'MESONH','PRE',.FALSE.) ENDIF - CALL GOTO_SURFEX(1,.TRUE.) + CALL GOTO_SURFEX(1) CALL PREP_SURF_MNH(YSURFFILE,YSURFFILETYPE) - CALL DEALLOC_SURFEX + CALL SURFEX_DEALLO_LIST ENDIF ! CALL SECOND_MNH(ZTIME2) diff --git a/src/MNH/prep_surf_mnh.f90 b/src/MNH/prep_surf_mnh.f90 index e8898242854a3a40a30ed373b0871d490b73b0dd..f3c604ff9d4521f5797f9061d7c8f09804a595fd 100644 --- a/src/MNH/prep_surf_mnh.f90 +++ b/src/MNH/prep_surf_mnh.f90 @@ -45,6 +45,7 @@ END MODULE MODI_PREP_SURF_MNH !! MODIFICATIONS !! ------------- !! Original 01/2004 +!! 06/2016 (G.Delautier) phasage surfex 8 !------------------------------------------------------------------ ! @@ -59,6 +60,7 @@ USE MODI_INIT_PGD_SURF_ATM USE MODI_PREP_SURF_ATM USE MODI_WRITE_SURF_ATM_N USE MODI_WRITE_DIAG_SURF_ATM_N +USE MODD_MNH_SURFEX_n ! #ifdef MNH_NCWRIT USE MODN_NCOUT @@ -96,25 +98,25 @@ YATMFILETYPE = HATMFILETYPE IF(YATMFILETYPE=='GRIBEX') YATMFILETYPE='GRIB ' IF (LEN_TRIM(HATMFILE)==0) YATMFILETYPE=' ' ! -CALL INIT_PGD_SURF_ATM('MESONH','PRE',HATMFILE,YATMFILETYPE, & +CALL INIT_PGD_SURF_ATM(YSURF_CUR,'MESONH','PRE',HATMFILE,YATMFILETYPE, & TDTCUR%TDATE%YEAR, TDTCUR%TDATE%MONTH, & TDTCUR%TDATE%DAY, TDTCUR%TIME ) -CALL PREP_SURF_ATM('MESONH',HATMFILE,YATMFILETYPE,HATMFILE,YATMFILETYPE) +CALL PREP_SURF_ATM(YSURF_CUR,'MESONH',HATMFILE,YATMFILETYPE,HATMFILE,YATMFILETYPE) #ifdef MNH_NCWRIT NC_WRITE=LNETCDF NC_FILE='sf2' -CALL WRITE_SURF_ATM_n('MESONH','PRE',.FALSE.) -CALL WRITE_DIAG_SURF_ATM_n('MESONH','PRE') +CALL WRITE_SURF_ATM_n(YSURF_CUR,'MESONH','PRE',.FALSE.) +CALL WRITE_DIAG_SURF_ATM_n(YSURF_CUR,'MESONH','PRE') IF ( LNETCDF ) THEN DEF_NC=.FALSE. - CALL WRITE_SURF_ATM_n('MESONH','PRE',.FALSE.) - CALL WRITE_DIAG_SURF_ATM_n('MESONH','PRE') + CALL WRITE_SURF_ATM_n(YSURF_CUR,'MESONH','PRE',.FALSE.) + CALL WRITE_DIAG_SURF_ATM_n(YSURF_CUR,'MESONH','PRE') DEF_NC=.TRUE. NC_WRITE = .FALSE. END IF #else -CALL WRITE_SURF_ATM_n('MESONH','PRE',.FALSE.) -CALL WRITE_DIAG_SURF_ATM_n('MESONH','PRE') +CALL WRITE_SURF_ATM_n(YSURF_CUR,'MESONH','PRE',.FALSE.) +CALL WRITE_DIAG_SURF_ATM_n(YSURF_CUR,'MESONH','PRE') #endif ! diff --git a/src/MNH/prep_surfex.f90 b/src/MNH/prep_surfex.f90 index d467eb8f61d248e6cea18602601d9ac65ca49b43..a628994ed7e25489ab0df4f09001facd21440b42 100644 --- a/src/MNH/prep_surfex.f90 +++ b/src/MNH/prep_surfex.f90 @@ -29,6 +29,7 @@ !! ------------- !! Original 12/2004 (P. Le Moigne) !! 10/10/2011 J.Escobar call INI_PARAZ_ll +!! 06/2016 (G.Delautier) phasage surfex 8 !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -55,10 +56,8 @@ USE MODE_MODELN_HANDLER USE MODE_SPLITTINGZ_ll !JUANZ USE MODI_VERSION -USE MODI_ALLOC_SURFEX USE MODI_READ_ALL_NAMELISTS -USE MODI_GOTO_SURFEX -USE MODI_DEALLOC_SURFEX +USE MODD_MNH_SURFEX_n ! IMPLICIT NONE ! @@ -172,11 +171,11 @@ ELSE TDTCUR%TIME = XUNDEF END IF ! -CALL ALLOC_SURFEX(1) -CALL READ_ALL_NAMELISTS('MESONH','PRE',.FALSE.) -CALL GOTO_SURFEX(1,.TRUE.) +CALL SURFEX_ALLOC_LIST(1) +YSURF_CUR => YSURF_LIST(1) +CALL READ_ALL_NAMELISTS(YSURF_CUR,'MESONH','PRE',.FALSE.) +CALL GOTO_SURFEX(1) ! -CALL GOTO_SURFEX(1,.TRUE.) CALL PREP_SURF_MNH(YATMFILE,YATMFILETYPE) ! !------------------------------------------------------------------------------- @@ -204,7 +203,7 @@ CALL CLOSE_ll(CLUOUT0, IOSTAT=IRESP) CALL FMCLOS_ll(CINIFILE,'KEEP',CLUOUT0,IRESP) ! CALL END_PARA_ll(IINFO_ll) -CALL DEALLOC_SURFEX +CALL SURFEX_DEALLO_LIST !------------------------------------------------------------------------------- ! END PROGRAM PREP_SURFEX diff --git a/src/MNH/read_surf_mnh.f90 b/src/MNH/read_surf_mnh.f90 index f69ab13843e664bf6d5e2e4aeac570ff7bc7044c..74917206eab6371b9dfaa524657a3fa89630e5e2 100644 --- a/src/MNH/read_surf_mnh.f90 +++ b/src/MNH/read_surf_mnh.f90 @@ -561,6 +561,7 @@ END SUBROUTINE READ_SURFX2_MNH !! ------------- !! !! original 01/08/03 +!! 06/2016 (G.Delautier) phasage surfex 8 !---------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -571,6 +572,7 @@ USE MODE_FMREAD USE MODE_ll USE MODE_IO_ll ! +USE MODD_DATA_COVER_PAR, ONLY : JPCOVER USE MODD_CST, ONLY : XPI ! USE MODD_IO_SURF_MNH, ONLY : COUT, CFILE , NLUOUT, NMASK, & @@ -588,7 +590,7 @@ IMPLICIT NONE CHARACTER(LEN=16), INTENT(IN) :: HREC ! name of the article to be read INTEGER, INTENT(IN) :: KL1,KL2 ! number of points REAL, DIMENSION(KL1,KL2), INTENT(OUT):: PFIELD ! array containing the data field -LOGICAL,DIMENSION(KL2), INTENT(IN) ::OFLAG ! mask for array filling +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=1), INTENT(IN) :: HDIR ! type of field : @@ -661,7 +663,7 @@ END IF ! IF (.NOT. GCOVER_PACKED) THEN ICOVER=0 - DO JL2=1,KL2 + DO JL2=1,SIZE(OFLAG) WRITE(YREC,'(A5,I3.3)') 'COVER',JL2 IF (OFLAG(JL2)) THEN ICOVER=ICOVER+1 @@ -680,13 +682,8 @@ IF (KRESP /=0) THEN WRITE(NLUOUT,*) ' ' ELSE IF (HDIR=='H' .OR. HDIR=='A') THEN ICOVER=0 - DO JL2=1,KL2 - IF (OFLAG(JL2)) THEN - ICOVER=ICOVER+1 - CALL PACK_2D_1D(IMASK,ZWORK3D(IIB:IIE,IJB:IJE,ICOVER),PFIELD(:,JL2)) - ELSE - PFIELD(:,JL2) = 0.0 - END IF + DO JL2=1,NCOVER + CALL PACK_2D_1D(IMASK,ZWORK3D(IIB:IIE,IJB:IJE,JL2),PFIELD(:,JL2)) END DO END IF ! diff --git a/src/MNH/seriesn.f90 b/src/MNH/seriesn.f90 index 04438246b2e3060e72e3138ae16e38381090b5e4..a80c570f5e5c39c2ee93ec71bc4f957b4c57666b 100644 --- a/src/MNH/seriesn.f90 +++ b/src/MNH/seriesn.f90 @@ -41,6 +41,7 @@ !! ------------- !! Original 4/03/2002 !! Oct. 2011 : (P.Le Moigne) Surface series +!! 06/2016 (G.Delautier) phasage surfex 8 !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -67,6 +68,7 @@ USE MODE_ll USE MODE_IO_ll ! USE MODI_TEMPORAL_DIST +USE MODD_MNH_SURFEX_n ! IMPLICIT NONE ! @@ -129,7 +131,11 @@ END IF IF (LSURF) THEN KI=(IIE-IIB+1)*(IJE-IJB+1) ALLOCATE(ZSERIES(KI,5)) - CALL GET_SURF_VAR_n('MESONH',KI,5,PSERIES=ZSERIES) + CALL GET_SURF_VAR_n(YSURF_CUR%FM%DGF,YSURF_CUR%IM%I,YSURF_CUR%IM%DGI,& + YSURF_CUR%IM%DGMI,YSURF_CUR%SM%DGS,YSURF_CUR%DGU,& + YSURF_CUR%TM%DGT,YSURF_CUR%WM%DGW,YSURF_CUR%FM%F,& + YSURF_CUR%UG, YSURF_CUR%U, YSURF_CUR%USS,& + 'MESONH',KI,5,PSERIES=ZSERIES) ZTS(:,:)=0. ZTMNW(:,:)=0. ZTBOT(:,:)=0. diff --git a/src/MNH/spawn_surf.f90 b/src/MNH/spawn_surf.f90 index 38ed003558ab08111cd319e0c13c52dc8506054b..417e9675326ce7b30f5d981aaa248a851c0bff5c 100644 --- a/src/MNH/spawn_surf.f90 +++ b/src/MNH/spawn_surf.f90 @@ -65,6 +65,7 @@ END MODULE MODI_SPAWN_SURF !! ------------- !! !! Original 01/2004 +!! 06/2016 (G.Delautier) phasage surfex 8 !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -89,14 +90,13 @@ USE MODE_IO_ll !JUAN REALZ USE MODE_MODELN_HANDLER !JUAN REALZ -USE MODI_GOTO_SURFEX USE MODI_ZOOM_PGD_SURF_ATM USE MODI_WRITE_PGD_SURF_ATM_N USE MODI_WRITE_SURF_ATM_N -USE MODI_DEALLOC_SURF_ATM_N USE MODI_INIT_PGD_SURF_ATM USE MODI_PREP_SURF_ATM USE MODI_WRITE_DIAG_SURF_ATM_N +USE MODD_MNH_SURFEX_n ! #ifdef MNH_NCWRIT USE MODN_NCOUT @@ -133,49 +133,48 @@ IF (CSURF=='EXTE') THEN COUTFMFILE = CMY_NAME(2) COUTFILE = CMY_NAME(2) !* spawn PGD fields - CALL GOTO_SURFEX(1,.TRUE.) + CALL GOTO_SURFEX(1) !JUAN REALZ !CALL GO_TOMODEL_ll(1,IINFO_ll) !CALL GOTO_MODEL(1) !JUAN REALZ - CALL ZOOM_PGD_SURF_ATM('MESONH',HINIFILEPGD,'MESONH',CPGDFILE,'MESONH') + CALL ZOOM_PGD_SURF_ATM(YSURF_CUR,'MESONH',HINIFILEPGD,'MESONH',CPGDFILE,'MESONH') CALL MNHPUT_ZS_n !* writing of physiographic fields in the file #ifdef MNH_NCWRIT NC_WRITE=LNETCDF NC_FILE='pgd' - CALL WRITE_PGD_SURF_ATM_n('MESONH') + CALL WRITE_PGD_SURF_ATM_n(YSURF_CUR,'MESONH') IF ( LNETCDF ) THEN DEF_NC=.FALSE. - CALL WRITE_PGD_SURF_ATM_n('MESONH') + CALL WRITE_PGD_SURF_ATM_n(YSURF_CUR,'MESONH') DEF_NC=.TRUE. NC_WRITE = .FALSE. END IF #else - CALL WRITE_PGD_SURF_ATM_n('MESONH') + CALL WRITE_PGD_SURF_ATM_n(YSURF_CUR,'MESONH') #endif - CALL DEALLOC_SURF_ATM_n !* rereading of physiographic fields and definition of prognostic fields - CALL INIT_PGD_SURF_ATM('MESONH','PRE',HINIFILE,'MESONH', & + CALL INIT_PGD_SURF_ATM(YSURF_CUR,'MESONH','PRE',HINIFILE,'MESONH', & TDTCUR%TDATE%YEAR, TDTCUR%TDATE%MONTH, & TDTCUR%TDATE%DAY, TDTCUR%TIME ) - CALL PREP_SURF_ATM('MESONH',HINIFILE,'MESONH',HINIFILEPGD,'MESONH') + CALL PREP_SURF_ATM(YSURF_CUR,'MESONH',HINIFILE,'MESONH',HINIFILEPGD,'MESONH') !* writing of all surface fields #ifdef MNH_NCWRIT NC_WRITE=LNETCDF NC_FILE='sf2' - CALL WRITE_SURF_ATM_n('MESONH','ALL',.FALSE.) - CALL WRITE_DIAG_SURF_ATM_n('MESONH','ALL') + CALL WRITE_SURF_ATM_n(YSURF_CUR,'MESONH','ALL',.FALSE.) + CALL WRITE_DIAG_SURF_ATM_n(YSURF_CUR,'MESONH','ALL') IF ( LNETCDF ) THEN DEF_NC=.FALSE. - CALL WRITE_SURF_ATM_n('MESONH','ALL',.FALSE.) - CALL WRITE_DIAG_SURF_ATM_n('MESONH','ALL') + CALL WRITE_SURF_ATM_n(YSURF_CUR,'MESONH','ALL',.FALSE.) + CALL WRITE_DIAG_SURF_ATM_n(YSURF_CUR,'MESONH','ALL') DEF_NC=.TRUE. NC_WRITE = .FALSE. END IF #else - CALL WRITE_SURF_ATM_n('MESONH','ALL',.FALSE.) - CALL WRITE_DIAG_SURF_ATM_n('MESONH','ALL') + CALL WRITE_SURF_ATM_n(YSURF_CUR,'MESONH','ALL',.FALSE.) + CALL WRITE_DIAG_SURF_ATM_n(YSURF_CUR,'MESONH','ALL') #endif ! ELSE diff --git a/src/MNH/spawning.f90 b/src/MNH/spawning.f90 index c4a50e16fd33d66d3403ffede6ac9802b5853328..914c14f2b7bb585b4154e5ef6e48e1d28fa1615c 100644 --- a/src/MNH/spawning.f90 +++ b/src/MNH/spawning.f90 @@ -73,6 +73,7 @@ !! Modification 05/02/2015 (M.Moge) read namelist NAM_CONFZ, before INIT_MNH !! J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 !! J.Escobar : 19/04/2016 : Pb IOZ/NETCDF , missing OPARALLELIO=.FALSE. for PGD files +!! 06/2016 (G.Delautier) phasage surfex 8 !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -120,7 +121,7 @@ USE MODI_BOUNDARIES ! USE MODI_VERSION USE MODI_INIT_MNH -USE MODI_DEALLOC_SURFEX +USE MODD_MNH_SURFEX_n USE MODE_MPPDB ! ! @@ -238,7 +239,7 @@ CALL SPAWN_MODEL2 (NRR,NSV_USER,CTURB,CSURF,CCLOUD, & CCHEM_INPUT_FILE,YSPAFILE,YSPANBR,YSONFILE, & CINIFILE, CINIFILEPGD, LSPAWN_SURF ) ! -CALL DEALLOC_SURFEX +CALL SURFEX_DEALLO_LIST CALL CLOSE_ll(CLUOUT,IOSTAT=IRESP) CALL END_PARA_ll(IINFO_ll) !JUAN CALL ABORT diff --git a/src/MNH/write_surf_mnh.f90 b/src/MNH/write_surf_mnh.f90 index b0e0d736916551010fc59f0aea57bc0cf28c6e99..073515c71e85bc044222c5aaa3026d037404b5bd 100644 --- a/src/MNH/write_surf_mnh.f90 +++ b/src/MNH/write_surf_mnh.f90 @@ -397,6 +397,7 @@ END SUBROUTINE WRITE_SURFX1_MNH !! ------------- !! !! original 01/08/03 +!! 06/2016 (G.Delautier) phasage surfex 8 !---------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -407,6 +408,7 @@ USE MODE_FMWRIT USE MODE_ll USE MODE_IO_ll ! +USE MODD_DATA_COVER_PAR, ONLY : JPCOVER USE MODD_PARAMETERS, ONLY : XUNDEF, JPHEXT USE MODD_CONF_n, ONLY : CSTORAGE_TYPE USE MODD_CONFZ , ONLY : NB_PROCIO_W @@ -425,7 +427,7 @@ IMPLICIT NONE CHARACTER(LEN=12), INTENT(IN) :: HREC ! name of the article to be read INTEGER, INTENT(IN) :: KL1,KL2 ! number of points REAL, DIMENSION(KL1,KL2), INTENT(IN) :: PFIELD ! array containing the data field -LOGICAL,DIMENSION(KL2), INTENT(IN) ::OFLAG ! mask for array filling +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(IN) :: HCOMMENT ! Comment string CHARACTER(LEN=1), INTENT(IN) :: HDIR ! type of field : @@ -503,18 +505,15 @@ ALLOCATE(ZWORK3D(IIU,IJU,NCOVER)) ZWORK3D = XUNDEF ! ICOVER=0 -DO IKL2=1,KL2 - IF (OFLAG(IKL2)) THEN - ICOVER=ICOVER+1 - CALL UNPACK_1D_2D(IMASK,PFIELD(:,IKL2),ZWORK3D(IIB:IIE,IJB:IJE,ICOVER)) - END IF +DO IKL2=1,NCOVER + CALL UNPACK_1D_2D(IMASK,PFIELD(:,IKL2),ZWORK3D(IIB:IIE,IJB:IJE,IKL2)) END DO IGRID=4 IF (.NOT. GCOVER_PACKED) THEN ICOVER=0 - DO JL2=1,KL2 + DO JL2=1,SIZE(OFLAG) WRITE(YREC,'(A5,I3.3)') 'COVER',JL2 IF (OFLAG(JL2)) THEN ICOVER=ICOVER+1 diff --git a/src/MNH/zoom_pgd.f90 b/src/MNH/zoom_pgd.f90 index a3898c39d13c106c0a318ffc084b1a6cc53c10bb..ee07ef56a29f22e4d52ae35da62afbc4fef4c5ee 100644 --- a/src/MNH/zoom_pgd.f90 +++ b/src/MNH/zoom_pgd.f90 @@ -42,6 +42,7 @@ !! Original march 2005 !! 10/10/2011 J.Escobar call INI_PARAZ_ll !! 30/03/2012 S.Bielli Add NAM_NCOUT +!! 06/2016 (G.Delautier) phasage surfex 8 !! !---------------------------------------------------------------------------- ! @@ -71,12 +72,10 @@ USE MODE_SPLITTINGZ_ll !JUANZ ! USE MODI_VERSION -USE MODI_ALLOC_SURFEX USE MODI_READ_ALL_NAMELISTS -USE MODI_GOTO_SURFEX USE MODI_ZOOM_PGD_SURF_ATM USE MODI_WRITE_PGD_SURF_ATM_N -USE MODI_DEALLOC_SURFEX +USE MODD_MNH_SURFEX_n ! #ifdef MNH_NCWRIT USE MODN_NCOUT @@ -215,18 +214,19 @@ CALL FMCLOS_ll(CPGDFILE,'KEEP',CLUOUT0,IRESP) ! ! IF (CSURF=='EXTE') THEN - CALL ALLOC_SURFEX(1) - CALL READ_ALL_NAMELISTS('MESONH','PRE',.FALSE.) + CALL SURFEX_ALLOC_LIST(1) + YSURF_CUR => YSURF_LIST(1) + CALL READ_ALL_NAMELISTS(YSURF_CUR,'MESONH','PRE',.FALSE.) YPGDFILE = CPGDFILE CPGDFILE = YZOOMFILE COUTFMFILE = YZOOMFILE - CALL GOTO_SURFEX(1,.TRUE.) - CALL ZOOM_PGD_SURF_ATM('MESONH',YPGDFILE,'MESONH',YZOOMFILE,'MESONH') + CALL GOTO_SURFEX(1) + CALL ZOOM_PGD_SURF_ATM(YSURF_CUR,'MESONH',YPGDFILE,'MESONH',YZOOMFILE,'MESONH') ! !* 2.6 Writes the physiographic fields ! ------------------------------- ! - CALL WRITE_PGD_SURF_ATM_n('MESONH') + CALL WRITE_PGD_SURF_ATM_n(YSURF_CUR,'MESONH') ELSE ALLOCATE(ZZS2(NIMAX+2*JPHEXT,NJMAX+2*JPHEXT)) ZZS2(:,:)=ZZS1(IXOR:IXOR+NIMAX+2*JPHEXT-1,IYOR:IYOR+NJMAX+2*JPHEXT-1) @@ -284,7 +284,7 @@ CALL CLOSE_ll(CLUOUT0,IOSTAT=IRESP) ! CALL END_PARA_ll(IINFO_ll) -IF (CSURF=='EXTE') CALL DEALLOC_SURFEX +IF (CSURF=='EXTE') CALL SURFEX_DEALLO_LIST ! !------------------------------------------------------------------------------- !