From a3dfbc1f0c15e222edf32a92296c22b32c73464b Mon Sep 17 00:00:00 2001 From: Gaelle DELAUTIER <gaelle.delautier@meteo.fr> Date: Fri, 20 Jul 2018 13:05:23 +0200 Subject: [PATCH] Gaelle 20/07/2018 : bug surfex 8.1 --- src/SURFEX/hor_extrapol_surf.F90 | 20 ++++++++++---------- src/SURFEX/modd_data_isban.F90 | 1 + src/SURFEX/prep_hor_isba_field.F90 | 4 +--- src/SURFEX/prep_snow_extern.F90 | 23 ++++++++++++++++++++++- 4 files changed, 34 insertions(+), 14 deletions(-) diff --git a/src/SURFEX/hor_extrapol_surf.F90 b/src/SURFEX/hor_extrapol_surf.F90 index 238a4a9b4..b47bc6db4 100644 --- a/src/SURFEX/hor_extrapol_surf.F90 +++ b/src/SURFEX/hor_extrapol_surf.F90 @@ -86,7 +86,7 @@ REAL, DIMENSION(:,:), ALLOCATABLE :: ZFIELD REAL :: ZLAT ! latitude of point to define REAL :: ZLON ! longitude of point to define REAL :: ZDIST ! current distance to valid point (in lat/lon grid) -REAL, DIMENSION(:), ALLOCATABLE :: ZNDIST! smallest distance to valid point +REAL, DIMENSION(:,:), ALLOCATABLE :: ZNDIST! smallest distance to valid point REAL :: ZCOSLA! cosine of latitude REAL :: ZLONSC! longitude of valid point REAL :: ZIDLO, ZIDLOMAX, ZIDLOMIN, ZIDLAMAX, ZIDLAMIN @@ -118,8 +118,6 @@ IF (LHOOK) CALL DR_HOOK('HOR_EXTRAPOL_SURF_1',0,ZHOOK_HANDLE) INO = SIZE(PFIELD,1) INL = SIZE(PFIELD,2) ! -ALLOCATE(ZNDIST(INL)) -! !------------------------------------------------------------------------------- ! GLALO = HCOORTYPE=='LALO' @@ -346,10 +344,12 @@ IF (LHOOK) CALL DR_HOOK('HOR_EXTRAPOL_SURF_31',0,ZHOOK_HANDLE_OMP) #endif ENDIF - -!$OMP PARALLEL DO PRIVATE(JI,ZNDIST,IDX,ZCOSLA,JISC,ID0,ZLONSC,ZDIST) + + ALLOCATE(ZNDIST(IBOR(1,J),INL)) + +!$OMP PARALLEL DO PRIVATE(JI,IDX,ZCOSLA,JISC,JL,ID0,ZLONSC,ZDIST) DO JI=1,IBOR(1,J) - ZNDIST(:) = XUNDEF + ZNDIST(JI,:) = XUNDEF IDX = IBOR(2,J)+1 ZCOSLA=COS(ZCOOR(JI,1)*ZRAD) DO JISC = 1,IBOR(2,J) @@ -366,10 +366,10 @@ IF (LHOOK) CALL DR_HOOK('HOR_EXTRAPOL_SURF_31',0,ZHOOK_HANDLE_OMP) ZDIST= (ZLA(ID0)-ZCOOR(JI,1)) ** 2 + (ZLONSC-ZCOOR(JI,2)) ** 2 END IF DO JL=1,INL - IF (ZDIST<=ZNDIST(JL)) THEN + IF (ZDIST<=ZNDIST(JI,JL)) THEN IF (PFIELD_IN(ID0,JL)/=XUNDEF) THEN ZFIELD(JI,JL) = PFIELD_IN(ID0,JL) - ZNDIST(JL) = ZDIST + ZNDIST(JI,JL) = ZDIST ENDIF ENDIF ENDDO @@ -377,6 +377,8 @@ IF (LHOOK) CALL DR_HOOK('HOR_EXTRAPOL_SURF_31',0,ZHOOK_HANDLE_OMP) END DO ENDDO !$OMP END PARALLEL DO + ! + DEALLOCATE(ZNDIST) ! IF (J/=NPIO) THEN !send values found to extrapolate @@ -396,8 +398,6 @@ IF (LHOOK) CALL DR_HOOK('HOR_EXTRAPOL_SURF_31',0,ZHOOK_HANDLE_OMP) ENDDO IF (LHOOK) CALL DR_HOOK('HOR_EXTRAPOL_SURF_31',1,ZHOOK_HANDLE_OMP) ! -DEALLOCATE(ZNDIST) - ! IF (LHOOK) CALL DR_HOOK('HOR_EXTRAPOL_SURF_32',0,ZHOOK_HANDLE) ! IDX_I = IDX_I + 3 diff --git a/src/SURFEX/modd_data_isban.F90 b/src/SURFEX/modd_data_isban.F90 index 218decf1c..6f06ca229 100644 --- a/src/SURFEX/modd_data_isban.F90 +++ b/src/SURFEX/modd_data_isban.F90 @@ -315,6 +315,7 @@ IF (LHOOK) CALL DR_HOOK("MODD_DATA_ISBA_N:DATA_ISBA_INIT",0,ZHOOK_HANDLE) NULLIFY(YDATA_ISBA%XPAR_WFC) NULLIFY(YDATA_ISBA%XPAR_WSAT) ! +YDATA_ISBA%NVEGTYPE=0 YDATA_ISBA%NTIME=0 YDATA_ISBA%LDATA_MIXPAR=.FALSE. YDATA_ISBA%LDATA_VEGTYPE=.FALSE. diff --git a/src/SURFEX/prep_hor_isba_field.F90 b/src/SURFEX/prep_hor_isba_field.F90 index dfb2b2dc2..8e2fbee39 100644 --- a/src/SURFEX/prep_hor_isba_field.F90 +++ b/src/SURFEX/prep_hor_isba_field.F90 @@ -54,9 +54,7 @@ USE MODD_SURF_ATM_n, ONLY : SURF_ATM_t USE MODD_SSO_n, ONLY : SSO_t USE MODD_GRID_CONF_PROJ_n, ONLY : GRID_CONF_PROJ_t ! -USE MODD_PREP, ONLY : CINGRID_TYPE, CINTERP_TYPE, XZS_LS, & - XLAT_OUT, XLON_OUT, XX_OUT, XY_OUT, & - LINTERP, CMASK +USE MODD_PREP, ONLY : CINGRID_TYPE, CINTERP_TYPE, XZS_LS, LINTERP, CMASK USE MODD_GRID_GRIB, ONLY : CINMODEL ! USE MODD_PREP_ISBA, ONLY : XGRID_SOIL, NGRID_LEVEL, LSNOW_IDEAL, & diff --git a/src/SURFEX/prep_snow_extern.F90 b/src/SURFEX/prep_snow_extern.F90 index f2e9d7642..43f669649 100644 --- a/src/SURFEX/prep_snow_extern.F90 +++ b/src/SURFEX/prep_snow_extern.F90 @@ -95,6 +95,7 @@ REAL, DIMENSION(:), ALLOCATABLE :: ZD ! total snow depth REAL, DIMENSION(:,:), ALLOCATABLE :: ZDEPTH ! thickness of each layer (m) REAL, DIMENSION(:,:), ALLOCATABLE :: ZGRID ! normalized input grid ! +REAL, DIMENSION(:), ALLOCATABLE :: ZMASK INTEGER, DIMENSION(:), ALLOCATABLE :: IMASK_P ! LOGICAL :: GTOWN ! town variables written in the file @@ -104,7 +105,7 @@ INTEGER :: IVERSION_PGD, IVERSION_PREP ! SURFEX LOGICAL :: GOLD_NAME ! old name flag INTEGER :: IBUGFIX_PGD, IBUGFIX_PREP ! SURFEX bug version INTEGER :: IVEGTYPE ! actual number of vegtypes -INTEGER :: JL ! loop on snow vertical grids +INTEGER :: JV, JL ! loop on snow vertical grids INTEGER :: JI ! loop on pts INTEGER :: INI CHARACTER(LEN=8) :: YAREA ! area treated ('ROOF','ROAD','VEG ') @@ -159,6 +160,18 @@ CALL CLOSE_AUX_IO_SURF(HFILEPGD,HFILEPGDTYPE) ! CALL OPEN_AUX_IO_SURF(HFILEPGD,HFILEPGDTYPE,YMASK) ! +ALLOCATE(ZMASK(INI)) +IF (IVERSION_PGD>=7) THEN + IF (YAREA(1:4)=='VEG ') THEN + YRECFM='FRAC_NATURE' + ELSE + YRECFM='FRAC_TOWN' + ENDIF + CALL READ_SURF(HFILEPGDTYPE,YRECFM,ZMASK,IRESP,HDIR='A') +ELSE + ZMASK(:) = 1. +ENDIF +! IF (YAREA(1:4)=='VEG ') THEN YRECFM = 'PATCH_NUMBER' CALL READ_SURF(HFILEPGDTYPE,YRECFM,IPATCH,IRESP,HDIR='-') @@ -374,6 +387,14 @@ ENDDO ! DEALLOCATE(IMASK_P) ! +DO JV = 1,SIZE(PFIELD,3) + DO JL = 1,SIZE(PFIELD,2) + WHERE (ZMASK(:)==0.) PFIELD(:,JL,JV) = XUNDEF + ENDDO +ENDDO +! +DEALLOCATE(ZMASK) +! !------------------------------------------------------------------------------------- ! !* 9. End of IO -- GitLab