SURFEX  V8_0
Surfex V8_0 release
 All Classes Files Functions Variables
init_outfn_flaken.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_flake_n (CHW, DGF, DGU, F, FSB, UG, U, &
7  hprogram,kluout)
8 ! ###############################
9 !
10 !!**** *INIT_OUTFN_FLAKE_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-10 by S. Faroux
37 !! Modified 04-13 by P. Le Moigne
38 !-------------------------------------------------------------------------------
39 !
40 !* 0. DECLARATIONS
41 ! ------------
42 !
43 !
44 !
45 !
46 !
47 !
48 !
52 USE modd_flake_n, ONLY : flake_t
53 USE modd_flake_sbl_n, ONLY : flake_sbl_t
55 USE modd_surf_atm_n, ONLY : surf_atm_t
56 !
57 USE modd_ol_fileid, ONLY : xvar_to_fileout, xid, xout
58 !
59 USE modn_io_offline, ONLY : xtstep_output
60 !
61 USE modi_get_dim_full_n
62 USE modi_ol_define_dim
63 USE modi_get_date_ol
64 USE modi_create_file
65 USE modi_def_var_netcdf
66 USE modi_ol_write_coord
67 !
68 USE yomhook ,ONLY : lhook, dr_hook
69 USE parkind1 ,ONLY : jprb
70 !
71 IMPLICIT NONE
72 include 'netcdf.inc'
73 
74 !
75 TYPE(ch_watflux_t), INTENT(INOUT) :: chw
76 TYPE(diag_flake_t), INTENT(INOUT) :: dgf
77 TYPE(diag_surf_atm_t), INTENT(INOUT) :: dgu
78 TYPE(flake_t), INTENT(INOUT) :: f
79 TYPE(flake_sbl_t), INTENT(INOUT) :: fsb
80 TYPE(surf_atm_grid_t), INTENT(INOUT) :: ug
81 TYPE(surf_atm_t), INTENT(INOUT) :: u
82 !
83  CHARACTER(LEN=6), INTENT(IN) :: hprogram
84 INTEGER, INTENT(IN) :: kluout
85 !
86 !* 0.2 Declarations of local variables
87 ! -------------------------------
88 !
89  CHARACTER(LEN=100), DIMENSION(:), POINTER :: yname_dim
90 !
91  CHARACTER(LEN=40),DIMENSION(1) :: ydate
92  CHARACTER(LEN=13),DIMENSION(1) :: yunit1, yunit2
93  CHARACTER(LEN=100) :: ycomment
94  CHARACTER(LEN=50) :: yfile
95  CHARACTER(LEN=100), DIMENSION(1) :: yatt_title, yatt
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, jret
103 INTEGER :: jlayer
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_FLAKE_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(f%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='FLAKE_DIAGNOSTICS.OUT.nc'
133  CALL create_file(yfile,idims,yname_dim,ifile_id,iddim)
134 jret=nf_redef(ifile_id)
135 yatt='dimensionless'
136 !
137 IF (dgf%LCOEF) THEN
138  yatt='W/s2'
139  CALL def_var_netcdf(dgu, &
140  ifile_id,'CD_WAT' ,'Drag_Coefficient_For_Momentum ' ,iddim,yatt_title,yatt)
141  yatt='W/s'
142  CALL def_var_netcdf(dgu, &
143  ifile_id,'CH_WAT' ,'Drag_Coefficient_For_Heat ' ,iddim,yatt_title,yatt)
144  yatt='W/s/K'
145  CALL def_var_netcdf(dgu, &
146  ifile_id,'CE_WAT' ,'Drag_Coefficient_For_Evaporation' ,iddim,yatt_title,yatt)
147  yatt='m'
148  CALL def_var_netcdf(dgu, &
149  ifile_id,'Z0_WAT' ,'Roughness_Length_For_Momentum' ,iddim,yatt_title,yatt)
150  yatt='m'
151  CALL def_var_netcdf(dgu, &
152  ifile_id,'Z0H_WAT' ,'Roughness_Length_For_Heat' ,iddim,yatt_title,yatt)
153 ENDIF
154 !
155 IF (dgf%LSURF_VARS) THEN
156  yatt='kg/kg'
157  CALL def_var_netcdf(dgu, &
158  ifile_id,'QS_WAT' ,'Surface_Humidity ' ,iddim,yatt_title,yatt)
159 ENDIF
160 !
161 IF (dgf%N2M>0) THEN
162  yatt='K'
163  CALL def_var_netcdf(dgu, &
164  ifile_id,'T2M_WAT' ,'2m_Temperature ' ,iddim,yatt_title,yatt)
165  CALL def_var_netcdf(dgu, &
166  ifile_id,'T2MMIN_WAT' ,'Minimum_2m_Temperature' ,iddim,yatt_title,yatt)
167  CALL def_var_netcdf(dgu, &
168  ifile_id,'T2MMAX_WAT' ,'Maximum_2m_Temperature' ,iddim,yatt_title,yatt)
169  yatt='kg/kg'
170  CALL def_var_netcdf(dgu, &
171  ifile_id,'Q2M_WAT' ,'2m_Specific_Humidity ' ,iddim,yatt_title,yatt)
172  yatt='(-)'
173  CALL def_var_netcdf(dgu, &
174  ifile_id,'HU2M_WAT','2m_Relative_Humidity ' ,iddim,yatt_title,yatt)
175  CALL def_var_netcdf(dgu, &
176  ifile_id,'HU2MMIN_WAT','Minimum_2m_Relative_Humidity ' ,iddim,yatt_title,yatt)
177  CALL def_var_netcdf(dgu, &
178  ifile_id,'HU2MMAX_WAT','Maximum_2m_Relative_Humidity ' ,iddim,yatt_title,yatt)
179  yatt='m/s'
180  CALL def_var_netcdf(dgu, &
181  ifile_id,'ZON10M_WAT','10m_Zonal_wind ' ,iddim,yatt_title,yatt)
182  CALL def_var_netcdf(dgu, &
183  ifile_id,'MER10M_WAT','10m_Meridian_Wind ' ,iddim,yatt_title,yatt)
184  CALL def_var_netcdf(dgu, &
185  ifile_id,'W10M_WAT','10m_Wind_Strength ' ,iddim,yatt_title,yatt)
186  CALL def_var_netcdf(dgu, &
187  ifile_id,'W10MMAX_WAT','Maximum_10m_Wind_Strength ' ,iddim,yatt_title,yatt)
188 ENDIF
189 !
190 IF (dgf%N2M>0) THEN
191  yatt='-'
192  CALL def_var_netcdf(dgu, &
193  ifile_id,'RI_WAT' ,'Averaged_Richardson_Number' ,iddim,yatt_title,yatt)
194 ENDIF
195 !
196 IF(dgf%LSURF_BUDGET) THEN
197  yatt='W/m2'
198  CALL def_var_netcdf(dgu, &
199  ifile_id,'RN_WAT' ,'Averaged_Net_Radiation' ,iddim,yatt_title,yatt)
200  CALL def_var_netcdf(dgu, &
201  ifile_id,'H_WAT' ,'Averaged_Sensible_Heat_Flux' ,iddim,yatt_title,yatt)
202  CALL def_var_netcdf(dgu, &
203  ifile_id,'LE_WAT' ,'Averaged_Latent_Heat_Flux ' ,iddim,yatt_title,yatt)
204  CALL def_var_netcdf(dgu, &
205  ifile_id,'LEI_WAT' ,'Averaged_Sublimation_Latent_Heat_Flux ' ,iddim,yatt_title,yatt)
206  CALL def_var_netcdf(dgu, &
207  ifile_id,'GFLUX_WAT' ,'Averaged_Ground_Heat_Flux ' ,iddim,yatt_title,yatt)
208  IF(dgf%LRAD_BUDGET)THEN
209  CALL def_var_netcdf(dgu, &
210  ifile_id,'SWD_WAT' ,'Averaged_Downward_SW ' ,iddim,yatt_title,yatt)
211  CALL def_var_netcdf(dgu, &
212  ifile_id,'SWU_WAT' ,'Averaged_Upward_SW ' ,iddim,yatt_title,yatt)
213  CALL def_var_netcdf(dgu, &
214  ifile_id,'LWD_WAT' ,'Averaged_Downward_LW ' ,iddim,yatt_title,yatt)
215  CALL def_var_netcdf(dgu, &
216  ifile_id,'LWU_WAT' ,'Averaged_Upward_LW ' ,iddim,yatt_title,yatt)
217  ENDIF
218  yatt='kg/ms2'
219  CALL def_var_netcdf(dgu, &
220  ifile_id,'FMU_WAT' ,'Averaged_Zonal_Wind_Stress ' ,iddim,yatt_title,yatt)
221  CALL def_var_netcdf(dgu, &
222  ifile_id,'FMV_WAT' ,'Averaged_Merid_Wind_Stress ' ,iddim,yatt_title,yatt)
223  yatt = 'kg/m2s'
224  CALL def_var_netcdf(dgu, &
225  ifile_id,'EVAP_WAT' ,'Averaged_Total_Evaporation' ,iddim,yatt_title,yatt)
226  CALL def_var_netcdf(dgu, &
227  ifile_id,'SUBL_WAT' ,'Averaged_Sublimation_of_ice/snow' ,iddim,yatt_title,yatt)
228 ENDIF
229 !
230 IF (dgf%LSURF_BUDGET.OR.dgf%LSURF_BUDGETC) THEN
231  yatt='-'
232  CALL def_var_netcdf(dgu, &
233  ifile_id,'TALB_WAT' , 'Flake_total_albedo ' ,iddim,yatt_title,yatt)
234  yatt='kg/m2'
235  CALL def_var_netcdf(dgu, &
236  ifile_id,'WSN_WAT' , 'Flake_snow_water_equivalent' ,iddim,yatt_title,yatt)
237 ENDIF
238 !
239 IF (chw%SVW%NBEQ>0 .AND. chw%CCH_DRY_DEP=="WES89 ") THEN
240  !
241  yatt="(m/s)"
242  !
243  DO jsv = 1,SIZE(chw%CCH_NAMES,1)
244  !
245  yrecfm = 'DV_WAT_'//trim(chw%CCH_NAMES(jsv))
246  WRITE(ycomment,'(A7,I3.3)')'DV_WAT_',jsv
247  CALL def_var_netcdf(dgu, &
248  ifile_id,yrecfm,ycomment,iddim,yatt_title,yatt)
249  !
250  ENDDO
251  !
252 END IF
253 !
254  CALL ol_write_coord(dgu, &
255  yfile,ifile_id,iddim,yatt_title,yname_dim,yunit1,yunit2,idim1,ydate,zx,zy)
256 !
257 IF (dgf%LSURF_BUDGETC) THEN
258  !
259  yfile='FLAKE_DIAG_CUMUL.OUT.nc'
260  CALL create_file(yfile,idims,yname_dim,ifile_id,iddim)
261  !
262  yatt='J/m2'
263  CALL def_var_netcdf(dgu, &
264  ifile_id,'RNC_WAT' ,'Cumulated_Averaged_Net_Radiation' ,iddim,yatt_title,yatt)
265  CALL def_var_netcdf(dgu, &
266  ifile_id,'HC_WAT' ,'Cumulated_Averaged_Sensible_Heat_Flux' ,iddim,yatt_title,yatt)
267  CALL def_var_netcdf(dgu, &
268  ifile_id,'LEC_WAT' ,'Cumulated_Averaged_Total_Latent_Heat_Flux',iddim,yatt_title,yatt)
269  CALL def_var_netcdf(dgu, &
270  ifile_id,'LEIC_WAT' ,'Cumulated_Averaged_Sublimation_Latent_Heat_Flux',iddim,yatt_title,yatt)
271  CALL def_var_netcdf(dgu, &
272  ifile_id,'GFLUXC_WAT','Cumulated_Averaged_Ground_Heat_Flux' ,iddim,yatt_title,yatt)
273  IF(dgf%LRAD_BUDGET)THEN
274  CALL def_var_netcdf(dgu, &
275  ifile_id,'SWDC_WAT' ,'Cumulated_Averaged_Downward_SW ' ,iddim,yatt_title,yatt)
276  CALL def_var_netcdf(dgu, &
277  ifile_id,'SWUC_WAT' ,'Cumulated_Averaged_Upward_SW ' ,iddim,yatt_title,yatt)
278  CALL def_var_netcdf(dgu, &
279  ifile_id,'LWDC_WAT' ,'Cumulated_Averaged_Downward_LW ' ,iddim,yatt_title,yatt)
280  CALL def_var_netcdf(dgu, &
281  ifile_id,'LWUC_WAT' ,'Cumulated_Averaged_Upward_LW ' ,iddim,yatt_title,yatt)
282  ENDIF
283  yatt='kg/ms'
284  CALL def_var_netcdf(dgu, &
285  ifile_id,'FMUC_WAT' ,'Cumulated_Averaged_Zonal_Wind_Stress ' ,iddim,yatt_title,yatt)
286  CALL def_var_netcdf(dgu, &
287  ifile_id,'FMVC_WAT' ,'Cumulated_Averaged_Merid_Wind_Stress ' ,iddim,yatt_title,yatt)
288  yatt='kg/m2'
289  CALL def_var_netcdf(dgu, &
290  ifile_id,'EVAPC_WAT' ,'Cumulated_Averaged_Total_Evaporation' ,iddim,yatt_title,yatt)
291  CALL def_var_netcdf(dgu, &
292  ifile_id,'SUBLC_WAT' ,'Cumulated_Averaged_Sublimation_of_ice/snow',iddim,yatt_title,yatt)
293  !
294  CALL ol_write_coord(dgu, &
295  yfile,ifile_id,iddim,yatt_title,yname_dim,yunit1,yunit2,idim1,ydate,zx,zy)
296  !
297 ENDIF
298 !
299 yfile='FLAKE_PROGNOSTIC.OUT.nc'
300  CALL create_file(yfile,idims,yname_dim,ifile_id,iddim)
301 jret=nf_redef(ifile_id)
302 yatt='dimensionless'
303 !
304 yatt='K'
305  CALL def_var_netcdf(dgu, &
306  ifile_id,'TS_WATER' , 'Averaged_Water_S_Temperature' ,iddim,yatt_title,yatt)
307  CALL def_var_netcdf(dgu, &
308  ifile_id,'T_MNW' , 'Averaged_Water_Temperature ' ,iddim,yatt_title,yatt)
309  CALL def_var_netcdf(dgu, &
310  ifile_id,'T_WML' , 'Mixed_layer_wat_temperature ' ,iddim,yatt_title,yatt)
311  CALL def_var_netcdf(dgu, &
312  ifile_id,'T_BOT' , 'Bottom_Water_Temperature ' ,iddim,yatt_title,yatt)
313 yatt='m'
314  CALL def_var_netcdf(dgu, &
315  ifile_id,'H_ML' , 'Mixed_Layer_Depth ' ,iddim,yatt_title,yatt)
316 yatt=' '
317  CALL def_var_netcdf(dgu, &
318  ifile_id,'CT' , 'Termocline_Shape_Factor ' ,iddim,yatt_title,yatt)
319 yatt='K'
320  CALL def_var_netcdf(dgu, &
321  ifile_id,'T_SNOW' , 'Temperature at the air-snow interface' ,iddim,yatt_title,yatt)
322  CALL def_var_netcdf(dgu, &
323  ifile_id,'T_ICE' , 'Ice_surface_Temperature ' ,iddim,yatt_title,yatt)
324  CALL def_var_netcdf(dgu, &
325  ifile_id,'T_B1' , 'Temperature of the upper layer of sediments ' ,iddim,yatt_title,yatt)
326 yatt='m'
327  CALL def_var_netcdf(dgu, &
328  ifile_id,'H_SNOW' , 'Snow thickness' ,iddim,yatt_title,yatt)
329  CALL def_var_netcdf(dgu, &
330  ifile_id,'H_ICE' , 'Ice thickness' ,iddim,yatt_title,yatt)
331  CALL def_var_netcdf(dgu, &
332  ifile_id,'H_B1' , 'Thickness of the upper layer of sediments' ,iddim,yatt_title,yatt)
333 yatt='m'
334  CALL def_var_netcdf(dgu, &
335  ifile_id,'H_SNOW' , 'Snow thickness' ,iddim,yatt_title,yatt)
336  CALL def_var_netcdf(dgu, &
337  ifile_id,'H_ICE' , 'Ice thickness' ,iddim,yatt_title,yatt)
338  CALL def_var_netcdf(dgu, &
339  ifile_id,'H_B1' , 'Thickness of the upper layer of sediments' ,iddim,yatt_title,yatt)
340 yatt='m'
341  CALL def_var_netcdf(dgu, &
342  ifile_id,'Z0WATER' ,'Roughness length ' ,iddim,yatt_title,yatt)
343 yatt='m/s'
344  CALL def_var_netcdf(dgu, &
345  ifile_id,'USTAR_WATER','friction velocity ' ,iddim,yatt_title,yatt)
346 !
347 !
348 IF (f%LSBL) THEN
349  DO jlayer=1,fsb%NLVL
350  WRITE(ylvlv,'(I2.2)') jlayer
351  CALL def_var_netcdf(dgu, &
352  ifile_id,'WAT_SBL_Z'//ylvlv,'Canopy height', iddim,yatt_title,(/'m'/))
353  CALL def_var_netcdf(dgu, &
354  ifile_id,'WAT_SBL_U'//ylvlv,'Canopy wind', iddim,yatt_title,(/'m/s'/))
355  CALL def_var_netcdf(dgu, &
356  ifile_id,'WAT_SBL_T'//ylvlv,'Canopy temp', iddim,yatt_title,(/'K'/))
357  CALL def_var_netcdf(dgu, &
358  ifile_id,'WAT_SBL_Q'//ylvlv,'Canopy humidity', iddim,yatt_title,(/'kg/m3'/))
359  CALL def_var_netcdf(dgu, &
360  ifile_id,'WAT_SBL_E'//ylvlv,'Canopy TKE', iddim,yatt_title,(/'m2/s2'/))
361  END DO
362 ENDIF
363 !
364  CALL ol_write_coord(dgu, &
365  yfile,ifile_id,iddim,yatt_title,yname_dim,yunit1,yunit2,idim1,ydate,zx,zy)
366 !
367 IF (lhook) CALL dr_hook('INIT_OUTFN_FLAKE_N',1,zhook_handle)
368 !
369 END SUBROUTINE init_outfn_flake_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 init_outfn_flake_n(CHW, DGF, DGU, F, FSB, UG, U, HPROGRAM, KLUOUT)
subroutine ol_define_dim(UG, U, HPROGRAM, KLUOUT, KNI, KDIM1, HUNIT1, HUNIT2, PX, PY, KDIMS, KDDIM, HNAME_DIM, KNPATCH)
subroutine def_var_netcdf(DGU, KFILE_ID, HNAME, HLONG_NAME, KDIM_ID, HATT_TITLE, HATT_TEXT, KVAR_ID, KTYPE, KLEN)