SURFEX v7.3
General documentation of Surfex
 All Classes Files Functions Variables Typedefs
/home/dasprezs/EXPORT_v7_3/src/SURFEX/extrapol_fields.F90
Go to the documentation of this file.
00001 SUBROUTINE EXTRAPOL_FIELDS(HPROGRAM,KLUOUT)
00002 !!
00003 !!    PURPOSE
00004 !!    -------
00005 !!  parameters defined by cover need to be extrapolated if LDATA_VEGTYPE and NOT LDATA_"PARAM"
00006 !!  all ten-day periods are calculated one time for all, then written in PGD.txt
00007 !!
00008 !!    METHOD
00009 !!    ------ 
00010 !!  these parameters are: LAI, HT, DG, ROOTFRAC, IRRIG, WATSUP
00011 !!  Parameters are calculated as in ecoclimap, by vegtype, and then extrapolated
00012 !
00013 !!    EXTERNAL
00014 !!    --------
00015 !!
00016 !!    IMPLICIT ARGUMENTS
00017 !!    ------------------
00018 !!
00019 !!    REFERENCE
00020 !!    ---------
00021 !!
00022 !!    AUTHOR
00023 !!    ------
00024 !!
00025 !!    S. Faroux        Meteo-France
00026 !!
00027 !!    MODIFICATION
00028 !!    ------------
00029 !!
00030 !!    Original    16/11/10
00031 !!
00032 !!    DECLARATIONS
00033 !!
00034 USE MODD_SURF_PAR,       ONLY : XUNDEF
00035 !
00036 USE MODD_DATA_COVER_PAR, ONLY : NVEGTYPE
00037 USE MODD_ISBA_GRID_n,    ONLY : NDIM
00038 USE MODD_ISBA_n,         ONLY : XCOVER, CISBA, CPHOTO 
00039 !
00040 USE MODD_DATA_COVER,     ONLY : XDATA_LAI, XDATA_H_TREE,                                &
00041                                 XDATA_IRRIG, XDATA_WATSUP,                              &
00042                                 XDATA_GARDEN, XDATA_NATURE,                             &
00043                                 XDATA_ROOT_DEPTH, XDATA_GROUND_DEPTH,                   &
00044                                 XDATA_ROOT_EXTINCTION, XDATA_ROOT_LIN
00045 !                                
00046 USE MODD_DATA_ISBA_n,    ONLY : NTIME, XPAR_LAI, XPAR_H_TREE, XPAR_ROOT_DEPTH,    &
00047                                 XPAR_GROUND_DEPTH, XPAR_IRRIG, XPAR_WATSUP,       &
00048                                 LDATA_VEGTYPE, LDATA_LAI, LDATA_H_TREE, LDATA_DG, &
00049                                 LDATA_IRRIG, LDATA_WATSUP, LDATA_ROOTFRAC,        &
00050                                 LDATA_GROUND_DEPTH, LDATA_ROOT_DEPTH, LDATA_Z0
00051 !                                
00052 USE MODD_ISBA_n,         ONLY : CISBA, NGROUND_LAYER
00053 !
00054 USE MODI_AV_PGD
00055 USE MODI_INI_VAR_FROM_VEGTYPE_DATA
00056 !
00057 USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
00058 USE PARKIND1  ,ONLY : JPRB
00059 !
00060 IMPLICIT NONE
00061 !
00062 !*    0.1    Declaration of arguments
00063 !            ------------------------
00064 !
00065  CHARACTER(LEN=6),       INTENT(IN)    :: HPROGRAM  ! host program
00066 INTEGER,                INTENT(IN)    :: KLUOUT
00067 !
00068 !
00069 !*    0.2    Declaration of local variables
00070 !            ------------------------------
00071 !
00072  CHARACTER(LEN=3)  :: YTREE, YNAT, YVEG, YDIF
00073 REAL, DIMENSION(NDIM,36,NVEGTYPE) :: ZWORK
00074 INTEGER :: JTIME
00075 !
00076 REAL(KIND=JPRB) :: ZHOOK_HANDLE
00077 !
00078 !----------------------------------------------------------------------------
00079 IF (LHOOK) CALL DR_HOOK('EXTRAPOL_FIELDS',0,ZHOOK_HANDLE)
00080 !
00081 YNAT ='NAT'
00082 YTREE='TRE'
00083 YVEG ='VEG'
00084 YDIF ='DVG'
00085 !
00086 !            2. Extrapolations for land use or user
00087 !            --------------------------------------
00088 !
00089 !   LAI
00090 !   ---
00091 IF (.NOT.LDATA_LAI) THEN
00092 !
00093   DO JTIME=1,36 
00094 !    
00095 !   ECOCLIMAP spatial distribution field
00096     CALL AV_PGD(ZWORK(:,JTIME,:),XCOVER,XDATA_LAI(:,JTIME,:),YVEG,'ARI',KDECADE=JTIME)
00097 !
00098 !   Extrapolation toward new vegtype distribution field from updated land-use map or user 
00099     CALL INI_VAR_FROM_VEGTYPE_DATA(HPROGRAM,KLUOUT,'LAI: leaf area index',ZWORK(:,JTIME,:))
00100 !    
00101   ENDDO
00102 !
00103   CALL GOTO_NTIME(NTIME,ZWORK,XPAR_LAI)
00104 !
00105   LDATA_LAI=.TRUE.
00106 !  
00107 ENDIF
00108 !
00109 !   H_TREE
00110 !   ------
00111 IF (.NOT.LDATA_H_TREE .AND. (CPHOTO/='NON' .OR. .NOT.LDATA_Z0)) THEN
00112 !  
00113 ! ECOCLIMAP spatial distribution field       
00114   CALL AV_PGD(XPAR_H_TREE,XCOVER,XDATA_H_TREE,YTREE,'ARI')
00115 !
00116 ! Extrapolation toward new vegtype distribution field from updated land-use map or user  
00117   CALL INI_VAR_FROM_VEGTYPE_DATA(HPROGRAM,KLUOUT,'H_TREE: height of trees',XPAR_H_TREE)
00118 !  
00119   LDATA_H_TREE=.TRUE.
00120 !  
00121 ENDIF
00122 !
00123 !   DG
00124 !   --
00125 !
00126 !ROOT_DEPTH is needed for DIF, 2-L, 3-L 
00127 IF (.NOT.LDATA_DG .AND. (CISBA/='DIF' .OR. LDATA_ROOTFRAC) .AND. .NOT.LDATA_ROOT_DEPTH) THEN
00128   CALL AV_PGD (XPAR_ROOT_DEPTH(:,:),XCOVER,XDATA_ROOT_DEPTH(:,:),YNAT,'ARI')
00129   CALL INI_VAR_FROM_VEGTYPE_DATA(HPROGRAM,KLUOUT,'ROOTDEPTH', XPAR_ROOT_DEPTH(:,:))
00130   LDATA_ROOT_DEPTH = .TRUE.
00131 ENDIF
00132 !
00133 !GROUND_DEPTH is needed for DIF and 3-L
00134 IF (.NOT.LDATA_DG .AND. CISBA/='2-L' .AND. .NOT.LDATA_GROUND_DEPTH) THEN
00135   CALL AV_PGD (XPAR_GROUND_DEPTH(:,:),XCOVER,XDATA_GROUND_DEPTH(:,:),YNAT,'ARI')
00136   CALL INI_VAR_FROM_VEGTYPE_DATA(HPROGRAM,KLUOUT,'GROUNDDEPTH', XPAR_GROUND_DEPTH(:,:))
00137   LDATA_GROUND_DEPTH = .TRUE.
00138 ENDIF
00139 !
00140 !
00141 !  IRRIG
00142 !  -----
00143 IF (.NOT.LDATA_IRRIG) THEN
00144   DO JTIME=1,36
00145 !   ECOCLIMAP spatial distribution field       
00146     CALL AV_PGD(ZWORK(:,JTIME,:),XCOVER,XDATA_IRRIG,YVEG,'ARI',KDECADE=JTIME)
00147 !   Extrapolation toward new vegtype distribution field from updated land-use map or user  
00148     CALL INI_VAR_FROM_VEGTYPE_DATA(HPROGRAM,KLUOUT,'IRRIG  ', XPAR_IRRIG(:,JTIME,:))
00149   ENDDO
00150 !
00151   CALL GOTO_NTIME(NTIME,ZWORK,XPAR_IRRIG)
00152 !
00153   LDATA_IRRIG=.TRUE.
00154 !
00155 ENDIF
00156 !
00157 !   WATSUP
00158 !   ------
00159 IF (.NOT.LDATA_WATSUP) THEN
00160   DO JTIME=1,36
00161 !   ECOCLIMAP spatial distribution field       
00162     CALL AV_PGD(ZWORK(:,JTIME,:),XCOVER,XDATA_WATSUP,YVEG,'ARI',KDECADE=JTIME)  
00163 !   Extrapolation toward new vegtype distribution field from updated land-use map or user  
00164     CALL INI_VAR_FROM_VEGTYPE_DATA(HPROGRAM,KLUOUT,'WATSUP  ', XPAR_WATSUP(:,JTIME,:))
00165   ENDDO
00166 !
00167   CALL GOTO_NTIME(NTIME,ZWORK,XPAR_WATSUP)
00168 !  
00169   LDATA_WATSUP=.TRUE.
00170 ENDIF
00171 !
00172 IF (LHOOK) CALL DR_HOOK('EXTRAPOL_FIELDS',1,ZHOOK_HANDLE)
00173 !
00174 CONTAINS 
00175 !
00176 SUBROUTINE GOTO_NTIME(KTIME,PWORK,PPAR_DATA)
00177 !
00178 INTEGER, INTENT(IN) :: KTIME
00179 REAL, DIMENSION(:,:,:), INTENT(IN) :: PWORK
00180 REAL, DIMENSION(:,:,:), INTENT(OUT) :: PPAR_DATA
00181 !
00182 IF (KTIME==1) THEN
00183   PPAR_DATA(:,1,:) = SUM(PWORK(:,:,:),2)/36.
00184 ELSEIF (KTIME==2) THEN
00185   PPAR_DATA(:,1,:) = (SUM(PWORK(:,1:8,:),2) + SUM(PWORK(:,27:36,:),2))/18.
00186   PPAR_DATA(:,2,:) = SUM(PWORK(:,9:26,:),2)/18.
00187 ELSEIF (KTIME==12) THEN
00188   DO JTIME=1,12
00189     PPAR_DATA(:,JTIME,:) = SUM(PWORK(:,(JTIME-1)*3+1:JTIME*3,:),2)/3.
00190   ENDDO
00191 ELSEIF (KTIME==36) THEN
00192   PPAR_DATA(:,:,:) = PWORK(:,:,:)  
00193 ENDIF
00194 !
00195 END SUBROUTINE GOTO_NTIME
00196 !
00197 !-------------------------------------------------------------------------------
00198 END SUBROUTINE EXTRAPOL_FIELDS