SURFEX v7.3
General documentation of Surfex
|
00001 ! ######### 00002 SUBROUTINE DIAG_SEAFLUX_INIT_n(HPROGRAM,KLU,KSW) 00003 ! ##################### 00004 ! 00005 !!**** *DIAG_SEAFLUX_INIT_n* - routine to initialize SEAFLUX 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 !! Modified 01/2006 : sea flux parameterization. 00032 !! Modified 08/2009 : cumulative sea flux 00033 !------------------------------------------------------------------------------- 00034 ! 00035 !* 0. DECLARATIONS 00036 ! ------------ 00037 ! 00038 USE MODD_SURF_PAR, ONLY : XUNDEF 00039 USE MODD_SURF_ATM, ONLY : LCPL_ESM 00040 USE MODD_DIAG_SURF_ATM_n,ONLY : LREAD_BUDGETC 00041 USE MODD_DIAG_SEAFLUX_n, ONLY : N2M, LSURF_BUDGET, LCOEF, LSURF_VARS, & 00042 LSURF_BUDGETC, LRESET_BUDGETC, & 00043 XRN, XH, XLE, XLEI, XGFLUX, & 00044 XRI, XCD, XCH, XCE, XZ0, XZ0H, XT2M, & 00045 XQ2M, XHU2M, XZON10M, XMER10M, XQS, XSWD, & 00046 XSWU, XLWD, XLWU, XT2M_MIN, XT2M_MAX, & 00047 XSWBD, XSWBU, XFMU, XFMV, XDIAG_SST, & 00048 XRNC, XHC, XLEC, XLEIC, XGFLUXC, & 00049 XSWDC, XSWUC, XLWDC, XLWUC, XFMUC, XFMVC, & 00050 XHU2M_MIN, XHU2M_MAX, XWIND10M, XWIND10M_MAX 00051 ! 00052 USE MODD_DIAG_OCEAN_n, ONLY : LDIAG_OCEAN, XTOCMOY, XSOCMOY, XUOCMOY, & 00053 XVOCMOY, XDOCMOY 00054 ! 00055 USE MODD_SEAFLUX_n, ONLY : XCPL_SEA_WIND, & 00056 XCPL_SEA_EVAP,XCPL_SEA_HEAT, & 00057 XCPL_SEA_SNET,XCPL_SEA_FWSU, & 00058 XCPL_SEA_FWSV,XCPL_SEA_RAIN, & 00059 XCPL_SEA_SNOW,XCPL_SEA_FWSM, & 00060 XCPL_SEAICE_EVAP, & 00061 XCPL_SEAICE_HEAT, & 00062 XCPL_SEAICE_SNET 00063 ! 00064 USE MODI_READ_SURF 00065 ! 00066 ! 00067 USE YOMHOOK ,ONLY : LHOOK, DR_HOOK 00068 USE PARKIND1 ,ONLY : JPRB 00069 ! 00070 IMPLICIT NONE 00071 ! 00072 !* 0.1 Declarations of arguments 00073 ! ------------------------- 00074 ! 00075 INTEGER, INTENT(IN) :: KLU ! size of arrays 00076 INTEGER, INTENT(IN) :: KSW ! number of SW spectral bands 00077 CHARACTER(LEN=6), INTENT(IN):: HPROGRAM ! program calling 00078 ! 00079 !* 0.2 Declarations of local variables 00080 ! ------------------------------- 00081 ! 00082 INTEGER :: IRESP ! IRESP : return-code if a problem appears 00083 CHARACTER(LEN=12) :: YREC ! Name of the article to be read 00084 REAL(KIND=JPRB) :: ZHOOK_HANDLE 00085 ! 00086 !------------------------------------------------------------------------------- 00087 ! 00088 !* surface energy budget 00089 ! 00090 IF (LHOOK) CALL DR_HOOK('DIAG_SEAFLUX_INIT_N',0,ZHOOK_HANDLE) 00091 ALLOCATE(XDIAG_SST(KLU)) 00092 XDIAG_SST = XUNDEF 00093 ! 00094 IF (LSURF_BUDGET.OR.LSURF_BUDGETC) THEN 00095 ALLOCATE(XRN (KLU)) 00096 ALLOCATE(XH (KLU)) 00097 ALLOCATE(XLE (KLU)) 00098 ALLOCATE(XLEI (KLU)) 00099 ALLOCATE(XGFLUX (KLU)) 00100 ALLOCATE(XSWD (KLU)) 00101 ALLOCATE(XSWU (KLU)) 00102 ALLOCATE(XLWD (KLU)) 00103 ALLOCATE(XLWU (KLU)) 00104 ALLOCATE(XSWBD (KLU,KSW)) 00105 ALLOCATE(XSWBU (KLU,KSW)) 00106 ALLOCATE(XFMU (KLU)) 00107 ALLOCATE(XFMV (KLU)) 00108 ! 00109 XRN = XUNDEF 00110 XH = XUNDEF 00111 XLE = XUNDEF 00112 XLEI = XUNDEF 00113 XGFLUX = XUNDEF 00114 XSWD = XUNDEF 00115 XSWU = XUNDEF 00116 XLWD = XUNDEF 00117 XLWU = XUNDEF 00118 XSWBD = XUNDEF 00119 XSWBU = XUNDEF 00120 XFMU = XUNDEF 00121 XFMV = XUNDEF 00122 ! 00123 ELSE 00124 ALLOCATE(XRN (0)) 00125 ALLOCATE(XH (0)) 00126 ALLOCATE(XLE (0)) 00127 ALLOCATE(XLEI (0)) 00128 ALLOCATE(XGFLUX (0)) 00129 ALLOCATE(XSWD (0)) 00130 ALLOCATE(XSWU (0)) 00131 ALLOCATE(XLWD (0)) 00132 ALLOCATE(XLWU (0)) 00133 ALLOCATE(XSWBD (0,0)) 00134 ALLOCATE(XSWBU (0,0)) 00135 ALLOCATE(XFMU (0)) 00136 ALLOCATE(XFMV (0)) 00137 ENDIF 00138 ! 00139 !* cumulative surface energy budget 00140 ! 00141 IF (LSURF_BUDGETC) THEN 00142 ! 00143 ALLOCATE(XRNC (KLU)) 00144 ALLOCATE(XHC (KLU)) 00145 ALLOCATE(XLEC (KLU)) 00146 ALLOCATE(XLEIC (KLU)) 00147 ALLOCATE(XGFLUXC (KLU)) 00148 ALLOCATE(XSWDC (KLU)) 00149 ALLOCATE(XSWUC (KLU)) 00150 ALLOCATE(XLWDC (KLU)) 00151 ALLOCATE(XLWUC (KLU)) 00152 ALLOCATE(XFMUC (KLU)) 00153 ALLOCATE(XFMVC (KLU)) 00154 ! 00155 IF (.NOT. LREAD_BUDGETC) THEN 00156 XRNC = 0.0 00157 XHC = 0.0 00158 XLEC = 0.0 00159 XLEIC = 0.0 00160 XGFLUXC = 0.0 00161 XSWDC = 0.0 00162 XSWUC = 0.0 00163 XLWDC = 0.0 00164 XLWUC = 0.0 00165 XFMUC = 0.0 00166 XFMVC = 0.0 00167 ELSEIF (LREAD_BUDGETC.AND.LRESET_BUDGETC) THEN 00168 XRNC = 0.0 00169 XHC = 0.0 00170 XLEC = 0.0 00171 XLEIC = 0.0 00172 XGFLUXC = 0.0 00173 XSWDC = 0.0 00174 XSWUC = 0.0 00175 XLWDC = 0.0 00176 XLWUC = 0.0 00177 XFMUC = 0.0 00178 XFMVC = 0.0 00179 ELSE 00180 YREC='RNC_SEA' 00181 CALL READ_SURF(HPROGRAM,YREC,XRNC,IRESP) 00182 YREC='HC_SEA' 00183 CALL READ_SURF(HPROGRAM,YREC,XHC ,IRESP) 00184 YREC='LEC_SEA' 00185 CALL READ_SURF(HPROGRAM,YREC,XLEC,IRESP) 00186 YREC='LEIC_SEA' 00187 CALL READ_SURF(HPROGRAM,YREC,XLEIC,IRESP) 00188 YREC='GFLUXC_SEA' 00189 CALL READ_SURF(HPROGRAM,YREC,XGFLUXC ,IRESP) 00190 YREC='SWDC_SEA' 00191 CALL READ_SURF(HPROGRAM,YREC,XSWDC,IRESP) 00192 YREC='SWUC_SEA' 00193 CALL READ_SURF(HPROGRAM,YREC,XSWUC,IRESP) 00194 YREC='LWDC_SEA' 00195 CALL READ_SURF(HPROGRAM,YREC,XLWDC,IRESP) 00196 YREC='LWUC_SEA' 00197 CALL READ_SURF(HPROGRAM,YREC,XLWUC,IRESP) 00198 YREC='FMUC_SEA' 00199 CALL READ_SURF(HPROGRAM,YREC,XFMUC,IRESP) 00200 YREC='FMVC_SEA' 00201 CALL READ_SURF(HPROGRAM,YREC,XFMVC,IRESP) 00202 ENDIF 00203 ELSE 00204 ALLOCATE(XRNC (0)) 00205 ALLOCATE(XHC (0)) 00206 ALLOCATE(XLEC (0)) 00207 ALLOCATE(XLEIC (0)) 00208 ALLOCATE(XGFLUXC (0)) 00209 ALLOCATE(XSWDC (0)) 00210 ALLOCATE(XSWUC (0)) 00211 ALLOCATE(XLWDC (0)) 00212 ALLOCATE(XLWUC (0)) 00213 ALLOCATE(XFMUC (0)) 00214 ALLOCATE(XFMVC (0)) 00215 ENDIF 00216 ! 00217 !* parameters at 2m 00218 ! 00219 IF (N2M>=1) THEN 00220 ALLOCATE(XRI (KLU)) 00221 ALLOCATE(XT2M (KLU)) 00222 ALLOCATE(XT2M_MIN (KLU)) 00223 ALLOCATE(XT2M_MAX (KLU)) 00224 ALLOCATE(XQ2M (KLU)) 00225 ALLOCATE(XHU2M (KLU)) 00226 ALLOCATE(XHU2M_MIN(KLU)) 00227 ALLOCATE(XHU2M_MAX(KLU)) 00228 ALLOCATE(XZON10M (KLU)) 00229 ALLOCATE(XMER10M (KLU)) 00230 ALLOCATE(XWIND10M (KLU)) 00231 ALLOCATE(XWIND10M_MAX(KLU)) 00232 ! 00233 XRI = XUNDEF 00234 XT2M = XUNDEF 00235 XT2M_MIN = XUNDEF 00236 XT2M_MAX = 0.0 00237 XQ2M = XUNDEF 00238 XHU2M = XUNDEF 00239 XHU2M_MIN= XUNDEF 00240 XHU2M_MAX=-XUNDEF 00241 XZON10M = XUNDEF 00242 XMER10M = XUNDEF 00243 XWIND10M = XUNDEF 00244 XWIND10M_MAX = 0.0 00245 ELSE 00246 ALLOCATE(XRI (0)) 00247 ALLOCATE(XT2M (0)) 00248 ALLOCATE(XT2M_MIN (0)) 00249 ALLOCATE(XT2M_MAX (0)) 00250 ALLOCATE(XQ2M (0)) 00251 ALLOCATE(XHU2M (0)) 00252 ALLOCATE(XHU2M_MIN(0)) 00253 ALLOCATE(XHU2M_MAX(0)) 00254 ALLOCATE(XZON10M (0)) 00255 ALLOCATE(XMER10M (0)) 00256 ALLOCATE(XWIND10M (0)) 00257 ALLOCATE(XWIND10M_MAX(0)) 00258 END IF 00259 ! 00260 !* transfer coefficients 00261 ! 00262 IF (LCOEF) THEN 00263 ALLOCATE(XCD (KLU)) 00264 ALLOCATE(XCH (KLU)) 00265 ALLOCATE(XCE (KLU)) 00266 ALLOCATE(XZ0 (KLU)) 00267 ALLOCATE(XZ0H (KLU)) 00268 ! 00269 XCD = XUNDEF 00270 XCH = XUNDEF 00271 XCE = XUNDEF 00272 XZ0 = XUNDEF 00273 XZ0H = XUNDEF 00274 ELSE 00275 ALLOCATE(XCD (0)) 00276 ALLOCATE(XCH (0)) 00277 ALLOCATE(XCE (0)) 00278 ALLOCATE(XZ0 (0)) 00279 ALLOCATE(XZ0H (0)) 00280 END IF 00281 ! 00282 ! 00283 !* surface humidity 00284 ! 00285 IF (LSURF_VARS) THEN 00286 ALLOCATE(XQS (KLU)) 00287 ! 00288 XQS = XUNDEF 00289 ELSE 00290 ALLOCATE(XQS (0)) 00291 END IF 00292 ! 00293 !* ocean diag 00294 ! 00295 IF (LDIAG_OCEAN) THEN 00296 ALLOCATE(XTOCMOY (KLU)) 00297 ALLOCATE(XSOCMOY (KLU)) 00298 ALLOCATE(XUOCMOY (KLU)) 00299 ALLOCATE(XVOCMOY (KLU)) 00300 ALLOCATE(XDOCMOY (KLU)) 00301 ! 00302 XTOCMOY(:)=XUNDEF 00303 XSOCMOY(:)=XUNDEF 00304 XUOCMOY(:)=XUNDEF 00305 XVOCMOY(:)=XUNDEF 00306 XDOCMOY(:)=XUNDEF 00307 ELSE 00308 ALLOCATE(XTOCMOY (0)) 00309 ALLOCATE(XSOCMOY (0)) 00310 ALLOCATE(XUOCMOY (0)) 00311 ALLOCATE(XVOCMOY (0)) 00312 ALLOCATE(XDOCMOY (0)) 00313 ENDIF 00314 ! 00315 !* Earth system model coupling variables 00316 ! 00317 IF(LCPL_ESM)THEN 00318 ! 00319 ALLOCATE(XCPL_SEA_WIND(KLU)) 00320 ALLOCATE(XCPL_SEA_FWSU(KLU)) 00321 ALLOCATE(XCPL_SEA_FWSV(KLU)) 00322 ALLOCATE(XCPL_SEA_SNET(KLU)) 00323 ALLOCATE(XCPL_SEA_HEAT(KLU)) 00324 ALLOCATE(XCPL_SEA_EVAP(KLU)) 00325 ALLOCATE(XCPL_SEA_RAIN(KLU)) 00326 ALLOCATE(XCPL_SEA_SNOW(KLU)) 00327 ALLOCATE(XCPL_SEA_FWSM(KLU)) 00328 XCPL_SEA_WIND(:) = 0.0 00329 XCPL_SEA_FWSU(:) = 0.0 00330 XCPL_SEA_FWSV(:) = 0.0 00331 XCPL_SEA_SNET(:) = 0.0 00332 XCPL_SEA_HEAT(:) = 0.0 00333 XCPL_SEA_EVAP(:) = 0.0 00334 XCPL_SEA_RAIN(:) = 0.0 00335 XCPL_SEA_SNOW(:) = 0.0 00336 XCPL_SEA_FWSM(:) = 0.0 00337 ! 00338 ALLOCATE(XCPL_SEAICE_SNET(KLU)) 00339 ALLOCATE(XCPL_SEAICE_HEAT(KLU)) 00340 ALLOCATE(XCPL_SEAICE_EVAP(KLU)) 00341 XCPL_SEAICE_SNET(:) = 0.0 00342 XCPL_SEAICE_HEAT(:) = 0.0 00343 XCPL_SEAICE_EVAP(:) = 0.0 00344 ! 00345 ELSE 00346 ALLOCATE(XCPL_SEA_WIND(0)) 00347 ALLOCATE(XCPL_SEA_FWSU(0)) 00348 ALLOCATE(XCPL_SEA_FWSV(0)) 00349 ALLOCATE(XCPL_SEA_SNET(0)) 00350 ALLOCATE(XCPL_SEA_HEAT(0)) 00351 ALLOCATE(XCPL_SEA_EVAP(0)) 00352 ALLOCATE(XCPL_SEA_RAIN(0)) 00353 ALLOCATE(XCPL_SEA_SNOW(0)) 00354 ALLOCATE(XCPL_SEA_FWSM(0)) 00355 ! 00356 ALLOCATE(XCPL_SEAICE_SNET(0)) 00357 ALLOCATE(XCPL_SEAICE_HEAT(0)) 00358 ALLOCATE(XCPL_SEAICE_EVAP(0)) 00359 ENDIF 00360 IF (LHOOK) CALL DR_HOOK('DIAG_SEAFLUX_INIT_N',1,ZHOOK_HANDLE) 00361 ! 00362 !------------------------------------------------------------------------------- 00363 ! 00364 END SUBROUTINE DIAG_SEAFLUX_INIT_n