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

Last change on this file since 1054 was 1054, checked in by lmdzadmin, 16 years ago

Ajout sorties tendances dynamiques histLES
ACA/FH/IM

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 44.6 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   integer, parameter                           :: nfiles = 5
15   logical, dimension(nfiles), save             :: clef_files
16   integer, dimension(nfiles), save             :: lev_files
17   integer, dimension(nfiles), save             :: nid_files
18
19   integer, dimension(nfiles), save             :: nhorim, nvertm
20   real, dimension(nfiles), save                :: zstophym, zoutm
21   CHARACTER(len=20), dimension(nfiles), save   :: type_ecri
22
23!   integer, save                     :: nid_hf3d
24
25!!!!!!!!!! stockage dans une region limitee pour chaque fichier !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
26!                 entre [lonmin_reg,lonmax_reg] et [latmin_reg,latmax_reg]
27
28  logical, dimension(nfiles), save  :: ok_reglim         = (/ .false., .false., .false., .false., .true. /)
29  real, dimension(nfiles), save     :: lonmin_reg        = (/ 0., -45., 0., 0., -162. /)
30  real, dimension(nfiles), save     :: lonmax_reg        = (/ 90., 45., 90., 90., -144. /)
31  real, dimension(nfiles), save     :: latmin_reg        = (/ 0., -45., 0., 0., 7. /)
32  real, dimension(nfiles), save     :: latmax_reg        = (/ 90., 90., 90., 90., 21. /)
33
34!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
35!! Definition pour chaque variable du niveau d ecriture dans chaque fichier
36!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!/ histmth, histday, histhf, histins /)!!!!!!!!!!!!
37!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
38
39!!! 1D
40  integer, dimension(nfiles) , save :: flag_phis         = (/ 1, 1, 10, 1, 1 /)
41  integer, dimension(nfiles) , save :: flag_aire         = (/ 1, 1, 10,  1, 1 /)
42  integer, dimension(nfiles) , save :: flag_contfracATM  = (/ 10, 1,  1, 10, 10 /)
43  integer, dimension(nfiles) , save :: flag_contfracOR   = (/ 10, 1,  1, 10, 10 /)
44  integer, dimension(nfiles) , save :: flag_aireTER      = (/ 10, 10, 1, 10, 10 /)
45 
46!!! 2D
47  integer, dimension(nfiles) , save :: flag_flat         = (/ 10, 1, 10, 10, 1 /)
48  integer, dimension(nfiles) , save :: flag_slp          = (/ 1, 1, 1, 10, 1 /)
49  integer, dimension(nfiles) , save :: flag_tsol         = (/ 1, 1, 1, 1, 1 /)
50  integer, dimension(nfiles) , save :: flag_t2m          = (/ 1, 1, 1, 1, 1 /)
51  integer, dimension(nfiles) , save :: flag_t2m_min      = (/ 1, 1, 10, 10, 10 /)
52  integer, dimension(nfiles) , save :: flag_t2m_max      = (/ 1, 1, 10, 10, 10 /)
53  integer, dimension(nfiles) , save :: flag_t2m_sol      = (/ 10, 4, 10, 10, 10 /)
54  integer, dimension(nfiles) , save :: flag_wind10m      = (/ 1, 1, 1, 10, 10 /)
55  integer, dimension(nfiles) , save :: flag_wind10max    = (/ 10, 1, 10, 10, 10 /)
56  integer, dimension(nfiles) , save :: flag_sicf         = (/ 1, 1, 10, 10, 10 /)
57  integer, dimension(nfiles) , save :: flag_q2m          = (/ 1, 1, 1, 1, 1 /)
58  integer, dimension(nfiles) , save :: flag_u10m         = (/ 1, 1, 1, 1, 1 /)
59  integer, dimension(nfiles) , save :: flag_v10m         = (/ 1, 1, 1, 1, 1 /)
60  integer, dimension(nfiles) , save :: flag_psol         = (/ 1, 1, 1, 1, 1 /)
61  integer, dimension(nfiles) , save :: flag_qsurf        = (/ 1, 10, 10, 10, 10 /)
62
63  integer, dimension(nfiles) , save :: flag_u10m_sol     = (/ 10, 4, 10, 10, 10 /)
64  integer, dimension(nfiles) , save :: flag_v10m_sol     = (/ 10, 4, 10, 10, 10 /)
65
66  integer, dimension(nfiles) , save :: flag_qsol         = (/ 1, 10, 10, 1, 1 /)
67
68  integer, dimension(nfiles),save   :: flag_ndayrain     = (/ 1, 10, 10, 10, 10 /)
69  integer, dimension(nfiles),save   :: flag_precip       = (/ 1, 1, 1, 1, 1 /)
70  integer,  dimension(nfiles), save :: flag_plul         = (/ 1, 1, 1, 1, 10 /)
71
72  integer, dimension(nfiles) , save :: flag_pluc         = (/ 1, 1, 1, 1, 10 /)
73  integer, dimension(nfiles) , save :: flag_snow         = (/ 1, 1, 10, 1, 10 /)
74  integer, dimension(nfiles) , save :: flag_evap         = (/ 1, 1, 10, 1, 10 /)
75  integer, dimension(nfiles) , save :: flag_tops         = (/ 1, 1, 10, 10, 10 /)
76  integer, dimension(nfiles) , save :: flag_tops0        = (/ 1, 5, 10, 10, 10 /)
77  integer, dimension(nfiles) , save :: flag_topl         = (/ 1, 1, 10, 1, 10 /)
78  integer, dimension(nfiles) , save :: flag_topl0        = (/ 1, 5, 10, 10, 10 /)
79  integer, dimension(nfiles) , save :: flag_SWupTOA      = (/ 1, 4, 10, 10, 10 /)
80  integer, dimension(nfiles) , save :: flag_SWupTOAclr   = (/ 1, 4, 10, 10, 10 /)
81  integer, dimension(nfiles) , save :: flag_SWdnTOA      = (/ 1, 4, 10, 10, 10 /)
82  integer, dimension(nfiles) , save :: flag_SWdnTOAclr   = (/ 1, 4, 10, 10, 10 /)
83  integer, dimension(nfiles) , save :: flag_SWup200      = (/ 1, 10, 10, 10, 10 /)
84  integer, dimension(nfiles) , save :: flag_SWup200clr   = (/ 10, 1, 10, 10, 10 /)
85  integer, dimension(nfiles) , save :: flag_SWdn200      = (/ 1, 10, 10, 10, 10 /)
86  integer, dimension(nfiles) , save :: flag_SWdn200clr   = (/ 10, 1, 10, 10, 10 /)
87
88! arajouter
89!  integer, dimension(nfiles) , save :: flag_LWupTOA     = (/ 1, 4, 10, 10, 10 /)
90!  integer, dimension(nfiles) , save :: flag_LWupTOAclr  = (/ 1, 4, 10, 10, 10 /)
91!  integer, dimension(nfiles) , save :: flag_LWdnTOA     = (/ 1, 4, 10, 10, 10 /)
92!  integer, dimension(nfiles) , save :: flag_LWdnTOAclr  = (/ 1, 4, 10, 10, 10 /)
93
94  integer, dimension(nfiles) , save :: flag_LWup200      = (/ 1, 10, 10, 10, 10 /)
95  integer, dimension(nfiles) , save :: flag_LWup200clr   = (/ 1, 10, 10, 10, 10 /)
96  integer, dimension(nfiles) , save :: flag_LWdn200      = (/ 1, 10, 10, 10, 10 /)
97  integer, dimension(nfiles) , save :: flag_LWdn200clr   = (/ 1, 10, 10, 10, 10 /)
98  integer, dimension(nfiles) , save :: flag_sols         = (/ 1, 1, 10, 1, 10 /)
99  integer, dimension(nfiles) , save :: flag_sols0        = (/ 1, 5, 10, 10, 10 /)
100  integer, dimension(nfiles) , save :: flag_soll         = (/ 1, 1, 10, 1, 10 /)
101  integer, dimension(nfiles) , save :: flag_soll0        = (/ 1, 5, 10, 10, 10 /)
102  integer, dimension(nfiles) , save :: flag_radsol       = (/ 1, 1, 10, 10, 10 /)
103  integer, dimension(nfiles) , save :: flag_SWupSFC      = (/ 1, 4, 10, 10, 10 /)
104  integer, dimension(nfiles) , save :: flag_SWupSFCclr   = (/ 1, 4, 10, 10, 10 /)
105  integer, dimension(nfiles) , save :: flag_SWdnSFC      = (/ 1, 1, 10, 10, 10 /)
106  integer, dimension(nfiles) , save :: flag_SWdnSFCclr   = (/ 1, 4, 10, 10, 10 /)
107  integer, dimension(nfiles) , save :: flag_LWupSFC      = (/ 1, 4, 10, 10, 10 /)
108  integer, dimension(nfiles) , save :: flag_LWupSFCclr   = (/ 1, 4, 10, 10, 10 /)
109  integer, dimension(nfiles) , save :: flag_LWdnSFC      = (/ 1, 4, 10, 10, 10 /)
110  integer, dimension(nfiles) , save :: flag_LWdnSFCclr   = (/ 1, 4, 10, 10, 10 /)
111  integer, dimension(nfiles) , save :: flag_bils         = (/ 1, 2, 10, 1, 10 /)
112  integer, dimension(nfiles) , save :: flag_sens         = (/ 1, 1, 10, 1, 1 /)
113  integer, dimension(nfiles) , save :: flag_fder         = (/ 1, 2, 10, 1, 10 /)
114  integer, dimension(nfiles) , save :: flag_ffonte       = (/ 1, 10, 10, 10, 10 /)
115  integer, dimension(nfiles) , save :: flag_fqcalving    = (/ 1, 10, 10, 10, 10 /)
116  integer, dimension(nfiles) , save :: flag_fqfonte      = (/ 1, 10, 10, 10, 10 /)
117
118  integer, dimension(nfiles) , save :: flag_taux_sol     = (/ 1, 4, 10, 1, 10 /)
119  integer, dimension(nfiles) , save :: flag_tauy_sol     = (/ 1, 4, 10, 1, 10 /)
120
121  integer, dimension(nfiles) , save :: flag_pourc_sol    = (/ 1, 4, 10, 1, 10 /)
122  integer, dimension(nfiles) , save :: flag_fract_sol    = (/ 1, 4, 10, 1, 10 /)
123  integer, dimension(nfiles) , save :: flag_tsol_sol     = (/ 1, 4, 10, 1, 10 /)
124  integer, dimension(nfiles) , save :: flag_sens_sol     = (/ 1, 4, 10, 1, 10 /)
125  integer, dimension(nfiles) , save :: flag_lat_sol      = (/ 1, 4, 10, 1, 10 /)
126  integer, dimension(nfiles) , save :: flag_flw_sol      = (/ 1, 10, 10, 10, 10 /)
127  integer, dimension(nfiles) , save :: flag_fsw_sol      = (/ 1, 10, 10, 10, 10 /)
128  integer, dimension(nfiles) , save :: flag_wbils_sol    = (/ 1, 10, 10, 10, 10 /)
129  integer, dimension(nfiles) , save :: flag_wbilo_sol    = (/ 1, 10, 10, 10, 10 /)
130
131  integer, dimension(nfiles) , save :: flag_cdrm         = (/ 1, 10, 10, 1, 10 /)
132  integer, dimension(nfiles) , save :: flag_cdrh         = (/ 1, 10, 10, 1, 10 /)
133  integer, dimension(nfiles) , save :: flag_cldl         = (/ 1, 1, 10, 10, 10 /)
134  integer, dimension(nfiles) , save :: flag_cldm         = (/ 1, 1, 10, 10, 10 /)
135  integer, dimension(nfiles) , save :: flag_cldh         = (/ 1, 1, 10, 10, 10 /)
136  integer, dimension(nfiles) , save :: flag_cldt         = (/ 1, 1, 2, 10, 10 /)
137  integer, dimension(nfiles) , save :: flag_cldq         = (/ 1, 1, 10, 10, 10 /)
138  integer, dimension(nfiles) , save :: flag_lwp          = (/ 1, 5, 10, 10, 10 /)
139  integer, dimension(nfiles) , save :: flag_iwp          = (/ 1, 5, 10, 10, 10 /)
140  integer, dimension(nfiles) , save :: flag_ue           = (/ 1, 10, 10, 10, 10 /)
141  integer, dimension(nfiles) , save :: flag_ve           = (/ 1, 10, 10, 10, 10 /)
142  integer, dimension(nfiles) , save :: flag_uq           = (/ 1, 10, 10, 10, 10 /)
143  integer, dimension(nfiles) , save :: flag_vq           = (/ 1, 10, 10, 10, 10 /)
144 
145  integer, dimension(nfiles) , save :: flag_cape         = (/ 1, 10, 10, 10, 10 /)
146  integer, dimension(nfiles) , save :: flag_pbase        = (/ 1, 10, 10, 10, 10 /)
147  integer, dimension(nfiles) , save :: flag_ptop         = (/ 1, 4, 10, 10, 10 /)
148  integer, dimension(nfiles) , save :: flag_fbase        = (/ 1, 10, 10, 10, 10 /)
149  integer, dimension(nfiles) , save :: flag_prw          = (/ 1, 1, 10, 10, 10 /)
150
151  integer, dimension(nfiles) , save :: flag_s_pblh       = (/ 1, 10, 10, 1, 1 /)
152  integer, dimension(nfiles) , save :: flag_s_pblt       = (/ 1, 10, 10, 1, 1 /)
153  integer, dimension(nfiles) , save :: flag_s_lcl       = (/ 1, 10, 10, 1, 10 /)
154  integer, dimension(nfiles) , save :: flag_s_capCL      = (/ 1, 10, 10, 1, 10 /)
155  integer, dimension(nfiles) , save :: flag_s_oliqCL    = (/ 1, 10, 10, 1, 10 /)
156  integer, dimension(nfiles) , save :: flag_s_cteiCL     = (/ 1, 10, 10, 1, 1 /)
157  integer, dimension(nfiles) , save :: flag_s_therm      = (/ 1, 10, 10, 1, 1 /)
158  integer, dimension(nfiles) , save :: flag_s_trmb1      = (/ 1, 10, 10, 1, 10 /)
159  integer, dimension(nfiles) , save :: flag_s_trmb2      = (/ 1, 10, 10, 1, 10 /)
160  integer, dimension(nfiles) , save :: flag_s_trmb3      = (/ 1, 10, 10, 1, 10 /)
161
162  integer, dimension(nfiles) , save :: flag_slab_bils    = (/ 1, 1, 10, 10, 10 /)
163
164  integer, dimension(nfiles) , save :: flag_ale_bl    = (/ 1, 1, 1, 1, 10 /)
165  integer, dimension(nfiles) , save :: flag_alp_bl    = (/ 1, 1, 1, 1, 10 /)
166  integer, dimension(nfiles) , save :: flag_ale_wk    = (/ 1, 1, 1, 1, 10 /)
167  integer, dimension(nfiles) , save :: flag_alp_wk    = (/ 1, 1, 1, 1, 10 /)
168
169  integer, dimension(nfiles) , save :: flag_ale       = (/ 1, 1, 1, 1, 10 /)
170  integer, dimension(nfiles) , save :: flag_alp       = (/ 1, 1, 1, 1, 10 /)
171  integer, dimension(nfiles) , save :: flag_cin       = (/ 1, 1, 1, 1, 10 /)
172  integer, dimension(nfiles) , save :: flag_wape       = (/ 1, 1, 1, 1, 10 /)
173
174
175! Champs interpolles sur des niveaux de pression ??? a faire correctement
176! if=1 on ecrit u v w phi sur 850 700 500 200 au niv 1
177! if=2 on ecrit w et ph 500 seulement au niv 1
178!        et u v sur 850 700 500 200
179! if=3 on ecrit ph a 500 seulement au niv 1
180!      on ecrit u v t q a 850 700 500 200 au niv 3
181!      on ecrit ph  a 500   au niv 3
182
183  integer, dimension(nfiles) , save :: flag_ulevsSTD     = (/ 1, 1, 3, 10, 10 /)
184  integer, dimension(nfiles) , save :: flag_vlevsSTD     = (/ 1, 1, 3, 10, 10 /)
185  integer, dimension(nfiles) , save :: flag_wlevsSTD     = (/ 1, 1, 10, 10, 10 /)
186  integer, dimension(nfiles) , save :: flag_tlevsSTD     = (/ 10, 10, 3, 10, 10 /)
187  integer, dimension(nfiles) , save :: flag_qlevsSTD     = (/ 10, 10, 3, 10, 10 /)
188  integer, dimension(nfiles) , save :: flag_philevsSTD   = (/ 1, 1, 1, 10, 10 /)
189
190  integer, dimension(nfiles) , save :: flag_t_oce_sic    = (/ 1, 10, 10, 10, 10 /)
191
192  integer, dimension(nfiles) , save :: flag_weakinv      = (/ 10, 1, 10, 10, 10 /)
193  integer, dimension(nfiles) , save :: flag_dthmin       = (/ 10, 1, 10, 10, 10 /)
194  integer, dimension(nfiles) , save :: flag_u10_sol      = (/ 10, 4, 10, 10, 10 /)
195  integer, dimension(nfiles) , save :: flag_v10_sol      = (/ 10, 4, 10, 10, 10 /)
196  integer, dimension(nfiles) , save :: flag_cldtau       = (/ 10, 5, 10, 10, 10 /)                     
197  integer, dimension(nfiles) , save :: flag_cldemi       = (/ 10, 5, 10, 10, 10 /)
198  integer, dimension(nfiles) , save :: flag_rh2m         = (/ 10, 5, 10, 10, 10 /)
199  integer, dimension(nfiles) , save :: flag_qsat2m       = (/ 10, 5, 10, 10, 10 /)
200  integer, dimension(nfiles) , save :: flag_tpot         = (/ 10, 5, 10, 10, 10 /)
201  integer, dimension(nfiles) , save :: flag_tpote        = (/ 10, 5, 10, 10, 10 /)
202  integer, dimension(nfiles) , save :: flag_tke          = (/ 4, 10, 10, 10, 10 /)
203  integer, dimension(nfiles) , save :: flag_tke_max      = (/ 4, 10, 10, 10, 10 /)
204  integer, dimension(nfiles) , save :: flag_tke_sol      = (/ 10, 4, 10, 10, 10 /)
205  integer, dimension(nfiles) , save :: flag_tke_max_sol  = (/ 10, 4, 10, 10, 10 /)
206  integer, dimension(nfiles) , save :: flag_kz           = (/ 4, 10, 10, 10, 10 /)
207  integer, dimension(nfiles) , save :: flag_kz_max       = (/ 4, 10, 10, 10, 10 /)
208  integer, dimension(nfiles) , save :: flag_SWnetOR      = (/ 10, 10, 2, 10, 10 /)
209  integer, dimension(nfiles) , save :: flag_SWdownOR     = (/ 10, 10, 2, 10, 10 /)
210  integer, dimension(nfiles) , save :: flag_LWdownOR     = (/ 10, 10, 2, 10, 10 /)
211
212  integer, dimension(nfiles) , save :: flag_snowl         = (/ 10, 1, 10, 10, 10 /)
213  integer, dimension(nfiles) , save :: flag_cape_max      = (/ 10, 1, 10, 10, 10 /)
214  integer, dimension(nfiles) , save :: flag_solldown      = (/ 10, 1, 10, 1, 10 /)
215
216  integer, dimension(nfiles) , save :: flag_dtsvdfo       = (/ 10, 10, 10, 1, 10 /)
217  integer, dimension(nfiles) , save :: flag_dtsvdft       = (/ 10, 10, 10, 1, 10 /)
218  integer, dimension(nfiles) , save :: flag_dtsvdfg       = (/ 10, 10, 10, 1, 10 /)
219  integer, dimension(nfiles) , save :: flag_dtsvdfi       = (/ 10, 10, 10, 1, 10 /)
220  integer, dimension(nfiles) , save :: flag_rugs          = (/ 10, 10, 10, 1, 1 /)
221
222!!!!!!!!!!!!!!!!!!!!!! 3D !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
223  integer, dimension(nfiles) , save :: flag_lwcon        = (/ 2, 5, 10, 10, 1 /)
224  integer, dimension(nfiles) , save :: flag_iwcon        = (/ 2, 5, 10, 10, 10 /)
225  integer, dimension(nfiles) , save :: flag_temp         = (/ 2, 3, 4, 1, 1 /)
226  integer, dimension(nfiles) , save :: flag_theta         = (/ 2, 3, 4, 1, 1 /)
227  integer, dimension(nfiles) , save :: flag_ovap         = (/ 2, 3, 4, 1, 1 /)
228  integer, dimension(nfiles) , save :: flag_wvapp        = (/ 2, 10, 10, 10, 10 /)
229  integer, dimension(nfiles) , save :: flag_geop         = (/ 2, 3, 10, 1, 1 /)
230  integer, dimension(nfiles) , save :: flag_vitu         = (/ 2, 3, 4, 1, 1 /)
231  integer, dimension(nfiles) , save :: flag_vitv         = (/ 2, 3, 4, 1, 1 /)
232  integer, dimension(nfiles) , save :: flag_vitw         = (/ 2, 3, 10, 10, 1 /)
233  integer, dimension(nfiles) , save :: flag_pres         = (/ 2, 3, 10, 1, 1 /)
234  integer, dimension(nfiles) , save :: flag_rneb         = (/ 2, 5, 10, 10, 1 /)
235  integer, dimension(nfiles) , save :: flag_rnebcon      = (/ 2, 5, 10, 10, 1 /)
236  integer, dimension(nfiles) , save :: flag_rhum         = (/ 2, 10, 10, 10, 10 /)
237  integer, dimension(nfiles) , save :: flag_ozone        = (/ 2, 10, 10, 10, 10 /)
238  integer, dimension(nfiles) , save :: flag_upwd         = (/ 2, 10, 10, 10, 10 /)
239  integer, dimension(nfiles) , save :: flag_dtphy        = (/ 2, 10, 10, 10, 1 /)
240  integer, dimension(nfiles) , save :: flag_dqphy        = (/ 2, 10, 10, 10, 1 /)
241  integer, dimension(nfiles) , save :: flag_pr_con_l     = (/ 2, 10, 10, 10, 10 /)
242  integer, dimension(nfiles) , save :: flag_pr_con_i     = (/ 2, 10, 10, 10, 10 /)
243  integer, dimension(nfiles) , save :: flag_pr_lsc_l     = (/ 2, 10, 10, 10, 10 /)
244  integer, dimension(nfiles) , save :: flag_pr_lsc_i     = (/ 2, 10, 10, 10, 10 /)
245!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
246
247  integer, dimension(nfiles) , save :: flag_albe_sol     = (/ 3, 4, 10, 1, 10 /)
248  integer, dimension(nfiles) , save :: flag_ages_sol     = (/ 3, 10, 10, 10, 10 /)
249  integer, dimension(nfiles) , save :: flag_rugs_sol     = (/ 3, 4, 10, 1, 10 /)
250
251  integer, dimension(nfiles) , save :: flag_albs         = (/ 3, 10, 10, 1, 10 /)
252  integer, dimension(nfiles) , save :: flag_albslw       = (/ 3, 10, 10, 1, 10 /)
253
254  integer, dimension(nfiles) , save :: flag_clwcon       = (/ 4, 10, 10, 10, 10 /)
255  integer, dimension(nfiles) , save :: flag_Ma           = (/ 4, 10, 10, 10, 10 /)
256  integer, dimension(nfiles) , save :: flag_dnwd         = (/ 4, 10, 10, 10, 10 /)
257  integer, dimension(nfiles) , save :: flag_dnwd0        = (/ 4, 10, 10, 10, 10 /)
258  integer, dimension(nfiles) , save :: flag_dtdyn        = (/ 4, 10, 10, 10, 1 /)
259  integer, dimension(nfiles) , save :: flag_dqdyn        = (/ 4, 10, 10, 10, 1 /)
260  integer, dimension(nfiles) , save :: flag_dudyn        = (/ 4, 10, 10, 10, 1 /) !AXC
261  integer, dimension(nfiles) , save :: flag_dvdyn        = (/ 4, 10, 10, 10, 1 /) !AXC
262  integer, dimension(nfiles) , save :: flag_dtcon        = (/ 4, 5, 10, 10, 10 /)
263  integer, dimension(nfiles) , save :: flag_ducon        = (/ 4, 10, 10, 10, 10 /)
264  integer, dimension(nfiles) , save :: flag_dqcon        = (/ 4, 5, 10, 10, 10 /)
265  integer, dimension(nfiles) , save :: flag_dtwak        = (/ 4, 5, 10, 10, 10 /)
266  integer, dimension(nfiles) , save :: flag_dqwak        = (/ 4, 5, 10, 10, 10 /)
267  integer, dimension(nfiles) , save :: flag_dtlsc        = (/ 4, 10, 10, 10, 10 /)
268  integer, dimension(nfiles) , save :: flag_dtlschr      = (/ 4, 10, 10, 10, 10 /)
269  integer, dimension(nfiles) , save :: flag_dqlsc        = (/ 4, 10, 10, 10, 10 /)
270  integer, dimension(nfiles) , save :: flag_dtvdf        = (/ 4, 10, 10, 1, 10 /)
271  integer, dimension(nfiles) , save :: flag_dqvdf        = (/ 4, 10, 10, 1, 10 /)
272  integer, dimension(nfiles) , save :: flag_dteva        = (/ 4, 10, 10, 10, 10 /)
273  integer, dimension(nfiles) , save :: flag_dqeva        = (/ 4, 10, 10, 10, 10 /)
274  integer, dimension(nfiles) , save :: flag_ptconv       = (/ 4, 10, 10, 10, 10 /)
275  integer, dimension(nfiles) , save :: flag_ratqs        = (/ 4, 10, 10, 10, 10 /)
276  integer, dimension(nfiles) , save :: flag_dtthe        = (/ 4, 10, 10, 10, 10 /)
277  integer, dimension(nfiles) , save :: flag_f_th        = (/ 4, 10, 10, 10, 10 /)
278  integer, dimension(nfiles) , save :: flag_e_th        = (/ 4, 10, 10, 10, 10 /)
279  integer, dimension(nfiles) , save :: flag_w_th        = (/ 4, 10, 10, 10, 10 /)
280  integer, dimension(nfiles) , save :: flag_lambda_th        = (/ 4, 10, 10, 10, 10 /)
281  integer, dimension(nfiles) , save :: flag_q_th        = (/ 4, 10, 10, 10, 10 /)
282  integer, dimension(nfiles) , save :: flag_a_th        = (/ 4, 10, 10, 10, 10 /)
283  integer, dimension(nfiles) , save :: flag_d_th        = (/ 4, 10, 10, 10, 10 /)
284  integer, dimension(nfiles) , save :: flag_f0_th        = (/ 4, 10, 10, 10, 10 /)
285  integer, dimension(nfiles) , save :: flag_zmax_th        = (/ 4, 10, 10, 10, 10 /)
286  integer, dimension(nfiles) , save :: flag_dqthe        = (/ 4, 10, 10, 10, 1 /)
287  integer, dimension(nfiles) , save :: flag_dtajs        = (/ 4, 10, 10, 10, 10 /)
288  integer, dimension(nfiles) , save :: flag_dqajs        = (/ 4, 10, 10, 10, 10 /)
289  integer, dimension(nfiles) , save :: flag_dtswr        = (/ 4, 10, 10, 10, 1 /)
290  integer, dimension(nfiles) , save :: flag_dtsw0        = (/ 4, 10, 10, 10, 10 /)
291  integer, dimension(nfiles) , save :: flag_dtlwr        = (/ 4, 10, 10, 10, 1 /)
292  integer, dimension(nfiles) , save :: flag_dtlw0        = (/ 4, 10, 10, 10, 10 /)
293  integer, dimension(nfiles) , save :: flag_dtec         = (/ 4, 10, 10, 10, 10 /)
294  integer, dimension(nfiles) , save :: flag_duvdf        = (/ 4, 10, 10, 10, 10 /)
295  integer, dimension(nfiles) , save :: flag_dvvdf        = (/ 4, 10, 10, 10, 10 /)
296  integer, dimension(nfiles) , save :: flag_duoro        = (/ 4, 10, 10, 10, 10 /)
297  integer, dimension(nfiles) , save :: flag_dvoro        = (/ 4, 10, 10, 10, 10 /)
298  integer, dimension(nfiles) , save :: flag_dulif        = (/ 4, 10, 10, 10, 10 /)
299  integer, dimension(nfiles) , save :: flag_dvlif        = (/ 4, 10, 10, 10, 10 /)
300  integer, dimension(nfiles) , save :: flag_trac         = (/ 4, 10, 10, 10, 10 /)
301
302    CONTAINS
303
304!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
305!!!!!!!!! Ouverture des fichier et definition des variable de sortie !!!!!!!!
306!! histbeg, histvert et histdef
307!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
308 
309  SUBROUTINE phys_output_open(jjmp1,nqmax,nlevSTD,clevSTD,nbteta, &
310                              ctetaSTD,dtime, presnivs, ok_veget, &
311                              ocean, iflag_pbl,ok_mensuel,ok_journe, &
312                              ok_hf,ok_instan,ok_LES, nid_fil)   
313
314  USE iophy
315  USE dimphy
316  USE ioipsl
317  USE mod_phys_lmdz_para
318
319  IMPLICIT NONE
320  include "dimensions.h"
321  include "temps.h"
322  include "indicesol.h"
323  include "advtrac.h"
324  include "clesphys.h"
325  include "thermcell.h"
326
327  integer                               :: jjmp1, nqmax
328  integer                               :: nbteta, nlevSTD, radpas
329  logical                               :: ok_mensuel, ok_journe, ok_hf, ok_instan
330  logical                               :: ok_LES
331  real                                  :: dtime
332  integer                               :: idayref
333  real                                  :: zjulian
334  real, dimension(klev)                 :: presnivs
335  character(len=4), dimension(nlevSTD)  :: clevSTD
336  integer                               :: nsrf, k, iq, iiq, iff, i, j
337  logical                               :: ok_veget
338  integer                               :: iflag_pbl
339  CHARACTER(len=3)                      :: bb2
340  CHARACTER(len=2)                      :: bb3
341  character(len=6)                      :: ocean
342  CHARACTER(len=3)                      :: ctetaSTD(nbteta)
343  integer, dimension(nfiles)            :: nid_fil
344  real, dimension(nfiles)               :: ecrit_files
345  CHARACTER(len=20), dimension(nfiles)  :: name_files
346  INTEGER, dimension(iim*jjmp1)         ::  ndex2d
347  INTEGER, dimension(iim*jjmp1*klev)    :: ndex3d
348  integer                               :: imin_ins, imax_ins
349  integer                               :: jmin_ins, jmax_ins
350  integer, dimension(nfiles)            :: lvlmax_reg
351
352   lvlmax_reg = (/ klev, klev, klev, klev, 17 /)
353
354   name_files(1) = 'histmth'
355   name_files(2) = 'histday'
356   name_files(3) = 'histhf'
357   name_files(4) = 'histins'
358   name_files(5) = 'histLES'
359
360   type_ecri(1) = 'ave(X)'
361   type_ecri(2) = 'ave(X)'
362   type_ecri(3) = 'ave(X)'
363   type_ecri(4) = 'inst(X)'
364   type_ecri(5) = 'ave(X)'
365
366   clef_files(1) = ok_mensuel
367   clef_files(2) = ok_journe
368   clef_files(3) = ok_hf
369   clef_files(4) = ok_instan
370   clef_files(5) = ok_LES
371
372   lev_files(1) = lev_histmth
373   lev_files(2) = lev_histday
374   lev_files(3) = lev_histhf
375   lev_files(4) = 1
376   lev_files(5) = 1
377
378   ecrit_files(1) = ecrit_mth
379   ecrit_files(2) = ecrit_day
380   ecrit_files(3) = ecrit_hf
381   ecrit_files(4) = ecrit_ins
382   ecrit_files(5) = ecrit_LES
383 
384!!!!!!!!!!!!!!!!!!!!!!! Boucle sur les fichiers !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
385! Appel de histbeg et histvert pour creer le fichier et les niveaux verticaux !!
386! Appel des histbeg pour definir les variables (nom, moy ou inst, freq de sortie ..
387!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
388
389 DO iff=1,nfiles
390
391    IF (clef_files(iff)) THEN
392     
393      zstophym(iff) = dtime         ! Frequence ou l on moyenne
394      zoutm(iff) = ecrit_files(iff) ! Frequence ou l on ecrit
395
396      idayref = day_ref
397      CALL ymds2ju(annee_ref, 1, idayref, 0.0, zjulian)
398
399!!!!!!!!!!!!!!!!! Traitement dans le cas ou l'on veut stocker sur un domaine limite !!
400!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
401     if (ok_reglim(iff)) then
402
403        klev = lvlmax_reg(iff)
404
405        imin_ins=1
406        imax_ins=iim
407        jmin_ins=1
408        jmax_ins=jjmp1
409
410        do i=1,iim-1
411           print*,'io_lon(i)=',io_lon(i)
412           if (io_lon(i).le.lonmin_reg(iff)) imin_ins=i
413           if (io_lon(i).le.lonmax_reg(iff)) imax_ins=i
414        enddo
415
416        do j=1,jjmp1-1
417            print*,'io_lat(j)=',io_lat(j)
418            if (io_lat(j).ge.latmin_reg(iff)) jmax_ins=j+1
419            if (io_lat(j).ge.latmax_reg(iff)) jmin_ins=j
420        enddo
421
422         print*,'On stoke le fichier hist sur, ', &
423         imin_ins,imax_ins,jmin_ins,jmax_ins
424         print*,'On stoke le fichier instantanne sur, ', &
425         io_lon(imin_ins),io_lon(imax_ins), &
426         io_lat(jmin_ins),io_lat(jmax_ins)
427
428 CALL histbeg(name_files(iff),iim,io_lon,jjmp1,io_lat, &
429              imin_ins,imax_ins-imin_ins+1, &
430              jmin_ins,jmax_ins-jmin_ins+1, &
431              itau_phy,zjulian,dtime,nhorim(iff),nid_fil(iff))
432!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
433       else
434 CALL histbeg_phy(name_files(iff),itau_phy,zjulian,dtime,nhorim(iff),nid_fil(iff))
435       endif
436 
437      nid_files(iff)=nid_fil(iff)
438
439 CALL histvert(nid_files(iff),"presnivs","Vertical levels","mb",klev, presnivs/100., nvertm(iff))
440
441!!!!!!!!!!!!! Traitement des champs 3D pour histhf !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
442!!!!!!!!!!!!!!! A Revoir plus tard !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
443!          IF (iff.eq.3.and.lev_files(iff).ge.4) THEN
444!          CALL histbeg_phy("histhf3d",itau_phy, &
445!     &                     zjulian, dtime, &
446!     &                     nhorim, nid_hf3d)
447
448!         CALL histvert(nid_hf3d,"presnivs", &
449!     &                 "Vertical levels","mb", &
450!     &                 klev, presnivs/100., nvertm)
451!          ENDIF
452
453!!! Champs 1D !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
454 CALL histdef2d(iff,flag_phis,"phis","Surface geop.height","m2/s2")
455   type_ecri(1) = 'once'
456   type_ecri(2) = 'once'
457   type_ecri(3) = 'once'
458   type_ecri(4) = 'once'
459 CALL histdef2d(iff,flag_aire,"aire","Grid area","-")
460 CALL histdef2d(iff,flag_contfracATM,"contfracATM","% sfce ter+lic","-")
461   type_ecri(1) = 'ave(X)'
462   type_ecri(2) = 'ave(X)'
463   type_ecri(3) = 'ave(X)'
464   type_ecri(4) = 'inst(X)'
465
466!!! Champs 2D !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
467 CALL histdef2d(iff,flag_contfracOR,"contfracOR","% sfce terre OR","-" )
468 CALL histdef2d(iff,flag_aireTER,"aireTER","Grid area CONT","-" )
469 CALL histdef2d(iff,flag_flat,"flat","Latent heat flux","W/m2")
470 CALL histdef2d(iff,flag_slp,"slp","Sea Level Pressure", "Pa" )
471 CALL histdef2d(iff,flag_tsol,"tsol","Surface Temperature", "K")
472 CALL histdef2d( iff,flag_t2m,"t2m","Temperature 2m", "K" )
473 CALL histdef2d(iff,flag_t2m_min,"t2m_min","Temp 2m min", "K" )
474 CALL histdef2d(iff,flag_t2m_max,"t2m_max", "Temp 2m max", "K" )
475 CALL histdef2d(iff,flag_wind10m,"wind10m","10-m wind speed","m/s")
476 CALL histdef2d(iff,flag_wind10max,"wind10max","10m wind speed max","m/s")
477 CALL histdef2d(iff,flag_sicf,"sicf","Sea-ice fraction", "-" )
478 CALL histdef2d(iff,flag_q2m,"q2m","Specific humidity 2m", "kg/kg")
479 CALL histdef2d(iff,flag_u10m,"u10m","Vent zonal 10m", "m/s" )
480 CALL histdef2d(iff,flag_v10m,"v10m","Vent meridien 10m", "m/s")
481 CALL histdef2d(iff,flag_psol,"psol","Surface Pressure","Pa" )
482 CALL histdef2d(iff,flag_qsurf,"qsurf","Surface Air humidity", "kg/kg")
483
484  if (.not. ok_veget) then
485 CALL histdef2d(iff,flag_qsol,"qsol","Soil watter content", "mm" )
486  endif
487
488 CALL histdef2d(iff,flag_ndayrain,"ndayrain","Number of dayrain(liq+sol)","-")
489 CALL histdef2d(iff,flag_precip,"precip","Precip Totale liq+sol","kg/(s*m2)" )
490 CALL histdef2d(iff,flag_plul,"plul","Large-scale Precip.","kg/(s*m2)")
491 CALL histdef2d(iff,flag_pluc,"pluc","Convective Precip.","kg/(s*m2)")
492 CALL histdef2d(iff,flag_snow,"snow","Snow fall","kg/(s*m2)" )
493 CALL histdef2d(iff,flag_evap,"evap","Evaporat", "kg/(s*m2)" )
494 CALL histdef2d(iff,flag_tops,"tops","Solar rad. at TOA","W/m2")
495 CALL histdef2d(iff,flag_tops0,"tops0","CS Solar rad. at TOA", "W/m2")
496 CALL histdef2d(iff,flag_topl,"topl","IR rad. at TOA", "W/m2" )
497 CALL histdef2d(iff,flag_topl0,"topl0", "IR rad. at TOA","W/m2")
498 CALL histdef2d(iff,flag_SWupTOA,"SWupTOA","SWup at TOA","W/m2")
499 CALL histdef2d(iff,flag_SWupTOAclr,"SWupTOAclr","SWup clear sky at TOA","W/m2")
500 CALL histdef2d(iff,flag_SWdnTOA, "SWdnTOA","SWdn at TOA","W/m2" )
501 CALL histdef2d(iff,flag_SWdnTOAclr,"SWdnTOAclr","SWdn clear sky at TOA","W/m2")
502 CALL histdef2d(iff,flag_SWup200,"SWup200","SWup at 200mb","W/m2" )
503 CALL histdef2d(iff,flag_SWup200clr,"SWup200clr","SWup clear sky at 200mb","W/m2")
504 CALL histdef2d(iff,flag_SWdn200,"SWdn200","SWdn at 200mb","W/m2" )
505 CALL histdef2d(iff,flag_SWdn200clr,"SWdn200clr","SWdn clear sky at 200mb","W/m2")
506 CALL histdef2d(iff,flag_LWup200,"LWup200","LWup at 200mb","W/m2")
507 CALL histdef2d(iff,flag_LWup200clr, "LWup200clr","LWup clear sky at 200mb","W/m2")
508 CALL histdef2d(iff,flag_LWdn200,"LWdn200","LWdn at 200mb","W/m2")
509 CALL histdef2d(iff,flag_LWdn200clr, "LWdn200clr","LWdn clear sky at 200mb","W/m2")
510 CALL histdef2d(iff,flag_sols,"sols","Solar rad. at surf.","W/m2")
511 CALL histdef2d(iff,flag_sols0,"sols0","Solar rad. at surf.","W/m2")
512 CALL histdef2d(iff,flag_soll,"soll","IR rad. at surface","W/m2") 
513 CALL histdef2d(iff,flag_radsol,"radsol","Rayonnement au sol","W/m2")
514 CALL histdef2d(iff,flag_soll0,"soll0","IR rad. at surface","W/m2")
515 CALL histdef2d(iff,flag_SWupSFC,"SWupSFC","SWup at surface","W/m2")
516 CALL histdef2d(iff,flag_SWupSFCclr,"SWupSFCclr","SWup clear sky at surface","W/m2")
517 CALL histdef2d(iff,flag_SWdnSFC,"SWdnSFC","SWdn at surface","W/m2")
518 CALL histdef2d(iff,flag_SWdnSFCclr,"SWdnSFCclr","SWdn clear sky at surface","W/m2")
519 CALL histdef2d(iff,flag_LWupSFC,"LWupSFC","Upwd. IR rad. at surface","W/m2")
520 CALL histdef2d(iff,flag_LWdnSFC,"LWdnSFC","Down. IR rad. at surface","W/m2")
521 CALL histdef2d(iff,flag_LWupSFCclr,"LWupSFCclr","CS Upwd. IR rad. at surface","W/m2")
522 CALL histdef2d(iff,flag_LWdnSFCclr,"LWdnSFCclr","Down. CS IR rad. at surface","W/m2")
523 CALL histdef2d(iff,flag_bils,"bils","Surf. total heat flux","W/m2")
524 CALL histdef2d(iff,flag_sens,"sens","Sensible heat flux","W/m2")
525 CALL histdef2d(iff,flag_fder,"fder","Heat flux derivation","W/m2")
526 CALL histdef2d(iff,flag_ffonte,"ffonte","Thermal flux for snow melting","W/m2")
527 CALL histdef2d(iff,flag_fqcalving,"fqcalving","Ice Calving","kg/m2/s")
528 CALL histdef2d(iff,flag_fqfonte,"fqfonte","Land ice melt","kg/m2/s")
529
530     DO nsrf = 1, nbsrf
531 CALL histdef2d(iff,flag_pourc_sol,"pourc_"//clnsurf(nsrf),"% "//clnsurf(nsrf),"%")
532 CALL histdef2d(iff,flag_fract_sol,"fract_"//clnsurf(nsrf),"Fraction "//clnsurf(nsrf),"1")
533 CALL histdef2d(iff,flag_taux_sol,"taux_"//clnsurf(nsrf),"Zonal wind stress"//clnsurf(nsrf),"Pa")
534 CALL histdef2d(iff,flag_tauy_sol,"tauy_"//clnsurf(nsrf),"Meridional wind stress "//clnsurf(nsrf),"Pa")
535 CALL histdef2d(iff,flag_tsol_sol,"tsol_"//clnsurf(nsrf),"Temperature "//clnsurf(nsrf),"K")
536 CALL histdef2d(iff,flag_u10m_sol,"u10m_"//clnsurf(nsrf),"Vent Zonal 10m "//clnsurf(nsrf),"m/s")
537 CALL histdef2d(iff,flag_v10m_sol,"v10m_"//clnsurf(nsrf),"Vent meredien 10m "//clnsurf(nsrf),"m/s")
538 CALL histdef2d(iff,flag_t2m_sol,"t2m_"//clnsurf(nsrf),"Temp 2m "//clnsurf(nsrf),"K")
539 CALL histdef2d(iff,flag_sens_sol,"sens_"//clnsurf(nsrf),"Sensible heat flux "//clnsurf(nsrf),"W/m2")
540 CALL histdef2d(iff,flag_lat_sol,"lat_"//clnsurf(nsrf),"Latent heat flux "//clnsurf(nsrf),"W/m2")
541 CALL histdef2d(iff,flag_flw_sol,"flw_"//clnsurf(nsrf),"LW "//clnsurf(nsrf),"W/m2")
542 CALL histdef2d(iff,flag_fsw_sol,"fsw_"//clnsurf(nsrf),"SW "//clnsurf(nsrf),"W/m2")
543 CALL histdef2d(iff,flag_wbils_sol,"wbils_"//clnsurf(nsrf),"Bilan sol "//clnsurf(nsrf),"W/m2" )
544 CALL histdef2d(iff,flag_wbilo_sol,"wbilo_"//clnsurf(nsrf),"Bilan eau "//clnsurf(nsrf),"kg/(m2*s)")
545  if (iflag_pbl>1 .and. lev_files(iff).gt.10 ) then
546 CALL histdef2d(iff,flag_tke_sol,"tke_"//clnsurf(nsrf),"Max Turb. Kinetic Energy "//clnsurf(nsrf),"-")
547 CALL histdef2d(iff,flag_tke_max_sol,"tke_max_"//clnsurf(nsrf),"Max Turb. Kinetic Energy "//clnsurf(nsrf),"-")
548  endif
549 CALL histdef2d(iff,flag_albe_sol, "albe_"//clnsurf(nsrf),"Albedo surf. "//clnsurf(nsrf),"-")
550 CALL histdef2d(iff,flag_rugs_sol,"rugs_"//clnsurf(nsrf),"Latent heat flux "//clnsurf(nsrf),"W/m2")
551 CALL histdef2d(iff,flag_ages_sol,"ages_"//clnsurf(nsrf),"Snow age","day")
552     END DO
553
554 CALL histdef2d(iff,flag_albs,"albs","Surface albedo","-")
555 CALL histdef2d(iff,flag_albslw,"albslw","Surface albedo LW","-")
556 CALL histdef2d(iff,flag_cdrm,"cdrm","Momentum drag coef.", "-")
557 CALL histdef2d(iff,flag_cdrh,"cdrh","Heat drag coef.", "-" )
558 CALL histdef2d(iff,flag_cldl,"cldl","Low-level cloudiness", "-")
559 CALL histdef2d(iff,flag_cldm,"cldm","Mid-level cloudiness", "-")
560 CALL histdef2d(iff,flag_cldh,"cldh","High-level cloudiness", "-")
561 CALL histdef2d(iff,flag_cldt,"cldt","Total cloudiness","%")
562 CALL histdef2d(iff,flag_cldq,"cldq","Cloud liquid water path","kg/m2")
563 CALL histdef2d(iff,flag_lwp,"lwp","Cloud water path","kg/m2")
564 CALL histdef2d(iff,flag_iwp,"iwp","Cloud ice water path","kg/m2" )
565 CALL histdef2d(iff,flag_ue,"ue","Zonal energy transport","-")
566 CALL histdef2d(iff,flag_ve,"ve","Merid energy transport", "-")
567 CALL histdef2d(iff,flag_uq,"uq","Zonal humidity transport", "-")
568 CALL histdef2d(iff,flag_vq,"vq","Merid humidity transport", "-")
569
570     IF(iflag_con.GE.3) THEN ! sb
571 CALL histdef2d(iff,flag_cape,"cape","Conv avlbl pot ener","J/kg")
572 CALL histdef2d(iff,flag_pbase,"pbase","Cld base pressure", "mb")
573 CALL histdef2d(iff,flag_ptop,"ptop","Cld top pressure", "mb")
574 CALL histdef2d(iff,flag_fbase,"fbase","Cld base mass flux","kg/m2/s")
575 CALL histdef2d(iff,flag_prw,"prw","Precipitable water","kg/m2")
576     ENDIF !iflag_con .GE. 3
577
578 CALL histdef2d(iff,flag_s_pblh,"s_pblh","Boundary Layer Height","m")
579 CALL histdef2d(iff,flag_s_pblt,"s_pblt","t at Boundary Layer Height","K")
580 CALL histdef2d(iff,flag_s_lcl,"s_lcl","Condensation level","m")
581 CALL histdef2d(iff,flag_s_capCL,"s_capCL","Conv avlbl pot enerfor ABL", "J/m2" )
582 CALL histdef2d(iff,flag_s_oliqCL,"s_oliqCL","Liq Water in BL","kg/m2")
583 CALL histdef2d(iff,flag_s_cteiCL,"s_cteiCL","Instability criteria(ABL)","K")
584 CALL histdef2d(iff,flag_s_therm,"s_therm","Exces du thermique", "K")
585 CALL histdef2d(iff,flag_s_trmb1,"s_trmb1","deep_cape(HBTM2)","J/m2")
586 CALL histdef2d(iff,flag_s_trmb2,"s_trmb2","inhibition (HBTM2)","J/m2")
587 CALL histdef2d(iff,flag_s_trmb3,"s_trmb3","Point Omega (HBTM2)","m")
588
589! Champs interpolles sur des niveaux de pression
590! iif=1 on ecrit u v w phi sur 850 700 500 200 au niv 1
591! iif=2 on ecrit w et ph 500 seulement au niv 1
592!        et u v sur 850 700 500 200
593! iif=3 on ecrit ph a 500 seulement au niv 1
594!      on ecrit u v t q a 850 700 500 200 au niv 3
595
596        DO k=1, nlevSTD
597     IF(k.GE.2.AND.k.LE.12) bb2=clevSTD(k)
598     IF(k.GE.13.AND.k.LE.17) bb3=clevSTD(k)
599     IF(bb2.EQ."850".OR.bb2.EQ."700".OR.bb2.EQ."500".OR.bb2.EQ."200")THEN
600 CALL histdef2d(iff,flag_ulevsSTD,"u"//bb2,"Zonal wind "//bb2//"mb","m/s")
601 CALL histdef2d(iff,flag_vlevsSTD,"v"//bb2,"Meridional wind "//bb2//"mb","m/s")
602 CALL histdef2d(iff,flag_wlevsSTD,"w"//bb2,"Vertical wind "//bb2//"mb","m/s")
603 CALL histdef2d(iff,flag_philevsSTD,"phi"//bb2,"Geopotential "//bb2//"mb","m")
604 CALL histdef2d(iff,flag_qlevsSTD,"q"//bb2,"Specific humidity "//bb2//"mb","kg/kg" )
605 CALL histdef2d(iff,flag_tlevsSTD,"t"//bb2,"Temperature "//bb2//"mb","K")
606     ENDIF !(bb2.EQ."850".OR.bb2.EQ."700".OR.
607       ENDDO
608
609 CALL histdef2d(iff,flag_t_oce_sic,"t_oce_sic","Temp mixte oce-sic","K")
610
611 IF (ocean=='slab') &
612      CALL histdef2d(iff,flag_slab_bils, "slab_wbils_oce","Bilan au sol sur ocean slab", "W/m2")
613
614 IF (iflag_con.GE.3) THEN
615 CALL histdef2d(iff,flag_ale_bl,"ale_bl","ALE BL","m2/s2")
616 CALL histdef2d(iff,flag_alp_bl,"alp_bl","ALP BL","m2/s2")
617 CALL histdef2d(iff,flag_ale_wk,"ale_wk","ALE WK","m2/s2")
618 CALL histdef2d(iff,flag_alp_wk,"alp_wk","ALP WK","m2/s2")
619
620 CALL histdef2d(iff,flag_ale,"ale","ALE","m2/s2")
621 CALL histdef2d(iff,flag_alp,"alp","ALP","W/m2")
622 CALL histdef2d(iff,flag_cin,"cin","Convective INhibition","m2/s2")
623 CALL histdef2d(iff,flag_wape,"WAPE","WAPE","m2/s2")
624 ENDIF !(iflag_con.GE.3)
625
626 CALL histdef2d(iff,flag_weakinv, "weakinv","Weak inversion", "-")
627 CALL histdef2d(iff,flag_dthmin,"dthmin","dTheta mini", "K/m")
628 CALL histdef2d(iff,flag_rh2m,"rh2m","Relative humidity at 2m", "%" )
629 CALL histdef2d(iff,flag_qsat2m,"qsat2m","Saturant humidity at 2m", "%")
630 CALL histdef2d(iff,flag_tpot,"tpot","Surface air potential temperature","K")
631 CALL histdef2d(iff,flag_tpote,"tpote","Surface air equivalent potential temperature","K")
632 CALL histdef2d(iff,flag_SWnetOR,"SWnetOR","Sfce net SW radiation OR", "W/m2")
633 CALL histdef2d(iff,flag_SWdownOR,"SWdownOR","Sfce incident SW radiation OR","W/m2")
634 CALL histdef2d(iff,flag_LWdownOR,"LWdownOR","Sfce incident LW radiation OR","W/m2")
635 CALL histdef2d(iff,flag_snowl,"snowl","Solid Large-scale Precip.","kg/(m2*s)")
636 IF (iflag_con.GE.3) THEN
637 CALL histdef2d(iff,flag_cape_max,"cape_max","CAPE max.", "J/kg")
638 ENDIF !(iflag_con.GE.3)
639 CALL histdef2d(iff,flag_solldown,"solldown","Down. IR rad. at surface","W/m2")
640 CALL histdef2d(iff,flag_dtsvdfo,"dtsvdfo","Boundary-layer dTs(o)","K/s")
641 CALL histdef2d(iff,flag_dtsvdft,"dtsvdft","Boundary-layer dTs(t)","K/s")
642 CALL histdef2d(iff,flag_dtsvdfg,"dtsvdfg","Boundary-layer dTs(g)","K/s")
643 CALL histdef2d(iff,flag_dtsvdfi,"dtsvdfi","Boundary-layer dTs(g)","K/s")
644 CALL histdef2d(iff,flag_rugs,"rugs","rugosity", "-" )
645
646! Champs 3D:
647 CALL histdef3d(iff,flag_lwcon,"lwcon","Cloud liquid water content","kg/kg")
648 CALL histdef3d(iff,flag_iwcon,"iwcon","Cloud ice water content","kg/kg")
649 CALL histdef3d(iff,flag_temp,"temp","Air temperature","K" )
650 CALL histdef3d(iff,flag_theta,"theta","Potential air temperature","K" )
651 CALL histdef3d(iff,flag_ovap,"ovap","Specific humidity","kg/kg" )
652 CALL histdef3d(iff,flag_geop,"geop","Geopotential height","m2/s2")
653 CALL histdef3d(iff,flag_vitu,"vitu","Zonal wind", "m/s" )
654 CALL histdef3d(iff,flag_vitv,"vitv","Meridional wind","m/s" )
655 CALL histdef3d(iff,flag_vitw,"vitw","Vertical wind","m/s" )
656 CALL histdef3d(iff,flag_pres,"pres","Air pressure", "Pa" )
657 CALL histdef3d(iff,flag_rneb,"rneb","Cloud fraction","-")
658 CALL histdef3d(iff,flag_rnebcon,"rnebcon","Convective Cloud Fraction","-")
659 CALL histdef3d(iff,flag_rhum,"rhum","Relative humidity","-")
660 CALL histdef3d(iff,flag_ozone,"ozone","Ozone concentration", "ppmv")
661 IF(iflag_con.GE.3) THEN
662  CALL histdef3d(iff,flag_upwd,"upwd","saturated updraft", "kg/m2/s")
663 ENDIF !iflag_con.GE.3
664 CALL histdef3d(iff,flag_dtphy,"dtphy","Physics dT","K/s")
665 CALL histdef3d(iff,flag_dqphy,"dqphy","Physics dQ", "(kg/kg)/s")
666 CALL histdef3d(iff,flag_cldtau,"cldtau","Cloud optical thickness","1")
667 CALL histdef3d(iff,flag_cldemi,"cldemi","Cloud optical emissivity","1")
668!IM: bug ?? dimensionnement variables (klon,klev+1) pmflxr, pmflxs, prfl, psfl
669! CALL histdef3d(iff,flag_pr_con_l,"pmflxr","Convective precipitation lic"," ")
670! CALL histdef3d(iff,flag_pr_con_i,"pmflxs","Convective precipitation ice"," ")
671! CALL histdef3d(iff,flag_pr_lsc_l,"prfl","Large scale precipitation lic"," ")
672! CALL histdef3d(iff,flag_pr_lsc_i,"psfl","Large scale precipitation ice"," ")
673
674!FH Sorties pour la couche limite
675     if (iflag_pbl>1) then
676 CALL histdef3d(iff,flag_tke,"tke","TKE","m2/s2")
677 CALL histdef3d(iff,flag_tke_max,"tke_max","TKE max","m2/s2")
678     endif
679
680 CALL histdef3d(iff,flag_kz,"kz","Kz melange","m2/s")
681 CALL histdef3d(iff,flag_kz_max,"kz_max","Kz melange max","m2/s" )
682 CALL histdef3d(iff,flag_clwcon,"clwcon","Convective Cloud Liquid water content", "kg/kg")
683 IF(iflag_con.GE.3) THEN
684 CALL histdef3d(iff,flag_Ma,"Ma","undilute adiab updraft","kg/m2/s")
685 CALL histdef3d(iff,flag_dnwd,"dnwd","saturated downdraft","kg/m2/s")
686 CALL histdef3d(iff,flag_dnwd0,"dnwd0","unsat. downdraft", "kg/m2/s")
687 ENDIF !(iflag_con.GE.3)
688 CALL histdef3d(iff,flag_dtdyn,"dtdyn","Dynamics dT","K/s")
689 CALL histdef3d(iff,flag_dqdyn,"dqdyn","Dynamics dQ", "(kg/kg)/s")
690 CALL histdef3d(iff,flag_dudyn,"dudyn","Dynamics dU","m/s2")
691 CALL histdef3d(iff,flag_dvdyn,"dvdyn","Dynamics dV","m/s2")
692 CALL histdef3d(iff,flag_dtcon,"dtcon","Convection dT","K/s")
693 CALL histdef3d(iff,flag_ducon,"ducon","Convection du","m/s2")
694 CALL histdef3d(iff,flag_dqcon,"dqcon","Convection dQ", "(kg/kg)/s")
695 IF(iflag_con.GE.3) THEN
696 IF (iflag_wake == 1) THEN
697   CALL histdef3d(iff,flag_dtwak,"dtwak","Wake dT","K/s")
698   CALL histdef3d(iff,flag_dqwak,"dqwak","Wake dQ","(kg/kg)/s")
699 ENDIF
700 ENDIF !(iflag_con.GE.3)
701 CALL histdef3d(iff,flag_dtlsc,"dtlsc","Condensation dT", "K/s")
702 CALL histdef3d(iff,flag_dtlschr,"dtlschr","Large-scale condensational heating rate","K/s")
703 CALL histdef3d(iff,flag_dqlsc,"dqlsc","Condensation dQ","(kg/kg)/s")
704 CALL histdef3d(iff,flag_dtvdf,"dtvdf","Boundary-layer dT", "K/s")
705 CALL histdef3d(iff,flag_dqvdf,"dqvdf","Boundary-layer dQ","(kg/kg)/s")
706 CALL histdef3d(iff,flag_dteva,"dteva","Reevaporation dT", "K/s")
707 CALL histdef3d(iff,flag_dqeva,"dqeva","Reevaporation dQ","(kg/kg)/s")
708 CALL histdef3d(iff,flag_ptconv,"ptconv","POINTS CONVECTIFS"," ")
709 CALL histdef3d(iff,flag_ratqs,"ratqs", "RATQS"," ")
710 CALL histdef3d(iff,flag_dtthe,"dtthe","Dry adjust. dT", "K/s")
711
712if(iflag_thermals.gt.1) THEN
713 CALL histdef3d(iff,flag_f_th,"f_th","Thermal plume mass flux", "K/s")
714 CALL histdef3d(iff,flag_e_th,"e_th","Thermal plume entrainment", "K/s")
715 CALL histdef3d(iff,flag_w_th,"w_th","Thermal plume vertical velocity", "m/s")
716 CALL histdef3d(iff,flag_lambda_th,"lambda_th","Thermal plume vertical velocity", "m/s")
717 CALL histdef3d(iff,flag_q_th,"q_th","Thermal plume total humidity", "kg/kg")
718 CALL histdef3d(iff,flag_a_th,"a_th","Thermal plume fraction", "")
719 CALL histdef3d(iff,flag_d_th,"d_th","Thermal plume detrainment", "K/s")
720endif !iflag_thermals.gt.1
721 CALL histdef2d(iff,flag_f0_th,"f0_th","Thermal closure mass flux", "K/s")
722 CALL histdef2d(iff,flag_zmax_th,"zmax_th","Thermal plume height", "K/s")
723 CALL histdef3d(iff,flag_dqthe,"dqthe","Dry adjust. dQ","(kg/kg)/s")
724 CALL histdef3d(iff,flag_dtajs,"dtajs","Dry adjust. dT", "K/s")
725 CALL histdef3d(iff,flag_dqajs,"dqajs","Dry adjust. dQ","(kg/kg)/s")
726 CALL histdef3d(iff,flag_dtswr,"dtswr","SW radiation dT","K/s")
727 CALL histdef3d(iff,flag_dtsw0,"dtsw0","CS SW radiation dT","K/s")
728 CALL histdef3d(iff,flag_dtlwr,"dtlwr","LW radiation dT","K/s")
729 CALL histdef3d(iff,flag_dtlw0,"dtlw0", "CS LW radiation dT","K/s")
730 CALL histdef3d(iff,flag_dtec,"dtec","Cinetic dissip dT","K/s")
731 CALL histdef3d(iff,flag_duvdf,"duvdf","Boundary-layer dU","m/s2")
732 CALL histdef3d(iff,flag_dvvdf,"dvvdf","Boundary-layer dV", "m/s2")
733
734     IF (ok_orodr) THEN
735 CALL histdef3d(iff,flag_duoro,"duoro","Orography dU","m/s2")
736 CALL histdef3d(iff,flag_dvoro,"dvoro","Orography dV", "m/s2")
737     ENDIF
738
739     IF (ok_orolf) THEN
740 CALL histdef3d(iff,flag_dulif,"dulif","Orography dU","m/s2")
741 CALL histdef3d(iff,flag_dvlif,"dvlif","Orography dV", "m/s2")
742     ENDIF
743
744      if (nqmax>=3) THEN
745    DO iq=3,nqmax
746       iiq=niadv(iq)
747 CALL histdef3d ( iff, flag_trac, tnom(iq),ttext(iiq), "-" )
748    ENDDO
749      endif
750
751        CALL histend(nid_files(iff))
752
753         ndex2d = 0
754         ndex3d = 0
755
756         ENDIF ! clef_files
757
758         ENDDO !
759      klev = lvlmax_reg(1)
760
761      end subroutine phys_output_open
762
763      SUBROUTINE histdef2d (iff,flag_var,nomvar,titrevar,unitvar)
764     
765       use ioipsl
766       USE dimphy
767       USE mod_phys_lmdz_para
768
769       IMPLICIT NONE
770       
771       include "dimensions.h"
772       include "temps.h"
773       include "indicesol.h"
774       include "advtrac.h"
775       include "clesphys.h"
776
777       integer                          :: iff
778       integer, dimension(nfiles)       :: flag_var
779       character(len=*)                 :: nomvar
780       character(len=*)                 :: titrevar
781       character(len=*)                 :: unitvar
782       
783       if ( flag_var(iff)<=lev_files(iff) ) then
784 call histdef (nid_files(iff),nomvar,titrevar,unitvar, &
785               iim,jj_nb,nhorim(iff), 1,1,1, -99, 32, &
786               type_ecri(iff), zstophym(iff),zoutm(iff))               
787       endif                     
788      end subroutine histdef2d
789
790      SUBROUTINE histdef3d (iff,flag_var,nomvar,titrevar,unitvar)
791
792       use ioipsl
793       USE dimphy
794       USE mod_phys_lmdz_para
795
796       IMPLICIT NONE
797
798       include "dimensions.h"
799       include "temps.h"
800       include "indicesol.h"
801       include "advtrac.h"
802       include "clesphys.h"
803
804       integer                          :: iff
805       integer, dimension(nfiles)       :: flag_var
806       character(len=*)                 :: nomvar
807       character(len=*)                 :: titrevar
808       character(len=*)                 :: unitvar
809
810       if ( flag_var(iff)<=lev_files(iff) ) then
811 call histdef (nid_files(iff),nomvar,titrevar,unitvar, &
812               iim,jj_nb,nhorim(iff), klev,1,klev,nvertm(iff), 32, &
813               type_ecri(iff), zstophym(iff),zoutm(iff))
814       endif
815      end subroutine histdef3d
816
817END MODULE phys_output_mod
818
Note: See TracBrowser for help on using the repository browser.