source: LMDZ4/branches/LMDZ4-dev/libf/phylmd/phys_output_mod.F90 @ 1085

Last change on this file since 1085 was 1083, checked in by lguez, 16 years ago

Évolution des entrées-sorties : lecture des noms et des niveaux de
sortie des variables à partir d'un fichier "outputs.def".
Abderrahmane IDELKADI

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 57.0 KB
Line 
1! Abderrahmane 12 2007
2!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3!!! Ecreture des Sorties du modele dans les fichiers Netcdf :
4! histmth.nc : moyennes mensuelles
5! histday.nc : moyennes journalieres
6! histhf.nc  : moyennes toutes les 3 heures
7! histins.nc : valeurs instantanees
8!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
9
10MODULE phys_output_mod
11
12  IMPLICIT NONE
13
14  private histdef2d, histdef3d, conf_physoutputs
15
16
17   integer, parameter                           :: nfiles = 5
18   logical, dimension(nfiles), save             :: clef_files
19   integer, dimension(nfiles), save             :: lev_files
20   integer, dimension(nfiles), save             :: nid_files
21
22   integer, dimension(nfiles), private, save :: nhorim, nvertm
23   real, dimension(nfiles), private, save                :: zstophym, zoutm
24   CHARACTER(len=20), dimension(nfiles), private, save   :: type_ecri
25
26!   integer, save                     :: nid_hf3d
27
28!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
29!! Definition pour chaque variable du niveau d ecriture dans chaque fichier
30!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!/ histmth, histday, histhf, histins /),'!!!!!!!!!!!!
31!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
32
33  integer, private:: levmin(nfiles) = 1
34  integer, private:: levmax(nfiles)
35
36  TYPE ctrl_out
37   integer,dimension(5) :: flag
38   character(len=20)     :: name
39  END TYPE ctrl_out
40
41
42!!! 1D
43  type(ctrl_out) :: o_phis         = ctrl_out((/ 1, 1, 10, 1, 1 /), 'phis')
44  type(ctrl_out) :: o_aire         = ctrl_out((/ 1, 1, 10,  1, 1 /),'aire')
45  type(ctrl_out) :: o_contfracATM  = ctrl_out((/ 10, 1,  1, 10, 10 /),'contfracATM')
46  type(ctrl_out) :: o_contfracOR   = ctrl_out((/ 10, 1,  1, 10, 10 /),'contfracOR')
47  type(ctrl_out) :: o_aireTER      = ctrl_out((/ 10, 10, 1, 10, 10 /),'aireTER')
48 
49!!! 2D
50  type(ctrl_out) :: o_flat         = ctrl_out((/ 10, 1, 10, 10, 1 /),'flat')
51  type(ctrl_out) :: o_slp          = ctrl_out((/ 1, 1, 1, 10, 1 /),'slp')
52  type(ctrl_out) :: o_tsol         = ctrl_out((/ 1, 1, 1, 1, 1 /),'tsol')
53  type(ctrl_out) :: o_t2m          = ctrl_out((/ 1, 1, 1, 1, 1 /),'t2m')
54  type(ctrl_out) :: o_t2m_min      = ctrl_out((/ 1, 1, 10, 10, 10 /),'t2m_min')
55  type(ctrl_out) :: o_t2m_max      = ctrl_out((/ 1, 1, 10, 10, 10 /),'t2m_max')
56  type(ctrl_out),dimension(4) :: o_t2m_srf      = (/ ctrl_out((/ 10, 4, 10, 10, 10 /),'t2m_ter'), &
57                                                 ctrl_out((/ 10, 4, 10, 10, 10 /),'t2m_lic'), &
58                                                 ctrl_out((/ 10, 4, 10, 10, 10 /),'t2m_oce'), &
59                                                 ctrl_out((/ 10, 4, 10, 10, 10 /),'t2m_sic') /)
60
61  type(ctrl_out) :: o_wind10m      = ctrl_out((/ 1, 1, 1, 10, 10 /),'wind10m')
62  type(ctrl_out) :: o_wind10max    = ctrl_out((/ 10, 1, 10, 10, 10 /),'wind10max')
63  type(ctrl_out) :: o_sicf         = ctrl_out((/ 1, 1, 10, 10, 10 /),'sicf')
64  type(ctrl_out) :: o_q2m          = ctrl_out((/ 1, 1, 1, 1, 1 /),'q2m')
65  type(ctrl_out) :: o_u10m         = ctrl_out((/ 1, 1, 1, 1, 1 /),'u10m')
66  type(ctrl_out) :: o_v10m         = ctrl_out((/ 1, 1, 1, 1, 1 /),'v10m')
67  type(ctrl_out) :: o_psol         = ctrl_out((/ 1, 1, 1, 1, 1 /),'psol')
68  type(ctrl_out) :: o_qsurf        = ctrl_out((/ 1, 10, 10, 10, 10 /),'qsurf')
69
70  type(ctrl_out),dimension(4) :: o_u10m_srf     = (/ ctrl_out((/ 10, 4, 10, 10, 10 /),'u10m_ter'), &
71                                              ctrl_out((/ 10, 4, 10, 10, 10 /),'u10m_lic'), &
72                                              ctrl_out((/ 10, 4, 10, 10, 10 /),'u10m_oce'), &
73                                              ctrl_out((/ 10, 4, 10, 10, 10 /),'u10m_sic') /)
74
75  type(ctrl_out),dimension(4) :: o_v10m_srf     = (/ ctrl_out((/ 10, 4, 10, 10, 10 /),'v10m_ter'), &
76                                              ctrl_out((/ 10, 4, 10, 10, 10 /),'v10m_lic'), &
77                                              ctrl_out((/ 10, 4, 10, 10, 10 /),'v10m_oce'), &
78                                              ctrl_out((/ 10, 4, 10, 10, 10 /),'v10m_sic') /)
79
80  type(ctrl_out) :: o_qsol         = ctrl_out((/ 1, 10, 10, 1, 1 /),'qsol')
81
82  type(ctrl_out) :: o_ndayrain     = ctrl_out((/ 1, 10, 10, 10, 10 /),'ndayrain')
83  type(ctrl_out) :: o_precip       = ctrl_out((/ 1, 1, 1, 1, 1 /),'precip')
84  type(ctrl_out) :: o_plul         = ctrl_out((/ 1, 1, 1, 1, 10 /),'plul')
85
86  type(ctrl_out) :: o_pluc         = ctrl_out((/ 1, 1, 1, 1, 10 /),'pluc')
87  type(ctrl_out) :: o_snow         = ctrl_out((/ 1, 1, 10, 1, 10 /),'snow')
88  type(ctrl_out) :: o_evap         = ctrl_out((/ 1, 1, 10, 1, 10 /),'evap')
89  type(ctrl_out) :: o_tops         = ctrl_out((/ 1, 1, 10, 10, 10 /),'tops')
90  type(ctrl_out) :: o_tops0        = ctrl_out((/ 1, 5, 10, 10, 10 /),'tops0')
91  type(ctrl_out) :: o_topl         = ctrl_out((/ 1, 1, 10, 1, 10 /),'topl')
92  type(ctrl_out) :: o_topl0        = ctrl_out((/ 1, 5, 10, 10, 10 /),'topl0')
93  type(ctrl_out) :: o_SWupTOA      = ctrl_out((/ 1, 4, 10, 10, 10 /),'SWupTOA')
94  type(ctrl_out) :: o_SWupTOAclr   = ctrl_out((/ 1, 4, 10, 10, 10 /),'SWupTOAclr')
95  type(ctrl_out) :: o_SWdnTOA      = ctrl_out((/ 1, 4, 10, 10, 10 /),'SWdnTOA')
96  type(ctrl_out) :: o_SWdnTOAclr   = ctrl_out((/ 1, 4, 10, 10, 10 /),'SWdnTOAclr')
97  type(ctrl_out) :: o_SWup200      = ctrl_out((/ 1, 10, 10, 10, 10 /),'SWup200')
98  type(ctrl_out) :: o_SWup200clr   = ctrl_out((/ 10, 1, 10, 10, 10 /),'SWup200clr')
99  type(ctrl_out) :: o_SWdn200      = ctrl_out((/ 1, 10, 10, 10, 10 /),'SWdn200')
100  type(ctrl_out) :: o_SWdn200clr   = ctrl_out((/ 10, 1, 10, 10, 10 /),'SWdn200clr')
101
102! arajouter
103!  type(ctrl_out) :: o_LWupTOA     = ctrl_out((/ 1, 4, 10, 10, 10 /),'LWupTOA')
104!  type(ctrl_out) :: o_LWupTOAclr  = ctrl_out((/ 1, 4, 10, 10, 10 /),'LWupTOAclr')
105!  type(ctrl_out) :: o_LWdnTOA     = ctrl_out((/ 1, 4, 10, 10, 10 /),'LWdnTOA')
106!  type(ctrl_out) :: o_LWdnTOAclr  = ctrl_out((/ 1, 4, 10, 10, 10 /),'LWdnTOAclr')
107
108  type(ctrl_out) :: o_LWup200      = ctrl_out((/ 1, 10, 10, 10, 10 /),'LWup200')
109  type(ctrl_out) :: o_LWup200clr   = ctrl_out((/ 1, 10, 10, 10, 10 /),'LWup200clr')
110  type(ctrl_out) :: o_LWdn200      = ctrl_out((/ 1, 10, 10, 10, 10 /),'LWdn200')
111  type(ctrl_out) :: o_LWdn200clr   = ctrl_out((/ 1, 10, 10, 10, 10 /),'LWdn200clr')
112  type(ctrl_out) :: o_sols         = ctrl_out((/ 1, 1, 10, 1, 10 /),'sols')
113  type(ctrl_out) :: o_sols0        = ctrl_out((/ 1, 5, 10, 10, 10 /),'sols0')
114  type(ctrl_out) :: o_soll         = ctrl_out((/ 1, 1, 10, 1, 10 /),'soll')
115  type(ctrl_out) :: o_soll0        = ctrl_out((/ 1, 5, 10, 10, 10 /),'soll0')
116  type(ctrl_out) :: o_radsol       = ctrl_out((/ 1, 1, 10, 10, 10 /),'radsol')
117  type(ctrl_out) :: o_SWupSFC      = ctrl_out((/ 1, 4, 10, 10, 10 /),'SWupSFC')
118  type(ctrl_out) :: o_SWupSFCclr   = ctrl_out((/ 1, 4, 10, 10, 10 /),'SWupSFCclr')
119  type(ctrl_out) :: o_SWdnSFC      = ctrl_out((/ 1, 1, 10, 10, 10 /),'SWdnSFC')
120  type(ctrl_out) :: o_SWdnSFCclr   = ctrl_out((/ 1, 4, 10, 10, 10 /),'SWdnSFCclr')
121  type(ctrl_out) :: o_LWupSFC      = ctrl_out((/ 1, 4, 10, 10, 10 /),'LWupSFC')
122  type(ctrl_out) :: o_LWupSFCclr   = ctrl_out((/ 1, 4, 10, 10, 10 /),'LWupSFCclr')
123  type(ctrl_out) :: o_LWdnSFC      = ctrl_out((/ 1, 4, 10, 10, 10 /),'LWdnSFC')
124  type(ctrl_out) :: o_LWdnSFCclr   = ctrl_out((/ 1, 4, 10, 10, 10 /),'LWdnSFCclr')
125  type(ctrl_out) :: o_bils         = ctrl_out((/ 1, 2, 10, 1, 10 /),'bils')
126  type(ctrl_out) :: o_sens         = ctrl_out((/ 1, 1, 10, 1, 1 /),'sens')
127  type(ctrl_out) :: o_fder         = ctrl_out((/ 1, 2, 10, 1, 10 /),'fder')
128  type(ctrl_out) :: o_ffonte       = ctrl_out((/ 1, 10, 10, 10, 10 /),'ffonte')
129  type(ctrl_out) :: o_fqcalving    = ctrl_out((/ 1, 10, 10, 10, 10 /),'fqcalving')
130  type(ctrl_out) :: o_fqfonte      = ctrl_out((/ 1, 10, 10, 10, 10 /),'fqfonte')
131
132  type(ctrl_out),dimension(4) :: o_taux_srf     = (/ ctrl_out((/ 1, 4, 10, 1, 10 /),'taux_ter'), &
133                                                 ctrl_out((/ 1, 4, 10, 1, 10 /),'taux_lic'), &
134                                                 ctrl_out((/ 1, 4, 10, 1, 10 /),'taux_oce'), &
135                                                 ctrl_out((/ 1, 4, 10, 1, 10 /),'taux_sic') /)
136
137  type(ctrl_out),dimension(4) :: o_tauy_srf     = (/ ctrl_out((/ 1, 4, 10, 1, 10 /),'tauy_ter'), &
138                                                 ctrl_out((/ 1, 4, 10, 1, 10 /),'tauy_lic'), &
139                                                 ctrl_out((/ 1, 4, 10, 1, 10 /),'tauy_oce'), &
140                                                 ctrl_out((/ 1, 4, 10, 1, 10 /),'tauy_sic') /)
141
142
143  type(ctrl_out),dimension(4) :: o_pourc_srf    = (/ ctrl_out((/ 1, 4, 10, 1, 10 /),'pourc_ter'), &
144                                                 ctrl_out((/ 1, 4, 10, 1, 10 /),'pourc_lic'), &
145                                                 ctrl_out((/ 1, 4, 10, 1, 10 /),'pourc_oce'), &
146                                                 ctrl_out((/ 1, 4, 10, 1, 10 /),'pourc_sic') /)     
147
148  type(ctrl_out),dimension(4) :: o_fract_srf    = (/ ctrl_out((/ 1, 4, 10, 1, 10 /),'fract_ter'), &
149                                                 ctrl_out((/ 1, 4, 10, 1, 10 /),'fract_lic'), &
150                                                 ctrl_out((/ 1, 4, 10, 1, 10 /),'fract_oce'), &
151                                                 ctrl_out((/ 1, 4, 10, 1, 10 /),'fract_sic') /)
152
153  type(ctrl_out),dimension(4) :: o_tsol_srf     = (/ ctrl_out((/ 1, 4, 10, 1, 10 /),'tsol_ter'), &
154                                                 ctrl_out((/ 1, 4, 10, 1, 10 /),'tsol_lic'), &
155                                                 ctrl_out((/ 1, 4, 10, 1, 10 /),'tsol_oce'), &
156                                                 ctrl_out((/ 1, 4, 10, 1, 10 /),'tsol_sic') /)
157
158  type(ctrl_out),dimension(4) :: o_sens_srf     = (/ ctrl_out((/ 1, 4, 10, 1, 10 /),'sens_ter'), &
159                                                 ctrl_out((/ 1, 4, 10, 1, 10 /),'sens_lic'), &
160                                                 ctrl_out((/ 1, 4, 10, 1, 10 /),'sens_oce'), &
161                                                 ctrl_out((/ 1, 4, 10, 1, 10 /),'sens_sic') /)
162
163  type(ctrl_out),dimension(4) :: o_lat_srf      = (/ ctrl_out((/ 1, 4, 10, 1, 10 /),'lat_ter'), &
164                                                 ctrl_out((/ 1, 4, 10, 1, 10 /),'lat_lic'), &
165                                                 ctrl_out((/ 1, 4, 10, 1, 10 /),'lat_oce'), &
166                                                 ctrl_out((/ 1, 4, 10, 1, 10 /),'lat_sic') /)
167
168  type(ctrl_out),dimension(4) :: o_flw_srf      = (/ ctrl_out((/ 1, 10, 10, 10, 10 /),'flw_ter'), &
169                                                 ctrl_out((/ 1, 10, 10, 10, 10 /),'flw_lic'), &
170                                                 ctrl_out((/ 1, 10, 10, 10, 10 /),'flw_oce'), &
171                                                 ctrl_out((/ 1, 10, 10, 10, 10 /),'flw_sic') /)
172                                                 
173  type(ctrl_out),dimension(4) :: o_fsw_srf      = (/ ctrl_out((/ 1, 10, 10, 10, 10 /),'fsw_ter'), &
174                                                  ctrl_out((/ 1, 10, 10, 10, 10 /),'fsw_lic'), &
175                                                  ctrl_out((/ 1, 10, 10, 10, 10 /),'fsw_oce'), &
176                                                  ctrl_out((/ 1, 10, 10, 10, 10 /),'fsw_sic') /)
177
178  type(ctrl_out),dimension(4) :: o_wbils_srf    = (/ ctrl_out((/ 1, 10, 10, 10, 10 /),'wbils_ter'), &
179                                                 ctrl_out((/ 1, 10, 10, 10, 10 /),'wbils_lic'), &
180                                                 ctrl_out((/ 1, 10, 10, 10, 10 /),'wbils_oce'), &
181                                                 ctrl_out((/ 1, 10, 10, 10, 10 /),'wbils_sic') /)
182
183  type(ctrl_out),dimension(4) :: o_wbilo_srf    = (/ ctrl_out((/ 1, 10, 10, 10, 10 /),'wbilo_ter'), &
184                                                     ctrl_out((/ 1, 10, 10, 10, 10 /),'wbilo_lic'), &
185                                                 ctrl_out((/ 1, 10, 10, 10, 10 /),'wbilo_oce'), &
186                                                 ctrl_out((/ 1, 10, 10, 10, 10 /),'wbilo_sic') /)
187
188
189  type(ctrl_out) :: o_cdrm         = ctrl_out((/ 1, 10, 10, 1, 10 /),'cdrm')
190  type(ctrl_out) :: o_cdrh         = ctrl_out((/ 1, 10, 10, 1, 10 /),'cdrh')
191  type(ctrl_out) :: o_cldl         = ctrl_out((/ 1, 1, 10, 10, 10 /),'cldl')
192  type(ctrl_out) :: o_cldm         = ctrl_out((/ 1, 1, 10, 10, 10 /),'cldm')
193  type(ctrl_out) :: o_cldh         = ctrl_out((/ 1, 1, 10, 10, 10 /),'cldh')
194  type(ctrl_out) :: o_cldt         = ctrl_out((/ 1, 1, 2, 10, 10 /),'cldt')
195  type(ctrl_out) :: o_cldq         = ctrl_out((/ 1, 1, 10, 10, 10 /),'cldq')
196  type(ctrl_out) :: o_lwp          = ctrl_out((/ 1, 5, 10, 10, 10 /),'lwp')
197  type(ctrl_out) :: o_iwp          = ctrl_out((/ 1, 5, 10, 10, 10 /),'iwp')
198  type(ctrl_out) :: o_ue           = ctrl_out((/ 1, 10, 10, 10, 10 /),'ue')
199  type(ctrl_out) :: o_ve           = ctrl_out((/ 1, 10, 10, 10, 10 /),'ve')
200  type(ctrl_out) :: o_uq           = ctrl_out((/ 1, 10, 10, 10, 10 /),'uq')
201  type(ctrl_out) :: o_vq           = ctrl_out((/ 1, 10, 10, 10, 10 /),'vq')
202 
203  type(ctrl_out) :: o_cape         = ctrl_out((/ 1, 10, 10, 10, 10 /),'cape')
204  type(ctrl_out) :: o_pbase        = ctrl_out((/ 1, 10, 10, 10, 10 /),'pbase')
205  type(ctrl_out) :: o_ptop         = ctrl_out((/ 1, 4, 10, 10, 10 /),'ptop')
206  type(ctrl_out) :: o_fbase        = ctrl_out((/ 1, 10, 10, 10, 10 /),'fbase')
207  type(ctrl_out) :: o_prw          = ctrl_out((/ 1, 1, 10, 10, 10 /),'prw')
208
209  type(ctrl_out) :: o_s_pblh       = ctrl_out((/ 1, 10, 10, 1, 1 /),'s_pblh')
210  type(ctrl_out) :: o_s_pblt       = ctrl_out((/ 1, 10, 10, 1, 1 /),'s_pblt')
211  type(ctrl_out) :: o_s_lcl        = ctrl_out((/ 1, 10, 10, 1, 10 /),'s_lcl')
212  type(ctrl_out) :: o_s_capCL      = ctrl_out((/ 1, 10, 10, 1, 10 /),'s_capCL')
213  type(ctrl_out) :: o_s_oliqCL     = ctrl_out((/ 1, 10, 10, 1, 10 /),'s_oliqCL')
214  type(ctrl_out) :: o_s_cteiCL     = ctrl_out((/ 1, 10, 10, 1, 1 /),'s_cteiCL')
215  type(ctrl_out) :: o_s_therm      = ctrl_out((/ 1, 10, 10, 1, 1 /),'s_therm')
216  type(ctrl_out) :: o_s_trmb1      = ctrl_out((/ 1, 10, 10, 1, 10 /),'s_trmb1')
217  type(ctrl_out) :: o_s_trmb2      = ctrl_out((/ 1, 10, 10, 1, 10 /),'s_trmb2')
218  type(ctrl_out) :: o_s_trmb3      = ctrl_out((/ 1, 10, 10, 1, 10 /),'s_trmb3')
219
220  type(ctrl_out) :: o_slab_bils    = ctrl_out((/ 1, 1, 10, 10, 10 /),'slab_bils_oce')
221
222  type(ctrl_out) :: o_ale_bl       = ctrl_out((/ 1, 1, 1, 1, 10 /),'ale_bl')
223  type(ctrl_out) :: o_alp_bl       = ctrl_out((/ 1, 1, 1, 1, 10 /),'alp_bl')
224  type(ctrl_out) :: o_ale_wk       = ctrl_out((/ 1, 1, 1, 1, 10 /),'ale_wk')
225  type(ctrl_out) :: o_alp_wk       = ctrl_out((/ 1, 1, 1, 1, 10 /),'alp_wk')
226
227  type(ctrl_out) :: o_ale          = ctrl_out((/ 1, 1, 1, 1, 10 /),'ale')
228  type(ctrl_out) :: o_alp          = ctrl_out((/ 1, 1, 1, 1, 10 /),'alp')
229  type(ctrl_out) :: o_cin          = ctrl_out((/ 1, 1, 1, 1, 10 /),'cin')
230  type(ctrl_out) :: o_wape         = ctrl_out((/ 1, 1, 1, 1, 10 /),'wape')
231
232
233! Champs interpolles sur des niveaux de pression ??? a faire correctement
234! if=1 on ecrit u v w phi sur 850 700 500 200 au niv 1
235! if=2 on ecrit w et ph 500 seulement au niv 1
236!        et u v sur 850 700 500 200
237! if=3 on ecrit ph a 500 seulement au niv 1
238!      on ecrit u v t q a 850 700 500 200 au niv 3
239!      on ecrit ph  a 500   au niv 3
240
241                                             
242  type(ctrl_out),dimension(4) :: o_uSTDlevs     = (/ ctrl_out((/ 1, 1, 3, 10, 10 /),'u850'), &
243                                                     ctrl_out((/ 1, 1, 3, 10, 10 /),'u700'), &
244                                                     ctrl_out((/ 1, 1, 3, 10, 10 /),'u500'), &
245                                                     ctrl_out((/ 1, 1, 3, 10, 10 /),'u200') /)
246
247  type(ctrl_out),dimension(4) :: o_vSTDlevs     = (/ ctrl_out((/ 1, 1, 3, 10, 10 /),'v850'), &
248                                                     ctrl_out((/ 1, 1, 3, 10, 10 /),'v700'), &
249                                                     ctrl_out((/ 1, 1, 3, 10, 10 /),'v500'), &
250                                                     ctrl_out((/ 1, 1, 3, 10, 10 /),'v200') /)
251
252  type(ctrl_out),dimension(4) :: o_wSTDlevs     = (/ ctrl_out((/ 1, 1, 3, 10, 10 /),'w850'), &
253                                                     ctrl_out((/ 1, 1, 3, 10, 10 /),'w700'), &
254                                                     ctrl_out((/ 1, 1, 3, 10, 10 /),'w500'), &
255                                                     ctrl_out((/ 1, 1, 3, 10, 10 /),'w200') /)
256
257  type(ctrl_out),dimension(4) :: o_tSTDlevs     = (/ ctrl_out((/ 1, 1, 3, 10, 10 /),'t850'), &
258                                                     ctrl_out((/ 1, 1, 3, 10, 10 /),'t700'), &
259                                                     ctrl_out((/ 1, 1, 3, 10, 10 /),'t500'), &
260                                                     ctrl_out((/ 1, 1, 3, 10, 10 /),'t200') /)
261
262  type(ctrl_out),dimension(4) :: o_qSTDlevs     = (/ ctrl_out((/ 1, 1, 3, 10, 10 /),'q850'), &
263                                                     ctrl_out((/ 1, 1, 3, 10, 10 /),'q700'), &
264                                                     ctrl_out((/ 1, 1, 3, 10, 10 /),'q500'), &
265                                                     ctrl_out((/ 1, 1, 3, 10, 10 /),'q200') /)
266
267  type(ctrl_out),dimension(4) :: o_phiSTDlevs   = (/ ctrl_out((/ 1, 1, 3, 10, 10 /),'phi850'), &
268                                                     ctrl_out((/ 1, 1, 3, 10, 10 /),'phi700'), &
269                                                     ctrl_out((/ 1, 1, 3, 10, 10 /),'phi500'), &
270                                                     ctrl_out((/ 1, 1, 3, 10, 10 /),'phi200') /)
271
272
273  type(ctrl_out) :: o_t_oce_sic    = ctrl_out((/ 1, 10, 10, 10, 10 /),'t_oce_sic')
274
275  type(ctrl_out) :: o_weakinv      = ctrl_out((/ 10, 1, 10, 10, 10 /),'weakinv')
276  type(ctrl_out) :: o_dthmin       = ctrl_out((/ 10, 1, 10, 10, 10 /),'dthmin')
277  type(ctrl_out),dimension(4) :: o_u10_srf      = (/ ctrl_out((/ 10, 4, 10, 10, 10 /),'u10_ter'), &
278                                                 ctrl_out((/ 10, 4, 10, 10, 10 /),'u10_lic'), &
279                                                 ctrl_out((/ 10, 4, 10, 10, 10 /),'u10_oce'), &
280                                                 ctrl_out((/ 10, 4, 10, 10, 10 /),'u10_sic') /)
281
282  type(ctrl_out),dimension(4) :: o_v10_srf      = (/ ctrl_out((/ 10, 4, 10, 10, 10 /),'v10_ter'), &
283                                                 ctrl_out((/ 10, 4, 10, 10, 10 /),'v10_lic'), &
284                                                 ctrl_out((/ 10, 4, 10, 10, 10 /),'v10_oce'), &
285                                                 ctrl_out((/ 10, 4, 10, 10, 10 /),'v10_sic') /)
286  type(ctrl_out) :: o_cldtau       = ctrl_out((/ 10, 5, 10, 10, 10 /),'cldtau')                     
287  type(ctrl_out) :: o_cldemi       = ctrl_out((/ 10, 5, 10, 10, 10 /),'cldemi')
288  type(ctrl_out) :: o_rh2m         = ctrl_out((/ 10, 5, 10, 10, 10 /),'rh2m')
289  type(ctrl_out) :: o_qsat2m       = ctrl_out((/ 10, 5, 10, 10, 10 /),'qsat2m')
290  type(ctrl_out) :: o_tpot         = ctrl_out((/ 10, 5, 10, 10, 10 /),'tpot')
291  type(ctrl_out) :: o_tpote        = ctrl_out((/ 10, 5, 10, 10, 10 /),'tpote')
292  type(ctrl_out) :: o_tke          = ctrl_out((/ 4, 10, 10, 10, 10 /),'tke ')
293  type(ctrl_out) :: o_tke_max      = ctrl_out((/ 4, 10, 10, 10, 10 /),'tke_max')
294  type(ctrl_out),dimension(4) :: o_tke_srf      = (/ ctrl_out((/ 10, 4, 10, 10, 10 /),'tke_ter'), &
295                                                 ctrl_out((/ 10, 4, 10, 10, 10 /),'tke_lic'), &
296                                                 ctrl_out((/ 10, 4, 10, 10, 10 /),'tke_oce'), &
297                                                 ctrl_out((/ 10, 4, 10, 10, 10 /),'tke_sic') /)
298
299  type(ctrl_out),dimension(4) :: o_tke_max_srf      = (/ ctrl_out((/ 10, 4, 10, 10, 10 /),'tke_max_ter'), &
300                                                 ctrl_out((/ 10, 4, 10, 10, 10 /),'tke_max_lic'), &
301                                                 ctrl_out((/ 10, 4, 10, 10, 10 /),'tke_max_oce'), &
302                                                 ctrl_out((/ 10, 4, 10, 10, 10 /),'tke_max_sic') /)
303
304  type(ctrl_out) :: o_kz           = ctrl_out((/ 4, 10, 10, 10, 10 /),'kz')
305  type(ctrl_out) :: o_kz_max       = ctrl_out((/ 4, 10, 10, 10, 10 /),'kz_max')
306  type(ctrl_out) :: o_SWnetOR      = ctrl_out((/ 10, 10, 2, 10, 10 /),'SWnetOR')
307  type(ctrl_out) :: o_SWdownOR     = ctrl_out((/ 10, 10, 2, 10, 10 /),'SWdownOR')
308  type(ctrl_out) :: o_LWdownOR     = ctrl_out((/ 10, 10, 2, 10, 10 /),'LWdownOR')
309
310  type(ctrl_out) :: o_snowl        = ctrl_out((/ 10, 1, 10, 10, 10 /),'snowl')
311  type(ctrl_out) :: o_cape_max     = ctrl_out((/ 10, 1, 10, 10, 10 /),'cape_max')
312  type(ctrl_out) :: o_solldown     = ctrl_out((/ 10, 1, 10, 1, 10 /),'solldown')
313
314  type(ctrl_out) :: o_dtsvdfo      = ctrl_out((/ 10, 10, 10, 1, 10 /),'dtsvdfo')
315  type(ctrl_out) :: o_dtsvdft      = ctrl_out((/ 10, 10, 10, 1, 10 /),'dtsvdft')
316  type(ctrl_out) :: o_dtsvdfg      = ctrl_out((/ 10, 10, 10, 1, 10 /),'dtsvdfg')
317  type(ctrl_out) :: o_dtsvdfi      = ctrl_out((/ 10, 10, 10, 1, 10 /),'dtsvdfi')
318  type(ctrl_out) :: o_rugs         = ctrl_out((/ 10, 10, 10, 1, 1 /),'rugs')
319
320!!!!!!!!!!!!!!!!!!!!!! 3D !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
321  type(ctrl_out) :: o_lwcon        = ctrl_out((/ 2, 5, 10, 10, 1 /),'lwcon')
322  type(ctrl_out) :: o_iwcon        = ctrl_out((/ 2, 5, 10, 10, 10 /),'iwcon')
323  type(ctrl_out) :: o_temp         = ctrl_out((/ 2, 3, 4, 1, 1 /),'temp')
324  type(ctrl_out) :: o_theta        = ctrl_out((/ 2, 3, 4, 1, 1 /),'theta')
325  type(ctrl_out) :: o_ovap         = ctrl_out((/ 2, 3, 4, 1, 1 /),'ovap')
326  type(ctrl_out) :: o_wvapp        = ctrl_out((/ 2, 10, 10, 10, 10 /),'wvapp')
327  type(ctrl_out) :: o_geop         = ctrl_out((/ 2, 3, 10, 1, 1 /),'geop')
328  type(ctrl_out) :: o_vitu         = ctrl_out((/ 2, 3, 4, 1, 1 /),'vitu')
329  type(ctrl_out) :: o_vitv         = ctrl_out((/ 2, 3, 4, 1, 1 /),'vitv')
330  type(ctrl_out) :: o_vitw         = ctrl_out((/ 2, 3, 10, 10, 1 /),'vitw')
331  type(ctrl_out) :: o_pres         = ctrl_out((/ 2, 3, 10, 1, 1 /),'pres')
332  type(ctrl_out) :: o_rneb         = ctrl_out((/ 2, 5, 10, 10, 1 /),'rneb')
333  type(ctrl_out) :: o_rnebcon      = ctrl_out((/ 2, 5, 10, 10, 1 /),'rnebcon')
334  type(ctrl_out) :: o_rhum         = ctrl_out((/ 2, 10, 10, 10, 10 /),'rhum')
335  type(ctrl_out) :: o_ozone        = ctrl_out((/ 2, 10, 10, 10, 10 /),'ozone')
336  type(ctrl_out) :: o_upwd         = ctrl_out((/ 2, 10, 10, 10, 10 /),'upwd')
337  type(ctrl_out) :: o_dtphy        = ctrl_out((/ 2, 10, 10, 10, 1 /),'dtphy')
338  type(ctrl_out) :: o_dqphy        = ctrl_out((/ 2, 10, 10, 10, 1 /),'dqphy')
339  type(ctrl_out) :: o_pr_con_l     = ctrl_out((/ 2, 10, 10, 10, 10 /),'pr_con_l')
340  type(ctrl_out) :: o_pr_con_i     = ctrl_out((/ 2, 10, 10, 10, 10 /),'pr_con_i')
341  type(ctrl_out) :: o_pr_lsc_l     = ctrl_out((/ 2, 10, 10, 10, 10 /),'pr_lsc_l')
342  type(ctrl_out) :: o_pr_lsc_i     = ctrl_out((/ 2, 10, 10, 10, 10 /),'pr_lsc_i')
343!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
344
345  type(ctrl_out),dimension(4) :: o_albe_srf     = (/ ctrl_out((/ 3, 4, 10, 1, 10 /),'albe_ter'), &
346                                                 ctrl_out((/ 3, 4, 10, 1, 10 /),'albe_lic'), &
347                                                 ctrl_out((/ 3, 4, 10, 1, 10 /),'albe_oce'), &
348                                                 ctrl_out((/ 3, 4, 10, 1, 10 /),'albe_sic') /)
349
350  type(ctrl_out),dimension(4) :: o_ages_srf     = (/ ctrl_out((/ 3, 10, 10, 10, 10 /),'ages_ter'), &
351                                                 ctrl_out((/ 3, 10, 10, 10, 10 /),'ages_lic'), &
352                                                 ctrl_out((/ 3, 10, 10, 10, 10 /),'ages_oce'), &
353                                                 ctrl_out((/ 3, 10, 10, 10, 10 /),'ages_sic') /)
354
355  type(ctrl_out),dimension(4) :: o_rugs_srf     = (/ ctrl_out((/ 3, 4, 10, 1, 10 /),'rugs_ter'), &
356                                                 ctrl_out((/ 3, 4, 10, 1, 10 /),'rugs_lic'), &
357                                                 ctrl_out((/ 3, 4, 10, 1, 10 /),'rugs_oce'), &
358                                                 ctrl_out((/ 3, 4, 10, 1, 10 /),'rugs_sic') /)
359
360  type(ctrl_out) :: o_albs         = ctrl_out((/ 3, 10, 10, 1, 10 /),'albs')
361  type(ctrl_out) :: o_albslw       = ctrl_out((/ 3, 10, 10, 1, 10 /),'albslw')
362
363  type(ctrl_out) :: o_clwcon       = ctrl_out((/ 4, 10, 10, 10, 10 /),'clwcon')
364  type(ctrl_out) :: o_Ma           = ctrl_out((/ 4, 10, 10, 10, 10 /),'Ma')
365  type(ctrl_out) :: o_dnwd         = ctrl_out((/ 4, 10, 10, 10, 10 /),'dnwd')
366  type(ctrl_out) :: o_dnwd0        = ctrl_out((/ 4, 10, 10, 10, 10 /),'dnwd0')
367  type(ctrl_out) :: o_dtdyn        = ctrl_out((/ 4, 10, 10, 10, 1 /),'dtdyn')
368  type(ctrl_out) :: o_dqdyn        = ctrl_out((/ 4, 10, 10, 10, 1 /),'dqdyn')
369  type(ctrl_out) :: o_dudyn        = ctrl_out((/ 4, 10, 10, 10, 1 /),'dudyn')  !AXC
370  type(ctrl_out) :: o_dvdyn        = ctrl_out((/ 4, 10, 10, 10, 1 /),'dvdyn')  !AXC
371  type(ctrl_out) :: o_dtcon        = ctrl_out((/ 4, 5, 10, 10, 10 /),'dtcon')
372  type(ctrl_out) :: o_ducon        = ctrl_out((/ 4, 10, 10, 10, 10 /),'ducon')
373  type(ctrl_out) :: o_dqcon        = ctrl_out((/ 4, 5, 10, 10, 10 /),'dqcon')
374  type(ctrl_out) :: o_dtwak        = ctrl_out((/ 4, 5, 10, 10, 10 /),'dtwak')
375  type(ctrl_out) :: o_dqwak        = ctrl_out((/ 4, 5, 10, 10, 10 /),'dqwak')
376  type(ctrl_out) :: o_wake_h       = ctrl_out((/ 4, 5, 10, 10, 10 /),'wake_h')
377  type(ctrl_out) :: o_wake_s       = ctrl_out((/ 4, 5, 10, 10, 10 /),'wake_s')
378  type(ctrl_out) :: o_wake_deltat  = ctrl_out((/ 4, 5, 10, 10, 10 /),'wake_deltat')
379  type(ctrl_out) :: o_wake_deltaq  = ctrl_out((/ 4, 5, 10, 10, 10 /),'wake_deltaq')
380  type(ctrl_out) :: o_wake_omg     = ctrl_out((/ 4, 5, 10, 10, 10 /),'wake_omg')
381  type(ctrl_out) :: o_Vprecip      = ctrl_out((/ 10, 10, 10, 10, 10 /),'Vprecip')
382  type(ctrl_out) :: o_ftd          = ctrl_out((/ 4, 5, 10, 10, 10 /),'ftd')
383  type(ctrl_out) :: o_fqd          = ctrl_out((/ 4, 5, 10, 10, 10 /),'fqd')
384  type(ctrl_out) :: o_dtlsc        = ctrl_out((/ 4, 10, 10, 10, 10 /),'dtlsc')
385  type(ctrl_out) :: o_dtlschr      = ctrl_out((/ 4, 10, 10, 10, 10 /),'dtlschr')
386  type(ctrl_out) :: o_dqlsc        = ctrl_out((/ 4, 10, 10, 10, 10 /),'dqlsc')
387  type(ctrl_out) :: o_dtvdf        = ctrl_out((/ 4, 10, 10, 1, 10 /),'dtvdf')
388  type(ctrl_out) :: o_dqvdf        = ctrl_out((/ 4, 10, 10, 1, 10 /),'dqvdf')
389  type(ctrl_out) :: o_dteva        = ctrl_out((/ 4, 10, 10, 10, 10 /),'dteva')
390  type(ctrl_out) :: o_dqeva        = ctrl_out((/ 4, 10, 10, 10, 10 /),'dqeva')
391  type(ctrl_out) :: o_ptconv       = ctrl_out((/ 4, 10, 10, 10, 10 /),'ptconv')
392  type(ctrl_out) :: o_ratqs        = ctrl_out((/ 4, 10, 10, 10, 10 /),'ratqs')
393  type(ctrl_out) :: o_dtthe        = ctrl_out((/ 4, 10, 10, 10, 10 /),'dtthe')
394  type(ctrl_out) :: o_f_th         = ctrl_out((/ 4, 10, 10, 10, 10 /),'f_th')
395  type(ctrl_out) :: o_e_th         = ctrl_out((/ 4, 10, 10, 10, 10 /),'e_th')
396  type(ctrl_out) :: o_w_th         = ctrl_out((/ 4, 10, 10, 10, 10 /),'w_th')
397  type(ctrl_out) :: o_lambda_th    = ctrl_out((/ 4, 10, 10, 10, 10 /),'lambda_th')
398  type(ctrl_out) :: o_q_th         = ctrl_out((/ 4, 10, 10, 10, 10 /),'q_th')
399  type(ctrl_out) :: o_a_th         = ctrl_out((/ 4, 10, 10, 10, 10 /),'a_th')
400  type(ctrl_out) :: o_d_th         = ctrl_out((/ 4, 10, 10, 10, 10 /),'d_th')
401  type(ctrl_out) :: o_f0_th        = ctrl_out((/ 4, 10, 10, 10, 10 /),'f0_th')
402  type(ctrl_out) :: o_zmax_th      = ctrl_out((/ 4, 10, 10, 10, 10 /),'zmax_th')
403  type(ctrl_out) :: o_dqthe        = ctrl_out((/ 4, 10, 10, 10, 1 /),'dqthe')
404  type(ctrl_out) :: o_dtajs        = ctrl_out((/ 4, 10, 10, 10, 10 /),'dtajs')
405  type(ctrl_out) :: o_dqajs        = ctrl_out((/ 4, 10, 10, 10, 10 /),'dqajs')
406  type(ctrl_out) :: o_dtswr        = ctrl_out((/ 4, 10, 10, 10, 1 /),'dtswr')
407  type(ctrl_out) :: o_dtsw0        = ctrl_out((/ 4, 10, 10, 10, 10 /),'dtsw0')
408  type(ctrl_out) :: o_dtlwr        = ctrl_out((/ 4, 10, 10, 10, 1 /),'dtlwr')
409  type(ctrl_out) :: o_dtlw0        = ctrl_out((/ 4, 10, 10, 10, 10 /),'dtlw0')
410  type(ctrl_out) :: o_dtec         = ctrl_out((/ 4, 10, 10, 10, 10 /),'dtec')
411  type(ctrl_out) :: o_duvdf        = ctrl_out((/ 4, 10, 10, 10, 10 /),'duvdf')
412  type(ctrl_out) :: o_dvvdf        = ctrl_out((/ 4, 10, 10, 10, 10 /),'dvvdf')
413  type(ctrl_out) :: o_duoro        = ctrl_out((/ 4, 10, 10, 10, 10 /),'duoro')
414  type(ctrl_out) :: o_dvoro        = ctrl_out((/ 4, 10, 10, 10, 10 /),'dvoro')
415  type(ctrl_out) :: o_dulif        = ctrl_out((/ 4, 10, 10, 10, 10 /),'dulif')
416  type(ctrl_out) :: o_dvlif        = ctrl_out((/ 4, 10, 10, 10, 10 /),'dvlif')
417
418! Attention a refaire correctement
419  type(ctrl_out),dimension(2) :: o_trac         = (/ ctrl_out((/ 4, 10, 10, 10, 10 /),'trac01'), &
420                                                     ctrl_out((/ 4, 10, 10, 10, 10 /),'trac02') /)
421    CONTAINS
422
423!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
424!!!!!!!!! Ouverture des fichier et definition des variable de sortie !!!!!!!!
425!! histbeg, histvert et histdef
426!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
427 
428  SUBROUTINE phys_output_open(jjmp1,nqmax,nlevSTD,clevSTD,nbteta, &
429                              ctetaSTD,dtime, presnivs, ok_veget, &
430                              ocean, iflag_pbl,ok_mensuel,ok_journe, &
431                              ok_hf,ok_instan,ok_LES)   
432
433  USE iophy
434  USE dimphy
435  USE ioipsl
436  USE mod_phys_lmdz_para
437
438  IMPLICIT NONE
439  include "dimensions.h"
440  include "temps.h"
441  include "indicesol.h"
442  include "advtrac.h"
443  include "clesphys.h"
444  include "thermcell.h"
445
446  integer                               :: jjmp1, nqmax
447  integer                               :: nbteta, nlevSTD, radpas
448  logical                               :: ok_mensuel, ok_journe, ok_hf, ok_instan
449  logical                               :: ok_LES
450  real                                  :: dtime
451  integer                               :: idayref
452  real                                  :: zjulian
453  real, dimension(klev)                 :: presnivs
454  character(len=4), dimension(nlevSTD)  :: clevSTD
455  integer                               :: nsrf, k, iq, iiq, iff, i, j, ilev
456  logical                               :: ok_veget
457  integer                               :: iflag_pbl
458  CHARACTER(len=3)                      :: bb2
459  CHARACTER(len=2)                      :: bb3
460  character(len=6)                      :: ocean
461  CHARACTER(len=3)                      :: ctetaSTD(nbteta)
462  real, dimension(nfiles)               :: ecrit_files
463  CHARACTER(len=20), dimension(nfiles)  :: name_files
464  INTEGER, dimension(iim*jjmp1)         ::  ndex2d
465  INTEGER, dimension(iim*jjmp1*klev)    :: ndex3d
466  integer                               :: imin_ins, imax_ins
467  integer                               :: jmin_ins, jmax_ins
468
469!!!!!!!!!! stockage dans une region limitee pour chaque fichier !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
470!                 entre [lonmin_reg,lonmax_reg] et [latmin_reg,latmax_reg]
471
472  logical, dimension(nfiles), save  :: ok_reglim         = (/ .false., .false., .false., .false., .true. /)
473  real, dimension(nfiles), save     :: lonmin_reg        = (/ 0., -45., 0., 0., -162. /)
474  real, dimension(nfiles), save     :: lonmax_reg        = (/ 90., 45., 90., 90., -144. /)
475  real, dimension(nfiles), save     :: latmin_reg        = (/ 0., -45., 0., 0., 7. /)
476  real, dimension(nfiles), save     :: latmax_reg        = (/ 90., 90., 90., 90., 21. /)
477
478   levmax = (/ klev, klev, klev, klev, 17 /)
479
480   name_files(1) = 'histmth'
481   name_files(2) = 'histday'
482   name_files(3) = 'histhf'
483   name_files(4) = 'histins'
484   name_files(5) = 'histLES'
485
486   type_ecri(1) = 'ave(X)'
487   type_ecri(2) = 'ave(X)'
488   type_ecri(3) = 'ave(X)'
489   type_ecri(4) = 'inst(X)'
490   type_ecri(5) = 'ave(X)'
491
492   clef_files(1) = ok_mensuel
493   clef_files(2) = ok_journe
494   clef_files(3) = ok_hf
495   clef_files(4) = ok_instan
496   clef_files(5) = ok_LES
497
498   lev_files(1) = lev_histmth
499   lev_files(2) = lev_histday
500   lev_files(3) = lev_histhf
501   lev_files(4) = 1
502   lev_files(5) = 1
503
504   ecrit_files(1) = ecrit_mth
505   ecrit_files(2) = ecrit_day
506   ecrit_files(3) = ecrit_hf
507   ecrit_files(4) = ecrit_ins
508   ecrit_files(5) = ecrit_LES
509 
510!!!!!!!!!!!!!!!!!!!!!!! Boucle sur les fichiers !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
511! Appel de histbeg et histvert pour creer le fichier et les niveaux verticaux !!
512! Appel des histbeg pour definir les variables (nom, moy ou inst, freq de sortie ..
513!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
514
515 DO iff=1,nfiles
516
517    IF (clef_files(iff)) THEN
518     
519      zstophym(iff) = dtime         ! Frequence ou l on moyenne
520      zoutm(iff) = ecrit_files(iff) ! Frequence ou l on ecrit
521
522      idayref = day_ref
523      CALL ymds2ju(annee_ref, 1, idayref, 0.0, zjulian)
524
525!!!!!!!!!!!!!!!!! Traitement dans le cas ou l'on veut stocker sur un domaine limite !!
526!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
527     if (ok_reglim(iff)) then
528
529        imin_ins=1
530        imax_ins=iim
531        jmin_ins=1
532        jmax_ins=jjmp1
533
534! correction abderr        do i=1,iim-1
535        do i=1,iim
536           print*,'io_lon(i)=',io_lon(i)
537           if (io_lon(i).le.lonmin_reg(iff)) imin_ins=i
538           if (io_lon(i).le.lonmax_reg(iff)) imax_ins=i
539        enddo
540
541        do j=1,jjmp1-1
542            print*,'io_lat(j)=',io_lat(j)
543            if (io_lat(j).ge.latmin_reg(iff)) jmax_ins=j+1
544            if (io_lat(j).ge.latmax_reg(iff)) jmin_ins=j
545        enddo
546
547         print*,'On stoke le fichier hist sur, ', &
548         imin_ins,imax_ins,jmin_ins,jmax_ins
549         print*,'On stoke le fichier instantanne sur, ', &
550         io_lon(imin_ins),io_lon(imax_ins), &
551         io_lat(jmin_ins),io_lat(jmax_ins)
552
553 CALL histbeg(name_files(iff),iim,io_lon,jjmp1,io_lat, &
554              imin_ins,imax_ins-imin_ins+1, &
555              jmin_ins,jmax_ins-jmin_ins+1, &
556              itau_phy,zjulian,dtime,nhorim(iff),nid_files(iff))
557!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
558       else
559 CALL histbeg_phy(name_files(iff),itau_phy,zjulian,dtime,nhorim(iff),nid_files(iff))
560       endif
561 
562      CALL histvert(nid_files(iff), "presnivs", "Vertical levels", "mb", &
563           levmax(iff) - levmin(iff) + 1, &
564           presnivs(levmin(iff):levmax(iff))/100., nvertm(iff))
565
566!!!!!!!!!!!!! Traitement des champs 3D pour histhf !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
567!!!!!!!!!!!!!!! A Revoir plus tard !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
568!          IF (iff.eq.3.and.lev_files(iff).ge.4) THEN
569!          CALL histbeg_phy("histhf3d",itau_phy, &
570!     &                     zjulian, dtime, &
571!     &                     nhorim, nid_hf3d)
572
573!         CALL histvert(nid_hf3d, "presnivs", &
574!     &                 "Vertical levels", "mb", &
575!     &                 klev, presnivs/100., nvertm)
576!          ENDIF
577
578!!! Champs 1D !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
579 CALL histdef2d(iff,o_phis%flag,o_phis%name,"Surface geop.height", "m2/s2")
580   type_ecri(1) = 'once'
581   type_ecri(2) = 'once'
582   type_ecri(3) = 'once'
583   type_ecri(4) = 'once'
584 CALL histdef2d(iff,o_aire%flag,o_aire%name,"Grid area", "-")
585 CALL histdef2d(iff,o_contfracATM%flag,o_contfracATM%name,"% sfce ter+lic", "-")
586   type_ecri(1) = 'ave(X)'
587   type_ecri(2) = 'ave(X)'
588   type_ecri(3) = 'ave(X)'
589   type_ecri(4) = 'inst(X)'
590
591!!! Champs 2D !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
592 CALL histdef2d(iff,o_contfracOR%flag,o_contfracOR%name,"% sfce terre OR", "-" )
593 CALL histdef2d(iff,o_aireTER%flag,o_aireTER%name,"Grid area CONT", "-" )
594 CALL histdef2d(iff,o_flat%flag,o_flat%name, "Latent heat flux", "W/m2")
595 CALL histdef2d(iff,o_slp%flag,o_slp%name, "Sea Level Pressure", "Pa" )
596 CALL histdef2d(iff,o_tsol%flag,o_tsol%name, "Surface Temperature", "K")
597 CALL histdef2d(iff,o_t2m%flag,o_t2m%name, "Temperature 2m", "K" )
598 CALL histdef2d(iff,o_t2m_min%flag,o_t2m_min%name, "Temp 2m min", "K" )
599 CALL histdef2d(iff,o_t2m_max%flag,o_t2m_max%name, "Temp 2m max", "K" )
600 CALL histdef2d(iff,o_wind10m%flag,o_wind10m%name, "10-m wind speed", "m/s")
601 CALL histdef2d(iff,o_wind10max%flag,o_wind10max%name, "10m wind speed max", "m/s")
602 CALL histdef2d(iff,o_sicf%flag,o_sicf%name, "Sea-ice fraction", "-" )
603 CALL histdef2d(iff,o_q2m%flag,o_q2m%name, "Specific humidity 2m", "kg/kg")
604 CALL histdef2d(iff,o_u10m%flag,o_u10m%name, "Vent zonal 10m", "m/s" )
605 CALL histdef2d(iff,o_v10m%flag,o_v10m%name, "Vent meridien 10m", "m/s")
606 CALL histdef2d(iff,o_psol%flag,o_psol%name, "Surface Pressure", "Pa" )
607 CALL histdef2d(iff,o_qsurf%flag,o_qsurf%name, "Surface Air humidity", "kg/kg")
608
609  if (.not. ok_veget) then
610 CALL histdef2d(iff,o_qsol%flag,o_qsol%name, "Soil watter content", "mm" )
611  endif
612
613 CALL histdef2d(iff,o_ndayrain%flag,o_ndayrain%name, "Number of dayrain(liq+sol)", "-")
614 CALL histdef2d(iff,o_precip%flag,o_precip%name, "Precip Totale liq+sol", "kg/(s*m2)" )
615 CALL histdef2d(iff,o_plul%flag,o_plul%name, "Large-scale Precip.", "kg/(s*m2)")
616 CALL histdef2d(iff,o_pluc%flag,o_pluc%name, "Convective Precip.", "kg/(s*m2)")
617 CALL histdef2d(iff,o_snow%flag,o_snow%name, "Snow fall", "kg/(s*m2)" )
618 CALL histdef2d(iff,o_evap%flag,o_evap%name, "Evaporat", "kg/(s*m2)" )
619 CALL histdef2d(iff,o_tops%flag,o_tops%name, "Solar rad. at TOA", "W/m2")
620 CALL histdef2d(iff,o_tops0%flag,o_tops0%name, "CS Solar rad. at TOA", "W/m2")
621 CALL histdef2d(iff,o_topl%flag,o_topl%name, "IR rad. at TOA", "W/m2" )
622 CALL histdef2d(iff,o_topl0%flag,o_topl0%name, "IR rad. at TOA", "W/m2")
623 CALL histdef2d(iff,o_SWupTOA%flag,o_SWupTOA%name, "SWup at TOA", "W/m2")
624 CALL histdef2d(iff,o_SWupTOAclr%flag,o_SWupTOAclr%name, "SWup clear sky at TOA", "W/m2")
625 CALL histdef2d(iff,o_SWdnTOA%flag,o_SWdnTOA%name, "SWdn at TOA", "W/m2" )
626 CALL histdef2d(iff,o_SWdnTOAclr%flag,o_SWdnTOAclr%name, "SWdn clear sky at TOA", "W/m2")
627 CALL histdef2d(iff,o_SWup200%flag,o_SWup200%name, "SWup at 200mb", "W/m2" )
628 CALL histdef2d(iff,o_SWup200clr%flag,o_SWup200clr%name, "SWup clear sky at 200mb", "W/m2")
629 CALL histdef2d(iff,o_SWdn200%flag,o_SWdn200%name, "SWdn at 200mb", "W/m2" )
630 CALL histdef2d(iff,o_SWdn200clr%flag,o_SWdn200clr%name, "SWdn clear sky at 200mb", "W/m2")
631 CALL histdef2d(iff,o_LWup200%flag,o_LWup200%name, "LWup at 200mb", "W/m2")
632 CALL histdef2d(iff,o_LWup200clr%flag,o_LWup200clr%name, "LWup clear sky at 200mb", "W/m2")
633 CALL histdef2d(iff,o_LWdn200%flag,o_LWdn200%name, "LWdn at 200mb", "W/m2")
634 CALL histdef2d(iff,o_LWdn200clr%flag,o_LWdn200clr%name, "LWdn clear sky at 200mb", "W/m2")
635 CALL histdef2d(iff,o_sols%flag,o_sols%name, "Solar rad. at surf.", "W/m2")
636 CALL histdef2d(iff,o_sols0%flag,o_sols0%name, "Solar rad. at surf.", "W/m2")
637 CALL histdef2d(iff,o_soll%flag,o_soll%name, "IR rad. at surface", "W/m2") 
638 CALL histdef2d(iff,o_radsol%flag,o_radsol%name, "Rayonnement au sol", "W/m2")
639 CALL histdef2d(iff,o_soll0%flag,o_soll0%name, "IR rad. at surface", "W/m2")
640 CALL histdef2d(iff,o_SWupSFC%flag,o_SWupSFC%name, "SWup at surface", "W/m2")
641 CALL histdef2d(iff,o_SWupSFCclr%flag,o_SWupSFCclr%name, "SWup clear sky at surface", "W/m2")
642 CALL histdef2d(iff,o_SWdnSFC%flag,o_SWdnSFC%name, "SWdn at surface", "W/m2")
643 CALL histdef2d(iff,o_SWdnSFCclr%flag,o_SWdnSFCclr%name, "SWdn clear sky at surface", "W/m2")
644 CALL histdef2d(iff,o_LWupSFC%flag,o_LWupSFC%name, "Upwd. IR rad. at surface", "W/m2")
645 CALL histdef2d(iff,o_LWdnSFC%flag,o_LWdnSFC%name, "Down. IR rad. at surface", "W/m2")
646 CALL histdef2d(iff,o_LWupSFCclr%flag,o_LWupSFCclr%name, "CS Upwd. IR rad. at surface", "W/m2")
647 CALL histdef2d(iff,o_LWdnSFCclr%flag,o_LWdnSFCclr%name, "Down. CS IR rad. at surface", "W/m2")
648 CALL histdef2d(iff,o_bils%flag,o_bils%name, "Surf. total heat flux", "W/m2")
649 CALL histdef2d(iff,o_sens%flag,o_sens%name, "Sensible heat flux", "W/m2")
650 CALL histdef2d(iff,o_fder%flag,o_fder%name, "Heat flux derivation", "W/m2")
651 CALL histdef2d(iff,o_ffonte%flag,o_ffonte%name, "Thermal flux for snow melting", "W/m2")
652 CALL histdef2d(iff,o_fqcalving%flag,o_fqcalving%name, "Ice Calving", "kg/m2/s")
653 CALL histdef2d(iff,o_fqfonte%flag,o_fqfonte%name, "Land ice melt", "kg/m2/s")
654
655     DO nsrf = 1, nbsrf
656 CALL histdef2d(iff,o_pourc_srf(nsrf)%flag,o_pourc_srf(nsrf)%name,"% "//clnsurf(nsrf),"%")
657 CALL histdef2d(iff,o_fract_srf(nsrf)%flag,o_fract_srf(nsrf)%name,"Fraction "//clnsurf(nsrf),"1")
658 CALL histdef2d(iff,o_taux_srf(nsrf)%flag,o_taux_srf(nsrf)%name,"Zonal wind stress"//clnsurf(nsrf),"Pa")
659 CALL histdef2d(iff,o_tauy_srf(nsrf)%flag,o_tauy_srf(nsrf)%name,"Meridional wind stress "//clnsurf(nsrf),"Pa")
660 CALL histdef2d(iff,o_tsol_srf(nsrf)%flag,o_tsol_srf(nsrf)%name,"Temperature "//clnsurf(nsrf),"K")
661 CALL histdef2d(iff,o_u10m_srf(nsrf)%flag,o_u10m_srf(nsrf)%name,"Vent Zonal 10m "//clnsurf(nsrf),"m/s")
662 CALL histdef2d(iff,o_v10m_srf(nsrf)%flag,o_v10m_srf(nsrf)%name,"Vent meredien 10m "//clnsurf(nsrf),"m/s")
663 CALL histdef2d(iff,o_t2m_srf(nsrf)%flag,o_t2m_srf(nsrf)%name,"Temp 2m "//clnsurf(nsrf),"K")
664 CALL histdef2d(iff,o_sens_srf(nsrf)%flag,o_sens_srf(nsrf)%name,"Sensible heat flux "//clnsurf(nsrf),"W/m2")
665 CALL histdef2d(iff,o_lat_srf(nsrf)%flag,o_lat_srf(nsrf)%name,"Latent heat flux "//clnsurf(nsrf),"W/m2")
666 CALL histdef2d(iff,o_flw_srf(nsrf)%flag,o_flw_srf(nsrf)%name,"LW "//clnsurf(nsrf),"W/m2")
667 CALL histdef2d(iff,o_fsw_srf(nsrf)%flag,o_fsw_srf(nsrf)%name,"SW "//clnsurf(nsrf),"W/m2")
668 CALL histdef2d(iff,o_wbils_srf(nsrf)%flag,o_wbils_srf(nsrf)%name,"Bilan sol "//clnsurf(nsrf),"W/m2" )
669 CALL histdef2d(iff,o_wbilo_srf(nsrf)%flag,o_wbilo_srf(nsrf)%name,"Bilan eau "//clnsurf(nsrf),"kg/(m2*s)")
670  if (iflag_pbl>1 .and. lev_files(iff).gt.10 ) then
671 CALL histdef2d(iff,o_tke_srf(nsrf)%flag,o_tke_srf(nsrf)%name,"Max Turb. Kinetic Energy "//clnsurf(nsrf),"-")
672 CALL histdef2d(iff,o_tke_max_srf(nsrf)%flag,o_tke_max_srf(nsrf)%name,"Max Turb. Kinetic Energy "//clnsurf(nsrf),"-")
673  endif
674 CALL histdef2d(iff,o_albe_srf(nsrf)%flag,o_albe_srf(nsrf)%name,"Albedo surf. "//clnsurf(nsrf),"-")
675 CALL histdef2d(iff,o_rugs_srf(nsrf)%flag,o_rugs_srf(nsrf)%name,"Latent heat flux "//clnsurf(nsrf),"W/m2")
676 CALL histdef2d(iff,o_ages_srf(nsrf)%flag,o_ages_srf(nsrf)%name,"Snow age", "day")
677     END DO
678
679 CALL histdef2d(iff,o_albs%flag,o_albs%name, "Surface albedo", "-")
680 CALL histdef2d(iff,o_albslw%flag,o_albslw%name, "Surface albedo LW", "-")
681 CALL histdef2d(iff,o_cdrm%flag,o_cdrm%name, "Momentum drag coef.", "-")
682 CALL histdef2d(iff,o_cdrh%flag,o_cdrh%name, "Heat drag coef.", "-" )
683 CALL histdef2d(iff,o_cldl%flag,o_cldl%name, "Low-level cloudiness", "-")
684 CALL histdef2d(iff,o_cldm%flag,o_cldm%name, "Mid-level cloudiness", "-")
685 CALL histdef2d(iff,o_cldh%flag,o_cldh%name, "High-level cloudiness", "-")
686 CALL histdef2d(iff,o_cldt%flag,o_cldt%name, "Total cloudiness", "%")
687 CALL histdef2d(iff,o_cldq%flag,o_cldq%name, "Cloud liquid water path", "kg/m2")
688 CALL histdef2d(iff,o_lwp%flag,o_lwp%name, "Cloud water path", "kg/m2")
689 CALL histdef2d(iff,o_iwp%flag,o_iwp%name, "Cloud ice water path", "kg/m2" )
690 CALL histdef2d(iff,o_ue%flag,o_ue%name, "Zonal energy transport", "-")
691 CALL histdef2d(iff,o_ve%flag,o_ve%name, "Merid energy transport", "-")
692 CALL histdef2d(iff,o_uq%flag,o_uq%name, "Zonal humidity transport", "-")
693 CALL histdef2d(iff,o_vq%flag,o_vq%name, "Merid humidity transport", "-")
694
695     IF(iflag_con.GE.3) THEN ! sb
696 CALL histdef2d(iff,o_cape%flag,o_cape%name, "Conv avlbl pot ener", "J/kg")
697 CALL histdef2d(iff,o_pbase%flag,o_pbase%name, "Cld base pressure", "mb")
698 CALL histdef2d(iff,o_ptop%flag,o_ptop%name, "Cld top pressure", "mb")
699 CALL histdef2d(iff,o_fbase%flag,o_fbase%name, "Cld base mass flux", "kg/m2/s")
700 CALL histdef2d(iff,o_prw%flag,o_prw%name, "Precipitable water", "kg/m2")
701     ENDIF !iflag_con .GE. 3
702
703 CALL histdef2d(iff,o_s_pblh%flag,o_s_pblh%name, "Boundary Layer Height", "m")
704 CALL histdef2d(iff,o_s_pblt%flag,o_s_pblt%name, "t at Boundary Layer Height", "K")
705 CALL histdef2d(iff,o_s_lcl%flag,o_s_lcl%name, "Condensation level", "m")
706 CALL histdef2d(iff,o_s_capCL%flag,o_s_capCL%name, "Conv avlbl pot enerfor ABL", "J/m2" )
707 CALL histdef2d(iff,o_s_oliqCL%flag,o_s_oliqCL%name, "Liq Water in BL", "kg/m2")
708 CALL histdef2d(iff,o_s_cteiCL%flag,o_s_cteiCL%name, "Instability criteria(ABL)", "K")
709 CALL histdef2d(iff,o_s_therm%flag,o_s_therm%name, "Exces du thermique", "K")
710 CALL histdef2d(iff,o_s_trmb1%flag,o_s_trmb1%name, "deep_cape(HBTM2)", "J/m2")
711 CALL histdef2d(iff,o_s_trmb2%flag,o_s_trmb2%name, "inhibition (HBTM2)", "J/m2")
712 CALL histdef2d(iff,o_s_trmb3%flag,o_s_trmb3%name, "Point Omega (HBTM2)", "m")
713
714! Champs interpolles sur des niveaux de pression
715! iif=1 on ecrit u v w phi sur 850 700 500 200 au niv 1
716! iif=2 on ecrit w et ph 500 seulement au niv 1
717!        et u v sur 850 700 500 200
718! iif=3 on ecrit ph a 500 seulement au niv 1
719!      on ecrit u v t q a 850 700 500 200 au niv 3
720
721   zstophym(iff) = ecrit_files(iff)
722   type_ecri(1) = 'inst(X)'
723   type_ecri(2) = 'inst(X)'
724   type_ecri(3) = 'inst(X)'
725   type_ecri(4) = 'inst(X)'
726
727! Attention a reverifier
728
729        ilev=0       
730        DO k=1, nlevSTD
731     IF(k.GE.2.AND.k.LE.12) bb2=clevSTD(k)
732!     IF(k.GE.13.AND.k.LE.17) bb3=clevSTD(k)
733     IF(bb2.EQ."850".OR.bb2.EQ."700".OR.bb2.EQ."500".OR.bb2.EQ."200")THEN
734      ilev=ilev+1
735      print*,'ilev bb2 flag name ',ilev,bb2,o_uSTDlevs(ilev)%flag,o_uSTDlevs(ilev)%name
736 CALL histdef2d(iff,o_uSTDlevs(ilev)%flag,o_uSTDlevs(ilev)%name,"Zonal wind "//bb2//"mb", "m/s")
737 CALL histdef2d(iff,o_vSTDlevs(ilev)%flag,o_vSTDlevs(ilev)%name,"Meridional wind "//bb2//"mb", "m/s")
738 CALL histdef2d(iff,o_wSTDlevs(ilev)%flag,o_wSTDlevs(ilev)%name,"Vertical wind "//bb2//"mb", "Pa/s")
739 CALL histdef2d(iff,o_phiSTDlevs(ilev)%flag,o_phiSTDlevs(ilev)%name,"Geopotential "//bb2//"mb", "m")
740 CALL histdef2d(iff,o_qSTDlevs(ilev)%flag,o_qSTDlevs(ilev)%name,"Specific humidity "//bb2//"mb", "kg/kg" )
741 CALL histdef2d(iff,o_tSTDlevs(ilev)%flag,o_tSTDlevs(ilev)%name,"Temperature "//bb2//"mb", "K")
742     ENDIF !(bb2.EQ."850".OR.bb2.EQ."700".OR."500".OR.bb2.EQ."200")
743       ENDDO
744   zstophym(iff) = dtime
745   type_ecri(1) = 'ave(X)'
746   type_ecri(2) = 'ave(X)'
747   type_ecri(3) = 'ave(X)'
748   type_ecri(4) = 'inst(X)'
749
750 CALL histdef2d(iff,o_t_oce_sic%flag,o_t_oce_sic%name, "Temp mixte oce-sic", "K")
751
752 IF (ocean=='slab') &
753     CALL histdef2d(iff,o_slab_bils%flag, o_slab_bils%name,"Bilan au sol sur ocean slab", "W/m2")
754
755 IF (iflag_con.GE.3) THEN
756 CALL histdef2d(iff,o_ale_bl%flag,o_ale_bl%name, "ALE BL", "m2/s2")
757 CALL histdef2d(iff,o_alp_bl%flag,o_alp_bl%name, "ALP BL", "m2/s2")
758 CALL histdef2d(iff,o_ale_wk%flag,o_ale_wk%name, "ALE WK", "m2/s2")
759 CALL histdef2d(iff,o_alp_wk%flag,o_alp_wk%name, "ALP WK", "m2/s2")
760
761 CALL histdef2d(iff,o_ale%flag,o_ale%name, "ALE", "m2/s2")
762 CALL histdef2d(iff,o_alp%flag,o_alp%name, "ALP", "W/m2")
763 CALL histdef2d(iff,o_cin%flag,o_cin%name, "Convective INhibition", "m2/s2")
764 CALL histdef2d(iff,o_wape%flag,o_WAPE%name, "WAPE", "m2/s2")
765 ENDIF !(iflag_con.GE.3)
766
767 CALL histdef2d(iff,o_weakinv%flag,o_weakinv%name, "Weak inversion", "-")
768 CALL histdef2d(iff,o_dthmin%flag,o_dthmin%name, "dTheta mini", "K/m")
769 CALL histdef2d(iff,o_rh2m%flag,o_rh2m%name, "Relative humidity at 2m", "%" )
770 CALL histdef2d(iff,o_qsat2m%flag,o_qsat2m%name, "Saturant humidity at 2m", "%")
771 CALL histdef2d(iff,o_tpot%flag,o_tpot%name, "Surface air potential temperature", "K")
772 CALL histdef2d(iff,o_tpote%flag,o_tpote%name, "Surface air equivalent potential temperature", "K")
773 CALL histdef2d(iff,o_SWnetOR%flag,o_SWnetOR%name, "Sfce net SW radiation OR", "W/m2")
774 CALL histdef2d(iff,o_SWdownOR%flag,o_SWdownOR%name, "Sfce incident SW radiation OR", "W/m2")
775 CALL histdef2d(iff,o_LWdownOR%flag,o_LWdownOR%name, "Sfce incident LW radiation OR", "W/m2")
776 CALL histdef2d(iff,o_snowl%flag,o_snowl%name, "Solid Large-scale Precip.", "kg/(m2*s)")
777 IF (iflag_con.GE.3) THEN
778 CALL histdef2d(iff,o_cape_max%flag,o_cape_max%name, "CAPE max.", "J/kg")
779 ENDIF !(iflag_con.GE.3)
780 CALL histdef2d(iff,o_solldown%flag,o_solldown%name, "Down. IR rad. at surface", "W/m2")
781 CALL histdef2d(iff,o_dtsvdfo%flag,o_dtsvdfo%name, "Boundary-layer dTs(o)", "K/s")
782 CALL histdef2d(iff,o_dtsvdft%flag,o_dtsvdft%name, "Boundary-layer dTs(t)", "K/s")
783 CALL histdef2d(iff,o_dtsvdfg%flag,o_dtsvdfg%name, "Boundary-layer dTs(g)", "K/s")
784 CALL histdef2d(iff,o_dtsvdfi%flag,o_dtsvdfi%name, "Boundary-layer dTs(g)", "K/s")
785 CALL histdef2d(iff,o_rugs%flag,o_rugs%name, "rugosity", "-" )
786
787! Champs 3D:
788 CALL histdef3d(iff,o_lwcon%flag,o_lwcon%name, "Cloud liquid water content", "kg/kg")
789 CALL histdef3d(iff,o_iwcon%flag,o_iwcon%name, "Cloud ice water content", "kg/kg")
790 CALL histdef3d(iff,o_temp%flag,o_temp%name, "Air temperature", "K" )
791 CALL histdef3d(iff,o_theta%flag,o_theta%name, "Potential air temperature", "K" )
792 CALL histdef3d(iff,o_ovap%flag,o_ovap%name, "Specific humidity", "kg/kg" )
793 CALL histdef3d(iff,o_geop%flag,o_geop%name, "Geopotential height", "m2/s2")
794 CALL histdef3d(iff,o_vitu%flag,o_vitu%name, "Zonal wind", "m/s" )
795 CALL histdef3d(iff,o_vitv%flag,o_vitv%name, "Meridional wind", "m/s" )
796 CALL histdef3d(iff,o_vitw%flag,o_vitw%name, "Vertical wind", "Pa/s" )
797 CALL histdef3d(iff,o_pres%flag,o_pres%name, "Air pressure", "Pa" )
798 CALL histdef3d(iff,o_rneb%flag,o_rneb%name, "Cloud fraction", "-")
799 CALL histdef3d(iff,o_rnebcon%flag,o_rnebcon%name, "Convective Cloud Fraction", "-")
800 CALL histdef3d(iff,o_rhum%flag,o_rhum%name, "Relative humidity", "-")
801 CALL histdef3d(iff,o_ozone%flag,o_ozone%name, "Ozone concentration", "ppmv")
802 IF(iflag_con.GE.3) THEN
803  CALL histdef3d(iff,o_upwd%flag,o_upwd%name, "saturated updraft", "kg/m2/s")
804 ENDIF !iflag_con.GE.3
805 CALL histdef3d(iff,o_dtphy%flag,o_dtphy%name, "Physics dT", "K/s")
806 CALL histdef3d(iff,o_dqphy%flag,o_dqphy%name, "Physics dQ", "(kg/kg)/s")
807 CALL histdef3d(iff,o_cldtau%flag,o_cldtau%name, "Cloud optical thickness", "1")
808 CALL histdef3d(iff,o_cldemi%flag,o_cldemi%name, "Cloud optical emissivity", "1")
809!IM: bug ?? dimensionnement variables (klon,klev+1) pmflxr, pmflxs, prfl, psfl
810! CALL histdef3d(iff,o_pr_con_l%flag,o_pmflxr%name, "Convective precipitation lic", " ")
811! CALL histdef3d(iff,o_pr_con_i%flag,o_pmflxs%name, "Convective precipitation ice", " ")
812! CALL histdef3d(iff,o_pr_lsc_l%flag,o_prfl%name, "Large scale precipitation lic", " ")
813! CALL histdef3d(iff,o_pr_lsc_i%flag,o_psfl%name, "Large scale precipitation ice", " ")
814
815!FH Sorties pour la couche limite
816     if (iflag_pbl>1) then
817 CALL histdef3d(iff,o_tke%flag,o_tke%name, "TKE", "m2/s2")
818 CALL histdef3d(iff,o_tke_max%flag,o_tke_max%name, "TKE max", "m2/s2")
819     endif
820
821 CALL histdef3d(iff,o_kz%flag,o_kz%name, "Kz melange", "m2/s")
822 CALL histdef3d(iff,o_kz_max%flag,o_kz_max%name, "Kz melange max", "m2/s" )
823 CALL histdef3d(iff,o_clwcon%flag,o_clwcon%name, "Convective Cloud Liquid water content", "kg/kg")
824 IF(iflag_con.GE.3) THEN
825 CALL histdef3d(iff,o_Ma%flag,o_Ma%name, "undilute adiab updraft", "kg/m2/s")
826 CALL histdef3d(iff,o_dnwd%flag,o_dnwd%name, "saturated downdraft", "kg/m2/s")
827 CALL histdef3d(iff,o_dnwd0%flag,o_dnwd0%name, "unsat. downdraft", "kg/m2/s")
828 ENDIF !(iflag_con.GE.3)
829 CALL histdef3d(iff,o_dtdyn%flag,o_dtdyn%name, "Dynamics dT", "K/s")
830 CALL histdef3d(iff,o_dqdyn%flag,o_dqdyn%name, "Dynamics dQ", "(kg/kg)/s")
831 CALL histdef3d(iff,o_dudyn%flag,o_dudyn%name, "Dynamics dU", "m/s2")
832 CALL histdef3d(iff,o_dvdyn%flag,o_dvdyn%name, "Dynamics dV", "m/s2")
833 CALL histdef3d(iff,o_dtcon%flag,o_dtcon%name, "Convection dT", "K/s")
834 CALL histdef3d(iff,o_ducon%flag,o_ducon%name, "Convection du", "m/s2")
835 CALL histdef3d(iff,o_dqcon%flag,o_dqcon%name, "Convection dQ", "(kg/kg)/s")
836 IF(iflag_con.EQ.3) THEN
837 IF (iflag_wake == 1) THEN
838   CALL histdef2d(iff,o_wake_h%flag,o_wake_h%name, "wake_h", "-")
839   CALL histdef2d(iff,o_wake_s%flag,o_wake_s%name, "wake_s", "-")
840   CALL histdef3d(iff,o_dtwak%flag,o_dtwak%name, "Wake dT", "K/s")
841   CALL histdef3d(iff,o_dqwak%flag,o_dqwak%name, "Wake dQ", "(kg/kg)/s")
842   CALL histdef3d(iff,o_wake_deltat%flag,o_wake_deltat%name, "wake_deltat", " ")
843   CALL histdef3d(iff,o_wake_deltaq%flag,o_wake_deltaq%name, "wake_deltaq", " ")
844   CALL histdef3d(iff,o_wake_omg%flag,o_wake_omg%name, "wake_omg", " ")
845 ENDIF
846   CALL histdef3d(iff,o_Vprecip%flag,o_Vprecip%name, "precipitation vertical profile", "-")
847   CALL histdef3d(iff,o_ftd%flag,o_ftd%name, "tend temp due aux descentes precip", "-")
848   CALL histdef3d(iff,o_fqd%flag,o_fqd%name,"tend vap eau due aux descentes precip", "-")
849 ENDIF !(iflag_con.EQ.3)
850
851 CALL histdef3d(iff,o_dtlsc%flag,o_dtlsc%name, "Condensation dT", "K/s")
852 CALL histdef3d(iff,o_dtlschr%flag,o_dtlschr%name,"Large-scale condensational heating rate","K/s")
853 CALL histdef3d(iff,o_dqlsc%flag,o_dqlsc%name, "Condensation dQ", "(kg/kg)/s")
854 CALL histdef3d(iff,o_dtvdf%flag,o_dtvdf%name, "Boundary-layer dT", "K/s")
855 CALL histdef3d(iff,o_dqvdf%flag,o_dqvdf%name, "Boundary-layer dQ", "(kg/kg)/s")
856 CALL histdef3d(iff,o_dteva%flag,o_dteva%name, "Reevaporation dT", "K/s")
857 CALL histdef3d(iff,o_dqeva%flag,o_dqeva%name, "Reevaporation dQ", "(kg/kg)/s")
858 CALL histdef3d(iff,o_ptconv%flag,o_ptconv%name, "POINTS CONVECTIFS", " ")
859 CALL histdef3d(iff,o_ratqs%flag,o_ratqs%name, "RATQS", " ")
860 CALL histdef3d(iff,o_dtthe%flag,o_dtthe%name, "Dry adjust. dT", "K/s")
861
862if(iflag_thermals.gt.1) THEN
863 CALL histdef3d(iff,o_f_th%flag,o_f_th%name, "Thermal plume mass flux", "K/s")
864 CALL histdef3d(iff,o_e_th%flag,o_e_th%name,"Thermal plume entrainment","K/s")
865 CALL histdef3d(iff,o_w_th%flag,o_w_th%name,"Thermal plume vertical velocity","m/s")
866 CALL histdef3d(iff,o_lambda_th%flag,o_lambda_th%name,"Thermal plume vertical velocity","m/s")
867 CALL histdef3d(iff,o_q_th%flag,o_q_th%name, "Thermal plume total humidity", "kg/kg")
868 CALL histdef3d(iff,o_a_th%flag,o_a_th%name, "Thermal plume fraction", "")
869 CALL histdef3d(iff,o_d_th%flag,o_d_th%name, "Thermal plume detrainment", "K/s")
870endif !iflag_thermals.gt.1
871 CALL histdef2d(iff,o_f0_th%flag,o_f0_th%name, "Thermal closure mass flux", "K/s")
872 CALL histdef2d(iff,o_zmax_th%flag,o_zmax_th%name, "Thermal plume height", "K/s")
873 CALL histdef3d(iff,o_dqthe%flag,o_dqthe%name, "Dry adjust. dQ", "(kg/kg)/s")
874 CALL histdef3d(iff,o_dtajs%flag,o_dtajs%name, "Dry adjust. dT", "K/s")
875 CALL histdef3d(iff,o_dqajs%flag,o_dqajs%name, "Dry adjust. dQ", "(kg/kg)/s")
876 CALL histdef3d(iff,o_dtswr%flag,o_dtswr%name, "SW radiation dT", "K/s")
877 CALL histdef3d(iff,o_dtsw0%flag,o_dtsw0%name, "CS SW radiation dT", "K/s")
878 CALL histdef3d(iff,o_dtlwr%flag,o_dtlwr%name, "LW radiation dT", "K/s")
879 CALL histdef3d(iff,o_dtlw0%flag,o_dtlw0%name, "CS LW radiation dT", "K/s")
880 CALL histdef3d(iff,o_dtec%flag,o_dtec%name, "Cinetic dissip dT", "K/s")
881 CALL histdef3d(iff,o_duvdf%flag,o_duvdf%name, "Boundary-layer dU", "m/s2")
882 CALL histdef3d(iff,o_dvvdf%flag,o_dvvdf%name, "Boundary-layer dV", "m/s2")
883
884     IF (ok_orodr) THEN
885 CALL histdef3d(iff,o_duoro%flag,o_duoro%name, "Orography dU", "m/s2")
886 CALL histdef3d(iff,o_dvoro%flag,o_dvoro%name, "Orography dV", "m/s2")
887     ENDIF
888
889     IF (ok_orolf) THEN
890 CALL histdef3d(iff,o_dulif%flag,o_dulif%name, "Orography dU", "m/s2")
891 CALL histdef3d(iff,o_dvlif%flag,o_dvlif%name, "Orography dV", "m/s2")
892     ENDIF
893
894      if (nqmax>=3) THEN
895!Attention    DO iq=3,nqmax
896    DO iq=3,4 
897       iiq=niadv(iq)
898! CALL histdef3d (iff, o_trac%flag,'o_'//tnom(iq)%name,ttext(iiq), "-" )
899  CALL histdef3d (iff, o_trac(iq-2)%flag,o_trac(iq-2)%name,ttext(iiq), "-" )
900    ENDDO
901      endif
902
903        CALL histend(nid_files(iff))
904
905         ndex2d = 0
906         ndex3d = 0
907
908         ENDIF ! clef_files
909
910         ENDDO !
911      end subroutine phys_output_open
912
913      SUBROUTINE histdef2d (iff,flag_var,nomvar,titrevar,unitvar)
914     
915       use ioipsl
916       USE dimphy
917       USE mod_phys_lmdz_para
918
919       IMPLICIT NONE
920       
921       include "dimensions.h"
922       include "temps.h"
923       include "indicesol.h"
924       include "advtrac.h"
925       include "clesphys.h"
926
927       integer                          :: iff
928       integer, dimension(nfiles)       :: flag_var
929       character(len=20)                 :: nomvar
930       character(len=*)                 :: titrevar
931       character(len=*)                 :: unitvar
932
933       if (iff.eq.1) then
934   call conf_physoutputs(nomvar,flag_var)
935       endif
936       
937       if ( flag_var(iff)<=lev_files(iff) ) then
938 call histdef (nid_files(iff),nomvar,titrevar,unitvar, &
939               iim,jj_nb,nhorim(iff), 1,1,1, -99, 32, &
940               type_ecri(iff), zstophym(iff),zoutm(iff))               
941       endif                     
942      end subroutine histdef2d
943
944      SUBROUTINE histdef3d (iff,flag_var,nomvar,titrevar,unitvar)
945
946       use ioipsl
947       USE dimphy
948       USE mod_phys_lmdz_para
949
950       IMPLICIT NONE
951
952       include "dimensions.h"
953       include "temps.h"
954       include "indicesol.h"
955       include "advtrac.h"
956       include "clesphys.h"
957
958       integer                          :: iff
959       integer, dimension(nfiles)       :: flag_var
960       character(len=20)                 :: nomvar
961       character(len=*)                 :: titrevar
962       character(len=*)                 :: unitvar
963
964       if (iff.eq.1) then
965   call conf_physoutputs(nomvar,flag_var)
966       endif
967
968       if ( flag_var(iff)<=lev_files(iff) ) then
969          call histdef (nid_files(iff), nomvar, titrevar, unitvar, &
970               iim, jj_nb, nhorim(iff), klev, levmin(iff), &
971               levmax(iff)-levmin(iff)+1, nvertm(iff), 32, type_ecri(iff), &
972               zstophym(iff), zoutm(iff))
973       endif
974      end subroutine histdef3d
975
976      SUBROUTINE conf_physoutputs(nam_var,flag_var)
977       use ioipsl
978
979       IMPLICIT NONE
980
981       character(len=20)                :: nam_var
982       integer, dimension(nfiles)      :: flag_var
983       integer, dimension(nfiles),save :: flag_var_omp
984       character(len=20),save           :: nam_var_omp
985
986        flag_var_omp = flag_var
987        nam_var_omp = nam_var
988        print*,'Avant getin: nam_var flag_var ',nam_var,flag_var(:)
989        call getin('flag_'//nam_var,flag_var_omp)
990        flag_var = flag_var_omp
991        call getin('name_'//nam_var,nam_var_omp)
992        nam_var=nam_var_omp
993       
994        print*,'Apres getin: nam_var flag_var ',nam_var,flag_var(:)
995
996      END SUBROUTINE conf_physoutputs
997
998END MODULE phys_output_mod
999
Note: See TracBrowser for help on using the repository browser.