3 use netcdf95, only: nf95_close, nf95_gw_var, nf95_inq_dimid, &
4 nf95_inq_varid, nf95_open
5 use netcdf
, only: nf90_get_var, nf90_noerr, nf90_nowrite
29 real,
pointer:: latitude(:)
30 real,
pointer:: longitude(:)
31 real,
pointer:: time(:)
32 real,
pointer:: lev(:)
33 integer i, k, band, wave
34 integer,
save :: mth_pre
37 real,
allocatable,
dimension(:,:),
save :: tau_aer_strat
41 real,
allocatable:: tauaerstrat(:, :, :, :)
42 real,
allocatable:: tauaerstrat_mois(:, :, :)
43 real,
allocatable:: tauaerstrat_mois_glo(:, :)
52 real,
dimension(nbands) :: alpha_strat, piz_strat, cg_strat
53 data alpha_strat/0.9922547, 0.7114912 /
54 data piz_strat /0.9999998, 0.99762493/
55 data cg_strat /0.73107845,0.73229635/
56 real,
dimension(nwave) :: alpha_strat_wave
57 data alpha_strat_wave/3.36780953,3.34667683,3.20444202,3.0293026,2.82108808/
61 IF (.not.
ALLOCATED(tau_aer_strat))
ALLOCATE(tau_aer_strat(
klon,
klev))
64 IF (debut.OR.
mth_cur.NE.mth_pre)
THEN
69 print *,
'nbands doit etre egal a 2 dans readaerosolstrat'
73 CALL nf95_open(
"taustrat.nc", nf90_nowrite, ncid_in)
75 CALL nf95_inq_varid(ncid_in,
"LEV", varid)
76 CALL nf95_gw_var(ncid_in, varid, lev)
78 IF (n_lev.NE.
klev)
THEN
79 print *,
'Le nombre de niveaux n est pas egal a klev'
83 CALL nf95_inq_varid(ncid_in,
"LAT", varid)
84 CALL nf95_gw_var(ncid_in, varid, latitude)
85 n_lat =
size(latitude)
86 print *,
'LAT aerosol strato=', n_lat, latitude
88 print *,
'Le nombre de lat n est pas egal a nbp_lat'
92 CALL nf95_inq_varid(ncid_in,
"LON", varid)
93 CALL nf95_gw_var(ncid_in, varid, longitude)
94 n_lon =
size(longitude)
95 print *,
'LON aerosol strato=', n_lon, longitude
97 print *,
'Le nombre de lon n est pas egal a nbp_lon'
101 CALL nf95_inq_varid(ncid_in,
"TIME", varid)
102 CALL nf95_gw_var(ncid_in, varid, time)
104 print *,
'TIME aerosol strato=', n_month, time
105 IF (n_month.NE.12)
THEN
106 print *,
'Le nombre de month n est pas egal a 12'
110 IF (.not.
ALLOCATED(tauaerstrat))
ALLOCATE(tauaerstrat(n_lon, n_lat, n_lev, n_month))
111 IF (.not.
ALLOCATED(tauaerstrat_mois))
ALLOCATE(tauaerstrat_mois(n_lon, n_lat, n_lev))
112 IF (.not.
ALLOCATED(tauaerstrat_mois_glo))
ALLOCATE(tauaerstrat_mois_glo(
klon_glo, n_lev))
115 CALL nf95_inq_varid(ncid_in,
"TAUSTRAT", varid)
116 ncerr = nf90_get_var(ncid_in, varid, tauaerstrat)
117 print *,
'code erreur readaerosolstrato=', ncerr, varid
119 CALL nf95_close(ncid_in)
123 print *,
'probleme avec le mois dans readaerosolstrat =',
mth_cur
125 tauaerstrat_mois(:,:,:) = tauaerstrat(:,:,:,
mth_cur)
133 CALL scatter(tauaerstrat_mois_glo,tau_aer_strat)
140 DEALLOCATE(tauaerstrat)
141 DEALLOCATE(tauaerstrat_mois)
142 DEALLOCATE(tauaerstrat_mois_glo)
158 cg_aero(:,:,3,band) = (
cg_aero(:,:,3,band)*
piz_aero(:,:,3,band)*
tau_aero(:,:,3,band) + &
159 cg_strat(band)*piz_strat(band)*alpha_strat(band)*tau_aer_strat(:,:) ) / &
161 piz_strat(band)*alpha_strat(band)*tau_aer_strat(:,:), 1.e-15 )
163 piz_strat(band)*alpha_strat(band)*tau_aer_strat(:,:) ) / &
164 max(
tau_aero(:,:,3,band) + alpha_strat(band)*tau_aer_strat(:,:), 1.e-15 )
165 tau_aero(:,:,3,band) =
tau_aero(:,:,3,band) + alpha_strat(band)*tau_aer_strat(:,:)
167 cg_aero(:,:,2,band) = (
cg_aero(:,:,2,band)*
piz_aero(:,:,2,band)*
tau_aero(:,:,2,band) + &
168 cg_strat(band)*piz_strat(band)*alpha_strat(band)*tau_aer_strat(:,:) ) / &
170 piz_strat(band)*alpha_strat(band)*tau_aer_strat(:,:), 1.e-15 )
172 piz_strat(band)*alpha_strat(band)*tau_aer_strat(:,:) ) / &
173 max(
tau_aero(:,:,2,band) + alpha_strat(band)*tau_aer_strat(:,:),1.e-15 )
174 tau_aero(:,:,2,band) =
tau_aero(:,:,2,band) + alpha_strat(band)*tau_aer_strat(:,:)
integer, parameter nbands
real, dimension(:,:,:,:), allocatable, save tau_aero
real, dimension(:,:,:,:), allocatable, save cg_aero
real, dimension(:,:,:,:), allocatable, save piz_aero
real, dimension(:,:,:), allocatable, save tausum_aero
subroutine readaerosolstrato(debut)
logical, save is_mpi_root
integer, parameter id_strat_phy