46 SUBROUTINE cosp_stats(gbx,sgx,cfg,sgradar,sglidar,vgrid,stradar,stlidar)
65 logical :: ok_lidar_cfad = .
false.
66 real,
dimension(:,:,:),
allocatable :: ze_out,betatot_out,betamol_in,betamol_out,ph_in,ph_out
67 real,
dimension(:,:),
allocatable :: ph_c,betamol_c
72 ncolumns = gbx%Ncolumns
75 if (cfg%Lcfad_Lidarsr532) ok_lidar_cfad=.true.
77 if (vgrid%use_vgrid)
then
78 allocate(ze_out(npoints,ncolumns,nlr),betatot_out(npoints,ncolumns,nlr), &
79 betamol_in(npoints,1,nlevels),betamol_out(npoints,1,nlr),betamol_c(npoints,nlr), &
80 ph_in(npoints,1,nlevels),ph_out(npoints,1,nlr),ph_c(npoints,nlr))
85 ph_in(:,1,:) = gbx%ph(:,:)
89 if (cfg%Lradar_sim)
then
91 nlr,vgrid%zl,vgrid%zu,ze_out,log_units=.true.)
92 stradar%cfad_ze =
cosp_cfad(npoints,ncolumns,nlr,dbze_bins,ze_out, &
93 dbze_min,dbze_max,cfad_ze_min,cfad_ze_width)
96 if (cfg%Llidar_sim)
then
97 betamol_in(:,1,:) = sglidar%beta_mol(:,:)
99 nlr,vgrid%zl,vgrid%zu,betamol_out)
101 nlr,vgrid%zl,vgrid%zu,betatot_out)
103 nlr,vgrid%zl,vgrid%zu,ph_out)
104 ph_c(:,:) = ph_out(:,1,:)
105 betamol_c(:,:) = betamol_out(:,1,:)
107 call
diag_lidar(npoints,ncolumns,nlr,sr_bins,parasol_nrefl &
108 ,betatot_out,betamol_c,sglidar%refl,gbx%land,ph_c &
109 ,lidar_undef,ok_lidar_cfad &
110 ,stlidar%cfad_sr,stlidar%srbval &
111 ,lidar_ncat,stlidar%lidarcld,stlidar%cldlayer,stlidar%parasolrefl)
115 betatot_out,betamol_c,ze_out, &
116 stradar%lidar_only_freq_cloud,stradar%radar_lidar_tcc)
118 deallocate(ze_out,betatot_out,betamol_in,betamol_out,betamol_c,ph_in,ph_out,ph_c)
121 if (cfg%Lradar_sim) stradar%cfad_ze =
cosp_cfad(npoints,ncolumns,nlr,dbze_bins,sgradar%Ze_tot, &
122 dbze_min,dbze_max,cfad_ze_min,cfad_ze_width)
125 if (cfg%Llidar_sim) call
diag_lidar(npoints,ncolumns,nlr,sr_bins,parasol_nrefl &
126 ,sglidar%beta_tot,sglidar%beta_mol,sglidar%refl,gbx%land,gbx%ph &
127 ,lidar_undef,ok_lidar_cfad &
128 ,stlidar%cfad_sr,stlidar%srbval &
129 ,lidar_ncat,stlidar%lidarcld,stlidar%cldlayer,stlidar%parasolrefl)
132 sglidar%beta_tot,sglidar%beta_mol,sgradar%Ze_tot, &
133 stradar%lidar_only_freq_cloud,stradar%radar_lidar_tcc)
136 where (stlidar%cfad_sr == lidar_undef) stlidar%cfad_sr = r_undef
137 where (stlidar%lidarcld == lidar_undef) stlidar%lidarcld = r_undef
138 where (stlidar%cldlayer == lidar_undef) stlidar%cldlayer = r_undef
139 where (stlidar%parasolrefl == lidar_undef) stlidar%parasolrefl = r_undef
147 SUBROUTINE cosp_change_vertical_grid(Npoints,Ncolumns,Nlevels,zfull,zhalf,y,M,zl,zu,r,log_units)
150 integer,
intent(in) :: npoints
151 integer,
intent(in) :: nlevels
152 integer,
intent(in) :: ncolumns
153 real,
dimension(Npoints,Nlevels),
intent(in) :: zfull
154 real,
dimension(Npoints,Nlevels),
intent(in) :: zhalf
155 real,
dimension(Npoints,Ncolumns,Nlevels),
intent(in) :: y
156 integer,
intent(in) ::
m
157 real,
dimension(M),
intent(in) :: zl
158 real,
dimension(M),
intent(in) :: zu
159 logical,
optional,
intent(in) :: log_units
161 real,
dimension(Npoints,Ncolumns,M),
intent(out) ::
r
168 real,
dimension(Npoints) :: ws,sumwyp
169 real,
dimension(Npoints,Nlevels) :: xl,xu
170 real,
dimension(Npoints,Nlevels) :: w
171 real,
dimension(Npoints,Ncolumns,Nlevels) :: yp
174 if (present(log_units)) lunits=log_units
179 xu(:,1:nlevels-1) = xl(:,2:nlevels)
180 xu(:,nlevels) = zfull(:,nlevels) + zfull(:,nlevels) - zhalf(:,nlevels)
195 if ((xl(
i,
j) < zl(
k)).and.(xu(
i,
j) > zl(
k)).and.(xu(
i,
j) <= zu(
k)))
then
198 w(
i,
j) = xu(
i,
j) - zl(
k)
199 else if ((xl(
i,
j) >= zl(
k)).and.(xu(
i,
j) <= zu(
k)))
then
202 w(
i,
j) = xu(
i,
j) - xl(
i,
j)
203 else if ((xl(
i,
j) >= zl(
k)).and.(xl(
i,
j) < zu(
k)).and.(xu(
i,
j) >= zu(
k)))
then
206 w(
i,
j) = zu(
k) - xl(
i,
j)
207 else if ((xl(
i,
j) <= zl(
k)).and.(xu(
i,
j) >= zu(
k)))
then
210 w(
i,
j) = zu(
k) - zl(
k)
220 if (zu(
k) > zhalf(
i,1))
then
221 ws(
i) = ws(
i) + w(
i,
l)
222 sumwyp(
i) = sumwyp(
i) + w(
i,
l)*yp(
i,
j,
l)
227 if (zu(
k) > zhalf(
i,1))
then
228 if (ws(
i) > 0.0)
r(
i,
j,
k) = sumwyp(
i)/ws(
i)
238 if (zu(
k) > zhalf(
i,1))
then
239 if (
r(
i,
j,
k) <= 0.0)
then