da_transform_xtogpsref_lin.inc
References to this file elsewhere.
1 subroutine da_transform_xtogpsref_lin(xa, xb, xp)
2
3 !---------------------------------------------------------------------
4 ! Purpose: TBD
5 ! input: xa%q, xa%p, xa%t, xb%q, xb%p, xb%t, and xp
6 ! output: xa%ref
7 !---------------------------------------------------------------------
8
9 implicit none
10
11 type (x_type), intent(inout) :: xa ! gridded analysis increment.
12 type (xb_type), intent(in) :: xb ! first guess state.
13 type (xpose_type), intent(in) :: xp ! domain decomposition vars.
14
15 integer :: i, j, k, is, ie, js, je, ks, ke
16 real :: partone, parttwo, dividnd
17 real :: partone9,parttwo9,dividnd9
18
19 call da_trace_entry("da_transform_xtogpsref_lin")
20
21 ! 1.0 To get the domain range
22
23 is = xp%its; ie = xp%ite
24 js = xp%jts; je = xp%jte
25 ks = xp%kts; ke = xp%kte
26
27 ! 2.0 Loop for a tile
28
29 do k = ks, ke
30 do j = js, je
31 do i = is, ie
32
33 !-----calculate refractivity
34 ! Note: p in Pascal, q is the specific humidity
35
36 ! 2.1 Part one: hydrostatic part
37
38 partone = 0.776*xa%p(i,j,k)/xb%t(i,j,k) &
39 - 0.776*xb%p(i,j,k)*xa%t (i,j,k)/(xb%t(i,j,k)*xb%t(i,j,k))
40 partone9 = 0.776*xb%p(i,j,k)/xb%t(i,j,k)
41
42 ! 2.2 Part two considering the moisture:
43
44 dividnd = xa%t (i,j,k)*(0.622+0.378*xb%q(i,j,k)) &
45 + xb%t(i,j,k)* 0.378*xa%q(i,j,k)
46 dividnd9 = xb%t(i,j,k)*(0.622+0.378*xb%q(i,j,k))
47
48 parttwo = coeff*xa%q(i,j,k)/dividnd9 &
49 - coeff*xb%q(i,j,k)*dividnd /(dividnd9*dividnd9)
50 parttwo9 = 1.0+coeff*xb%q(i,j,k)/dividnd9
51
52 ! 2.3 Total refractivity
53
54 xa%ref(i,j,k)= partone9 * parttwo &
55 + partone * parttwo9
56 end do
57 end do
58 end do
59
60 call da_trace_exit("da_transform_xtogpsref_lin")
61
62 end subroutine da_transform_xtogpsref_lin
63
64