SURFEX v8.1
General documentation of Surfex
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 (DGO, UG, U, CHE, CHU, SV, HSELECT, HPROGRAM, KLUOUT)
7 ! ###############################
8 !
9 !
10 !!**** *INIT_OUTFN_SURF_ATM_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 05-04
36 !! Modified 06-10 by S. Faroux
37 !! modified 06-13 B. Decharme : Add some key
38 !! Add diag (Qs, Evap, Subl)
39 !-------------------------------------------------------------------------------
40 !
41 !* 0. DECLARATIONS
42 ! ------------
43 !
45 USE modd_ch_surf_n, ONLY : ch_surf_t
46 USE modd_sv_n, ONLY : sv_t
47 !
48 USE modd_diag_n, ONLY : diag_options_t
50 USE modd_surf_atm_n, ONLY : surf_atm_t
51 !
53 !
54 !
56 !
57 USE modi_get_dim_full_n
58 USE modi_ol_define_dim
59 USE modi_get_date_ol
60 USE modi_create_file
61 USE modi_ol_write_coord
62 USE modi_ol_write_proj
63 !
64 USE yomhook ,ONLY : lhook, dr_hook
65 USE parkind1 ,ONLY : jprb
66 !
67 USE netcdf
68 !
69 IMPLICIT NONE
70 !
71 TYPE(diag_options_t), INTENT(INOUT) :: DGO
72 TYPE(surf_atm_grid_t), INTENT(INOUT) :: UG
73 TYPE(surf_atm_t), INTENT(INOUT) :: U
74 !
75 TYPE(ch_emis_field_t), INTENT(INOUT) :: CHE
76 TYPE(ch_surf_t), INTENT(INOUT) :: CHU
77 TYPE(sv_t), INTENT(INOUT) :: SV
78 !
79  CHARACTER(LEN=*),DIMENSION(:),INTENT(IN) :: HSELECT
80  CHARACTER(LEN=6), INTENT(IN) :: HPROGRAM
81 INTEGER, INTENT(IN) :: KLUOUT
82 !
83 !* 0.2 Declarations of local variables
84 ! -------------------------------
85 !
86  CHARACTER(LEN=100), DIMENSION(:), POINTER :: YNAME_DIM
87  CHARACTER(LEN=100), DIMENSION(1) :: YATT_TITLE, YATT
88  CHARACTER(LEN=40),DIMENSION(1) :: YDATE
89  CHARACTER(LEN=13),DIMENSION(1) :: YUNIT1, YUNIT2
90  CHARACTER(LEN=100) :: YCOMMENT
91  CHARACTER(LEN=50) :: YFILE
92 !
93 REAL,DIMENSION(:), POINTER :: ZX, ZY
94 REAL,DIMENSION(:), POINTER :: ZLAT,ZLON
95 !
96 INTEGER, DIMENSION(:), POINTER :: IDIMS, IDDIM
97 INTEGER :: IFILE_ID, IVAR_ID, IDIMID
98 INTEGER :: IDIM1, IDIM2, INDIMS
99 INTEGER :: INI, JFILE
100 INTEGER :: JRET
101 !
102 REAL(KIND=JPRB) :: ZHOOK_HANDLE
103 !
104 !-------------------------------------------------------------------------------
105 
106 ! 1. Compute output lenght dimension
107 !-----------------------------------
108 IF (lhook) CALL dr_hook('INIT_OUTFN_SURF_ATM_N',0,zhook_handle)
109 !
110 !
111  CALL get_dim_full_n(u%NDIM_FULL, ini)
112 !
113 NULLIFY(zx)
114 NULLIFY(zy)
115 !
116  CALL ol_define_dim(ug, u%NSIZE_FULL, hprogram, kluout, ini, idim1, &
117  yunit1, yunit2, zx, zy, idims, iddim, yname_dim,plat=zlat,plon=zlon)
118  CALL get_date_ol(u%TTIME,xtstep_output,ydate(1))
119 !
120 indims = SIZE(iddim)
121 !
122 ! 4. Create output file for fraction of tiles
123 !--------------------------------------------
124 !
125 yatt_title(1)='units'
126 !
127 yfile='SURF_ATM.OUT.nc'
128  CALL create_file(yfile,idims(1:indims-1),yname_dim(1:indims-1),ifile_id,iddim(1:indims-1))
129 jret=nf90_redef(ifile_id)
130 !
131  CALL ol_write_proj(hselect,ifile_id,ug)
132 !
133 DO jfile = 1,SIZE(xnetcdf_filename_out)
134  IF (trim(yfile)==trim(xnetcdf_filename_out(jfile))) THEN
135  xnetcdf_fileid_out(jfile) = ifile_id
136  EXIT
137  ENDIF
138 ENDDO
139 !
140  CALL ol_write_coord(dgo%CSELECT,yfile,ifile_id,iddim(1:indims-1),yatt_title,yname_dim(1:indims-1),&
141  yunit1,yunit2,idim1,ydate,zx,zy,zlon,zlat)
142 !
143 !
144 ! 5. Create output file for diagnostic variables
145 !-----------------------------------------------
146 yfile='SURF_ATM_DIAGNOSTICS.OUT.nc'
147  CALL create_file(yfile,idims,yname_dim,ifile_id,iddim)
148 jret=nf90_redef(ifile_id)
149 !
150  CALL ol_write_proj(hselect,ifile_id,ug)
151 !
152 DO jfile = 1,SIZE(xnetcdf_filename_out)
153  IF (trim(yfile)==trim(xnetcdf_filename_out(jfile))) THEN
154  xnetcdf_fileid_out(jfile) = ifile_id
155  EXIT
156  ENDIF
157 ENDDO
158 !
159 IF (chu%LCH_EMIS .AND. sv%NBEQ>0 .AND. chu%LCH_SURF_EMIS) THEN
160  !
161  IF (chu%CCH_EMIS=='AGGR') jret = nf90_def_dim(ifile_id,"Temporal_emiss",che%NTIME_MAX,idimid)
162  !
163 ENDIF
164 !
165  CALL ol_write_coord(dgo%CSELECT,yfile,ifile_id,iddim,yatt_title,&
166  yname_dim,yunit1,yunit2,idim1,ydate,zx,zy,zlon,zlat)
167 !
168 IF (ASSOCIATED(zx)) DEALLOCATE(zx,zy)
169 DEALLOCATE(zlon,zlat)
170 !
171 IF (lhook) CALL dr_hook('INIT_OUTFN_SURF_ATM_N',1,zhook_handle)
172 !
173 END SUBROUTINE init_outfn_surf_atm_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_surf_atm_n(DGO, UG, U, CHE, CHU, SV, 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)