SURFEX v7.3
General documentation of Surfex
|
00001 ! ############################################################# 00002 SUBROUTINE INIT_WATFLUX_n(HPROGRAM,HINIT, & 00003 KI,KSV,KSW, & 00004 HSV,PCO2,PRHOA, & 00005 PZENITH,PAZIM,PSW_BANDS,PDIR_ALB,PSCA_ALB, & 00006 PEMIS,PTSRAD, & 00007 KYEAR, KMONTH,KDAY, PTIME, & 00008 HATMFILE,HATMFILETYPE, & 00009 HTEST ) 00010 ! ############################################################# 00011 ! 00012 !!**** *INIT_WATFLUX_n* - routine to initialize WATFLUX 00013 !! 00014 !! PURPOSE 00015 !! ------- 00016 !! 00017 !!** METHOD 00018 !! ------ 00019 !! 00020 !! EXTERNAL 00021 !! -------- 00022 !! 00023 !! 00024 !! IMPLICIT ARGUMENTS 00025 !! ------------------ 00026 !! 00027 !! REFERENCE 00028 !! --------- 00029 !! 00030 !! 00031 !! AUTHOR 00032 !! ------ 00033 !! V. Masson *Meteo France* 00034 !! 00035 !! MODIFICATIONS 00036 !! ------------- 00037 !! Original 01/2003 00038 !! B. Decharme 08/2009 : specific treatment for water/ice in the Earth System Model 00039 !! B. Decharme 07/2011 : read pgd+prep 00040 !------------------------------------------------------------------------------- 00041 ! 00042 !* 0. DECLARATIONS 00043 ! ------------ 00044 ! 00045 USE MODD_READ_NAMELIST, ONLY : LNAM_READ 00046 USE MODD_SURF_ATM, ONLY : LCPL_ESM 00047 ! 00048 USE MODD_CSTS, ONLY : XTT 00049 USE MODD_WATFLUX_n, ONLY : XCOVER, XDIR_ALB, XSCA_ALB, XEMIS, XTS, XTSTEP, & 00050 CWAT_ALB, XOUT_TSTEP, TTIME, LSBL, CINTERPOL_TS, & 00051 LINTERPOL_TS, XTICE, XICE_ALB 00052 USE MODD_DIAG_WATFLUX_n, ONLY : N2M, LSURF_BUDGET, LRAD_BUDGET, XDIAG_TSTEP, L2M_MIN_ZS, & 00053 LCOEF, LSURF_VARS, LSURF_BUDGETC, LRESET_BUDGETC 00054 USE MODD_CH_WATFLUX_n, ONLY : XDEP, CCH_DRY_DEP, CSV, CCH_NAMES, & 00055 NBEQ, NSV_CHSBEG, NSV_CHSEND, & 00056 NAEREQ, NSV_AERBEG, NSV_AEREND, CAER_NAMES,& 00057 NSV_DSTBEG, NSV_DSTEND, NDSTEQ, CDSTNAMES, & 00058 NSV_SLTBEG, NSV_SLTEND, NSLTEQ, CSLTNAMES 00059 USE MODD_CHS_AEROSOL, ONLY: LVARSIGI, LVARSIGJ 00060 USE MODD_DST_SURF, ONLY: LVARSIG_DST, NDSTMDE, NDST_MDEBEG, LRGFIX_DST 00061 USE MODD_SLT_SURF, ONLY: LVARSIG_SLT, NSLTMDE, NSLT_MDEBEG, LRGFIX_SLT 00062 USE MODD_SURF_PAR, ONLY : XUNDEF, NUNDEF 00063 ! 00064 USE MODI_INIT_IO_SURF_n 00065 USE MODI_DEFAULT_CH_DEP 00066 USE MODI_DEFAULT_WATFLUX 00067 USE MODI_DEFAULT_DIAG_WATFLUX 00068 USE MODI_READ_DEFAULT_WATFLUX_n 00069 USE MODI_READ_WATFLUX_CONF_n 00070 USE MODI_READ_WATFLUX_n 00071 USE MODI_READ_PGD_WATFLUX_n 00072 USE MODI_DIAG_WATFLUX_INIT_n 00073 USE MODI_END_IO_SURF_n 00074 USE MODI_GET_LUOUT 00075 USE MODI_READ_SURF 00076 USE MODI_READ_WATFLUX_DATE 00077 USE MODI_READ_NAM_PREP_WATFLUX_n 00078 USE MODI_INIT_CHEMICAL_n 00079 USE MODI_PREP_CTRL_WATFLUX 00080 USE MODI_UPDATE_RAD_SEAWAT 00081 ! 00082 USE MODI_READ_WATFLUX_SBL_n 00083 USE MODI_SET_SURFEX_FILEIN 00084 ! 00085 USE YOMHOOK ,ONLY : LHOOK, DR_HOOK 00086 USE PARKIND1 ,ONLY : JPRB 00087 ! 00088 USE MODI_ABOR1_SFX 00089 ! 00090 USE MODI_WRITE_COVER_TEX_WATER 00091 ! 00092 IMPLICIT NONE 00093 ! 00094 !* 0.1 Declarations of arguments 00095 ! ------------------------- 00096 ! 00097 CHARACTER(LEN=6), INTENT(IN) :: HPROGRAM ! program calling surf. schemes 00098 CHARACTER(LEN=3), INTENT(IN) :: HINIT ! choice of fields to initialize 00099 INTEGER, INTENT(IN) :: KI ! number of points 00100 INTEGER, INTENT(IN) :: KSV ! number of scalars 00101 INTEGER, INTENT(IN) :: KSW ! number of short-wave spectral bands 00102 CHARACTER(LEN=6), DIMENSION(KSV), INTENT(IN) :: HSV ! name of all scalar variables 00103 REAL, DIMENSION(KI), INTENT(IN) :: PCO2 ! CO2 concentration (kg/m3) 00104 REAL, DIMENSION(KI), INTENT(IN) :: PRHOA ! air density 00105 REAL, DIMENSION(KI), INTENT(IN) :: PZENITH ! solar zenithal angle 00106 REAL, DIMENSION(KI), INTENT(IN) :: PAZIM ! solar azimuthal angle (rad from N, clock) 00107 REAL, DIMENSION(KSW), INTENT(IN) :: PSW_BANDS ! middle wavelength of each band 00108 REAL, DIMENSION(KI,KSW),INTENT(OUT) :: PDIR_ALB ! direct albedo for each band 00109 REAL, DIMENSION(KI,KSW),INTENT(OUT) :: PSCA_ALB ! diffuse albedo for each band 00110 REAL, DIMENSION(KI), INTENT(OUT) :: PEMIS ! emissivity 00111 REAL, DIMENSION(KI), INTENT(OUT) :: PTSRAD ! radiative temperature 00112 INTEGER, INTENT(IN) :: KYEAR ! current year (UTC) 00113 INTEGER, INTENT(IN) :: KMONTH ! current month (UTC) 00114 INTEGER, INTENT(IN) :: KDAY ! current day (UTC) 00115 REAL, INTENT(IN) :: PTIME ! current time since 00116 ! midnight (UTC, s) 00117 ! 00118 CHARACTER(LEN=28), INTENT(IN) :: HATMFILE ! atmospheric file name 00119 CHARACTER(LEN=6), INTENT(IN) :: HATMFILETYPE! atmospheric file type 00120 CHARACTER(LEN=2), INTENT(IN) :: HTEST ! must be equal to 'OK' 00121 00122 ! 00123 ! 00124 !* 0.2 Declarations of local variables 00125 ! ------------------------------- 00126 ! 00127 INTEGER :: ILU ! sizes of WATFLUX arrays 00128 INTEGER :: ILUOUT ! unit of output listing file 00129 INTEGER :: IRESP ! return code 00130 REAL(KIND=JPRB) :: ZHOOK_HANDLE 00131 ! 00132 !------------------------------------------------------------------------------- 00133 ! 00134 ! Initialisation for IO 00135 ! 00136 IF (LHOOK) CALL DR_HOOK('INIT_WATFLUX_N',0,ZHOOK_HANDLE) 00137 CALL GET_LUOUT(HPROGRAM,ILUOUT) 00138 ! 00139 IF (HTEST/='OK') THEN 00140 CALL ABOR1_SFX('INIT_WATFLUXN: FATAL ERROR DURING ARGUMENT TRANSFER') 00141 END IF 00142 ! 00143 ! Other little things 00144 ! 00145 ! 00146 IF (LNAM_READ) THEN 00147 ! 00148 ! 00149 !* 0. Defaults 00150 ! -------- 00151 ! 00152 ! 0.1. Hard defaults 00153 ! 00154 CALL DEFAULT_WATFLUX(XTSTEP,XOUT_TSTEP,CWAT_ALB,CINTERPOL_TS) 00155 CALL DEFAULT_CH_DEP(CCH_DRY_DEP) 00156 CALL DEFAULT_DIAG_WATFLUX(N2M,LSURF_BUDGET,L2M_MIN_ZS,LRAD_BUDGET,LCOEF,LSURF_VARS, & 00157 LSURF_BUDGETC,LRESET_BUDGETC,XDIAG_TSTEP ) 00158 ! 00159 ENDIF 00160 ! 00161 ! 0.2. Defaults from file header 00162 ! 00163 CALL READ_DEFAULT_WATFLUX_n(HPROGRAM) 00164 ! 00165 !* 1.1 Reading of configuration: 00166 ! ------------------------- 00167 ! 00168 ! 00169 CALL READ_WATFLUX_CONF_n(HPROGRAM) 00170 ! 00171 LINTERPOL_TS=.FALSE. 00172 IF(LCPL_ESM)THEN 00173 ! No TS water interpolation in Earth System Model 00174 CINTERPOL_TS='NONE ' 00175 LINTERPOL_TS=.FALSE. 00176 ELSEIF(CINTERPOL_TS/='NONE ')THEN 00177 LINTERPOL_TS=.TRUE. 00178 ENDIF 00179 ! 00180 !------------------------------------------------------------------------------- 00181 ! 00182 !* 1. Cover fields and grid: 00183 ! --------------------- 00184 !* date 00185 ! 00186 SELECT CASE (HINIT) 00187 CASE ('PGD') 00188 TTIME%TDATE%YEAR = NUNDEF 00189 TTIME%TDATE%MONTH= NUNDEF 00190 TTIME%TDATE%DAY = NUNDEF 00191 TTIME%TIME = XUNDEF 00192 00193 CASE ('PRE') 00194 CALL PREP_CTRL_WATFLUX(N2M,LSURF_BUDGET,L2M_MIN_ZS,LRAD_BUDGET,LCOEF,LSURF_VARS,& 00195 ILUOUT,LSURF_BUDGETC ) 00196 IF (LNAM_READ) CALL READ_NAM_PREP_WATFLUX_n(HPROGRAM) 00197 CALL READ_WATFLUX_DATE(HPROGRAM,HINIT,ILUOUT,HATMFILE,HATMFILETYPE,KYEAR,KMONTH,KDAY,PTIME,TTIME) 00198 00199 CASE DEFAULT 00200 CALL INIT_IO_SURF_n(HPROGRAM,'WATER ','WATFLX','READ ') 00201 CALL READ_SURF(HPROGRAM,'DTCUR',TTIME,IRESP) 00202 CALL END_IO_SURF_n(HPROGRAM) 00203 END SELECT 00204 ! 00205 !----------------------------------------------------------------------------------------------------- 00206 ! READ PGD FILE 00207 !----------------------------------------------------------------------------------------------------- 00208 ! 00209 ! 1.3. Schemes used 00210 ! 00211 ! Initialisation for IO 00212 ! 00213 CALL SET_SURFEX_FILEIN(HPROGRAM,'PGD ') ! change input file name to pgd name 00214 CALL INIT_IO_SURF_n(HPROGRAM,'WATER ','WATFLX','READ ') 00215 ! 00216 ! Reading of the fields 00217 ! 00218 CALL READ_PGD_WATFLUX_n(HPROGRAM) 00219 ! 00220 !------------------------------------------------------------------------------- 00221 ! 00222 !* if only physiographic fields are to be initialized, stop here. 00223 ! 00224 CALL WRITE_COVER_TEX_WATER 00225 ! 00226 ! End of IO 00227 ! 00228 CALL END_IO_SURF_n(HPROGRAM) 00229 CALL SET_SURFEX_FILEIN(HPROGRAM,'PREP') ! restore input file name 00230 ! 00231 !----------------------------------------------------------------------------------------------------- 00232 ! END READ PGD FILE 00233 !----------------------------------------------------------------------------------------------------- 00234 ! 00235 IF (HINIT/='ALL') THEN 00236 IF (LHOOK) CALL DR_HOOK('INIT_WATFLUX_N',1,ZHOOK_HANDLE) 00237 RETURN 00238 END IF 00239 ! 00240 !------------------------------------------------------------------------------- 00241 ! 00242 ! Initialisation for IO 00243 ! 00244 CALL INIT_IO_SURF_n(HPROGRAM,'WATER ','WATFLX','READ ') 00245 ! 00246 ! 00247 !* 2. Prognostic and cover fields: 00248 ! --------------------------- 00249 ! 00250 CALL READ_WATFLUX_n(HPROGRAM) 00251 ! 00252 ILU = SIZE(XCOVER,1) 00253 ! 00254 ! 00255 !* 3. Specific fields when using earth system model (Ice temperature) 00256 ! --------------------------------------------------------------- 00257 ! 00258 IF(LCPL_ESM)THEN 00259 ALLOCATE(XTICE (ILU)) 00260 ALLOCATE(XICE_ALB(ILU)) 00261 XTICE (:)=XUNDEF 00262 XICE_ALB(:)=XUNDEF 00263 ELSE 00264 ALLOCATE(XTICE (0)) 00265 ALLOCATE(XICE_ALB(0)) 00266 ENDIF 00267 ! 00268 !* 4. Albedo, emissivity and output radiative fields on open water and ice 00269 ! -------------------------------------------------------------------- 00270 ! 00271 ALLOCATE(XDIR_ALB (ILU)) 00272 ALLOCATE(XSCA_ALB (ILU)) 00273 ALLOCATE(XEMIS (ILU)) 00274 XDIR_ALB = 0.0 00275 XSCA_ALB = 0.0 00276 XEMIS = 0.0 00277 ! 00278 CALL UPDATE_RAD_SEAWAT(CWAT_ALB,XTS,PZENITH,XTT,XEMIS,XDIR_ALB,& 00279 XSCA_ALB,PDIR_ALB,PSCA_ALB,PEMIS,PTSRAD ) 00280 ! 00281 !------------------------------------------------------------------------------- 00282 ! 00283 !* 5. SBL air fields: 00284 ! -------------- 00285 ! 00286 CALL READ_WATFLUX_SBL_n(HPROGRAM) 00287 ! 00288 !------------------------------------------------------------------------------- 00289 ! 00290 !* 6. Chemistry / dust 00291 ! ---------------- 00292 ! 00293 CALL INIT_CHEMICAL_n(ILUOUT, KSV, HSV, NBEQ, CSV, NAEREQ, & 00294 NSV_CHSBEG, NSV_CHSEND, NSV_AERBEG, NSV_AEREND, & 00295 CCH_NAMES, CAER_NAMES, NDSTEQ, NSV_DSTBEG, & 00296 NSV_DSTEND, NSLTEQ, NSV_SLTBEG, NSV_SLTEND, & 00297 HDSTNAMES=CDSTNAMES, HSLTNAMES=CSLTNAMES ) 00298 ! 00299 !* depositiion scheme 00300 ! 00301 00302 IF (NBEQ>0 .AND. CCH_DRY_DEP=='WES89') THEN 00303 ALLOCATE(XDEP(ILU,NBEQ)) 00304 ELSE 00305 ALLOCATE(XDEP(0,0)) 00306 END IF 00307 ! 00308 !------------------------------------------------------------------------------- 00309 ! 00310 !* 7. diagnostics initialization 00311 ! -------------------------- 00312 ! 00313 CALL DIAG_WATFLUX_INIT_n(HPROGRAM,ILU,KSW) 00314 ! 00315 !------------------------------------------------------------------------------- 00316 ! 00317 ! End of IO 00318 ! 00319 CALL END_IO_SURF_n(HPROGRAM) 00320 IF (LHOOK) CALL DR_HOOK('INIT_WATFLUX_N',1,ZHOOK_HANDLE) 00321 ! 00322 END SUBROUTINE INIT_WATFLUX_n