<HTML> <BODY BGCOLOR=#ccccdd LINK=#0000aa VLINK=#0000ff ALINK=#ff0000 ><BASE TARGET="bottom_target"><PRE>
<A NAME='DA_FIND_LAYER_TL'><A href='../../html_code/physics/da_find_layer_tl.inc.html#DA_FIND_LAYER_TL' TARGET='top_target'><IMG SRC="../../gif/bar_red.gif" border=0></A>

subroutine da_find_layer_tl(layer,tv,pre,pre_ma,tv_ma,ks,ke,TGL_tv,TGL_pre_ma,TGL_tv_ma) 2,2

   !-----------------------------------------------------------------------
   ! Purpose: tangent-linear routine for da_find_layer
   !-----------------------------------------------------------------------

   implicit none

   integer, intent(in)    :: ks, ke
   integer, intent(out)   :: layer
   real,    intent(in)    :: tv_ma(ks-1:ke+1)
   real,    intent(inout) :: pre_ma(ks-1:ke+1)
   real,    intent(in)    :: TGL_tv_ma(ks-1:ke+1)
   real,    intent(inout) :: TGL_pre_ma(ks-1:ke+1)
   real,    intent(in)    :: pre
   real,    intent(out)   :: tv
   real,    intent(out)   :: TGL_tv

   real    :: TGL_alpha
   integer :: k
   real    :: alpha, coef1, coef2

   if (trace_use_frequent) call da_trace_entry("da_find_layer_tl")

   ! coef1, coef2 are temporarily used in this routine

   if (pre &gt;= pre_ma(ks)) then
      ! Below model bottom
      layer = ks
      coef1=log(pre/pre_ma(ks+1))/(pre_ma(ks)*     &amp;
            (log(pre_ma(ks)/pre_ma(ks+1)))**2)
      coef2=log(pre_ma(ks)/pre)/(pre_ma(ks+1)*     &amp;
            (log(pre_ma(ks)/pre_ma(ks+1)))**2)
      TGL_alpha = coef1 * TGL_pre_ma(ks) + coef2 * TGL_pre_ma(ks+1)
      alpha = log(pre_ma(ks)/pre)/log(pre_ma(ks)/pre_ma(ks+1))

      TGL_tv = (1.0-alpha)*TGL_tv_ma(ks) +               &amp;
               (tv_ma(ks+1)-tv_ma(ks))*TGL_alpha +     &amp;
               alpha*TGL_tv_ma(ks+1)
      TGL_pre_ma(ks-1) = 0.0
      tv = tv_ma(ks) * (1.0-alpha) + tv_ma(ks+1) * alpha
      pre_ma(ks-1) = pre
   else if (pre &lt;= pre_ma(ke)) then
      ! Above model top
      layer = ke+1
      coef1=log(pre/pre_ma(ke))/(pre_ma(ke-1)*           &amp;
            (log(pre_ma(ke-1)/pre_ma(ke)))**2)
      coef2=log(pre_ma(ke-1)/pre)/(pre_ma(ke)*           &amp;
            (log(pre_ma(ke-1)/pre_ma(ke)))**2)
      TGL_alpha = coef1 * TGL_pre_ma(ke-1) + coef2 * TGL_pre_ma(ke)
      alpha = log(pre_ma(ke-1)/pre)/log(pre_ma(ke-1)/pre_ma(ke))

      TGL_tv = (1.0-alpha)*TGL_tv_ma(ke-1) +                 &amp;
               (tv_ma(ke)-tv_ma(ke-1))*TGL_alpha +           &amp;
               alpha*TGL_tv_ma(ke)
      TGL_pre_ma(ke+1) = 0.0
      tv = tv_ma(ke-1) * (1.0-alpha) + tv_ma(ke) * alpha
      pre_ma(ke+1) = pre
   else
      ! Between model layers
      do k=ks,ke-1
         if (pre&gt;=pre_ma(k+1) .and. pre&lt;pre_ma(k)) then
            layer = k+1
            coef1=log(pre/pre_ma(k+1))/(pre_ma(k)*   &amp;
                  (log(pre_ma(k)/pre_ma(k+1)))**2)
            coef2=log(pre_ma(k)/pre)/(pre_ma(k+1)*   &amp;
                  (log(pre_ma(k)/pre_ma(k+1)))**2)
            TGL_alpha = coef1 * TGL_pre_ma(k) + coef2 * TGL_pre_ma(k+1)
            alpha = log(pre_ma(k)/pre)/log(pre_ma(k)/pre_ma(k+1))
            TGL_tv = (1.0-alpha)*TGL_tv_ma(k) +                 &amp;
                     (tv_ma(k+1)-tv_ma(k))*TGL_alpha +         &amp;
                      alpha*TGL_tv_ma(k+1)
            tv = tv_ma(k) * (1.0-alpha) + tv_ma(k+1) * alpha
            exit
         end if
      end do
   end if

   if (trace_use_frequent) call da_trace_exit("da_find_layer_tl")
 
end subroutine da_find_layer_tl