SURFEX  V8_0
Surfex V8_0 release
 All Classes Files Functions Variables
init_outfn_watern.F90
Go to the documentation of this file.
1 !SFX_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
2 !SFX_LIC This is part of the SURFEX software governed by the CeCILL-C licence
3 !SFX_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
4 !SFX_LIC for details. version 1.
5 ! #########
6  SUBROUTINE init_outfn_water_n (CHW, DGU, DGW, UG, U, W, WSB, &
7  hprogram,kluout)
8 ! ###############################
9 !
10 !!**** *INIT_OUTFN_WATER_n* - create output files and defines variables
11 !!
12 !! PURPOSE
13 !! -------
14 !!
15 !!** METHOD
16 !! ------
17 !!
18 !! EXTERNAL
19 !! --------
20 !!
21 !!
22 !! IMPLICIT ARGUMENTS
23 !! ------------------
24 !!
25 !! REFERENCE
26 !! ---------
27 !!
28 !!
29 !! AUTHOR
30 !! ------
31 !! P. LeMoigne *Meteo France*
32 !!
33 !! MODIFICATIONS
34 !! -------------
35 !! Original 04-04 P. LeMoigne
36 !! modified 06-13 B. Decharme : Delete LPROVAR_TO_DIAG here
37 !! Add diag (Evap, Subl)
38 !-------------------------------------------------------------------------------
39 !
40 !* 0. DECLARATIONS
41 ! ------------
42 !
43 !
44 !
45 !
46 !
51 USE modd_surf_atm_n, ONLY : surf_atm_t
52 USE modd_watflux_n, ONLY : watflux_t
54 !
55 USE modd_ol_fileid, ONLY : xvar_to_fileout, xid, xout
56 !
57 !
58 USE modn_io_offline, ONLY : xtstep_output
59 !
60 USE modi_get_dim_full_n
61 USE modi_ol_define_dim
62 USE modi_get_date_ol
63 USE modi_create_file
64 USE modi_def_var_netcdf
65 USE modi_ol_write_coord
66 !
67 USE yomhook ,ONLY : lhook, dr_hook
68 USE parkind1 ,ONLY : jprb
69 !
70 USE modi_get_dim_full_n
71 !
72 IMPLICIT NONE
73 include 'netcdf.inc'
74 
75 !
76 TYPE(ch_watflux_t), INTENT(INOUT) :: chw
77 TYPE(diag_surf_atm_t), INTENT(INOUT) :: dgu
78 TYPE(diag_watflux_t), INTENT(INOUT) :: dgw
79 TYPE(surf_atm_grid_t), INTENT(INOUT) :: ug
80 TYPE(surf_atm_t), INTENT(INOUT) :: u
81 TYPE(watflux_t), INTENT(INOUT) :: w
82 TYPE(watflux_sbl_t), INTENT(INOUT) :: wsb
83 !
84  CHARACTER(LEN=6), INTENT(IN) :: hprogram
85 INTEGER, INTENT(IN) :: kluout
86 !
87 !* 0.2 Declarations of local variables
88 ! -------------------------------
89 !
90  CHARACTER(LEN=100), DIMENSION(:), POINTER :: yname_dim
91  CHARACTER(LEN=100), DIMENSION(1) :: yatt_title, yatt
92  CHARACTER(LEN=40),DIMENSION(1) :: ydate
93  CHARACTER(LEN=13),DIMENSION(1) :: yunit1, yunit2
94  CHARACTER(LEN=100) :: ycomment
95  CHARACTER(LEN=50) :: yfile
96  CHARACTER(LEN=12) :: yrecfm
97  CHARACTER(LEN=2) :: ylvlv
98 !
99 INTEGER, DIMENSION(:), POINTER :: idims, iddim
100 INTEGER :: ini
101 INTEGER :: idim1
102 INTEGER :: ifile_id, jsv
103 INTEGER :: jlayer, jret
104 !
105 REAL,DIMENSION(:), POINTER :: zx, zy
106 !
107 REAL(KIND=JPRB) :: zhook_handle
108 !
109 !-------------------------------------------------------------------------------
110 
111 ! 1. Compute output lenght dimension
112 !-----------------------------------
113 IF (lhook) CALL dr_hook('INIT_OUTFN_WATER_N',0,zhook_handle)
114  CALL get_dim_full_n(u, &
115  ini)
116 !
117  CALL ol_define_dim(ug, u, &
118  hprogram, kluout, ini, idim1, yunit1, yunit2, &
119  zx, zy, idims, iddim, yname_dim)
120  CALL get_date_ol(w%TTIME,xtstep_output,ydate(1))
121 !
122 ! 4. Create output file for fluxes values
123 !----------------------------------------------------------
124 
125 IF (ALLOCATED(xvar_to_fileout)) DEALLOCATE(xvar_to_fileout)
126 IF (ALLOCATED(xid)) DEALLOCATE(xid)
127 ALLOCATE(xid(0))
128 xout=0
129 !
130 yatt_title(1)='units'
131 !
132 yfile='WATFLUX_DIAGNOSTICS.OUT.nc'
133  CALL create_file(yfile,idims,yname_dim,ifile_id,iddim)
134 jret=nf_redef(ifile_id)
135 !
136 yatt='dimensionless'
137 !
138 IF (dgw%LCOEF) THEN
139  yatt='W/s2'
140  CALL def_var_netcdf(dgu, &
141  ifile_id,'CD_WAT' ,'Drag_Coefficient_For_Momentum ' ,iddim,yatt_title,yatt)
142  yatt='W/s'
143  CALL def_var_netcdf(dgu, &
144  ifile_id,'CH_WAT' ,'Drag_Coefficient_For_Heat ' ,iddim,yatt_title,yatt)
145  yatt='W/s/K'
146  CALL def_var_netcdf(dgu, &
147  ifile_id,'CE_WAT' ,'Drag_Coefficient_For_Evaporation' ,iddim,yatt_title,yatt)
148  yatt='m'
149  CALL def_var_netcdf(dgu, &
150  ifile_id,'Z0_WAT' ,'Roughness_Length_For_Momentum' ,iddim,yatt_title,yatt)
151  yatt='m'
152  CALL def_var_netcdf(dgu, &
153  ifile_id,'Z0H_WAT' ,'Roughness_Length_For_Heat' ,iddim,yatt_title,yatt)
154 ENDIF
155 !
156 IF (dgw%LSURF_VARS) THEN
157  yatt='kg/kg'
158  CALL def_var_netcdf(dgu, &
159  ifile_id,'QS_WAT' ,'Surface_Humidity ' ,iddim,yatt_title,yatt)
160 ENDIF
161 !
162 IF (dgw%N2M>0) THEN
163  yatt='K'
164  CALL def_var_netcdf(dgu, &
165  ifile_id,'T2M_WAT' ,'2m_Temperature ' ,iddim,yatt_title,yatt)
166  CALL def_var_netcdf(dgu, &
167  ifile_id,'T2MMIN_WAT' ,'Minimum_2m_Temperature' ,iddim,yatt_title,yatt)
168  CALL def_var_netcdf(dgu, &
169  ifile_id,'T2MMAX_WAT' ,'Maximum_2m_Temperature' ,iddim,yatt_title,yatt)
170  yatt='kg/kg'
171  CALL def_var_netcdf(dgu, &
172  ifile_id,'Q2M_WAT' ,'2m_Specific_Humidity ' ,iddim,yatt_title,yatt)
173  yatt='(-)'
174  CALL def_var_netcdf(dgu, &
175  ifile_id,'HU2M_WAT','2m_Relative_Humidity ' ,iddim,yatt_title,yatt)
176  CALL def_var_netcdf(dgu, &
177  ifile_id,'HU2MMIN_WAT','Minimum_2m_Relative_Humidity ' ,iddim,yatt_title,yatt)
178  CALL def_var_netcdf(dgu, &
179  ifile_id,'HU2MMAX_WAT','Maximum_2m_Relative_Humidity ' ,iddim,yatt_title,yatt)
180  yatt='m/s'
181  CALL def_var_netcdf(dgu, &
182  ifile_id,'ZON10M_WAT','10m_Zonal_wind ' ,iddim,yatt_title,yatt)
183  CALL def_var_netcdf(dgu, &
184  ifile_id,'MER10M_WAT','10m_Meridian_Wind ' ,iddim,yatt_title,yatt)
185  CALL def_var_netcdf(dgu, &
186  ifile_id,'W10M_WAT','10m_Wind ' ,iddim,yatt_title,yatt)
187  CALL def_var_netcdf(dgu, &
188  ifile_id,'W10MMAX_WAT','Maximum_10m_Wind ' ,iddim,yatt_title,yatt)
189 ENDIF
190 !
191 IF (dgw%N2M>0) THEN
192  yatt='-'
193  CALL def_var_netcdf(dgu, &
194  ifile_id,'RI_WAT' ,'Averaged_Richardson_Number' ,iddim,yatt_title,yatt)
195 ENDIF
196 !
197 IF (dgw%LSURF_BUDGET) THEN
198  yatt='W/m2'
199  CALL def_var_netcdf(dgu, &
200  ifile_id,'RN_WAT' ,'Averaged_Net_Radiation' ,iddim,yatt_title,yatt)
201  CALL def_var_netcdf(dgu, &
202  ifile_id,'H_WAT' ,'Averaged_Sensible_Heat_Flux' ,iddim,yatt_title,yatt)
203  CALL def_var_netcdf(dgu, &
204  ifile_id,'LE_WAT' ,'Averaged_Total_Latent_Heat_Flux ' ,iddim,yatt_title,yatt)
205  CALL def_var_netcdf(dgu, &
206  ifile_id,'LEI_WAT' ,'Averaged_Sublimation_Latent_Heat_Flux ' ,iddim,yatt_title,yatt)
207  CALL def_var_netcdf(dgu, &
208  ifile_id,'GFLUX_WAT' ,'Averaged_Ground_Heat_Flux ' ,iddim,yatt_title,yatt)
209  IF(dgw%LRAD_BUDGET)THEN
210  CALL def_var_netcdf(dgu, &
211  ifile_id,'SWD_WAT' ,'Averaged_Downward_SW ' ,iddim,yatt_title,yatt)
212  CALL def_var_netcdf(dgu, &
213  ifile_id,'SWU_WAT' ,'Averaged_Upward_SW ' ,iddim,yatt_title,yatt)
214  CALL def_var_netcdf(dgu, &
215  ifile_id,'LWD_WAT' ,'Averaged_Downward_LW ' ,iddim,yatt_title,yatt)
216  CALL def_var_netcdf(dgu, &
217  ifile_id,'LWU_WAT' ,'Averaged_Upward_LW ' ,iddim,yatt_title,yatt)
218  ENDIF
219  yatt='kg/ms2'
220  CALL def_var_netcdf(dgu, &
221  ifile_id,'FMU_WAT' ,'Averaged_Zonal_Wind_Stress ' ,iddim,yatt_title,yatt)
222  CALL def_var_netcdf(dgu, &
223  ifile_id,'FMV_WAT' ,'Averaged_Merid_Wind_Stress ' ,iddim,yatt_title,yatt)
224  yatt = 'kg/m2s'
225  CALL def_var_netcdf(dgu, &
226  ifile_id,'EVAP_WAT' ,'Averaged_Evapotranspiration' ,iddim,yatt_title,yatt)
227  CALL def_var_netcdf(dgu, &
228  ifile_id,'SUBL_WAT' ,'Averaged_Sublimation_of_ice' ,iddim,yatt_title,yatt)
229 ENDIF
230 !
231 IF (chw%SVW%NBEQ>0 .AND. chw%CCH_DRY_DEP=="WES89 ") THEN
232  !
233  yatt="(m/s)"
234  !
235  DO jsv = 1,SIZE(chw%CCH_NAMES,1)
236  !
237  yrecfm = 'DV_WAT_'//trim(chw%CCH_NAMES(jsv))
238  WRITE(ycomment,'(A7,I3.3)')'DV_WAT_',jsv
239  CALL def_var_netcdf(dgu, &
240  ifile_id,yrecfm,ycomment,iddim,yatt_title,yatt)
241  !
242  ENDDO
243  !
244 END IF
245 !
246  CALL ol_write_coord(dgu, &
247  yfile,ifile_id,iddim,yatt_title,yname_dim,yunit1,yunit2,idim1,ydate,zx,zy)
248 !
249 IF (dgw%LSURF_BUDGETC) THEN
250  !
251  yfile='WATFLUX_DIAG_CUMUL.OUT.nc'
252  CALL create_file(yfile,idims,yname_dim,ifile_id,iddim)
253  jret=nf_redef(ifile_id)
254  !
255  yatt='J/m2'
256  CALL def_var_netcdf(dgu, &
257  ifile_id,'RNC_WAT' ,'Cumulated_Averaged_Net_Radiation' ,iddim,yatt_title,yatt)
258  CALL def_var_netcdf(dgu, &
259  ifile_id,'HC_WAT' ,'Cumulated_Averaged_Sensible_Heat_Flux' ,iddim,yatt_title,yatt)
260  CALL def_var_netcdf(dgu, &
261  ifile_id,'LEC_WAT' ,'Cumulated_Averaged_Total_Latent_Heat_Flux',iddim,yatt_title,yatt)
262  CALL def_var_netcdf(dgu, &
263  ifile_id,'LEIC_WAT' ,'Cumulated_Averaged_Sublimation_Latent_Heat_Flux',iddim,yatt_title,yatt)
264  CALL def_var_netcdf(dgu, &
265  ifile_id,'GFLUXC_WAT','Cumulated_Averaged_Ground_Heat_Flux' ,iddim,yatt_title,yatt)
266  IF(dgw%LRAD_BUDGET)THEN
267  CALL def_var_netcdf(dgu, &
268  ifile_id,'SWDC_WAT' ,'Cumulated_Averaged_Downward_SW ' ,iddim,yatt_title,yatt)
269  CALL def_var_netcdf(dgu, &
270  ifile_id,'SWUC_WAT' ,'Cumulated_Averaged_Upward_SW ' ,iddim,yatt_title,yatt)
271  CALL def_var_netcdf(dgu, &
272  ifile_id,'LWDC_WAT' ,'Cumulated_Averaged_Downward_LW ' ,iddim,yatt_title,yatt)
273  CALL def_var_netcdf(dgu, &
274  ifile_id,'LWUC_WAT' ,'Cumulated_Averaged_Upward_LW ' ,iddim,yatt_title,yatt)
275  ENDIF
276  yatt='kg/ms'
277  CALL def_var_netcdf(dgu, &
278  ifile_id,'FMUC_WAT' ,'Cumulated_Averaged_Zonal_Wind_Stress ' ,iddim,yatt_title,yatt)
279  CALL def_var_netcdf(dgu, &
280  ifile_id,'FMVC_WAT' ,'Cumulated_Averaged_Merid_Wind_Stress ' ,iddim,yatt_title,yatt)
281  yatt='kg/m2'
282  CALL def_var_netcdf(dgu, &
283  ifile_id,'EVAPC_WAT' ,'Cumulated_Averaged_Evapotranspiration' ,iddim,yatt_title,yatt)
284  CALL def_var_netcdf(dgu, &
285  ifile_id,'SUBLC_WAT' ,'Cumulated_Averaged_Sublimation_of_ice' ,iddim,yatt_title,yatt)
286  !
287  CALL ol_write_coord(dgu, &
288  yfile,ifile_id,iddim,yatt_title,yname_dim,yunit1,yunit2,idim1,ydate,zx,zy)
289  !
290 ENDIF
291 !
292 yfile='WATFLUX_PROGNOSTIC.OUT.nc'
293  CALL create_file(yfile,idims,yname_dim,ifile_id,iddim)
294 jret=nf_redef(ifile_id)
295 !
296 yatt='K'
297  CALL def_var_netcdf(dgu, &
298  ifile_id,'TS_WATER' ,'Water_Temperature ' ,iddim,yatt_title,yatt)
299 !
300 yatt='m'
301  CALL def_var_netcdf(dgu, &
302  ifile_id,'Z0WATER' ,'Roughness length ' ,iddim,yatt_title,yatt)
303 !
304 IF(w%LSBL) THEN
305  DO jlayer=1,wsb%NLVL
306  WRITE(ylvlv,'(I2.2)') jlayer
307  CALL def_var_netcdf(dgu, &
308  ifile_id,'WAT_SBL_Z'//ylvlv,'Canopy height',iddim,yatt_title,(/'m'/))
309  CALL def_var_netcdf(dgu, &
310  ifile_id,'WAT_SBL_U'//ylvlv,'Canopy wind',iddim,yatt_title,(/'m/s'/))
311  CALL def_var_netcdf(dgu, &
312  ifile_id,'WAT_SBL_T'//ylvlv,'Canopy temp',iddim,yatt_title,(/'K'/))
313  CALL def_var_netcdf(dgu, &
314  ifile_id,'WAT_SBL_Q'//ylvlv,'Canopy humidity',iddim,yatt_title,(/'kg/m3'/))
315  CALL def_var_netcdf(dgu, &
316  ifile_id,'WAT_SBL_E'//ylvlv,'Canopy TKE',iddim,yatt_title,(/'m2/s2'/))
317  END DO
318 ENDIF
319 !
320  CALL ol_write_coord(dgu, &
321  yfile,ifile_id,iddim,yatt_title,yname_dim,yunit1,yunit2,idim1,ydate,zx,zy)
322 !
323 IF (lhook) CALL dr_hook('INIT_OUTFN_WATER_N',1,zhook_handle)
324 !
325 END SUBROUTINE init_outfn_water_n
subroutine create_file(HFILE, KDIMS, HNAME_DIM, KFILE_ID, KDIM_ID)
Definition: create_file.F90:6
subroutine get_dim_full_n(U, KDIM_FULL)
subroutine ol_write_coord(DGU, HFILE, KFILE_ID, KDDIM, HATT_TITLE, HNAME_DIM, HUNIT1, HUNIT2, KDIM1, HDATE, PX, PY)
subroutine get_date_ol(TPTIME, PTSTEP, HDATE)
Definition: get_date_ol.F90:6
subroutine ol_define_dim(UG, U, HPROGRAM, KLUOUT, KNI, KDIM1, HUNIT1, HUNIT2, PX, PY, KDIMS, KDDIM, HNAME_DIM, KNPATCH)
subroutine init_outfn_water_n(CHW, DGU, DGW, UG, U, W, WSB, HPROGRAM, KLUOUT)
subroutine def_var_netcdf(DGU, KFILE_ID, HNAME, HLONG_NAME, KDIM_ID, HATT_TITLE, HATT_TEXT, KVAR_ID, KTYPE, KLEN)