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

Last change on this file since 1105 was 1095, checked in by jghattas, 15 years ago

Ajoute des variables de sorties, necessaires à l'evaluation du code radiatif, qui avaient disparu avec la reecriture.
Anne C/ Abderrahmane I

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