|
SURFEX v7.3
General documentation of Surfex
|
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
1.8.0