SURFEX v8.1
General documentation of Surfex
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 (FM, UG, U, HSELECT, HPROGRAM, KLUOUT)
7 ! ###############################
8 !
9 !!**** *INIT_OUTFN_FLAKE_n* - create output files and defines variables
10 !!
11 !! PURPOSE
12 !! -------
13 !!
14 !!** METHOD
15 !! ------
16 !!
17 !! EXTERNAL
18 !! --------
19 !!
20 !!
21 !! IMPLICIT ARGUMENTS
22 !! ------------------
23 !!
24 !! REFERENCE
25 !! ---------
26 !!
27 !!
28 !! AUTHOR
29 !! ------
30 !! P. LeMoigne *Meteo France*
31 !!
32 !! MODIFICATIONS
33 !! -------------
34 !! Original 04-04 P. LeMoigne
35 !! Modified 06-10 by S. Faroux
36 !! Modified 04-13 by P. Le Moigne
37 !-------------------------------------------------------------------------------
38 !
39 !* 0. DECLARATIONS
40 ! ------------
41 !
42 USE modd_surfex_n, ONLY : flake_model_t
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(flake_model_t), INTENT(IN) :: FM
66 TYPE(surf_atm_grid_t), INTENT(INOUT) :: UG
67 TYPE(surf_atm_t), INTENT(INOUT) :: U
68 !
69  CHARACTER(LEN=*), DIMENSION(:), INTENT(IN) :: HSELECT
70 !
71  CHARACTER(LEN=6), INTENT(IN) :: HPROGRAM
72 INTEGER, INTENT(IN) :: KLUOUT
73 !
74 !* 0.2 Declarations of local variables
75 ! -------------------------------
76 !
77  CHARACTER(LEN=100), DIMENSION(:), POINTER :: YNAME_DIM
78 !
79  CHARACTER(LEN=40),DIMENSION(1) :: YDATE
80  CHARACTER(LEN=13),DIMENSION(1) :: YUNIT1, YUNIT2
81  CHARACTER(LEN=100) :: YCOMMENT
82  CHARACTER(LEN=50) :: YFILE
83  CHARACTER(LEN=100), DIMENSION(1) :: YATT_TITLE, YATT
84 !
85 INTEGER, DIMENSION(:), POINTER :: IDIMS, IDDIM
86 INTEGER :: INI
87 INTEGER :: IDIM1, JFILE
88 INTEGER :: IFILE_ID, JRET
89 !
90 REAL,DIMENSION(:), POINTER :: ZX, ZY
91 REAL,DIMENSION(:), POINTER :: ZLAT,ZLON
92 !
93 REAL(KIND=JPRB) :: ZHOOK_HANDLE
94 !
95 !-------------------------------------------------------------------------------
96 
97 ! 1. Compute output lenght dimension
98 !-----------------------------------
99 IF (lhook) CALL dr_hook('INIT_OUTFN_FLAKE_N',0,zhook_handle)
100  CALL get_dim_full_n(u%NDIM_FULL, ini)
101 !
102  CALL ol_define_dim(ug, u%NSIZE_FULL, hprogram, kluout, ini, idim1, yunit1, yunit2, &
103  zx, zy, idims, iddim, yname_dim,plat=zlat,plon=zlon)
104  CALL get_date_ol(fm%F%TTIME,xtstep_output,ydate(1))
105 !
106 ! 4. Create output file for fluxes values
107 !----------------------------------------------------------
108 !
109 yfile='FLAKE_DIAGNOSTICS.OUT.nc'
110  CALL create_file(yfile,idims,yname_dim,ifile_id,iddim)
111 jret=nf90_redef(ifile_id)
112 !
113  CALL ol_write_proj(hselect,ifile_id,ug)
114 !
115 DO jfile = 1,SIZE(xnetcdf_filename_out)
116  IF (trim(yfile)==trim(xnetcdf_filename_out(jfile))) THEN
117  xnetcdf_fileid_out(jfile) = ifile_id
118  EXIT
119  ENDIF
120 ENDDO
121 !
122  CALL ol_write_coord(hselect,yfile,ifile_id,iddim,yatt_title,yname_dim,&
123  yunit1,yunit2,idim1,ydate,zx,zy,zlon,zlat)
124 !
125 IF (fm%DFO%LSURF_BUDGETC) THEN
126  !
127  yfile='FLAKE_DIAG_CUMUL.OUT.nc'
128  CALL create_file(yfile,idims,yname_dim,ifile_id,iddim)
129  !
130  CALL ol_write_proj(hselect,ifile_id,ug)
131  !
132  DO jfile = 1,SIZE(xnetcdf_filename_out)
133  IF (trim(yfile)==trim(xnetcdf_filename_out(jfile))) THEN
134  xnetcdf_fileid_out(jfile) = ifile_id
135  EXIT
136  ENDIF
137  ENDDO
138  !
139  CALL ol_write_coord(hselect,yfile,ifile_id,iddim,yatt_title,yname_dim,&
140  yunit1,yunit2,idim1,ydate,zx,zy,zlon,zlat)
141  !
142 ENDIF
143 !
144 yfile='FLAKE_PROGNOSTIC.OUT.nc'
145  CALL create_file(yfile,idims,yname_dim,ifile_id,iddim)
146 jret=nf90_redef(ifile_id)
147 !
148  CALL ol_write_proj(hselect,ifile_id,ug)
149 !
150 DO jfile = 1,SIZE(xnetcdf_filename_out)
151  IF (trim(yfile)==trim(xnetcdf_filename_out(jfile))) THEN
152  xnetcdf_fileid_out(jfile) = ifile_id
153  EXIT
154  ENDIF
155 ENDDO
156 !
157  CALL ol_write_coord(hselect,yfile,ifile_id,iddim,yatt_title,yname_dim,&
158  yunit1,yunit2,idim1,ydate,zx,zy,zlon,zlat)
159 !
160 IF (ASSOCIATED(zx)) DEALLOCATE(zx,zy)
161 DEALLOCATE(zlon,zlat)
162 !
163 IF (lhook) CALL dr_hook('INIT_OUTFN_FLAKE_N',1,zhook_handle)
164 !
165 END SUBROUTINE init_outfn_flake_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)
subroutine init_outfn_flake_n(FM, UG, U, HSELECT, HPROGRAM, KLUOUT)
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
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)