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

Last change on this file since 5483 was 5483, checked in by evignon, 10 hours ago

ajout de omp_threadprivate manquants

  • 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: 13.7 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 :: nvertap, nvertbp, nvertAlt
108  REAL, DIMENSION(nfiles), SAVE                :: zoutm
109  CHARACTER(LEN=20), DIMENSION(nfiles), SAVE   :: type_ecri
110  !$OMP THREADPRIVATE(nnhorim,nhorim,nvertm,nvertap,nvertbp,nvertAlt,zoutm,type_ecri)
111  CHARACTER(LEN=20), DIMENSION(nfiles), SAVE  :: type_ecri_files, phys_out_filetypes
112  !$OMP THREADPRIVATE(type_ecri_files, phys_out_filetypes)
113  CHARACTER(LEN=20), DIMENSION(nfiles), SAVE  :: phys_out_filenames
114  !$OMP THREADPRIVATE(phys_out_filenames)
115
116  ! swaero_diag : flag indicates if it is necessary to do calculation for some aerosol diagnostics
117  ! swaerofree_diag : flag indicates if it is necessary to do calculation for some aerosol diagnostics
118  ! dryaod_diag : flag indicates if it is necessary to do calculation for some aerosol diagnostics
119  !--OB: this needs to be set to FALSE by default and changed back to TRUE based on output requests
120  LOGICAL, SAVE                                :: swaerofree_diag=.FALSE.
121  LOGICAL, SAVE                                :: swaero_diag=.FALSE.
122  LOGICAL, SAVE                                :: dryaod_diag=.FALSE.
123  !$OMP THREADPRIVATE(swaerofree_diag, swaero_diag, dryaod_diag)
124 
125  ! ok_4xCO2atm : flag indicates if it is necessary to do a second call of
126  ! radiation code with a 4xCO2 or another different GES to assess SW/LW
127  ! in this case
128  !--IM: as for swaero_diag this needs to be set to FALSE by default and
129  !      changed back to TRUE based on output requests
130  LOGICAL, SAVE                                :: ok_4xCO2atm=.FALSE.
131  !$OMP THREADPRIVATE(ok_4xCO2atm)
132
133  INTEGER, SAVE:: levmin(nfiles) = 1
134  INTEGER, SAVE:: levmax(nfiles)
135  !$OMP THREADPRIVATE(levmin, levmax)
136
137  REAL, SAVE                :: zdtime_moy
138  !$OMP THREADPRIVATE(zdtime_moy)
139
140  LOGICAL, SAVE :: vars_defined = .FALSE. ! ug PAS THREADPRIVATE ET C'EST NORMAL
141
142  REAL, allocatable:: zustr_gwd_hines(:), zvstr_gwd_hines(:) ! (klon)
143  REAL, allocatable:: zustr_gwd_front(:), zvstr_gwd_front(:) ! (klon)
144  REAL, allocatable:: zustr_gwd_rando(:), zvstr_gwd_rando(:) ! (klon)
145  !$OMP THREADPRIVATE(zustr_gwd_hines, zvstr_gwd_hines)
146  !$OMP THREADPRIVATE(zustr_gwd_front, zvstr_gwd_front)
147  !$OMP THREADPRIVATE(zustr_gwd_rando, zvstr_gwd_rando)
148
149  TYPE ctrl_out
150     INTEGER               :: flag(nfiles)
151     CHARACTER(len=maxlen) :: name
152     CHARACTER(len=maxlen) :: description
153     CHARACTER(len=maxlen) :: unit
154     CHARACTER(len=maxlen) :: type_ecrit(nfiles)
155  END TYPE ctrl_out
156
157  REAL, SAVE, ALLOCATABLE :: sens_prec_liq_o(:,:), sens_prec_sol_o(:,:)
158  REAL, SAVE, ALLOCATABLE :: lat_prec_liq_o(:,:), lat_prec_sol_o(:,:)
159 !$OMP THREADPRIVATE(sens_prec_liq_o, sens_prec_sol_o,lat_prec_liq_o,lat_prec_sol_o)
160
161  ! Ocean-atmosphere interface, subskin ocean and near-surface ocean:
162 
163  REAL, SAVE, ALLOCATABLE:: tkt(:) ! (klon)
164  ! �paisseur (m) de la couche de diffusion thermique (microlayer)
165  ! cool skin thickness
166
167  REAL, SAVE, ALLOCATABLE:: tks(:) ! (klon)
168  ! �paisseur (m) de la couche de diffusion de masse (microlayer)
169 
170  REAL, SAVE, ALLOCATABLE:: taur(:) ! (klon) momentum flux due to rain, in Pa
171
172  REAL, SAVE, ALLOCATABLE:: sss(:) ! (klon)
173  ! bulk salinity of the surface layer of the ocean, in ppt
174 
175  !$OMP THREADPRIVATE(tkt, tks, taur, sss)
176
177  !AI. cloud_cover_sw, cloud_cover_sw_s2 from Ecrad (1rt and 2 call)
178  REAL, SAVE, ALLOCATABLE:: cloud_cover_sw(:), cloud_cover_sw_s2(:)
179  !$OMP THREADPRIVATE(cloud_cover_sw, cloud_cover_sw_s2)
180
181CONTAINS
182
183  !======================================================================
184  SUBROUTINE phys_output_var_init
185    USE clesphys_mod_h
186    use dimphy
187    use config_ocean_skin_m, only: activate_ocean_skin
188    USE clesphys_mod_h
189    IMPLICIT NONE
190
191    allocate(snow_o(klon), zfra_o(klon))
192    allocate(sza_o(klon) )
193    allocate(itau_con(klon))
194    allocate(sens_prec_liq_o(klon,2))
195    allocate(sens_prec_sol_o(klon,2))
196    allocate(lat_prec_liq_o(klon,2))
197    allocate(lat_prec_sol_o(klon,2))
198    sens_prec_liq_o = 0.0 ; sens_prec_sol_o = 0.0
199    lat_prec_liq_o = 0.0 ; lat_prec_sol_o = 0.0
200
201    allocate (bils_ec(klon),bils_ech(klon),bils_tke(klon),bils_diss(klon),bils_kinetic(klon),bils_enthalp(klon),bils_latent(klon))
202    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) &
203  &         , d_h_qw_col(klon), d_h_ql_col(klon), d_h_qs_col(klon), d_h_qbs_col(klon), d_h_col(klon))
204    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.
205    d_h_qw_col=0. ; d_h_ql_col=0. ; d_h_qs_col=0. ; d_h_qbs_col=0. ; d_h_col=0.
206
207    ! Outputs used in cloudth_vert
208    allocate(cloudth_sth(klon,klev))
209    allocate(cloudth_senv(klon,klev))
210    cloudth_sth = 0. ; cloudth_senv = 0.
211    allocate(cloudth_sigmath(klon,klev))
212    allocate(cloudth_sigmaenv(klon,klev))
213    cloudth_sigmath = 0. ; cloudth_sigmaenv = 0.
214
215! Marine
216! Variables de sortie simulateur AIRS
217
218!     if (ok_airs) then
219      allocate (map_prop_hc(klon),map_prop_hist(klon))
220      allocate (alt_tropo(klon))
221      allocate (map_emis_hc(klon),map_iwp_hc(klon),map_deltaz_hc(klon))
222      allocate (map_pcld_hc(klon),map_tcld_hc(klon))
223      allocate (map_emis_hist(klon),map_iwp_hist(klon),map_deltaz_hist(klon))
224      allocate (map_rad_hist(klon))
225      allocate (map_ntot(klon),map_hc(klon),map_hist(klon))
226      allocate (map_Cb(klon),map_ThCi(klon),map_Anv(klon))
227      allocate (map_emis_Cb(klon),map_pcld_Cb(klon),map_tcld_Cb(klon))
228      allocate (map_emis_ThCi(klon),map_pcld_ThCi(klon),map_tcld_ThCi(klon))
229      allocate (map_emis_Anv(klon),map_pcld_Anv(klon),map_tcld_Anv(klon))
230!     endif
231
232    IF (ok_hines) allocate(zustr_gwd_hines(klon), zvstr_gwd_hines(klon))
233    IF (.not.ok_hines.and.ok_gwd_rando) &
234                  allocate(zustr_gwd_front(klon), zvstr_gwd_front(klon))
235    IF (ok_gwd_rando) allocate(zustr_gwd_rando(klon), zvstr_gwd_rando(klon))
236
237    if (activate_ocean_skin >= 1) allocate(tkt(klon), tks(klon), taur(klon), &
238         sss(klon))
239
240! Sorties de lmdz_cloud_optics_pro
241    ALLOCATE(scdnc(klon, klev))
242    ALLOCATE(cldncl(klon))
243    ALLOCATE(reffclwtop(klon))
244    ALLOCATE(lcc(klon))
245    ALLOCATE(reffclws(klon, klev))
246    ALLOCATE(reffclwc(klon, klev))
247    ALLOCATE(cldnvi(klon))
248    ALLOCATE(lcc3d(klon, klev))
249    ALLOCATE(lcc3dcon(klon, klev))
250    ALLOCATE(lcc3dstra(klon, klev))
251    ALLOCATE(icc3dcon(klon, klev))
252    ALLOCATE(icc3dstra(klon, klev))
253
254    ! cloud_cover_sw, cloud_cover_sw_s2 from Ecrad
255    ALLOCATE(cloud_cover_sw(klon))
256    ALLOCATE(cloud_cover_sw_s2(klon))
257
258  END SUBROUTINE phys_output_var_init
259
260  !======================================================================
261  SUBROUTINE phys_output_var_end
262    USE dimphy
263    IMPLICIT NONE
264
265
266    deallocate(snow_o,zfra_o,itau_con)
267    deallocate(sza_o)
268    deallocate (bils_ec,bils_ech,bils_tke,bils_diss,bils_kinetic,bils_enthalp,bils_latent)
269    deallocate (d_qw_col, d_ql_col, d_qs_col, d_qbs_col, d_qt_col, d_ek_col, d_h_dair_col &
270  &           , d_h_qw_col, d_h_ql_col, d_h_qs_col, d_h_qbs_col, d_h_col)
271
272    ! Outputs used in cloudth_vert
273    deallocate(cloudth_sth)
274    deallocate(cloudth_senv)
275    deallocate(cloudth_sigmath)
276    deallocate(cloudth_sigmaenv)
277
278! Marine
279! Variables de sortie simulateur AIRS
280
281 !    if (ok_airs) then
282      deallocate (map_prop_hc,map_prop_hist)
283      deallocate (alt_tropo)
284      deallocate (map_emis_hc,map_iwp_hc,map_deltaz_hc)
285      deallocate (map_pcld_hc,map_tcld_hc)
286      deallocate (map_emis_hist,map_iwp_hist,map_deltaz_hist)
287      deallocate (map_rad_hist)
288      deallocate (map_ntot,map_hc,map_hist)
289      deallocate (map_Cb,map_ThCi,map_Anv)
290      deallocate (map_emis_Cb,map_pcld_Cb,map_tcld_Cb)
291      deallocate (map_emis_ThCi,map_pcld_ThCi,map_tcld_ThCi)
292      deallocate (map_emis_Anv,map_pcld_Anv,map_tcld_Anv)
293  !   endif
294
295    DEALLOCATE(scdnc)
296    DEALLOCATE(cldncl)
297    DEALLOCATE(reffclwtop)
298    DEALLOCATE(lcc)
299    DEALLOCATE(reffclws)
300    DEALLOCATE(reffclwc)
301    DEALLOCATE(cldnvi)
302    DEALLOCATE(lcc3d)
303    DEALLOCATE(lcc3dcon)
304    DEALLOCATE(lcc3dstra)
305    DEALLOCATE(icc3dcon)
306    DEALLOCATE(icc3dstra)
307
308    !AI cloud_cover_sw, cloud_cover_sw_s2 from Ecrad
309    DEALLOCATE(cloud_cover_sw, cloud_cover_sw_s2)
310
311  END SUBROUTINE phys_output_var_end
312
313END MODULE phys_output_var_mod
Note: See TracBrowser for help on using the repository browser.