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

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