4 use fckit_log_module,
only : fckit_log
5 use kinds,
only : kind_real
21 type(c_ptr),
value,
intent(in) :: obss
22 integer,
intent(in) :: nlocs_ext
23 real(c_float),
dimension(nlocs_ext),
intent(inout) :: lons, lats
25 character(len=*),
parameter :: myname =
"ufo_gnssro_2d_locs_init"
26 integer,
parameter :: max_string = 800
27 character(max_string) :: err_msg
30 real(kind_real),
dimension(:),
allocatable :: lon, lat
33 real(kind_real),
dimension(:),
allocatable :: obsazim
34 real(kind_real),
dimension(self%roconf%n_horiz) :: plat_2d, plon_2d
35 integer :: kerror, n_horiz
36 real(kind_real) :: dtheta
38 dtheta = self%roconf%dtheta
39 n_horiz = self%roconf%n_horiz
40 nlocs = nlocs_ext / n_horiz
42 allocate(lon(nlocs), lat(nlocs))
43 call obsspace_get_db(obss,
"MetaData",
"longitude", lon)
44 call obsspace_get_db(obss,
"MetaData",
"latitude", lat)
46 allocate(obsazim(nlocs))
47 call obsspace_get_db(obss,
"MetaData",
"sensor_azimuth_angle", obsazim)
51 call ropp_fm_2d_plane(lat(i),lon(i),obsazim(i),dtheta,n_horiz,plat_2d,plon_2d,kerror)
52 lons( (i-1)*n_horiz+1 : i*n_horiz) = plon_2d
53 lats( (i-1)*n_horiz+1 : i*n_horiz) = plat_2d
55 self%obsLat2d( (i-1)*n_horiz+1 : i*n_horiz) = lats( (i-1)*n_horiz+1 : i*n_horiz)
56 self%obsLon2d( (i-1)*n_horiz+1 : i*n_horiz) = lons( (i-1)*n_horiz+1 : i*n_horiz)
59 deallocate(lon, lat, obsazim)
subroutine, public ufo_gnssro_2d_locs_init(self, obss, nlocs_ext, lons, lats)
Fortran module for gnssro bending angle ropp2d forward operator following the ROPP (2018 Aug) impleme...
Fortran derived type for gnssro trajectory.