source: LMDZ5/trunk/libf/phylmd/phys_output_mod.F90 @ 1537

Last change on this file since 1537 was 1518, checked in by idelkadi, 13 years ago

Modifications des routines de convection :

  • correction de bug : le champ sigd n'etait pas decompresse avant d'etre sorti de la convection.
  • sortir de nouveaux champs de convection (plcl, plfc, wb)
  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 81.8 KB
Line 
1! $Id: phys_output_mod.F90 1518 2011-05-12 13:32:22Z musat $
2!
3! Abderrahmane 12 2007
4!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
5!!! Ecreture des Sorties du modele dans les fichiers Netcdf :
6! histmth.nc : moyennes mensuelles
7! histday.nc : moyennes journalieres
8! histhf.nc  : moyennes toutes les 3 heures
9! histins.nc : valeurs instantanees
10!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
11
12MODULE phys_output_mod
13
14  IMPLICIT NONE
15
16  private histdef2d, histdef3d, conf_physoutputs
17
18
19   integer, parameter                           :: nfiles = 5
20   logical, dimension(nfiles), save             :: clef_files
21   integer, dimension(nfiles), save             :: lev_files
22   integer, dimension(nfiles), save             :: nid_files
23!!$OMP THREADPRIVATE(clef_files, lev_files,nid_files)
24 
25   integer, dimension(nfiles), private, save :: nhorim, nvertm
26   integer, dimension(nfiles), private, save :: nvertap, nvertbp, nvertAlt
27!   integer, dimension(nfiles), private, save :: nvertp0
28   real, dimension(nfiles), private, save                :: zoutm
29   real,                    private, save                :: zdtime
30   CHARACTER(len=20), dimension(nfiles), private, save   :: type_ecri
31!$OMP THREADPRIVATE(nhorim, nvertm, zoutm,zdtime,type_ecri)
32
33!   integer, save                     :: nid_hf3d
34
35!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
36!! Definition pour chaque variable du niveau d ecriture dans chaque fichier
37!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!/ histmth, histday, histhf, histins /),'!!!!!!!!!!!!
38!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
39
40  integer, private:: levmin(nfiles) = 1
41  integer, private:: levmax(nfiles)
42
43  TYPE ctrl_out
44   integer,dimension(5) :: flag
45   character(len=20)     :: name
46  END TYPE ctrl_out
47
48!!! Comosentes de la coordonnee sigma-hybride
49!!! Ap et Bp
50  type(ctrl_out),save :: o_Ahyb         = ctrl_out((/ 1, 1, 1, 1, 1 /), 'Ap')
51  type(ctrl_out),save :: o_Bhyb         = ctrl_out((/ 1, 1, 1, 1, 1 /), 'Bp')
52  type(ctrl_out),save :: o_Alt          = ctrl_out((/ 1, 1, 1, 1, 1 /), 'Alt')
53
54!!! 1D
55  type(ctrl_out),save :: o_phis         = ctrl_out((/ 1, 1, 10, 5, 1 /), 'phis')
56  type(ctrl_out),save :: o_aire         = ctrl_out((/ 1, 1, 10,  10, 1 /),'aire')
57  type(ctrl_out),save :: o_contfracATM  = ctrl_out((/ 10, 1,  1, 10, 10 /),'contfracATM')
58  type(ctrl_out),save :: o_contfracOR   = ctrl_out((/ 10, 1,  1, 10, 10 /),'contfracOR')
59  type(ctrl_out),save :: o_aireTER      = ctrl_out((/ 10, 10, 1, 10, 10 /),'aireTER')
60 
61!!! 2D
62
63  type(ctrl_out),save :: o_flat         = ctrl_out((/ 5, 1, 10, 5, 1 /),'flat')
64  type(ctrl_out),save :: o_slp          = ctrl_out((/ 1, 1, 1, 10, 1 /),'slp')
65  type(ctrl_out),save :: o_tsol         = ctrl_out((/ 1, 1, 1, 5, 1 /),'tsol')
66  type(ctrl_out),save :: o_t2m          = ctrl_out((/ 1, 1, 1, 5, 1 /),'t2m')
67  type(ctrl_out),save :: o_t2m_min      = ctrl_out((/ 1, 1, 10, 10, 10 /),'t2m_min')
68  type(ctrl_out),save :: o_t2m_max      = ctrl_out((/ 1, 1, 10, 10, 10 /),'t2m_max')
69  type(ctrl_out),save,dimension(4) :: o_t2m_srf      = (/ ctrl_out((/ 10, 4, 10, 10, 10 /),'t2m_ter'), &
70                                                 ctrl_out((/ 10, 4, 10, 10, 10 /),'t2m_lic'), &
71                                                 ctrl_out((/ 10, 4, 10, 10, 10 /),'t2m_oce'), &
72                                                 ctrl_out((/ 10, 4, 10, 10, 10 /),'t2m_sic') /)
73
74  type(ctrl_out),save :: o_wind10m      = ctrl_out((/ 1, 1, 1, 10, 10 /),'wind10m')
75  type(ctrl_out),save :: o_wind10max    = ctrl_out((/ 10, 1, 10, 10, 10 /),'wind10max')
76  type(ctrl_out),save :: o_sicf         = ctrl_out((/ 1, 1, 10, 10, 10 /),'sicf')
77  type(ctrl_out),save :: o_q2m          = ctrl_out((/ 1, 1, 1, 5, 1 /),'q2m')
78  type(ctrl_out),save :: o_u10m         = ctrl_out((/ 1, 1, 1, 5, 1 /),'u10m')
79  type(ctrl_out),save :: o_v10m         = ctrl_out((/ 1, 1, 1, 5, 1 /),'v10m')
80  type(ctrl_out),save :: o_psol         = ctrl_out((/ 1, 1, 1, 5, 1 /),'psol')
81  type(ctrl_out),save :: o_qsurf        = ctrl_out((/ 1, 10, 10, 10, 10 /),'qsurf')
82
83  type(ctrl_out),save,dimension(4) :: o_u10m_srf     = (/ ctrl_out((/ 10, 4, 10, 10, 10 /),'u10m_ter'), &
84                                              ctrl_out((/ 10, 4, 10, 10, 10 /),'u10m_lic'), &
85                                              ctrl_out((/ 10, 4, 10, 10, 10 /),'u10m_oce'), &
86                                              ctrl_out((/ 10, 4, 10, 10, 10 /),'u10m_sic') /)
87
88  type(ctrl_out),save,dimension(4) :: o_v10m_srf     = (/ ctrl_out((/ 10, 4, 10, 10, 10 /),'v10m_ter'), &
89                                              ctrl_out((/ 10, 4, 10, 10, 10 /),'v10m_lic'), &
90                                              ctrl_out((/ 10, 4, 10, 10, 10 /),'v10m_oce'), &
91                                              ctrl_out((/ 10, 4, 10, 10, 10 /),'v10m_sic') /)
92
93  type(ctrl_out),save :: o_qsol         = ctrl_out((/ 1, 10, 10, 10, 10 /),'qsol')
94
95  type(ctrl_out),save :: o_ndayrain     = ctrl_out((/ 1, 10, 10, 10, 10 /),'ndayrain')
96  type(ctrl_out),save :: o_precip       = ctrl_out((/ 1, 1, 1, 5, 10 /),'precip')
97  type(ctrl_out),save :: o_plul         = ctrl_out((/ 1, 1, 1, 10, 10 /),'plul')
98
99  type(ctrl_out),save :: o_pluc         = ctrl_out((/ 1, 1, 1, 5, 10 /),'pluc')
100  type(ctrl_out),save :: o_snow         = ctrl_out((/ 1, 1, 10, 5, 10 /),'snow')
101  type(ctrl_out),save :: o_evap         = ctrl_out((/ 1, 1, 10, 10, 10 /),'evap')
102  type(ctrl_out),save,dimension(4) :: o_evap_srf     = (/ ctrl_out((/ 1, 1, 10, 10, 10 /),'evap_ter'), &
103                                           ctrl_out((/ 1, 1, 10, 10, 10 /),'evap_lic'), &
104                                           ctrl_out((/ 1, 1, 10, 10, 10 /),'evap_oce'), &
105                                           ctrl_out((/ 1, 1, 10, 10, 10 /),'evap_sic') /)
106  type(ctrl_out),save :: o_msnow       = ctrl_out((/ 1, 10, 10, 10, 10 /),'msnow')
107  type(ctrl_out),save :: o_fsnow       = ctrl_out((/ 1, 10, 10, 10, 10 /),'fsnow')
108
109  type(ctrl_out),save :: o_tops         = ctrl_out((/ 1, 1, 10, 10, 10 /),'tops')
110  type(ctrl_out),save :: o_tops0        = ctrl_out((/ 1, 5, 10, 10, 10 /),'tops0')
111  type(ctrl_out),save :: o_topl         = ctrl_out((/ 1, 1, 10, 5, 10 /),'topl')
112  type(ctrl_out),save :: o_topl0        = ctrl_out((/ 1, 5, 10, 10, 10 /),'topl0')
113  type(ctrl_out),save :: o_SWupTOA      = ctrl_out((/ 1, 4, 10, 10, 10 /),'SWupTOA')
114  type(ctrl_out),save :: o_SWupTOAclr   = ctrl_out((/ 1, 4, 10, 10, 10 /),'SWupTOAclr')
115  type(ctrl_out),save :: o_SWdnTOA      = ctrl_out((/ 1, 4, 10, 10, 10 /),'SWdnTOA')
116  type(ctrl_out),save :: o_SWdnTOAclr   = ctrl_out((/ 1, 4, 10, 10, 10 /),'SWdnTOAclr')
117  type(ctrl_out),save :: o_nettop       = ctrl_out((/ 1, 4, 10, 10, 10 /),'nettop')
118
119  type(ctrl_out),save :: o_SWup200      = ctrl_out((/ 1, 10, 10, 10, 10 /),'SWup200')
120  type(ctrl_out),save :: o_SWup200clr   = ctrl_out((/ 10, 1, 10, 10, 10 /),'SWup200clr')
121  type(ctrl_out),save :: o_SWdn200      = ctrl_out((/ 1, 10, 10, 10, 10 /),'SWdn200')
122  type(ctrl_out),save :: o_SWdn200clr   = ctrl_out((/ 10, 1, 10, 10, 10 /),'SWdn200clr')
123
124! arajouter
125!  type(ctrl_out),save :: o_LWupTOA     = ctrl_out((/ 1, 4, 10, 10, 10 /),'LWupTOA')
126!  type(ctrl_out),save :: o_LWupTOAclr  = ctrl_out((/ 1, 4, 10, 10, 10 /),'LWupTOAclr')
127!  type(ctrl_out),save :: o_LWdnTOA     = ctrl_out((/ 1, 4, 10, 10, 10 /),'LWdnTOA')
128!  type(ctrl_out),save :: o_LWdnTOAclr  = ctrl_out((/ 1, 4, 10, 10, 10 /),'LWdnTOAclr')
129
130  type(ctrl_out),save :: o_LWup200      = ctrl_out((/ 1, 10, 10, 10, 10 /),'LWup200')
131  type(ctrl_out),save :: o_LWup200clr   = ctrl_out((/ 1, 10, 10, 10, 10 /),'LWup200clr')
132  type(ctrl_out),save :: o_LWdn200      = ctrl_out((/ 1, 10, 10, 10, 10 /),'LWdn200')
133  type(ctrl_out),save :: o_LWdn200clr   = ctrl_out((/ 1, 10, 10, 10, 10 /),'LWdn200clr')
134  type(ctrl_out),save :: o_sols         = ctrl_out((/ 1, 1, 10, 10, 10 /),'sols')
135  type(ctrl_out),save :: o_sols0        = ctrl_out((/ 1, 5, 10, 10, 10 /),'sols0')
136  type(ctrl_out),save :: o_soll         = ctrl_out((/ 1, 1, 10, 10, 10 /),'soll')
137  type(ctrl_out),save :: o_soll0        = ctrl_out((/ 1, 5, 10, 10, 10 /),'soll0')
138  type(ctrl_out),save :: o_radsol       = ctrl_out((/ 1, 1, 10, 10, 10 /),'radsol')
139  type(ctrl_out),save :: o_SWupSFC      = ctrl_out((/ 1, 4, 10, 5, 10 /),'SWupSFC')
140  type(ctrl_out),save :: o_SWupSFCclr   = ctrl_out((/ 1, 4, 10, 10, 10 /),'SWupSFCclr')
141  type(ctrl_out),save :: o_SWdnSFC      = ctrl_out((/ 1, 1, 10, 5, 10 /),'SWdnSFC')
142  type(ctrl_out),save :: o_SWdnSFCclr   = ctrl_out((/ 1, 4, 10, 5, 10 /),'SWdnSFCclr')
143  type(ctrl_out),save :: o_LWupSFC      = ctrl_out((/ 1, 4, 10, 10, 10 /),'LWupSFC')
144  type(ctrl_out),save :: o_LWupSFCclr   = ctrl_out((/ 1, 4, 10, 5, 10 /),'LWupSFCclr')
145  type(ctrl_out),save :: o_LWdnSFC      = ctrl_out((/ 1, 4, 10, 5, 10 /),'LWdnSFC')
146  type(ctrl_out),save :: o_LWdnSFCclr   = ctrl_out((/ 1, 4, 10, 5, 10 /),'LWdnSFCclr')
147  type(ctrl_out),save :: o_bils         = ctrl_out((/ 1, 2, 10, 5, 10 /),'bils')
148  type(ctrl_out),save :: o_sens         = ctrl_out((/ 1, 1, 10, 5, 10 /),'sens')
149  type(ctrl_out),save :: o_fder         = ctrl_out((/ 1, 2, 10, 10, 10 /),'fder')
150  type(ctrl_out),save :: o_ffonte       = ctrl_out((/ 1, 10, 10, 10, 10 /),'ffonte')
151  type(ctrl_out),save :: o_fqcalving    = ctrl_out((/ 1, 10, 10, 10, 10 /),'fqcalving')
152  type(ctrl_out),save :: o_fqfonte      = ctrl_out((/ 1, 10, 10, 10, 10 /),'fqfonte')
153
154  type(ctrl_out),save :: o_taux         = ctrl_out((/ 1, 10, 10, 10, 10 /),'taux')
155  type(ctrl_out),save :: o_tauy         = ctrl_out((/ 1, 10, 10, 10, 10 /),'tauy')
156  type(ctrl_out),save,dimension(4) :: o_taux_srf     = (/ ctrl_out((/ 1, 4, 10, 10, 10 /),'taux_ter'), &
157                                                 ctrl_out((/ 1, 4, 10, 10, 10 /),'taux_lic'), &
158                                                 ctrl_out((/ 1, 4, 10, 10, 10 /),'taux_oce'), &
159                                                 ctrl_out((/ 1, 4, 10, 10, 10 /),'taux_sic') /)
160
161  type(ctrl_out),save,dimension(4) :: o_tauy_srf     = (/ ctrl_out((/ 1, 4, 10, 10, 10 /),'tauy_ter'), &
162                                                 ctrl_out((/ 1, 4, 10, 10, 10 /),'tauy_lic'), &
163                                                 ctrl_out((/ 1, 4, 10, 10, 10 /),'tauy_oce'), &
164                                                 ctrl_out((/ 1, 4, 10, 10, 10 /),'tauy_sic') /)
165
166
167  type(ctrl_out),save,dimension(4) :: o_pourc_srf    = (/ ctrl_out((/ 1, 4, 10, 10, 10 /),'pourc_ter'), &
168                                                 ctrl_out((/ 1, 4, 10, 10, 10 /),'pourc_lic'), &
169                                                 ctrl_out((/ 1, 4, 10, 10, 10 /),'pourc_oce'), &
170                                                 ctrl_out((/ 1, 4, 10, 10, 10 /),'pourc_sic') /)     
171
172  type(ctrl_out),save,dimension(4) :: o_fract_srf    = (/ ctrl_out((/ 1, 4, 10, 10, 10 /),'fract_ter'), &
173                                                 ctrl_out((/ 1, 4, 10, 10, 10 /),'fract_lic'), &
174                                                 ctrl_out((/ 1, 4, 10, 10, 10 /),'fract_oce'), &
175                                                 ctrl_out((/ 1, 4, 10, 10, 10 /),'fract_sic') /)
176
177  type(ctrl_out),save,dimension(4) :: o_tsol_srf     = (/ ctrl_out((/ 1, 4, 10, 10, 10 /),'tsol_ter'), &
178                                                 ctrl_out((/ 1, 4, 10, 10, 10 /),'tsol_lic'), &
179                                                 ctrl_out((/ 1, 4, 10, 10, 10 /),'tsol_oce'), &
180                                                 ctrl_out((/ 1, 4, 10, 10, 10 /),'tsol_sic') /)
181
182  type(ctrl_out),save,dimension(4) :: o_sens_srf     = (/ ctrl_out((/ 1, 4, 10, 1, 10 /),'sens_ter'), &
183                                                 ctrl_out((/ 1, 4, 10, 1, 10 /),'sens_lic'), &
184                                                 ctrl_out((/ 1, 4, 10, 1, 10 /),'sens_oce'), &
185                                                 ctrl_out((/ 1, 4, 10, 1, 10 /),'sens_sic') /)
186
187  type(ctrl_out),save,dimension(4) :: o_lat_srf      = (/ ctrl_out((/ 1, 4, 10, 1, 10 /),'lat_ter'), &
188                                                 ctrl_out((/ 1, 4, 10, 1, 10 /),'lat_lic'), &
189                                                 ctrl_out((/ 1, 4, 10, 1, 10 /),'lat_oce'), &
190                                                 ctrl_out((/ 1, 4, 10, 1, 10 /),'lat_sic') /)
191
192  type(ctrl_out),save,dimension(4) :: o_flw_srf      = (/ ctrl_out((/ 1, 10, 10, 10, 10 /),'flw_ter'), &
193                                                 ctrl_out((/ 1, 10, 10, 10, 10 /),'flw_lic'), &
194                                                 ctrl_out((/ 1, 10, 10, 10, 10 /),'flw_oce'), &
195                                                 ctrl_out((/ 1, 10, 10, 10, 10 /),'flw_sic') /)
196                                                 
197  type(ctrl_out),save,dimension(4) :: o_fsw_srf      = (/ ctrl_out((/ 1, 10, 10, 10, 10 /),'fsw_ter'), &
198                                                  ctrl_out((/ 1, 10, 10, 10, 10 /),'fsw_lic'), &
199                                                  ctrl_out((/ 1, 10, 10, 10, 10 /),'fsw_oce'), &
200                                                  ctrl_out((/ 1, 10, 10, 10, 10 /),'fsw_sic') /)
201
202  type(ctrl_out),save,dimension(4) :: o_wbils_srf    = (/ ctrl_out((/ 1, 10, 10, 10, 10 /),'wbils_ter'), &
203                                                 ctrl_out((/ 1, 10, 10, 10, 10 /),'wbils_lic'), &
204                                                 ctrl_out((/ 1, 10, 10, 10, 10 /),'wbils_oce'), &
205                                                 ctrl_out((/ 1, 10, 10, 10, 10 /),'wbils_sic') /)
206
207  type(ctrl_out),save,dimension(4) :: o_wbilo_srf    = (/ ctrl_out((/ 1, 10, 10, 10, 10 /),'wbilo_ter'), &
208                                                     ctrl_out((/ 1, 10, 10, 10, 10 /),'wbilo_lic'), &
209                                                 ctrl_out((/ 1, 10, 10, 10, 10 /),'wbilo_oce'), &
210                                                 ctrl_out((/ 1, 10, 10, 10, 10 /),'wbilo_sic') /)
211
212
213  type(ctrl_out),save :: o_cdrm         = ctrl_out((/ 1, 10, 10, 10, 10 /),'cdrm')
214  type(ctrl_out),save :: o_cdrh         = ctrl_out((/ 1, 10, 10, 1, 10 /),'cdrh')
215  type(ctrl_out),save :: o_cldl         = ctrl_out((/ 1, 1, 10, 10, 10 /),'cldl')
216  type(ctrl_out),save :: o_cldm         = ctrl_out((/ 1, 1, 10, 10, 10 /),'cldm')
217  type(ctrl_out),save :: o_cldh         = ctrl_out((/ 1, 1, 10, 10, 10 /),'cldh')
218  type(ctrl_out),save :: o_cldt         = ctrl_out((/ 1, 1, 2, 5, 10 /),'cldt')
219  type(ctrl_out),save :: o_cldq         = ctrl_out((/ 1, 1, 10, 10, 10 /),'cldq')
220  type(ctrl_out),save :: o_lwp          = ctrl_out((/ 1, 5, 10, 10, 10 /),'lwp')
221  type(ctrl_out),save :: o_iwp          = ctrl_out((/ 1, 5, 10, 10, 10 /),'iwp')
222  type(ctrl_out),save :: o_ue           = ctrl_out((/ 1, 10, 10, 10, 10 /),'ue')
223  type(ctrl_out),save :: o_ve           = ctrl_out((/ 1, 10, 10, 10, 10 /),'ve')
224  type(ctrl_out),save :: o_uq           = ctrl_out((/ 1, 10, 10, 10, 10 /),'uq')
225  type(ctrl_out),save :: o_vq           = ctrl_out((/ 1, 10, 10, 10, 10 /),'vq')
226 
227  type(ctrl_out),save :: o_cape         = ctrl_out((/ 1, 10, 10, 10, 10 /),'cape')
228  type(ctrl_out),save :: o_pbase        = ctrl_out((/ 1, 5, 10, 10, 10 /),'pbase')
229  type(ctrl_out),save :: o_ptop         = ctrl_out((/ 1, 5, 10, 10, 10 /),'ptop')
230  type(ctrl_out),save :: o_fbase        = ctrl_out((/ 1, 10, 10, 10, 10 /),'fbase')
231  type(ctrl_out),save :: o_plcl        = ctrl_out((/ 1, 10, 10, 10, 10 /),'plcl')
232  type(ctrl_out),save :: o_plfc        = ctrl_out((/ 1, 10, 10, 10, 10 /),'plfc')
233  type(ctrl_out),save :: o_wbeff        = ctrl_out((/ 1, 10, 10, 10, 10 /),'wbeff')
234  type(ctrl_out),save :: o_prw          = ctrl_out((/ 1, 1, 10, 10, 10 /),'prw')
235
236  type(ctrl_out),save :: o_s_pblh       = ctrl_out((/ 1, 10, 10, 10, 1 /),'s_pblh')
237  type(ctrl_out),save :: o_s_pblt       = ctrl_out((/ 1, 10, 10, 10, 1 /),'s_pblt')
238  type(ctrl_out),save :: o_s_lcl        = ctrl_out((/ 1, 10, 10, 10, 10 /),'s_lcl')
239  type(ctrl_out),save :: o_s_capCL      = ctrl_out((/ 1, 10, 10, 10, 10 /),'s_capCL')
240  type(ctrl_out),save :: o_s_oliqCL     = ctrl_out((/ 1, 10, 10, 10, 10 /),'s_oliqCL')
241  type(ctrl_out),save :: o_s_cteiCL     = ctrl_out((/ 1, 10, 10, 10, 1 /),'s_cteiCL')
242  type(ctrl_out),save :: o_s_therm      = ctrl_out((/ 1, 10, 10, 10, 1 /),'s_therm')
243  type(ctrl_out),save :: o_s_trmb1      = ctrl_out((/ 1, 10, 10, 10, 10 /),'s_trmb1')
244  type(ctrl_out),save :: o_s_trmb2      = ctrl_out((/ 1, 10, 10, 10, 10 /),'s_trmb2')
245  type(ctrl_out),save :: o_s_trmb3      = ctrl_out((/ 1, 10, 10, 10, 10 /),'s_trmb3')
246
247  type(ctrl_out),save :: o_slab_bils    = ctrl_out((/ 1, 1, 10, 10, 10 /),'slab_bils_oce')
248
249  type(ctrl_out),save :: o_ale_bl       = ctrl_out((/ 1, 1, 1, 10, 10 /),'ale_bl')
250  type(ctrl_out),save :: o_alp_bl       = ctrl_out((/ 1, 1, 1, 10, 10 /),'alp_bl')
251  type(ctrl_out),save :: o_ale_wk       = ctrl_out((/ 1, 1, 1, 10, 10 /),'ale_wk')
252  type(ctrl_out),save :: o_alp_wk       = ctrl_out((/ 1, 1, 1, 10, 10 /),'alp_wk')
253
254  type(ctrl_out),save :: o_ale          = ctrl_out((/ 1, 1, 1, 10, 10 /),'ale')
255  type(ctrl_out),save :: o_alp          = ctrl_out((/ 1, 1, 1, 10, 10 /),'alp')
256  type(ctrl_out),save :: o_cin          = ctrl_out((/ 1, 1, 1, 10, 10 /),'cin')
257  type(ctrl_out),save :: o_wape         = ctrl_out((/ 1, 1, 1, 10, 10 /),'wape')
258
259
260! Champs interpolles sur des niveaux de pression ??? a faire correctement
261                                             
262  type(ctrl_out),save,dimension(6) :: o_uSTDlevs     = (/ ctrl_out((/ 1, 1, 3, 10, 10 /),'u850'), &
263                                                     ctrl_out((/ 1, 1, 3, 10, 10 /),'u700'), &
264                                                     ctrl_out((/ 1, 1, 3, 10, 10 /),'u500'), &
265                                                     ctrl_out((/ 1, 1, 3, 10, 10 /),'u200'), &
266                                                     ctrl_out((/ 1, 1, 3, 10, 10 /),'u50'), &
267                                                     ctrl_out((/ 1, 1, 3, 10, 10 /),'u10') /)
268                                                     
269
270  type(ctrl_out),save,dimension(6) :: o_vSTDlevs     = (/ ctrl_out((/ 1, 1, 3, 10, 10 /),'v850'), &
271                                                     ctrl_out((/ 1, 1, 3, 10, 10 /),'v700'), &
272                                                     ctrl_out((/ 1, 1, 3, 10, 10 /),'v500'), &
273                                                     ctrl_out((/ 1, 1, 3, 10, 10 /),'v200'), &
274                                                     ctrl_out((/ 1, 1, 3, 10, 10 /),'v50'), &
275                                                     ctrl_out((/ 1, 1, 3, 10, 10 /),'v10') /)
276
277  type(ctrl_out),save,dimension(6) :: o_wSTDlevs     = (/ ctrl_out((/ 1, 1, 3, 10, 10 /),'w850'), &
278                                                     ctrl_out((/ 1, 1, 3, 10, 10 /),'w700'), &
279                                                     ctrl_out((/ 1, 1, 3, 10, 10 /),'w500'), &
280                                                     ctrl_out((/ 1, 1, 3, 10, 10 /),'w200'), &
281                                                     ctrl_out((/ 1, 1, 3, 10, 10 /),'w50'), &
282                                                     ctrl_out((/ 1, 1, 3, 10, 10 /),'w10') /)
283
284  type(ctrl_out),save,dimension(6) :: o_tSTDlevs     = (/ ctrl_out((/ 1, 1, 3, 10, 10 /),'t850'), &
285                                                     ctrl_out((/ 1, 1, 3, 10, 10 /),'t700'), &
286                                                     ctrl_out((/ 1, 1, 3, 10, 10 /),'t500'), &
287                                                     ctrl_out((/ 1, 1, 3, 10, 10 /),'t200'), &
288                                                     ctrl_out((/ 1, 1, 3, 10, 10 /),'t50'), &
289                                                     ctrl_out((/ 1, 1, 3, 10, 10 /),'t10') /)
290
291  type(ctrl_out),save,dimension(6) :: o_qSTDlevs     = (/ ctrl_out((/ 1, 1, 3, 10, 10 /),'q850'), &
292                                                     ctrl_out((/ 1, 1, 3, 10, 10 /),'q700'), &
293                                                     ctrl_out((/ 1, 1, 3, 10, 10 /),'q500'), &
294                                                     ctrl_out((/ 1, 1, 3, 10, 10 /),'q200'), &
295                                                     ctrl_out((/ 1, 1, 3, 10, 10 /),'q50'), &
296                                                     ctrl_out((/ 1, 1, 3, 10, 10 /),'q10') /)
297
298  type(ctrl_out),save,dimension(6) :: o_zSTDlevs   = (/ ctrl_out((/ 1, 1, 3, 10, 10 /),'z850'), &
299                                                     ctrl_out((/ 1, 1, 3, 10, 10 /),'z700'), &
300                                                     ctrl_out((/ 1, 1, 3, 10, 10 /),'z500'), &
301                                                     ctrl_out((/ 1, 1, 3, 10, 10 /),'z200'), &
302                                                     ctrl_out((/ 1, 1, 3, 10, 10 /),'z50'), &
303                                                     ctrl_out((/ 1, 1, 3, 10, 10 /),'z10') /)
304
305
306  type(ctrl_out),save :: o_t_oce_sic    = ctrl_out((/ 1, 10, 10, 10, 10 /),'t_oce_sic')
307
308  type(ctrl_out),save :: o_weakinv      = ctrl_out((/ 10, 1, 10, 10, 10 /),'weakinv')
309  type(ctrl_out),save :: o_dthmin       = ctrl_out((/ 10, 1, 10, 10, 10 /),'dthmin')
310  type(ctrl_out),save,dimension(4) :: o_u10_srf      = (/ ctrl_out((/ 10, 4, 10, 10, 10 /),'u10_ter'), &
311                                                     ctrl_out((/ 10, 4, 10, 10, 10 /),'u10_lic'), &
312                                                     ctrl_out((/ 10, 4, 10, 10, 10 /),'u10_oce'), &
313                                                     ctrl_out((/ 10, 4, 10, 10, 10 /),'u10_sic') /)
314
315  type(ctrl_out),save,dimension(4) :: o_v10_srf      = (/ ctrl_out((/ 10, 4, 10, 10, 10 /),'v10_ter'), &
316                                                     ctrl_out((/ 10, 4, 10, 10, 10 /),'v10_lic'), &
317                                                     ctrl_out((/ 10, 4, 10, 10, 10 /),'v10_oce'), &
318                                                     ctrl_out((/ 10, 4, 10, 10, 10 /),'v10_sic') /)
319
320  type(ctrl_out),save :: o_cldtau       = ctrl_out((/ 10, 5, 10, 10, 10 /),'cldtau')                     
321  type(ctrl_out),save :: o_cldemi       = ctrl_out((/ 10, 5, 10, 10, 10 /),'cldemi')
322  type(ctrl_out),save :: o_rh2m         = ctrl_out((/ 5, 5, 10, 10, 10 /),'rh2m')
323  type(ctrl_out),save :: o_rh2m_min     = ctrl_out((/ 10, 5, 10, 10, 10 /),'rh2m_min')
324  type(ctrl_out),save :: o_rh2m_max     = ctrl_out((/ 10, 5, 10, 10, 10 /),'rh2m_max')
325  type(ctrl_out),save :: o_qsat2m       = ctrl_out((/ 10, 5, 10, 10, 10 /),'qsat2m')
326  type(ctrl_out),save :: o_tpot         = ctrl_out((/ 10, 5, 10, 10, 10 /),'tpot')
327  type(ctrl_out),save :: o_tpote        = ctrl_out((/ 10, 5, 10, 10, 10 /),'tpote')
328  type(ctrl_out),save :: o_tke          = ctrl_out((/ 4, 10, 10, 10, 10 /),'tke ')
329  type(ctrl_out),save :: o_tke_max      = ctrl_out((/ 4, 10, 10, 10, 10 /),'tke_max')
330
331  type(ctrl_out),save,dimension(4) :: o_tke_srf      = (/ ctrl_out((/ 10, 4, 10, 10, 10 /),'tke_ter'), &
332                                                     ctrl_out((/ 10, 4, 10, 10, 10 /),'tke_lic'), &
333                                                     ctrl_out((/ 10, 4, 10, 10, 10 /),'tke_oce'), &
334                                                     ctrl_out((/ 10, 4, 10, 10, 10 /),'tke_sic') /)
335
336  type(ctrl_out),save,dimension(4) :: o_tke_max_srf  = (/ ctrl_out((/ 10, 4, 10, 10, 10 /),'tke_max_ter'), &
337                                                     ctrl_out((/ 10, 4, 10, 10, 10 /),'tke_max_lic'), &
338                                                     ctrl_out((/ 10, 4, 10, 10, 10 /),'tke_max_oce'), &
339                                                     ctrl_out((/ 10, 4, 10, 10, 10 /),'tke_max_sic') /)
340
341  type(ctrl_out),save :: o_kz           = ctrl_out((/ 4, 10, 10, 10, 10 /),'kz')
342  type(ctrl_out),save :: o_kz_max       = ctrl_out((/ 4, 10, 10, 10, 10 /),'kz_max')
343  type(ctrl_out),save :: o_SWnetOR      = ctrl_out((/ 10, 10, 2, 10, 10 /),'SWnetOR')
344  type(ctrl_out),save :: o_SWdownOR     = ctrl_out((/ 10, 10, 2, 10, 10 /),'SWdownOR')
345  type(ctrl_out),save :: o_LWdownOR     = ctrl_out((/ 10, 10, 2, 10, 10 /),'LWdownOR')
346
347  type(ctrl_out),save :: o_snowl        = ctrl_out((/ 10, 1, 10, 10, 10 /),'snowl')
348  type(ctrl_out),save :: o_cape_max     = ctrl_out((/ 10, 1, 10, 10, 10 /),'cape_max')
349  type(ctrl_out),save :: o_solldown     = ctrl_out((/ 10, 1, 10, 10, 10 /),'solldown')
350
351  type(ctrl_out),save :: o_dtsvdfo      = ctrl_out((/ 10, 10, 10, 10, 10 /),'dtsvdfo')
352  type(ctrl_out),save :: o_dtsvdft      = ctrl_out((/ 10, 10, 10, 10, 10 /),'dtsvdft')
353  type(ctrl_out),save :: o_dtsvdfg      = ctrl_out((/ 10, 10, 10, 10, 10 /),'dtsvdfg')
354  type(ctrl_out),save :: o_dtsvdfi      = ctrl_out((/ 10, 10, 10, 10, 10 /),'dtsvdfi')
355  type(ctrl_out),save :: o_rugs         = ctrl_out((/ 10, 10, 10, 10, 10 /),'rugs')
356
357  type(ctrl_out),save :: o_topswad      = ctrl_out((/ 2, 10, 10, 10, 10 /),'topswad')
358  type(ctrl_out),save :: o_topswai      = ctrl_out((/ 2, 10, 10, 10, 10 /),'topswai')
359  type(ctrl_out),save :: o_solswad      = ctrl_out((/ 2, 10, 10, 10, 10 /),'solswad')
360  type(ctrl_out),save :: o_solswai      = ctrl_out((/ 2, 10, 10, 10, 10 /),'solswai')
361
362  type(ctrl_out),save,dimension(10) :: o_tausumaero  = (/ ctrl_out((/ 4, 4, 10, 10, 10 /),'OD550_ASBCM'), &
363                                                     ctrl_out((/ 4, 4, 10, 10, 10 /),'OD550_ASPOMM'), &
364                                                     ctrl_out((/ 4, 4, 10, 10, 10 /),'OD550_ASSO4M'), &
365                                                     ctrl_out((/ 4, 4, 10, 10, 10 /),'OD550_CSSO4M'), &
366                                                     ctrl_out((/ 4, 4, 10, 10, 10 /),'OD550_SSSSM'), &
367                                                     ctrl_out((/ 4, 4, 10, 10, 10 /),'OD550_ASSSM'), &
368                                                     ctrl_out((/ 4, 4, 10, 10, 10 /),'OD550_CSSSM'), &
369                                                     ctrl_out((/ 4, 4, 10, 10, 10 /),'OD550_CIDUSTM'), &
370                                                     ctrl_out((/ 4, 4, 10, 10, 10 /),'OD550_AIBCM'), &
371                                                     ctrl_out((/ 4, 4, 10, 10, 10 /),'OD550_AIPOMM') /)
372
373  type(ctrl_out),save :: o_od550aer         = ctrl_out((/ 4, 4, 10, 10, 10 /),'od550aer')
374  type(ctrl_out),save :: o_od865aer         = ctrl_out((/ 4, 4, 10, 10, 10 /),'od865aer')
375  type(ctrl_out),save :: o_absvisaer        = ctrl_out((/ 4, 4, 10, 10, 10 /),'absvisaer')
376  type(ctrl_out),save :: o_od550lt1aer      = ctrl_out((/ 4, 4, 10, 10, 10 /),'od550lt1aer')
377
378  type(ctrl_out),save :: o_sconcso4         = ctrl_out((/ 4, 4, 10, 10, 10 /),'sconcso4')
379  type(ctrl_out),save :: o_sconcoa          = ctrl_out((/ 4, 4, 10, 10, 10 /),'sconcoa')
380  type(ctrl_out),save :: o_sconcbc          = ctrl_out((/ 4, 4, 10, 10, 10 /),'sconcbc')
381  type(ctrl_out),save :: o_sconcss          = ctrl_out((/ 4, 4, 10, 10, 10 /),'sconcss')
382  type(ctrl_out),save :: o_sconcdust        = ctrl_out((/ 4, 4, 10, 10, 10 /),'sconcdust')
383  type(ctrl_out),save :: o_concso4          = ctrl_out((/ 4, 4, 10, 10, 10 /),'concso4')
384  type(ctrl_out),save :: o_concoa           = ctrl_out((/ 4, 4, 10, 10, 10 /),'concoa')
385  type(ctrl_out),save :: o_concbc           = ctrl_out((/ 4, 4, 10, 10, 10 /),'concbc')
386  type(ctrl_out),save :: o_concss           = ctrl_out((/ 4, 4, 10, 10, 10 /),'concss')
387  type(ctrl_out),save :: o_concdust         = ctrl_out((/ 4, 4, 10, 10, 10 /),'concdust')
388  type(ctrl_out),save :: o_loadso4          = ctrl_out((/ 4, 4, 10, 10, 10 /),'loadso4')
389  type(ctrl_out),save :: o_loadoa           = ctrl_out((/ 4, 4, 10, 10, 10 /),'loadoa')
390  type(ctrl_out),save :: o_loadbc           = ctrl_out((/ 4, 4, 10, 10, 10 /),'loadbc')
391  type(ctrl_out),save :: o_loadss           = ctrl_out((/ 4, 4, 10, 10, 10 /),'loadss')
392  type(ctrl_out),save :: o_loaddust         = ctrl_out((/ 4, 4, 10, 10, 10 /),'loaddust')
393
394
395  type(ctrl_out),save :: o_swtoaas_nat      = ctrl_out((/ 4, 4, 10, 10, 10 /),'swtoaas_nat')
396  type(ctrl_out),save :: o_swsrfas_nat      = ctrl_out((/ 4, 4, 10, 10, 10 /),'swsrfas_nat')
397  type(ctrl_out),save :: o_swtoacs_nat      = ctrl_out((/ 4, 4, 10, 10, 10 /),'swtoacs_nat')
398  type(ctrl_out),save :: o_swsrfcs_nat      = ctrl_out((/ 4, 4, 10, 10, 10 /),'swsrfcs_nat')
399
400  type(ctrl_out),save :: o_swtoaas_ant      = ctrl_out((/ 4, 4, 10, 10, 10 /),'swtoaas_ant')
401  type(ctrl_out),save :: o_swsrfas_ant      = ctrl_out((/ 4, 4, 10, 10, 10 /),'swsrfas_ant')
402  type(ctrl_out),save :: o_swtoacs_ant      = ctrl_out((/ 4, 4, 10, 10, 10 /),'swtoacs_ant')
403  type(ctrl_out),save :: o_swsrfcs_ant      = ctrl_out((/ 4, 4, 10, 10, 10 /),'swsrfcs_ant')
404  type(ctrl_out),save :: o_swtoacf_nat      = ctrl_out((/ 4, 4, 10, 10, 10 /),'swtoacf_nat')
405  type(ctrl_out),save :: o_swsrfcf_nat      = ctrl_out((/ 4, 4, 10, 10, 10 /),'swsrfcf_nat')
406  type(ctrl_out),save :: o_swtoacf_ant      = ctrl_out((/ 4, 4, 10, 10, 10 /),'swtoacf_ant')
407  type(ctrl_out),save :: o_swsrfcf_ant      = ctrl_out((/ 4, 4, 10, 10, 10 /),'swsrfcf_ant')
408  type(ctrl_out),save :: o_swtoacf_zero     = ctrl_out((/ 4, 4, 10, 10, 10 /),'swtoacf_zero')
409  type(ctrl_out),save :: o_swsrfcf_zero     = ctrl_out((/ 4, 4, 10, 10, 10 /),'swsrfcf_zero')
410
411  type(ctrl_out),save :: o_cldncl          = ctrl_out((/ 4, 4, 10, 10, 10 /),'cldncl')
412  type(ctrl_out),save :: o_reffclwtop      = ctrl_out((/ 4, 4, 10, 10, 10 /),'reffclwtop')
413  type(ctrl_out),save :: o_cldnvi          = ctrl_out((/ 4, 4, 10, 10, 10 /),'cldnvi')
414  type(ctrl_out),save :: o_lcc             = ctrl_out((/ 4, 4, 10, 10, 10 /),'lcc')
415
416
417!!!!!!!!!!!!!!!!!!!!!! 3D !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
418  type(ctrl_out),save :: o_ec550aer     = ctrl_out((/ 4,  4, 10, 10, 1 /),'ec550aer')
419  type(ctrl_out),save :: o_lwcon        = ctrl_out((/ 2, 5, 10, 10, 1 /),'lwcon')
420  type(ctrl_out),save :: o_iwcon        = ctrl_out((/ 2, 5, 10, 10, 10 /),'iwcon')
421  type(ctrl_out),save :: o_temp         = ctrl_out((/ 2, 3, 4, 10, 1 /),'temp')
422  type(ctrl_out),save :: o_theta        = ctrl_out((/ 2, 3, 4, 10, 1 /),'theta')
423  type(ctrl_out),save :: o_ovap         = ctrl_out((/ 2, 3, 4, 10, 1 /),'ovap')
424  type(ctrl_out),save :: o_ovapinit         = ctrl_out((/ 2, 3, 10, 10, 1 /),'ovapinit')
425  type(ctrl_out),save :: o_wvapp        = ctrl_out((/ 2, 10, 10, 10, 10 /),'wvapp')
426  type(ctrl_out),save :: o_geop         = ctrl_out((/ 2, 3, 10, 10, 1 /),'geop')
427  type(ctrl_out),save :: o_vitu         = ctrl_out((/ 2, 3, 4, 5, 1 /),'vitu')
428  type(ctrl_out),save :: o_vitv         = ctrl_out((/ 2, 3, 4, 5, 1 /),'vitv')
429  type(ctrl_out),save :: o_vitw         = ctrl_out((/ 2, 3, 10, 5, 1 /),'vitw')
430  type(ctrl_out),save :: o_pres         = ctrl_out((/ 2, 3, 10, 10, 1 /),'pres')
431  type(ctrl_out),save :: o_paprs        = ctrl_out((/ 2, 3, 10, 10, 1 /),'paprs')
432  type(ctrl_out),save :: o_mass        = ctrl_out((/ 2, 3, 10, 10, 1 /),'mass')
433
434  type(ctrl_out),save :: o_rneb         = ctrl_out((/ 2, 5, 10, 10, 1 /),'rneb')
435  type(ctrl_out),save :: o_rnebcon      = ctrl_out((/ 2, 5, 10, 10, 1 /),'rnebcon')
436  type(ctrl_out),save :: o_rhum         = ctrl_out((/ 2, 5, 10, 10, 10 /),'rhum')
437  type(ctrl_out),save :: o_ozone        = ctrl_out((/ 2, 10, 10, 10, 10 /),'ozone')
438  type(ctrl_out),save :: o_ozone_light  = ctrl_out((/ 2, 10, 10, 10, 10 /),'ozone_daylight')
439  type(ctrl_out),save :: o_upwd         = ctrl_out((/ 2, 10, 10, 10, 10 /),'upwd')
440  type(ctrl_out),save :: o_dtphy        = ctrl_out((/ 2, 10, 10, 10, 10 /),'dtphy')
441  type(ctrl_out),save :: o_dqphy        = ctrl_out((/ 2, 10, 10, 10, 10 /),'dqphy')
442  type(ctrl_out),save :: o_pr_con_l     = ctrl_out((/ 2, 10, 10, 10, 10 /),'pr_con_l')
443  type(ctrl_out),save :: o_pr_con_i     = ctrl_out((/ 2, 10, 10, 10, 10 /),'pr_con_i')
444  type(ctrl_out),save :: o_pr_lsc_l     = ctrl_out((/ 2, 10, 10, 10, 10 /),'pr_lsc_l')
445  type(ctrl_out),save :: o_pr_lsc_i     = ctrl_out((/ 2, 10, 10, 10, 10 /),'pr_lsc_i')
446  type(ctrl_out),save :: o_re           = ctrl_out((/ 5, 10, 10, 10, 10 /),'re')
447  type(ctrl_out),save :: o_fl           = ctrl_out((/ 5, 10, 10, 10, 10 /),'fl')
448  type(ctrl_out),save :: o_scdnc        =ctrl_out((/ 4,  4, 10, 10, 1 /),'scdnc')
449  type(ctrl_out),save :: o_reffclws     =ctrl_out((/ 4,  4, 10, 10, 1 /),'reffclws')
450  type(ctrl_out),save :: o_reffclwc     =ctrl_out((/ 4,  4, 10, 10, 1 /),'reffclwc')
451  type(ctrl_out),save :: o_lcc3d        =ctrl_out((/ 4,  4, 10, 10, 1 /),'lcc3d')
452  type(ctrl_out),save :: o_lcc3dcon     =ctrl_out((/ 4,  4, 10, 10, 1 /),'lcc3dcon')
453  type(ctrl_out),save :: o_lcc3dstra    =ctrl_out((/ 4,  4, 10, 10, 1 /),'lcc3dstra')
454!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
455
456  type(ctrl_out),save,dimension(4) :: o_albe_srf     = (/ ctrl_out((/ 3, 4, 10, 1, 10 /),'albe_ter'), &
457                                                     ctrl_out((/ 3, 4, 10, 1, 10 /),'albe_lic'), &
458                                                     ctrl_out((/ 3, 4, 10, 1, 10 /),'albe_oce'), &
459                                                     ctrl_out((/ 3, 4, 10, 1, 10 /),'albe_sic') /)
460
461  type(ctrl_out),save,dimension(4) :: o_ages_srf     = (/ ctrl_out((/ 10, 10, 10, 10, 10 /),'ages_ter'), &
462                                                     ctrl_out((/ 3, 10, 10, 10, 10 /),'ages_lic'), &
463                                                     ctrl_out((/ 10, 10, 10, 10, 10 /),'ages_oce'), &
464                                                     ctrl_out((/ 3, 10, 10, 10, 10 /),'ages_sic') /)
465
466  type(ctrl_out),save,dimension(4) :: o_rugs_srf     = (/ ctrl_out((/ 3, 4, 10, 10, 10 /),'rugs_ter'), &
467                                                     ctrl_out((/ 3, 4, 10, 10, 10 /),'rugs_lic'), &
468                                                     ctrl_out((/ 3, 4, 10, 10, 10 /),'rugs_oce'), &
469                                                     ctrl_out((/ 3, 4, 10, 10, 10 /),'rugs_sic') /)
470
471  type(ctrl_out),save :: o_alb1         = ctrl_out((/ 3, 10, 10, 10, 10 /),'albs')
472  type(ctrl_out),save :: o_alb2       = ctrl_out((/ 3, 10, 10, 10, 10 /),'albslw')
473
474  type(ctrl_out),save :: o_clwcon       = ctrl_out((/ 4, 10, 10, 10, 10 /),'clwcon')
475  type(ctrl_out),save :: o_Ma           = ctrl_out((/ 4, 10, 10, 10, 10 /),'Ma')
476  type(ctrl_out),save :: o_dnwd         = ctrl_out((/ 4, 10, 10, 10, 10 /),'dnwd')
477  type(ctrl_out),save :: o_dnwd0        = ctrl_out((/ 4, 10, 10, 10, 10 /),'dnwd0')
478  type(ctrl_out),save :: o_mc           = ctrl_out((/ 4, 10, 10, 10, 10 /),'mc')
479  type(ctrl_out),save :: o_ftime_con    = ctrl_out((/ 4, 10, 10, 10, 10 /),'ftime_con')
480  type(ctrl_out),save :: o_dtdyn        = ctrl_out((/ 4, 10, 10, 10, 1 /),'dtdyn')
481  type(ctrl_out),save :: o_dqdyn        = ctrl_out((/ 4, 10, 10, 10, 1 /),'dqdyn')
482  type(ctrl_out),save :: o_dudyn        = ctrl_out((/ 4, 10, 10, 10, 1 /),'dudyn')  !AXC
483  type(ctrl_out),save :: o_dvdyn        = ctrl_out((/ 4, 10, 10, 10, 1 /),'dvdyn')  !AXC
484  type(ctrl_out),save :: o_dtcon        = ctrl_out((/ 4, 5, 10, 10, 10 /),'dtcon')
485  type(ctrl_out),save :: o_ducon        = ctrl_out((/ 4, 10, 10, 10, 10 /),'ducon')
486  type(ctrl_out),save :: o_dqcon        = ctrl_out((/ 4, 5, 10, 10, 10 /),'dqcon')
487  type(ctrl_out),save :: o_dtwak        = ctrl_out((/ 4, 5, 10, 10, 10 /),'dtwak')
488  type(ctrl_out),save :: o_dqwak        = ctrl_out((/ 4, 5, 10, 10, 10 /),'dqwak')
489  type(ctrl_out),save :: o_wake_h       = ctrl_out((/ 4, 5, 10, 10, 10 /),'wake_h')
490  type(ctrl_out),save :: o_wake_s       = ctrl_out((/ 4, 5, 10, 10, 10 /),'wake_s')
491  type(ctrl_out),save :: o_wake_deltat  = ctrl_out((/ 4, 5, 10, 10, 10 /),'wake_deltat')
492  type(ctrl_out),save :: o_wake_deltaq  = ctrl_out((/ 4, 5, 10, 10, 10 /),'wake_deltaq')
493  type(ctrl_out),save :: o_wake_omg     = ctrl_out((/ 4, 5, 10, 10, 10 /),'wake_omg')
494  type(ctrl_out),save :: o_Vprecip      = ctrl_out((/ 10, 10, 10, 10, 10 /),'Vprecip')
495  type(ctrl_out),save :: o_ftd          = ctrl_out((/ 4, 5, 10, 10, 10 /),'ftd')
496  type(ctrl_out),save :: o_fqd          = ctrl_out((/ 4, 5, 10, 10, 10 /),'fqd')
497  type(ctrl_out),save :: o_dtlsc        = ctrl_out((/ 4, 10, 10, 10, 10 /),'dtlsc')
498  type(ctrl_out),save :: o_dtlschr      = ctrl_out((/ 4, 10, 10, 10, 10 /),'dtlschr')
499  type(ctrl_out),save :: o_dqlsc        = ctrl_out((/ 4, 10, 10, 10, 10 /),'dqlsc')
500  type(ctrl_out),save :: o_dtvdf        = ctrl_out((/ 4, 10, 10, 10, 10 /),'dtvdf')
501  type(ctrl_out),save :: o_dqvdf        = ctrl_out((/ 4, 10, 10, 10, 10 /),'dqvdf')
502  type(ctrl_out),save :: o_dteva        = ctrl_out((/ 4, 10, 10, 10, 10 /),'dteva')
503  type(ctrl_out),save :: o_dqeva        = ctrl_out((/ 4, 10, 10, 10, 10 /),'dqeva')
504
505!!!!!!!!!!!!!!!! Specifique thermiques
506  type(ctrl_out),save :: o_dqlscth        = ctrl_out((/ 10, 10, 10, 10, 10 /),'dqlscth')
507  type(ctrl_out),save :: o_dqlscst        = ctrl_out((/ 10, 10, 10, 10, 10 /),'dqlscst')
508  type(ctrl_out),save :: o_dtlscth        = ctrl_out((/ 10, 10, 10, 10, 10 /),'dtlscth')
509  type(ctrl_out),save :: o_dtlscst        = ctrl_out((/ 10, 10, 10, 10, 10 /),'dtlscst')
510  type(ctrl_out),save :: o_plulth        = ctrl_out((/ 10, 10, 10, 10, 10 /),'plulth')
511  type(ctrl_out),save :: o_plulst        = ctrl_out((/ 10, 10, 10, 10, 10 /),'plulst')
512  type(ctrl_out),save :: o_lmaxth        = ctrl_out((/ 10, 10, 10, 10, 10 /),'lmaxth')
513  type(ctrl_out),save :: o_ptconvth        = ctrl_out((/ 10, 10, 10, 10, 10 /),'ptconvth')
514!!!!!!!!!!!!!!!!!!!!!!!!
515
516
517  type(ctrl_out),save :: o_ptconv       = ctrl_out((/ 4, 10, 10, 10, 10 /),'ptconv')
518  type(ctrl_out),save :: o_ratqs        = ctrl_out((/ 4, 10, 10, 10, 10 /),'ratqs')
519  type(ctrl_out),save :: o_dtthe        = ctrl_out((/ 4, 10, 10, 10, 10 /),'dtthe')
520  type(ctrl_out),save :: o_f_th         = ctrl_out((/ 4, 10, 10, 10, 10 /),'f_th')
521  type(ctrl_out),save :: o_e_th         = ctrl_out((/ 4, 10, 10, 10, 10 /),'e_th')
522  type(ctrl_out),save :: o_w_th         = ctrl_out((/ 4, 10, 10, 10, 10 /),'w_th')
523  type(ctrl_out),save :: o_lambda_th    = ctrl_out((/ 10, 10, 10, 10, 10 /),'lambda_th')
524  type(ctrl_out),save :: o_ftime_th     = ctrl_out((/ 10, 10, 10, 10, 10 /),'ftime_th')
525  type(ctrl_out),save :: o_q_th         = ctrl_out((/ 4, 10, 10, 10, 10 /),'q_th')
526  type(ctrl_out),save :: o_a_th         = ctrl_out((/ 4, 10, 10, 10, 10 /),'a_th')
527  type(ctrl_out),save :: o_d_th         = ctrl_out((/ 4, 10, 10, 10, 10 /),'d_th')
528  type(ctrl_out),save :: o_f0_th        = ctrl_out((/ 4, 10, 10, 10, 10 /),'f0_th')
529  type(ctrl_out),save :: o_zmax_th      = ctrl_out((/ 4, 10, 10, 10, 10 /),'zmax_th')
530  type(ctrl_out),save :: o_dqthe        = ctrl_out((/ 4, 10, 10, 10, 10 /),'dqthe')
531  type(ctrl_out),save :: o_dtajs        = ctrl_out((/ 4, 10, 10, 10, 10 /),'dtajs')
532  type(ctrl_out),save :: o_dqajs        = ctrl_out((/ 4, 10, 10, 10, 10 /),'dqajs')
533  type(ctrl_out),save :: o_dtswr        = ctrl_out((/ 4, 10, 10, 10, 10 /),'dtswr')
534  type(ctrl_out),save :: o_dtsw0        = ctrl_out((/ 4, 10, 10, 10, 10 /),'dtsw0')
535  type(ctrl_out),save :: o_dtlwr        = ctrl_out((/ 4, 10, 10, 10, 10 /),'dtlwr')
536  type(ctrl_out),save :: o_dtlw0        = ctrl_out((/ 4, 10, 10, 10, 10 /),'dtlw0')
537  type(ctrl_out),save :: o_dtec         = ctrl_out((/ 4, 10, 10, 10, 10 /),'dtec')
538  type(ctrl_out),save :: o_duvdf        = ctrl_out((/ 4, 10, 10, 10, 10 /),'duvdf')
539  type(ctrl_out),save :: o_dvvdf        = ctrl_out((/ 4, 10, 10, 10, 10 /),'dvvdf')
540  type(ctrl_out),save :: o_duoro        = ctrl_out((/ 4, 10, 10, 10, 10 /),'duoro')
541  type(ctrl_out),save :: o_dvoro        = ctrl_out((/ 4, 10, 10, 10, 10 /),'dvoro')
542  type(ctrl_out),save :: o_dulif        = ctrl_out((/ 4, 10, 10, 10, 10 /),'dulif')
543  type(ctrl_out),save :: o_dvlif        = ctrl_out((/ 4, 10, 10, 10, 10 /),'dvlif')
544  type(ctrl_out),save,allocatable :: o_trac(:)
545    CONTAINS
546
547!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
548!!!!!!!!! Ouverture des fichier et definition des variable de sortie !!!!!!!!
549!! histbeg, histvert et histdef
550!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
551 
552  SUBROUTINE phys_output_open(jjmp1,nlevSTD,clevSTD,nbteta, &
553       ctetaSTD,dtime, ok_veget, &
554       type_ocean, iflag_pbl,ok_mensuel,ok_journe, &
555       ok_hf,ok_instan,ok_LES,ok_ade,ok_aie, read_climoz, &
556       new_aod, aerosol_couple)   
557
558
559  USE iophy
560  USE dimphy
561  USE infotrac
562  USE ioipsl
563  USE mod_phys_lmdz_para
564  USE aero_mod, only : naero_spc,name_aero
565
566  IMPLICIT NONE
567  include "dimensions.h"
568  include "temps.h"
569  include "indicesol.h"
570  include "clesphys.h"
571  include "thermcell.h"
572  include "comvert.h"
573
574  integer                               :: jjmp1
575  integer                               :: nbteta, nlevSTD, radpas
576  logical                               :: ok_mensuel, ok_journe, ok_hf, ok_instan
577  logical                               :: ok_LES,ok_ade,ok_aie
578  logical                               :: new_aod, aerosol_couple
579  integer, intent(in)::  read_climoz ! read ozone climatology
580  !     Allowed values are 0, 1 and 2
581  !     0: do not read an ozone climatology
582  !     1: read a single ozone climatology that will be used day and night
583  !     2: read two ozone climatologies, the average day and night
584  !     climatology and the daylight climatology
585
586  real                                  :: dtime
587  integer                               :: idayref
588  real                                  :: zjulian
589  real, dimension(klev)                 :: Ahyb, Bhyb, Alt
590  character(len=4), dimension(nlevSTD)  :: clevSTD
591  integer                               :: nsrf, k, iq, iiq, iff, i, j, ilev
592  integer                               :: naero
593  logical                               :: ok_veget
594  integer                               :: iflag_pbl
595  CHARACTER(len=4)                      :: bb2
596  CHARACTER(len=2)                      :: bb3
597  character(len=6)                      :: type_ocean
598  CHARACTER(len=3)                      :: ctetaSTD(nbteta)
599  real, dimension(nfiles)               :: ecrit_files
600  CHARACTER(len=20), dimension(nfiles)  :: phys_out_filenames
601  INTEGER, dimension(iim*jjmp1)         ::  ndex2d
602  INTEGER, dimension(iim*jjmp1*klev)    :: ndex3d
603  integer                               :: imin_ins, imax_ins
604  integer                               :: jmin_ins, jmax_ins
605  integer, dimension(nfiles)            :: phys_out_levmin, phys_out_levmax
606  integer, dimension(nfiles)            :: phys_out_filelevels
607  CHARACTER(len=20), dimension(nfiles)  :: type_ecri_files, phys_out_filetypes
608  character(len=20), dimension(nfiles)  :: chtimestep   = (/ 'DefFreq', 'DefFreq','DefFreq', 'DefFreq', 'DefFreq' /)
609  logical, dimension(nfiles)            :: phys_out_filekeys
610
611!!!!!!!!!! stockage dans une region limitee pour chaque fichier !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
612!                 entre [phys_out_lonmin,phys_out_lonmax] et [phys_out_latmin,phys_out_latmax]
613
614  logical, dimension(nfiles), save  :: phys_out_regfkey       = (/ .false., .false., .false., .false., .false. /)
615  real, dimension(nfiles), save     :: phys_out_lonmin        = (/ -180., -180., -180., -180., -180. /)
616  real, dimension(nfiles), save     :: phys_out_lonmax        = (/ 180., 180., 180., 180., 180. /)
617  real, dimension(nfiles), save     :: phys_out_latmin        = (/ -90., -90., -90., -90., -90. /)
618  real, dimension(nfiles), save     :: phys_out_latmax        = (/ 90., 90., 90., 90., 90. /)
619
620!IM definition dynamique flag o_trac pour sortie traceurs
621  INTEGER :: nq
622  CHARACTER(len=8) :: solsym(nqtot)
623
624   print*,'Debut phys_output_mod.F90'
625! Initialisations (Valeurs par defaut
626
627   if (.not. allocated(o_trac)) ALLOCATE(o_trac(nqtot))
628
629   levmax = (/ klev, klev, klev, klev, klev /)
630
631   phys_out_filenames(1) = 'histmth'
632   phys_out_filenames(2) = 'histday'
633   phys_out_filenames(3) = 'histhf'
634   phys_out_filenames(4) = 'histins'
635   phys_out_filenames(5) = 'histLES'
636
637   type_ecri(1) = 'ave(X)'
638   type_ecri(2) = 'ave(X)'
639   type_ecri(3) = 'ave(X)'
640   type_ecri(4) = 'inst(X)'
641   type_ecri(5) = 'ave(X)'
642
643   clef_files(1) = ok_mensuel
644   clef_files(2) = ok_journe
645   clef_files(3) = ok_hf
646   clef_files(4) = ok_instan
647   clef_files(5) = ok_LES
648
649   lev_files(1) = lev_histmth
650   lev_files(2) = lev_histday
651   lev_files(3) = lev_histhf
652   lev_files(4) = lev_histins
653   lev_files(5) = lev_histLES
654
655
656   ecrit_files(1) = ecrit_mth
657   ecrit_files(2) = ecrit_day
658   ecrit_files(3) = ecrit_hf
659   ecrit_files(4) = ecrit_ins
660   ecrit_files(5) = ecrit_LES
661 
662!! Lectures des parametres de sorties dans physiq.def
663
664   call getin('phys_out_regfkey',phys_out_regfkey)
665   call getin('phys_out_lonmin',phys_out_lonmin)
666   call getin('phys_out_lonmax',phys_out_lonmax)
667   call getin('phys_out_latmin',phys_out_latmin)
668   call getin('phys_out_latmax',phys_out_latmax)
669     phys_out_levmin(:)=levmin(:)
670   call getin('phys_out_levmin',levmin)
671     phys_out_levmax(:)=levmax(:)
672   call getin('phys_out_levmax',levmax)
673   call getin('phys_out_filenames',phys_out_filenames)
674     phys_out_filekeys(:)=clef_files(:)
675   call getin('phys_out_filekeys',clef_files)
676     phys_out_filelevels(:)=lev_files(:)
677   call getin('phys_out_filelevels',lev_files)
678   call getin('phys_out_filetimesteps',chtimestep)
679     phys_out_filetypes(:)=type_ecri(:)
680   call getin('phys_out_filetypes',type_ecri)
681
682   type_ecri_files(:)=type_ecri(:)
683
684   print*,'phys_out_lonmin=',phys_out_lonmin
685   print*,'phys_out_lonmax=',phys_out_lonmax
686   print*,'phys_out_latmin=',phys_out_latmin
687   print*,'phys_out_latmax=',phys_out_latmax
688   print*,'phys_out_filenames=',phys_out_filenames
689   print*,'phys_out_filetypes=',type_ecri
690   print*,'phys_out_filekeys=',clef_files
691   print*,'phys_out_filelevels=',lev_files
692
693!!!!!!!!!!!!!!!!!!!!!!! Boucle sur les fichiers !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
694! Appel de histbeg et histvert pour creer le fichier et les niveaux verticaux !!
695! Appel des histbeg pour definir les variables (nom, moy ou inst, freq de sortie ..
696!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
697
698 zdtime = dtime         ! Frequence ou l on moyenne
699
700! Calcul des Ahyb, Bhyb et Alt
701         do k=1,klev
702          Ahyb(k)=(ap(k)+ap(k+1))/2.
703          Bhyb(k)=(bp(k)+bp(k+1))/2.
704          Alt(k)=log(preff/presnivs(k))*8.
705         enddo
706!          if(prt_level.ge.1) then
707           print*,'Ap Hybrid = ',Ahyb(1:klev)
708           print*,'Bp Hybrid = ',Bhyb(1:klev)
709           print*,'Alt approx des couches pour une haut d echelle de 8km = ',Alt(1:klev)
710!          endif
711 DO iff=1,nfiles
712
713    IF (clef_files(iff)) THEN
714
715      if ( chtimestep(iff).eq.'DefFreq' ) then
716! Par defaut ecrit_files = (ecrit_mensuel ecrit_jour ecrit_hf ...)*86400.
717        ecrit_files(iff)=ecrit_files(iff)*86400.
718      else
719        call convers_timesteps(chtimestep(iff),ecrit_files(iff))
720      endif
721       print*,'ecrit_files(',iff,')= ',ecrit_files(iff)
722
723      zoutm(iff) = ecrit_files(iff) ! Frequence ou l on ecrit en seconde
724
725      idayref = day_ref
726      CALL ymds2ju(annee_ref, 1, idayref, 0.0, zjulian)
727
728!!!!!!!!!!!!!!!!! Traitement dans le cas ou l'on veut stocker sur un domaine limite !!
729!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
730     if (phys_out_regfkey(iff)) then
731
732        imin_ins=1
733        imax_ins=iim
734        jmin_ins=1
735        jmax_ins=jjmp1
736
737! correction abderr       
738        do i=1,iim
739           print*,'io_lon(i)=',io_lon(i)
740           if (io_lon(i).le.phys_out_lonmin(iff)) imin_ins=i
741           if (io_lon(i).le.phys_out_lonmax(iff)) imax_ins=i+1
742        enddo
743
744        do j=1,jjmp1
745            print*,'io_lat(j)=',io_lat(j)
746            if (io_lat(j).ge.phys_out_latmin(iff)) jmax_ins=j+1
747            if (io_lat(j).ge.phys_out_latmax(iff)) jmin_ins=j
748        enddo
749
750        print*,'On stoke le fichier histoire numero ',iff,' sur ', &
751         imin_ins,imax_ins,jmin_ins,jmax_ins
752         print*,'longitudes : ', &
753         io_lon(imin_ins),io_lon(imax_ins), &
754         'latitudes : ', &
755         io_lat(jmax_ins),io_lat(jmin_ins)
756
757 CALL histbeg(phys_out_filenames(iff),iim,io_lon,jjmp1,io_lat, &
758              imin_ins,imax_ins-imin_ins+1, &
759              jmin_ins,jmax_ins-jmin_ins+1, &
760              itau_phy,zjulian,dtime,nhorim(iff),nid_files(iff))
761!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
762       else
763 CALL histbeg_phy(phys_out_filenames(iff),itau_phy,zjulian,dtime,nhorim(iff),nid_files(iff))
764       endif
765 
766      CALL histvert(nid_files(iff), "presnivs", "Vertical levels", "Pa", &
767           levmax(iff) - levmin(iff) + 1, &
768           presnivs(levmin(iff):levmax(iff)), nvertm(iff),"down")
769
770!!!!!!!!!!!!! Traitement des champs 3D pour histhf !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
771!!!!!!!!!!!!!!! A Revoir plus tard !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
772!          IF (iff.eq.3.and.lev_files(iff).ge.4) THEN
773!          CALL histbeg_phy("histhf3d",itau_phy, &
774!     &                     zjulian, dtime, &
775!     &                     nhorim, nid_hf3d)
776
777!         CALL histvert(nid_hf3d, "presnivs", &
778!     &                 "Vertical levels", "mb", &
779!     &                 klev, presnivs/100., nvertm)
780!          ENDIF
781!
782!!!! Composentes de la coordonnee sigma-hybride
783   CALL histvert(nid_files(iff), "Ahyb","Ahyb comp of Hyb Cord ", "Pa", &
784                 levmax(iff) - levmin(iff) + 1,Ahyb,nvertap(iff))
785
786   CALL histvert(nid_files(iff), "Bhyb","Bhyb comp of Hyb Cord", " ", &
787                 levmax(iff) - levmin(iff) + 1,Bhyb,nvertbp(iff))
788
789   CALL histvert(nid_files(iff), "Alt","Height approx for scale heigh of 8km at levels", "Km", &
790                 levmax(iff) - levmin(iff) + 1,Alt,nvertAlt(iff))
791
792!   CALL histvert(nid_files(iff), "preff","Reference pressure", "Pa", &
793!                 1,preff,nvertp0(iff))
794!!! Champs 1D !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
795 CALL histdef2d(iff,o_phis%flag,o_phis%name,"Surface geop.height", "m2/s2")
796   type_ecri(1) = 'once'
797   type_ecri(2) = 'once'
798   type_ecri(3) = 'once'
799   type_ecri(4) = 'once'
800   type_ecri(5) = 'once'
801 CALL histdef2d(iff,o_aire%flag,o_aire%name,"Grid area", "-")
802 CALL histdef2d(iff,o_contfracATM%flag,o_contfracATM%name,"% sfce ter+lic", "-")
803   type_ecri(:) = type_ecri_files(:)
804
805!!! Champs 2D !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
806 CALL histdef2d(iff,o_contfracOR%flag,o_contfracOR%name,"% sfce terre OR", "-" )
807 CALL histdef2d(iff,o_aireTER%flag,o_aireTER%name,"Grid area CONT", "-" )
808 CALL histdef2d(iff,o_flat%flag,o_flat%name, "Latent heat flux", "W/m2")
809 CALL histdef2d(iff,o_slp%flag,o_slp%name, "Sea Level Pressure", "Pa" )
810 CALL histdef2d(iff,o_tsol%flag,o_tsol%name, "Surface Temperature", "K")
811 CALL histdef2d(iff,o_t2m%flag,o_t2m%name, "Temperature 2m", "K" )
812   type_ecri(1) = 't_min(X)'
813   type_ecri(2) = 't_min(X)'
814   type_ecri(3) = 't_min(X)'
815   type_ecri(4) = 't_min(X)'
816   type_ecri(5) = 't_min(X)'
817 CALL histdef2d(iff,o_t2m_min%flag,o_t2m_min%name, "Temp 2m min", "K" )
818   type_ecri(1) = 't_max(X)'
819   type_ecri(2) = 't_max(X)'
820   type_ecri(3) = 't_max(X)'
821   type_ecri(4) = 't_max(X)'
822   type_ecri(5) = 't_max(X)'
823 CALL histdef2d(iff,o_t2m_max%flag,o_t2m_max%name, "Temp 2m max", "K" )
824   type_ecri(:) = type_ecri_files(:)
825 CALL histdef2d(iff,o_wind10m%flag,o_wind10m%name, "10-m wind speed", "m/s")
826 CALL histdef2d(iff,o_wind10max%flag,o_wind10max%name, "10m wind speed max", "m/s")
827 CALL histdef2d(iff,o_sicf%flag,o_sicf%name, "Sea-ice fraction", "-" )
828 CALL histdef2d(iff,o_q2m%flag,o_q2m%name, "Specific humidity 2m", "kg/kg")
829 CALL histdef2d(iff,o_u10m%flag,o_u10m%name, "Vent zonal 10m", "m/s" )
830 CALL histdef2d(iff,o_v10m%flag,o_v10m%name, "Vent meridien 10m", "m/s")
831 CALL histdef2d(iff,o_psol%flag,o_psol%name, "Surface Pressure", "Pa" )
832 CALL histdef2d(iff,o_qsurf%flag,o_qsurf%name, "Surface Air humidity", "kg/kg")
833
834  if (.not. ok_veget) then
835 CALL histdef2d(iff,o_qsol%flag,o_qsol%name, "Soil watter content", "mm" )
836  endif
837
838 CALL histdef2d(iff,o_ndayrain%flag,o_ndayrain%name, "Number of dayrain(liq+sol)", "-")
839 CALL histdef2d(iff,o_precip%flag,o_precip%name, "Precip Totale liq+sol", "kg/(s*m2)" )
840 CALL histdef2d(iff,o_plul%flag,o_plul%name, "Large-scale Precip.", "kg/(s*m2)")
841 CALL histdef2d(iff,o_pluc%flag,o_pluc%name, "Convective Precip.", "kg/(s*m2)")
842 CALL histdef2d(iff,o_snow%flag,o_snow%name, "Snow fall", "kg/(s*m2)" )
843 CALL histdef2d(iff,o_msnow%flag,o_msnow%name, "Surface snow amount", "kg/m2" )
844 CALL histdef2d(iff,o_fsnow%flag,o_fsnow%name, "Surface snow area fraction", "-" )
845 CALL histdef2d(iff,o_evap%flag,o_evap%name, "Evaporat", "kg/(s*m2)" )
846 CALL histdef2d(iff,o_tops%flag,o_tops%name, "Solar rad. at TOA", "W/m2")
847 CALL histdef2d(iff,o_tops0%flag,o_tops0%name, "CS Solar rad. at TOA", "W/m2")
848 CALL histdef2d(iff,o_topl%flag,o_topl%name, "IR rad. at TOA", "W/m2" )
849 CALL histdef2d(iff,o_topl0%flag,o_topl0%name, "IR rad. at TOA", "W/m2")
850 CALL histdef2d(iff,o_SWupTOA%flag,o_SWupTOA%name, "SWup at TOA", "W/m2")
851 CALL histdef2d(iff,o_SWupTOAclr%flag,o_SWupTOAclr%name, "SWup clear sky at TOA", "W/m2")
852 CALL histdef2d(iff,o_SWdnTOA%flag,o_SWdnTOA%name, "SWdn at TOA", "W/m2" )
853 CALL histdef2d(iff,o_SWdnTOAclr%flag,o_SWdnTOAclr%name, "SWdn clear sky at TOA", "W/m2")
854 CALL histdef2d(iff,o_nettop%flag,o_nettop%name, "Net dn radiatif flux at TOA", "W/m2")
855 CALL histdef2d(iff,o_SWup200%flag,o_SWup200%name, "SWup at 200mb", "W/m2" )
856 CALL histdef2d(iff,o_SWup200clr%flag,o_SWup200clr%name, "SWup clear sky at 200mb", "W/m2")
857 CALL histdef2d(iff,o_SWdn200%flag,o_SWdn200%name, "SWdn at 200mb", "W/m2" )
858 CALL histdef2d(iff,o_SWdn200clr%flag,o_SWdn200clr%name, "SWdn clear sky at 200mb", "W/m2")
859 CALL histdef2d(iff,o_LWup200%flag,o_LWup200%name, "LWup at 200mb", "W/m2")
860 CALL histdef2d(iff,o_LWup200clr%flag,o_LWup200clr%name, "LWup clear sky at 200mb", "W/m2")
861 CALL histdef2d(iff,o_LWdn200%flag,o_LWdn200%name, "LWdn at 200mb", "W/m2")
862 CALL histdef2d(iff,o_LWdn200clr%flag,o_LWdn200clr%name, "LWdn clear sky at 200mb", "W/m2")
863 CALL histdef2d(iff,o_sols%flag,o_sols%name, "Solar rad. at surf.", "W/m2")
864 CALL histdef2d(iff,o_sols0%flag,o_sols0%name, "Solar rad. at surf.", "W/m2")
865 CALL histdef2d(iff,o_soll%flag,o_soll%name, "IR rad. at surface", "W/m2") 
866 CALL histdef2d(iff,o_radsol%flag,o_radsol%name, "Rayonnement au sol", "W/m2")
867 CALL histdef2d(iff,o_soll0%flag,o_soll0%name, "IR rad. at surface", "W/m2")
868 CALL histdef2d(iff,o_SWupSFC%flag,o_SWupSFC%name, "SWup at surface", "W/m2")
869 CALL histdef2d(iff,o_SWupSFCclr%flag,o_SWupSFCclr%name, "SWup clear sky at surface", "W/m2")
870 CALL histdef2d(iff,o_SWdnSFC%flag,o_SWdnSFC%name, "SWdn at surface", "W/m2")
871 CALL histdef2d(iff,o_SWdnSFCclr%flag,o_SWdnSFCclr%name, "SWdn clear sky at surface", "W/m2")
872 CALL histdef2d(iff,o_LWupSFC%flag,o_LWupSFC%name, "Upwd. IR rad. at surface", "W/m2")
873 CALL histdef2d(iff,o_LWdnSFC%flag,o_LWdnSFC%name, "Down. IR rad. at surface", "W/m2")
874 CALL histdef2d(iff,o_LWupSFCclr%flag,o_LWupSFCclr%name, "CS Upwd. IR rad. at surface", "W/m2")
875 CALL histdef2d(iff,o_LWdnSFCclr%flag,o_LWdnSFCclr%name, "Down. CS IR rad. at surface", "W/m2")
876 CALL histdef2d(iff,o_bils%flag,o_bils%name, "Surf. total heat flux", "W/m2")
877 CALL histdef2d(iff,o_sens%flag,o_sens%name, "Sensible heat flux", "W/m2")
878 CALL histdef2d(iff,o_fder%flag,o_fder%name, "Heat flux derivation", "W/m2")
879 CALL histdef2d(iff,o_ffonte%flag,o_ffonte%name, "Thermal flux for snow melting", "W/m2")
880 CALL histdef2d(iff,o_fqcalving%flag,o_fqcalving%name, "Ice Calving", "kg/m2/s")
881 CALL histdef2d(iff,o_fqfonte%flag,o_fqfonte%name, "Land ice melt", "kg/m2/s")
882
883 CALL histdef2d(iff,o_taux%flag,o_taux%name, "Zonal wind stress","Pa")
884 CALL histdef2d(iff,o_tauy%flag,o_tauy%name, "Meridional wind stress","Pa")
885
886     DO nsrf = 1, nbsrf
887 CALL histdef2d(iff,o_pourc_srf(nsrf)%flag,o_pourc_srf(nsrf)%name,"% "//clnsurf(nsrf),"%")
888 CALL histdef2d(iff,o_fract_srf(nsrf)%flag,o_fract_srf(nsrf)%name,"Fraction "//clnsurf(nsrf),"1")
889 CALL histdef2d(iff,o_taux_srf(nsrf)%flag,o_taux_srf(nsrf)%name,"Zonal wind stress"//clnsurf(nsrf),"Pa")
890 CALL histdef2d(iff,o_tauy_srf(nsrf)%flag,o_tauy_srf(nsrf)%name,"Meridional wind stress "//clnsurf(nsrf),"Pa")
891 CALL histdef2d(iff,o_tsol_srf(nsrf)%flag,o_tsol_srf(nsrf)%name,"Temperature "//clnsurf(nsrf),"K")
892 CALL histdef2d(iff,o_u10m_srf(nsrf)%flag,o_u10m_srf(nsrf)%name,"Vent Zonal 10m "//clnsurf(nsrf),"m/s")
893 CALL histdef2d(iff,o_evap_srf(nsrf)%flag,o_evap_srf(nsrf)%name,"evaporation at surface "//clnsurf(nsrf),"kg/(s*m2)")
894 CALL histdef2d(iff,o_v10m_srf(nsrf)%flag,o_v10m_srf(nsrf)%name,"Vent meredien 10m "//clnsurf(nsrf),"m/s")
895 CALL histdef2d(iff,o_t2m_srf(nsrf)%flag,o_t2m_srf(nsrf)%name,"Temp 2m "//clnsurf(nsrf),"K")
896 CALL histdef2d(iff,o_sens_srf(nsrf)%flag,o_sens_srf(nsrf)%name,"Sensible heat flux "//clnsurf(nsrf),"W/m2")
897 CALL histdef2d(iff,o_lat_srf(nsrf)%flag,o_lat_srf(nsrf)%name,"Latent heat flux "//clnsurf(nsrf),"W/m2")
898 CALL histdef2d(iff,o_flw_srf(nsrf)%flag,o_flw_srf(nsrf)%name,"LW "//clnsurf(nsrf),"W/m2")
899 CALL histdef2d(iff,o_fsw_srf(nsrf)%flag,o_fsw_srf(nsrf)%name,"SW "//clnsurf(nsrf),"W/m2")
900 CALL histdef2d(iff,o_wbils_srf(nsrf)%flag,o_wbils_srf(nsrf)%name,"Bilan sol "//clnsurf(nsrf),"W/m2" )
901 CALL histdef2d(iff,o_wbilo_srf(nsrf)%flag,o_wbilo_srf(nsrf)%name,"Bilan eau "//clnsurf(nsrf),"kg/(m2*s)")
902  if (iflag_pbl>1 .and. lev_files(iff).gt.10 ) then
903 CALL histdef2d(iff,o_tke_srf(nsrf)%flag,o_tke_srf(nsrf)%name,"Max Turb. Kinetic Energy "//clnsurf(nsrf),"-")
904   type_ecri(1) = 't_max(X)'
905   type_ecri(2) = 't_max(X)'
906   type_ecri(3) = 't_max(X)'
907   type_ecri(4) = 't_max(X)'
908   type_ecri(5) = 't_max(X)'
909 CALL histdef2d(iff,o_tke_max_srf(nsrf)%flag,o_tke_max_srf(nsrf)%name,"Max Turb. Kinetic Energy "//clnsurf(nsrf),"-")
910   type_ecri(:) = type_ecri_files(:)
911  endif
912 CALL histdef2d(iff,o_albe_srf(nsrf)%flag,o_albe_srf(nsrf)%name,"Albedo VIS surf. "//clnsurf(nsrf),"-")
913 CALL histdef2d(iff,o_rugs_srf(nsrf)%flag,o_rugs_srf(nsrf)%name,"Surface roughness "//clnsurf(nsrf),"m")
914 CALL histdef2d(iff,o_ages_srf(nsrf)%flag,o_ages_srf(nsrf)%name,"Snow age", "day")
915END DO
916
917IF (new_aod .AND. (.NOT. aerosol_couple)) THEN
918 IF (ok_ade.OR.ok_aie) THEN
919
920  CALL histdef2d(iff,o_od550aer%flag,o_od550aer%name, "Total aerosol optical depth at 550nm", "-")
921  CALL histdef2d(iff,o_od865aer%flag,o_od865aer%name, "Total aerosol optical depth at 870nm", "-")
922  CALL histdef2d(iff,o_absvisaer%flag,o_absvisaer%name, "Absorption aerosol visible optical depth", "-")
923  CALL histdef2d(iff,o_od550lt1aer%flag,o_od550lt1aer%name, "Fine mode optical depth", "-")
924  CALL histdef2d(iff,o_sconcso4%flag,o_sconcso4%name,"Surface Concentration of Sulfate ","kg/m3")
925  CALL histdef2d(iff,o_sconcoa%flag,o_sconcoa%name,"Surface Concentration of Organic Aerosol ","kg/m3")
926  CALL histdef2d(iff,o_sconcbc%flag,o_sconcbc%name,"Surface Concentration of Black Carbon ","kg/m3")
927  CALL histdef2d(iff,o_sconcss%flag,o_sconcss%name,"Surface Concentration of Sea Salt ","kg/m3")
928  CALL histdef2d(iff,o_sconcdust%flag,o_sconcdust%name,"Surface Concentration of Dust ","kg/m3")
929  CALL histdef3d(iff,o_concso4%flag,o_concso4%name,"Concentration of Sulfate ","kg/m3")
930  CALL histdef3d(iff,o_concoa%flag,o_concoa%name,"Concentration of Organic Aerosol ","kg/m3")
931  CALL histdef3d(iff,o_concbc%flag,o_concbc%name,"Concentration of Black Carbon ","kg/m3")
932  CALL histdef3d(iff,o_concss%flag,o_concss%name,"Concentration of Sea Salt ","kg/m3")
933  CALL histdef3d(iff,o_concdust%flag,o_concdust%name,"Concentration of Dust ","kg/m3")
934  CALL histdef2d(iff,o_loadso4%flag,o_loadso4%name,"Column Load of Sulfate ","kg/m2")
935  CALL histdef2d(iff,o_loadoa%flag,o_loadoa%name,"Column Load of Organic Aerosol ","kg/m2")
936  CALL histdef2d(iff,o_loadbc%flag,o_loadbc%name,"Column Load of Black Carbon ","kg/m2")
937  CALL histdef2d(iff,o_loadss%flag,o_loadss%name,"Column Load of Sea Salt ","kg/m2")
938  CALL histdef2d(iff,o_loaddust%flag,o_loaddust%name,"Column Load of Dust ","kg/m2")
939
940  DO naero = 1, naero_spc
941  CALL histdef2d(iff,o_tausumaero(naero)%flag,o_tausumaero(naero)%name,"Aerosol Optical depth at 550 nm "//name_aero(naero),"1")
942  END DO
943 ENDIF
944ENDIF
945
946 IF (ok_ade) THEN
947  CALL histdef2d(iff,o_topswad%flag,o_topswad%name, "ADE at TOA", "W/m2")
948  CALL histdef2d(iff,o_solswad%flag,o_solswad%name, "ADE at SRF", "W/m2")
949
950 CALL histdef2d(iff,o_swtoaas_nat%flag,o_swtoaas_nat%name, "Natural aerosol radiative forcing all-sky at TOA", "W/m2")
951 CALL histdef2d(iff,o_swsrfas_nat%flag,o_swsrfas_nat%name, "Natural aerosol radiative forcing all-sky at SRF", "W/m2")
952 CALL histdef2d(iff,o_swtoacs_nat%flag,o_swtoacs_nat%name, "Natural aerosol radiative forcing clear-sky at TOA", "W/m2")
953 CALL histdef2d(iff,o_swsrfcs_nat%flag,o_swsrfcs_nat%name, "Natural aerosol radiative forcing clear-sky at SRF", "W/m2")
954
955 CALL histdef2d(iff,o_swtoaas_ant%flag,o_swtoaas_ant%name, "Anthropogenic aerosol radiative forcing all-sky at TOA", "W/m2")
956 CALL histdef2d(iff,o_swsrfas_ant%flag,o_swsrfas_ant%name, "Anthropogenic aerosol radiative forcing all-sky at SRF", "W/m2")
957 CALL histdef2d(iff,o_swtoacs_ant%flag,o_swtoacs_ant%name, "Anthropogenic aerosol radiative forcing clear-sky at TOA", "W/m2")
958 CALL histdef2d(iff,o_swsrfcs_ant%flag,o_swsrfcs_ant%name, "Anthropogenic aerosol radiative forcing clear-sky at SRF", "W/m2")
959
960 IF (.NOT. aerosol_couple) THEN
961 CALL histdef2d(iff,o_swtoacf_nat%flag,o_swtoacf_nat%name, "Natural aerosol impact on cloud radiative forcing at TOA", "W/m2")
962 CALL histdef2d(iff,o_swsrfcf_nat%flag,o_swsrfcf_nat%name, "Natural aerosol impact on cloud radiative forcing  at SRF", "W/m2")
963 CALL histdef2d(iff,o_swtoacf_ant%flag,o_swtoacf_ant%name, "Anthropogenic aerosol impact on cloud radiative forcing at TOA", "W/m2")
964 CALL histdef2d(iff,o_swsrfcf_ant%flag,o_swsrfcf_ant%name, "Anthropogenic aerosol impact on cloud radiative forcing at SRF", "W/m2")
965 CALL histdef2d(iff,o_swtoacf_zero%flag,o_swtoacf_zero%name, "Cloud radiative forcing (allsky-clearsky fluxes) at TOA", "W/m2")
966 CALL histdef2d(iff,o_swsrfcf_zero%flag,o_swsrfcf_zero%name, "Cloud radiative forcing (allsky-clearsky fluxes) at SRF", "W/m2")
967 ENDIF
968
969 ENDIF
970
971 IF (ok_aie) THEN
972  CALL histdef2d(iff,o_topswai%flag,o_topswai%name, "AIE at TOA", "W/m2")
973  CALL histdef2d(iff,o_solswai%flag,o_solswai%name, "AIE at SFR", "W/m2")
974!Cloud droplet number concentration
975  CALL histdef3d(iff,o_scdnc%flag,o_scdnc%name, "Cloud droplet number concentration","m-3")
976  CALL histdef2d(iff,o_cldncl%flag,o_cldncl%name, "CDNC at top of liquid water cloud", "m-3")
977  CALL histdef3d(iff,o_reffclws%flag,o_reffclws%name, "Stratiform Cloud Droplet Effective Radius","m")
978  CALL histdef3d(iff,o_reffclwc%flag,o_reffclwc%name, "Convective Cloud Droplet Effective Radius","m")
979  CALL histdef2d(iff,o_cldnvi%flag,o_cldnvi%name, "Column Integrated Cloud Droplet Number", "m-2")
980  CALL histdef3d(iff,o_lcc3d%flag,o_lcc3d%name, "Cloud liquid fraction","1")
981  CALL histdef3d(iff,o_lcc3dcon%flag,o_lcc3dcon%name, "Convective cloud liquid fraction","1")
982  CALL histdef3d(iff,o_lcc3dstra%flag,o_lcc3dstra%name, "Stratiform cloud liquid fraction","1")
983  CALL histdef2d(iff,o_lcc%flag,o_lcc%name, "Cloud liquid fraction at top of cloud","1")
984  CALL histdef2d(iff,o_reffclwtop%flag,o_reffclwtop%name, "Droplet effective radius at top of liquid water cloud", "m")
985 ENDIF
986
987
988 CALL histdef2d(iff,o_alb1%flag,o_alb1%name, "Surface VIS albedo", "-")
989 CALL histdef2d(iff,o_alb2%flag,o_alb2%name, "Surface Near IR albedo", "-")
990 CALL histdef2d(iff,o_cdrm%flag,o_cdrm%name, "Momentum drag coef.", "-")
991 CALL histdef2d(iff,o_cdrh%flag,o_cdrh%name, "Heat drag coef.", "-" )
992 CALL histdef2d(iff,o_cldl%flag,o_cldl%name, "Low-level cloudiness", "-")
993 CALL histdef2d(iff,o_cldm%flag,o_cldm%name, "Mid-level cloudiness", "-")
994 CALL histdef2d(iff,o_cldh%flag,o_cldh%name, "High-level cloudiness", "-")
995 CALL histdef2d(iff,o_cldt%flag,o_cldt%name, "Total cloudiness", "-")
996 CALL histdef2d(iff,o_cldq%flag,o_cldq%name, "Cloud liquid water path", "kg/m2")
997 CALL histdef2d(iff,o_lwp%flag,o_lwp%name, "Cloud water path", "kg/m2")
998 CALL histdef2d(iff,o_iwp%flag,o_iwp%name, "Cloud ice water path", "kg/m2" )
999 CALL histdef2d(iff,o_ue%flag,o_ue%name, "Zonal energy transport", "-")
1000 CALL histdef2d(iff,o_ve%flag,o_ve%name, "Merid energy transport", "-")
1001 CALL histdef2d(iff,o_uq%flag,o_uq%name, "Zonal humidity transport", "-")
1002 CALL histdef2d(iff,o_vq%flag,o_vq%name, "Merid humidity transport", "-")
1003
1004     IF(iflag_con.GE.3) THEN ! sb
1005 CALL histdef2d(iff,o_cape%flag,o_cape%name, "Conv avlbl pot ener", "J/kg")
1006 CALL histdef2d(iff,o_pbase%flag,o_pbase%name, "Cld base pressure", "Pa")
1007 CALL histdef2d(iff,o_ptop%flag,o_ptop%name, "Cld top pressure", "Pa")
1008 CALL histdef2d(iff,o_fbase%flag,o_fbase%name, "Cld base mass flux", "kg/m2/s")
1009 CALL histdef2d(iff,o_plcl%flag,o_plcl%name, "Lifting Condensation Level", "hPa")
1010 CALL histdef2d(iff,o_plfc%flag,o_plfc%name, "Level of Free Convection", "hPa")
1011 CALL histdef2d(iff,o_wbeff%flag,o_wbeff%name, "Conv. updraft velocity at LFC", "m/s")
1012 CALL histdef2d(iff,o_prw%flag,o_prw%name, "Precipitable water", "kg/m2")
1013   type_ecri(1) = 't_max(X)'
1014   type_ecri(2) = 't_max(X)'
1015   type_ecri(3) = 't_max(X)'
1016   type_ecri(4) = 't_max(X)'
1017   type_ecri(5) = 't_max(X)'
1018 CALL histdef2d(iff,o_cape_max%flag,o_cape_max%name, "CAPE max.", "J/kg")
1019   type_ecri(:) = type_ecri_files(:)
1020 CALL histdef3d(iff,o_upwd%flag,o_upwd%name, "saturated updraft", "kg/m2/s")
1021 CALL histdef3d(iff,o_Ma%flag,o_Ma%name, "undilute adiab updraft", "kg/m2/s")
1022 CALL histdef3d(iff,o_dnwd%flag,o_dnwd%name, "saturated downdraft", "kg/m2/s")
1023 CALL histdef3d(iff,o_dnwd0%flag,o_dnwd0%name, "unsat. downdraft", "kg/m2/s")
1024 CALL histdef3d(iff,o_mc%flag,o_mc%name, "Convective mass flux", "kg/m2/s")
1025   type_ecri(1) = 'inst(X)'
1026   type_ecri(2) = 'inst(X)'
1027   type_ecri(3) = 'inst(X)'
1028   type_ecri(4) = 'inst(X)'
1029   type_ecri(5) = 'inst(X)'
1030 CALL histdef2d(iff,o_ftime_con%flag,o_ftime_con%name, "Fraction of time convection Occurs", " ")
1031   type_ecri(:) = type_ecri_files(:)
1032     ENDIF !iflag_con .GE. 3
1033
1034 CALL histdef2d(iff,o_s_pblh%flag,o_s_pblh%name, "Boundary Layer Height", "m")
1035 CALL histdef2d(iff,o_s_pblt%flag,o_s_pblt%name, "t at Boundary Layer Height", "K")
1036 CALL histdef2d(iff,o_s_lcl%flag,o_s_lcl%name, "Condensation level", "m")
1037 CALL histdef2d(iff,o_s_therm%flag,o_s_therm%name, "Exces du thermique", "K")
1038!IM : Les champs suivants (s_oliqCL, s_cteiCL, s_trmb1, s_trmb2, s_trmb3) ne sont pas definis dans HBTM.F
1039!CALL histdef2d(iff,o_s_capCL%flag,o_s_capCL%name, "Conv avlbl pot enerfor ABL", "J/m2" )
1040!CALL histdef2d(iff,o_s_oliqCL%flag,o_s_oliqCL%name, "Liq Water in BL", "kg/m2")
1041!CALL histdef2d(iff,o_s_cteiCL%flag,o_s_cteiCL%name, "Instability criteria(ABL)", "K")
1042!CALL histdef2d(iff,o_s_trmb1%flag,o_s_trmb1%name, "deep_cape(HBTM2)", "J/m2")
1043!CALL histdef2d(iff,o_s_trmb2%flag,o_s_trmb2%name, "inhibition (HBTM2)", "J/m2")
1044!CALL histdef2d(iff,o_s_trmb3%flag,o_s_trmb3%name, "Point Omega (HBTM2)", "m")
1045
1046! Champs interpolles sur des niveaux de pression
1047
1048   type_ecri(1) = 'inst(X)'
1049   type_ecri(2) = 'inst(X)'
1050   type_ecri(3) = 'inst(X)'
1051   type_ecri(4) = 'inst(X)'
1052   type_ecri(5) = 'inst(X)'
1053
1054! Attention a reverifier
1055
1056        ilev=0       
1057        DO k=1, nlevSTD
1058!     IF(k.GE.2.AND.k.LE.12) bb2=clevSTD(k)
1059     bb2=clevSTD(k)
1060     IF(bb2.EQ."850".OR.bb2.EQ."700".OR.bb2.EQ."500".OR.bb2.EQ."200".OR.bb2.EQ."50".OR.bb2.EQ."10")THEN
1061      ilev=ilev+1
1062      print*,'ilev k bb2 flag name ',ilev,k, bb2,o_uSTDlevs(ilev)%flag,o_uSTDlevs(ilev)%name
1063 CALL histdef2d(iff,o_uSTDlevs(ilev)%flag,o_uSTDlevs(ilev)%name,"Zonal wind "//bb2//"hPa", "m/s")
1064 CALL histdef2d(iff,o_vSTDlevs(ilev)%flag,o_vSTDlevs(ilev)%name,"Meridional wind "//bb2//"hPa", "m/s")
1065 CALL histdef2d(iff,o_wSTDlevs(ilev)%flag,o_wSTDlevs(ilev)%name,"Vertical wind "//bb2//"hPa", "Pa/s")
1066 CALL histdef2d(iff,o_zSTDlevs(ilev)%flag,o_zSTDlevs(ilev)%name,"Geopotential height "//bb2//"hPa", "m")
1067 CALL histdef2d(iff,o_qSTDlevs(ilev)%flag,o_qSTDlevs(ilev)%name,"Specific humidity "//bb2//"hPa", "kg/kg" )
1068 CALL histdef2d(iff,o_tSTDlevs(ilev)%flag,o_tSTDlevs(ilev)%name,"Temperature "//bb2//"hPa", "K")
1069     ENDIF !(bb2.EQ."850".OR.bb2.EQ."700".OR."500".OR.bb2.EQ."200".OR.bb2.EQ."50".OR.bb2.EQ."10")
1070       ENDDO
1071   type_ecri(:) = type_ecri_files(:)
1072
1073 CALL histdef2d(iff,o_t_oce_sic%flag,o_t_oce_sic%name, "Temp mixte oce-sic", "K")
1074
1075 IF (type_ocean=='slab') &
1076     CALL histdef2d(iff,o_slab_bils%flag, o_slab_bils%name,"Bilan au sol sur ocean slab", "W/m2")
1077
1078! Couplage conv-CL
1079 IF (iflag_con.GE.3) THEN
1080    IF (iflag_coupl>=1) THEN
1081 CALL histdef2d(iff,o_ale_bl%flag,o_ale_bl%name, "ALE BL", "m2/s2")
1082 CALL histdef2d(iff,o_alp_bl%flag,o_alp_bl%name, "ALP BL", "m2/s2")
1083    ENDIF
1084 ENDIF !(iflag_con.GE.3)
1085
1086 CALL histdef2d(iff,o_weakinv%flag,o_weakinv%name, "Weak inversion", "-")
1087 CALL histdef2d(iff,o_dthmin%flag,o_dthmin%name, "dTheta mini", "K/m")
1088 CALL histdef2d(iff,o_rh2m%flag,o_rh2m%name, "Relative humidity at 2m", "%" )
1089   type_ecri(1) = 't_min(X)'
1090   type_ecri(2) = 't_min(X)'
1091   type_ecri(3) = 't_min(X)'
1092   type_ecri(4) = 't_min(X)'
1093   type_ecri(5) = 't_min(X)'
1094 CALL histdef2d(iff,o_rh2m_min%flag,o_rh2m_min%name, "Min Relative humidity at 2m", "%" )
1095   type_ecri(1) = 't_max(X)'
1096   type_ecri(2) = 't_max(X)'
1097   type_ecri(3) = 't_max(X)'
1098   type_ecri(4) = 't_max(X)'
1099   type_ecri(5) = 't_max(X)'
1100 CALL histdef2d(iff,o_rh2m_max%flag,o_rh2m_max%name, "Max Relative humidity at 2m", "%" )
1101   type_ecri(:) = type_ecri_files(:)
1102 CALL histdef2d(iff,o_qsat2m%flag,o_qsat2m%name, "Saturant humidity at 2m", "%")
1103 CALL histdef2d(iff,o_tpot%flag,o_tpot%name, "Surface air potential temperature", "K")
1104 CALL histdef2d(iff,o_tpote%flag,o_tpote%name, "Surface air equivalent potential temperature", "K")
1105 CALL histdef2d(iff,o_SWnetOR%flag,o_SWnetOR%name, "Sfce net SW radiation OR", "W/m2")
1106 CALL histdef2d(iff,o_SWdownOR%flag,o_SWdownOR%name, "Sfce incident SW radiation OR", "W/m2")
1107 CALL histdef2d(iff,o_LWdownOR%flag,o_LWdownOR%name, "Sfce incident LW radiation OR", "W/m2")
1108 CALL histdef2d(iff,o_snowl%flag,o_snowl%name, "Solid Large-scale Precip.", "kg/(m2*s)")
1109
1110 CALL histdef2d(iff,o_solldown%flag,o_solldown%name, "Down. IR rad. at surface", "W/m2")
1111 CALL histdef2d(iff,o_dtsvdfo%flag,o_dtsvdfo%name, "Boundary-layer dTs(o)", "K/s")
1112 CALL histdef2d(iff,o_dtsvdft%flag,o_dtsvdft%name, "Boundary-layer dTs(t)", "K/s")
1113 CALL histdef2d(iff,o_dtsvdfg%flag,o_dtsvdfg%name, "Boundary-layer dTs(g)", "K/s")
1114 CALL histdef2d(iff,o_dtsvdfi%flag,o_dtsvdfi%name, "Boundary-layer dTs(g)", "K/s")
1115 CALL histdef2d(iff,o_rugs%flag,o_rugs%name, "rugosity", "-" )
1116
1117! Champs 3D:
1118 CALL histdef3d(iff,o_ec550aer%flag,o_ec550aer%name, "Extinction at 550nm", "m^-1")
1119 CALL histdef3d(iff,o_lwcon%flag,o_lwcon%name, "Cloud liquid water content", "kg/kg")
1120 CALL histdef3d(iff,o_iwcon%flag,o_iwcon%name, "Cloud ice water content", "kg/kg")
1121 CALL histdef3d(iff,o_temp%flag,o_temp%name, "Air temperature", "K" )
1122 CALL histdef3d(iff,o_theta%flag,o_theta%name, "Potential air temperature", "K" )
1123 CALL histdef3d(iff,o_ovap%flag,o_ovap%name, "Specific humidity", "kg/kg" )
1124 CALL histdef3d(iff,o_ovapinit%flag,o_ovapinit%name, "Specific humidity (begin of timestep)", "kg/kg" )
1125 CALL histdef3d(iff,o_geop%flag,o_geop%name, "Geopotential height", "m2/s2")
1126 CALL histdef3d(iff,o_vitu%flag,o_vitu%name, "Zonal wind", "m/s" )
1127 CALL histdef3d(iff,o_vitv%flag,o_vitv%name, "Meridional wind", "m/s" )
1128 CALL histdef3d(iff,o_vitw%flag,o_vitw%name, "Vertical wind", "Pa/s" )
1129 CALL histdef3d(iff,o_pres%flag,o_pres%name, "Air pressure", "Pa" )
1130 CALL histdef3d(iff,o_paprs%flag,o_paprs%name, "Air pressure Inter-Couches", "Pa" )
1131 CALL histdef3d(iff,o_mass%flag,o_mass%name, "Masse Couches", "kg/m2" )
1132 CALL histdef3d(iff,o_rneb%flag,o_rneb%name, "Cloud fraction", "-")
1133 CALL histdef3d(iff,o_rnebcon%flag,o_rnebcon%name, "Convective Cloud Fraction", "-")
1134 CALL histdef3d(iff,o_rhum%flag,o_rhum%name, "Relative humidity", "-")
1135 CALL histdef3d(iff,o_ozone%flag,o_ozone%name, "Ozone mole fraction", "-")
1136 if (read_climoz == 2) &
1137      CALL histdef3d(iff,o_ozone_light%flag,o_ozone_light%name, &
1138      "Daylight ozone mole fraction", "-")
1139 CALL histdef3d(iff,o_dtphy%flag,o_dtphy%name, "Physics dT", "K/s")
1140 CALL histdef3d(iff,o_dqphy%flag,o_dqphy%name, "Physics dQ", "(kg/kg)/s")
1141 CALL histdef3d(iff,o_cldtau%flag,o_cldtau%name, "Cloud optical thickness", "1")
1142 CALL histdef3d(iff,o_cldemi%flag,o_cldemi%name, "Cloud optical emissivity", "1")
1143!IM: bug ?? dimensionnement variables (klon,klev+1) pmflxr, pmflxs, prfl, psfl
1144 CALL histdef3d(iff,o_pr_con_l%flag,o_pr_con_l%name, "Convective precipitation lic", " ")
1145 CALL histdef3d(iff,o_pr_con_i%flag,o_pr_con_i%name, "Convective precipitation ice", " ")
1146 CALL histdef3d(iff,o_pr_lsc_l%flag,o_pr_lsc_l%name, "Large scale precipitation lic", " ")
1147 CALL histdef3d(iff,o_pr_lsc_i%flag,o_pr_lsc_i%name, "Large scale precipitation ice", " ")
1148!Cloud droplet effective radius
1149 CALL histdef3d(iff,o_re%flag,o_re%name, "Cloud droplet effective radius","um")
1150 CALL histdef3d(iff,o_fl%flag,o_fl%name, "Denominator of Cloud droplet effective radius"," ")
1151!FH Sorties pour la couche limite
1152     if (iflag_pbl>1) then
1153 CALL histdef3d(iff,o_tke%flag,o_tke%name, "TKE", "m2/s2")
1154   type_ecri(1) = 't_max(X)'
1155   type_ecri(2) = 't_max(X)'
1156   type_ecri(3) = 't_max(X)'
1157   type_ecri(4) = 't_max(X)'
1158   type_ecri(5) = 't_max(X)'
1159 CALL histdef3d(iff,o_tke_max%flag,o_tke_max%name, "TKE max", "m2/s2")
1160   type_ecri(:) = type_ecri_files(:)
1161     endif
1162
1163 CALL histdef3d(iff,o_kz%flag,o_kz%name, "Kz melange", "m2/s")
1164   type_ecri(1) = 't_max(X)'
1165   type_ecri(2) = 't_max(X)'
1166   type_ecri(3) = 't_max(X)'
1167   type_ecri(4) = 't_max(X)'
1168   type_ecri(5) = 't_max(X)'
1169 CALL histdef3d(iff,o_kz_max%flag,o_kz_max%name, "Kz melange max", "m2/s" )
1170   type_ecri(:) = type_ecri_files(:)
1171 CALL histdef3d(iff,o_clwcon%flag,o_clwcon%name, "Convective Cloud Liquid water content", "kg/kg")
1172 CALL histdef3d(iff,o_dtdyn%flag,o_dtdyn%name, "Dynamics dT", "K/s")
1173 CALL histdef3d(iff,o_dqdyn%flag,o_dqdyn%name, "Dynamics dQ", "(kg/kg)/s")
1174 CALL histdef3d(iff,o_dudyn%flag,o_dudyn%name, "Dynamics dU", "m/s2")
1175 CALL histdef3d(iff,o_dvdyn%flag,o_dvdyn%name, "Dynamics dV", "m/s2")
1176 CALL histdef3d(iff,o_dtcon%flag,o_dtcon%name, "Convection dT", "K/s")
1177 CALL histdef3d(iff,o_ducon%flag,o_ducon%name, "Convection du", "m/s2")
1178 CALL histdef3d(iff,o_dqcon%flag,o_dqcon%name, "Convection dQ", "(kg/kg)/s")
1179
1180! Wakes
1181 IF(iflag_con.EQ.3) THEN
1182 IF (iflag_wake >= 1) THEN
1183   CALL histdef2d(iff,o_ale_wk%flag,o_ale_wk%name, "ALE WK", "m2/s2")
1184   CALL histdef2d(iff,o_alp_wk%flag,o_alp_wk%name, "ALP WK", "m2/s2")
1185   CALL histdef2d(iff,o_ale%flag,o_ale%name, "ALE", "m2/s2")
1186   CALL histdef2d(iff,o_alp%flag,o_alp%name, "ALP", "W/m2")
1187   CALL histdef2d(iff,o_cin%flag,o_cin%name, "Convective INhibition", "m2/s2")
1188   CALL histdef2d(iff,o_wape%flag,o_WAPE%name, "WAPE", "m2/s2")
1189   CALL histdef2d(iff,o_wake_h%flag,o_wake_h%name, "wake_h", "-")
1190   CALL histdef2d(iff,o_wake_s%flag,o_wake_s%name, "wake_s", "-")
1191   CALL histdef3d(iff,o_dtwak%flag,o_dtwak%name, "Wake dT", "K/s")
1192   CALL histdef3d(iff,o_dqwak%flag,o_dqwak%name, "Wake dQ", "(kg/kg)/s")
1193   CALL histdef3d(iff,o_wake_deltat%flag,o_wake_deltat%name, "wake_deltat", " ")
1194   CALL histdef3d(iff,o_wake_deltaq%flag,o_wake_deltaq%name, "wake_deltaq", " ")
1195   CALL histdef3d(iff,o_wake_omg%flag,o_wake_omg%name, "wake_omg", " ")
1196 ENDIF
1197   CALL histdef3d(iff,o_Vprecip%flag,o_Vprecip%name, "precipitation vertical profile", "-")
1198   CALL histdef3d(iff,o_ftd%flag,o_ftd%name, "tend temp due aux descentes precip", "-")
1199   CALL histdef3d(iff,o_fqd%flag,o_fqd%name,"tend vap eau due aux descentes precip", "-")
1200 ENDIF !(iflag_con.EQ.3)
1201
1202 CALL histdef3d(iff,o_dtlsc%flag,o_dtlsc%name, "Condensation dT", "K/s")
1203 CALL histdef3d(iff,o_dtlschr%flag,o_dtlschr%name,"Large-scale condensational heating rate","K/s")
1204 CALL histdef3d(iff,o_dqlsc%flag,o_dqlsc%name, "Condensation dQ", "(kg/kg)/s")
1205 CALL histdef3d(iff,o_dtvdf%flag,o_dtvdf%name, "Boundary-layer dT", "K/s")
1206 CALL histdef3d(iff,o_dqvdf%flag,o_dqvdf%name, "Boundary-layer dQ", "(kg/kg)/s")
1207 CALL histdef3d(iff,o_dteva%flag,o_dteva%name, "Reevaporation dT", "K/s")
1208 CALL histdef3d(iff,o_dqeva%flag,o_dqeva%name, "Reevaporation dQ", "(kg/kg)/s")
1209 CALL histdef3d(iff,o_ptconv%flag,o_ptconv%name, "POINTS CONVECTIFS", " ")
1210 CALL histdef3d(iff,o_ratqs%flag,o_ratqs%name, "RATQS", " ")
1211 CALL histdef3d(iff,o_dtthe%flag,o_dtthe%name, "Dry adjust. dT", "K/s")
1212
1213if(iflag_thermals.gt.1) THEN
1214 CALL histdef3d(iff,o_dqlscth%flag,o_dqlscth%name, "dQ therm.", "(kg/kg)/s")
1215 CALL histdef3d(iff,o_dqlscst%flag,o_dqlscst%name, "dQ strat.", "(kg/kg)/s")
1216 CALL histdef3d(iff,o_dtlscth%flag,o_dtlscth%name, "dQ therm.", "K/s")
1217 CALL histdef3d(iff,o_dtlscst%flag,o_dtlscst%name, "dQ strat.", "K/s")
1218 CALL histdef2d(iff,o_plulth%flag,o_plulth%name, "Rainfall therm.", "K/s")
1219 CALL histdef2d(iff,o_plulst%flag,o_plulst%name, "Rainfall strat.", "K/s")
1220 CALL histdef2d(iff,o_lmaxth%flag,o_lmaxth%name, "Upper level thermals", "")
1221 CALL histdef3d(iff,o_ptconvth%flag,o_ptconvth%name, "POINTS CONVECTIFS therm.", " ")
1222 CALL histdef3d(iff,o_f_th%flag,o_f_th%name, "Thermal plume mass flux", "K/s")
1223 CALL histdef3d(iff,o_e_th%flag,o_e_th%name,"Thermal plume entrainment","K/s")
1224 CALL histdef3d(iff,o_w_th%flag,o_w_th%name,"Thermal plume vertical velocity","m/s")
1225 CALL histdef3d(iff,o_lambda_th%flag,o_lambda_th%name,"Thermal plume vertical velocity","m/s")
1226 CALL histdef2d(iff,o_ftime_th%flag,o_ftime_th%name,"Fraction of time Shallow convection occurs"," ")
1227 CALL histdef3d(iff,o_q_th%flag,o_q_th%name, "Thermal plume total humidity", "kg/kg")
1228 CALL histdef3d(iff,o_a_th%flag,o_a_th%name, "Thermal plume fraction", "")
1229 CALL histdef3d(iff,o_d_th%flag,o_d_th%name, "Thermal plume detrainment", "K/s")
1230!IM endif !iflag_thermals.gt.1
1231 CALL histdef2d(iff,o_f0_th%flag,o_f0_th%name, "Thermal closure mass flux", "K/s")
1232 CALL histdef2d(iff,o_zmax_th%flag,o_zmax_th%name, "Thermal plume height", "K/s")
1233 CALL histdef3d(iff,o_dqthe%flag,o_dqthe%name, "Dry adjust. dQ", "(kg/kg)/s")
1234endif !iflag_thermals.gt.1
1235 CALL histdef3d(iff,o_dtajs%flag,o_dtajs%name, "Dry adjust. dT", "K/s")
1236 CALL histdef3d(iff,o_dqajs%flag,o_dqajs%name, "Dry adjust. dQ", "(kg/kg)/s")
1237 CALL histdef3d(iff,o_dtswr%flag,o_dtswr%name, "SW radiation dT", "K/s")
1238 CALL histdef3d(iff,o_dtsw0%flag,o_dtsw0%name, "CS SW radiation dT", "K/s")
1239 CALL histdef3d(iff,o_dtlwr%flag,o_dtlwr%name, "LW radiation dT", "K/s")
1240 CALL histdef3d(iff,o_dtlw0%flag,o_dtlw0%name, "CS LW radiation dT", "K/s")
1241 CALL histdef3d(iff,o_dtec%flag,o_dtec%name, "Cinetic dissip dT", "K/s")
1242 CALL histdef3d(iff,o_duvdf%flag,o_duvdf%name, "Boundary-layer dU", "m/s2")
1243 CALL histdef3d(iff,o_dvvdf%flag,o_dvvdf%name, "Boundary-layer dV", "m/s2")
1244
1245     IF (ok_orodr) THEN
1246 CALL histdef3d(iff,o_duoro%flag,o_duoro%name, "Orography dU", "m/s2")
1247 CALL histdef3d(iff,o_dvoro%flag,o_dvoro%name, "Orography dV", "m/s2")
1248     ENDIF
1249
1250     IF (ok_orolf) THEN
1251 CALL histdef3d(iff,o_dulif%flag,o_dulif%name, "Orography dU", "m/s2")
1252 CALL histdef3d(iff,o_dvlif%flag,o_dvlif%name, "Orography dV", "m/s2")
1253     ENDIF
1254
1255
1256    IF (nqtot>=3) THEN
1257     DO iq=3,nqtot 
1258       iiq=niadv(iq)
1259       o_trac(iq-2) = ctrl_out((/ 4, 5, 1, 1, 1 /),tname(iiq))
1260       CALL histdef3d (iff, o_trac(iq-2)%flag,o_trac(iq-2)%name,'Tracer '//ttext(iiq), "-" )
1261     ENDDO
1262    ENDIF
1263
1264        CALL histend(nid_files(iff))
1265
1266         ndex2d = 0
1267         ndex3d = 0
1268
1269         ENDIF ! clef_files
1270
1271         ENDDO !  iff
1272     print*,'Fin phys_output_mod.F90'
1273      end subroutine phys_output_open
1274
1275      SUBROUTINE histdef2d (iff,flag_var,nomvar,titrevar,unitvar)
1276     
1277       use ioipsl
1278       USE dimphy
1279       USE mod_phys_lmdz_para
1280
1281       IMPLICIT NONE
1282       
1283       include "dimensions.h"
1284       include "temps.h"
1285       include "indicesol.h"
1286       include "clesphys.h"
1287
1288       integer                          :: iff
1289       integer, dimension(nfiles)       :: flag_var
1290       character(len=20)                 :: nomvar
1291       character(len=*)                 :: titrevar
1292       character(len=*)                 :: unitvar
1293
1294       real zstophym
1295
1296       if (type_ecri(iff)=='inst(X)'.OR.type_ecri(iff)=='once') then
1297         zstophym=zoutm(iff)
1298       else
1299         zstophym=zdtime
1300       endif
1301
1302! Appel a la lecture des noms et niveau d'ecriture des variables dans output.def
1303       call conf_physoutputs(nomvar,flag_var)
1304       
1305       if ( flag_var(iff)<=lev_files(iff) ) then
1306 call histdef (nid_files(iff),nomvar,titrevar,unitvar, &
1307               iim,jj_nb,nhorim(iff), 1,1,1, -99, 32, &
1308               type_ecri(iff), zstophym,zoutm(iff))               
1309       endif                     
1310      end subroutine histdef2d
1311
1312      SUBROUTINE histdef3d (iff,flag_var,nomvar,titrevar,unitvar)
1313
1314       use ioipsl
1315       USE dimphy
1316       USE mod_phys_lmdz_para
1317
1318       IMPLICIT NONE
1319
1320       include "dimensions.h"
1321       include "temps.h"
1322       include "indicesol.h"
1323       include "clesphys.h"
1324
1325       integer                          :: iff
1326       integer, dimension(nfiles)       :: flag_var
1327       character(len=20)                 :: nomvar
1328       character(len=*)                 :: titrevar
1329       character(len=*)                 :: unitvar
1330
1331       real zstophym
1332
1333! Appel a la lecture des noms et niveau d'ecriture des variables dans output.def
1334       call conf_physoutputs(nomvar,flag_var)
1335
1336       if (type_ecri(iff)=='inst(X)'.OR.type_ecri(iff)=='once') then
1337         zstophym=zoutm(iff)
1338       else
1339         zstophym=zdtime
1340       endif
1341
1342       if ( flag_var(iff)<=lev_files(iff) ) then
1343          call histdef (nid_files(iff), nomvar, titrevar, unitvar, &
1344               iim, jj_nb, nhorim(iff), klev, levmin(iff), &
1345               levmax(iff)-levmin(iff)+1, nvertm(iff), 32, type_ecri(iff), &
1346               zstophym, zoutm(iff))
1347       endif
1348      end subroutine histdef3d
1349
1350      SUBROUTINE conf_physoutputs(nam_var,flag_var)
1351!!! Lecture des noms et niveau de sortie des variables dans output.def
1352!   en utilisant les routines getin de IOIPSL 
1353       use ioipsl
1354
1355       IMPLICIT NONE
1356
1357       include 'iniprint.h'
1358
1359       character(len=20)                :: nam_var
1360       integer, dimension(nfiles)      :: flag_var
1361
1362        IF(prt_level>10) WRITE(lunout,*)'Avant getin: nam_var flag_var ',nam_var,flag_var(:)
1363        call getin('flag_'//nam_var,flag_var)
1364        call getin('name_'//nam_var,nam_var)
1365        IF(prt_level>10) WRITE(lunout,*)'Apres getin: nam_var flag_var ',nam_var,flag_var(:)
1366
1367      END SUBROUTINE conf_physoutputs
1368
1369      SUBROUTINE convers_timesteps(str,timestep)
1370
1371        use ioipsl
1372
1373        IMPLICIT NONE
1374
1375        character(len=20)   :: str
1376        character(len=10)   :: type
1377        integer             :: ipos,il
1378        real                :: ttt,xxx,timestep,dayseconde
1379        parameter (dayseconde=86400.)
1380        include "temps.h"
1381        include "comconst.h"
1382
1383        ipos=scan(str,'0123456789.',.true.)
1384
1385        il=len_trim(str)
1386        print*,ipos,il
1387        read(str(1:ipos),*) ttt
1388        print*,ttt
1389        type=str(ipos+1:il)
1390
1391
1392        if ( il == ipos ) then
1393        type='day'
1394        endif
1395
1396        if ( type == 'day'.or.type == 'days'.or.type == 'jours'.or.type == 'jour' ) timestep = ttt * dayseconde
1397        if ( type == 'mounths'.or.type == 'mth'.or.type == 'mois' ) then
1398           print*,'annee_ref,day_ref mon_len',annee_ref,day_ref,ioget_mon_len(annee_ref,day_ref)
1399           timestep = ttt * dayseconde * ioget_mon_len(annee_ref,day_ref)
1400        endif
1401        if ( type == 'hours'.or.type == 'hr'.or.type == 'heurs') timestep = ttt * dayseconde / 24.
1402        if ( type == 'mn'.or.type == 'minutes'  ) timestep = ttt * 60.
1403        if ( type == 's'.or.type == 'sec'.or.type == 'secondes'   ) timestep = ttt
1404        if ( type == 'TS' ) timestep = dtphys
1405
1406        print*,'type =      ',type
1407        print*,'nb j/h/m =  ',ttt
1408        print*,'timestep(s)=',timestep
1409
1410        END SUBROUTINE convers_timesteps
1411
1412END MODULE phys_output_mod
1413
Note: See TracBrowser for help on using the repository browser.