SURFEX  V8_0
Surfex V8_0 release
 All Classes Files Functions Variables
init_outfn_surf_atmn.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_surf_atm_n (CHE, CHN, CHU, DGU, UG, U, SV, &
7  hprogram,kluout)
8 ! ###############################
9 !
10 !
11 !!**** *INIT_OUTFN_SURF_ATM_n* - create output files and defines variables
12 !!
13 !! PURPOSE
14 !! -------
15 !!
16 !!** METHOD
17 !! ------
18 !!
19 !! EXTERNAL
20 !! --------
21 !!
22 !!
23 !! IMPLICIT ARGUMENTS
24 !! ------------------
25 !!
26 !! REFERENCE
27 !! ---------
28 !!
29 !!
30 !! AUTHOR
31 !! ------
32 !! P. LeMoigne *Meteo France*
33 !!
34 !! MODIFICATIONS
35 !! -------------
36 !! Original 05-04
37 !! Modified 06-10 by S. Faroux
38 !! modified 06-13 B. Decharme : Add some key
39 !! Add diag (Qs, Evap, Subl)
40 !-------------------------------------------------------------------------------
41 !
42 !* 0. DECLARATIONS
43 ! ------------
44 
45 !
46 !
49 USE modd_ch_surf_n, ONLY : ch_surf_t
52 USE modd_surf_atm_n, ONLY : surf_atm_t
53 USE modd_sv_n, ONLY : sv_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 IMPLICIT NONE
71 include 'netcdf.inc'
72 
73 !
74 TYPE(ch_emis_field_t), INTENT(INOUT) :: che
75 TYPE(ch_emis_snap_t), INTENT(INOUT) :: chn
76 TYPE(ch_surf_t), INTENT(INOUT) :: chu
77 TYPE(diag_surf_atm_t), INTENT(INOUT) :: dgu
78 TYPE(surf_atm_grid_t), INTENT(INOUT) :: ug
79 TYPE(surf_atm_t), INTENT(INOUT) :: u
80 TYPE(sv_t), INTENT(INOUT) :: sv
81 !
82  CHARACTER(LEN=6), INTENT(IN) :: hprogram
83 INTEGER, INTENT(IN) :: kluout
84 !
85 !* 0.2 Declarations of local variables
86 ! -------------------------------
87 !
88  CHARACTER(LEN=100), DIMENSION(:), POINTER :: yname_dim
89  CHARACTER(LEN=100), DIMENSION(:),ALLOCATABLE :: yname_dim1
90  CHARACTER(LEN=100), DIMENSION(1) :: yatt_title, yatt
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=12) :: yrecfm
96 !
97 REAL,DIMENSION(:), POINTER :: zx, zy
98 !
99 INTEGER, DIMENSION(:), POINTER :: idims, iddim
100 INTEGER, DIMENSION(:), ALLOCATABLE :: iddim1, idims1
101 INTEGER :: ifile_id, ivar_id, idimid
102 INTEGER :: idim1, idim2, indims
103 INTEGER :: ini
104 INTEGER :: jlayer
105 INTEGER :: jret, jspec
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_SURF_ATM_N',0,zhook_handle)
114 !
115 !
116  CALL get_dim_full_n(u, &
117  ini)
118 !
119  CALL ol_define_dim(ug, u, &
120  hprogram, kluout, ini, idim1, yunit1, yunit2, &
121  zx, zy, idims, iddim, yname_dim)
122  CALL get_date_ol(u%TTIME,xtstep_output,ydate(1))
123 !
124 indims = SIZE(iddim)
125 ALLOCATE(idims1(indims-1))
126 ALLOCATE(iddim1(indims-1))
127 ALLOCATE(yname_dim1(indims-1))
128 idims1=idims(1:indims-1)
129 yname_dim1=yname_dim(1:indims-1)
130 !
131 ! 4. Create output file for fraction of tiles
132 !--------------------------------------------
133 !
134 IF (ALLOCATED(xvar_to_fileout)) DEALLOCATE(xvar_to_fileout)
135 IF (ALLOCATED(xid)) DEALLOCATE(xid)
136 ALLOCATE(xid(0))
137 xout=0
138 !
139 yatt_title(1)='units'
140 !
141 !
142 yfile='SURF_ATM.OUT.nc'
143  CALL create_file(yfile,idims1,yname_dim1,ifile_id,iddim1)
144 jret=nf_redef(ifile_id)
145 !
146 IF (dgu%LFRAC) THEN
147  yatt='%'
148  CALL def_var_netcdf(dgu, &
149  ifile_id,'FRAC_SEA ','Fraction_of_sea ',iddim1,yatt_title,yatt)
150  CALL def_var_netcdf(dgu, &
151  ifile_id,'FRAC_WATER ','Fraction_of_water ',iddim1,yatt_title,yatt)
152  CALL def_var_netcdf(dgu, &
153  ifile_id,'FRAC_TOWN ','Fraction_of_town ',iddim1,yatt_title,yatt)
154  CALL def_var_netcdf(dgu, &
155  ifile_id,'FRAC_NATURE','Fraction_of_nature',iddim1,yatt_title,yatt)
156 ENDIF
157 !
158  CALL ol_write_coord(dgu, &
159  yfile,ifile_id,iddim1,yatt_title,yname_dim1,yunit1,yunit2,idim1,ydate,zx,zy)
160 !
161 DEALLOCATE(iddim1)
162 !
163 !
164 ! 5. Create output file for diagnostic variables
165 !-----------------------------------------------
166 yfile='SURF_ATM_DIAGNOSTICS.OUT.nc'
167  CALL create_file(yfile,idims,yname_dim,ifile_id,iddim)
168 jret=nf_redef(ifile_id)
169 !
170 IF (dgu%N2M>0) THEN
171  yatt='(-)'
172  CALL def_var_netcdf(dgu, &
173  ifile_id,'RI' ,'Averaged_Richardson_Number ' ,iddim,yatt_title,yatt)
174 ENDIF
175 !
176 IF (dgu%LCOEF) THEN
177  yatt='W/s2'
178  CALL def_var_netcdf(dgu, &
179  ifile_id,'CD' ,'Drag_Coefficient_For_Momentum ' ,iddim,yatt_title,yatt)
180  yatt='W/s'
181  CALL def_var_netcdf(dgu, &
182  ifile_id,'CH' ,'Drag_Coefficient_For_Heat ' ,iddim,yatt_title,yatt)
183  yatt='W/s/K'
184  CALL def_var_netcdf(dgu, &
185  ifile_id,'CE' ,'Drag_Coefficient_For_Evaporation' ,iddim,yatt_title,yatt)
186  yatt='m'
187  CALL def_var_netcdf(dgu, &
188  ifile_id,'Z0' ,'Roughness_Length_For_Momentum' ,iddim,yatt_title,yatt)
189  CALL def_var_netcdf(dgu, &
190  ifile_id,'Z0H' ,'Roughness_Length_For_Heat' ,iddim,yatt_title,yatt)
191  CALL def_var_netcdf(dgu, &
192  ifile_id,'UREF' ,'Reference_Height_For_Momentum' ,iddim,yatt_title,yatt)
193  CALL def_var_netcdf(dgu, &
194  ifile_id,'ZREF' ,'Reference_Height_For_Heat' ,iddim,yatt_title,yatt)
195 ENDIF
196 !
197 IF (dgu%LSURF_VARS) THEN
198  yatt='kg/kg'
199  CALL def_var_netcdf(dgu, &
200  ifile_id,'QS' ,'Surface_specific_humidity' ,iddim,yatt_title,yatt)
201 ENDIF
202 !
203 IF (dgu%LSURF_BUDGET) THEN
204  yatt='W/m2'
205  CALL def_var_netcdf(dgu, &
206  ifile_id,'RN' ,'Averaged_Net_Radiation ' ,iddim,yatt_title,yatt)
207  CALL def_var_netcdf(dgu, &
208  ifile_id,'H' ,'Averaged_Sensible_Heat_Flux' ,iddim,yatt_title,yatt)
209  CALL def_var_netcdf(dgu, &
210  ifile_id,'LE' ,'Averaged_Total_Latent_Heat_Flux ',iddim,yatt_title,yatt)
211  CALL def_var_netcdf(dgu, &
212  ifile_id,'LEI' ,'Averaged_Sublimation_Latent_Heat_Flux ',iddim,yatt_title,yatt)
213  CALL def_var_netcdf(dgu, &
214  ifile_id,'GFLUX','Averaged_Ground_Heat_Flux ' ,iddim,yatt_title,yatt)
215  !
216  IF (dgu%LRAD_BUDGET) THEN
217  !
218  CALL def_var_netcdf(dgu, &
219  ifile_id,'SWD' ,'Averaged_Downward_SW ' ,iddim,yatt_title,yatt)
220  CALL def_var_netcdf(dgu, &
221  ifile_id,'SWU' ,'Averaged_Upward_SW ' ,iddim,yatt_title,yatt)
222  CALL def_var_netcdf(dgu, &
223  ifile_id,'LWD' ,'Averaged_Downward_LW ' ,iddim,yatt_title,yatt)
224  CALL def_var_netcdf(dgu, &
225  ifile_id,'LWU' ,'Averaged_Upward_LW ' ,iddim,yatt_title,yatt)
226  !
227  ENDIF
228  !
229  yatt='kg/ms2'
230  CALL def_var_netcdf(dgu, &
231  ifile_id,'FMU' ,'Averaged_Zonal_Wind_Stress ' ,iddim,yatt_title,yatt)
232  CALL def_var_netcdf(dgu, &
233  ifile_id,'FMV' ,'Averaged_Merid_Wind_Stress ' ,iddim,yatt_title,yatt)
234  yatt='kg/m2/s'
235  CALL def_var_netcdf(dgu, &
236  ifile_id,'EVAP' ,'Averaged_Total_Evapotranspiration',iddim,yatt_title,yatt)
237  CALL def_var_netcdf(dgu, &
238  ifile_id,'SUBL' ,'Averaged_Sublimation_of_seaice' ,iddim,yatt_title,yatt)
239 ENDIF
240 !
241 IF (dgu%LSURF_BUDGETC) THEN
242  yatt='J/m2'
243  CALL def_var_netcdf(dgu, &
244  ifile_id,'RNC' ,'Cumulated_Averaged_Net_Radiation ' ,iddim,yatt_title,yatt)
245  CALL def_var_netcdf(dgu, &
246  ifile_id,'HC' ,'Cumulated_Averaged_Sensible_Heat_Flux' ,iddim,yatt_title,yatt)
247  CALL def_var_netcdf(dgu, &
248  ifile_id,'LEC' ,'Cumulated_Averaged_Total_Latent_Heat_Flux ',iddim,yatt_title,yatt)
249  CALL def_var_netcdf(dgu, &
250  ifile_id,'LEIC' ,'Cumulated_Averaged_Sublimation_Latent_Heat_Flux ',iddim,yatt_title,yatt)
251  CALL def_var_netcdf(dgu, &
252  ifile_id,'GFLUXC','Cumulated_Averaged_Ground_Heat_Flux ' ,iddim,yatt_title,yatt)
253  !
254  IF (dgu%LRAD_BUDGET .OR. (dgu%LSURF_BUDGETC .AND. .NOT.dgu%LRESET_BUDGETC)) THEN
255  !
256  CALL def_var_netcdf(dgu, &
257  ifile_id,'SWDC' ,'Cumulated_Averaged_Downward_SW ' ,iddim,yatt_title,yatt)
258  CALL def_var_netcdf(dgu, &
259  ifile_id,'SWUC' ,'Cumulated_Averaged_Upward_SW ' ,iddim,yatt_title,yatt)
260  CALL def_var_netcdf(dgu, &
261  ifile_id,'LWDC' ,'Cumulated_Averaged_Downward_LW ' ,iddim,yatt_title,yatt)
262  CALL def_var_netcdf(dgu, &
263  ifile_id,'LWUC' ,'Cumulated_Averaged_Upward_LW ' ,iddim,yatt_title,yatt)
264  !
265  ENDIF
266  !
267  yatt='kg/ms'
268  CALL def_var_netcdf(dgu, &
269  ifile_id,'FMUC' ,'Cumulated_Averaged_Zonal_Wind_Stress ' ,iddim,yatt_title,yatt)
270  CALL def_var_netcdf(dgu, &
271  ifile_id,'FMVC' ,'Cumulated_Averaged_Merid_Wind_Stress ' ,iddim,yatt_title,yatt)
272  yatt='kg/m2'
273  CALL def_var_netcdf(dgu, &
274  ifile_id,'EVAPC' ,'Cumulated_Averaged_Total_Evaporation' ,iddim,yatt_title,yatt)
275  CALL def_var_netcdf(dgu, &
276  ifile_id,'SUBLC' ,'Cumulated_Averaged_Sublimation_of_seaice',iddim,yatt_title,yatt)
277 ENDIF
278 !
279 IF (dgu%N2M>=1.OR.dgu%LSURF_BUDGET.OR.dgu%LSURF_BUDGETC) THEN
280  yatt='K'
281  CALL def_var_netcdf(dgu, &
282  ifile_id,'TS' ,'Effective_Surface_Temperature ',iddim,yatt_title,yatt)
283  CALL def_var_netcdf(dgu, &
284  ifile_id,'TSRAD' ,'Radiative_Surface_Skin_Temperature ',iddim,yatt_title,yatt)
285  yatt='-'
286  CALL def_var_netcdf(dgu, &
287  ifile_id,'EMIS' ,'Surface_emissivity ' ,iddim,yatt_title,yatt)
288 ENDIF
289 !
290 IF (dgu%N2M>0) THEN
291  !
292  IF (dgu%L2M_MIN_ZS) THEN
293  !
294  yatt='K'
295  CALL def_var_netcdf(dgu, &
296  ifile_id,'T2M_MIN_ZS' ,'2m_Temperature ' ,iddim,yatt_title,yatt)
297  yatt='kg/kg'
298  CALL def_var_netcdf(dgu, &
299  ifile_id,'Q2M_MIN_ZS' ,'2m_Specific_Humidity ' ,iddim,yatt_title,yatt)
300  yatt='(-)'
301  CALL def_var_netcdf(dgu, &
302  ifile_id,'HU2M_MIN_ZS','2m_Relative_Humidity ' ,iddim,yatt_title,yatt)
303  !
304  ENDIF
305  !
306  yatt='K'
307  CALL def_var_netcdf(dgu, &
308  ifile_id,'T2M' ,'2m_Temperature ' ,iddim,yatt_title,yatt)
309  CALL def_var_netcdf(dgu, &
310  ifile_id,'T2MMIN' ,'Minimum_2m_Temperature ' ,iddim,yatt_title,yatt)
311  CALL def_var_netcdf(dgu, &
312  ifile_id,'T2MMAX' ,'Maximum_2m_Temperature ' ,iddim,yatt_title,yatt)
313  yatt='kg/kg'
314  CALL def_var_netcdf(dgu, &
315  ifile_id,'Q2M' ,'2m_Specific_Humidity ' ,iddim,yatt_title,yatt)
316  yatt='(-)'
317  CALL def_var_netcdf(dgu, &
318  ifile_id,'HU2M','2m_Relative_Humidity ' ,iddim,yatt_title,yatt)
319  CALL def_var_netcdf(dgu, &
320  ifile_id,'HU2MMIN','Minimum_2m_Relative_Humidity ' ,iddim,yatt_title,yatt)
321  CALL def_var_netcdf(dgu, &
322  ifile_id,'HU2MMAX','Maximum_2m_Relative_Humidity ' ,iddim,yatt_title,yatt)
323  !
324  yatt='m/s'
325  CALL def_var_netcdf(dgu, &
326  ifile_id,'ZON10M','10m_Zonal_wind ' ,iddim,yatt_title,yatt)
327  CALL def_var_netcdf(dgu, &
328  ifile_id,'MER10M','10m_Meridian_Wind ' ,iddim,yatt_title,yatt)
329  CALL def_var_netcdf(dgu, &
330  ifile_id,'W10M','10m_Wind ' ,iddim,yatt_title,yatt)
331  CALL def_var_netcdf(dgu, &
332  ifile_id,'W10MMAX','Maximum_10m_Wind ' ,iddim,yatt_title,yatt)
333  !
334 ENDIF
335 !
336 IF (chu%LCH_EMIS .AND. sv%NBEQ>0 .AND. chu%LCH_SURF_EMIS) THEN
337  !
338  yatt="(ppm*m/s)"
339  ycomment = "Emission data at time t"
340  !
341  IF (chu%CCH_EMIS=='AGGR') THEN
342  !
343  jret = nf_def_dim(ifile_id,"Temporal_emiss",che%NTIME_MAX,idimid)
344  !
345  ALLOCATE(iddim1(indims+1))
346  iddim1(1:indims-1) = iddim(1:indims-1)
347  iddim1(indims) = idimid
348  iddim1(indims+1) = iddim(indims)
349  !
350  DO jspec=1,SIZE(che%TSEMISS)
351  yrecfm = "E_"//trim(che%TSEMISS(jspec)%CNAME)
352  CALL def_var_netcdf(dgu, &
353  ifile_id,yrecfm,ycomment,iddim1,yatt_title,yatt)
354  END DO
355  !
356  DEALLOCATE(iddim1)
357  !
358  ELSE IF (chu%CCH_EMIS=='SNAP') THEN
359  !
360  DO jspec=1,chn%NEMIS_NBR
361  yrecfm = "E_"//trim(chn%CEMIS_NAME(jspec))
362  CALL def_var_netcdf(dgu, &
363  ifile_id,yrecfm,ycomment,iddim,yatt_title,yatt)
364  END DO
365  !
366  END IF
367  !
368 END IF
369 !
370  CALL ol_write_coord(dgu, &
371  yfile,ifile_id,iddim,yatt_title,yname_dim,yunit1,yunit2,idim1,ydate,zx,zy)
372 !
373 IF (lhook) CALL dr_hook('INIT_OUTFN_SURF_ATM_N',1,zhook_handle)
374 !
375 END SUBROUTINE init_outfn_surf_atm_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_surf_atm_n(CHE, CHN, CHU, DGU, UG, U, SV, HPROGRAM, KLUOUT)
subroutine def_var_netcdf(DGU, KFILE_ID, HNAME, HLONG_NAME, KDIM_ID, HATT_TITLE, HATT_TEXT, KVAR_ID, KTYPE, KLEN)