SURFEX v7.3
General documentation of Surfex
 All Classes Files Functions Variables Typedefs
/home/dasprezs/EXPORT_v7_3/src/SURFEX/prep_isba.F90
Go to the documentation of this file.
00001 !     #########
00002 SUBROUTINE PREP_ISBA(HPROGRAM,HATMFILE,HATMFILETYPE,HPGDFILE,HPGDFILETYPE)
00003 !     #################################################################################
00004 !
00005 !!****  *PREP_ISBA* - Prepares ISBA fields
00006 !!
00007 !!    PURPOSE
00008 !!    -------
00009 !
00010 !!**  METHOD
00011 !!    ------
00012 !!
00013 !!    REFERENCE
00014 !!    ---------
00015 !!      
00016 !!
00017 !!    AUTHOR
00018 !!    ------
00019 !!     V. Masson 
00020 !!
00021 !!    MODIFICATIONS
00022 !!    -------------
00023 !!      Original    01/2004
00024 !!      Modified by P. Le Moigne (11/2004): AGS fields
00025 !!      Modified by B. Decharme   (2008)  : Floodplains
00026 !!      Modified by B. Decharme  (01/2009): Consistency with Arpege deep soil
00027 !!                                          temperature
00028 !!      Modified by B. Decharme  (03/2009): Consistency with Arpege permanent
00029 !!                                          snow/ice treatment
00030 !!      A.L. Gibelin 04/2009 : BIOMASS and RESP_BIOMASS arrays 
00031 !!      A.L. Gibelin 06/2009 : Soil carbon variables for CNT option
00032 !!      Modified by S. Riette    (06/2009): PREP_ISBA_CANOPY has no more arg.
00033 !!      Modified by S. Riette    (04/2010): ecmwf ice content is computed during
00034 !!                                          grib reading (no longer here)
00035 !!      B. Decharme  (10/2012): coherence between soil temp and liquid/solid water with DIF
00036 !!                              bug in biomass prognostic fields calculation
00037 !!
00038 !!------------------------------------------------------------------
00039 !
00040 !
00041 USE MODI_PREP_HOR_ISBA_FIELD
00042 USE MODI_PREP_VER_ISBA
00043 USE MODI_PREP_OUTPUT_GRID
00044 USE MODI_GET_LUOUT
00045 USE MODI_PREP_ISBA_CANOPY
00046 !
00047 USE MODD_READ_NAMELIST,  ONLY : LNAM_READ
00048 USE MODD_SURF_ATM,       ONLY : LVERTSHIFT
00049 USE MODD_DATA_COVER_PAR, ONLY : NVT_SNOW
00050 !
00051 USE MODD_ISBA_n,      ONLY : TSNOW, XRESA, XTSRAD_NAT, XEMIS, XLAI, XVEG,  &
00052                               XZ0, XALBNIR_VEG, XALBVIS_VEG, XALBUV_VEG,     &
00053                               CPHOTO, CRESPSL, XAN, XANFM, XANDAY, XLE,      &
00054                               NNBIOMASS, NNLITTER, NNLITTLEVS, NNSOILCARB,   &
00055                               XBSLAI, XBSLAI_NITRO, XBIOMASS, XRESP_BIOMASS, &
00056                               XLITTER, XSOILCARB, XLIGNIN_STRUC,             &
00057                               NPATCH, XWSAT, XWG, XWGI, CISBA, XTG, LCANOPY, &
00058                               LFLOOD, XZ0_FLOOD, XPATCH, CALBEDO,            &
00059                               XVEGTYPE_PATCH, LGLACIER, XICE_STO,            &
00060                               XPSN, XPSNG, XPSNV, XDIR_ALB_WITH_SNOW,        &
00061                               XSCA_ALB_WITH_SNOW, NGROUND_LAYER, XMPOTSAT,   &
00062                               XBCOEF
00063 !                           
00064 USE MODD_DEEPSOIL,    ONLY : LPHYSDOMC
00065 USE MODD_CSTS,        ONLY : XTT, XG, XLMTT
00066 USE MODD_SNOW_PAR,    ONLY : XZ0SN, XEMISSN
00067 USE MODD_ISBA_PAR,    ONLY : XWGMIN
00068 !
00069 USE MODD_ISBA_GRID_n, ONLY : CGRID, XGRID_PAR, XLAT, XLON
00070 USE MODD_CO2V_PAR,    ONLY : XANFMINIT, XCA_NIT, XCC_NIT
00071 USE MODD_SURF_PAR,    ONLY : XUNDEF
00072 USE MODD_PREP,        ONLY : XZS_LS
00073 !
00074 USE MODN_PREP_ISBA
00075 !
00076 USE MODI_VEGTYPE_TO_PATCH
00077 USE MODI_PREP_PERM_SNOW
00078 USE MODI_INIT_SNOW_LW
00079 USE MODI_AVERAGED_ALBEDO_EMIS_ISBA
00080 !
00081 !
00082 USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
00083 USE PARKIND1  ,ONLY : JPRB
00084 !
00085 USE MODI_CLEAN_PREP_OUTPUT_GRID
00086 !
00087 IMPLICIT NONE
00088 !
00089 !*      0.1    declarations of arguments
00090 !
00091  CHARACTER(LEN=6),   INTENT(IN)  :: HPROGRAM  ! program calling surf. schemes
00092  CHARACTER(LEN=28),  INTENT(IN)  :: HATMFILE    ! name of the Atmospheric file
00093  CHARACTER(LEN=6),   INTENT(IN)  :: HATMFILETYPE! type of the Atmospheric file
00094  CHARACTER(LEN=28),  INTENT(IN)  :: HPGDFILE    ! name of the Atmospheric file
00095  CHARACTER(LEN=6),   INTENT(IN)  :: HPGDFILETYPE! type of the Atmospheric file
00096 !
00097 !*      0.2    declarations of local variables
00098 !
00099 INTEGER :: ILUOUT, INI
00100 INTEGER :: JP, JL, JJ
00101 INTEGER :: ISNOW          ! patch number where permanent snow is
00102 REAL    :: ZWORK, ZLOG, ZWTOT, ZMATPOT
00103 !
00104 REAL,             DIMENSION(1)   :: ZSW_BANDS ! middle wavelength of each band
00105 REAL,             DIMENSION(SIZE(XLAI,1),SIZE(XLAI,2)) :: ZDIR_ALB  ! direct albedo for each band
00106 REAL,             DIMENSION(SIZE(XLAI,1),SIZE(XLAI,2)) :: ZSCA_ALB  ! diffuse albedo for each band
00107 REAL,             DIMENSION(SIZE(XLAI,1))   :: ZEMIS     ! emissivity
00108 REAL,             DIMENSION(SIZE(XLAI,1))   :: ZZENITH   ! solar zenithal angle
00109 REAL,             DIMENSION(SIZE(XLAI,1),SIZE(XLAI,2)) :: ZALBNIR  ! near-infra-red albedo   (-)
00110 REAL,             DIMENSION(SIZE(XLAI,1),SIZE(XLAI,2)) :: ZALBVIS  ! visible albedo          (-)
00111 REAL,             DIMENSION(SIZE(XLAI,1),SIZE(XLAI,2)) :: ZALBUV   ! UV albedo               (-)
00112 REAL,             DIMENSION(SIZE(XLAI,1),SIZE(XLAI,2)) :: ZALBNIR_SOIL  ! soil near-infra-red albedo   (-)
00113 REAL,             DIMENSION(SIZE(XLAI,1),SIZE(XLAI,2)) :: ZALBVIS_SOIL  ! soil visible albedo          (-)
00114 REAL,             DIMENSION(SIZE(XLAI,1),SIZE(XLAI,2)) :: ZALBUV_SOIL   ! soil UV albedo               (-)
00115 !
00116 REAL(KIND=JPRB) :: ZHOOK_HANDLE
00117 !
00118 !-------------------------------------------------------------------------------------
00119 !
00120 !*      1.     Default of configuration
00121 !
00122 !*      1.1    Default
00123 !
00124 !
00125 IF (LHOOK) CALL DR_HOOK('PREP_ISBA',0,ZHOOK_HANDLE)
00126  CALL GET_LUOUT(HPROGRAM,ILUOUT)
00127 !
00128  CALL PREP_OUTPUT_GRID(ILUOUT,CGRID,XGRID_PAR,XLAT,XLON)
00129 !
00130 !-------------------------------------------------------------------------------------
00131 !
00132 !*      2.     Reading and horizontal interpolations
00133 !
00134 !
00135 !*      2.0    Large scale orography
00136 !
00137  CALL PREP_HOR_ISBA_FIELD(HPROGRAM,'ZS     ',HATMFILE,HATMFILETYPE,HPGDFILE,HPGDFILETYPE)
00138 !
00139 !*      2.1    Soil Water reservoirs
00140 !
00141  CALL PREP_HOR_ISBA_FIELD(HPROGRAM,'WG     ',HATMFILE,HATMFILETYPE,HPGDFILE,HPGDFILETYPE)
00142 !
00143 !*      2.2    Soil ice reservoirs
00144 !
00145  CALL PREP_HOR_ISBA_FIELD(HPROGRAM,'WGI    ',HATMFILE,HATMFILETYPE,HPGDFILE,HPGDFILETYPE)
00146 !
00147 !*      2.3    Leaves interception water reservoir
00148 !
00149  CALL PREP_HOR_ISBA_FIELD(HPROGRAM,'WR     ',HATMFILE,HATMFILETYPE,HPGDFILE,HPGDFILETYPE)
00150 !
00151 !*      2.4    Temperature profile
00152 !
00153  CALL PREP_HOR_ISBA_FIELD(HPROGRAM,'TG     ',HATMFILE,HATMFILETYPE,HPGDFILE,HPGDFILETYPE)
00154 !
00155 !*      2.5    Snow variables
00156 !
00157  CALL PREP_HOR_ISBA_FIELD(HPROGRAM,'SN_VEG ',HATMFILE,HATMFILETYPE,HPGDFILE,HPGDFILETYPE)
00158 !
00159 !*      2.6    LAI
00160 !
00161  CALL PREP_HOR_ISBA_FIELD(HPROGRAM,'LAI    ',HATMFILE,HATMFILETYPE,HPGDFILE,HPGDFILETYPE)
00162 !
00163 !-------------------------------------------------------------------------------------
00164  CALL CLEAN_PREP_OUTPUT_GRID
00165 !-------------------------------------------------------------------------------------
00166 !
00167 !*      3.    Physical limitation: 
00168 !
00169 ! No ice for force restore third layer:
00170 IF (CISBA == '3-L') THEN
00171    DO JP=1,NPATCH
00172       WHERE(XWG(:,3,JP) /= XUNDEF)
00173         XWG(:,3,JP)  = MIN(XWG(:,3,JP)+XWGI(:,3,JP),XWSAT(:,3))
00174         XWGI(:,3,JP) = 0.
00175       END WHERE
00176    ENDDO
00177 ENDIF
00178 !
00179 ! Total water content should not exceed saturation:
00180 DO JP=1,NPATCH
00181    WHERE(XWG(:,:,JP) /= XUNDEF .AND. (XWG(:,:,JP) + XWGI(:,:,JP)) > XWSAT(:,:) )
00182       XWGI(:,:,JP) = XWSAT(:,:) - XWG(:,:,JP)
00183    END WHERE
00184 ENDDO
00185 !
00186 !-------------------------------------------------------------------------------------
00187 !
00188 !*      3.     Vertical interpolations of all variables
00189 !
00190 IF(LVERTSHIFT)THEN
00191   CALL PREP_VER_ISBA
00192 ENDIF
00193 !
00194 DEALLOCATE(XZS_LS)
00195 !-------------------------------------------------------------------------------------
00196 !
00197 !*      4.     Treatment of permanent snow
00198 !
00199 IF(LGLACIER)THEN
00200   ALLOCATE(XICE_STO(SIZE(XLAI,1),SIZE(XLAI,2)))
00201   XICE_STO(:,:) = 0.0
00202 ENDIF
00203 !
00204 ISNOW = VEGTYPE_TO_PATCH(NVT_SNOW,NPATCH)
00205  CALL PREP_PERM_SNOW(TSNOW,XTG(:,:,ISNOW),XVEGTYPE_PATCH(:,:,ISNOW),ISNOW)
00206  CALL INIT_SNOW_LW(XEMISSN,TSNOW)
00207 !
00208 IF (LPHYSDOMC) THEN
00209    TSNOW%WSNOW(:,:,:)=0.
00210 ENDIF
00211 !
00212 !-------------------------------------------------------------------------------------
00213 !
00214 !*      5.     coherence between soil temperature and liquid/solid water
00215 !
00216 IF (CISBA == 'DIF') THEN
00217    INI=SIZE(XWSAT,1)
00218    DO JP=1,NPATCH
00219       DO JL=1,NGROUND_LAYER
00220          DO JJ=1,INI
00221             IF(XWG(JJ,JL,JP)/=XUNDEF)THEN
00222 !     
00223 !             total soil moisture
00224               ZWTOT = XWG(JJ,JL,JP)+XWGI(JJ,JL,JP)
00225               ZWTOT = MIN(ZWTOT,XWSAT(JJ,JL))
00226 !              
00227 !             total matric potential
00228 !             psi=mpotsat*(w/wsat)**(-bcoef)
00229               ZWORK   = ZWTOT/XWSAT(JJ,JL)
00230               ZLOG    = XBCOEF(JJ,JL)*LOG(ZWORK)
00231               ZMATPOT = XMPOTSAT(JJ,JL)*EXP(-ZLOG)
00232 !
00233 !             soil liquid water content computation
00234 !             w=wsat*(psi/mpotsat)**(-1/bcoef)
00235               ZMATPOT       = ZMATPOT + XLMTT*MIN(0.0,XTG(JJ,JL,JP)-XTT)/(XG*XTG(JJ,JL,JP))        
00236               ZWORK         = MAX(1.0,ZMATPOT/XMPOTSAT(JJ,JL))
00237               ZLOG          = LOG(ZWORK)
00238               XWG(JJ,JL,JP) = XWSAT(JJ,JL)*EXP(-ZLOG/XBCOEF(JJ,JL))
00239               XWG(JJ,JL,JP) = MAX(XWGMIN,XWG(JJ,JL,JP))
00240 !        
00241 !             soil ice computation    
00242               XWGI(JJ,JL,JP) = MAX(0.0,ZWTOT-XWG(JJ,JL,JP))
00243 ! 
00244 !             supress numerical artefact
00245               IF(XTG(JJ,JL,JP)>=XTT)THEN
00246                 XWG (JJ,JL,JP) = MIN(XWG(JJ,JL,JP)+XWGI(JJ,JL,JP),XWSAT(JJ,JL))
00247                 XWGI(JJ,JL,JP) = 0.0
00248               ENDIF
00249 !
00250             ENDIF
00251         ENDDO        
00252       ENDDO        
00253    ENDDO
00254 ENDIF
00255 !
00256 !-------------------------------------------------------------------------------------
00257 !
00258 !*      6.     Half prognostic fields
00259 !
00260 ALLOCATE(XRESA(SIZE(XLAI,1),SIZE(XLAI,2)))
00261 XRESA = 100.
00262 !
00263 ALLOCATE(XTSRAD_NAT(SIZE(XLAI,1)))
00264 ZALBNIR_SOIL(:,:)=0.
00265 ZALBVIS_SOIL(:,:)=0.
00266 ZALBUV_SOIL(:,:)=0.
00267 ZZENITH(:)=0.
00268 ZSW_BANDS(:)=0.
00269 ALLOCATE(XPSN (SIZE(XLAI,1),SIZE(XLAI,2)))
00270 ALLOCATE(XPSNG(SIZE(XLAI,1),SIZE(XLAI,2)))
00271 ALLOCATE(XPSNV(SIZE(XLAI,1),SIZE(XLAI,2)))
00272 XPSN  = 0.0
00273 XPSNG = 0.0
00274 XPSNV = 0.0
00275 ALLOCATE(XDIR_ALB_WITH_SNOW(SIZE(XLAI,1),1,SIZE(XLAI,2)))
00276 ALLOCATE(XSCA_ALB_WITH_SNOW(SIZE(XLAI,1),1,SIZE(XLAI,2)))
00277 XDIR_ALB_WITH_SNOW = 0.0
00278 XSCA_ALB_WITH_SNOW = 0.0
00279  CALL AVERAGED_ALBEDO_EMIS_ISBA(.FALSE., CALBEDO, ZZENITH,                &
00280                                  XVEG,XZ0,XLAI,XTG(:,1,:),               &
00281                                  XPATCH, ZSW_BANDS,                      &
00282                                  XALBNIR_VEG,XALBVIS_VEG,XALBUV_VEG,     &
00283                                  ZALBNIR_SOIL,ZALBVIS_SOIL,ZALBUV_SOIL,  &
00284                                  XEMIS,                                  &
00285                                  TSNOW,                                  &
00286                                  ZALBNIR,ZALBVIS,ZALBUV,                 &
00287                                  ZDIR_ALB, ZSCA_ALB,                     &
00288                                  ZEMIS,XTSRAD_NAT                        )  
00289 DEALLOCATE(XPSN)
00290 DEALLOCATE(XPSNG)
00291 DEALLOCATE(XPSNV)
00292 DEALLOCATE(XDIR_ALB_WITH_SNOW)
00293 DEALLOCATE(XSCA_ALB_WITH_SNOW)
00294 !
00295 !-------------------------------------------------------------------------------------
00296 !
00297 !*      7.     Isba-Ags prognostic fields
00298 !
00299 IF (CPHOTO /= 'NON') THEN
00300 !
00301    ALLOCATE(XAN(SIZE(XLAI,1),SIZE(XLAI,2)))
00302    XAN = 0.
00303 !
00304    ALLOCATE(XANDAY(SIZE(XLAI,1),SIZE(XLAI,2)))
00305    XANDAY = 0.
00306 !
00307    ALLOCATE(XANFM(SIZE(XLAI,1),SIZE(XLAI,2)))
00308    XANFM = XANFMINIT
00309 !
00310    ALLOCATE(XLE(SIZE(XLAI,1),SIZE(XLAI,2)))
00311    XLE = 0.
00312 !
00313 ENDIF
00314 !
00315 IF (CPHOTO == 'AGS' .OR. CPHOTO == 'AST') THEN
00316 !
00317    ALLOCATE(XBIOMASS(SIZE(XLAI,1),NNBIOMASS,SIZE(XLAI,2)))
00318    XBIOMASS(:,1,:) = 0.
00319 !
00320    ALLOCATE(XRESP_BIOMASS(SIZE(XLAI,1),NNBIOMASS,SIZE(XLAI,2)))
00321    XRESP_BIOMASS(:,:,:) = 0.
00322 !
00323 ELSEIF (CPHOTO == 'LAI' .OR. CPHOTO == 'LST') THEN
00324 !
00325    ALLOCATE(XBIOMASS(SIZE(XLAI,1),NNBIOMASS,SIZE(XLAI,2)))
00326    WHERE(XLAI(:,:)/=XUNDEF)
00327          XBIOMASS(:,1,:) = XLAI(:,:) * XBSLAI(:,:)
00328    ELSEWHERE
00329          XBIOMASS(:,1,:) = 0.0
00330    ENDWHERE
00331 !
00332    ALLOCATE(XRESP_BIOMASS(SIZE(XLAI,1),NNBIOMASS,SIZE(XLAI,2)))
00333    XRESP_BIOMASS(:,:,:) = 0.
00334 !
00335 ELSEIF (CPHOTO == 'NIT' .OR. CPHOTO == 'NCB') THEN
00336 !
00337    ALLOCATE(XBIOMASS(SIZE(XLAI,1),NNBIOMASS,SIZE(XLAI,2)))
00338    WHERE(XLAI(:,:)/=XUNDEF)
00339          XBIOMASS(:,1,:) = XLAI(:,:) * XBSLAI_NITRO(:,:)
00340    ELSEWHERE
00341          XBIOMASS(:,1,:) = 0.0
00342    ENDWHERE
00343    XBIOMASS(:,2,:) = MAX( 0., (XBIOMASS(:,1,:)/ (XCC_NIT/10.**XCA_NIT))  &
00344                               **(1.0/(1.0-XCA_NIT)) - XBIOMASS(:,1,:) )  
00345    XBIOMASS(:,3:NNBIOMASS,:) = 0.
00346 !
00347    ALLOCATE(XRESP_BIOMASS(SIZE(XLAI,1),NNBIOMASS,SIZE(XLAI,2)))
00348    XRESP_BIOMASS(:,:,:) = 0.
00349 !
00350 ENDIF
00351 !
00352 !-------------------------------------------------------------------------------------
00353 !
00354 !*      8.     Isba-CC prognostic fields
00355 !
00356 IF (CRESPSL == 'CNT') THEN
00357 !
00358    ALLOCATE(XLITTER(SIZE(XLAI,1),NNLITTER,NNLITTLEVS,SIZE(XLAI,2)))
00359    XLITTER(:,:,:,:) = 0.
00360 !
00361    ALLOCATE(XSOILCARB(SIZE(XLAI,1),NNSOILCARB,SIZE(XLAI,2)))
00362    XSOILCARB(:,:,:) = 0.
00363 !
00364    ALLOCATE(XLIGNIN_STRUC(SIZE(XLAI,1),NNLITTLEVS,SIZE(XLAI,2)))
00365    XLIGNIN_STRUC(:,:,:) = 0.
00366 !
00367 ENDIF
00368 !
00369 !-------------------------------------------------------------------------------------
00370 !
00371 !*      9.     Floodplains scheme
00372 !
00373 IF(LFLOOD)THEN
00374   ALLOCATE(XZ0_FLOOD(SIZE(XLAI,1),SIZE(XLAI,2)))
00375   XZ0_FLOOD(:,:) = XZ0SN
00376 ENDIF
00377 !
00378 !-------------------------------------------------------------------------------------
00379 !
00380 !*      10.     Preparation of canopy air variables
00381 !
00382 !
00383 LCANOPY = LISBA_CANOPY
00384 IF (LCANOPY) CALL PREP_ISBA_CANOPY()
00385 IF (LHOOK) CALL DR_HOOK('PREP_ISBA',1,ZHOOK_HANDLE)
00386 !
00387 !-------------------------------------------------------------------------------------
00388 !
00389 END SUBROUTINE PREP_ISBA