SURFEX v7.3
General documentation of Surfex
|
00001 ! ######### 00002 SUBROUTINE INIT_OUTFN_SEA_n(HPROGRAM,KLUOUT) 00003 ! ############################### 00004 ! 00005 !!**** *INIT_OUTFN_SEA_n* - create output files and defines 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 !! P. LeMoigne *Meteo France* 00027 !! 00028 !! MODIFICATIONS 00029 !! ------------- 00030 !! Original 04-04 P. LeMoigne 00031 !------------------------------------------------------------------------------- 00032 ! 00033 !* 0. DECLARATIONS 00034 ! ------------ 00035 ! 00036 USE MODD_DIAG_SURF_ATM_n,ONLY : LPROVAR_TO_DIAG 00037 ! 00038 USE MODD_OL_FILEID, ONLY : XVAR_TO_FILEOUT, XID, XOUT 00039 USE MODD_SEAFLUX_n, ONLY : LSBL, TTIME 00040 USE MODD_SEAFLUX_SBL_n, ONLY : NLVL 00041 USE MODD_DIAG_SEAFLUX_n 00042 USE MODD_OCEAN_n 00043 USE MODD_OCEAN_GRID_n, ONLY: NOCKMIN, NOCKMAX 00044 USE MODD_DIAG_OCEAN_n, ONLY: LDIAG_OCEAN, XTOCMOY, XSOCMOY, XUOCMOY, XVOCMOY, XDOCMOY 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, INDIMS 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_SEA_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 INDIMS = SIZE(IDDIM) 00093 ! 00094 ! 4. Create output file for fluxes values 00095 !---------------------------------------------------------- 00096 ! 00097 IF (ALLOCATED(XVAR_TO_FILEOUT)) DEALLOCATE(XVAR_TO_FILEOUT) 00098 IF (ALLOCATED(XID)) DEALLOCATE(XID) 00099 ALLOCATE(XVAR_TO_FILEOUT(0)) 00100 ALLOCATE(XID(0)) 00101 XOUT=0 00102 ! 00103 YATT_TITLE(1)='units' 00104 ! 00105 YFILE='SEAFLUX_DIAGNOSTICS.OUT.nc' 00106 CALL CREATE_FILE(YFILE,IDIMS,YNAME_DIM,IFILE_ID,IDDIM) 00107 YATT='dimensionless' 00108 ! 00109 IF(LPROVAR_TO_DIAG) THEN 00110 YATT='K' 00111 CALL DEF_VAR_NETCDF(IFILE_ID,'SST' ,'Sea_Surface_Temperature' ,IDDIM,YATT_TITLE,YATT) 00112 ENDIF 00113 ! 00114 IF (LCOEF) THEN 00115 YATT='W/s2' 00116 CALL DEF_VAR_NETCDF(IFILE_ID,'CD_SEA' ,'Drag_Coefficient_For_Momentum ',IDDIM,YATT_TITLE,YATT) 00117 YATT='W/s' 00118 CALL DEF_VAR_NETCDF(IFILE_ID,'CH_SEA' ,'Drag_Coefficient_For_Heat ',IDDIM,YATT_TITLE,YATT) 00119 YATT='W/s/K' 00120 CALL DEF_VAR_NETCDF(IFILE_ID,'CE_SEA' ,'Drag_Coefficient_For_Evaporation',IDDIM,YATT_TITLE,YATT) 00121 YATT='m' 00122 CALL DEF_VAR_NETCDF(IFILE_ID,'Z0_SEA' ,'Roughness_Length_For_Momentum ',IDDIM,YATT_TITLE,YATT) 00123 CALL DEF_VAR_NETCDF(IFILE_ID,'Z0H_SEA' ,'Roughness_Length_For_Heat ',IDDIM,YATT_TITLE,YATT) 00124 ENDIF 00125 ! 00126 IF (LSURF_VARS) THEN 00127 YATT='kg/kg' 00128 CALL DEF_VAR_NETCDF(IFILE_ID,'QS_SEA' ,'Surface_Humidity ' ,IDDIM,YATT_TITLE,YATT) 00129 ENDIF 00130 ! 00131 IF (N2M>0) THEN 00132 YATT='K' 00133 CALL DEF_VAR_NETCDF(IFILE_ID,'T2M_SEA' ,'2m_Temperature ' ,IDDIM,YATT_TITLE,YATT) 00134 CALL DEF_VAR_NETCDF(IFILE_ID,'T2MMIN_SEA' ,'Minimum_2m_Temperature ' ,IDDIM,YATT_TITLE,YATT) 00135 CALL DEF_VAR_NETCDF(IFILE_ID,'T2MMAX_SEA' ,'Maximum_2m_Temperature ' ,IDDIM,YATT_TITLE,YATT) 00136 YATT='kg/kg' 00137 CALL DEF_VAR_NETCDF(IFILE_ID,'Q2M_SEA' ,'2m_Specific_Humidity ' ,IDDIM,YATT_TITLE,YATT) 00138 YATT='(-)' 00139 CALL DEF_VAR_NETCDF(IFILE_ID,'HU2M_SEA','2m_Relative_Humidity ' ,IDDIM,YATT_TITLE,YATT) 00140 CALL DEF_VAR_NETCDF(IFILE_ID,'HU2MMIN_SEA','Minimum_2m_Relative_Humidity ' ,IDDIM,YATT_TITLE,YATT) 00141 CALL DEF_VAR_NETCDF(IFILE_ID,'HU2MMAX_SEA','Maximum_2m_Relative_Humidity ' ,IDDIM,YATT_TITLE,YATT) 00142 YATT='m/s' 00143 CALL DEF_VAR_NETCDF(IFILE_ID,'ZON10M_SEA','10m_Zonal_wind ' ,IDDIM,YATT_TITLE,YATT) 00144 CALL DEF_VAR_NETCDF(IFILE_ID,'MER10M_SEA','10m_Meridian_Wind ' ,IDDIM,YATT_TITLE,YATT) 00145 CALL DEF_VAR_NETCDF(IFILE_ID,'W10M_SEA','10m_Wind ' ,IDDIM,YATT_TITLE,YATT) 00146 CALL DEF_VAR_NETCDF(IFILE_ID,'W10MMAX_SEA','Maximum_10m_Wind ' ,IDDIM,YATT_TITLE,YATT) 00147 ENDIF 00148 ! 00149 IF (N2M>0) THEN 00150 YATT='-' 00151 CALL DEF_VAR_NETCDF(IFILE_ID,'RI_SEA' ,'Averaged_Richardson_Number' ,IDDIM,YATT_TITLE,YATT) 00152 ENDIF 00153 ! 00154 IF (LSURF_BUDGET) THEN 00155 YATT='W/m2' 00156 CALL DEF_VAR_NETCDF(IFILE_ID,'RN_SEA' ,'Averaged_Net_Radiation' ,IDDIM,YATT_TITLE,YATT) 00157 CALL DEF_VAR_NETCDF(IFILE_ID,'H_SEA' ,'Averaged_Sensible_Heat_Flux' ,IDDIM,YATT_TITLE,YATT) 00158 CALL DEF_VAR_NETCDF(IFILE_ID,'LE_SEA' ,'Averaged_Total_Latent_Heat_Flux ' ,IDDIM,YATT_TITLE,YATT) 00159 CALL DEF_VAR_NETCDF(IFILE_ID,'LEI_SEA' ,'Averaged_SublimationLatent_Heat_Flux ' ,IDDIM,YATT_TITLE,YATT) 00160 CALL DEF_VAR_NETCDF(IFILE_ID,'GFLUX_SEA','Averaged_Ground_Heat_Flux ' ,IDDIM,YATT_TITLE,YATT) 00161 IF(LRAD_BUDGET)THEN 00162 CALL DEF_VAR_NETCDF(IFILE_ID,'SWD_SEA' ,'Averaged_Downward_SW ' ,IDDIM,YATT_TITLE,YATT) 00163 CALL DEF_VAR_NETCDF(IFILE_ID,'SWU_SEA' ,'Averaged_Upward_SW ' ,IDDIM,YATT_TITLE,YATT) 00164 CALL DEF_VAR_NETCDF(IFILE_ID,'LWD_SEA' ,'Averaged_Downward_LW ' ,IDDIM,YATT_TITLE,YATT) 00165 CALL DEF_VAR_NETCDF(IFILE_ID,'LWU_SEA' ,'Averaged_Upward_LW ' ,IDDIM,YATT_TITLE,YATT) 00166 ENDIF 00167 YATT='kg/ms2' 00168 CALL DEF_VAR_NETCDF(IFILE_ID,'FMU_SEA' ,'Averaged_Zonal_Wind_Stress ' ,IDDIM,YATT_TITLE,YATT) 00169 CALL DEF_VAR_NETCDF(IFILE_ID,'FMV_SEA' ,'Averaged_Merid_Wind_Stress ' ,IDDIM,YATT_TITLE,YATT) 00170 ENDIF 00171 ! 00172 IF (LDIAG_OCEAN) THEN 00173 ! Mean cmo temperature 00174 YATT='K' 00175 CALL DEF_VAR_NETCDF(IFILE_ID,'TOML','Mean cmo Tempe ',IDDIM,YATT_TITLE,YATT) 00176 ! Mean cmo salinity 00177 YATT='psu' 00178 CALL DEF_VAR_NETCDF(IFILE_ID,'SOML','Mean cmo Salin ',IDDIM,YATT_TITLE,YATT) 00179 ! Mean cmo U-current 00180 YATT='m/s' 00181 CALL DEF_VAR_NETCDF(IFILE_ID,'UOML','Mean cmo U-cur ',IDDIM,YATT_TITLE,YATT) 00182 ! Mean cmo V-current 00183 YATT='m/s' 00184 CALL DEF_VAR_NETCDF(IFILE_ID,'VOML','Mean cmo V-cur ',IDDIM,YATT_TITLE,YATT) 00185 ! Mean cmo density 00186 YATT='Kg/m3' 00187 CALL DEF_VAR_NETCDF(IFILE_ID,'DOML','Mean cmo Densi ',IDDIM,YATT_TITLE,YATT) 00188 00189 ENDIF 00190 ! 00191 CALL OL_WRITE_COORD(YFILE,IFILE_ID,IDDIM,YATT_TITLE,YNAME_DIM,YUNIT1,YUNIT2,IDIM1,YDATE,ZX,ZY) 00192 ! 00193 ! 00194 IF (LSURF_BUDGETC) THEN 00195 ! 00196 YFILE='SEAFLUX_DIAG_CUMUL.OUT.nc' 00197 CALL CREATE_FILE(YFILE,IDIMS,YNAME_DIM,IFILE_ID,IDDIM) 00198 ! 00199 YATT='J/m2' 00200 CALL DEF_VAR_NETCDF(IFILE_ID,'RNC_SEA' ,'Cumulated_Averaged_Net_Radiation' ,IDDIM,YATT_TITLE,YATT) 00201 CALL DEF_VAR_NETCDF(IFILE_ID,'HC_SEA' ,'Cumulated_Averaged_Sensible_Heat_Flux' ,IDDIM,YATT_TITLE,YATT) 00202 CALL DEF_VAR_NETCDF(IFILE_ID,'LEC_SEA' ,'Cumulated_Averaged_Total_Latent_Heat_Flux',IDDIM,YATT_TITLE,YATT) 00203 CALL DEF_VAR_NETCDF(IFILE_ID,'LEIC_SEA' ,'Cumulated_Averaged_Sublimation_Latent_Heat_Flux',IDDIM,YATT_TITLE,YATT) 00204 CALL DEF_VAR_NETCDF(IFILE_ID,'GFLUXC_SEA','Cumulated_Averaged_Ground_Heat_Flux' ,IDDIM,YATT_TITLE,YATT) 00205 IF(LRAD_BUDGET)THEN 00206 CALL DEF_VAR_NETCDF(IFILE_ID,'SWDC_SEA' ,'Cumulated_Averaged_Downward_SW ' ,IDDIM,YATT_TITLE,YATT) 00207 CALL DEF_VAR_NETCDF(IFILE_ID,'SWUC_SEA' ,'Cumulated_Averaged_Upward_SW ' ,IDDIM,YATT_TITLE,YATT) 00208 CALL DEF_VAR_NETCDF(IFILE_ID,'LWDC_SEA' ,'Cumulated_Averaged_Downward_LW ' ,IDDIM,YATT_TITLE,YATT) 00209 CALL DEF_VAR_NETCDF(IFILE_ID,'LWUC_SEA' ,'Cumulated_Averaged_Upward_LW ' ,IDDIM,YATT_TITLE,YATT) 00210 ENDIF 00211 YATT='kg/ms' 00212 CALL DEF_VAR_NETCDF(IFILE_ID,'FMUC_SEA' ,'Cumulated_Averaged_Zonal_Wind_Stress ' ,IDDIM,YATT_TITLE,YATT) 00213 CALL DEF_VAR_NETCDF(IFILE_ID,'FMVC_SEA' ,'Cumulated_Averaged_Merid_Wind_Stress ' ,IDDIM,YATT_TITLE,YATT) 00214 ! 00215 CALL OL_WRITE_COORD(YFILE,IFILE_ID,IDDIM,YATT_TITLE,YNAME_DIM,YUNIT1,YUNIT2,IDIM1,YDATE,ZX,ZY) 00216 ! 00217 ENDIF 00218 ! 00219 ! 00220 IF(.NOT.LPROVAR_TO_DIAG) THEN 00221 ! 00222 YFILE='SEAFLUX_PROGNOSTIC.OUT.nc' 00223 CALL CREATE_FILE(YFILE,IDIMS,YNAME_DIM,IFILE_ID,IDDIM) 00224 ! 00225 YATT='K' 00226 CALL DEF_VAR_NETCDF(IFILE_ID,'SST' ,'Sea_Surface_Temperature' ,IDDIM,YATT_TITLE,YATT) 00227 ! 00228 YATT='m' 00229 CALL DEF_VAR_NETCDF(IFILE_ID,'Z0SEA' ,'Roughness_Length' ,IDDIM,YATT_TITLE,YATT) 00230 ! 00231 DO JLAYER=NOCKMIN+1,NOCKMAX 00232 WRITE(YPAS,'(I1.1,1X)') JLAYER 00233 IF (JLAYER>=10) WRITE(YPAS,'(I2.2,1X)') JLAYER 00234 YLVL=ADJUSTL(YPAS(:LEN_TRIM(YPAS))) 00235 ! Ocean temperature 00236 YATT='K' 00237 CALL DEF_VAR_NETCDF(IFILE_ID,'TEMP_OC'//YLVL,'Ocean Tempe '//YLVL ,IDDIM,YATT_TITLE,YATT) 00238 ! Ocean salinity 00239 YATT='psu' 00240 CALL DEF_VAR_NETCDF(IFILE_ID,'SALT_OC'//YLVL,'Ocean Salinity '//YLVL ,IDDIM,YATT_TITLE,YATT) 00241 ! Ocean U-current 00242 YATT='m/s' 00243 CALL DEF_VAR_NETCDF(IFILE_ID,'UCUR_OC'//YLVL,'Ocean U-cur '//YLVL ,IDDIM,YATT_TITLE,YATT) 00244 ! Ocean V-current 00245 YATT='m/s' 00246 CALL DEF_VAR_NETCDF(IFILE_ID,'VCUR_OC'//YLVL,'Ocean V-cur '//YLVL ,IDDIM,YATT_TITLE,YATT) 00247 ! Ocean TKE 00248 YATT='J' 00249 CALL DEF_VAR_NETCDF(IFILE_ID,'TKE_OC'//YLVL,'Ocean TKE '//YLVL ,IDDIM,YATT_TITLE,YATT) 00250 ! Ocean mixing coeff 00251 YATT='m2/s' 00252 CALL DEF_VAR_NETCDF(IFILE_ID,'KMEL_OC'//YLVL,'Ocean KMEL '//YLVL ,IDDIM,YATT_TITLE,YATT) 00253 ! Relaxation temperature 00254 YATT='K/s' 00255 CALL DEF_VAR_NETCDF(IFILE_ID,'T_OC_REL'//YLVL,'Ocean T rel'//YLVL ,IDDIM,YATT_TITLE,YATT) 00256 ! Relaxation salinity 00257 YATT='psu/s' 00258 CALL DEF_VAR_NETCDF(IFILE_ID,'S_OC_REL'//YLVL,'Ocean S rel'//YLVL ,IDDIM,YATT_TITLE,YATT) 00259 ! Relaxation U 00260 YATT='m/s2' 00261 CALL DEF_VAR_NETCDF(IFILE_ID,'U_OC_REL'//YLVL,'Ocean U rel'//YLVL ,IDDIM,YATT_TITLE,YATT) 00262 ! Relaxation V 00263 YATT='m/s2' 00264 CALL DEF_VAR_NETCDF(IFILE_ID,'V_OC_REL'//YLVL,'Ocean V rel'//YLVL ,IDDIM,YATT_TITLE,YATT) 00265 END DO 00266 ! 00267 IF (LSBL) THEN 00268 ! 6.1 Heights 00269 YATT = 'm' 00270 DO JLAYER=1,NLVL 00271 WRITE(YPAS,'(I2.2,1X)') JLAYER ; YLVL=ADJUSTL(YPAS(:LEN_TRIM(YPAS))) 00272 CALL DEF_VAR_NETCDF(IFILE_ID,'SEA_SBL_Z'//YLVL,'Height_of_canopy_Layer_'//YLVL ,IDDIM,YATT_TITLE,YATT) 00273 END DO 00274 ! 6.2 Wind 00275 YATT = 'm/s' 00276 DO JLAYER=1,NLVL 00277 WRITE(YPAS,'(I2.2,1X)') JLAYER ; YLVL=ADJUSTL(YPAS(:LEN_TRIM(YPAS))) 00278 CALL DEF_VAR_NETCDF(IFILE_ID,'SEA_SBL_U'//YLVL,'Wind_of_canopy_Layer_'//YLVL ,IDDIM,YATT_TITLE,YATT) 00279 END DO 00280 ! 6.3 Temperature 00281 YATT = 'K' 00282 DO JLAYER=1,NLVL 00283 WRITE(YPAS,'(I2.2,1X)') JLAYER ; YLVL=ADJUSTL(YPAS(:LEN_TRIM(YPAS))) 00284 CALL DEF_VAR_NETCDF(IFILE_ID,'SEA_SBL_T'//YLVL,'Temperature_of_canopy_Layer_'//YLVL ,IDDIM,YATT_TITLE,YATT) 00285 END DO 00286 ! 6.4 Temperature 00287 YATT = 'kg/m3' 00288 DO JLAYER=1,NLVL 00289 WRITE(YPAS,'(I2.2,1X)') JLAYER ; YLVL=ADJUSTL(YPAS(:LEN_TRIM(YPAS))) 00290 CALL DEF_VAR_NETCDF(IFILE_ID,'SEA_SBL_Q'//YLVL,'Humidity_of_canopy_Layer_'//YLVL ,IDDIM,YATT_TITLE,YATT) 00291 END DO 00292 ! 6.5 Turbulence 00293 YATT = 'm2/s2' 00294 DO JLAYER=1,NLVL 00295 WRITE(YPAS,'(I2.2,1X)') JLAYER ; YLVL=ADJUSTL(YPAS(:LEN_TRIM(YPAS))) 00296 CALL DEF_VAR_NETCDF(IFILE_ID,'SEA_SBL_E'//YLVL,'TKE_of_canopy_Layer_'//YLVL ,IDDIM,YATT_TITLE,YATT) 00297 END DO 00298 ENDIF 00299 ! 00300 CALL OL_WRITE_COORD(YFILE,IFILE_ID,IDDIM,YATT_TITLE,YNAME_DIM,YUNIT1,YUNIT2,IDIM1,YDATE,ZX,ZY) 00301 ! 00302 ENDIF ! End .NOT.LPROVAR_TO_DIAG 00303 IF (LHOOK) CALL DR_HOOK('INIT_OUTFN_SEA_N',1,ZHOOK_HANDLE) 00304 ! 00305 END SUBROUTINE INIT_OUTFN_SEA_n