source: LMDZ4/trunk/libf/phylmd/phys_output_mod.F90 @ 1206

Last change on this file since 1206 was 1146, checked in by Laurent Fairhead, 16 years ago

Réintegration dans le tronc des modifications issues de la branche LMDZ-dev
comprises entre la révision 1074 et 1145
Validation: une simulation de 1 jour en séquentiel sur PC donne les mêmes
résultats entre la trunk et la dev
LF

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 59.8 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
287  type(ctrl_out) :: o_cldtau       = ctrl_out((/ 10, 5, 10, 10, 10 /),'cldtau')                     
288  type(ctrl_out) :: o_cldemi       = ctrl_out((/ 10, 5, 10, 10, 10 /),'cldemi')
289  type(ctrl_out) :: o_rh2m         = ctrl_out((/ 10, 5, 10, 10, 10 /),'rh2m')
290  type(ctrl_out) :: o_qsat2m       = ctrl_out((/ 10, 5, 10, 10, 10 /),'qsat2m')
291  type(ctrl_out) :: o_tpot         = ctrl_out((/ 10, 5, 10, 10, 10 /),'tpot')
292  type(ctrl_out) :: o_tpote        = ctrl_out((/ 10, 5, 10, 10, 10 /),'tpote')
293  type(ctrl_out) :: o_tke          = ctrl_out((/ 4, 10, 10, 10, 10 /),'tke ')
294  type(ctrl_out) :: o_tke_max      = ctrl_out((/ 4, 10, 10, 10, 10 /),'tke_max')
295
296  type(ctrl_out),dimension(4) :: o_tke_srf      = (/ ctrl_out((/ 10, 4, 10, 10, 10 /),'tke_ter'), &
297                                                     ctrl_out((/ 10, 4, 10, 10, 10 /),'tke_lic'), &
298                                                     ctrl_out((/ 10, 4, 10, 10, 10 /),'tke_oce'), &
299                                                     ctrl_out((/ 10, 4, 10, 10, 10 /),'tke_sic') /)
300
301  type(ctrl_out),dimension(4) :: o_tke_max_srf  = (/ ctrl_out((/ 10, 4, 10, 10, 10 /),'tke_max_ter'), &
302                                                     ctrl_out((/ 10, 4, 10, 10, 10 /),'tke_max_lic'), &
303                                                     ctrl_out((/ 10, 4, 10, 10, 10 /),'tke_max_oce'), &
304                                                     ctrl_out((/ 10, 4, 10, 10, 10 /),'tke_max_sic') /)
305
306  type(ctrl_out) :: o_kz           = ctrl_out((/ 4, 10, 10, 10, 10 /),'kz')
307  type(ctrl_out) :: o_kz_max       = ctrl_out((/ 4, 10, 10, 10, 10 /),'kz_max')
308  type(ctrl_out) :: o_SWnetOR      = ctrl_out((/ 10, 10, 2, 10, 10 /),'SWnetOR')
309  type(ctrl_out) :: o_SWdownOR     = ctrl_out((/ 10, 10, 2, 10, 10 /),'SWdownOR')
310  type(ctrl_out) :: o_LWdownOR     = ctrl_out((/ 10, 10, 2, 10, 10 /),'LWdownOR')
311
312  type(ctrl_out) :: o_snowl        = ctrl_out((/ 10, 1, 10, 10, 10 /),'snowl')
313  type(ctrl_out) :: o_cape_max     = ctrl_out((/ 10, 1, 10, 10, 10 /),'cape_max')
314  type(ctrl_out) :: o_solldown     = ctrl_out((/ 10, 1, 10, 1, 10 /),'solldown')
315
316  type(ctrl_out) :: o_dtsvdfo      = ctrl_out((/ 10, 10, 10, 1, 10 /),'dtsvdfo')
317  type(ctrl_out) :: o_dtsvdft      = ctrl_out((/ 10, 10, 10, 1, 10 /),'dtsvdft')
318  type(ctrl_out) :: o_dtsvdfg      = ctrl_out((/ 10, 10, 10, 1, 10 /),'dtsvdfg')
319  type(ctrl_out) :: o_dtsvdfi      = ctrl_out((/ 10, 10, 10, 1, 10 /),'dtsvdfi')
320  type(ctrl_out) :: o_rugs         = ctrl_out((/ 10, 10, 10, 1, 1 /),'rugs')
321
322  type(ctrl_out) :: o_topswad      = ctrl_out((/ 4, 10, 10, 10, 10 /),'topswad')
323  type(ctrl_out) :: o_topswai      = ctrl_out((/ 4, 10, 10, 10, 10 /),'topswai')
324  type(ctrl_out) :: o_solswad      = ctrl_out((/ 4, 10, 10, 10, 10 /),'solswad')
325  type(ctrl_out) :: o_solswai      = ctrl_out((/ 4, 10, 10, 10, 10 /),'solswai')
326!!!!!!!!!!!!!!!!!!!!!! 3D !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
327  type(ctrl_out) :: o_lwcon        = ctrl_out((/ 2, 5, 10, 10, 1 /),'lwcon')
328  type(ctrl_out) :: o_iwcon        = ctrl_out((/ 2, 5, 10, 10, 10 /),'iwcon')
329  type(ctrl_out) :: o_temp         = ctrl_out((/ 2, 3, 4, 1, 1 /),'temp')
330  type(ctrl_out) :: o_theta        = ctrl_out((/ 2, 3, 4, 1, 1 /),'theta')
331  type(ctrl_out) :: o_ovap         = ctrl_out((/ 2, 3, 4, 1, 1 /),'ovap')
332  type(ctrl_out) :: o_ovapinit         = ctrl_out((/ 2, 3, 4, 1, 1 /),'ovapinit')
333  type(ctrl_out) :: o_wvapp        = ctrl_out((/ 2, 10, 10, 10, 10 /),'wvapp')
334  type(ctrl_out) :: o_geop         = ctrl_out((/ 2, 3, 10, 1, 1 /),'geop')
335  type(ctrl_out) :: o_vitu         = ctrl_out((/ 2, 3, 4, 1, 1 /),'vitu')
336  type(ctrl_out) :: o_vitv         = ctrl_out((/ 2, 3, 4, 1, 1 /),'vitv')
337  type(ctrl_out) :: o_vitw         = ctrl_out((/ 2, 3, 10, 10, 1 /),'vitw')
338  type(ctrl_out) :: o_pres         = ctrl_out((/ 2, 3, 10, 1, 1 /),'pres')
339  type(ctrl_out) :: o_rneb         = ctrl_out((/ 2, 5, 10, 10, 1 /),'rneb')
340  type(ctrl_out) :: o_rnebcon      = ctrl_out((/ 2, 5, 10, 10, 1 /),'rnebcon')
341  type(ctrl_out) :: o_rhum         = ctrl_out((/ 2, 10, 10, 10, 10 /),'rhum')
342  type(ctrl_out) :: o_ozone        = ctrl_out((/ 2, 10, 10, 10, 10 /),'ozone')
343  type(ctrl_out) :: o_upwd         = ctrl_out((/ 2, 10, 10, 10, 10 /),'upwd')
344  type(ctrl_out) :: o_dtphy        = ctrl_out((/ 2, 10, 10, 10, 1 /),'dtphy')
345  type(ctrl_out) :: o_dqphy        = ctrl_out((/ 2, 10, 10, 10, 1 /),'dqphy')
346  type(ctrl_out) :: o_pr_con_l     = ctrl_out((/ 2, 10, 10, 10, 10 /),'pr_con_l')
347  type(ctrl_out) :: o_pr_con_i     = ctrl_out((/ 2, 10, 10, 10, 10 /),'pr_con_i')
348  type(ctrl_out) :: o_pr_lsc_l     = ctrl_out((/ 2, 10, 10, 10, 10 /),'pr_lsc_l')
349  type(ctrl_out) :: o_pr_lsc_i     = ctrl_out((/ 2, 10, 10, 10, 10 /),'pr_lsc_i')
350!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
351
352  type(ctrl_out),dimension(4) :: o_albe_srf     = (/ ctrl_out((/ 3, 4, 10, 1, 10 /),'albe_ter'), &
353                                                     ctrl_out((/ 3, 4, 10, 1, 10 /),'albe_lic'), &
354                                                     ctrl_out((/ 3, 4, 10, 1, 10 /),'albe_oce'), &
355                                                     ctrl_out((/ 3, 4, 10, 1, 10 /),'albe_sic') /)
356
357  type(ctrl_out),dimension(4) :: o_ages_srf     = (/ ctrl_out((/ 3, 10, 10, 10, 10 /),'ages_ter'), &
358                                                     ctrl_out((/ 3, 10, 10, 10, 10 /),'ages_lic'), &
359                                                     ctrl_out((/ 3, 10, 10, 10, 10 /),'ages_oce'), &
360                                                     ctrl_out((/ 3, 10, 10, 10, 10 /),'ages_sic') /)
361
362  type(ctrl_out),dimension(4) :: o_rugs_srf     = (/ ctrl_out((/ 3, 4, 10, 1, 10 /),'rugs_ter'), &
363                                                     ctrl_out((/ 3, 4, 10, 1, 10 /),'rugs_lic'), &
364                                                     ctrl_out((/ 3, 4, 10, 1, 10 /),'rugs_oce'), &
365                                                     ctrl_out((/ 3, 4, 10, 1, 10 /),'rugs_sic') /)
366
367  type(ctrl_out) :: o_albs         = ctrl_out((/ 3, 10, 10, 1, 10 /),'albs')
368  type(ctrl_out) :: o_albslw       = ctrl_out((/ 3, 10, 10, 1, 10 /),'albslw')
369
370  type(ctrl_out) :: o_clwcon       = ctrl_out((/ 4, 10, 10, 10, 10 /),'clwcon')
371  type(ctrl_out) :: o_Ma           = ctrl_out((/ 4, 10, 10, 10, 10 /),'Ma')
372  type(ctrl_out) :: o_dnwd         = ctrl_out((/ 4, 10, 10, 10, 10 /),'dnwd')
373  type(ctrl_out) :: o_dnwd0        = ctrl_out((/ 4, 10, 10, 10, 10 /),'dnwd0')
374  type(ctrl_out) :: o_dtdyn        = ctrl_out((/ 4, 10, 10, 10, 1 /),'dtdyn')
375  type(ctrl_out) :: o_dqdyn        = ctrl_out((/ 4, 10, 10, 10, 1 /),'dqdyn')
376  type(ctrl_out) :: o_dudyn        = ctrl_out((/ 4, 10, 10, 10, 1 /),'dudyn')  !AXC
377  type(ctrl_out) :: o_dvdyn        = ctrl_out((/ 4, 10, 10, 10, 1 /),'dvdyn')  !AXC
378  type(ctrl_out) :: o_dtcon        = ctrl_out((/ 4, 5, 10, 10, 10 /),'dtcon')
379  type(ctrl_out) :: o_ducon        = ctrl_out((/ 4, 10, 10, 10, 10 /),'ducon')
380  type(ctrl_out) :: o_dqcon        = ctrl_out((/ 4, 5, 10, 10, 10 /),'dqcon')
381  type(ctrl_out) :: o_dtwak        = ctrl_out((/ 4, 5, 10, 10, 10 /),'dtwak')
382  type(ctrl_out) :: o_dqwak        = ctrl_out((/ 4, 5, 10, 10, 10 /),'dqwak')
383  type(ctrl_out) :: o_wake_h       = ctrl_out((/ 4, 5, 10, 10, 10 /),'wake_h')
384  type(ctrl_out) :: o_wake_s       = ctrl_out((/ 4, 5, 10, 10, 10 /),'wake_s')
385  type(ctrl_out) :: o_wake_deltat  = ctrl_out((/ 4, 5, 10, 10, 10 /),'wake_deltat')
386  type(ctrl_out) :: o_wake_deltaq  = ctrl_out((/ 4, 5, 10, 10, 10 /),'wake_deltaq')
387  type(ctrl_out) :: o_wake_omg     = ctrl_out((/ 4, 5, 10, 10, 10 /),'wake_omg')
388  type(ctrl_out) :: o_Vprecip      = ctrl_out((/ 10, 10, 10, 10, 10 /),'Vprecip')
389  type(ctrl_out) :: o_ftd          = ctrl_out((/ 4, 5, 10, 10, 10 /),'ftd')
390  type(ctrl_out) :: o_fqd          = ctrl_out((/ 4, 5, 10, 10, 10 /),'fqd')
391  type(ctrl_out) :: o_dtlsc        = ctrl_out((/ 4, 10, 10, 10, 10 /),'dtlsc')
392  type(ctrl_out) :: o_dtlschr      = ctrl_out((/ 4, 10, 10, 10, 10 /),'dtlschr')
393  type(ctrl_out) :: o_dqlsc        = ctrl_out((/ 4, 10, 10, 10, 10 /),'dqlsc')
394  type(ctrl_out) :: o_dtvdf        = ctrl_out((/ 4, 10, 10, 1, 10 /),'dtvdf')
395  type(ctrl_out) :: o_dqvdf        = ctrl_out((/ 4, 10, 10, 1, 10 /),'dqvdf')
396  type(ctrl_out) :: o_dteva        = ctrl_out((/ 4, 10, 10, 10, 10 /),'dteva')
397  type(ctrl_out) :: o_dqeva        = ctrl_out((/ 4, 10, 10, 10, 10 /),'dqeva')
398  type(ctrl_out) :: o_ptconv       = ctrl_out((/ 4, 10, 10, 10, 10 /),'ptconv')
399  type(ctrl_out) :: o_ratqs        = ctrl_out((/ 4, 10, 10, 10, 10 /),'ratqs')
400  type(ctrl_out) :: o_dtthe        = ctrl_out((/ 4, 10, 10, 10, 10 /),'dtthe')
401  type(ctrl_out) :: o_f_th         = ctrl_out((/ 4, 10, 10, 10, 10 /),'f_th')
402  type(ctrl_out) :: o_e_th         = ctrl_out((/ 4, 10, 10, 10, 10 /),'e_th')
403  type(ctrl_out) :: o_w_th         = ctrl_out((/ 4, 10, 10, 10, 10 /),'w_th')
404  type(ctrl_out) :: o_lambda_th    = ctrl_out((/ 4, 10, 10, 10, 10 /),'lambda_th')
405  type(ctrl_out) :: o_q_th         = ctrl_out((/ 4, 10, 10, 10, 10 /),'q_th')
406  type(ctrl_out) :: o_a_th         = ctrl_out((/ 4, 10, 10, 10, 10 /),'a_th')
407  type(ctrl_out) :: o_d_th         = ctrl_out((/ 4, 10, 10, 10, 10 /),'d_th')
408  type(ctrl_out) :: o_f0_th        = ctrl_out((/ 4, 10, 10, 10, 10 /),'f0_th')
409  type(ctrl_out) :: o_zmax_th      = ctrl_out((/ 4, 10, 10, 10, 10 /),'zmax_th')
410  type(ctrl_out) :: o_dqthe        = ctrl_out((/ 4, 10, 10, 10, 1 /),'dqthe')
411  type(ctrl_out) :: o_dtajs        = ctrl_out((/ 4, 10, 10, 10, 10 /),'dtajs')
412  type(ctrl_out) :: o_dqajs        = ctrl_out((/ 4, 10, 10, 10, 10 /),'dqajs')
413  type(ctrl_out) :: o_dtswr        = ctrl_out((/ 4, 10, 10, 10, 1 /),'dtswr')
414  type(ctrl_out) :: o_dtsw0        = ctrl_out((/ 4, 10, 10, 10, 10 /),'dtsw0')
415  type(ctrl_out) :: o_dtlwr        = ctrl_out((/ 4, 10, 10, 10, 1 /),'dtlwr')
416  type(ctrl_out) :: o_dtlw0        = ctrl_out((/ 4, 10, 10, 10, 10 /),'dtlw0')
417  type(ctrl_out) :: o_dtec         = ctrl_out((/ 4, 10, 10, 10, 10 /),'dtec')
418  type(ctrl_out) :: o_duvdf        = ctrl_out((/ 4, 10, 10, 10, 10 /),'duvdf')
419  type(ctrl_out) :: o_dvvdf        = ctrl_out((/ 4, 10, 10, 10, 10 /),'dvvdf')
420  type(ctrl_out) :: o_duoro        = ctrl_out((/ 4, 10, 10, 10, 10 /),'duoro')
421  type(ctrl_out) :: o_dvoro        = ctrl_out((/ 4, 10, 10, 10, 10 /),'dvoro')
422  type(ctrl_out) :: o_dulif        = ctrl_out((/ 4, 10, 10, 10, 10 /),'dulif')
423  type(ctrl_out) :: o_dvlif        = ctrl_out((/ 4, 10, 10, 10, 10 /),'dvlif')
424
425! Attention a refaire correctement
426  type(ctrl_out),dimension(2) :: o_trac         = (/ ctrl_out((/ 4, 10, 10, 10, 10 /),'trac01'), &
427                                                     ctrl_out((/ 4, 10, 10, 10, 10 /),'trac02') /)
428    CONTAINS
429
430!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
431!!!!!!!!! Ouverture des fichier et definition des variable de sortie !!!!!!!!
432!! histbeg, histvert et histdef
433!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
434 
435  SUBROUTINE phys_output_open(jjmp1,nlevSTD,clevSTD,nbteta, &
436                              ctetaSTD,dtime, presnivs, ok_veget, &
437                              type_ocean, iflag_pbl,ok_mensuel,ok_journe, &
438                              ok_hf,ok_instan,ok_LES,ok_ade,ok_aie)   
439
440  USE iophy
441  USE dimphy
442  USE infotrac
443  USE ioipsl
444  USE mod_phys_lmdz_para
445
446  IMPLICIT NONE
447  include "dimensions.h"
448  include "temps.h"
449  include "indicesol.h"
450  include "clesphys.h"
451  include "thermcell.h"
452
453  integer                               :: jjmp1
454  integer                               :: nbteta, nlevSTD, radpas
455  logical                               :: ok_mensuel, ok_journe, ok_hf, ok_instan
456  logical                               :: ok_LES,ok_ade,ok_aie
457  real                                  :: dtime
458  integer                               :: idayref
459  real                                  :: zjulian
460  real, dimension(klev)                 :: presnivs
461  character(len=4), dimension(nlevSTD)  :: clevSTD
462  integer                               :: nsrf, k, iq, iiq, iff, i, j, ilev
463  logical                               :: ok_veget
464  integer                               :: iflag_pbl
465  CHARACTER(len=4)                      :: bb2
466  CHARACTER(len=2)                      :: bb3
467  character(len=6)                      :: type_ocean
468  CHARACTER(len=3)                      :: ctetaSTD(nbteta)
469  real, dimension(nfiles)               :: ecrit_files
470  CHARACTER(len=20), dimension(nfiles)  :: name_files
471  INTEGER, dimension(iim*jjmp1)         ::  ndex2d
472  INTEGER, dimension(iim*jjmp1*klev)    :: ndex3d
473  integer                               :: imin_ins, imax_ins
474  integer                               :: jmin_ins, jmax_ins
475
476!!!!!!!!!! stockage dans une region limitee pour chaque fichier !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
477!                 entre [lonmin_reg,lonmax_reg] et [latmin_reg,latmax_reg]
478
479  logical, dimension(nfiles), save  :: ok_reglim         = (/ .false., .false., .false., .false., .true. /)
480  real, dimension(nfiles), save     :: lonmin_reg        = (/ 0., -45., 0., 0., -162. /)
481  real, dimension(nfiles), save     :: lonmax_reg        = (/ 90., 45., 90., 90., -144. /)
482  real, dimension(nfiles), save     :: latmin_reg        = (/ 0., -45., 0., 0., 7. /)
483  real, dimension(nfiles), save     :: latmax_reg        = (/ 90., 90., 90., 90., 21. /)
484
485   levmax = (/ klev, klev, klev, klev, 17 /)
486
487   name_files(1) = 'histmth'
488   name_files(2) = 'histday'
489   name_files(3) = 'histhf'
490   name_files(4) = 'histins'
491   name_files(5) = 'histLES'
492
493   type_ecri(1) = 'ave(X)'
494   type_ecri(2) = 'ave(X)'
495   type_ecri(3) = 'ave(X)'
496   type_ecri(4) = 'inst(X)'
497   type_ecri(5) = 'ave(X)'
498
499   clef_files(1) = ok_mensuel
500   clef_files(2) = ok_journe
501   clef_files(3) = ok_hf
502   clef_files(4) = ok_instan
503   clef_files(5) = ok_LES
504
505   lev_files(1) = lev_histmth
506   lev_files(2) = lev_histday
507   lev_files(3) = lev_histhf
508   lev_files(4) = 1
509   lev_files(5) = 1
510
511   ecrit_files(1) = ecrit_mth
512   ecrit_files(2) = ecrit_day
513   ecrit_files(3) = ecrit_hf
514   ecrit_files(4) = ecrit_ins
515   ecrit_files(5) = ecrit_LES
516 
517!!!!!!!!!!!!!!!!!!!!!!! Boucle sur les fichiers !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
518! Appel de histbeg et histvert pour creer le fichier et les niveaux verticaux !!
519! Appel des histbeg pour definir les variables (nom, moy ou inst, freq de sortie ..
520!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
521
522 DO iff=1,nfiles
523
524    IF (clef_files(iff)) THEN
525     
526      zstophym(iff) = dtime         ! Frequence ou l on moyenne
527      zoutm(iff) = ecrit_files(iff) ! Frequence ou l on ecrit
528
529      idayref = day_ref
530      CALL ymds2ju(annee_ref, 1, idayref, 0.0, zjulian)
531
532!!!!!!!!!!!!!!!!! Traitement dans le cas ou l'on veut stocker sur un domaine limite !!
533!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
534     if (ok_reglim(iff)) then
535
536        imin_ins=1
537        imax_ins=iim
538        jmin_ins=1
539        jmax_ins=jjmp1
540
541! correction abderr        do i=1,iim-1
542        do i=1,iim
543           print*,'io_lon(i)=',io_lon(i)
544           if (io_lon(i).le.lonmin_reg(iff)) imin_ins=i
545           if (io_lon(i).le.lonmax_reg(iff)) imax_ins=i
546        enddo
547
548        do j=1,jjmp1-1
549            print*,'io_lat(j)=',io_lat(j)
550            if (io_lat(j).ge.latmin_reg(iff)) jmax_ins=j+1
551            if (io_lat(j).ge.latmax_reg(iff)) jmin_ins=j
552        enddo
553
554         print*,'On stoke le fichier hist sur, ', &
555         imin_ins,imax_ins,jmin_ins,jmax_ins
556         print*,'On stoke le fichier instantanne sur, ', &
557         io_lon(imin_ins),io_lon(imax_ins), &
558         io_lat(jmin_ins),io_lat(jmax_ins)
559
560 CALL histbeg(name_files(iff),iim,io_lon,jjmp1,io_lat, &
561              imin_ins,imax_ins-imin_ins+1, &
562              jmin_ins,jmax_ins-jmin_ins+1, &
563              itau_phy,zjulian,dtime,nhorim(iff),nid_files(iff))
564!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
565       else
566 CALL histbeg_phy(name_files(iff),itau_phy,zjulian,dtime,nhorim(iff),nid_files(iff))
567       endif
568 
569      CALL histvert(nid_files(iff), "presnivs", "Vertical levels", "mb", &
570           levmax(iff) - levmin(iff) + 1, &
571           presnivs(levmin(iff):levmax(iff))/100., nvertm(iff))
572
573!!!!!!!!!!!!! Traitement des champs 3D pour histhf !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
574!!!!!!!!!!!!!!! A Revoir plus tard !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
575!          IF (iff.eq.3.and.lev_files(iff).ge.4) THEN
576!          CALL histbeg_phy("histhf3d",itau_phy, &
577!     &                     zjulian, dtime, &
578!     &                     nhorim, nid_hf3d)
579
580!         CALL histvert(nid_hf3d, "presnivs", &
581!     &                 "Vertical levels", "mb", &
582!     &                 klev, presnivs/100., nvertm)
583!          ENDIF
584
585!!! Champs 1D !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
586 CALL histdef2d(iff,o_phis%flag,o_phis%name,"Surface geop.height", "m2/s2")
587   type_ecri(1) = 'once'
588   type_ecri(2) = 'once'
589   type_ecri(3) = 'once'
590   type_ecri(4) = 'once'
591   type_ecri(5) = 'once'
592 CALL histdef2d(iff,o_aire%flag,o_aire%name,"Grid area", "-")
593 CALL histdef2d(iff,o_contfracATM%flag,o_contfracATM%name,"% sfce ter+lic", "-")
594   type_ecri(1) = 'ave(X)'
595   type_ecri(2) = 'ave(X)'
596   type_ecri(3) = 'ave(X)'
597   type_ecri(4) = 'inst(X)'
598   type_ecri(5) = 'ave(X)'
599
600!!! Champs 2D !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
601 CALL histdef2d(iff,o_contfracOR%flag,o_contfracOR%name,"% sfce terre OR", "-" )
602 CALL histdef2d(iff,o_aireTER%flag,o_aireTER%name,"Grid area CONT", "-" )
603 CALL histdef2d(iff,o_flat%flag,o_flat%name, "Latent heat flux", "W/m2")
604 CALL histdef2d(iff,o_slp%flag,o_slp%name, "Sea Level Pressure", "Pa" )
605 CALL histdef2d(iff,o_tsol%flag,o_tsol%name, "Surface Temperature", "K")
606 CALL histdef2d(iff,o_t2m%flag,o_t2m%name, "Temperature 2m", "K" )
607   type_ecri(1) = 't_min(X)'
608   type_ecri(2) = 't_min(X)'
609   type_ecri(3) = 't_min(X)'
610   type_ecri(4) = 't_min(X)'
611   type_ecri(5) = 't_min(X)'
612 CALL histdef2d(iff,o_t2m_min%flag,o_t2m_min%name, "Temp 2m min", "K" )
613   type_ecri(1) = 't_max(X)'
614   type_ecri(2) = 't_max(X)'
615   type_ecri(3) = 't_max(X)'
616   type_ecri(4) = 't_max(X)'
617   type_ecri(5) = 't_max(X)'
618 CALL histdef2d(iff,o_t2m_max%flag,o_t2m_max%name, "Temp 2m max", "K" )
619   type_ecri(1) = 'ave(X)'
620   type_ecri(2) = 'ave(X)'
621   type_ecri(3) = 'ave(X)'
622   type_ecri(4) = 'inst(X)'
623   type_ecri(5) = 'ave(X)'
624 CALL histdef2d(iff,o_wind10m%flag,o_wind10m%name, "10-m wind speed", "m/s")
625 CALL histdef2d(iff,o_wind10max%flag,o_wind10max%name, "10m wind speed max", "m/s")
626 CALL histdef2d(iff,o_sicf%flag,o_sicf%name, "Sea-ice fraction", "-" )
627 CALL histdef2d(iff,o_q2m%flag,o_q2m%name, "Specific humidity 2m", "kg/kg")
628 CALL histdef2d(iff,o_u10m%flag,o_u10m%name, "Vent zonal 10m", "m/s" )
629 CALL histdef2d(iff,o_v10m%flag,o_v10m%name, "Vent meridien 10m", "m/s")
630 CALL histdef2d(iff,o_psol%flag,o_psol%name, "Surface Pressure", "Pa" )
631 CALL histdef2d(iff,o_qsurf%flag,o_qsurf%name, "Surface Air humidity", "kg/kg")
632
633  if (.not. ok_veget) then
634 CALL histdef2d(iff,o_qsol%flag,o_qsol%name, "Soil watter content", "mm" )
635  endif
636
637 CALL histdef2d(iff,o_ndayrain%flag,o_ndayrain%name, "Number of dayrain(liq+sol)", "-")
638 CALL histdef2d(iff,o_precip%flag,o_precip%name, "Precip Totale liq+sol", "kg/(s*m2)" )
639 CALL histdef2d(iff,o_plul%flag,o_plul%name, "Large-scale Precip.", "kg/(s*m2)")
640 CALL histdef2d(iff,o_pluc%flag,o_pluc%name, "Convective Precip.", "kg/(s*m2)")
641 CALL histdef2d(iff,o_snow%flag,o_snow%name, "Snow fall", "kg/(s*m2)" )
642 CALL histdef2d(iff,o_evap%flag,o_evap%name, "Evaporat", "kg/(s*m2)" )
643 CALL histdef2d(iff,o_tops%flag,o_tops%name, "Solar rad. at TOA", "W/m2")
644 CALL histdef2d(iff,o_tops0%flag,o_tops0%name, "CS Solar rad. at TOA", "W/m2")
645 CALL histdef2d(iff,o_topl%flag,o_topl%name, "IR rad. at TOA", "W/m2" )
646 CALL histdef2d(iff,o_topl0%flag,o_topl0%name, "IR rad. at TOA", "W/m2")
647 CALL histdef2d(iff,o_SWupTOA%flag,o_SWupTOA%name, "SWup at TOA", "W/m2")
648 CALL histdef2d(iff,o_SWupTOAclr%flag,o_SWupTOAclr%name, "SWup clear sky at TOA", "W/m2")
649 CALL histdef2d(iff,o_SWdnTOA%flag,o_SWdnTOA%name, "SWdn at TOA", "W/m2" )
650 CALL histdef2d(iff,o_SWdnTOAclr%flag,o_SWdnTOAclr%name, "SWdn clear sky at TOA", "W/m2")
651 CALL histdef2d(iff,o_SWup200%flag,o_SWup200%name, "SWup at 200mb", "W/m2" )
652 CALL histdef2d(iff,o_SWup200clr%flag,o_SWup200clr%name, "SWup clear sky at 200mb", "W/m2")
653 CALL histdef2d(iff,o_SWdn200%flag,o_SWdn200%name, "SWdn at 200mb", "W/m2" )
654 CALL histdef2d(iff,o_SWdn200clr%flag,o_SWdn200clr%name, "SWdn clear sky at 200mb", "W/m2")
655 CALL histdef2d(iff,o_LWup200%flag,o_LWup200%name, "LWup at 200mb", "W/m2")
656 CALL histdef2d(iff,o_LWup200clr%flag,o_LWup200clr%name, "LWup clear sky at 200mb", "W/m2")
657 CALL histdef2d(iff,o_LWdn200%flag,o_LWdn200%name, "LWdn at 200mb", "W/m2")
658 CALL histdef2d(iff,o_LWdn200clr%flag,o_LWdn200clr%name, "LWdn clear sky at 200mb", "W/m2")
659 CALL histdef2d(iff,o_sols%flag,o_sols%name, "Solar rad. at surf.", "W/m2")
660 CALL histdef2d(iff,o_sols0%flag,o_sols0%name, "Solar rad. at surf.", "W/m2")
661 CALL histdef2d(iff,o_soll%flag,o_soll%name, "IR rad. at surface", "W/m2") 
662 CALL histdef2d(iff,o_radsol%flag,o_radsol%name, "Rayonnement au sol", "W/m2")
663 CALL histdef2d(iff,o_soll0%flag,o_soll0%name, "IR rad. at surface", "W/m2")
664 CALL histdef2d(iff,o_SWupSFC%flag,o_SWupSFC%name, "SWup at surface", "W/m2")
665 CALL histdef2d(iff,o_SWupSFCclr%flag,o_SWupSFCclr%name, "SWup clear sky at surface", "W/m2")
666 CALL histdef2d(iff,o_SWdnSFC%flag,o_SWdnSFC%name, "SWdn at surface", "W/m2")
667 CALL histdef2d(iff,o_SWdnSFCclr%flag,o_SWdnSFCclr%name, "SWdn clear sky at surface", "W/m2")
668 CALL histdef2d(iff,o_LWupSFC%flag,o_LWupSFC%name, "Upwd. IR rad. at surface", "W/m2")
669 CALL histdef2d(iff,o_LWdnSFC%flag,o_LWdnSFC%name, "Down. IR rad. at surface", "W/m2")
670 CALL histdef2d(iff,o_LWupSFCclr%flag,o_LWupSFCclr%name, "CS Upwd. IR rad. at surface", "W/m2")
671 CALL histdef2d(iff,o_LWdnSFCclr%flag,o_LWdnSFCclr%name, "Down. CS IR rad. at surface", "W/m2")
672 CALL histdef2d(iff,o_bils%flag,o_bils%name, "Surf. total heat flux", "W/m2")
673 CALL histdef2d(iff,o_sens%flag,o_sens%name, "Sensible heat flux", "W/m2")
674 CALL histdef2d(iff,o_fder%flag,o_fder%name, "Heat flux derivation", "W/m2")
675 CALL histdef2d(iff,o_ffonte%flag,o_ffonte%name, "Thermal flux for snow melting", "W/m2")
676 CALL histdef2d(iff,o_fqcalving%flag,o_fqcalving%name, "Ice Calving", "kg/m2/s")
677 CALL histdef2d(iff,o_fqfonte%flag,o_fqfonte%name, "Land ice melt", "kg/m2/s")
678
679     DO nsrf = 1, nbsrf
680 CALL histdef2d(iff,o_pourc_srf(nsrf)%flag,o_pourc_srf(nsrf)%name,"% "//clnsurf(nsrf),"%")
681 CALL histdef2d(iff,o_fract_srf(nsrf)%flag,o_fract_srf(nsrf)%name,"Fraction "//clnsurf(nsrf),"1")
682 CALL histdef2d(iff,o_taux_srf(nsrf)%flag,o_taux_srf(nsrf)%name,"Zonal wind stress"//clnsurf(nsrf),"Pa")
683 CALL histdef2d(iff,o_tauy_srf(nsrf)%flag,o_tauy_srf(nsrf)%name,"Meridional wind stress "//clnsurf(nsrf),"Pa")
684 CALL histdef2d(iff,o_tsol_srf(nsrf)%flag,o_tsol_srf(nsrf)%name,"Temperature "//clnsurf(nsrf),"K")
685 CALL histdef2d(iff,o_u10m_srf(nsrf)%flag,o_u10m_srf(nsrf)%name,"Vent Zonal 10m "//clnsurf(nsrf),"m/s")
686 CALL histdef2d(iff,o_v10m_srf(nsrf)%flag,o_v10m_srf(nsrf)%name,"Vent meredien 10m "//clnsurf(nsrf),"m/s")
687 CALL histdef2d(iff,o_t2m_srf(nsrf)%flag,o_t2m_srf(nsrf)%name,"Temp 2m "//clnsurf(nsrf),"K")
688 CALL histdef2d(iff,o_sens_srf(nsrf)%flag,o_sens_srf(nsrf)%name,"Sensible heat flux "//clnsurf(nsrf),"W/m2")
689 CALL histdef2d(iff,o_lat_srf(nsrf)%flag,o_lat_srf(nsrf)%name,"Latent heat flux "//clnsurf(nsrf),"W/m2")
690 CALL histdef2d(iff,o_flw_srf(nsrf)%flag,o_flw_srf(nsrf)%name,"LW "//clnsurf(nsrf),"W/m2")
691 CALL histdef2d(iff,o_fsw_srf(nsrf)%flag,o_fsw_srf(nsrf)%name,"SW "//clnsurf(nsrf),"W/m2")
692 CALL histdef2d(iff,o_wbils_srf(nsrf)%flag,o_wbils_srf(nsrf)%name,"Bilan sol "//clnsurf(nsrf),"W/m2" )
693 CALL histdef2d(iff,o_wbilo_srf(nsrf)%flag,o_wbilo_srf(nsrf)%name,"Bilan eau "//clnsurf(nsrf),"kg/(m2*s)")
694  if (iflag_pbl>1 .and. lev_files(iff).gt.10 ) then
695 CALL histdef2d(iff,o_tke_srf(nsrf)%flag,o_tke_srf(nsrf)%name,"Max Turb. Kinetic Energy "//clnsurf(nsrf),"-")
696   type_ecri(1) = 't_max(X)'
697   type_ecri(2) = 't_max(X)'
698   type_ecri(3) = 't_max(X)'
699   type_ecri(4) = 't_max(X)'
700   type_ecri(5) = 't_max(X)'
701 CALL histdef2d(iff,o_tke_max_srf(nsrf)%flag,o_tke_max_srf(nsrf)%name,"Max Turb. Kinetic Energy "//clnsurf(nsrf),"-")
702   type_ecri(1) = 'ave(X)'
703   type_ecri(2) = 'ave(X)'
704   type_ecri(3) = 'ave(X)'
705   type_ecri(4) = 'inst(X)'
706   type_ecri(5) = 'ave(X)'
707  endif
708 CALL histdef2d(iff,o_albe_srf(nsrf)%flag,o_albe_srf(nsrf)%name,"Albedo surf. "//clnsurf(nsrf),"-")
709 CALL histdef2d(iff,o_rugs_srf(nsrf)%flag,o_rugs_srf(nsrf)%name,"Latent heat flux "//clnsurf(nsrf),"W/m2")
710 CALL histdef2d(iff,o_ages_srf(nsrf)%flag,o_ages_srf(nsrf)%name,"Snow age", "day")
711     END DO
712
713 IF (ok_ade) THEN
714  CALL histdef2d(iff,o_topswad%flag,o_topswad%name, "ADE at TOA", "W/m2")
715  CALL histdef2d(iff,o_solswad%flag,o_solswad%name, "ADE at SRF", "W/m2")
716 ENDIF
717
718 IF (ok_aie) THEN
719  CALL histdef2d(iff,o_topswai%flag,o_topswai%name, "AIE at TOA", "W/m2")
720  CALL histdef2d(iff,o_solswai%flag,o_solswai%name, "AIE at SFR", "W/m2")
721 ENDIF
722
723
724 CALL histdef2d(iff,o_albs%flag,o_albs%name, "Surface albedo", "-")
725 CALL histdef2d(iff,o_albslw%flag,o_albslw%name, "Surface albedo LW", "-")
726 CALL histdef2d(iff,o_cdrm%flag,o_cdrm%name, "Momentum drag coef.", "-")
727 CALL histdef2d(iff,o_cdrh%flag,o_cdrh%name, "Heat drag coef.", "-" )
728 CALL histdef2d(iff,o_cldl%flag,o_cldl%name, "Low-level cloudiness", "-")
729 CALL histdef2d(iff,o_cldm%flag,o_cldm%name, "Mid-level cloudiness", "-")
730 CALL histdef2d(iff,o_cldh%flag,o_cldh%name, "High-level cloudiness", "-")
731 CALL histdef2d(iff,o_cldt%flag,o_cldt%name, "Total cloudiness", "%")
732 CALL histdef2d(iff,o_cldq%flag,o_cldq%name, "Cloud liquid water path", "kg/m2")
733 CALL histdef2d(iff,o_lwp%flag,o_lwp%name, "Cloud water path", "kg/m2")
734 CALL histdef2d(iff,o_iwp%flag,o_iwp%name, "Cloud ice water path", "kg/m2" )
735 CALL histdef2d(iff,o_ue%flag,o_ue%name, "Zonal energy transport", "-")
736 CALL histdef2d(iff,o_ve%flag,o_ve%name, "Merid energy transport", "-")
737 CALL histdef2d(iff,o_uq%flag,o_uq%name, "Zonal humidity transport", "-")
738 CALL histdef2d(iff,o_vq%flag,o_vq%name, "Merid humidity transport", "-")
739
740     IF(iflag_con.GE.3) THEN ! sb
741 CALL histdef2d(iff,o_cape%flag,o_cape%name, "Conv avlbl pot ener", "J/kg")
742 CALL histdef2d(iff,o_pbase%flag,o_pbase%name, "Cld base pressure", "mb")
743 CALL histdef2d(iff,o_ptop%flag,o_ptop%name, "Cld top pressure", "mb")
744 CALL histdef2d(iff,o_fbase%flag,o_fbase%name, "Cld base mass flux", "kg/m2/s")
745 CALL histdef2d(iff,o_prw%flag,o_prw%name, "Precipitable water", "kg/m2")
746   type_ecri(1) = 't_max(X)'
747   type_ecri(2) = 't_max(X)'
748   type_ecri(3) = 't_max(X)'
749   type_ecri(4) = 't_max(X)'
750   type_ecri(5) = 't_max(X)'
751 CALL histdef2d(iff,o_cape_max%flag,o_cape_max%name, "CAPE max.", "J/kg")
752   type_ecri(1) = 'ave(X)'
753   type_ecri(2) = 'ave(X)'
754   type_ecri(3) = 'ave(X)'
755   type_ecri(4) = 'inst(X)'
756   type_ecri(5) = 'ave(X)'
757 CALL histdef3d(iff,o_upwd%flag,o_upwd%name, "saturated updraft", "kg/m2/s")
758 CALL histdef3d(iff,o_Ma%flag,o_Ma%name, "undilute adiab updraft", "kg/m2/s")
759 CALL histdef3d(iff,o_dnwd%flag,o_dnwd%name, "saturated downdraft", "kg/m2/s")
760 CALL histdef3d(iff,o_dnwd0%flag,o_dnwd0%name, "unsat. downdraft", "kg/m2/s")
761     ENDIF !iflag_con .GE. 3
762
763 CALL histdef2d(iff,o_s_pblh%flag,o_s_pblh%name, "Boundary Layer Height", "m")
764 CALL histdef2d(iff,o_s_pblt%flag,o_s_pblt%name, "t at Boundary Layer Height", "K")
765 CALL histdef2d(iff,o_s_lcl%flag,o_s_lcl%name, "Condensation level", "m")
766 CALL histdef2d(iff,o_s_capCL%flag,o_s_capCL%name, "Conv avlbl pot enerfor ABL", "J/m2" )
767 CALL histdef2d(iff,o_s_oliqCL%flag,o_s_oliqCL%name, "Liq Water in BL", "kg/m2")
768 CALL histdef2d(iff,o_s_cteiCL%flag,o_s_cteiCL%name, "Instability criteria(ABL)", "K")
769 CALL histdef2d(iff,o_s_therm%flag,o_s_therm%name, "Exces du thermique", "K")
770 CALL histdef2d(iff,o_s_trmb1%flag,o_s_trmb1%name, "deep_cape(HBTM2)", "J/m2")
771 CALL histdef2d(iff,o_s_trmb2%flag,o_s_trmb2%name, "inhibition (HBTM2)", "J/m2")
772 CALL histdef2d(iff,o_s_trmb3%flag,o_s_trmb3%name, "Point Omega (HBTM2)", "m")
773
774! Champs interpolles sur des niveaux de pression
775! iif=1 on ecrit u v w phi sur 850 700 500 200 au niv 1
776! iif=2 on ecrit w et ph 500 seulement au niv 1
777!        et u v sur 850 700 500 200
778! iif=3 on ecrit ph a 500 seulement au niv 1
779!      on ecrit u v t q a 850 700 500 200 au niv 3
780
781   zstophym(iff) = ecrit_files(iff)
782   type_ecri(1) = 'inst(X)'
783   type_ecri(2) = 'inst(X)'
784   type_ecri(3) = 'inst(X)'
785   type_ecri(4) = 'inst(X)'
786   type_ecri(5) = 'inst(X)'
787
788! Attention a reverifier
789
790        ilev=0       
791        DO k=1, nlevSTD
792     IF(k.GE.2.AND.k.LE.12) bb2=clevSTD(k)
793!     IF(k.GE.13.AND.k.LE.17) bb3=clevSTD(k)
794     IF(bb2.EQ."850".OR.bb2.EQ."700".OR.bb2.EQ."500".OR.bb2.EQ."200")THEN
795      ilev=ilev+1
796      print*,'ilev bb2 flag name ',ilev,bb2,o_uSTDlevs(ilev)%flag,o_uSTDlevs(ilev)%name
797 CALL histdef2d(iff,o_uSTDlevs(ilev)%flag,o_uSTDlevs(ilev)%name,"Zonal wind "//bb2//"mb", "m/s")
798 CALL histdef2d(iff,o_vSTDlevs(ilev)%flag,o_vSTDlevs(ilev)%name,"Meridional wind "//bb2//"mb", "m/s")
799 CALL histdef2d(iff,o_wSTDlevs(ilev)%flag,o_wSTDlevs(ilev)%name,"Vertical wind "//bb2//"mb", "Pa/s")
800 CALL histdef2d(iff,o_phiSTDlevs(ilev)%flag,o_phiSTDlevs(ilev)%name,"Geopotential "//bb2//"mb", "m")
801 CALL histdef2d(iff,o_qSTDlevs(ilev)%flag,o_qSTDlevs(ilev)%name,"Specific humidity "//bb2//"mb", "kg/kg" )
802 CALL histdef2d(iff,o_tSTDlevs(ilev)%flag,o_tSTDlevs(ilev)%name,"Temperature "//bb2//"mb", "K")
803     ENDIF !(bb2.EQ."850".OR.bb2.EQ."700".OR."500".OR.bb2.EQ."200")
804       ENDDO
805   zstophym(iff) = dtime
806   type_ecri(1) = 'ave(X)'
807   type_ecri(2) = 'ave(X)'
808   type_ecri(3) = 'ave(X)'
809   type_ecri(4) = 'inst(X)'
810   type_ecri(5) = 'ave(X)'
811
812 CALL histdef2d(iff,o_t_oce_sic%flag,o_t_oce_sic%name, "Temp mixte oce-sic", "K")
813
814 IF (type_ocean=='slab') &
815     CALL histdef2d(iff,o_slab_bils%flag, o_slab_bils%name,"Bilan au sol sur ocean slab", "W/m2")
816
817! Couplage conv-CL
818 IF (iflag_con.GE.3) THEN
819    IF (iflag_coupl.EQ.1) THEN
820 CALL histdef2d(iff,o_ale_bl%flag,o_ale_bl%name, "ALE BL", "m2/s2")
821 CALL histdef2d(iff,o_alp_bl%flag,o_alp_bl%name, "ALP BL", "m2/s2")
822    ENDIF
823 ENDIF !(iflag_con.GE.3)
824
825
826 CALL histdef2d(iff,o_weakinv%flag,o_weakinv%name, "Weak inversion", "-")
827 CALL histdef2d(iff,o_dthmin%flag,o_dthmin%name, "dTheta mini", "K/m")
828 CALL histdef2d(iff,o_rh2m%flag,o_rh2m%name, "Relative humidity at 2m", "%" )
829 CALL histdef2d(iff,o_qsat2m%flag,o_qsat2m%name, "Saturant humidity at 2m", "%")
830 CALL histdef2d(iff,o_tpot%flag,o_tpot%name, "Surface air potential temperature", "K")
831 CALL histdef2d(iff,o_tpote%flag,o_tpote%name, "Surface air equivalent potential temperature", "K")
832 CALL histdef2d(iff,o_SWnetOR%flag,o_SWnetOR%name, "Sfce net SW radiation OR", "W/m2")
833 CALL histdef2d(iff,o_SWdownOR%flag,o_SWdownOR%name, "Sfce incident SW radiation OR", "W/m2")
834 CALL histdef2d(iff,o_LWdownOR%flag,o_LWdownOR%name, "Sfce incident LW radiation OR", "W/m2")
835 CALL histdef2d(iff,o_snowl%flag,o_snowl%name, "Solid Large-scale Precip.", "kg/(m2*s)")
836 CALL histdef2d(iff,o_solldown%flag,o_solldown%name, "Down. IR rad. at surface", "W/m2")
837 CALL histdef2d(iff,o_dtsvdfo%flag,o_dtsvdfo%name, "Boundary-layer dTs(o)", "K/s")
838 CALL histdef2d(iff,o_dtsvdft%flag,o_dtsvdft%name, "Boundary-layer dTs(t)", "K/s")
839 CALL histdef2d(iff,o_dtsvdfg%flag,o_dtsvdfg%name, "Boundary-layer dTs(g)", "K/s")
840 CALL histdef2d(iff,o_dtsvdfi%flag,o_dtsvdfi%name, "Boundary-layer dTs(g)", "K/s")
841 CALL histdef2d(iff,o_rugs%flag,o_rugs%name, "rugosity", "-" )
842
843! Champs 3D:
844 CALL histdef3d(iff,o_lwcon%flag,o_lwcon%name, "Cloud liquid water content", "kg/kg")
845 CALL histdef3d(iff,o_iwcon%flag,o_iwcon%name, "Cloud ice water content", "kg/kg")
846 CALL histdef3d(iff,o_temp%flag,o_temp%name, "Air temperature", "K" )
847 CALL histdef3d(iff,o_theta%flag,o_theta%name, "Potential air temperature", "K" )
848 CALL histdef3d(iff,o_ovap%flag,o_ovap%name, "Specific humidity + dqphy", "kg/kg" )
849 CALL histdef3d(iff,o_ovapinit%flag,o_ovapinit%name, "Specific humidity", "kg/kg" )
850 CALL histdef3d(iff,o_geop%flag,o_geop%name, "Geopotential height", "m2/s2")
851 CALL histdef3d(iff,o_vitu%flag,o_vitu%name, "Zonal wind", "m/s" )
852 CALL histdef3d(iff,o_vitv%flag,o_vitv%name, "Meridional wind", "m/s" )
853 CALL histdef3d(iff,o_vitw%flag,o_vitw%name, "Vertical wind", "Pa/s" )
854 CALL histdef3d(iff,o_pres%flag,o_pres%name, "Air pressure", "Pa" )
855 CALL histdef3d(iff,o_rneb%flag,o_rneb%name, "Cloud fraction", "-")
856 CALL histdef3d(iff,o_rnebcon%flag,o_rnebcon%name, "Convective Cloud Fraction", "-")
857 CALL histdef3d(iff,o_rhum%flag,o_rhum%name, "Relative humidity", "-")
858 CALL histdef3d(iff,o_ozone%flag,o_ozone%name, "Ozone concentration", "ppmv")
859 CALL histdef3d(iff,o_dtphy%flag,o_dtphy%name, "Physics dT", "K/s")
860 CALL histdef3d(iff,o_dqphy%flag,o_dqphy%name, "Physics dQ", "(kg/kg)/s")
861 CALL histdef3d(iff,o_cldtau%flag,o_cldtau%name, "Cloud optical thickness", "1")
862 CALL histdef3d(iff,o_cldemi%flag,o_cldemi%name, "Cloud optical emissivity", "1")
863!IM: bug ?? dimensionnement variables (klon,klev+1) pmflxr, pmflxs, prfl, psfl
864! CALL histdef3d(iff,o_pr_con_l%flag,o_pmflxr%name, "Convective precipitation lic", " ")
865! CALL histdef3d(iff,o_pr_con_i%flag,o_pmflxs%name, "Convective precipitation ice", " ")
866! CALL histdef3d(iff,o_pr_lsc_l%flag,o_prfl%name, "Large scale precipitation lic", " ")
867! CALL histdef3d(iff,o_pr_lsc_i%flag,o_psfl%name, "Large scale precipitation ice", " ")
868
869!FH Sorties pour la couche limite
870     if (iflag_pbl>1) then
871 CALL histdef3d(iff,o_tke%flag,o_tke%name, "TKE", "m2/s2")
872   type_ecri(1) = 't_max(X)'
873   type_ecri(2) = 't_max(X)'
874   type_ecri(3) = 't_max(X)'
875   type_ecri(4) = 't_max(X)'
876   type_ecri(5) = 't_max(X)'
877 CALL histdef3d(iff,o_tke_max%flag,o_tke_max%name, "TKE max", "m2/s2")
878   type_ecri(1) = 'ave(X)'
879   type_ecri(2) = 'ave(X)'
880   type_ecri(3) = 'ave(X)'
881   type_ecri(4) = 'inst(X)'
882   type_ecri(5) = 'ave(X)'
883     endif
884
885 CALL histdef3d(iff,o_kz%flag,o_kz%name, "Kz melange", "m2/s")
886   type_ecri(1) = 't_max(X)'
887   type_ecri(2) = 't_max(X)'
888   type_ecri(3) = 't_max(X)'
889   type_ecri(4) = 't_max(X)'
890   type_ecri(5) = 't_max(X)'
891 CALL histdef3d(iff,o_kz_max%flag,o_kz_max%name, "Kz melange max", "m2/s" )
892   type_ecri(1) = 'ave(X)'
893   type_ecri(2) = 'ave(X)'
894   type_ecri(3) = 'ave(X)'
895   type_ecri(4) = 'inst(X)'
896   type_ecri(5) = 'ave(X)'
897 CALL histdef3d(iff,o_clwcon%flag,o_clwcon%name, "Convective Cloud Liquid water content", "kg/kg")
898 CALL histdef3d(iff,o_dtdyn%flag,o_dtdyn%name, "Dynamics dT", "K/s")
899 CALL histdef3d(iff,o_dqdyn%flag,o_dqdyn%name, "Dynamics dQ", "(kg/kg)/s")
900 CALL histdef3d(iff,o_dudyn%flag,o_dudyn%name, "Dynamics dU", "m/s2")
901 CALL histdef3d(iff,o_dvdyn%flag,o_dvdyn%name, "Dynamics dV", "m/s2")
902 CALL histdef3d(iff,o_dtcon%flag,o_dtcon%name, "Convection dT", "K/s")
903 CALL histdef3d(iff,o_ducon%flag,o_ducon%name, "Convection du", "m/s2")
904 CALL histdef3d(iff,o_dqcon%flag,o_dqcon%name, "Convection dQ", "(kg/kg)/s")
905
906! Wakes
907 IF(iflag_con.EQ.3) THEN
908 IF (iflag_wake == 1) THEN
909   CALL histdef2d(iff,o_ale_wk%flag,o_ale_wk%name, "ALE WK", "m2/s2")
910   CALL histdef2d(iff,o_alp_wk%flag,o_alp_wk%name, "ALP WK", "m2/s2")
911   CALL histdef2d(iff,o_ale%flag,o_ale%name, "ALE", "m2/s2")
912   CALL histdef2d(iff,o_alp%flag,o_alp%name, "ALP", "W/m2")
913   CALL histdef2d(iff,o_cin%flag,o_cin%name, "Convective INhibition", "m2/s2")
914   CALL histdef2d(iff,o_wape%flag,o_WAPE%name, "WAPE", "m2/s2")
915   CALL histdef2d(iff,o_wake_h%flag,o_wake_h%name, "wake_h", "-")
916   CALL histdef2d(iff,o_wake_s%flag,o_wake_s%name, "wake_s", "-")
917   CALL histdef3d(iff,o_dtwak%flag,o_dtwak%name, "Wake dT", "K/s")
918   CALL histdef3d(iff,o_dqwak%flag,o_dqwak%name, "Wake dQ", "(kg/kg)/s")
919   CALL histdef3d(iff,o_wake_deltat%flag,o_wake_deltat%name, "wake_deltat", " ")
920   CALL histdef3d(iff,o_wake_deltaq%flag,o_wake_deltaq%name, "wake_deltaq", " ")
921   CALL histdef3d(iff,o_wake_omg%flag,o_wake_omg%name, "wake_omg", " ")
922 ENDIF
923   CALL histdef3d(iff,o_Vprecip%flag,o_Vprecip%name, "precipitation vertical profile", "-")
924   CALL histdef3d(iff,o_ftd%flag,o_ftd%name, "tend temp due aux descentes precip", "-")
925   CALL histdef3d(iff,o_fqd%flag,o_fqd%name,"tend vap eau due aux descentes precip", "-")
926 ENDIF !(iflag_con.EQ.3)
927
928 CALL histdef3d(iff,o_dtlsc%flag,o_dtlsc%name, "Condensation dT", "K/s")
929 CALL histdef3d(iff,o_dtlschr%flag,o_dtlschr%name,"Large-scale condensational heating rate","K/s")
930 CALL histdef3d(iff,o_dqlsc%flag,o_dqlsc%name, "Condensation dQ", "(kg/kg)/s")
931 CALL histdef3d(iff,o_dtvdf%flag,o_dtvdf%name, "Boundary-layer dT", "K/s")
932 CALL histdef3d(iff,o_dqvdf%flag,o_dqvdf%name, "Boundary-layer dQ", "(kg/kg)/s")
933 CALL histdef3d(iff,o_dteva%flag,o_dteva%name, "Reevaporation dT", "K/s")
934 CALL histdef3d(iff,o_dqeva%flag,o_dqeva%name, "Reevaporation dQ", "(kg/kg)/s")
935 CALL histdef3d(iff,o_ptconv%flag,o_ptconv%name, "POINTS CONVECTIFS", " ")
936 CALL histdef3d(iff,o_ratqs%flag,o_ratqs%name, "RATQS", " ")
937 CALL histdef3d(iff,o_dtthe%flag,o_dtthe%name, "Dry adjust. dT", "K/s")
938
939if(iflag_thermals.gt.1) THEN
940 CALL histdef3d(iff,o_f_th%flag,o_f_th%name, "Thermal plume mass flux", "K/s")
941 CALL histdef3d(iff,o_e_th%flag,o_e_th%name,"Thermal plume entrainment","K/s")
942 CALL histdef3d(iff,o_w_th%flag,o_w_th%name,"Thermal plume vertical velocity","m/s")
943 CALL histdef3d(iff,o_lambda_th%flag,o_lambda_th%name,"Thermal plume vertical velocity","m/s")
944 CALL histdef3d(iff,o_q_th%flag,o_q_th%name, "Thermal plume total humidity", "kg/kg")
945 CALL histdef3d(iff,o_a_th%flag,o_a_th%name, "Thermal plume fraction", "")
946 CALL histdef3d(iff,o_d_th%flag,o_d_th%name, "Thermal plume detrainment", "K/s")
947endif !iflag_thermals.gt.1
948 CALL histdef2d(iff,o_f0_th%flag,o_f0_th%name, "Thermal closure mass flux", "K/s")
949 CALL histdef2d(iff,o_zmax_th%flag,o_zmax_th%name, "Thermal plume height", "K/s")
950 CALL histdef3d(iff,o_dqthe%flag,o_dqthe%name, "Dry adjust. dQ", "(kg/kg)/s")
951 CALL histdef3d(iff,o_dtajs%flag,o_dtajs%name, "Dry adjust. dT", "K/s")
952 CALL histdef3d(iff,o_dqajs%flag,o_dqajs%name, "Dry adjust. dQ", "(kg/kg)/s")
953 CALL histdef3d(iff,o_dtswr%flag,o_dtswr%name, "SW radiation dT", "K/s")
954 CALL histdef3d(iff,o_dtsw0%flag,o_dtsw0%name, "CS SW radiation dT", "K/s")
955 CALL histdef3d(iff,o_dtlwr%flag,o_dtlwr%name, "LW radiation dT", "K/s")
956 CALL histdef3d(iff,o_dtlw0%flag,o_dtlw0%name, "CS LW radiation dT", "K/s")
957 CALL histdef3d(iff,o_dtec%flag,o_dtec%name, "Cinetic dissip dT", "K/s")
958 CALL histdef3d(iff,o_duvdf%flag,o_duvdf%name, "Boundary-layer dU", "m/s2")
959 CALL histdef3d(iff,o_dvvdf%flag,o_dvvdf%name, "Boundary-layer dV", "m/s2")
960
961     IF (ok_orodr) THEN
962 CALL histdef3d(iff,o_duoro%flag,o_duoro%name, "Orography dU", "m/s2")
963 CALL histdef3d(iff,o_dvoro%flag,o_dvoro%name, "Orography dV", "m/s2")
964     ENDIF
965
966     IF (ok_orolf) THEN
967 CALL histdef3d(iff,o_dulif%flag,o_dulif%name, "Orography dU", "m/s2")
968 CALL histdef3d(iff,o_dvlif%flag,o_dvlif%name, "Orography dV", "m/s2")
969     ENDIF
970
971      if (nqtot>=3) THEN
972!Attention    DO iq=3,nqtot
973    DO iq=3,4 
974       iiq=niadv(iq)
975! CALL histdef3d (iff, o_trac%flag,'o_'//tnom(iq)%name,ttext(iiq), "-" )
976  CALL histdef3d (iff, o_trac(iq-2)%flag,o_trac(iq-2)%name,ttext(iiq), "-" )
977    ENDDO
978      endif
979
980        CALL histend(nid_files(iff))
981
982         ndex2d = 0
983         ndex3d = 0
984
985         ENDIF ! clef_files
986
987         ENDDO !
988      end subroutine phys_output_open
989
990      SUBROUTINE histdef2d (iff,flag_var,nomvar,titrevar,unitvar)
991     
992       use ioipsl
993       USE dimphy
994       USE mod_phys_lmdz_para
995
996       IMPLICIT NONE
997       
998       include "dimensions.h"
999       include "temps.h"
1000       include "indicesol.h"
1001       include "clesphys.h"
1002
1003       integer                          :: iff
1004       integer, dimension(nfiles)       :: flag_var
1005       character(len=20)                 :: nomvar
1006       character(len=*)                 :: titrevar
1007       character(len=*)                 :: unitvar
1008
1009! Appel a la lecture des noms et niveau d'ecriture des variables dans output.def
1010       call conf_physoutputs(nomvar,flag_var)
1011       
1012       if ( flag_var(iff)<=lev_files(iff) ) then
1013 call histdef (nid_files(iff),nomvar,titrevar,unitvar, &
1014               iim,jj_nb,nhorim(iff), 1,1,1, -99, 32, &
1015               type_ecri(iff), zstophym(iff),zoutm(iff))               
1016       endif                     
1017      end subroutine histdef2d
1018
1019      SUBROUTINE histdef3d (iff,flag_var,nomvar,titrevar,unitvar)
1020
1021       use ioipsl
1022       USE dimphy
1023       USE mod_phys_lmdz_para
1024
1025       IMPLICIT NONE
1026
1027       include "dimensions.h"
1028       include "temps.h"
1029       include "indicesol.h"
1030       include "clesphys.h"
1031
1032       integer                          :: iff
1033       integer, dimension(nfiles)       :: flag_var
1034       character(len=20)                 :: nomvar
1035       character(len=*)                 :: titrevar
1036       character(len=*)                 :: unitvar
1037
1038! Appel a la lecture des noms et niveau d'ecriture des variables dans output.def
1039       call conf_physoutputs(nomvar,flag_var)
1040
1041       if ( flag_var(iff)<=lev_files(iff) ) then
1042          call histdef (nid_files(iff), nomvar, titrevar, unitvar, &
1043               iim, jj_nb, nhorim(iff), klev, levmin(iff), &
1044               levmax(iff)-levmin(iff)+1, nvertm(iff), 32, type_ecri(iff), &
1045               zstophym(iff), zoutm(iff))
1046       endif
1047      end subroutine histdef3d
1048
1049      SUBROUTINE conf_physoutputs(nam_var,flag_var)
1050!!! Lecture des noms et niveau de sortie des variables dans output.def
1051!   en utilisant les routines getin de IOIPSL 
1052       use ioipsl
1053
1054       IMPLICIT NONE
1055
1056       include 'iniprint.h'
1057
1058       character(len=20)                :: nam_var
1059       integer, dimension(nfiles)      :: flag_var
1060       integer, dimension(nfiles),save :: flag_var_omp
1061       character(len=20),save           :: nam_var_omp
1062
1063        flag_var_omp = flag_var
1064        nam_var_omp = nam_var
1065        IF(prt_level>10) WRITE(lunout,*)'Avant getin: nam_var flag_var ',nam_var,flag_var(:)
1066        call getin('flag_'//nam_var,flag_var_omp)
1067        flag_var = flag_var_omp
1068        call getin('name_'//nam_var,nam_var_omp)
1069        nam_var=nam_var_omp
1070       
1071        IF(prt_level>10) WRITE(lunout,*)'Apres getin: nam_var flag_var ',nam_var,flag_var(:)
1072
1073      END SUBROUTINE conf_physoutputs
1074
1075END MODULE phys_output_mod
1076
Note: See TracBrowser for help on using the repository browser.