SURFEX v8.1
General documentation of Surfex
init_output_ncn.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_output_nc_n (BDD, CHE, CHN, CHU, DTS, DTT, DTZ, IM, UG, U, HSELECT)
7 ! ######################
8 !
9 !!**** *INIT_OUTPUT_NC* Keep in memory the netcdf ID of the output files
10 !!
11 !! PURPOSE
12 !! -------
13 !
14 !!
15 !!** IMPLICIT ARGUMENTS
16 !! ------------------
17 !! None
18 !!
19 !! REFERENCE
20 !! ---------
21 !!
22 !! AUTHOR
23 !! ------
24 !! F. Habets *Meteo France*
25 !!
26 !! MODIFICATIONS
27 !! -------------
28 !! modified 05/04 by P. LeMoigne *Meteo France*
29 !! modified 06/10 by S. Faroux *Meteo France*
30 !!=================================================================
31 !
32 !* 0. DECLARATIONS
33 ! ------------
34 !
35 USE modd_diag_n, ONLY : diag_t
39 USE modd_ch_surf_n, ONLY : ch_surf_t
41 USE modd_data_teb_n, ONLY : data_teb_t
42 USE modd_data_tsz0_n, ONLY : data_tsz0_t
43 USE modd_surfex_n, ONLY : isba_model_t
45 USE modd_surf_atm_n, ONLY : surf_atm_t
46 !
48 !
49 USE modd_surf_conf, ONLY : csoftware
50 !
51 USE modd_surfex_mpi, ONLY : npio, nrank
52 !
53 USE modd_data_cover, ONLY : ldata_irrig
54 USE modd_data_cover_par, ONLY : nvegtype, jpcover
55 !
57 !
59 !
61 !
62 USE modi_get_bld_conf_n
63 USE modi_get_data_seaflux_conf_n
64 USE modi_get_isba_conf_n
65 USE modi_ol_define_dim
66 USE modi_create_file
67 !
68 USE modi_get_dim_full_n
69 USE modi_def_var_netcdf
70 !
71 USE yomhook ,ONLY : lhook, dr_hook
72 USE parkind1 ,ONLY : jprb
73 !
74 USE netcdf
75 !
76 IMPLICIT NONE
77 !
78 !
79 !
80 TYPE(bld_desc_t), INTENT(INOUT) :: BDD
81 TYPE(ch_emis_field_t), INTENT(INOUT) :: CHE
82 TYPE(ch_emis_snap_t), INTENT(INOUT) :: CHN
83 TYPE(ch_surf_t), INTENT(INOUT) :: CHU
84 TYPE(data_seaflux_t), INTENT(INOUT) :: DTS
85 TYPE(data_teb_t), INTENT(INOUT) :: DTT
86 TYPE(data_tsz0_t), INTENT(INOUT) :: DTZ
87 TYPE(isba_model_t), INTENT(INOUT) :: IM
88 TYPE(surf_atm_grid_t), INTENT(INOUT) :: UG
89 TYPE(surf_atm_t), INTENT(INOUT) :: U
90 !
91  CHARACTER(LEN=*), DIMENSION(:), INTENT(IN) :: HSELECT
92 !
93  CHARACTER(LEN=100), DIMENSION(:), POINTER :: YNAME_DIM
94  CHARACTER(LEN=100), DIMENSION(1) :: YATT_TITLE, YATT
95  CHARACTER(LEN=13),DIMENSION(1) :: YUNIT1, YUNIT2
96  CHARACTER(LEN=3) :: YISBA
97 !
98 REAL,DIMENSION(:), POINTER :: ZX, ZY
99 !
100 INTEGER, DIMENSION(:), POINTER :: IDIMS, IDDIM
101 INTEGER :: IDIM1, INDIMS
102 INTEGER :: INI, INPATCH, INLVLD, INLVLS, INBIOMASS, &
103  INLITTER, INLITTLEVS, INSOILCARB
104 INTEGER :: IDESC_ROOF_LAYER, IDESC_ROAD_LAYER, IDESC_WALL_LAYER, &
105  IDESC_FLOOR_LAYER, IDESC_CODE, IDESC_USE, IDESC_AGE, IDESC_BLD
106 INTEGER :: IRET, IL, IFULL, ISNAP, INLATI, ISNOW_LAYER
107 INTEGER :: ILUOUT, IDIMID, ITIME, ITOT
108 INTEGER :: ID0
109 !
110 LOGICAL :: GEXIST, GOPENED, GSST_DATA
111 LOGICAL :: GDATA_BLDTYPE, GDATA_BLD_AGE, GDATA_USETYPE
112 !
113 REAL(KIND=JPRB) :: ZHOOK_HANDLE
114 !------------------------------------------------------------------------------
115 IF (lhook) CALL dr_hook('INIT_OUTPUT_NC_N',0,zhook_handle)
116 !
117  CALL get_dim_full_n(u%NDIM_FULL, ifull)
118 
119 IF (nrank==npio) THEN
120  INQUIRE(file=cfileout_nc,exist=gexist)
121  INQUIRE(file=cfileout_nc,opened=gopened)
122  IF (.NOT.gopened) THEN
123  iret = nf90_open(cfileout_nc,nf90_write,nid_nc)
124  ENDIF
125  IF (.NOT.gexist .OR. .NOT.lcreated .OR. cfileout_nc/=cfileout_nc_save) THEN
126  IF (csoftware=='PREP' .OR. csoftware=='OFFLINE' .OR. csoftware=='SODA') THEN
127  CALL get_isba_conf_n(im%O, im%NPE%AL(1)%TSNOW%NLAYER, &
128  yisba, inpatch, inlvld, inlvls, inbiomass, &
129  inlitter, inlittlevs, insoilcarb)
130  ENDIF
131  IF (ug%G%CGRID=='IGN') lwrite_coord = .true.
132  IF (csoftware=='PGD') THEN
133  IF (lsplit_patch) THEN
134  CALL ol_define_dim(ug, u%NSIZE_FULL, 'NOTIME ', iluout, ifull, idim1, yunit1, yunit2, &
135  zx, zy, idims, iddim, yname_dim)
136  ELSE
137  CALL ol_define_dim(ug, u%NSIZE_FULL, 'NOTIME ', iluout, ifull, idim1, yunit1, yunit2, &
138  zx, zy, idims, iddim, yname_dim, inpatch)
139  ENDIF
140  ELSE
141  IF (lsplit_patch) THEN
142  CALL ol_define_dim(ug, u%NSIZE_FULL, 'NOTIME ', iluout, ifull, idim1, yunit1, yunit2, &
143  zx, zy, idims, iddim, yname_dim)
144  ELSE
145  CALL ol_define_dim(ug, u%NSIZE_FULL, 'NOTIME ', iluout, ifull, idim1, yunit1, yunit2, &
146  zx, zy, idims, iddim, yname_dim, inpatch)
147  ENDIF
148  ENDIF
149  CALL create_file(cfileout_nc,idims,yname_dim,nid_nc,iddim)
150  !IF (UG%G%CGRID=='IGN') THEN
151  !YATT_TITLE(1) = "comment"
152  !YATT(1) = "longitude"
153  !CALL DEF_VAR_NETCDF(HSELECT,NID_NC,'XLON','XLON',IDDIM(1:1),YATT_TITLE,YATT,ID0,NF90_DOUBLE)
154  !YATT(1) = "latitude"
155  !CALL DEF_VAR_NETCDF(HSELECT,NID_NC,'XLAT','XLAT',IDDIM(1:1),YATT_TITLE,YATT,ID0,NF90_DOUBLE)
156  !ENDIF
158  lcreated = .true.
159  IF (csoftware=='PGD') iret = nf90_def_dim(nid_nc,"Nb_of_input_data",nvegtype*im%DTV%NTIME,idimid)
160  IF (csoftware=='PGD' .OR. ( csoftware=='OFFLINE' .AND. lrestart ) ) THEN
161  iret = nf90_def_dim(nid_nc,"Number_of_covers",jpcover,idimid)
162  IF (ldata_irrig) iret = nf90_def_dim(nid_nc,"Irrig_parameters",6,idimid)
163  IF (csoftware=='PGD') THEN
164  isnow_layer = 0
165  ELSE
166  isnow_layer = im%NPE%AL(1)%TSNOW%NLAYER
167  ENDIF
168  CALL get_isba_conf_n(im%O, isnow_layer, &
169  yisba, inpatch, inlvld, inlvls, inbiomass, &
170  inlitter, inlittlevs, insoilcarb)
171  IF (yisba=='DIF') iret = nf90_def_dim(nid_nc,"Nground_layers",inlvld,idimid)
172  CALL get_data_seaflux_conf_n(dts, gsst_data,itime)
173  IF (gsst_data) iret = nf90_def_dim(nid_nc,"Number_of_dates",itime,idimid)
174  CALL get_bld_conf_n(bdd, dtt, gdata_bldtype, gdata_bld_age, gdata_usetype, &
175  idesc_roof_layer, idesc_road_layer, idesc_wall_layer, &
176  idesc_floor_layer, idesc_code, idesc_use, idesc_age, idesc_bld)
177  IF (gdata_bldtype .OR. gdata_bld_age .OR. gdata_usetype) THEN
178  itot = (21+3*idesc_roof_layer+3*idesc_road_layer+3*idesc_wall_layer+3*idesc_floor_layer)&
179  *idesc_code + 9*idesc_use+2*idesc_age+idesc_bld
180  iret = nf90_def_dim(nid_nc,"Bld_dimensions ",7,idimid)
181  iret = nf90_def_dim(nid_nc,"Bld_parameters ",itot,idimid)
182  ENDIF
183  IF (chu%LCH_EMIS) THEN
184  IF (chu%CCH_EMIS=='AGGR') THEN
185  IF (che%NEMIS_NBR/=0) iret = nf90_def_dim(nid_nc,"Temporal_emiss ",che%NTIME_MAX,idimid)
186  ELSE IF (chu%CCH_EMIS=='SNAP') THEN
187  isnap = max(chn%NSNAP_M,chn%NSNAP_D,chn%NSNAP_H)
188  IF (isnap/=0 .AND. chn%NEMIS_SNAP/=0) THEN
189  iret = nf90_def_dim(nid_nc,"Nemis_snap",chn%NEMIS_SNAP,idimid)
190  iret = nf90_def_dim(nid_nc,"Nsnap_temp",isnap,idimid)
191  ENDIF
192  ENDIF
193  ENDIF
194  IF (ASSOCIATED(dtz%XDATA_DTS)) THEN
195  itime = SIZE(dtz%XDATA_DTS)
196  IF (itime/=0) iret = nf90_def_dim(nid_nc,"Nforc_tsz0",itime,idimid)
197  ENDIF
198  ENDIF
199  IF (ug%G%CGRID=='GAUSS') THEN
200  CALL get_gridtype_gauss(ug%G%XGRID_PAR,inlati)
201  iret = nf90_def_dim(nid_nc,"Nlati",inlati,idimid)
202  ENDIF
203  ELSE
204  IF (ldef) iret = nf90_redef(nid_nc)
205  ENDIF
206  IF (ldef) iret = nf90_enddef(nid_nc)
207  iret = nf90_close(nid_nc)
208 ELSE
209  IF (ug%G%CGRID=='IGN') lwrite_coord = .true.
210 ENDIF
211 !
212 !------------------------------------------------------------------------------
213 IF (lhook) CALL dr_hook('INIT_OUTPUT_NC_N',1,zhook_handle)
214 !------------------------------------------------------------------------------
215 !
216 END SUBROUTINE init_output_nc_n
subroutine get_data_seaflux_conf_n(DTS, OSST_DATA, KTIME)
character(len=28), save cfileout_nc
character(len=28), save cfileout_nc_save
subroutine get_dim_full_n(KDIM_FULL_IN, KDIM_FULL_OUT)
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
character(len=7) csoftware
subroutine create_file(HFILE, KDIMS, HNAM_DIM, KFILE_ID, KDIM_ID)
Definition: create_file.F90:7
subroutine get_isba_conf_n(IO, KSNOW_LAYER_IN, HISBA, KPATCH, KGROUND_LAYER, KSNOW_LAYE
subroutine init_output_nc_n(BDD, CHE, CHN, CHU, DTS, DTT, DTZ, IM
logical lhook
Definition: yomhook.F90:15
subroutine get_gridtype_gauss(PGRID_PAR, KNLATI, PLAPO, PLOPO, PCODIL, KNLOPA, KL, PLAT, PLON, PLAT_XY, PLON_XY, PMESH_SIZE, PLONINF, PLATINF, PLONSUP, PLATSUP)
logical, save lcreated
subroutine get_bld_conf_n(BDD, DTT, ODATA_BLDTYPE, ODATA_BLD_AGE, ODATA_USE