SURFEX v7.3
General documentation of Surfex
 All Classes Files Functions Variables Typedefs
/home/dasprezs/EXPORT_v7_3/src/SURFEX/init_watfluxn.F90
Go to the documentation of this file.
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