SURFEX v7.3
General documentation of Surfex
|
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