SURFEX v7.3
General documentation of Surfex
|
00001 ! ######### 00002 SUBROUTINE INIT_OUTFN_TEB_n(HPROGRAM,KLUOUT) 00003 ! ############################### 00004 ! 00005 ! 00006 !!**** *INIT_OUTFN_TEB_n* - create output files and defines variables 00007 !! 00008 !! PURPOSE 00009 !! ------- 00010 !! 00011 !!** METHOD 00012 !! ------ 00013 !! 00014 !! EXTERNAL 00015 !! -------- 00016 !! 00017 !! 00018 !! IMPLICIT ARGUMENTS 00019 !! ------------------ 00020 !! 00021 !! REFERENCE 00022 !! --------- 00023 !! 00024 !! 00025 !! AUTHOR 00026 !! ------ 00027 !! P. LeMoigne *Meteo France* 00028 !! 00029 !! MODIFICATIONS 00030 !! ------------- 00031 !! Original 04-04 P. LeMoigne 00032 !------------------------------------------------------------------------------- 00033 ! 00034 !* 0. DECLARATIONS 00035 ! ------------ 00036 ! 00037 USE MODD_OL_FILEID, ONLY : XVAR_TO_FILEOUT, XID, XOUT 00038 USE MODD_TEB_n, ONLY: NROOF_LAYER, NROAD_LAYER, NWALL_LAYER, & 00039 XZ0_TOWN, TTIME 00040 USE MODD_TEB_CANOPY_n, ONLY: NLVL 00041 USE MODD_DIAG_TEB_n 00042 USE MODD_DIAG_MISC_TEB_n ,ONLY : LSURF_MISC_BUDGET, XQF_BLD, & 00043 XFLX_BLD, XQF_TOWN, XDQS_TOWN, & 00044 XH_WALL_A, XH_WALL_B,XH_ROOF,XH_ROAD 00045 ! 00046 USE MODN_IO_OFFLINE, ONLY : XTSTEP_OUTPUT 00047 ! 00048 USE MODI_GET_DIM_FULL_n 00049 USE MODI_OL_DEFINE_DIM 00050 USE MODI_GET_DATE_OL 00051 USE MODI_CREATE_FILE 00052 USE MODI_DEF_VAR_NETCDF 00053 USE MODI_OL_WRITE_COORD 00054 ! 00055 USE YOMHOOK ,ONLY : LHOOK, DR_HOOK 00056 USE PARKIND1 ,ONLY : JPRB 00057 ! 00058 IMPLICIT NONE 00059 include 'netcdf.inc' 00060 00061 CHARACTER(LEN=6), INTENT(IN) :: HPROGRAM 00062 INTEGER, INTENT(IN) :: KLUOUT 00063 ! 00064 !* 0.2 Declarations of local variables 00065 ! ------------------------------- 00066 ! 00067 INTEGER :: INI 00068 INTEGER :: IDIM1 00069 CHARACTER(LEN=13),DIMENSION(1) :: YUNIT1, YUNIT2 00070 REAL,DIMENSION(:), POINTER :: ZX, ZY 00071 INTEGER, DIMENSION(:), POINTER :: IDIMS, IDDIM 00072 CHARACTER(LEN=100), DIMENSION(:), POINTER :: YNAME_DIM 00073 ! 00074 CHARACTER(LEN=40),DIMENSION(1) :: YDATE 00075 INTEGER :: IFILE_ID 00076 CHARACTER(LEN=50) :: YFILE 00077 CHARACTER(LEN=100), DIMENSION(1) :: YATT_TITLE, YATT 00078 CHARACTER(LEN=3) :: YPAS, YLVL 00079 INTEGER :: JLAYER 00080 REAL(KIND=JPRB) :: ZHOOK_HANDLE 00081 ! 00082 !------------------------------------------------------------------------------- 00083 00084 ! 1. Compute output lenght dimension 00085 !----------------------------------- 00086 IF (LHOOK) CALL DR_HOOK('INIT_OUTFN_TEB_N',0,ZHOOK_HANDLE) 00087 CALL GET_DIM_FULL_n(INI) 00088 CALL OL_DEFINE_DIM(HPROGRAM, KLUOUT, INI, IDIM1, YUNIT1, YUNIT2, & 00089 ZX, ZY, IDIMS, IDDIM, YNAME_DIM) 00090 CALL GET_DATE_OL(TTIME,XTSTEP_OUTPUT,YDATE(1)) 00091 ! 00092 ! 4. Create output file for fluxes values 00093 !---------------------------------------------------------- 00094 00095 IF (ALLOCATED(XVAR_TO_FILEOUT)) DEALLOCATE(XVAR_TO_FILEOUT) 00096 IF (ALLOCATED(XID)) DEALLOCATE(XID) 00097 ALLOCATE(XVAR_TO_FILEOUT(0)) 00098 ALLOCATE(XID(0)) 00099 XOUT=0 00100 ! 00101 YATT_TITLE(1)='units' 00102 ! 00103 YFILE='TEB_DIAGNOSTICS.OUT.nc' 00104 CALL CREATE_FILE(YFILE,IDIMS,YNAME_DIM,IFILE_ID,IDDIM) 00105 YATT='-' 00106 ! 00107 IF (LSURF_MISC_BUDGET) THEN 00108 CALL DEF_VAR_NETCDF(IFILE_ID,'Z0_TOWN' ,'Town_Rougness_Length',IDDIM,YATT_TITLE,YATT) 00109 CALL DEF_VAR_NETCDF(IFILE_ID,'XQF_BLD' ,'Domestic_heating',IDDIM,YATT_TITLE,YATT) 00110 CALL DEF_VAR_NETCDF(IFILE_ID,'XQF_BLDWFR' ,'Domestic_heating',IDDIM,YATT_TITLE,YATT) 00111 CALL DEF_VAR_NETCDF(IFILE_ID,'XFLX_BLD' ,'Heat flux from bld',IDDIM,YATT_TITLE,YATT) 00112 CALL DEF_VAR_NETCDF(IFILE_ID,'XQF_TOWN' ,'Anthropogenic heat',IDDIM,YATT_TITLE,YATT) 00113 CALL DEF_VAR_NETCDF(IFILE_ID,'XDQS_TOWN' ,'Storage',IDDIM,YATT_TITLE,YATT) 00114 CALL DEF_VAR_NETCDF(IFILE_ID,'XH_WALL_A' ,'Wall sensible heat flux',IDDIM,YATT_TITLE,YATT) 00115 CALL DEF_VAR_NETCDF(IFILE_ID,'XH_WALL_B' ,'Wall sensible heat flux',IDDIM,YATT_TITLE,YATT) 00116 CALL DEF_VAR_NETCDF(IFILE_ID,'XH_ROOF' ,'Roof sensible heat flux',IDDIM,YATT_TITLE,YATT) 00117 CALL DEF_VAR_NETCDF(IFILE_ID,'XH_ROAD' ,'Road sensible heat flux',IDDIM,YATT_TITLE,YATT) 00118 ENDIF 00119 ! 00120 IF (LCOEF) THEN 00121 YATT='W/s2' 00122 CALL DEF_VAR_NETCDF(IFILE_ID,'CD_TEB' ,'Drag_Coefficient_For_Momentum ' ,IDDIM,YATT_TITLE,YATT) 00123 YATT='W/s' 00124 CALL DEF_VAR_NETCDF(IFILE_ID,'CH_TEB' ,'Drag_Coefficient_For_Heat ' ,IDDIM,YATT_TITLE,YATT) 00125 YATT='W/s/K' 00126 CALL DEF_VAR_NETCDF(IFILE_ID,'CE_TEB' ,'Drag_Coefficient_For_Evaporation' ,IDDIM,YATT_TITLE,YATT) 00127 YATT='m' 00128 CALL DEF_VAR_NETCDF(IFILE_ID,'Z0_TEB' ,'Roughness_Length_For_Momentum' ,IDDIM,YATT_TITLE,YATT) 00129 YATT='m' 00130 CALL DEF_VAR_NETCDF(IFILE_ID,'Z0H_TEB' ,'Roughness_Length_For_Heat' ,IDDIM,YATT_TITLE,YATT) 00131 ENDIF 00132 ! 00133 IF (LSURF_VARS) THEN 00134 YATT='kg/kg' 00135 CALL DEF_VAR_NETCDF(IFILE_ID,'QS_TEB' ,'Surface_Humidity ' ,IDDIM,YATT_TITLE,YATT) 00136 ENDIF 00137 ! 00138 IF (N2M>0) THEN 00139 YATT='K' 00140 CALL DEF_VAR_NETCDF(IFILE_ID,'T2M_TEB' ,'2m_Temperature ' ,IDDIM,YATT_TITLE,YATT) 00141 YATT='kg/kg' 00142 CALL DEF_VAR_NETCDF(IFILE_ID,'Q2M_TEB' ,'2m_Specific_Humidity ' ,IDDIM,YATT_TITLE,YATT) 00143 YATT='(-)' 00144 CALL DEF_VAR_NETCDF(IFILE_ID,'HU2M_TEB','2m_Relative_Humidity ' ,IDDIM,YATT_TITLE,YATT) 00145 YATT='m/s' 00146 CALL DEF_VAR_NETCDF(IFILE_ID,'ZON10M_TEB','10m_Zonal_wind ' ,IDDIM,YATT_TITLE,YATT) 00147 YATT='m/s' 00148 CALL DEF_VAR_NETCDF(IFILE_ID,'MER10M_TEB','2m_Meridian_Wind ' ,IDDIM,YATT_TITLE,YATT) 00149 ENDIF 00150 00151 IF (N2M>0) THEN 00152 YATT='-' 00153 CALL DEF_VAR_NETCDF(IFILE_ID,'RI_TEB' ,'Averaged_Richardson_Number' ,IDDIM,YATT_TITLE,YATT) 00154 ENDIF 00155 ! 00156 YATT='W/m2' 00157 CALL DEF_VAR_NETCDF(IFILE_ID,'RN_TEB' ,'Averaged_Net_Radiation' ,IDDIM,YATT_TITLE,YATT) 00158 CALL DEF_VAR_NETCDF(IFILE_ID,'H_TEB' ,'Averaged_Sensible_Heat_Flux' ,IDDIM,YATT_TITLE,YATT) 00159 CALL DEF_VAR_NETCDF(IFILE_ID,'LE_TEB' ,'Averaged_Latent_Heat_Flux ' ,IDDIM,YATT_TITLE,YATT) 00160 CALL DEF_VAR_NETCDF(IFILE_ID,'GFLUX_TEB','Averaged_Ground_Heat_Flux ' ,IDDIM,YATT_TITLE,YATT) 00161 CALL DEF_VAR_NETCDF(IFILE_ID,'SWD_TEB' ,'Averaged_Downward_SW ' ,IDDIM,YATT_TITLE,YATT) 00162 CALL DEF_VAR_NETCDF(IFILE_ID,'SWU_TEB' ,'Averaged_Upward_SW ' ,IDDIM,YATT_TITLE,YATT) 00163 CALL DEF_VAR_NETCDF(IFILE_ID,'LWD_TEB' ,'Averaged_Downward_LW ' ,IDDIM,YATT_TITLE,YATT) 00164 CALL DEF_VAR_NETCDF(IFILE_ID,'LWU_TEB' ,'Averaged_Upward_LW ' ,IDDIM,YATT_TITLE,YATT) 00165 CALL DEF_VAR_NETCDF(IFILE_ID,'FMU_TEB' ,'Averaged_Zonal_Wind_Stress ' ,IDDIM,YATT_TITLE,YATT) 00166 CALL DEF_VAR_NETCDF(IFILE_ID,'FMV_TEB' ,'Averaged_Merid_Wind_Stress ' ,IDDIM,YATT_TITLE,YATT) 00167 ! 00168 CALL OL_WRITE_COORD(YFILE,IFILE_ID,IDDIM,YATT_TITLE,YNAME_DIM,YUNIT1,YUNIT2,IDIM1,YDATE,ZX,ZY) 00169 ! 00170 ! 00171 !YFILE='TEB_DIAG_CUMUL.OUT.nc' 00172 !CALL CREATE_FILE(YFILE,IDIMS,YNAME_DIM,IFILE_ID,IDDIM) 00173 !YATT='dimensionless' 00174 ! 00175 !CALL DEF_VAR_NETCDF(IFILE_ID,'RNC_TEB' ,'Averaged_Cumulated_Net_Radiation' ,IDDIM,YATT_TITLE,YATT) 00176 !CALL DEF_VAR_NETCDF(IFILE_ID,'HC_TEB' ,'Averaged_Cumulated_Sensible_Heat_Flux' ,IDDIM,YATT_TITLE,YATT) 00177 !CALL DEF_VAR_NETCDF(IFILE_ID,'LEC_TEB' ,'Averaged_Cumulated_Latent_Heat_Flux' ,IDDIM,YATT_TITLE,YATT) 00178 !CALL DEF_VAR_NETCDF(IFILE_ID,'GFLUXC_TEB','Averaged_Cumulated_Ground_Heat_Flux' ,IDDIM,YATT_TITLE,YATT) 00179 ! 00180 !CALL OL_WRITE_COORD(YFILE,IFILE_ID,IDDIM,YATT_TITLE,YNAME_DIM,YUNIT1,YUNIT2,IDIM1,YDATE,ZX,ZY) 00181 ! 00182 ! 00183 ! 5. Create output file for prognostic and semi-pronostic variable in teb 00184 !------------------------------------------------------------------------ 00185 00186 YFILE='TEB_PROGNOSTIC.OUT.nc' 00187 CALL CREATE_FILE(YFILE,IDIMS,YNAME_DIM,IFILE_ID,IDDIM) 00188 ! 00189 ! 5.1 Temperatures 00190 YATT='K' 00191 ! 00192 ! Roof temperatures 00193 DO JLAYER=1,NROOF_LAYER 00194 WRITE(YPAS,'(I3)') JLAYER ; YLVL=ADJUSTL(YPAS(:LEN_TRIM(YPAS))) 00195 CALL DEF_VAR_NETCDF(IFILE_ID,'T_ROOF'//YLVL,'Roof_Temperature_Layer_'//YLVL ,IDDIM,YATT_TITLE,YATT) 00196 END DO 00197 ! Road temperatures 00198 DO JLAYER=1,NROAD_LAYER 00199 WRITE(YPAS,'(I3)') JLAYER ; YLVL=ADJUSTL(YPAS(:LEN_TRIM(YPAS))) 00200 CALL DEF_VAR_NETCDF(IFILE_ID,'T_ROAD'//YLVL,'Road_Temperature_Layer_'//YLVL ,IDDIM,YATT_TITLE,YATT) 00201 END DO 00202 ! Wall temperatures 00203 DO JLAYER=1,NWALL_LAYER 00204 WRITE(YPAS,'(I3)') JLAYER ; YLVL=ADJUSTL(YPAS(:LEN_TRIM(YPAS))) 00205 CALL DEF_VAR_NETCDF(IFILE_ID,'T_WALL_A'//YLVL,'Wall_Temperature_Layer_'//YLVL ,IDDIM,YATT_TITLE,YATT) 00206 CALL DEF_VAR_NETCDF(IFILE_ID,'T_WALL_B'//YLVL,'Wall_Temperature_Layer_'//YLVL ,IDDIM,YATT_TITLE,YATT) 00207 END DO 00208 ! Internal building temperature 00209 CALL DEF_VAR_NETCDF(IFILE_ID,'TI_BLD','Internal_Building_Temperature',IDDIM,YATT_TITLE,YATT) 00210 ! 00211 ! Deep road temperature 00212 CALL DEF_VAR_NETCDF(IFILE_ID,'TI_ROAD','Deep_Road_Temperature',IDDIM,YATT_TITLE,YATT) 00213 ! 00214 ! 5.2 Water contents 00215 ! 00216 YATT = 'kg/m2' 00217 ! Roof water content 00218 CALL DEF_VAR_NETCDF(IFILE_ID,'WS_ROOF','Roof_Water_Content_Layer' ,IDDIM,YATT_TITLE,YATT) 00219 ! 00220 ! Road water content 00221 CALL DEF_VAR_NETCDF(IFILE_ID,'WS_ROAD','Road_Water_Content_Layer' ,IDDIM,YATT_TITLE,YATT) 00222 ! 00223 ! 5.3 semi pronostic variables 00224 ! 00225 ! temperature of canyon air 00226 YATT = 'K' 00227 CALL DEF_VAR_NETCDF(IFILE_ID,'T_CANYON','Canyon_Air_Temperature',IDDIM,YATT_TITLE,YATT) 00228 ! 00229 ! humidity of canyon air 00230 YATT = 'kg/kg' 00231 CALL DEF_VAR_NETCDF(IFILE_ID,'Q_CANYON','Canyon_Air_Humidity',IDDIM,YATT_TITLE,YATT) 00232 ! 00233 CALL OL_WRITE_COORD(YFILE,IFILE_ID,IDDIM,YATT_TITLE,YNAME_DIM,YUNIT1,YUNIT2,IDIM1,YDATE,ZX,ZY) 00234 ! 00235 ! 6. Create output file for prognostic variables in teb canopy 00236 !------------------------------------------------------------------------ 00237 ! 00238 YFILE='TEB_CANOPY.OUT.nc' 00239 CALL CREATE_FILE(YFILE,IDIMS,YNAME_DIM,IFILE_ID,IDDIM) 00240 ! 00241 ! 6.1 Heights 00242 YATT = 'm' 00243 ! 00244 DO JLAYER=1,NLVL 00245 WRITE(YPAS,'(I2.2,1X)') JLAYER ; YLVL=ADJUSTL(YPAS(:LEN_TRIM(YPAS))) 00246 CALL DEF_VAR_NETCDF(IFILE_ID,'TEB_CAN_Z'//YLVL,'Height_of_canopy_Layer_'//YLVL ,IDDIM,YATT_TITLE,YATT) 00247 END DO 00248 ! 00249 ! 6.2 Wind 00250 YATT = 'm/s' 00251 DO JLAYER=1,NLVL 00252 WRITE(YPAS,'(I2.2,1X)') JLAYER ; YLVL=ADJUSTL(YPAS(:LEN_TRIM(YPAS))) 00253 CALL DEF_VAR_NETCDF(IFILE_ID,'TEB_CAN_U'//YLVL,'Wind_of_canopy_Layer_'//YLVL ,IDDIM,YATT_TITLE,YATT) 00254 END DO 00255 ! 00256 ! 6.3 Temperature 00257 YATT = 'K' 00258 DO JLAYER=1,NLVL 00259 WRITE(YPAS,'(I2.2,1X)') JLAYER ; YLVL=ADJUSTL(YPAS(:LEN_TRIM(YPAS))) 00260 CALL DEF_VAR_NETCDF(IFILE_ID,'TEB_CAN_T'//YLVL,'Temperature_of_canopy_Layer_'//YLVL ,IDDIM,YATT_TITLE,YATT) 00261 END DO 00262 ! 00263 ! 6.4 Temperature 00264 YATT = 'kg/m3' 00265 DO JLAYER=1,NLVL 00266 WRITE(YPAS,'(I2.2,1X)') JLAYER ; YLVL=ADJUSTL(YPAS(:LEN_TRIM(YPAS))) 00267 CALL DEF_VAR_NETCDF(IFILE_ID,'TEB_CAN_Q'//YLVL,'Humidity_of_canopy_Layer_'//YLVL ,IDDIM,YATT_TITLE,YATT) 00268 END DO 00269 ! 00270 ! 6.5 Turbulence 00271 YATT = 'm2/s2' 00272 DO JLAYER=1,NLVL 00273 WRITE(YPAS,'(I2.2,1X)') JLAYER ; YLVL=ADJUSTL(YPAS(:LEN_TRIM(YPAS))) 00274 CALL DEF_VAR_NETCDF(IFILE_ID,'TEB_CAN_E'//YLVL,'TKE_of_canopy_Layer_'//YLVL ,IDDIM,YATT_TITLE,YATT) 00275 END DO 00276 ! 00277 CALL OL_WRITE_COORD(YFILE,IFILE_ID,IDDIM,YATT_TITLE,YNAME_DIM,YUNIT1,YUNIT2,IDIM1,YDATE,ZX,ZY) 00278 ! 00279 IF (LHOOK) CALL DR_HOOK('INIT_OUTFN_TEB_N',1,ZHOOK_HANDLE) 00280 ! 00281 END SUBROUTINE INIT_OUTFN_TEB_n