source: LMDZ6/trunk/libf/phylmd/phys_output_var_mod.f90 @ 5687

Last change on this file since 5687 was 5677, checked in by Laurent Fairhead, 5 weeks ago

Added outputs for spectral bands in RRTM (with dummy variables for ECRAD at present)
FC

  • Property copyright set to
    Name of program: LMDZ
    Creation date: 1984
    Version: LMDZ5
    License: CeCILL version 2
    Holder: Laboratoire de m\'et\'eorologie dynamique, CNRS, UMR 8539
    See the license file in the root directory
File size: 14.5 KB
Line 
1!
2! phys_local_var_mod.F90 1327 2010-03-17 15:33:56Z idelkadi $
3
4MODULE phys_output_var_mod
5
6  USE dimphy
7  USE strings_mod, ONLY: maxlen
8  ! Variables outputs pour les ecritures des sorties
9  !======================================================================
10  !
11  !
12  !======================================================================
13  ! Declaration des variables
14
15  REAL, SAVE, ALLOCATABLE :: snow_o(:), zfra_o(:)
16  !$OMP THREADPRIVATE(snow_o, zfra_o)
17  REAL, SAVE, ALLOCATABLE :: sza_o(:) ! solar zenithal angle
18  !$OMP THREADPRIVATE(sza_o)
19  INTEGER, SAVE, ALLOCATABLE ::  itau_con(:)       ! Nombre de pas ou rflag <= 1
20  !$OMP THREADPRIVATE(itau_con)
21  REAL, SAVE, ALLOCATABLE :: bils_ec(:) ! Contribution of energy conservation
22  REAL, SAVE, ALLOCATABLE :: bils_ech(:) ! Contribution of energy conservation
23  REAL, SAVE, ALLOCATABLE :: bils_tke(:) ! Contribution of energy conservation
24  REAL, SAVE, ALLOCATABLE :: bils_diss(:) ! Contribution of energy conservation
25  REAL, SAVE, ALLOCATABLE :: bils_kinetic(:) ! bilan de chaleur au sol, kinetic
26  REAL, SAVE, ALLOCATABLE :: bils_enthalp(:) ! bilan de chaleur au sol
27  REAL, SAVE, ALLOCATABLE :: bils_latent(:) ! bilan de chaleur au sol
28  !$OMP THREADPRIVATE(bils_ec,bils_ech,bils_tke,bils_diss,bils_kinetic,bils_enthalp,bils_latent)
29  ! output variables for energy conservation tests, computed in add_phys_tend
30  REAL, SAVE, ALLOCATABLE :: d_qw_col(:)      ! watter vapour mass budget for each column (kg/m2/s)
31  REAL, SAVE, ALLOCATABLE :: d_ql_col(:)      ! liquid watter mass budget for each column (kg/m2/s)
32  REAL, SAVE, ALLOCATABLE :: d_qs_col(:)      ! cloud ice mass budget for each column (kg/m2/s)
33  REAL, SAVE, ALLOCATABLE :: d_qbs_col(:)     ! blowing snow mass budget for each column (kg/m2/s)
34  REAL, SAVE, ALLOCATABLE :: d_qt_col(:)      ! total watter mass budget for each column (kg/m2/s)
35  REAL, SAVE, ALLOCATABLE :: d_ek_col(:)      ! kinetic energy budget for each column (W/m2)
36  REAL, SAVE, ALLOCATABLE :: d_h_dair_col(:)  ! enthalpy budget of dry air for each column (W/m2)
37  REAL, SAVE, ALLOCATABLE :: d_h_qw_col(:)    ! enthalpy budget of watter vapour for each column (W/m2)
38  REAL, SAVE, ALLOCATABLE :: d_h_ql_col(:)    ! enthalpy budget of liquid watter for each column (W/m2)
39  REAL, SAVE, ALLOCATABLE :: d_h_qs_col(:)    ! enthalpy budget of cloud ice  for each column (W/m2)
40  REAL, SAVE, ALLOCATABLE :: d_h_qbs_col(:)    ! enthalpy budget of blowing snow for each column (W/m2)
41  REAL, SAVE, ALLOCATABLE :: d_h_col(:)       ! total enthalpy budget for each column (W/m2)
42  !$OMP THREADPRIVATE(d_qw_col, d_ql_col, d_qs_col, d_qbs_col, d_qt_col, d_ek_col, d_h_dair_col)
43  !$OMP THREADPRIVATE(d_h_qw_col, d_h_ql_col, d_h_qs_col, d_h_qbs_col, d_h_col)
44
45  ! Outputs used in cloudth_vert to extract the moments of the horizontal and
46  ! vertical PDFs
47  REAL, SAVE, ALLOCATABLE :: cloudth_sth(:,:),cloudth_senv(:,:)
48  !$OMP THREADPRIVATE(cloudth_sth,cloudth_senv)
49  REAL, SAVE, ALLOCATABLE :: cloudth_sigmath(:,:),cloudth_sigmaenv(:,:)
50  !$OMP THREADPRIVATE(cloudth_sigmath,cloudth_sigmaenv)
51
52! Marine
53! Variables de sortie du simulateur AIRS
54
55  REAL, SAVE, ALLOCATABLE :: map_prop_hc(:),map_prop_hist(:),alt_tropo(:)
56  !$OMP THREADPRIVATE(map_prop_hc,map_prop_hist,alt_tropo)
57  REAL, SAVE, ALLOCATABLE :: map_emis_hc(:),map_iwp_hc(:),map_deltaz_hc(:),map_pcld_hc(:),map_tcld_hc(:)
58  !$OMP THREADPRIVATE(map_emis_hc,map_iwp_hc,map_deltaz_hc,map_pcld_hc,map_tcld_hc)
59  REAL, SAVE, ALLOCATABLE :: map_emis_hist(:),map_iwp_hist(:),map_deltaz_hist(:),map_rad_hist(:)         
60  !$OMP THREADPRIVATE(map_emis_hist,map_iwp_hist,map_deltaz_hist,map_rad_hist)
61  REAL, SAVE, ALLOCATABLE :: map_ntot(:),map_hc(:),map_hist(:)
62  REAL, SAVE, ALLOCATABLE :: map_Cb(:),map_ThCi(:),map_Anv(:)
63  !$OMP THREADPRIVATE(map_ntot,map_hc,map_hist,map_Cb,map_ThCi,map_Anv)
64  REAL, SAVE, ALLOCATABLE :: map_emis_Cb(:),map_pcld_Cb(:),map_tcld_Cb(:)
65  REAL, SAVE, ALLOCATABLE :: map_emis_ThCi(:),map_pcld_ThCi(:),map_tcld_ThCi(:)
66  !$OMP THREADPRIVATE(map_emis_Cb,map_pcld_Cb,map_tcld_Cb,map_emis_ThCi)
67  REAL, SAVE, ALLOCATABLE :: map_emis_Anv(:),map_pcld_Anv(:),map_tcld_Anv(:)
68  !$OMP THREADPRIVATE(map_pcld_ThCi,map_tcld_ThCi,map_emis_Anv,map_pcld_Anv,map_tcld_Anv)
69
70  ! variables deplacees de phys_local_var_mod
71  REAL, SAVE, ALLOCATABLE :: scdnc(:,:)
72  !$OMP THREADPRIVATE(scdnc)
73  REAL, SAVE, ALLOCATABLE :: cldncl(:)
74  !$OMP THREADPRIVATE(cldncl)
75  REAL, SAVE, ALLOCATABLE :: reffclwtop(:)
76  !$OMP THREADPRIVATE(reffclwtop)
77  REAL, SAVE, ALLOCATABLE :: lcc(:)
78  !$OMP THREADPRIVATE(lcc)
79  REAL, SAVE, ALLOCATABLE :: reffclws(:,:)
80  !$OMP THREADPRIVATE(reffclws)
81  REAL, SAVE, ALLOCATABLE :: reffclwc(:,:)
82  !$OMP THREADPRIVATE(reffclwc)
83  REAL, SAVE, ALLOCATABLE :: cldnvi(:)
84  !$OMP THREADPRIVATE(cldnvi)
85  REAL, SAVE, ALLOCATABLE :: lcc3d(:,:)
86  !$OMP THREADPRIVATE(lcc3d)
87  REAL, SAVE, ALLOCATABLE :: lcc3dcon(:,:)
88  !$OMP THREADPRIVATE(lcc3dcon)
89  REAL, SAVE, ALLOCATABLE :: lcc3dstra(:,:)
90  !$OMP THREADPRIVATE(lcc3dstra)
91  REAL, SAVE, ALLOCATABLE :: icc3dcon(:,:)
92  !$OMP THREADPRIVATE(icc3dcon)
93  REAL, SAVE, ALLOCATABLE :: icc3dstra(:,:)
94  !$OMP THREADPRIVATE(icc3dstra) 
95   
96
97  ! ug Plein de variables venues de phys_output_mod
98  INTEGER, PARAMETER                           :: nfiles = 10
99  LOGICAL, DIMENSION(nfiles), SAVE             :: clef_files
100  LOGICAL, DIMENSION(nfiles), SAVE             :: clef_stations
101  INTEGER, DIMENSION(nfiles), SAVE             :: lev_files
102  INTEGER, DIMENSION(nfiles), SAVE             :: nid_files
103  INTEGER, DIMENSION(nfiles), SAVE  :: nnid_files
104  !$OMP THREADPRIVATE(clef_files, clef_stations, lev_files,nid_files,nnid_files)
105  INTEGER, DIMENSION(nfiles), SAVE :: nnhorim
106  INTEGER, DIMENSION(nfiles), SAVE :: nhorim, nvertm
107  INTEGER, DIMENSION(nfiles), SAVE :: ncanaux  !FC
108  !$OMP THREADPRIVATE(ncanaux)
109  INTEGER, DIMENSION(nfiles), SAVE :: nvertap, nvertbp, nvertAlt
110  REAL, DIMENSION(nfiles), SAVE                :: zoutm
111  CHARACTER(LEN=20), DIMENSION(nfiles), SAVE   :: type_ecri
112  !$OMP THREADPRIVATE(nnhorim,nhorim,nvertm,nvertap,nvertbp,nvertAlt,zoutm,type_ecri)
113  CHARACTER(LEN=20), DIMENSION(nfiles), SAVE  :: type_ecri_files, phys_out_filetypes
114  !$OMP THREADPRIVATE(type_ecri_files, phys_out_filetypes)
115  CHARACTER(LEN=20), DIMENSION(nfiles), SAVE  :: phys_out_filenames
116  !$OMP THREADPRIVATE(phys_out_filenames)
117
118  ! swaero_diag : flag indicates if it is necessary to do calculation for some aerosol diagnostics
119  ! swaerofree_diag : flag indicates if it is necessary to do calculation for some aerosol diagnostics
120  ! dryaod_diag : flag indicates if it is necessary to do calculation for some aerosol diagnostics
121  !--OB: this needs to be set to FALSE by default and changed back to TRUE based on output requests
122  LOGICAL, SAVE                                :: swaerofree_diag=.FALSE.
123  LOGICAL, SAVE                                :: swaero_diag=.FALSE.
124  LOGICAL, SAVE                                :: dryaod_diag=.FALSE.
125  !$OMP THREADPRIVATE(swaerofree_diag, swaero_diag, dryaod_diag)
126 
127  ! ok_4xCO2atm : flag indicates if it is necessary to do a second call of
128  ! radiation code with a 4xCO2 or another different GES to assess SW/LW
129  ! in this case
130  !--IM: as for swaero_diag this needs to be set to FALSE by default and
131  !      changed back to TRUE based on output requests
132  LOGICAL, SAVE                                :: ok_4xCO2atm=.FALSE.
133  !$OMP THREADPRIVATE(ok_4xCO2atm)
134
135  INTEGER, SAVE:: levmin(nfiles) = 1
136  INTEGER, SAVE:: levmax(nfiles)
137  !$OMP THREADPRIVATE(levmin, levmax)
138
139  REAL, SAVE                :: zdtime_moy
140  !$OMP THREADPRIVATE(zdtime_moy)
141
142  LOGICAL, SAVE :: vars_defined = .FALSE. ! ug PAS THREADPRIVATE ET C'EST NORMAL
143
144  REAL, allocatable:: zustr_gwd_hines(:), zvstr_gwd_hines(:) ! (klon)
145  REAL, allocatable:: zustr_gwd_front(:), zvstr_gwd_front(:) ! (klon)
146  REAL, allocatable:: zustr_gwd_rando(:), zvstr_gwd_rando(:) ! (klon)
147  !$OMP THREADPRIVATE(zustr_gwd_hines, zvstr_gwd_hines)
148  !$OMP THREADPRIVATE(zustr_gwd_front, zvstr_gwd_front)
149  !$OMP THREADPRIVATE(zustr_gwd_rando, zvstr_gwd_rando)
150
151  TYPE ctrl_out
152     INTEGER               :: flag(nfiles)
153     CHARACTER(len=maxlen) :: name
154     CHARACTER(len=maxlen) :: description
155     CHARACTER(len=maxlen) :: unit
156     CHARACTER(len=maxlen) :: type_ecrit(nfiles)
157  END TYPE ctrl_out
158
159  REAL, SAVE, ALLOCATABLE :: sens_prec_liq_o(:,:), sens_prec_sol_o(:,:)
160  REAL, SAVE, ALLOCATABLE :: lat_prec_liq_o(:,:), lat_prec_sol_o(:,:)
161 !$OMP THREADPRIVATE(sens_prec_liq_o, sens_prec_sol_o,lat_prec_liq_o,lat_prec_sol_o)
162
163  ! Ocean-atmosphere interface, subskin ocean and near-surface ocean:
164 
165  REAL, SAVE, ALLOCATABLE:: tkt(:) ! (klon)
166  ! �paisseur (m) de la couche de diffusion thermique (microlayer)
167  ! cool skin thickness
168
169  REAL, SAVE, ALLOCATABLE:: tks(:) ! (klon)
170  ! �paisseur (m) de la couche de diffusion de masse (microlayer)
171 
172  REAL, SAVE, ALLOCATABLE:: taur(:) ! (klon) momentum flux due to rain, in Pa
173
174  REAL, SAVE, ALLOCATABLE:: sss(:) ! (klon)
175  ! bulk salinity of the surface layer of the ocean, in ppt
176 
177  !$OMP THREADPRIVATE(tkt, tks, taur, sss)
178
179  !AI. cloud_cover_sw, cloud_cover_sw_s2 from Ecrad (1rt and 2 call)
180  REAL, SAVE, ALLOCATABLE:: cloud_cover_sw(:), cloud_cover_sw_s2(:)
181  !$OMP THREADPRIVATE(cloud_cover_sw, cloud_cover_sw_s2)
182
183  ! Direct-beam shortwave into a horizontal plane
184  REAL, SAVE, ALLOCATABLE :: ZFLUX_DIR(:,:), ZFLUX_DIR_CLEAR(:,:), &
185         &     ZFLUX_DIR_s2(:,:), ZFLUX_DIR_CLEAR_s2(:,:)
186  !$OMP THREADPRIVATE(ZFLUX_DIR, ZFLUX_DIR_CLEAR, ZFLUX_DIR_s2, ZFLUX_DIR_CLEAR_s2)
187  REAL, SAVE, ALLOCATABLE :: ZFLUX_DIR_SUN(:), ZFLUX_DIR_SUN_s2(:)
188  !$OMP THREADPRIVATE(ZFLUX_DIR_SUN, ZFLUX_DIR_SUN_s2)
189
190CONTAINS
191
192  !======================================================================
193  SUBROUTINE phys_output_var_init
194    USE clesphys_mod_h
195    use dimphy
196    use config_ocean_skin_m, only: activate_ocean_skin
197    USE clesphys_mod_h
198    IMPLICIT NONE
199
200    allocate(snow_o(klon), zfra_o(klon))
201    allocate(sza_o(klon) )
202    allocate(itau_con(klon))
203    allocate(sens_prec_liq_o(klon,2))
204    allocate(sens_prec_sol_o(klon,2))
205    allocate(lat_prec_liq_o(klon,2))
206    allocate(lat_prec_sol_o(klon,2))
207    sens_prec_liq_o = 0.0 ; sens_prec_sol_o = 0.0
208    lat_prec_liq_o = 0.0 ; lat_prec_sol_o = 0.0
209
210    allocate (bils_ec(klon),bils_ech(klon),bils_tke(klon),bils_diss(klon),bils_kinetic(klon),bils_enthalp(klon),bils_latent(klon))
211    allocate (d_qw_col(klon), d_ql_col(klon), d_qs_col(klon), d_qbs_col(klon), d_qt_col(klon), d_ek_col(klon), d_h_dair_col(klon) &
212  &         , d_h_qw_col(klon), d_h_ql_col(klon), d_h_qs_col(klon), d_h_qbs_col(klon), d_h_col(klon))
213    d_qw_col=0. ; d_ql_col=0. ; d_qs_col=0. ; d_qbs_col=0. ; d_qt_col=0. ; d_ek_col=0. ; d_h_dair_col =0.
214    d_h_qw_col=0. ; d_h_ql_col=0. ; d_h_qs_col=0. ; d_h_qbs_col=0. ; d_h_col=0.
215
216    ! Outputs used in cloudth_vert
217    allocate(cloudth_sth(klon,klev))
218    allocate(cloudth_senv(klon,klev))
219    cloudth_sth = 0. ; cloudth_senv = 0.
220    allocate(cloudth_sigmath(klon,klev))
221    allocate(cloudth_sigmaenv(klon,klev))
222    cloudth_sigmath = 0. ; cloudth_sigmaenv = 0.
223
224! Marine
225! Variables de sortie simulateur AIRS
226
227!     if (ok_airs) then
228      allocate (map_prop_hc(klon),map_prop_hist(klon))
229      allocate (alt_tropo(klon))
230      allocate (map_emis_hc(klon),map_iwp_hc(klon),map_deltaz_hc(klon))
231      allocate (map_pcld_hc(klon),map_tcld_hc(klon))
232      allocate (map_emis_hist(klon),map_iwp_hist(klon),map_deltaz_hist(klon))
233      allocate (map_rad_hist(klon))
234      allocate (map_ntot(klon),map_hc(klon),map_hist(klon))
235      allocate (map_Cb(klon),map_ThCi(klon),map_Anv(klon))
236      allocate (map_emis_Cb(klon),map_pcld_Cb(klon),map_tcld_Cb(klon))
237      allocate (map_emis_ThCi(klon),map_pcld_ThCi(klon),map_tcld_ThCi(klon))
238      allocate (map_emis_Anv(klon),map_pcld_Anv(klon),map_tcld_Anv(klon))
239!     endif
240
241    IF (ok_hines) allocate(zustr_gwd_hines(klon), zvstr_gwd_hines(klon))
242    IF (.not.ok_hines.and.ok_gwd_rando) &
243                  allocate(zustr_gwd_front(klon), zvstr_gwd_front(klon))
244    IF (ok_gwd_rando) allocate(zustr_gwd_rando(klon), zvstr_gwd_rando(klon))
245
246    if (activate_ocean_skin >= 1) allocate(tkt(klon), tks(klon), taur(klon), &
247         sss(klon))
248
249! Sorties de lmdz_cloud_optics_pro
250    ALLOCATE(scdnc(klon, klev))
251    ALLOCATE(cldncl(klon))
252    ALLOCATE(reffclwtop(klon))
253    ALLOCATE(lcc(klon))
254    ALLOCATE(reffclws(klon, klev))
255    ALLOCATE(reffclwc(klon, klev))
256    ALLOCATE(cldnvi(klon))
257    ALLOCATE(lcc3d(klon, klev))
258    ALLOCATE(lcc3dcon(klon, klev))
259    ALLOCATE(lcc3dstra(klon, klev))
260    ALLOCATE(icc3dcon(klon, klev))
261    ALLOCATE(icc3dstra(klon, klev))
262
263! cloud_cover_sw, cloud_cover_sw_s2 from Ecrad
264    ALLOCATE(cloud_cover_sw(klon))
265    ALLOCATE(cloud_cover_sw_s2(klon))
266    ALLOCATE(ZFLUX_DIR(klon,klev+1))
267    ALLOCATE(ZFLUX_DIR_CLEAR(klon,klev+1))
268    ALLOCATE(ZFLUX_DIR_s2(klon,klev+1))
269    ALLOCATE(ZFLUX_DIR_CLEAR_s2(klon,klev+1))
270    ALLOCATE(ZFLUX_DIR_SUN(klon))
271    ALLOCATE(ZFLUX_DIR_SUN_s2(klon))
272
273  END SUBROUTINE phys_output_var_init
274
275  !======================================================================
276  SUBROUTINE phys_output_var_end
277    USE dimphy
278    IMPLICIT NONE
279
280
281    deallocate(snow_o,zfra_o,itau_con)
282    deallocate(sza_o)
283    deallocate (bils_ec,bils_ech,bils_tke,bils_diss,bils_kinetic,bils_enthalp,bils_latent)
284    deallocate (d_qw_col, d_ql_col, d_qs_col, d_qbs_col, d_qt_col, d_ek_col, d_h_dair_col &
285  &           , d_h_qw_col, d_h_ql_col, d_h_qs_col, d_h_qbs_col, d_h_col)
286
287    ! Outputs used in cloudth_vert
288    deallocate(cloudth_sth)
289    deallocate(cloudth_senv)
290    deallocate(cloudth_sigmath)
291    deallocate(cloudth_sigmaenv)
292
293! Marine
294! Variables de sortie simulateur AIRS
295
296 !    if (ok_airs) then
297      deallocate (map_prop_hc,map_prop_hist)
298      deallocate (alt_tropo)
299      deallocate (map_emis_hc,map_iwp_hc,map_deltaz_hc)
300      deallocate (map_pcld_hc,map_tcld_hc)
301      deallocate (map_emis_hist,map_iwp_hist,map_deltaz_hist)
302      deallocate (map_rad_hist)
303      deallocate (map_ntot,map_hc,map_hist)
304      deallocate (map_Cb,map_ThCi,map_Anv)
305      deallocate (map_emis_Cb,map_pcld_Cb,map_tcld_Cb)
306      deallocate (map_emis_ThCi,map_pcld_ThCi,map_tcld_ThCi)
307      deallocate (map_emis_Anv,map_pcld_Anv,map_tcld_Anv)
308  !   endif
309
310    DEALLOCATE(scdnc)
311    DEALLOCATE(cldncl)
312    DEALLOCATE(reffclwtop)
313    DEALLOCATE(lcc)
314    DEALLOCATE(reffclws)
315    DEALLOCATE(reffclwc)
316    DEALLOCATE(cldnvi)
317    DEALLOCATE(lcc3d)
318    DEALLOCATE(lcc3dcon)
319    DEALLOCATE(lcc3dstra)
320    DEALLOCATE(icc3dcon)
321    DEALLOCATE(icc3dstra)
322
323    !AI cloud_cover_sw, cloud_cover_sw_s2 from Ecrad
324    DEALLOCATE(cloud_cover_sw, cloud_cover_sw_s2)
325    DEALLOCATE(ZFLUX_DIR, ZFLUX_DIR_CLEAR, ZFLUX_DIR_s2, ZFLUX_DIR_CLEAR_s2)
326    DEALLOCATE(ZFLUX_DIR_SUN, ZFLUX_DIR_SUN_s2)
327
328  END SUBROUTINE phys_output_var_end
329
330END MODULE phys_output_var_mod
Note: See TracBrowser for help on using the repository browser.