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