SURFEX v7.3
General documentation of Surfex
 All Classes Files Functions Variables Typedefs
/home/dasprezs/EXPORT_v7_3/src/SURFEX/init_isba_mixpar.F90
Go to the documentation of this file.
00001 !     #########
00002       SUBROUTINE INIT_ISBA_MIXPAR(HISBA,KDECADE,KDECADE2,PCOVER,HPHOTO,HSFTYPE)
00003 !     ##############################################################
00004 !
00005 !!**** *INIT_ISBA_MIXPAR* 
00006 !!
00007 !!    PURPOSE
00008 !!    -------
00009 !!   This routine makes pre-calculations relative to dependances between
00010 !!    parameters. 
00011 !! 
00012 !!    METHOD
00013 !!    ------
00014 !!   First are treated parameters varying in time. Then, other ones. 
00015 !!   * XPAR_VEGTYPE is needed as soon as 1 LDATA_ is true to use av_pgd_param. 
00016 !!   * XPAR_LAI is needed as soon as av_pgd_param is called with YLAI
00017 !!   * XPAR_VEG is needed as soon as av_pgd_param is called with YVEG
00018 !!   * XPAR_H_TREE is needed as soon as Z0 is calculated by ini_data_param by point
00019 !!
00020 !!    EXTERNAL
00021 !!    --------
00022 !!
00023 !!    IMPLICIT ARGUMENTS
00024 !!    ------------------
00025 !!
00026 !!    REFERENCE
00027 !!    ---------
00028 !!
00029 !!    AUTHOR
00030 !!    ------
00031 !!
00032 !!    S. Faroux        Meteo-France
00033 !!
00034 !!    MODIFICATION
00035 !!    ------------
00036 !!
00037 !!    Original    16/11/10
00038 !!
00039 !----------------------------------------------------------------------------
00040 !
00041 !*    0.     DECLARATION
00042 !            -----------
00043 !
00044 USE MODD_SURF_PAR,       ONLY : XUNDEF
00045 USE MODD_DATA_COVER_PAR, ONLY : NVEGTYPE
00046 !
00047 USE MODD_ISBA_GRID_n,    ONLY : NDIM
00048 USE MODD_ISBA_n,         ONLY : NGROUND_LAYER
00049 USE MODD_DATA_ISBA_n,    ONLY : NTIME, XPAR_VEGTYPE,  XPAR_LAI, XPAR_H_TREE,               &
00050                                 XPAR_VEG, XPAR_Z0, XPAR_EMIS, XPAR_DICE,                   &
00051                                 XPAR_RSMIN, XPAR_GAMMA, XPAR_WRMAX_CF, XPAR_RGL,           &
00052                                 XPAR_CV, XPAR_Z0_O_Z0H,                                    &
00053                                 XPAR_ALBNIR_VEG, XPAR_ALBVIS_VEG, XPAR_ALBUV_VEG,          &
00054                                 XPAR_ALBNIR_SOIL, XPAR_ALBVIS_SOIL, XPAR_ALBUV_SOIL,       &
00055                                 XPAR_GMES, XPAR_BSLAI, XPAR_SEFOLD, XPAR_GC, XPAR_DMAX,    &
00056                                 XPAR_RE25, XPAR_LAIMIN, XPAR_F2I,                          &
00057                                 XPAR_CE_NITRO,XPAR_CF_NITRO,XPAR_CNA_NITRO,                &
00058                                 LPAR_STRESS, XPAR_IRRIG, XPAR_WATSUP,                      &
00059                                 XPAR_DG, XPAR_ROOT_EXTINCTION, XPAR_ROOT_LIN, LDATA_DG,    &
00060                                 LDATA_ROOTFRAC, LDATA_ROOT_EXTINCTION, LDATA_ROOT_LIN,     &
00061                                 LDATA_VEGTYPE, LDATA_LAI, LDATA_H_TREE,                    &  
00062                                 LDATA_VEG, LDATA_Z0, LDATA_EMIS, LDATA_DICE,               &
00063                                 LDATA_RSMIN, LDATA_GAMMA, LDATA_WRMAX_CF, LDATA_RGL,       &
00064                                 LDATA_CV, LDATA_Z0_O_Z0H, LDATA_ROOT_DEPTH,                &
00065                                 LDATA_ALBNIR_VEG, LDATA_ALBVIS_VEG, LDATA_ALBUV_VEG,       &
00066                                 LDATA_ALBVIS_SOIL, LDATA_ALBNIR_SOIL, LDATA_ALBUV_SOIL,    &
00067                                 LDATA_GMES, LDATA_BSLAI, LDATA_SEFOLD, LDATA_GC, LDATA_DMAX, &
00068                                 LDATA_RE25, LDATA_LAIMIN, LDATA_F2I,                       &
00069                                 LDATA_CE_NITRO,LDATA_CF_NITRO, LDATA_CNA_NITRO,            &
00070                                 LDATA_STRESS, LDATA_IRRIG, LDATA_WATSUP, LDATA_MIXPAR 
00071 !
00072 USE MODD_DATA_COVER,     ONLY : XDATA_VEGTYPE, XDATA_LAI, XDATA_H_TREE, XDATA_VEG,         &
00073                                 XDATA_IRRIG, XDATA_WATSUP
00074 !     
00075 USE MODI_INI_DATA_PARAM
00076 USE MODI_AV_PGD
00077 !
00078 USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
00079 USE PARKIND1  ,ONLY : JPRB
00080 !
00081 IMPLICIT NONE
00082 !
00083 !*    0.1    Declaration of arguments
00084 !            ------------------------
00085 !
00086  CHARACTER(LEN=*), INTENT(IN)          :: HISBA 
00087 INTEGER,                INTENT(IN)    :: KDECADE
00088 INTEGER,                INTENT(OUT)   :: KDECADE2
00089 REAL, DIMENSION(:,:),   INTENT(IN)    :: PCOVER
00090  CHARACTER(LEN=*),       INTENT(IN)    :: HPHOTO  ! type of photosynthesis
00091  CHARACTER(LEN=*),       INTENT(IN)    :: HSFTYPE ! nature / garden
00092 !
00093 !
00094 !*    0.2    Declaration of local variables
00095 !            ------------------------------
00096 !
00097 REAL, DIMENSION(12)   :: XSTRESS   ! 1. if defensive /0. if offensive
00098 !
00099  CHARACTER(LEN=3)  :: YTREE, YNAT, YVEG
00100 !
00101 INTEGER               :: JVEGTYPE
00102 !
00103 !*    0.3    Declaration of namelists
00104 !            ------------------------
00105 !
00106 REAL(KIND=JPRB) :: ZHOOK_HANDLE
00107 !
00108 DATA XSTRESS /1.,1.,1.,0.,1.,0.,1.,0.,1.,0.,0.,0./
00109 !-------------------------------------------------------------------------------
00110 !
00111 !*    1.      Initializations
00112 !             ---------------
00113 !
00114 IF (LHOOK) CALL DR_HOOK('INIT_ISBA_MIXPAR',0,ZHOOK_HANDLE)
00115 !
00116 IF (.NOT.LDATA_MIXPAR) THEN
00117   IF (LHOOK) CALL DR_HOOK('INIT_ISBA_MIXPAR',1,ZHOOK_HANDLE)
00118   RETURN
00119 ENDIF
00120 !
00121 IF (HSFTYPE=='NAT') THEN
00122   YNAT='NAT'
00123   YTREE='TRE'
00124   YVEG='VEG'
00125 ELSEIF (HSFTYPE=='GRD') THEN
00126   YNAT='GRD'
00127   YTREE='GRT'
00128   YVEG='GRV'
00129 ENDIF
00130 !
00131 KDECADE2 = KDECADE
00132 IF (NTIME==2) KDECADE2 = KDECADE2 + 10 
00133 KDECADE2 = (KDECADE2-1) * NTIME / 36 + 1
00134 IF (NTIME==2) KDECADE2 = MOD(KDECADE2,2)
00135 !
00136 !          1. Arrays needed further
00137 !          ------------------------
00138 !
00139 !XPAR_VEGTYPE will be needed to use ini_data_param by point
00140 IF (.NOT.LDATA_VEGTYPE) THEN
00141   ALLOCATE(XPAR_VEGTYPE   (NDIM,NVEGTYPE))
00142   DO JVEGTYPE=1,NVEGTYPE
00143     CALL AV_PGD (XPAR_VEGTYPE(:,JVEGTYPE),PCOVER ,XDATA_VEGTYPE(:,JVEGTYPE),YNAT,'ARI')
00144   END DO
00145 ENDIF
00146 !xpar_lai: needed for av_pgd_param with YLAI
00147 IF (.NOT.LDATA_LAI) THEN
00148   ALLOCATE(XPAR_LAI(NDIM,NTIME,NVEGTYPE))
00149   CALL AV_PGD(XPAR_LAI(:,KDECADE2,:),PCOVER,XDATA_LAI(:,KDECADE,:),YVEG,'ARI',KDECADE=KDECADE2)
00150 ENDIF
00151 !veg
00152 IF (.NOT.LDATA_VEG) THEN
00153   ALLOCATE(XPAR_VEG(NDIM,NTIME,NVEGTYPE))
00154   IF (LDATA_LAI) THEN
00155     CALL INI_DATA_PARAM(XPAR_VEGTYPE,PLAI=XPAR_LAI,PVEG_OUT=XPAR_VEG)
00156     LDATA_VEG=.TRUE.
00157   ELSE
00158     CALL AV_PGD(XPAR_VEG(:,KDECADE2,:),PCOVER,XDATA_VEG(:,KDECADE,:),YNAT,'ARI')
00159   ENDIF
00160 ENDIF
00161 !ht: needed to calculate z0, if not calculated yet during extrapolation 
00162 IF (.NOT.LDATA_H_TREE .AND. .NOT.LDATA_Z0 .AND. LDATA_LAI) THEN
00163   ALLOCATE(XPAR_H_TREE(NDIM,NVEGTYPE))
00164   CALL AV_PGD(XPAR_H_TREE,PCOVER,XDATA_H_TREE,YTREE,'ARI')
00165 ENDIF
00166 !
00167 !dg: initialization for ROOTFRAC
00168 !ROOTFRAC depends on ROOT_DEPTH, DG, ROOT_EXT, ROOT_LIN
00169 IF (.NOT.LDATA_ROOTFRAC .AND. HISBA=='DIF' .AND. LDATA_ROOT_DEPTH) THEN
00170   !
00171   IF (.NOT.LDATA_ROOT_EXTINCTION) THEN
00172     ALLOCATE(XPAR_ROOT_EXTINCTION(NDIM,NVEGTYPE))
00173     CALL INI_DATA_PARAM(XPAR_VEGTYPE,PROOT_EXTINCTION=XPAR_ROOT_EXTINCTION)
00174     LDATA_ROOT_EXTINCTION = .TRUE.
00175   ENDIF
00176   !
00177   IF (.NOT.LDATA_ROOT_LIN) THEN
00178     ALLOCATE(XPAR_ROOT_LIN(NDIM,NVEGTYPE))
00179     CALL INI_DATA_PARAM(XPAR_VEGTYPE,PROOT_LIN=XPAR_ROOT_LIN)
00180     LDATA_ROOT_LIN = .TRUE.
00181   ENDIF
00182   !
00183 ENDIF
00184 !
00185 !dice: depth of the soil column for the calculation of the frozen soil fraction (m)
00186 IF (LDATA_DG .AND. .NOT.LDATA_DICE) THEN
00187   !
00188   ALLOCATE(XPAR_DICE(NDIM,NVEGTYPE))
00189   !
00190   IF(HISBA/='DIF')THEN
00191     XPAR_DICE(:,:)=MAX(0.2,0.8*XPAR_DG(:,2,:))
00192     LDATA_DICE=.TRUE.
00193   ENDIF
00194 !
00195 ENDIF
00196 !
00197 !          2. Calculations of parameters dependant on others
00198 !          -------------------------------------------------
00199 !
00200 !emis
00201 IF (.NOT.LDATA_EMIS .AND. LDATA_VEG) THEN
00202   ALLOCATE(XPAR_EMIS(NDIM,NTIME,NVEGTYPE))
00203   CALL INI_DATA_PARAM(XPAR_VEGTYPE,PVEG_IN=XPAR_VEG,PEMIS_ECO=XPAR_EMIS)
00204   LDATA_EMIS=.TRUE.
00205 ENDIF
00206 !z0
00207 IF (.NOT.LDATA_Z0 .AND. (LDATA_LAI .OR.LDATA_H_TREE)) THEN
00208   ALLOCATE(XPAR_Z0(NDIM,NTIME,NVEGTYPE))
00209   CALL INI_DATA_PARAM(XPAR_VEGTYPE,PLAI=XPAR_LAI,PH_TREE=XPAR_H_TREE,PZ0=XPAR_Z0)
00210   LDATA_Z0=.TRUE.
00211 ENDIF
00212 
00213 !RSMIN
00214 IF (LDATA_LAI) THEN
00215   IF (.NOT.LDATA_RSMIN) THEN
00216     ALLOCATE(XPAR_RSMIN(NDIM,NVEGTYPE))
00217     CALL INI_DATA_PARAM(XPAR_VEGTYPE,PRSMIN=XPAR_RSMIN)
00218   ENDIF
00219   LDATA_RSMIN=.TRUE.
00220 ENDIF
00221 
00222 !parameters calculated on veg fraction
00223 IF (LDATA_VEG) THEN
00224   !
00225   LDATA_LAI=.TRUE. 
00226   !
00227   IF (.NOT.LDATA_GAMMA) ALLOCATE(XPAR_GAMMA     (NDIM,NVEGTYPE))
00228   IF (.NOT.LDATA_WRMAX_CF) ALLOCATE(XPAR_WRMAX_CF  (NDIM,NVEGTYPE))
00229   IF (.NOT.LDATA_RGL) ALLOCATE(XPAR_RGL       (NDIM,NVEGTYPE))
00230   IF (.NOT.LDATA_CV) ALLOCATE(XPAR_CV        (NDIM,NVEGTYPE))
00231   IF (.NOT.LDATA_ALBNIR_VEG) ALLOCATE(XPAR_ALBNIR_VEG(NDIM,NVEGTYPE))
00232   IF (.NOT.LDATA_ALBVIS_VEG) ALLOCATE(XPAR_ALBVIS_VEG(NDIM,NVEGTYPE))
00233   IF (.NOT.LDATA_ALBUV_VEG) ALLOCATE(XPAR_ALBUV_VEG (NDIM,NVEGTYPE))
00234   IF (.NOT.LDATA_GMES) ALLOCATE(XPAR_GMES      (NDIM,NVEGTYPE))
00235   IF (.NOT.LDATA_BSLAI) ALLOCATE(XPAR_BSLAI     (NDIM,NVEGTYPE))
00236   IF (.NOT.LDATA_SEFOLD) ALLOCATE(XPAR_SEFOLD    (NDIM,NVEGTYPE))
00237   IF (.NOT.LDATA_GC) ALLOCATE(XPAR_GC        (NDIM,NVEGTYPE))
00238   IF (.NOT.LDATA_LAIMIN) ALLOCATE(XPAR_LAIMIN    (NDIM,NVEGTYPE))
00239   IF (.NOT.LDATA_F2I) ALLOCATE(XPAR_F2I       (NDIM,NVEGTYPE))
00240   IF (.NOT.LDATA_CE_NITRO) ALLOCATE(XPAR_CE_NITRO  (NDIM,NVEGTYPE))
00241   IF (.NOT.LDATA_CF_NITRO) ALLOCATE(XPAR_CF_NITRO  (NDIM,NVEGTYPE))
00242   IF (.NOT.LDATA_CNA_NITRO) ALLOCATE(XPAR_CNA_NITRO (NDIM,NVEGTYPE))
00243   !
00244   IF (.NOT.LDATA_GAMMA) CALL INI_DATA_PARAM(XPAR_VEGTYPE,PGAMMA=XPAR_GAMMA)
00245   IF (.NOT.LDATA_WRMAX_CF) CALL INI_DATA_PARAM(XPAR_VEGTYPE,PWRMAX_CF=XPAR_WRMAX_CF)
00246   IF (.NOT.LDATA_RGL) CALL INI_DATA_PARAM(XPAR_VEGTYPE,PRGL=XPAR_RGL)
00247   IF (.NOT.LDATA_CV) CALL INI_DATA_PARAM(XPAR_VEGTYPE,PCV=XPAR_CV)
00248   IF (.NOT.LDATA_ALBNIR_VEG) CALL INI_DATA_PARAM(XPAR_VEGTYPE,PALBNIR_VEG=XPAR_ALBNIR_VEG)
00249   IF (.NOT.LDATA_ALBVIS_VEG) CALL INI_DATA_PARAM(XPAR_VEGTYPE,PALBVIS_VEG=XPAR_ALBVIS_VEG)
00250   IF (.NOT.LDATA_ALBUV_VEG) CALL INI_DATA_PARAM(XPAR_VEGTYPE,PALBUV_VEG=XPAR_ALBUV_VEG)
00251   IF (HPHOTO == 'AST' .OR. HPHOTO == 'LST' .OR. HPHOTO == 'NIT' .OR. HPHOTO=='NCB')  THEN
00252     IF (.NOT.LDATA_GMES) CALL INI_DATA_PARAM(XPAR_VEGTYPE,PGMES_ST=XPAR_GMES)
00253     IF (.NOT.LDATA_BSLAI) CALL INI_DATA_PARAM(XPAR_VEGTYPE,PBSLAI_ST=XPAR_BSLAI)
00254     IF (.NOT.LDATA_SEFOLD) CALL INI_DATA_PARAM(XPAR_VEGTYPE,PSEFOLD_ST=XPAR_SEFOLD)
00255     IF (.NOT.LDATA_GC) CALL INI_DATA_PARAM(XPAR_VEGTYPE,PGC_ST=XPAR_GC)
00256   ELSE
00257     IF (.NOT.LDATA_GMES) CALL INI_DATA_PARAM(XPAR_VEGTYPE,PGMES=XPAR_GMES)
00258     IF (.NOT.LDATA_BSLAI) CALL INI_DATA_PARAM(XPAR_VEGTYPE,PBSLAI=XPAR_BSLAI)
00259     IF (.NOT.LDATA_SEFOLD) CALL INI_DATA_PARAM(XPAR_VEGTYPE,PSEFOLD=XPAR_SEFOLD)
00260     IF (.NOT.LDATA_GC) CALL INI_DATA_PARAM(XPAR_VEGTYPE,PGC=XPAR_GC)
00261   ENDIF
00262   IF (.NOT.LDATA_LAIMIN) CALL INI_DATA_PARAM(XPAR_VEGTYPE,PLAIMIN=XPAR_LAIMIN)
00263   IF (.NOT.LDATA_F2I) CALL INI_DATA_PARAM(XPAR_VEGTYPE,PF2I=XPAR_F2I)
00264   IF (.NOT.LDATA_CE_NITRO) CALL INI_DATA_PARAM(XPAR_VEGTYPE,PCE_NITRO=XPAR_CE_NITRO)
00265   IF (.NOT.LDATA_CF_NITRO) CALL INI_DATA_PARAM(XPAR_VEGTYPE,PCF_NITRO=XPAR_CF_NITRO)
00266   IF (.NOT.LDATA_CNA_NITRO) CALL INI_DATA_PARAM(XPAR_VEGTYPE,PCNA_NITRO=XPAR_CNA_NITRO)
00267   !
00268   LDATA_GAMMA=.TRUE.
00269   LDATA_WRMAX_CF=.TRUE.
00270   LDATA_RGL=.TRUE.
00271   LDATA_CV=.TRUE.
00272   LDATA_ALBNIR_VEG=.TRUE.
00273   LDATA_ALBVIS_VEG=.TRUE.
00274   LDATA_ALBUV_VEG=.TRUE.
00275   LDATA_GMES=.TRUE.
00276   LDATA_BSLAI=.TRUE.
00277   LDATA_SEFOLD=.TRUE.
00278   LDATA_GC=.TRUE.
00279   LDATA_LAIMIN=.TRUE.
00280   LDATA_F2I=.TRUE.
00281   LDATA_CE_NITRO=.TRUE.
00282   LDATA_CF_NITRO=.TRUE.
00283   LDATA_CNA_NITRO=.TRUE.
00284   !
00285   LDATA_STRESS=.TRUE.
00286   !
00287   ALLOCATE(LPAR_STRESS   (NDIM,NVEGTYPE))  
00288   LPAR_STRESS(:,:) = .TRUE.
00289   DO JVEGTYPE=1,NVEGTYPE
00290     IF(XSTRESS(JVEGTYPE)<1.) LPAR_STRESS(:,JVEGTYPE) = .FALSE.
00291   ENDDO
00292   !
00293   IF (.NOT.LDATA_IRRIG) THEN
00294     ALLOCATE(XPAR_IRRIG     (NDIM,NTIME,NVEGTYPE))
00295     CALL AV_PGD(XPAR_IRRIG(:,KDECADE2,:),PCOVER,XDATA_IRRIG(:,:),YVEG,'ARI',KDECADE=KDECADE2)
00296     LDATA_IRRIG=.TRUE.
00297   ENDIF
00298   !
00299   IF (.NOT.LDATA_WATSUP) THEN
00300     ALLOCATE(XPAR_WATSUP     (NDIM,NTIME,NVEGTYPE))
00301     CALL AV_PGD(XPAR_WATSUP(:,KDECADE2,:),PCOVER,XDATA_WATSUP(:,:),YVEG,'ARI',KDECADE=KDECADE2)
00302     LDATA_WATSUP=.TRUE.
00303   ENDIF
00304   !
00305 ENDIF
00306 !
00307 !
00308 IF (LDATA_VEGTYPE) THEN
00309   IF (.NOT.LDATA_Z0_O_Z0H) ALLOCATE(XPAR_Z0_O_Z0H  (NDIM,NVEGTYPE))
00310   IF (.NOT.LDATA_DMAX) ALLOCATE(XPAR_DMAX      (NDIM,NVEGTYPE))
00311   IF (.NOT.LDATA_RE25) ALLOCATE(XPAR_RE25      (NDIM,NVEGTYPE))
00312   IF (.NOT.LDATA_Z0_O_Z0H) CALL INI_DATA_PARAM(XPAR_VEGTYPE,PZ0_O_Z0H=XPAR_Z0_O_Z0H)
00313   IF (HPHOTO == 'AST' .OR. HPHOTO == 'LST' .OR. HPHOTO == 'NIT' .OR. HPHOTO=='NCB')  THEN
00314     IF (.NOT.LDATA_DMAX) CALL INI_DATA_PARAM(XPAR_VEGTYPE,PDMAX_ST=XPAR_DMAX)
00315   ELSE
00316     IF (.NOT.LDATA_DMAX) CALL INI_DATA_PARAM(XPAR_VEGTYPE,PDMAX=XPAR_DMAX)
00317   ENDIF
00318   IF (.NOT.LDATA_RE25) CALL INI_DATA_PARAM(XPAR_VEGTYPE,PRE25=XPAR_RE25)
00319   !
00320   LDATA_Z0_O_Z0H=.TRUE.
00321   LDATA_DMAX=.TRUE.
00322   LDATA_RE25=.TRUE.
00323 ENDIF
00324 !
00325 IF (LHOOK) CALL DR_HOOK('INIT_ISBA_MIXPAR',1,ZHOOK_HANDLE)
00326 !
00327 !-------------------------------------------------------------------------------
00328 !
00329 END SUBROUTINE INIT_ISBA_MIXPAR