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

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

Correction sorties niveaux pression
AI/IM

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 44.9 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   zstophym(iff) = ecrit_files(iff)
597   type_ecri(1) = 'inst(X)'
598   type_ecri(2) = 'inst(X)'
599   type_ecri(3) = 'inst(X)'
600   type_ecri(4) = 'inst(X)'
601        DO k=1, nlevSTD
602     IF(k.GE.2.AND.k.LE.12) bb2=clevSTD(k)
603     IF(k.GE.13.AND.k.LE.17) bb3=clevSTD(k)
604     IF(bb2.EQ."850".OR.bb2.EQ."700".OR.bb2.EQ."500".OR.bb2.EQ."200")THEN
605 CALL histdef2d(iff,flag_ulevsSTD,"u"//bb2,"Zonal wind "//bb2//"mb","m/s")
606 CALL histdef2d(iff,flag_vlevsSTD,"v"//bb2,"Meridional wind "//bb2//"mb","m/s")
607 CALL histdef2d(iff,flag_wlevsSTD,"w"//bb2,"Vertical wind "//bb2//"mb","m/s")
608 CALL histdef2d(iff,flag_philevsSTD,"phi"//bb2,"Geopotential "//bb2//"mb","m")
609 CALL histdef2d(iff,flag_qlevsSTD,"q"//bb2,"Specific humidity "//bb2//"mb","kg/kg" )
610 CALL histdef2d(iff,flag_tlevsSTD,"t"//bb2,"Temperature "//bb2//"mb","K")
611     ENDIF !(bb2.EQ."850".OR.bb2.EQ."700".OR.
612       ENDDO
613   zstophym(iff) = dtime
614   type_ecri(1) = 'ave(X)'
615   type_ecri(2) = 'ave(X)'
616   type_ecri(3) = 'ave(X)'
617   type_ecri(4) = 'inst(X)'
618
619 CALL histdef2d(iff,flag_t_oce_sic,"t_oce_sic","Temp mixte oce-sic","K")
620
621 IF (ocean=='slab') &
622      CALL histdef2d(iff,flag_slab_bils, "slab_wbils_oce","Bilan au sol sur ocean slab", "W/m2")
623
624 IF (iflag_con.GE.3) THEN
625 CALL histdef2d(iff,flag_ale_bl,"ale_bl","ALE BL","m2/s2")
626 CALL histdef2d(iff,flag_alp_bl,"alp_bl","ALP BL","m2/s2")
627 CALL histdef2d(iff,flag_ale_wk,"ale_wk","ALE WK","m2/s2")
628 CALL histdef2d(iff,flag_alp_wk,"alp_wk","ALP WK","m2/s2")
629
630 CALL histdef2d(iff,flag_ale,"ale","ALE","m2/s2")
631 CALL histdef2d(iff,flag_alp,"alp","ALP","W/m2")
632 CALL histdef2d(iff,flag_cin,"cin","Convective INhibition","m2/s2")
633 CALL histdef2d(iff,flag_wape,"WAPE","WAPE","m2/s2")
634 ENDIF !(iflag_con.GE.3)
635
636 CALL histdef2d(iff,flag_weakinv, "weakinv","Weak inversion", "-")
637 CALL histdef2d(iff,flag_dthmin,"dthmin","dTheta mini", "K/m")
638 CALL histdef2d(iff,flag_rh2m,"rh2m","Relative humidity at 2m", "%" )
639 CALL histdef2d(iff,flag_qsat2m,"qsat2m","Saturant humidity at 2m", "%")
640 CALL histdef2d(iff,flag_tpot,"tpot","Surface air potential temperature","K")
641 CALL histdef2d(iff,flag_tpote,"tpote","Surface air equivalent potential temperature","K")
642 CALL histdef2d(iff,flag_SWnetOR,"SWnetOR","Sfce net SW radiation OR", "W/m2")
643 CALL histdef2d(iff,flag_SWdownOR,"SWdownOR","Sfce incident SW radiation OR","W/m2")
644 CALL histdef2d(iff,flag_LWdownOR,"LWdownOR","Sfce incident LW radiation OR","W/m2")
645 CALL histdef2d(iff,flag_snowl,"snowl","Solid Large-scale Precip.","kg/(m2*s)")
646 IF (iflag_con.GE.3) THEN
647 CALL histdef2d(iff,flag_cape_max,"cape_max","CAPE max.", "J/kg")
648 ENDIF !(iflag_con.GE.3)
649 CALL histdef2d(iff,flag_solldown,"solldown","Down. IR rad. at surface","W/m2")
650 CALL histdef2d(iff,flag_dtsvdfo,"dtsvdfo","Boundary-layer dTs(o)","K/s")
651 CALL histdef2d(iff,flag_dtsvdft,"dtsvdft","Boundary-layer dTs(t)","K/s")
652 CALL histdef2d(iff,flag_dtsvdfg,"dtsvdfg","Boundary-layer dTs(g)","K/s")
653 CALL histdef2d(iff,flag_dtsvdfi,"dtsvdfi","Boundary-layer dTs(g)","K/s")
654 CALL histdef2d(iff,flag_rugs,"rugs","rugosity", "-" )
655
656! Champs 3D:
657 CALL histdef3d(iff,flag_lwcon,"lwcon","Cloud liquid water content","kg/kg")
658 CALL histdef3d(iff,flag_iwcon,"iwcon","Cloud ice water content","kg/kg")
659 CALL histdef3d(iff,flag_temp,"temp","Air temperature","K" )
660 CALL histdef3d(iff,flag_theta,"theta","Potential air temperature","K" )
661 CALL histdef3d(iff,flag_ovap,"ovap","Specific humidity","kg/kg" )
662 CALL histdef3d(iff,flag_geop,"geop","Geopotential height","m2/s2")
663 CALL histdef3d(iff,flag_vitu,"vitu","Zonal wind", "m/s" )
664 CALL histdef3d(iff,flag_vitv,"vitv","Meridional wind","m/s" )
665 CALL histdef3d(iff,flag_vitw,"vitw","Vertical wind","m/s" )
666 CALL histdef3d(iff,flag_pres,"pres","Air pressure", "Pa" )
667 CALL histdef3d(iff,flag_rneb,"rneb","Cloud fraction","-")
668 CALL histdef3d(iff,flag_rnebcon,"rnebcon","Convective Cloud Fraction","-")
669 CALL histdef3d(iff,flag_rhum,"rhum","Relative humidity","-")
670 CALL histdef3d(iff,flag_ozone,"ozone","Ozone concentration", "ppmv")
671 IF(iflag_con.GE.3) THEN
672  CALL histdef3d(iff,flag_upwd,"upwd","saturated updraft", "kg/m2/s")
673 ENDIF !iflag_con.GE.3
674 CALL histdef3d(iff,flag_dtphy,"dtphy","Physics dT","K/s")
675 CALL histdef3d(iff,flag_dqphy,"dqphy","Physics dQ", "(kg/kg)/s")
676 CALL histdef3d(iff,flag_cldtau,"cldtau","Cloud optical thickness","1")
677 CALL histdef3d(iff,flag_cldemi,"cldemi","Cloud optical emissivity","1")
678!IM: bug ?? dimensionnement variables (klon,klev+1) pmflxr, pmflxs, prfl, psfl
679! CALL histdef3d(iff,flag_pr_con_l,"pmflxr","Convective precipitation lic"," ")
680! CALL histdef3d(iff,flag_pr_con_i,"pmflxs","Convective precipitation ice"," ")
681! CALL histdef3d(iff,flag_pr_lsc_l,"prfl","Large scale precipitation lic"," ")
682! CALL histdef3d(iff,flag_pr_lsc_i,"psfl","Large scale precipitation ice"," ")
683
684!FH Sorties pour la couche limite
685     if (iflag_pbl>1) then
686 CALL histdef3d(iff,flag_tke,"tke","TKE","m2/s2")
687 CALL histdef3d(iff,flag_tke_max,"tke_max","TKE max","m2/s2")
688     endif
689
690 CALL histdef3d(iff,flag_kz,"kz","Kz melange","m2/s")
691 CALL histdef3d(iff,flag_kz_max,"kz_max","Kz melange max","m2/s" )
692 CALL histdef3d(iff,flag_clwcon,"clwcon","Convective Cloud Liquid water content", "kg/kg")
693 IF(iflag_con.GE.3) THEN
694 CALL histdef3d(iff,flag_Ma,"Ma","undilute adiab updraft","kg/m2/s")
695 CALL histdef3d(iff,flag_dnwd,"dnwd","saturated downdraft","kg/m2/s")
696 CALL histdef3d(iff,flag_dnwd0,"dnwd0","unsat. downdraft", "kg/m2/s")
697 ENDIF !(iflag_con.GE.3)
698 CALL histdef3d(iff,flag_dtdyn,"dtdyn","Dynamics dT","K/s")
699 CALL histdef3d(iff,flag_dqdyn,"dqdyn","Dynamics dQ", "(kg/kg)/s")
700 CALL histdef3d(iff,flag_dudyn,"dudyn","Dynamics dU","m/s2")
701 CALL histdef3d(iff,flag_dvdyn,"dvdyn","Dynamics dV","m/s2")
702 CALL histdef3d(iff,flag_dtcon,"dtcon","Convection dT","K/s")
703 CALL histdef3d(iff,flag_ducon,"ducon","Convection du","m/s2")
704 CALL histdef3d(iff,flag_dqcon,"dqcon","Convection dQ", "(kg/kg)/s")
705 IF(iflag_con.GE.3) THEN
706 IF (iflag_wake == 1) THEN
707   CALL histdef3d(iff,flag_dtwak,"dtwak","Wake dT","K/s")
708   CALL histdef3d(iff,flag_dqwak,"dqwak","Wake dQ","(kg/kg)/s")
709 ENDIF
710 ENDIF !(iflag_con.GE.3)
711 CALL histdef3d(iff,flag_dtlsc,"dtlsc","Condensation dT", "K/s")
712 CALL histdef3d(iff,flag_dtlschr,"dtlschr","Large-scale condensational heating rate","K/s")
713 CALL histdef3d(iff,flag_dqlsc,"dqlsc","Condensation dQ","(kg/kg)/s")
714 CALL histdef3d(iff,flag_dtvdf,"dtvdf","Boundary-layer dT", "K/s")
715 CALL histdef3d(iff,flag_dqvdf,"dqvdf","Boundary-layer dQ","(kg/kg)/s")
716 CALL histdef3d(iff,flag_dteva,"dteva","Reevaporation dT", "K/s")
717 CALL histdef3d(iff,flag_dqeva,"dqeva","Reevaporation dQ","(kg/kg)/s")
718 CALL histdef3d(iff,flag_ptconv,"ptconv","POINTS CONVECTIFS"," ")
719 CALL histdef3d(iff,flag_ratqs,"ratqs", "RATQS"," ")
720 CALL histdef3d(iff,flag_dtthe,"dtthe","Dry adjust. dT", "K/s")
721
722if(iflag_thermals.gt.1) THEN
723 CALL histdef3d(iff,flag_f_th,"f_th","Thermal plume mass flux", "K/s")
724 CALL histdef3d(iff,flag_e_th,"e_th","Thermal plume entrainment", "K/s")
725 CALL histdef3d(iff,flag_w_th,"w_th","Thermal plume vertical velocity", "m/s")
726 CALL histdef3d(iff,flag_lambda_th,"lambda_th","Thermal plume vertical velocity", "m/s")
727 CALL histdef3d(iff,flag_q_th,"q_th","Thermal plume total humidity", "kg/kg")
728 CALL histdef3d(iff,flag_a_th,"a_th","Thermal plume fraction", "")
729 CALL histdef3d(iff,flag_d_th,"d_th","Thermal plume detrainment", "K/s")
730endif !iflag_thermals.gt.1
731 CALL histdef2d(iff,flag_f0_th,"f0_th","Thermal closure mass flux", "K/s")
732 CALL histdef2d(iff,flag_zmax_th,"zmax_th","Thermal plume height", "K/s")
733 CALL histdef3d(iff,flag_dqthe,"dqthe","Dry adjust. dQ","(kg/kg)/s")
734 CALL histdef3d(iff,flag_dtajs,"dtajs","Dry adjust. dT", "K/s")
735 CALL histdef3d(iff,flag_dqajs,"dqajs","Dry adjust. dQ","(kg/kg)/s")
736 CALL histdef3d(iff,flag_dtswr,"dtswr","SW radiation dT","K/s")
737 CALL histdef3d(iff,flag_dtsw0,"dtsw0","CS SW radiation dT","K/s")
738 CALL histdef3d(iff,flag_dtlwr,"dtlwr","LW radiation dT","K/s")
739 CALL histdef3d(iff,flag_dtlw0,"dtlw0", "CS LW radiation dT","K/s")
740 CALL histdef3d(iff,flag_dtec,"dtec","Cinetic dissip dT","K/s")
741 CALL histdef3d(iff,flag_duvdf,"duvdf","Boundary-layer dU","m/s2")
742 CALL histdef3d(iff,flag_dvvdf,"dvvdf","Boundary-layer dV", "m/s2")
743
744     IF (ok_orodr) THEN
745 CALL histdef3d(iff,flag_duoro,"duoro","Orography dU","m/s2")
746 CALL histdef3d(iff,flag_dvoro,"dvoro","Orography dV", "m/s2")
747     ENDIF
748
749     IF (ok_orolf) THEN
750 CALL histdef3d(iff,flag_dulif,"dulif","Orography dU","m/s2")
751 CALL histdef3d(iff,flag_dvlif,"dvlif","Orography dV", "m/s2")
752     ENDIF
753
754      if (nqmax>=3) THEN
755    DO iq=3,nqmax
756       iiq=niadv(iq)
757 CALL histdef3d ( iff, flag_trac, tnom(iq),ttext(iiq), "-" )
758    ENDDO
759      endif
760
761        CALL histend(nid_files(iff))
762
763         ndex2d = 0
764         ndex3d = 0
765
766         ENDIF ! clef_files
767
768         ENDDO !
769      klev = lvlmax_reg(1)
770
771      end subroutine phys_output_open
772
773      SUBROUTINE histdef2d (iff,flag_var,nomvar,titrevar,unitvar)
774     
775       use ioipsl
776       USE dimphy
777       USE mod_phys_lmdz_para
778
779       IMPLICIT NONE
780       
781       include "dimensions.h"
782       include "temps.h"
783       include "indicesol.h"
784       include "advtrac.h"
785       include "clesphys.h"
786
787       integer                          :: iff
788       integer, dimension(nfiles)       :: flag_var
789       character(len=*)                 :: nomvar
790       character(len=*)                 :: titrevar
791       character(len=*)                 :: unitvar
792       
793       if ( flag_var(iff)<=lev_files(iff) ) then
794 call histdef (nid_files(iff),nomvar,titrevar,unitvar, &
795               iim,jj_nb,nhorim(iff), 1,1,1, -99, 32, &
796               type_ecri(iff), zstophym(iff),zoutm(iff))               
797       endif                     
798      end subroutine histdef2d
799
800      SUBROUTINE histdef3d (iff,flag_var,nomvar,titrevar,unitvar)
801
802       use ioipsl
803       USE dimphy
804       USE mod_phys_lmdz_para
805
806       IMPLICIT NONE
807
808       include "dimensions.h"
809       include "temps.h"
810       include "indicesol.h"
811       include "advtrac.h"
812       include "clesphys.h"
813
814       integer                          :: iff
815       integer, dimension(nfiles)       :: flag_var
816       character(len=*)                 :: nomvar
817       character(len=*)                 :: titrevar
818       character(len=*)                 :: unitvar
819
820       if ( flag_var(iff)<=lev_files(iff) ) then
821 call histdef (nid_files(iff),nomvar,titrevar,unitvar, &
822               iim,jj_nb,nhorim(iff), klev,1,klev,nvertm(iff), 32, &
823               type_ecri(iff), zstophym(iff),zoutm(iff))
824       endif
825      end subroutine histdef3d
826
827END MODULE phys_output_mod
828
Note: See TracBrowser for help on using the repository browser.