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