SURFEX v7.3
General documentation of Surfex
 All Classes Files Functions Variables Typedefs
/home/dasprezs/EXPORT_v7_3/src/SURFEX/prep_flake.F90
Go to the documentation of this file.
00001 !     #########
00002 SUBROUTINE PREP_FLAKE(HPROGRAM,HATMFILE,HATMFILETYPE,HPGDFILE,HPGDFILETYPE)
00003 !     #################################################################################
00004 !
00005 !!****  *PREP_FLAKE* - prepares FLAKE fields
00006 !!
00007 !!    PURPOSE
00008 !!    -------
00009 !
00010 !!**  METHOD
00011 !!    ------
00012 !!
00013 !!    REFERENCE
00014 !!    ---------
00015 !!      
00016 !!
00017 !!    AUTHOR
00018 !!    ------
00019 !!     S. Malardel
00020 !!
00021 !!    MODIFICATIONS
00022 !!    -------------
00023 !!      Original    01/2004
00024 !!      S. Riette   06/2009 PREP_FLAKE_SBL has no more argument
00025 !!      E. Kourzeneva 09/2010 (i)  Change the default initialisation,
00026 !!                            (ii) Include the possibility to use 
00027 !!                                 lake climate data
00028 !!------------------------------------------------------------------
00029 !
00030 !
00031 USE MODI_PREP_HOR_FLAKE_FIELD
00032 USE MODI_PREP_VER_FLAKE
00033 USE MODI_PREP_FLAKE_SBL
00034 USE MODI_PREP_OUTPUT_GRID
00035 USE MODI_GET_LUOUT
00036 USE MODI_CLI_LAKE
00037 !
00038 USE MODN_PREP_FLAKE
00039 !
00040 USE MODD_READ_NAMELIST,ONLY : LNAM_READ
00041 USE MODD_SURF_ATM,     ONLY : LVERTSHIFT
00042 USE MODD_PREP,         ONLY : XZS_LS
00043 USE MODD_PREP_FLAKE,   ONLY : LCLIM_LAKE
00044 USE MODD_SURF_PAR,     ONLY : XUNDEF
00045 !
00046 USE MODD_FLAKE_n,      ONLY : XTS, XT_SNOW, XT_ICE, XT_MNW, XT_WML, XT_BOT, XT_B1,   &
00047                                 XCT, XH_SNOW, XH_ICE, XH_ML, XH_B1, &
00048                                 XWATER_DEPTH, LSBL, XZ0, XUSTAR  
00049 !
00050 USE MODD_FLAKE_GRID_n, ONLY : CGRID, XGRID_PAR, XLAT, XLON
00051 USE MODD_CSTS,       ONLY : XTT
00052 
00053 !
00054 USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
00055 USE PARKIND1  ,ONLY : JPRB
00056 !
00057 USE MODI_CLEAN_PREP_OUTPUT_GRID
00058 !
00059 USE MODI_ABOR1_SFX
00060 IMPLICIT NONE
00061 !
00062 !*      0.1    declarations of arguments
00063 !
00064  CHARACTER(LEN=6),   INTENT(IN)  :: HPROGRAM  ! program calling surf. schemes
00065  CHARACTER(LEN=28),  INTENT(IN)  :: HATMFILE    ! name of the Atmospheric file
00066  CHARACTER(LEN=6),   INTENT(IN)  :: HATMFILETYPE! type of the Atmospheric file
00067  CHARACTER(LEN=28),  INTENT(IN)  :: HPGDFILE    ! name of the Atmospheric file
00068  CHARACTER(LEN=6),   INTENT(IN)  :: HPGDFILETYPE! type of the Atmospheric file
00069 !
00070 !*      0.2    declarations of local variables
00071 !
00072 INTEGER :: ILUOUT
00073 LOGICAL :: GNOVALUE       ! if the variable is not defined
00074 REAL(KIND=JPRB) :: ZHOOK_HANDLE
00075 !-------------------------------------------------------------------------------------
00076 !
00077 !*      1.     Default of configuration
00078 !
00079 !
00080 IF (LHOOK) CALL DR_HOOK('PREP_FLAKE',0,ZHOOK_HANDLE)
00081  CALL GET_LUOUT(HPROGRAM,ILUOUT)
00082 !
00083  CALL PREP_OUTPUT_GRID(ILUOUT,CGRID,XGRID_PAR,XLAT,XLON)
00084 !
00085 !-------------------------------------------------------------------------------------
00086 !
00087 !*      2.     Reading and horizontal interpolations
00088 !
00089 !
00090 !*      2.0    Large scale orography
00091 !
00092  CALL PREP_HOR_FLAKE_FIELD(HPROGRAM,'ZS     ',HATMFILE,HATMFILETYPE,HPGDFILE,HPGDFILETYPE)
00093 !
00094 !*      2.1    FLake variables
00095 !
00096 GNOVALUE = .FALSE.
00097 !
00098 IF (.NOT.LCLIM_LAKE) THEN
00099   !
00100   CALL PREP_HOR_FLAKE_FIELD(HPROGRAM,'TS     ',HATMFILE,HATMFILETYPE,HPGDFILE,HPGDFILETYPE,GNOVALUE)
00101   IF (GNOVALUE) CALL ABOR1_SFX('PREP_FLAKE: AT LEAST TS SHOULD BE GIVEN!')
00102   !
00103   CALL PREP_HOR_FLAKE_FIELD(HPROGRAM,'T_SNOW ',HATMFILE,HATMFILETYPE,HPGDFILE,HPGDFILETYPE,GNOVALUE)
00104   !
00105   IF (.NOT.GNOVALUE) CALL PREP_HOR_FLAKE_FIELD(HPROGRAM,'T_ICE  ',HATMFILE,HATMFILETYPE,&
00106         HPGDFILE,HPGDFILETYPE,GNOVALUE)
00107   !
00108   IF (.NOT.GNOVALUE) CALL PREP_HOR_FLAKE_FIELD(HPROGRAM,'T_WML  ',HATMFILE,HATMFILETYPE,&
00109         HPGDFILE,HPGDFILETYPE,GNOVALUE)
00110   !
00111   ALLOCATE(XT_MNW(SIZE(XLAT)))
00112   !
00113   IF (.NOT.GNOVALUE) CALL PREP_HOR_FLAKE_FIELD(HPROGRAM,'T_BOT  ',HATMFILE,HATMFILETYPE,&
00114         HPGDFILE,HPGDFILETYPE,GNOVALUE)
00115   !
00116   IF (.NOT.GNOVALUE) CALL PREP_HOR_FLAKE_FIELD(HPROGRAM,'T_B1   ',HATMFILE,HATMFILETYPE,&
00117         HPGDFILE,HPGDFILETYPE,GNOVALUE)
00118   !
00119   IF (.NOT.GNOVALUE) CALL PREP_HOR_FLAKE_FIELD(HPROGRAM,'CT     ',HATMFILE,HATMFILETYPE,&
00120         HPGDFILE,HPGDFILETYPE,GNOVALUE)
00121   !
00122   IF (.NOT.GNOVALUE) CALL PREP_HOR_FLAKE_FIELD(HPROGRAM,'H_SNOW ',HATMFILE,HATMFILETYPE,&
00123         HPGDFILE,HPGDFILETYPE,GNOVALUE)
00124   !
00125   IF (.NOT.GNOVALUE) CALL PREP_HOR_FLAKE_FIELD(HPROGRAM,'H_ICE  ',HATMFILE,HATMFILETYPE,&
00126         HPGDFILE,HPGDFILETYPE,GNOVALUE)
00127   !
00128   IF (.NOT.GNOVALUE) CALL PREP_HOR_FLAKE_FIELD(HPROGRAM,'H_ML   ',HATMFILE,HATMFILETYPE,&
00129         HPGDFILE,HPGDFILETYPE,GNOVALUE)
00130   !
00131   IF (.NOT.GNOVALUE) CALL PREP_HOR_FLAKE_FIELD(HPROGRAM,'H_B1   ',HATMFILE,HATMFILETYPE,&
00132         HPGDFILE,HPGDFILETYPE,GNOVALUE)
00133   !
00134 ENDIF
00135 !
00136 IF (LCLIM_LAKE .OR. GNOVALUE) THEN
00137   IF (LCLIM_LAKE) THEN
00138     ALLOCATE(XTS(SIZE(XLAT)))
00139     XTS(:)=XUNDEF
00140   ENDIF
00141   ALLOCATE(XT_SNOW(SIZE(XLAT))) 
00142   ALLOCATE(XT_ICE(SIZE(XLAT)))  
00143   ALLOCATE(XT_WML(SIZE(XLAT)))
00144   ALLOCATE(XT_MNW(SIZE(XLAT))) 
00145   ALLOCATE(XT_BOT(SIZE(XLAT)))  
00146   ALLOCATE(XT_B1(SIZE(XLAT)))
00147   ALLOCATE(XCT(SIZE(XLAT)))  
00148   ALLOCATE(XH_SNOW(SIZE(XLAT)))  
00149   ALLOCATE(XH_ICE(SIZE(XLAT)))
00150   ALLOCATE(XH_ML(SIZE(XLAT)))
00151   ALLOCATE(XH_B1(SIZE(XLAT)))  
00152   XT_SNOW(:)=XUNDEF
00153   XT_ICE(:)=XUNDEF
00154   XT_WML(:)=XUNDEF
00155   XT_MNW(:)=XUNDEF
00156   XT_BOT(:)=XUNDEF
00157   XT_B1(:)=XUNDEF
00158   XCT(:)=XUNDEF
00159   XH_SNOW(:)=XUNDEF
00160   XH_ICE(:)=XUNDEF
00161   XH_ML(:)=XUNDEF
00162   XH_B1(:)=XUNDEF
00163 ENDIF
00164 !
00165 !-------------------------------------------------------------------------------------
00166 !
00167  CALL CLEAN_PREP_OUTPUT_GRID
00168 !
00169 !*      2.2    Roughness
00170 !
00171 ALLOCATE(XZ0(SIZE(XTS)))
00172 XZ0 = 0.001
00173 !
00174 !*      2.2    Friction velocity
00175 !
00176 ALLOCATE(XUSTAR(SIZE(XTS)))
00177 XUSTAR = 0.
00178 !
00179 !-------------------------------------------------------------------------------------
00180 
00181 !
00182 !*      3.     Vertical interpolations of all variables
00183 !
00184 IF(.NOT.LCLIM_LAKE) THEN
00185   IF (LVERTSHIFT)THEN    
00186     CALL PREP_VER_FLAKE
00187     WRITE(ILUOUT,*) "WARNING: You want the vertical shift for lakes?"
00188     WRITE(ILUOUT,*) "WARNING: Vertical shift for the lake temperature profile is impossible!"
00189     WRITE(ILUOUT,*) "WARNING: So, set the default vertical profiles from the shifted surface temperature."    !
00190     GNOVALUE=.TRUE.
00191   ENDIF
00192 END IF
00193 !
00194 DEALLOCATE(XZS_LS)
00195 !-------------------------------------------------------------------------------------
00196 !
00197 !*      4.    Compute T_MNW and give the default profile if needed 
00198 !              or read data from climate files 
00199 !
00200 IF (LCLIM_LAKE) THEN
00201  CALL CLI_LAKE
00202 ELSEIF (.NOT.GNOVALUE) THEN
00203   XT_MNW(:)=XT_WML(:)-(XT_WML(:)-XT_BOT(:))*(1.-XH_ML(:)/XWATER_DEPTH(:))*XCT(:)
00204 ELSE
00205   WRITE(ILUOUT,*) "WARNING! One of the lake profile variales was not indicated, so set the default profile!"
00206   XT_WML=MAX(XTS(:),XTT)  
00207   XT_SNOW=MIN(XTS(:),XTT)
00208   XT_ICE=MIN(XTS(:),XTT)
00209   XH_B1=0.0 
00210   XCT=0.5   
00211   XH_SNOW=0.0   
00212   WHERE (XTS <= XTT)
00213    XT_BOT=XTT+4.
00214    XT_B1=XTT+3.9
00215    XH_ICE=0.01
00216    XH_ML=XWATER_DEPTH/2.
00217    XT_MNW=XT_WML-(XT_WML-XT_BOT)*(1.-XH_ML/XWATER_DEPTH)*XCT
00218   ELSEWHERE
00219    XT_BOT=XTS
00220    XT_B1=XTS-0.1
00221    XH_ICE=0.0
00222    XH_ML=XWATER_DEPTH
00223    XT_MNW=XTS 
00224   END WHERE
00225 END IF
00226 !
00227 !-------------------------------------------------------------------------------------
00228 !
00229 !*      6.     Preparation of SBL air variables
00230 !
00231 LSBL = LWAT_SBL
00232 IF (LSBL) CALL PREP_FLAKE_SBL()
00233 IF (LHOOK) CALL DR_HOOK('PREP_FLAKE',1,ZHOOK_HANDLE)
00234 !
00235 !-------------------------------------------------------------------------------------
00236 !
00237 END SUBROUTINE PREP_FLAKE