14 use oops_variables_mod
20 use fckit_log_module,
only: fckit_log
23 use missing_values_mod
43 use fckit_configuration_module,
only: fckit_configuration
46 type(fckit_configuration),
intent(in) :: f_conf
67 real(kind_real),
intent(inout) :: hofx(:)
68 type(c_ptr),
value,
intent(in) :: obss
83 integer,
parameter :: max_string = 800
84 character(max_string) :: err_msg
85 character(max_string) :: message
86 character(len=*),
parameter :: myname_ =
"ufo_sattcwv_simobs"
89 if (geovals%nlocs /=
size(hofx))
then
90 write(err_msg,*) myname_,
' error: nlocs ',geovals%nlocs,
' inconsistent with HofX size',
size(hofx)
91 call abor1_ftn(err_msg)
100 IF (prs % nval /= q % nval + 1)
THEN
101 write(err_msg,*) myname_ //
':' // &
102 ' Data must be on a staggered grid nlevp, nlevq = ',prs%nval,q%nval
103 call fckit_log % warning(err_msg)
104 write(err_msg,*) myname_ //
':' //
' error: number of levels inconsistent!'
105 call abor1_ftn(err_msg)
112 if((prs%vals(1,1)-prs%vals(2,1)) >
zero )ascend = .true.
128 nlocs = obsspace_get_nlocs(obss)
130 obs_loop:
do iobs = 1, nlocs
138 psfc % vals(1,iobs), &
139 prs % vals(:,iobs), &
145 write(err_msg,*)
"TRACE: ufo_sattcwv_simobs: completed"
146 call fckit_log%info(err_msg)
169 INTEGER,
INTENT(IN) :: nlevp
170 INTEGER,
INTENT(IN) :: ilev1
171 INTEGER,
INTENT(IN) :: ilev2
172 INTEGER,
INTENT(IN) :: inc
173 INTEGER,
INTENT(IN) :: ibot
174 INTEGER,
INTENT(IN) :: isfc
175 REAL(kind_real),
INTENT(IN) :: psfc
176 REAL(kind_real),
INTENT(IN) :: prs(1:nlevP)
177 REAL(kind_real),
INTENT(IN) :: q(1:nlevP-1)
178 REAL(kind_real),
INTENT(INOUT) :: Model_SatTCWV
182 integer,
parameter :: max_string = 800
183 character(len=*),
parameter :: myname_ =
"SatTCWV_ForwardModel"
187 character(max_string) :: err_msg
188 character(max_string) :: message
189 REAL(kind_real) :: PDiff
190 REAL(kind_real) :: GK
204 DO i = ilev1, ilev2, inc
205 pdiff = prs(i) - prs(i+1)
207 IF (i == isfc)pdiff = psfc - prs(ibot)
209 model_sattcwv = model_sattcwv + gk * q(i) * pdiff
real(kind_real), parameter, public one
real(kind_real), parameter, public grav
real(kind_real), parameter, public zero
real(kind_real), parameter, public half
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 for satellite precipitable water observation operator.
subroutine sattcwv_forwardmodel(nlevP, ilev1, ilev2, inc, ibot, isfc, psfc, prs, q, Model_SatTCWV)
subroutine destructor(self)
subroutine ufo_sattcwv_setup(self, f_conf)
subroutine ufo_sattcwv_simobs(self, geovals, hofx, obss)
character(len=maxvarlen), parameter, public var_prsi
character(len=maxvarlen), parameter, public var_q
character(len=maxvarlen), parameter, public var_ps
type to hold interpolated field for one variable, one observation
type to hold interpolated fields required by the obs operators
Fortran derived type for sattcwv trajectory.