SURFEX v8.1
General documentation of Surfex
init_outfn_isban.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_isba_n (IM, UG, U, HSELECT, OSNOWDIMNC, HPROGRAM, KLUOUT)
7 ! ###############################
8 !
9 !
10 !!**** *INIT_OUTFN_ISBA_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 !! F. Habets *Meteo France*
32 !!
33 !! MODIFICATIONS
34 !! -------------
35 !! Original 07-03
36 !! modified 11-03,by P. Le Moigne *Meteo France*
37 !! modified 05-04,by P. Le Moigne : surf_atm diagnostics moved at the
38 !! right place
39 !! modified 10-04,by P. Le Moigne : add new diagnostics
40 !! modified 10-04,by P. Le Moigne : add Halstead coefficient
41 !! modified 2008,by B. Decharme : limit the number of diag
42 !! Add floodplains diag
43 !! modified 04-09,by A.L. Gibelin : Add respiration diagnostics
44 !! modified 05-09,by A.L. Gibelin : Add carbon spinup
45 !! modified 07-09,by A.L. Gibelin : Add carbon prognostic variables
46 !!
47 !! modified 09-12,by B. Decharme : delete LPROVAR_TO_DIAG for prognostic variables
48 !! delete NWG_LAYER
49 !! Erroneous description in diag comments
50 !! modified 06-13,by B. Decharme : good dimension for Tg,Wg,et Wgi
51 !! bug : TSN_VEG if Snowlayer = 1 ;
52 !! bug : TSRAD_P and not TTSRAD_P
53 !! add diag (Qsb,Subl) and Snow noted SN
54 !! modified 10-14,by P. Samuelsson: Added MEB output
55 !! modified 09-15 by M. Lafaysse : new Crocus-MEPRA outputs
56 !-------------------------------------------------------------------------------
57 !
58 !* 0. DECLARATIONS
59 ! ------------
60 !
62 !
63 USE modd_surfex_n, ONLY : isba_model_t
64 !
66 USE modd_surf_atm_n,ONLY : surf_atm_t
67 !
69 !
70 USE modd_assim, ONLY : lassim, cassim, cassim_isba
71 !
73 !
75 !
76 USE modi_get_dim_full_n
77 USE modi_get_isba_conf_n
78 USE modi_ol_define_dim
79 USE modi_get_date_ol
80 USE modi_create_file
81 USE modi_def_var_netcdf
82 USE modi_ol_write_coord
83 USE modi_ol_write_proj
84 !
85 USE yomhook ,ONLY : lhook, dr_hook
86 USE parkind1,ONLY : jprb
87 !
88 USE netcdf
89 !
90 IMPLICIT NONE
91 !
92 TYPE(isba_model_t), INTENT(IN) :: IM
93 !
94 TYPE(surf_atm_grid_t),INTENT(INOUT) :: UG
95 TYPE(surf_atm_t),INTENT(INOUT) :: U
96 !
97  CHARACTER(LEN=*),DIMENSION(:),INTENT(IN) :: HSELECT
98 LOGICAL, INTENT(IN) :: OSNOWDIMNC
99 !
100  CHARACTER(LEN=6),INTENT(IN) :: HPROGRAM
101 INTEGER, INTENT(IN) :: KLUOUT
102 !
103 !* 0.2 Declarations of local variables
104 ! -------------------------------
105 !
106  CHARACTER(LEN=100),DIMENSION(:),POINTER :: YNAME_DIM
107  CHARACTER(LEN=100),DIMENSION(1) :: YATT_TITLE,YATT
108  CHARACTER(LEN=40),DIMENSION(1) :: YDATE
109  CHARACTER(LEN=13),DIMENSION(1) :: YUNIT1,YUNIT2
110  CHARACTER(LEN=100) :: YCOMMENT
111  CHARACTER(LEN=50) :: YFILE
112  CHARACTER(LEN=12) :: YRECFM
113  CHARACTER(LEN=3) :: YPAS,YPAT
114  CHARACTER(LEN=6) :: YLVL
115  CHARACTER(LEN=3) :: YISBA
116  CHARACTER(LEN=1) :: YNDAYS
117  CHARACTER(LEN=2) :: YLVLV
118  CHARACTER(LEN=3) :: YSNOW_SCHEME
119 !
120 TYPE(date_time) :: TPTIME
121 REAL,DIMENSION(:),POINTER :: ZX,ZY
122 REAL,DIMENSION(:), POINTER :: ZLAT,ZLON
123 !
124 INTEGER :: ISNOW_LAYER
125 INTEGER,DIMENSION(:),POINTER :: IDIMS, IDDIMALL
126 INTEGER :: INI, INPATCH, INLVLD, INLVLS, INBIOMASS,&
127  INLITTER, INLITTLEVS, INSOILCARB
128 INTEGER :: IDIM1, INDIMS, INDIMSALL, INJDIMS
129 INTEGER :: IFILE_ID, IDIMID, JSV
130 INTEGER :: IL,JRET, INSNLAYER, JFILE
131 REAL(KIND=JPRB) :: ZHOOK_HANDLE
132 !
133 !-------------------------------------------------------------------------------
134 
135 ! 1. Compute output lenght dimension
136 !-----------------------------------
137 
138 IF (lhook) CALL dr_hook('INIT_OUTFN_ISBA_N',0,zhook_handle)
139 !
140 tptime = im%S%TTIME
141 ysnow_scheme = im%NPE%AL(1)%TSNOW%SCHEME
142 isnow_layer = im%NPE%AL(1)%TSNOW%NLAYER
143 !
144  CALL get_dim_full_n(u%NDIM_FULL,ini)
145  CALL get_isba_conf_n(im%O,isnow_layer,yisba,inpatch,inlvld,inlvls,inbiomass,&
146  inlitter,inlittlevs,insoilcarb)
147 !
148 insnlayer = 1
149 IF ( osnowdimnc ) insnlayer = isnow_layer
150 IF (lsplit_patch) THEN
151  CALL ol_define_dim(ug, u%NSIZE_FULL, hprogram, kluout, ini, idim1, yunit1, yunit2,&
152  zx, zy, idims, iddimall, yname_dim, knsnlayer=insnlayer,plat=zlat,plon=zlon)
153 ELSE
154  CALL ol_define_dim(ug, u%NSIZE_FULL, hprogram, kluout, ini, idim1, yunit1, yunit2,&
155  zx, zy, idims, iddimall, yname_dim, knpatch=inpatch, &
156  knsnlayer=insnlayer, plat=zlat, plon=zlon)
157 ENDIF
158  CALL get_date_ol(tptime,xtstep_output,ydate(1))
159 !
160 indimsall = SIZE(iddimall)
161 !
162 IF ( osnowdimnc ) THEN
163  injdims = indimsall-2
164  indims = indimsall-1
165 ELSE
166  injdims = indimsall-1
167  indims = indimsall
168 ENDIF
169 !
170 ! 4. Create output file for prognostic variables
171 !----------------------------------------------------------
172 !
173 yatt_title(1)='units'
174 !
175 yfile='ISBA_PROGNOSTIC.OUT.nc'
176  CALL create_file(yfile,idims,yname_dim,ifile_id,iddimall)
177 jret=nf90_redef(ifile_id)
178 !
179  CALL ol_write_proj(hselect,ifile_id,ug)
180 !
181 DO jfile = 1,SIZE(xnetcdf_filename_out)
182  IF (trim(yfile)==trim(xnetcdf_filename_out(jfile))) THEN
183  xnetcdf_fileid_out(jfile) = ifile_id
184  EXIT
185  ENDIF
186 ENDDO
187 !
188 IF (.NOT. im%ID%DM%LPROSNOW) THEN
189  !
190  CALL ol_write_coord(hselect,yfile,ifile_id,iddimall,yatt_title,yname_dim,&
191  yunit1,yunit2,idim1,ydate,zx,zy,zlon,zlat)
192  !
193  !
194  ! 4. Create output file for fluxes values
195  !----------------------------------------------------------
196  !
197  yfile='ISBA_DIAGNOSTICS.OUT.nc'
198  CALL create_file(yfile,idims,yname_dim,ifile_id,iddimall)
199  jret=nf90_redef(ifile_id)
200  yatt ='dimensionless'
201  !
202  CALL ol_write_proj(hselect,ifile_id,ug)
203  !
204  DO jfile = 1,SIZE(xnetcdf_filename_out)
205  IF (trim(yfile)==trim(xnetcdf_filename_out(jfile))) THEN
206  xnetcdf_fileid_out(jfile) = ifile_id
207  EXIT
208  ENDIF
209  ENDDO
210  !
211 ENDIF
212 !
213  CALL ol_write_coord(hselect,yfile,ifile_id,iddimall,yatt_title,yname_dim,&
214  yunit1,yunit2,idim1,ydate,zx,zy,zlon,zlat)
215 !
216 IF (im%ID%O%LSURF_BUDGETC) THEN
217  !
218  yfile='ISBA_DIAG_CUMUL.OUT.nc'
219  CALL create_file(yfile,idims,yname_dim,ifile_id,iddimall)
220  jret=nf90_redef(ifile_id)
221  !
222  CALL ol_write_proj(hselect,ifile_id,ug)
223  !
224  DO jfile = 1,SIZE(xnetcdf_filename_out)
225  IF (trim(yfile)==trim(xnetcdf_filename_out(jfile))) THEN
226  xnetcdf_fileid_out(jfile) = ifile_id
227  EXIT
228  ENDIF
229  ENDDO
230  !
231  CALL ol_write_coord(hselect,yfile,ifile_id,iddimall,yatt_title,&
232  yname_dim,yunit1,yunit2,idim1,ydate,zx,zy,zlon,zlat)
233  !
234 ENDIF
235 
236 
237 ! 6. Create file for vegetation parameter values
238 !----------------------------------------------------------
239 
240 IF( lassim.OR.im%ID%O%LPGD ) THEN
241  !
242  yfile='ISBA_VEG_EVOLUTION.OUT.nc'
243  CALL create_file(yfile,idims,yname_dim,ifile_id,iddimall)
244  jret=nf90_redef(ifile_id)
245  !
246  CALL ol_write_proj(hselect,ifile_id,ug)
247  !
248  DO jfile = 1,SIZE(xnetcdf_filename_out)
249  IF (trim(yfile)==trim(xnetcdf_filename_out(jfile))) THEN
250  xnetcdf_fileid_out(jfile) = ifile_id
251  EXIT
252  ENDIF
253  ENDDO
254  !
255  CALL ol_write_coord(hselect,yfile,ifile_id,iddimall,yatt_title,yname_dim,&
256  yunit1,yunit2,idim1,ydate,zx,zy,zlon,zlat)
257  !
258 ENDIF
259 !
260 ! 7. Create file for analysis increments for EKF
261 !----------------------------------------------------------
262 
263 IF(lassim .AND. cassim_isba=='EKF ') THEN
264  !
265  yfile='ISBA_ANALYSIS.OUT.nc'
266  CALL create_file(yfile,idims,yname_dim,ifile_id,iddimall)
267  jret=nf90_redef(ifile_id)
268  !
269  CALL ol_write_proj(hselect,ifile_id,ug)
270  !
271  DO jfile = 1,SIZE(xnetcdf_filename_out)
272  IF (trim(yfile)==trim(xnetcdf_filename_out(jfile))) THEN
273  xnetcdf_fileid_out(jfile) = ifile_id
274  EXIT
275  ENDIF
276  ENDDO
277  !
278  CALL ol_write_coord(hselect,yfile,ifile_id,iddimall,yatt_title,yname_dim,&
279  yunit1,yunit2,idim1,ydate,zx,zy,zlon,zlat)
280 ENDIF
281 !
282 IF (ASSOCIATED(zx)) DEALLOCATE(zx,zy)
283 DEALLOCATE(zlon,zlat)
284 !
285 IF (lhook) CALL dr_hook('INIT_OUTFN_ISBA_N',1,zhook_handle)
286 !
287 END SUBROUTINE init_outfn_isba_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 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
subroutine init_outfn_isba_n(IM, UG, U, HSELECT, OSNOWDIMNC, HPROGRAM, KLUOUT)
subroutine get_isba_conf_n(IO, KSNOW_LAYER_IN, HISBA, KPATCH, KGROUND_LAYER, KSNOW_LAYE
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)