SURFEX v8.1
General documentation of Surfex
init_outfn_tebn.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_teb_n (TM, GDM, GRM, UG, U, HSELECT, HPROGRAM, KLUOUT)
7 ! ###############################
8 !
9 !
10 !!**** *INIT_OUTFN_TEB_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 !-------------------------------------------------------------------------------
37 !
38 !* 0. DECLARATIONS
39 ! ------------
40 !
42 !
44 USE modd_surf_atm_n, ONLY : surf_atm_t
45 !
47 !
49 !
50 USE modi_get_dim_full_n
51 USE modi_ol_define_dim
52 USE modi_get_date_ol
53 USE modi_create_file
54 USE modi_def_var_netcdf
55 USE modi_ol_write_coord
56 USE modi_ol_write_proj
57 !
58 USE yomhook ,ONLY : lhook, dr_hook
59 USE parkind1 ,ONLY : jprb
60 !
61 USE netcdf
62 !
63 IMPLICIT NONE
64 !
65 TYPE(teb_model_t), INTENT(IN) :: TM
66 TYPE(teb_garden_model_t), INTENT(IN) :: GDM
67 TYPE(teb_greenroof_model_t), INTENT(IN) :: GRM
68 !
69 TYPE(surf_atm_grid_t), INTENT(INOUT) :: UG
70 TYPE(surf_atm_t), INTENT(INOUT) :: U
71 !
72  CHARACTER(LEN=*), DIMENSION(:), INTENT(IN) :: HSELECT
73 !
74  CHARACTER(LEN=6), INTENT(IN) :: HPROGRAM
75 INTEGER, INTENT(IN) :: KLUOUT
76 !
77 !* 0.2 Declarations of local variables
78 ! -------------------------------
79 !
80  CHARACTER(LEN=100), DIMENSION(:), POINTER :: YNAME_DIM
81  CHARACTER(LEN=100), DIMENSION(1) :: YATT_TITLE, YATT
82  CHARACTER(LEN=40), DIMENSION(1) :: YDATE
83  CHARACTER(LEN=13), DIMENSION(1) :: YUNIT1, YUNIT2
84  CHARACTER(LEN=100) :: YCOMMENT
85  CHARACTER(LEN=50) :: YFILE
86  CHARACTER(LEN=12) :: YRECFM
87  CHARACTER(LEN=3) :: YPAS, YLVL
88  CHARACTER(LEN=3) :: YPATCH
89  CHARACTER(LEN=2) :: YNUM
90 !
91 INTEGER, DIMENSION(:), POINTER :: IDIMS, IDDIM
92 INTEGER :: INI
93 INTEGER :: IDIM1, INDIMS
94 INTEGER :: IFILE_ID, IDIMID
95 INTEGER :: JRET, JFILE
96 !
97 REAL,DIMENSION(:), POINTER :: ZX, ZY
98 REAL,DIMENSION(:), POINTER :: ZLAT,ZLON
99 !
100 REAL(KIND=JPRB) :: ZHOOK_HANDLE
101 !
102 !-------------------------------------------------------------------------------
103 
104 ! 1. Compute output lenght dimension
105 !-----------------------------------
106 IF (lhook) CALL dr_hook('INIT_OUTFN_TEB_N',0,zhook_handle)
107 !
108  CALL get_dim_full_n(u%NDIM_FULL, ini)
109  CALL ol_define_dim(ug, u%NSIZE_FULL, hprogram, kluout, ini, idim1, yunit1, yunit2, &
110  zx, zy, idims, iddim, yname_dim,plat=zlat,plon=zlon)
111  CALL get_date_ol(tm%TOP%TTIME,xtstep_output,ydate(1))
112 !
113 indims = SIZE(iddim)
114 !
115 ! 4. Create output file for fluxes values
116 !----------------------------------------------------------
117 !
118 yatt_title(1)='units'
119 !
120 yfile='TEB_DIAGNOSTICS.OUT.nc'
121  CALL create_file(yfile,idims,yname_dim,ifile_id,iddim)
122 jret=nf90_redef(ifile_id)
123 !
124  CALL ol_write_proj(hselect,ifile_id,ug)
125 !
126 DO jfile = 1,SIZE(xnetcdf_filename_out)
127  IF (trim(yfile)==trim(xnetcdf_filename_out(jfile))) THEN
128  xnetcdf_fileid_out(jfile) = ifile_id
129  EXIT
130  ENDIF
131 ENDDO
132 !
133  CALL ol_write_coord(hselect,yfile,ifile_id,iddim,yatt_title,yname_dim,&
134  yunit1,yunit2,idim1,ydate,zx,zy,zlon,zlat)
135 !
136 !
137 IF (tm%TD%O%LPGD .AND. ASSOCIATED(tm%NT%AL(1)%XBLD)) THEN
138 
139  yfile='TEB_PGD.OUT.nc'
140  CALL create_file(yfile,idims,yname_dim,ifile_id,iddim)
141  jret=nf90_redef(ifile_id)
142  !
143  CALL ol_write_proj(hselect,ifile_id,ug)
144  !
145  DO jfile = 1,SIZE(xnetcdf_filename_out)
146  IF (trim(yfile)==trim(xnetcdf_filename_out(jfile))) THEN
147  xnetcdf_fileid_out(jfile) = ifile_id
148  EXIT
149  ENDIF
150  ENDDO
151  !
152  CALL ol_write_coord(hselect,yfile,ifile_id,iddim,yatt_title,yname_dim,&
153  yunit1,yunit2,idim1,ydate,zx,zy,zlon,zlat)
154  !
155 ENDIF
156 !
157 yfile='TEB_DIAG_CUMUL.OUT.nc'
158  CALL create_file(yfile,idims,yname_dim,ifile_id,iddim)
159 jret=nf90_redef(ifile_id)
160 !
161  CALL ol_write_proj(hselect,ifile_id,ug)
162 !
163 DO jfile = 1,SIZE(xnetcdf_filename_out)
164  IF (trim(yfile)==trim(xnetcdf_filename_out(jfile))) THEN
165  xnetcdf_fileid_out(jfile) = ifile_id
166  EXIT
167  ENDIF
168 ENDDO
169 !
170  CALL ol_write_coord(hselect,yfile,ifile_id,iddim,yatt_title,yname_dim,&
171  yunit1,yunit2,idim1,ydate,zx,zy,zlon,zlat)
172 !
173 ! 6. Create output file for prognostic variables in teb canopy
174 !------------------------------------------------------------------------
175 !
176 yfile='TEB_CANOPY.OUT.nc'
177  CALL create_file(yfile,idims,yname_dim,ifile_id,iddim)
178 jret=nf90_redef(ifile_id)
179 !
180  CALL ol_write_proj(hselect,ifile_id,ug)
181 !
182 DO jfile = 1,SIZE(xnetcdf_filename_out)
183  IF (trim(yfile)==trim(xnetcdf_filename_out(jfile))) THEN
184  xnetcdf_fileid_out(jfile) = ifile_id
185  EXIT
186  ENDIF
187 ENDDO
188 !
189  CALL ol_write_coord(hselect,yfile,ifile_id,iddim,yatt_title,yname_dim,&
190  yunit1,yunit2,idim1,ydate,zx,zy,zlon,zlat)
191 !
192 !
193 ! 5. Create output file for prognostic and semi-pronostic variable in teb
194 !------------------------------------------------------------------------
195 !
196 DEALLOCATE(idims, iddim, yname_dim)
197 !
198  CALL ol_define_dim(ug, u%NSIZE_FULL, hprogram, kluout, ini, idim1, yunit1, yunit2, &
199  zx, zy, idims, iddim, yname_dim, knsnlayer=1)
200 !
201 yfile='TEB_PROGNOSTIC.OUT.nc'
202  CALL create_file(yfile,idims,yname_dim,ifile_id,iddim)
203 jret=nf90_redef(ifile_id)
204 !
205  CALL ol_write_proj(hselect,ifile_id,ug)
206 !
207 DO jfile = 1,SIZE(xnetcdf_filename_out)
208  IF (trim(yfile)==trim(xnetcdf_filename_out(jfile))) THEN
209  xnetcdf_fileid_out(jfile) = ifile_id
210  EXIT
211  ENDIF
212 ENDDO
213 !
214  CALL ol_write_coord(hselect,yfile,ifile_id,iddim,yatt_title,yname_dim,&
215  yunit1,yunit2,idim1,ydate,zx,zy,zlon,zlat)
216 !
217 IF (tm%TOP%LGARDEN) THEN
218  !
219  DEALLOCATE(idims, iddim, yname_dim)
220  !
221  CALL ol_define_dim(ug, u%NSIZE_FULL, hprogram, kluout, ini, idim1, yunit1, yunit2, &
222  zx, zy, idims, iddim, yname_dim,knsnlayer=gdm%NPE%AL(1)%TSNOW%NLAYER)
223  !
224  yfile='GARDEN_PROGNOSTIC.OUT.nc'
225  CALL create_file(yfile,idims,yname_dim,ifile_id,iddim)
226  jret=nf90_redef(ifile_id)
227  !
228  CALL ol_write_proj(hselect,ifile_id,ug)
229  !
230  DO jfile = 1,SIZE(xnetcdf_filename_out)
231  IF (trim(yfile)==trim(xnetcdf_filename_out(jfile))) THEN
232  xnetcdf_fileid_out(jfile) = ifile_id
233  EXIT
234  ENDIF
235  ENDDO
236  !
237  CALL ol_write_coord(hselect,yfile,ifile_id,iddim,yatt_title,yname_dim,&
238  yunit1,yunit2,idim1,ydate,zx,zy,zlon,zlat)
239  !
240  IF (tm%TOP%LGREENROOF) THEN
241  !
242  DEALLOCATE(idims, iddim, yname_dim)
243  !
244  CALL ol_define_dim(ug, u%NSIZE_FULL, hprogram, kluout, ini, idim1, yunit1, yunit2, &
245  zx, zy, idims, iddim, yname_dim, knsnlayer=grm%NPE%AL(1)%TSNOW%NLAYER)
246  !
247  yfile='GREENROOF_PROGNOSTIC.OUT.nc'
248  CALL create_file(yfile,idims,yname_dim,ifile_id,iddim)
249  jret=nf90_redef(ifile_id)
250  !
251  CALL ol_write_proj(hselect,ifile_id,ug)
252  !
253  DO jfile = 1,SIZE(xnetcdf_filename_out)
254  IF (trim(yfile)==trim(xnetcdf_filename_out(jfile))) THEN
255  xnetcdf_fileid_out(jfile) = ifile_id
256  EXIT
257  ENDIF
258  ENDDO
259  !
260  CALL ol_write_coord(hselect,yfile,ifile_id,iddim,yatt_title,yname_dim,&
261  yunit1,yunit2,idim1,ydate,zx,zy,zlon,zlat)
262  !
263  ENDIF
264  !
265 ENDIF
266 !
267 IF (ASSOCIATED(zx)) DEALLOCATE(zx,zy)
268 DEALLOCATE(zlon,zlat)
269 !
270 IF (lhook) CALL dr_hook('INIT_OUTFN_TEB_N',1,zhook_handle)
271 !
272 END SUBROUTINE init_outfn_teb_n
subroutine get_date_ol(TPTIME, PTSTEP, HDATE)
Definition: get_date_ol.F90:7
subroutine get_dim_full_n(KDIM_FULL_IN, KDIM_FULL_OUT)
character(len=200), dimension(25) xnetcdf_filename_out
subroutine ol_write_proj(HSELECT, KFILE_ID, UG)
subroutine init_outfn_teb_n(TM, GDM, GRM, UG, U, HSELECT, HPROGRAM, KLUOUT)
subroutine ol_define_dim(UG, KSIZE_FULL, HPROGRAM, KLUOUT, KNI, KDIM1, HUNIT1, HUNIT2, PX, PY, KDIMS, KDDIM, HNAME_DIM, KNPATCH, KNSNLAYER, PLAT, PLON)
integer, parameter jprb
Definition: parkind1.F90:32
subroutine create_file(HFILE, KDIMS, HNAM_DIM, KFILE_ID, KDIM_ID)
Definition: create_file.F90:7
logical lhook
Definition: yomhook.F90:15
integer, dimension(25) xnetcdf_fileid_out
subroutine ol_write_coord(HSELECT, HFILE, KFILE_ID, KDDIM, HATT_TITLE, HNAME_DIM, HUNIT1, HUNIT2, KDIM1, HDATE, PX, PY, PLON, PLAT)