9 use fckit_configuration_module,
only: fckit_configuration
38 type(fckit_configuration),
intent(in) :: f_conf
49 real(kind_real),
intent(inout) :: hofx(:)
50 type(c_ptr),
value,
intent(in) :: obss
52 character(len=*),
parameter :: myname_=
"ufo_gnssro_ref_simobs"
53 character(max_string) :: err_msg
58 real(kind_real) :: refr1, refr2,refr3
59 real(kind_real),
allocatable :: obsZ(:), obsLat(:)
60 real(kind_real) :: obsH, gesT,gesQ, gesTv, gesTv0,gesP
63 if (geovals%nlocs /=
size(hofx))
then
64 write(err_msg,*) myname_,
' error: nlocs inconsistent!'
65 call abor1_ftn(err_msg)
73 nlocs = obsspace_get_nlocs(obss)
76 allocate(obslat(nlocs))
78 call obsspace_get_db(obss,
"MetaData",
"altitude", obsz)
79 call obsspace_get_db(obss,
"MetaData",
"latitude", obslat)
85 do iobs = 1, geovals%nlocs
96 gestv = gest*(one + (rv_over_rd-one)* (gesq/(1-gesq) ) )
97 gestv0 = t%vals(wi,iobs)*(one + (rv_over_rd-one) * (q%vals(wi,iobs)/(1-q%vals(wi,iobs)) ))
98 gesp = prs%vals(wi,iobs)/exp(two*grav*(obsh-gph%vals(wi,iobs))/(rd*(gestv+gestv0)))
100 refr2 =
n_b*gesp*gesq/ ( gest**2 * (rd_over_rv+(1-rd_over_rv)*gesq) )
101 refr3 =
n_c*gesp*gesq/ ( gest * (rd_over_rv+(1-rd_over_rv)*gesq) )
102 hofx(iobs) = refr1 + refr2 + refr3
subroutine, public gnssro_conf_setup(roconf, f_conf)
subroutine, public gnssro_ref_constants(use_compress)
real(kind_real), public n_a
real(kind_real), public n_b
real(kind_real), public n_c
type(registry_t), public ufo_geovals_registry
Linked list interface - defines registry_t type.
subroutine, public ufo_geovals_get_var(self, varname, geoval)
Fortran module to handle gnssro refractivity observations.
subroutine ufo_gnssro_ref_setup(self, f_conf)
subroutine ufo_gnssro_ref_simobs(self, geovals, hofx, obss)
character(len=maxvarlen), parameter, public var_prs
character(len=maxvarlen), parameter, public var_q
character(len=maxvarlen), parameter, public var_z
character(len=maxvarlen), parameter, public var_ts
Fortran module to perform linear interpolation.
subroutine vert_interp_weights(nlev, obl, vec, wi, wf)
subroutine vert_interp_apply(nlev, fvec, f, wi, wf)
type to hold interpolated field for one variable, one observation
type to hold interpolated fields required by the obs operators
Fortran derived type for gnssro trajectory.