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

Last change on this file since 929 was 929, checked in by lmdzadmin, 17 years ago

Ecriture plus compacte des sorties et ajout variables LMDZ AI
IM

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