SURFEX v8.1
General documentation of Surfex
init_outfn_sean.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_sea_n (SM, UG, U, HSELECT, HPROGRAM, KLUOUT)
7 ! ###############################
8 !
9 !!**** *INIT_OUTFN_SEA_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-13 B. Decharme : Delete LPROVAR_TO_DIAG here
36 !! Add diag (Evap, Subl), GELATO
37 !-------------------------------------------------------------------------------
38 !
39 !* 0. DECLARATIONS
40 ! ------------
41 !
43 !
45 USE modd_surf_atm_n, ONLY : surf_atm_t
46 !
48 !
50 !
51 USE modi_get_dim_full_n
52 USE modi_ol_define_dim
53 USE modi_get_date_ol
54 USE modi_create_file
55 USE modi_def_var_netcdf
56 USE modi_ol_write_coord
57 USE modi_ol_write_proj
58 !
59 USE yomhook ,ONLY : lhook, dr_hook
60 USE parkind1 ,ONLY : jprb
61 !
62 USE netcdf
63 !
64 IMPLICIT NONE
65 !
66 TYPE(seaflux_model_t), INTENT(IN) :: SM
67 !
68 TYPE(surf_atm_grid_t), INTENT(INOUT) :: UG
69 TYPE(surf_atm_t), INTENT(INOUT) :: U
70 !
71  CHARACTER(LEN=*), DIMENSION(:), INTENT(IN) :: HSELECT
72 !
73  CHARACTER(LEN=6), INTENT(IN) :: HPROGRAM
74 INTEGER, INTENT(IN) :: KLUOUT
75 !
76 !* 0.2 Declarations of local variables
77 ! -------------------------------
78 !
79  CHARACTER(LEN=100), DIMENSION(:), POINTER :: YNAME_DIM
80  CHARACTER(LEN=100), DIMENSION(1) :: YATT_TITLE, YATT
81  CHARACTER(LEN=40),DIMENSION(1) :: YDATE
82  CHARACTER(LEN=13),DIMENSION(1) :: YUNIT1, YUNIT2
83  CHARACTER(LEN=100) :: YCOMMENT
84  CHARACTER(LEN=50) :: YFILE
85  CHARACTER(LEN=12) :: YRECFM
86  CHARACTER(LEN=3) :: YPAS, YLVL
87 !
88 INTEGER, DIMENSION(:), POINTER :: IDIMS, IDDIM, IDDIM1
89 INTEGER :: INI
90 INTEGER :: IDIM1
91 INTEGER :: IFILE_ID, JRET, JFILE
92 !
93 REAL,DIMENSION(:), POINTER :: ZX, ZY
94 REAL,DIMENSION(:), POINTER :: ZLAT,ZLON
95 !
96 REAL(KIND=JPRB) :: ZHOOK_HANDLE
97 !
98 !-------------------------------------------------------------------------------
99 
100 ! 1. Compute output lenght dimension
101 !-----------------------------------
102 IF (lhook) CALL dr_hook('INIT_OUTFN_SEA_N',0,zhook_handle)
103  CALL get_dim_full_n(u%NDIM_FULL, ini)
104  CALL ol_define_dim(ug, u%NSIZE_FULL, hprogram, kluout, ini, idim1, yunit1, yunit2, &
105  zx, zy, idims, iddim, yname_dim,plat=zlat,plon=zlon)
106  CALL get_date_ol(sm%S%TTIME,xtstep_output,ydate(1))
107 !
108 ! 4. Create output file for fluxes values
109 !----------------------------------------------------------
110 !
111 yatt_title(1)='units'
112 !
113 yfile='SEAFLUX_DIAGNOSTICS.OUT.nc'
114  CALL create_file(yfile,idims,yname_dim,ifile_id,iddim)
115 jret=nf90_redef(ifile_id)
116 !
117  CALL ol_write_proj(hselect,ifile_id,ug)
118 !
119 DO jfile = 1,SIZE(xnetcdf_filename_out)
120  IF (trim(yfile)==trim(xnetcdf_filename_out(jfile))) THEN
121  xnetcdf_fileid_out(jfile) = ifile_id
122  EXIT
123  ENDIF
124 ENDDO
125 !
126  CALL ol_write_coord(hselect,yfile,ifile_id,iddim,yatt_title,yname_dim,&
127  yunit1,yunit2,idim1,ydate,zx,zy,zlon,zlat)
128 !
129 IF (sm%SD%O%LSURF_BUDGETC) THEN
130  !
131  yfile='SEAFLUX_DIAG_CUMUL.OUT.nc'
132  CALL create_file(yfile,idims,yname_dim,ifile_id,iddim)
133  jret=nf90_redef(ifile_id)
134  !
135  CALL ol_write_proj(hselect,ifile_id,ug)
136  !
137  DO jfile = 1,SIZE(xnetcdf_filename_out)
138  IF (trim(yfile)==trim(xnetcdf_filename_out(jfile))) THEN
139  xnetcdf_fileid_out(jfile) = ifile_id
140  EXIT
141  ENDIF
142  ENDDO
143  !
144  CALL ol_write_coord(hselect,yfile,ifile_id,iddim,yatt_title,yname_dim,&
145  yunit1,yunit2,idim1,ydate,zx,zy,zlon,zlat)
146  !
147 ENDIF
148 !
149 yfile='SEAFLUX_PROGNOSTIC.OUT.nc'
150  CALL create_file(yfile,idims,yname_dim,ifile_id,iddim)
151 jret=nf90_redef(ifile_id)
152 !
153  CALL ol_write_proj(hselect,ifile_id,ug)
154 !
155 DO jfile = 1,SIZE(xnetcdf_filename_out)
156  IF (trim(yfile)==trim(xnetcdf_filename_out(jfile))) THEN
157  xnetcdf_fileid_out(jfile) = ifile_id
158  EXIT
159  ENDIF
160 ENDDO
161 !
162  CALL ol_write_coord(hselect,yfile,ifile_id,iddim,yatt_title,yname_dim,&
163  yunit1,yunit2,idim1,ydate,zx,zy,zlon,zlat)
164 !
165 IF (ASSOCIATED(zx)) DEALLOCATE(zx,zy)
166 DEALLOCATE(zlon,zlat)
167 !
168 IF (lhook) CALL dr_hook('INIT_OUTFN_SEA_N',1,zhook_handle)
169 !
170 END SUBROUTINE init_outfn_sea_n
subroutine init_outfn_sea_n(SM, UG, U, HSELECT, HPROGRAM, KLUOUT)
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
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)