6 use netcdf95, only: nf95_close, nf95_gw_var, nf95_inq_dimid, &
7 nf95_inq_varid, nf95_open
8 use netcdf
, only: nf90_get_var, nf90_noerr, nf90_nowrite
32 real,
pointer:: latitude(:)
33 real,
pointer:: longitude(:)
34 real,
pointer:: time(:)
35 real,
pointer:: lev(:)
36 integer k, band, wave, i
37 integer,
save :: mth_pre
39 real,
allocatable,
dimension(:,:),
save :: tau_aer_strat
43 real,
allocatable:: tauaerstrat(:, :, :, :)
44 real,
allocatable:: tauaerstrat_mois(:, :, :)
45 real,
allocatable:: tauaerstrat_mois_glo(:, :)
47 real,
allocatable:: sum_tau_aer_strat(:)
55 real,
dimension(nbands_sw_rrtm) :: alpha_sw_strat, piz_sw_strat, cg_sw_strat
56 data alpha_sw_strat/0.8545564, 0.8451642, 0.9821724, 0.8145110, 0.3073565, 7.7966176e-02/
57 data cg_sw_strat /0.6997170, 0.6810035, 0.7403592, 0.7562674, 0.6676504, 0.3478689/
58 data piz_sw_strat /0.9999998, 0.9999998, 1.000000000, 0.9999958, 0.9977155, 0.4510679/
62 real,
dimension(nwave) :: alpha_sw_strat_wave
63 data alpha_sw_strat_wave/3.708007,4.125824,4.136584,3.887478,3.507738/
66 real :: alpha_lw_strat_wave
67 data alpha_lw_strat_wave/0.2746812/
69 real,
dimension(nbands_lw_rrtm) :: alpha_lw_abs_rrtm
70 data alpha_lw_abs_rrtm/ 8.8340312e-02, 6.9856711e-02, 6.2652975e-02, 5.7188231e-02, &
71 6.3157059e-02, 5.5072524e-02, 5.0571125e-02, 0.1349073, &
72 0.1381676, 9.6506312e-02, 5.1312990e-02, 2.4256418e-02, &
73 2.7191756e-02, 3.3862915e-02, 1.6132960e-02, 1.4275438e-02/
78 IF (.not.
ALLOCATED(tau_aer_strat))
ALLOCATE(tau_aer_strat(
klon,
klev))
79 IF (.not.
ALLOCATED(sum_tau_aer_strat))
ALLOCATE(sum_tau_aer_strat(
klon))
81 IF (debut.OR.
mth_cur.NE.mth_pre)
THEN
86 print *,
'nbands_sw_rrtm doit etre egal a 6 dans readaerosolstrat_rrtm'
90 CALL nf95_open(
"taustrat.nc", nf90_nowrite, ncid_in)
92 CALL nf95_inq_varid(ncid_in,
"LEV", varid)
93 CALL nf95_gw_var(ncid_in, varid, lev)
95 IF (n_lev.NE.
klev)
THEN
96 print *,
'Le nombre de niveaux n est pas egal a klev'
100 CALL nf95_inq_varid(ncid_in,
"LAT", varid)
101 CALL nf95_gw_var(ncid_in, varid, latitude)
102 n_lat =
size(latitude)
103 print *,
'LAT aerosol strato=', n_lat, latitude
105 print *,
'Le nombre de lat n est pas egal a nbp_lat'
109 CALL nf95_inq_varid(ncid_in,
"LON", varid)
110 CALL nf95_gw_var(ncid_in, varid, longitude)
111 n_lon =
size(longitude)
112 print *,
'LON aerosol strato=', n_lon, longitude
114 print *,
'Le nombre de lon n est pas egal a nbp_lon'
118 CALL nf95_inq_varid(ncid_in,
"TIME", varid)
119 CALL nf95_gw_var(ncid_in, varid, time)
121 print *,
'TIME aerosol strato=', n_month, time
122 IF (n_month.NE.12)
THEN
123 print *,
'Le nombre de month n est pas egal a 12'
127 ALLOCATE(tauaerstrat(n_lon, n_lat, n_lev, n_month))
128 ALLOCATE(tauaerstrat_mois(n_lon, n_lat, n_lev))
129 ALLOCATE(tauaerstrat_mois_glo(
klon_glo, n_lev))
132 CALL nf95_inq_varid(ncid_in,
"TAUSTRAT", varid)
133 ncerr = nf90_get_var(ncid_in, varid, tauaerstrat)
134 print *,
'code erreur readaerosolstrato=', ncerr, varid
136 CALL nf95_close(ncid_in)
140 print *,
'probleme avec le mois dans readaerosolstrat =',
mth_cur
142 tauaerstrat_mois(:,:,:) = tauaerstrat(:,:,:,
mth_cur)
153 CALL scatter(tauaerstrat_mois_glo,tau_aer_strat)
157 DEALLOCATE(tauaerstrat)
158 DEALLOCATE(tauaerstrat_mois)
159 DEALLOCATE(tauaerstrat_mois_glo)
169 tau_aer_strat(:,k)*alpha_sw_strat_wave(wave)/alpha_sw_strat_wave(2)
176 cg_aero_sw_rrtm(:,:,2,band) = (
cg_aero_sw_rrtm(:,:,2,band)*
piz_aero_sw_rrtm(:,:,2,band)*
tau_aero_sw_rrtm(:,:,2,band) + &
177 cg_sw_strat(band)*piz_sw_strat(band)*alpha_sw_strat(band)*tau_aer_strat(:,:) ) / &
179 piz_sw_strat(band)*alpha_sw_strat(band)*tau_aer_strat(:,:), 1.e-15 )
181 piz_sw_strat(band)*alpha_sw_strat(band)*tau_aer_strat(:,:) ) / &
182 max(
tau_aero_sw_rrtm(:,:,2,band) + alpha_sw_strat(band)*tau_aer_strat(:,:), 1.e-15 )
185 cg_aero_sw_rrtm(:,:,1,band) = (
cg_aero_sw_rrtm(:,:,1,band)*
piz_aero_sw_rrtm(:,:,1,band)*
tau_aero_sw_rrtm(:,:,1,band) + &
186 cg_sw_strat(band)*piz_sw_strat(band)*alpha_sw_strat(band)*tau_aer_strat(:,:) ) / &
188 piz_sw_strat(band)*alpha_sw_strat(band)*tau_aer_strat(:,:), 1.e-15 )
190 piz_sw_strat(band)*alpha_sw_strat(band)*tau_aer_strat(:,:) ) / &
191 max(
tau_aero_sw_rrtm(:,:,1,band) + alpha_sw_strat(band)*tau_aer_strat(:,:),1.e-15 )
201 print*,
'different values for NLW (=',
nlw,
') and nbands_lw_rrtm (=',
nbands_lw_rrtm,
')'
real, dimension(:,:,:,:), allocatable, save piz_aero_sw_rrtm
subroutine readaerosolstrato_rrtm(debut)
real, dimension(:,:,:,:), allocatable, save tau_aero_lw_rrtm
integer, parameter nbands_lw_rrtm
real, dimension(:,:,:,:), allocatable, save tau_aero_sw_rrtm
integer, parameter nbands_sw_rrtm
real, dimension(:,:,:), allocatable, save tausum_aero
real, dimension(:,:,:,:), allocatable, save cg_aero_sw_rrtm
logical, save is_mpi_root
integer, parameter id_strat_phy