SURFEX v7.3
General documentation of Surfex
|
00001 ! ######### 00002 SUBROUTINE DIAG_WATFLUX_INIT_n(HPROGRAM,KLU,KSW) 00003 ! ##################### 00004 ! 00005 !!**** *DIAG_WATFLUX_INIT_n* - routine to initialize WATFLUX diagnostic variables 00006 !! 00007 !! PURPOSE 00008 !! ------- 00009 !! 00010 !!** METHOD 00011 !! ------ 00012 !! 00013 !! EXTERNAL 00014 !! -------- 00015 !! 00016 !! 00017 !! IMPLICIT ARGUMENTS 00018 !! ------------------ 00019 !! 00020 !! REFERENCE 00021 !! --------- 00022 !! 00023 !! 00024 !! AUTHOR 00025 !! ------ 00026 !! V. Masson *Meteo France* 00027 !! 00028 !! MODIFICATIONS 00029 !! ------------- 00030 !! Original 01/2004 00031 !------------------------------------------------------------------------------- 00032 ! 00033 !* 0. DECLARATIONS 00034 ! ------------ 00035 ! 00036 USE MODD_SURF_PAR, ONLY : XUNDEF 00037 USE MODD_SURF_ATM, ONLY : LCPL_ESM 00038 USE MODD_DIAG_SURF_ATM_n,ONLY : LREAD_BUDGETC 00039 USE MODD_DIAG_WATFLUX_n, ONLY : N2M, LSURF_BUDGET, LCOEF, LSURF_VARS, & 00040 LSURF_BUDGETC, LRESET_BUDGETC, & 00041 XRN, XH, XLE, XLEI, XGFLUX, XRI, & 00042 XCD, XCH, XCE, XZ0, XZ0H, & 00043 XT2M, XQ2M, XHU2M, XT2M_MIN, XT2M_MAX,& 00044 XZON10M, XMER10M, XQS, & 00045 XSWD, XSWU, XLWD, XLWU, & 00046 XSWBD, XSWBU, XFMU, XFMV, & 00047 XRNC, XHC, XLEC, XLEIC, XGFLUXC, & 00048 XSWDC, XSWUC, XLWDC, XLWUC, XFMUC, & 00049 XFMVC, XDIAG_TS, XHU2M_MIN, XHU2M_MAX,& 00050 XWIND10M, XWIND10M_MAX 00051 ! 00052 USE MODD_WATFLUX_n, ONLY : XCPL_WATER_WIND,XCPL_WATER_EVAP, & 00053 XCPL_WATER_HEAT,XCPL_WATER_SNET, & 00054 XCPL_WATER_FWSU,XCPL_WATER_FWSV, & 00055 XCPL_WATER_RAIN,XCPL_WATER_SNOW, & 00056 XCPL_WATER_FWSM, & 00057 XCPL_WATERICE_HEAT,XCPL_WATERICE_EVAP,& 00058 XCPL_WATERICE_SNET 00059 ! 00060 USE MODI_READ_SURF 00061 ! 00062 ! 00063 USE YOMHOOK ,ONLY : LHOOK, DR_HOOK 00064 USE PARKIND1 ,ONLY : JPRB 00065 ! 00066 IMPLICIT NONE 00067 ! 00068 !* 0.1 Declarations of arguments 00069 ! ------------------------- 00070 ! 00071 INTEGER, INTENT(IN) :: KLU ! size of arrays 00072 INTEGER, INTENT(IN) :: KSW ! number of SW spectral bands 00073 CHARACTER(LEN=6), INTENT(IN):: HPROGRAM ! program calling 00074 ! 00075 !* 0.2 Declarations of local variables 00076 ! ------------------------------- 00077 ! 00078 INTEGER :: IRESP ! IRESP : return-code if a problem appears 00079 CHARACTER(LEN=12) :: YREC ! Name of the article to be read 00080 REAL(KIND=JPRB) :: ZHOOK_HANDLE 00081 ! 00082 !------------------------------------------------------------------------------- 00083 ! 00084 !* surface energy budget 00085 ! 00086 IF (LHOOK) CALL DR_HOOK('DIAG_WATFLUX_INIT_N',0,ZHOOK_HANDLE) 00087 ALLOCATE(XDIAG_TS(KLU)) 00088 XDIAG_TS = XUNDEF 00089 ! 00090 IF (LSURF_BUDGET.OR.LSURF_BUDGETC) THEN 00091 ALLOCATE(XRN (KLU)) 00092 ALLOCATE(XH (KLU)) 00093 ALLOCATE(XLE (KLU)) 00094 ALLOCATE(XLEI (KLU)) 00095 ALLOCATE(XGFLUX (KLU)) 00096 ALLOCATE(XSWD (KLU)) 00097 ALLOCATE(XSWU (KLU)) 00098 ALLOCATE(XLWD (KLU)) 00099 ALLOCATE(XLWU (KLU)) 00100 ALLOCATE(XSWBD (KLU,KSW)) 00101 ALLOCATE(XSWBU (KLU,KSW)) 00102 ALLOCATE(XFMU (KLU)) 00103 ALLOCATE(XFMV (KLU)) 00104 ! 00105 XRN = XUNDEF 00106 XH = XUNDEF 00107 XLE = XUNDEF 00108 XLEI = XUNDEF 00109 XGFLUX = XUNDEF 00110 XSWD = XUNDEF 00111 XSWU = XUNDEF 00112 XLWD = XUNDEF 00113 XLWU = XUNDEF 00114 XSWBD = XUNDEF 00115 XSWBU = XUNDEF 00116 XFMU = XUNDEF 00117 XFMV = XUNDEF 00118 ELSE 00119 ALLOCATE(XRN (0)) 00120 ALLOCATE(XH (0)) 00121 ALLOCATE(XLE (0)) 00122 ALLOCATE(XLEI (0)) 00123 ALLOCATE(XGFLUX (0)) 00124 ALLOCATE(XSWD (0)) 00125 ALLOCATE(XSWU (0)) 00126 ALLOCATE(XLWD (0)) 00127 ALLOCATE(XLWU (0)) 00128 ALLOCATE(XSWBD (0,0)) 00129 ALLOCATE(XSWBU (0,0)) 00130 ALLOCATE(XFMU (0)) 00131 ALLOCATE(XFMV (0)) 00132 END IF 00133 ! 00134 !* cumulative surface energy budget 00135 ! 00136 IF (LSURF_BUDGETC) THEN 00137 ! 00138 ALLOCATE(XRNC (KLU)) 00139 ALLOCATE(XHC (KLU)) 00140 ALLOCATE(XLEC (KLU)) 00141 ALLOCATE(XLEIC (KLU)) 00142 ALLOCATE(XGFLUXC (KLU)) 00143 ALLOCATE(XSWDC (KLU)) 00144 ALLOCATE(XSWUC (KLU)) 00145 ALLOCATE(XLWDC (KLU)) 00146 ALLOCATE(XLWUC (KLU)) 00147 ALLOCATE(XFMUC (KLU)) 00148 ALLOCATE(XFMVC (KLU)) 00149 ! 00150 IF (.NOT. LREAD_BUDGETC) THEN 00151 XRNC = 0.0 00152 XHC = 0.0 00153 XLEC = 0.0 00154 XLEIC = 0.0 00155 XGFLUXC = 0.0 00156 XSWDC = 0.0 00157 XSWUC = 0.0 00158 XLWDC = 0.0 00159 XLWUC = 0.0 00160 XFMUC = 0.0 00161 XFMVC = 0.0 00162 ELSEIF (LREAD_BUDGETC.AND.LRESET_BUDGETC) THEN 00163 XRNC = 0.0 00164 XHC = 0.0 00165 XLEC = 0.0 00166 XLEIC = 0.0 00167 XGFLUXC = 0.0 00168 XSWDC = 0.0 00169 XSWUC = 0.0 00170 XLWDC = 0.0 00171 XLWUC = 0.0 00172 XFMUC = 0.0 00173 XFMVC = 0.0 00174 ELSE 00175 YREC='RNC_WAT' 00176 CALL READ_SURF(HPROGRAM,YREC,XRNC,IRESP) 00177 YREC='HC_WAT' 00178 CALL READ_SURF(HPROGRAM,YREC,XHC ,IRESP) 00179 YREC='LEC_WAT' 00180 CALL READ_SURF(HPROGRAM,YREC,XLEC,IRESP) 00181 YREC='LEIC_WAT' 00182 CALL READ_SURF(HPROGRAM,YREC,XLEIC,IRESP) 00183 YREC='GFLUXC_WAT' 00184 CALL READ_SURF(HPROGRAM,YREC,XGFLUXC,IRESP) 00185 YREC='SWDC_WAT' 00186 CALL READ_SURF(HPROGRAM,YREC,XSWDC,IRESP) 00187 YREC='SWUC_WAT' 00188 CALL READ_SURF(HPROGRAM,YREC,XSWUC,IRESP) 00189 YREC='LWDC_WAT' 00190 CALL READ_SURF(HPROGRAM,YREC,XLWDC,IRESP) 00191 YREC='LWUC_WAT' 00192 CALL READ_SURF(HPROGRAM,YREC,XLWUC,IRESP) 00193 YREC='FMUC_WAT' 00194 CALL READ_SURF(HPROGRAM,YREC,XFMUC,IRESP) 00195 YREC='FMVC_WAT' 00196 CALL READ_SURF(HPROGRAM,YREC,XFMVC,IRESP) 00197 ENDIF 00198 ELSE 00199 ALLOCATE(XRNC (0)) 00200 ALLOCATE(XHC (0)) 00201 ALLOCATE(XLEC (0)) 00202 ALLOCATE(XLEIC (0)) 00203 ALLOCATE(XGFLUXC (0)) 00204 ALLOCATE(XSWDC (0)) 00205 ALLOCATE(XSWUC (0)) 00206 ALLOCATE(XLWDC (0)) 00207 ALLOCATE(XLWUC (0)) 00208 ALLOCATE(XFMUC (0)) 00209 ALLOCATE(XFMVC (0)) 00210 ENDIF 00211 ! 00212 !* parameters at 2m 00213 ! 00214 IF (N2M>=1) THEN 00215 ALLOCATE(XRI (KLU)) 00216 ALLOCATE(XT2M (KLU)) 00217 ALLOCATE(XT2M_MIN(KLU)) 00218 ALLOCATE(XT2M_MAX(KLU)) 00219 ALLOCATE(XQ2M (KLU)) 00220 ALLOCATE(XHU2M (KLU)) 00221 ALLOCATE(XHU2M_MIN(KLU)) 00222 ALLOCATE(XHU2M_MAX(KLU)) 00223 ALLOCATE(XZON10M (KLU)) 00224 ALLOCATE(XMER10M (KLU)) 00225 ALLOCATE(XWIND10M (KLU)) 00226 ALLOCATE(XWIND10M_MAX(KLU)) 00227 ! 00228 XRI = XUNDEF 00229 XT2M = XUNDEF 00230 XT2M_MIN = XUNDEF 00231 XT2M_MAX = 0.0 00232 XQ2M = XUNDEF 00233 XHU2M = XUNDEF 00234 XHU2M_MIN= XUNDEF 00235 XHU2M_MAX=-XUNDEF 00236 XZON10M = XUNDEF 00237 XMER10M = XUNDEF 00238 XWIND10M = XUNDEF 00239 XWIND10M_MAX = 0.0 00240 ELSE 00241 ALLOCATE(XRI (0)) 00242 ALLOCATE(XT2M (0)) 00243 ALLOCATE(XT2M_MIN (0)) 00244 ALLOCATE(XT2M_MAX (0)) 00245 ALLOCATE(XQ2M (0)) 00246 ALLOCATE(XHU2M (0)) 00247 ALLOCATE(XHU2M_MIN(0)) 00248 ALLOCATE(XHU2M_MAX(0)) 00249 ALLOCATE(XZON10M (0)) 00250 ALLOCATE(XMER10M (0)) 00251 ALLOCATE(XWIND10M (0)) 00252 ALLOCATE(XWIND10M_MAX(0)) 00253 END IF 00254 ! 00255 !* transfer coefficients 00256 ! 00257 IF (LCOEF) THEN 00258 ALLOCATE(XCD (KLU)) 00259 ALLOCATE(XCH (KLU)) 00260 ALLOCATE(XCE (KLU)) 00261 ALLOCATE(XZ0 (KLU)) 00262 ALLOCATE(XZ0H (KLU)) 00263 ! 00264 XCD = XUNDEF 00265 XCH = XUNDEF 00266 XCE = XUNDEF 00267 XZ0 = XUNDEF 00268 XZ0H = XUNDEF 00269 ELSE 00270 ALLOCATE(XCD (0)) 00271 ALLOCATE(XCH (0)) 00272 ALLOCATE(XCE (0)) 00273 ALLOCATE(XZ0 (0)) 00274 ALLOCATE(XZ0H (0)) 00275 END IF 00276 ! 00277 ! 00278 !* surface humidity 00279 ! 00280 IF (LSURF_VARS) THEN 00281 ALLOCATE(XQS (KLU)) 00282 ! 00283 XQS = XUNDEF 00284 ELSE 00285 ALLOCATE(XQS (0)) 00286 END IF 00287 ! 00288 IF(LCPL_ESM)THEN 00289 ! 00290 ALLOCATE(XCPL_WATER_WIND(KLU)) 00291 ALLOCATE(XCPL_WATER_FWSU(KLU)) 00292 ALLOCATE(XCPL_WATER_FWSV(KLU)) 00293 ALLOCATE(XCPL_WATER_SNET(KLU)) 00294 ALLOCATE(XCPL_WATER_HEAT(KLU)) 00295 ALLOCATE(XCPL_WATER_EVAP(KLU)) 00296 ALLOCATE(XCPL_WATER_RAIN(KLU)) 00297 ALLOCATE(XCPL_WATER_SNOW(KLU)) 00298 ALLOCATE(XCPL_WATER_FWSM(KLU)) 00299 XCPL_WATER_WIND(:) = 0.0 00300 XCPL_WATER_FWSU(:) = 0.0 00301 XCPL_WATER_FWSV(:) = 0.0 00302 XCPL_WATER_SNET(:) = 0.0 00303 XCPL_WATER_HEAT(:) = 0.0 00304 XCPL_WATER_EVAP(:) = 0.0 00305 XCPL_WATER_RAIN(:) = 0.0 00306 XCPL_WATER_SNOW(:) = 0.0 00307 XCPL_WATER_FWSM(:) = 0.0 00308 ! 00309 ALLOCATE(XCPL_WATERICE_SNET(KLU)) 00310 ALLOCATE(XCPL_WATERICE_HEAT(KLU)) 00311 ALLOCATE(XCPL_WATERICE_EVAP(KLU)) 00312 XCPL_WATERICE_SNET(:) = 0.0 00313 XCPL_WATERICE_HEAT(:) = 0.0 00314 XCPL_WATERICE_EVAP(:) = 0.0 00315 ! 00316 ELSE 00317 ALLOCATE(XCPL_WATER_WIND(0)) 00318 ALLOCATE(XCPL_WATER_FWSU(0)) 00319 ALLOCATE(XCPL_WATER_FWSV(0)) 00320 ALLOCATE(XCPL_WATER_SNET(0)) 00321 ALLOCATE(XCPL_WATER_HEAT(0)) 00322 ALLOCATE(XCPL_WATER_EVAP(0)) 00323 ALLOCATE(XCPL_WATER_RAIN(0)) 00324 ALLOCATE(XCPL_WATER_SNOW(0)) 00325 ALLOCATE(XCPL_WATER_FWSM(0)) 00326 ALLOCATE(XCPL_WATERICE_SNET(0)) 00327 ALLOCATE(XCPL_WATERICE_HEAT(0)) 00328 ALLOCATE(XCPL_WATERICE_EVAP(0)) 00329 ENDIF 00330 IF (LHOOK) CALL DR_HOOK('DIAG_WATFLUX_INIT_N',1,ZHOOK_HANDLE) 00331 ! 00332 !------------------------------------------------------------------------------- 00333 ! 00334 END SUBROUTINE DIAG_WATFLUX_INIT_n