Merge remote-tracking branch 'origin/release-v4.6.1'
[WRF.git] / var / da / da_ssmi / da_epsalt_tl.inc
blob1fb47d6c791ecfb12d5212d02773d5b8260ef20f
1 subroutine da_epsalt_tl(f,t,ssw,epsr,epsi,TGL_t, TGL_epsr, TGL_epsi)
3    !-----------------------------------------------------------------------
4    ! Purpose: returns the complex dielectric constant of sea water, using the
5    !  model of Klein and Swift (1977)
6    !
7    ! Input   f = frequency (GHz)
8    !         t = temperature (C)
9    !         ssw = salinity (permil) (if ssw < 0, ssw = 32.54)
10    ! Output  epsr,epsi  = real and imaginary parts of dielectric constant
11    ! Input  : TGL_t      (ssw is treated as a constant now)
12    ! Output : TGL_epsr, TGL_epsi, epsr, epsi
13    !-----------------------------------------------------------------------
15    implicit none
17    real, intent(in)    :: f, t, TGL_t
18    real, intent(inout) :: ssw
19    real, intent(out)   :: TGL_epsr, TGL_epsi, epsr, epsi
21    complex :: cdum1,cdum2,cdum3
22    complex :: TGL_cdum1,TGL_cdum2,TGL_cdum3
23    real    :: ssw2,ssw3,t2,t3,es,a,esnew,tau,b,sig,taunew
24    real    :: delt,delt2,beta,signew,om
25    real    :: TGL_t2,TGL_t3,TGL_es,TGL_a,TGL_esnew,TGL_tau,TGL_b,TGL_taunew
26    real    :: TGL_delt,TGL_delt2,TGL_beta,TGL_signew
28    if (trace_use) call da_trace_entry("da_epsalt_tl")
30    if (ssw .lt. 0.0) ssw = 32.54
31    ssw2       = ssw*ssw
32    ssw3       = ssw2*ssw
33        t2     = t*t
34    TGL_t2     = 2.0*t*TGL_t
35        t3     = t2*t
36    TGL_t3     = TGL_t2*t + t2*TGL_t
37        es     = 87.134 - 1.949e-1*t     - 1.276e-2*t2     + 2.491e-4*t3
38    TGL_es     =        - 1.949e-1*TGL_t - 1.276e-2*TGL_t2 + 2.491e-4*TGL_t3
40        a      = 1.0 + 1.613e-5*ssw*t - 3.656e-3*ssw + 3.21e-5*ssw2 - &
41                 4.232e-7*ssw3
42    TGL_a      = 1.613e-5*ssw*TGL_t 
43        esnew  = es*a
44    TGL_esnew  = TGL_es*a + es*TGL_a
46        tau    = 1.768e-11 - 6.086e-13*t     + 1.104e-14*t2     - 8.111e-17*t3
47    TGL_tau    =           - 6.086e-13*TGL_t + 1.104e-14*TGL_t2 - 8.111e-17*TGL_t3
48        b      = 1.0 + 2.282e-5*ssw*t - 7.638e-4*ssw - 7.760e-6*ssw2 + &
49                 1.105e-8*ssw3
50    TGL_b      = 2.282e-5*ssw*TGL_t 
51        taunew = tau*b
52    TGL_taunew = TGL_tau*b + tau*TGL_b
54    sig        = ssw*(0.182521 - 1.46192e-3*ssw + 2.09324e-5*ssw2 - &
55                 1.28205e-7*ssw3)
56        delt   = 25.0 - t
57    TGL_delt   =      - TGL_t
58        delt2  = delt*delt
59    TGL_delt2  = 2.0*delt*TGL_delt
60        beta   =   2.033e-2 + 1.266e-4*delt      + 2.464e-6*delt2       &
61                 - ssw*(1.849e-5 - 2.551e-7*delt + 2.551e-8*delt2)
62    TGL_beta   =              1.266e-4*TGL_delt  + 2.464e-6*TGL_delt2   &
63                 - ssw*(-2.551e-7*TGL_delt + 2.551e-8*TGL_delt2)
64    signew     =   sig*exp(-beta*delt)
65    TGL_signew = - signew*(TGL_beta*delt+beta*TGL_delt)
67    om         = 2.0e9*pi*f
68        cdum1  = cmplx(0.0,om*taunew)
69    TGL_cdum1  = cmplx(0.0,om*TGL_taunew)
70        cdum2  = cmplx(0.0,signew/(om*8.854e-12))
71    TGL_cdum2  = cmplx(0.0,TGL_signew/(om*8.854e-12))
73    cdum3      = 4.9 + (esnew-4.9)/(1.0 + cdum1) - cdum2
74    TGL_cdum3  =  TGL_esnew/(1.0 + cdum1)  &
75                - TGL_cdum1*(esnew-4.9)/((1.0 + cdum1)*(1.0 + cdum1))  &
76                - TGL_cdum2
77    epsr       = real(cdum3)
78    TGL_epsr   = real(TGL_cdum3)
79    epsi       = -aimag(cdum3)
80    TGL_epsi   = -aimag(TGL_cdum3)
82    if (trace_use) call da_trace_exit("da_epsalt_tl")
84 end subroutine da_epsalt_tl