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