8 use fckit_log_module,
only: fckit_log
10 use missing_values_mod
24 obsLat, obsGeoid, obsLocR, obsImpP, &
26 nlev, nlevExt, nlevAdd, nlevCheck, &
27 radius,ref,refIndex,refXrad, &
30 character(len=*),
parameter :: myname =
"ufo_gnssro_bndnbam_simobs_single"
32 real(kind_real),
intent(out) :: bendingangle
34 integer,
intent(in) :: nlev
35 integer,
intent(in) :: nlevext
36 integer,
intent(in) :: nlevadd
37 integer,
intent(in) :: nlevcheck
38 integer,
intent(in) :: ngrd
39 real(kind_real),
intent(in) :: obslat, obsgeoid, obslocr, obsimpp
40 real(kind_real),
intent(in) :: grids(ngrd)
42 real(kind_real),
intent(in) :: radius(nlev)
43 real(kind_real),
intent(in) :: refindex(nlev)
44 real(kind_real),
intent(inout) :: ref(nlevext)
45 real(kind_real),
intent(inout) :: refxrad(0:nlevext+1)
46 real(kind_real) :: lagconst(3,nlevext)
48 real(kind_real) :: sindx
49 real(kind_real) :: obsimph
50 integer :: k, igrd, indx
51 real(kind_real) :: d_refxrad
52 real(kind_real) :: w4(4), dw4(4)
53 real(kind_real) :: bndintgd
54 real(kind_real) :: rnlevext
55 real(kind_real) :: derivref_s(ngrd)
56 real(kind_real) :: refxrad_s(ngrd)
60 d_refxrad = refxrad(nlev) - refxrad(nlev-1)
62 refxrad(nlev+k)=refxrad(nlev)+ k*d_refxrad
63 ref(nlev+k)=ref(nlev+k-1)**2/ref(nlev+k-2)
67 refxrad(nlevext+1)=refxrad(nlevext-2)
74 grids_loop:
do igrd =1,ngrd
75 refxrad_s(igrd)=sqrt(grids(igrd)**2 + obsimpp**2)
77 rnlevext = float(nlevext)
79 if (sindx > zero .and. sindx < rnlevext)
then
83 lagconst(:,indx),lagconst(:,indx+1), &
86 w4(4)=w4(4)+w4(1); w4(1:3)=w4(2:4);w4(4)=zero
87 dw4(4)=dw4(4)+dw4(1);dw4(1:3)=dw4(2:4);dw4(4)=zero
90 if (indx==nlevext-1)
then
91 w4(1)=w4(1)+w4(4); w4(2:4)=w4(1:3);w4(1)=zero
92 dw4(1)=dw4(1)+dw4(4); dw4(2:4)=dw4(1:3);dw4(1)=zero
96 derivref_s(igrd)=dot_product(dw4,ref(indx-1:indx+2))
97 derivref_s(igrd)=max(zero,abs(derivref_s(igrd)))
105 bendingangle =
ds*derivref_s(1)/refxrad_s(1)
107 bndintgd =
ds*derivref_s(igrd)/refxrad_s(igrd)
108 bendingangle = bendingangle + two*bndintgd
110 bendingangle=
r1em6 * obsimpp * bendingangle
real(kind_real), parameter, public ds
real(kind_real), parameter, public r1em6
subroutine, public get_coordinate_value(fin, fout, x, nx, flag)
Fortran module to prepare for Lagrange polynomial interpolation. based on GSI: lagmod....
subroutine, public lag_interp_const(q, x, n)
subroutine, public lag_interp_smthweights(x, xt, aq, bq, w, dw, n)
Fortran module of Gnssro NBAM (NCEP's Bending Angle Method) operator.
subroutine, public ufo_gnssro_bndnbam_simobs_single(obsLat, obsGeoid, obsLocR, obsImpP, grids, ngrd, nlev, nlevExt, nlevAdd, nlevCheck, radius, ref, refIndex, refXrad, bendingAngle)
Fortran module to perform linear interpolation.