11 use fckit_configuration_module,
only: fckit_configuration
20 use missing_values_mod
21 use fckit_log_module,
only : fckit_log
23 integer,
parameter :: max_string=800
28 integer :: nval, nlocs
29 real(kind_real),
allocatable :: prs(:,:), t(:,:), q(:,:), gph(:,:), gph_sfc(:,:)
33 real(kind_real),
allocatable :: obslon2d(:), obslat2d(:)
48 type(fckit_configuration),
intent(in) :: f_conf
60 type(c_ptr),
value,
intent(in) :: obss
61 character(len=*),
parameter :: myname_=
"ufo_gnssro_bndropp2d_tlad_settraj"
62 character(max_string) :: err_msg
63 type(
ufo_geoval),
pointer :: t, q, prs, gph, gph_sfc
66 write(err_msg,*)
"TRACE: ufo_gnssro_bndropp2d_tlad_settraj: begin"
67 call fckit_log%info(err_msg)
79 self%nlocs = obsspace_get_nlocs(obss)
81 allocate(self%t(self%nval,self%nlocs))
82 allocate(self%q(self%nval,self%nlocs))
83 allocate(self%prs(self%nval,self%nlocs))
84 allocate(self%gph(self%nval,self%nlocs))
103 real(kind_real),
intent(inout) :: hofx(:)
104 type(c_ptr),
value,
intent(in) :: obss
106 integer :: iobs,nlev, nlocs, nvprof
108 character(len=*),
parameter :: myname_=
"ufo_gnssro_bndropp2d_simobs_tl"
109 character(max_string) :: err_msg
113 real(kind_real),
allocatable :: gph_d_zero(:)
114 real(kind_real) :: gph_sfc_d_zero
115 real(kind_real),
allocatable :: obslat(:), obslon(:), obsimpp(:), obslocr(:), obsgeoid(:)
119 n_horiz = self%roconf%n_horiz
121 write(err_msg,*)
"TRACE: ufo_gnssro_bndropp2d_simobs_tl_stub: begin"
122 call fckit_log%info(err_msg)
125 if (.not. self%ltraj)
then
126 write(err_msg,*) myname_,
' trajectory wasnt set!'
127 call abor1_ftn(err_msg)
131 if (geovals%nlocs /=
size(hofx)*n_horiz)
then
132 write(err_msg,*) myname_,
' error: nlocs inconsistent!'
133 call abor1_ftn(err_msg)
144 allocate(gph_d_zero(nlev))
149 allocate(obslon(nlocs))
150 allocate(obslat(nlocs))
151 allocate(obsimpp(nlocs))
152 allocate(obslocr(nlocs))
153 allocate(obsgeoid(nlocs))
154 call obsspace_get_db(obss,
"MetaData",
"longitude", obslon)
155 call obsspace_get_db(obss,
"MetaData",
"latitude", obslat)
156 call obsspace_get_db(obss,
"MetaData",
"impact_parameter", obsimpp)
157 call obsspace_get_db(obss,
"MetaData",
"earth_radius_of_curvature", obslocr)
158 call obsspace_get_db(obss,
"MetaData",
"geoid_height_above_reference_ellipsoid", obsgeoid)
169 write(err_msg,*)
"TRACE: ufo_gnssro_bndropp2d_simobs_tl_stub: complete"
170 call fckit_log%info(err_msg)
183 real(kind_real),
intent(in) :: hofx(:)
184 type(c_ptr),
value,
intent(in) :: obss
189 real(kind_real),
parameter :: gph_sfc_d_zero = 0.0
190 real(kind_real),
allocatable :: gph_d_zero(:)
192 real(kind_real),
allocatable :: obslat(:), obslon(:), obsimpp(:), obslocr(:), obsgeoid(:)
193 integer :: iobs,nlev, nlocs, nvprof
195 character(len=*),
parameter :: myname_=
"ufo_gnssro_bndropp2d_simobs_ad"
196 character(max_string) :: err_msg
199 write(err_msg,*)
"TRACE: ufo_gnssro_bndropp2d_simobs_ad_stub: begin"
200 call fckit_log%info(err_msg)
203 if (.not. self%ltraj)
then
204 write(err_msg,*) myname_,
' trajectory wasnt set!'
205 call abor1_ftn(err_msg)
208 n_horiz = self%roconf%n_horiz
211 if (geovals%nlocs /=
size(hofx)*n_horiz)
then
212 write(err_msg,*) myname_,
' error: nlocs inconsistent!'
213 call abor1_ftn(err_msg)
222 if (.not.
allocated(t_d%vals))
then
223 t_d%nlocs = self%nlocs
225 allocate(t_d%vals(t_d%nval,t_d%nlocs))
226 t_d%vals = 0.0_kind_real
229 if (.not.
allocated(prs_d%vals))
then
230 prs_d%nlocs = self%nlocs
231 prs_d%nval = self%nval
232 allocate(prs_d%vals(prs_d%nval,prs_d%nlocs))
233 prs_d%vals = 0.0_kind_real
236 if (.not.
allocated(q_d%vals))
then
237 q_d%nlocs = self%nlocs
239 allocate(q_d%vals(q_d%nval,q_d%nlocs))
240 q_d%vals = 0.0_kind_real
243 if (.not. geovals%linit ) geovals%linit=.true.
248 allocate(gph_d_zero(nlev))
252 allocate(obslon(nlocs))
253 allocate(obslat(nlocs))
254 allocate(obsimpp(nlocs))
255 allocate(obslocr(nlocs))
256 allocate(obsgeoid(nlocs))
258 call obsspace_get_db(obss,
"MetaData",
"longitude", obslon)
259 call obsspace_get_db(obss,
"MetaData",
"latitude", obslat)
260 call obsspace_get_db(obss,
"MetaData",
"impact_parameter", obsimpp)
261 call obsspace_get_db(obss,
"MetaData",
"earth_radius_of_curvature", obslocr)
262 call obsspace_get_db(obss,
"MetaData",
"geoid_height_above_reference_ellipsoid", obsgeoid)
272 deallocate(gph_d_zero)
274 write(err_msg,*)
"TRACE: ufo_gnssro_bndropp2d_simobs_ad_stub: complete"
275 call fckit_log%info(err_msg)
287 character(len=*),
parameter :: myname_=
"ufo_gnssro_bndropp_tlad_delete"
290 if (
allocated(self%prs))
deallocate(self%prs)
291 if (
allocated(self%t))
deallocate(self%t)
292 if (
allocated(self%q))
deallocate(self%q)
293 if (
allocated(self%gph))
deallocate(self%gph)