!-------------------------------------- LICENCE BEGIN ------------------------------------
!Environment Canada - Atmospheric Science and Technology License/Disclaimer, 
!                     version 3; Last Modified: May 7, 2008.
!This is free but copyrighted software; you can use/redistribute/modify it under the terms 
!of the Environment Canada - Atmospheric Science and Technology License/Disclaimer 
!version 3 or (at your option) any later version that should be found at: 
!http://collaboration.cmc.ec.gc.ca/science/rpn.comm/license.html 
!
!This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; 
!without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 
!See the above mentioned License/Disclaimer for more details.
!You should have received a copy of the License/Disclaimer along with this software; 
!if not, you can write to: EC-RPN COMM Group, 2121 TransCanada, suite 500, Dorval (Quebec), 
!CANADA, H9P 1J3; or send e-mail to service.rpn@ec.gc.ca
!-------------------------------------- LICENCE END --------------------------------------
***s/r adw_tricub_ad - ADJ of adw_tricub_tl 
*
#include "model_macros_f.h"
*

      subroutine adw_tricub_ad ( F_out,  F_in,  F_inzz,   1
     %                           F_capx, 
     %                           F_capy, 
     %                           F_capz, F_cz,
     %                                   F_inm, F_inzzm,F_nm,
     %                           F_capxm,F_xggm,F_xddm,
     %                           F_capym,F_yggm,F_yddm,
     %                           F_capzm,F_czm, F_num, F_mono_L,i0,in,j0,jn,kn)
*
      implicit none
*
      logical F_mono_L
*
      integer F_num,i0,in,j0,jn,kn
*
      real F_in(*), F_inzz(*)
*
      real F_out (F_num),
     %     F_capx(F_num), F_capy(F_num), F_capz(F_num), F_cz  (F_num)
*
      integer F_nm(F_num)
*
      real F_inm(*), F_inzzm(*)
*
      real F_capxm(F_num), F_capym(F_num), F_capzm(F_num), F_czm  (F_num),
     %     F_xggm (F_num), F_xddm (F_num), F_yggm (F_num), F_yddm (F_num)
*
*author
*     monique tanguay
*
*revision
* v2_31 - Tanguay M.        - initial MPI version
* v3_00 - Tanguay M.        - restore  vectorization in adjoint of semi-Lag.
* v3_02 - Tanguay M.        - restore tracers monotone if V4dg_conf.ne.0
* v3_03 - Tanguay M.        - Adjoint Lam configuration 
* v3_11 - Tanguay M.        - Remove restoration of vectorization in adjoint of semi-Lag
* v3_11 - Lee V.            - OpenMP for ADW_MAIN_3_INT_AD
*
*language
*     fortran 77
*
*object
*      Do the adjoint of tri-cubic semi-Lagrangian interpolation
*
*ADJ of
*arguments
*______________________________________________________________________
*              |                                                 |     |
* NAME         | DESCRIPTION                                     | I/O |
*--------------|-------------------------------------------------|-----|
*              |                                                 |     |
* F_out        | result of interpolation                         |  o  |
* F_in         | field to interpolate                            |  i  |
* F_inzz       | precomputed 2nd vertical derivatives            |  i  |
*              |                                                 |     |
* F_n          | positions in the 3D volume of interpolation     |  i  |
*              | boxes                                           |     |
*              |                                                 |     |
* F_capx       | \                                               |  i  |
* F_xgg        |   precomputed displacements and interpolation   |  i  |
* F_xdd        | / terms along the x-direction                   |  i  |
*              |                                                 |     |
* F_capy       | \                                               |  i  |
* F_ygg        |   precomputed displacements and interpolation   |  i  |
* F_ydd        | / terms along the y-direction                   |  i  |
*              |                                                 |     |
* F_capz       | \ precomputed displacements and interpolation   |  i  |
* F_cz         | / terms along the z-direction                   |  i  |
*              |                                                 |     |
* F_num        | number of points to interpolate                 |  i  |
*              |                                                 |     |
* F_mono_L     | switch: .true. : monotonic interpolation        |  i  |
*--------------|-------------------------------------------------|-----|
*
*implicits
#include "glb_ld.cdk"
#include "adw.cdk"
************************************************************************
      integer n, nijag, i, j, k,nij
*
      real prmin , prmax ,
     %     prmin0, prmax0,
     %     prmin1, prmax1, 
     %     prmin2, prmax2, work
*
      integer o1, o2, o3, o4
*
      real*8  xx_8, xm_8, p1_8, p2_8, p3_8, p4_8, t1_8, t2_8
*
      real*8  a1_8, a2_8, a3_8, a4_8, b1_8, b2_8, b3_8, b4_8,
     %        c1_8, c2_8, c3_8, c4_8, d1_8, d2_8, d3_8, d4_8,
     %        a1_y_8, b1_y_8, c1_y_8, d1_y_8
*
      real prminm,  prmaxm,  prmin0m, prmax0m, 
     %     prmin1m, prmax1m, prmin2m, prmax2m, work_m
*
      real foutm
*
      real*8  ggm_8, ddm_8, xxm_8, xmm_8,  p1m_8,  p2m_8,  p3m_8,  p4m_8,
     %        t1m_8, t2m_8, t3m_8, p10m_8, p20m_8, p30m_8, p31m_8, p40m_8
*
      real*8  a1m_8, a2m_8, a3m_8, a4m_8, b1m_8, b2m_8, b3m_8, b4m_8,
     %        c1m_8, c2m_8, c3m_8, c4m_8, d1m_8, d2m_8, d3m_8, d4m_8,
     %        a1m_y_8, b1m_y_8, c1m_y_8, d1m_y_8
*
      real*8, parameter :: ZERO_8 = 0.0
*     ______________________________________________________
*
      nij   = l_ni*l_nj
      nijag = Adw_nit * Adw_njt
*
      if ( F_mono_L ) then
*
      do 100 k=1,kn
      do  90 j=j0,jn
      do  80 i=i0,in
*
      n = (k-1)*nij + ((j-1)*l_ni) + i
*
*     ZERO adjoint variables
*     ----------------------
      prmin  = ZERO_8
      prmax  = ZERO_8
      prmin0 = ZERO_8
      prmax0 = ZERO_8
      prmin1 = ZERO_8
      prmax1 = ZERO_8
      prmin2 = ZERO_8
      prmax2 = ZERO_8
      work   = ZERO_8
*
*     ------------------
*     TRAJECTORY (START)
*     ------------------
***********************************************************************
*
***********************************************************************
*     x interpolation
***********************************************************************
      xxm_8 = F_capxm(n)
      xmm_8 = 1 - xxm_8
      ggm_8 = F_xggm(n)
      ddm_8 = F_xddm(n)
*
      t1m_8 = 1     + ggm_8
      t2m_8 = 1     + ddm_8
      p1m_8 = ggm_8 + t2m_8
      p4m_8 = ddm_8 * t2m_8 * p1m_8
      p1m_8 = ggm_8 * t1m_8 * p1m_8
      t3m_8 = ggm_8 * t2m_8
      t1m_8 = t1m_8 * ddm_8
      p2m_8 = t2m_8 - xxm_8
      p3m_8 = ggm_8 + xxm_8
      t2m_8 =-xxm_8 * xmm_8
      p4m_8 = t2m_8 * p3m_8 / p4m_8
      p1m_8 = t2m_8 * p2m_8 / p1m_8
      p3m_8 = p2m_8 * p3m_8
      p2m_8 = xmm_8 * p3m_8 / t3m_8
      p3m_8 = xxm_8 * p3m_8 / t1m_8
*
      o1 = F_nm(n)-Adw_nit
      o2 = F_nm(n)
      o3 = F_nm(n)+Adw_nit
      o4 = F_nm(n)+Adw_nit+Adw_nit
*
      a1m_8 = p1m_8 * F_inm(o1-1) + p2m_8 * F_inm(o1) + p3m_8 * F_inm(o1+1) + p4m_8 * F_inm(o1+2)
*
*        TRAJECTORY
*        ----------
*        The following max statement is expanded as one IF block
         prmax0m = max(F_inm(o2),F_inm(o2+1))
*
*        The following min statement is expanded as one IF block
         prmin0m = min(F_inm(o2),F_inm(o2+1))
*
      a2m_8 = p1m_8 * F_inm(o2-1) + p2m_8 * F_inm(o2) + p3m_8 * F_inm(o2+1) + p4m_8 * F_inm(o2+2)
*
*        TRAJECTORY
*        ----------
*        The following max statement is expanded as two IF block
         prmax1m = max(prmax0m,F_inm(o3),F_inm(o3+1))
*
*        The following min statement is expanded as two IF block
         prmin1m = min(prmin0m,F_inm(o3),F_inm(o3+1))
*
      a3m_8 = p1m_8 * F_inm(o3-1) + p2m_8 * F_inm(o3) + p3m_8 * F_inm(o3+1) + p4m_8 * F_inm(o3+2)
      a4m_8 = p1m_8 * F_inm(o4-1) + p2m_8 * F_inm(o4) + p3m_8 * F_inm(o4+1) + p4m_8 * F_inm(o4+2)
*
      b1m_8 = p1m_8 * F_inzzm(o1-1) + p2m_8 * F_inzzm(o1) + p3m_8 * F_inzzm(o1+1) + p4m_8 * F_inzzm(o1+2)
      b2m_8 = p1m_8 * F_inzzm(o2-1) + p2m_8 * F_inzzm(o2) + p3m_8 * F_inzzm(o2+1) + p4m_8 * F_inzzm(o2+2)
      b3m_8 = p1m_8 * F_inzzm(o3-1) + p2m_8 * F_inzzm(o3) + p3m_8 * F_inzzm(o3+1) + p4m_8 * F_inzzm(o3+2)
      b4m_8 = p1m_8 * F_inzzm(o4-1) + p2m_8 * F_inzzm(o4) + p3m_8 * F_inzzm(o4+1) + p4m_8 * F_inzzm(o4+2)
*
      o1 = o1 + nijag
      o2 = o2 + nijag
      o3 = o3 + nijag
      o4 = o4 + nijag
*
      c1m_8 = p1m_8 * F_inm(o1-1) + p2m_8 * F_inm(o1) + p3m_8 * F_inm(o1+1) + p4m_8 * F_inm(o1+2)
*
*        TRAJECTORY
*        ----------
*        The following max statement is expanded as two IF block
         prmax2m = max(prmax1m,F_inm(o2),F_inm(o2+1))
*
*        The following min statement is expanded as two IF block
         prmin2m = min(prmin1m,F_inm(o2),F_inm(o2+1))
*
      c2m_8 = p1m_8 * F_inm(o2-1) + p2m_8 * F_inm(o2) + p3m_8 * F_inm(o2+1) + p4m_8 * F_inm(o2+2)
*
*        TRAJECTORY
*        ----------
*        The following max statement is expanded as two IF block
         prmaxm = max(prmax2m,F_inm(o3),F_inm(o3+1))
*
*        The following min statement is expanded as two IF block
         prminm = min(prmin2m,F_inm(o3),F_inm(o3+1))
*
      c3m_8 = p1m_8 * F_inm(o3-1) + p2m_8 * F_inm(o3) + p3m_8 * F_inm(o3+1) + p4m_8 * F_inm(o3+2)
      c4m_8 = p1m_8 * F_inm(o4-1) + p2m_8 * F_inm(o4) + p3m_8 * F_inm(o4+1) + p4m_8 * F_inm(o4+2)
*
      d1m_8 = p1m_8 * F_inzzm(o1-1) + p2m_8 * F_inzzm(o1) + p3m_8 * F_inzzm(o1+1) + p4m_8 * F_inzzm(o1+2)
      d2m_8 = p1m_8 * F_inzzm(o2-1) + p2m_8 * F_inzzm(o2) + p3m_8 * F_inzzm(o2+1) + p4m_8 * F_inzzm(o2+2)
      d3m_8 = p1m_8 * F_inzzm(o3-1) + p2m_8 * F_inzzm(o3) + p3m_8 * F_inzzm(o3+1) + p4m_8 * F_inzzm(o3+2)
      d4m_8 = p1m_8 * F_inzzm(o4-1) + p2m_8 * F_inzzm(o4) + p3m_8 * F_inzzm(o4+1) + p4m_8 * F_inzzm(o4+2)
*
***********************************************************************
*     y interpolation
***********************************************************************
      xxm_8 = F_capym(n)
      xmm_8 = 1 - xxm_8
*
      ggm_8 = F_yggm(n)
      ddm_8 = F_yddm(n)
*
      t1m_8 = 1     + ggm_8
      t2m_8 = 1     + ddm_8
      p1m_8 = ggm_8 + t2m_8
      p4m_8 = ddm_8 * t2m_8 * p1m_8
      p1m_8 = ggm_8 * t1m_8 * p1m_8
      t3m_8 = ggm_8 * t2m_8
      t1m_8 = t1m_8 * ddm_8
      p2m_8 = t2m_8 - xxm_8
      p3m_8 = ggm_8 + xxm_8
      t2m_8 =-xxm_8 * xmm_8
      p4m_8 = t2m_8 * p3m_8 / p4m_8
      p1m_8 = t2m_8 * p2m_8 / p1m_8
      p3m_8 = p2m_8 * p3m_8
      p2m_8 = xmm_8 * p3m_8 / t3m_8
      p3m_8 = xxm_8 * p3m_8 / t1m_8
*
      a1m_y_8 = p1m_8 * a1m_8 + p2m_8 * a2m_8 + p3m_8 * a3m_8 + p4m_8 * a4m_8
      b1m_y_8 = p1m_8 * b1m_8 + p2m_8 * b2m_8 + p3m_8 * b3m_8 + p4m_8 * b4m_8
      c1m_y_8 = p1m_8 * c1m_8 + p2m_8 * c2m_8 + p3m_8 * c3m_8 + p4m_8 * c4m_8
      d1m_y_8 = p1m_8 * d1m_8 + p2m_8 * d2m_8 + p3m_8 * d3m_8 + p4m_8 * d4m_8
*
***********************************************************************
*     z interpolation
***********************************************************************
      xxm_8 = F_capzm(n)
      xmm_8 = 1.0 - xxm_8
      t1m_8 = F_czm(n) * ( xmm_8 + 1.0 )
      t2m_8 = F_czm(n) * ( xxm_8 + 1.0 )
*
*     TRAJECTORY
*     ----------
      foutm = xmm_8 * a1m_y_8 + t1m_8 * b1m_y_8 + xxm_8 * c1m_y_8 + t2m_8 * d1m_y_8
*
*     ----------------
*     TRAJECTORY (END)
*     ----------------
*
*     --------------------
*     ADJOINT CALCULATIONS 
*     --------------------
*
*     ADJ of
********************************************************************************
*     z interpolation
********************************************************************************
*
*     ADJ
*     ---
      if(prminm.gt.foutm) then
         prmin    = F_out(n) + prmin
         F_out(n) = ZERO_8
      endif
      if(prmaxm.lt.foutm) then
         prmax    = F_out(n) + prmax
         F_out(n) = ZERO_8
      endif
*
      xm_8    = F_out(n) * a1m_y_8
      t1_8    = F_out(n) * b1m_y_8
      xx_8    = F_out(n) * c1m_y_8
      t2_8    = F_out(n) * d1m_y_8
      a1_y_8  =    xmm_8 * F_out(n)
      b1_y_8  =    t1m_8 * F_out(n)
      c1_y_8  =    xxm_8 * F_out(n)
      d1_y_8  =    t2m_8 * F_out(n)
      F_out(n)= ZERO_8
*
      F_cz(n)  =       t2_8 * ( xxm_8 + 1.0 ) + F_cz(n)
      xx_8     =   F_czm(n) * ( t2_8        ) + xx_8
      F_cz(n)  =       t1_8 * ( xmm_8 + 1.0 ) + F_cz(n)
      xm_8     =   F_czm(n) * ( t1_8        ) + xm_8
*
      xx_8     = - xm_8 + xx_8
      F_capz(n)=   xx_8 + F_capz(n)
*
*     ADJ of
********************************************************************************
*     y interpolation
********************************************************************************
      p1_8 = d1_y_8 * d1m_8
      p2_8 = d1_y_8 * d2m_8
      p3_8 = d1_y_8 * d3m_8
      p4_8 = d1_y_8 * d4m_8
      d1_8 = p1m_8  * d1_y_8
      d2_8 = p2m_8  * d1_y_8
      d3_8 = p3m_8  * d1_y_8
      d4_8 = p4m_8  * d1_y_8
*
      p1_8 = c1_y_8 * c1m_8 + p1_8
      p2_8 = c1_y_8 * c2m_8 + p2_8
      p3_8 = c1_y_8 * c3m_8 + p3_8
      p4_8 = c1_y_8 * c4m_8 + p4_8
      c1_8 = p1m_8  * c1_y_8
      c2_8 = p2m_8  * c1_y_8
      c3_8 = p3m_8  * c1_y_8
      c4_8 = p4m_8  * c1_y_8
*
      p1_8 = b1_y_8 * b1m_8 + p1_8
      p2_8 = b1_y_8 * b2m_8 + p2_8
      p3_8 = b1_y_8 * b3m_8 + p3_8
      p4_8 = b1_y_8 * b4m_8 + p4_8
      b1_8 = p1m_8  * b1_y_8
      b2_8 = p2m_8  * b1_y_8
      b3_8 = p3m_8  * b1_y_8
      b4_8 = p4m_8  * b1_y_8
*
      p1_8 = a1_y_8 * a1m_8 + p1_8
      p2_8 = a1_y_8 * a2m_8 + p2_8
      p3_8 = a1_y_8 * a3m_8 + p3_8
      p4_8 = a1_y_8 * a4m_8 + p4_8
      a1_8 = p1m_8  * a1_y_8
      a2_8 = p2m_8  * a1_y_8
      a3_8 = p3m_8  * a1_y_8
      a4_8 = p4m_8  * a1_y_8
*
*     ---------------------------
*     Recall TRAJECTORY Y (START)
*     ---------------------------
*
      xxm_8 = F_capym(n)
      xmm_8 = 1 - xxm_8
      ggm_8 = F_yggm(n)
      ddm_8 = F_yddm(n)
*
      t1m_8  = 1     + ggm_8
      t2m_8  = 1     + ddm_8
      p1m_8  = ggm_8 + t2m_8
      p40m_8 = ddm_8 * t2m_8 * p1m_8
      p10m_8 = ggm_8 * t1m_8 * p1m_8
      t3m_8  = ggm_8 * t2m_8
      t1m_8  = t1m_8 * ddm_8
      p20m_8 = t2m_8 - xxm_8
      p30m_8 = ggm_8 + xxm_8
      t2m_8  =-xxm_8 * xmm_8
      p4m_8  = t2m_8 * p30m_8 / p40m_8
      p1m_8  = t2m_8 * p20m_8 / p10m_8
      p31m_8 = p20m_8* p30m_8
      p2m_8  = xmm_8 * p31m_8 / t3m_8
      p3m_8  = xxm_8 * p31m_8 / t1m_8
*
*     -------------------------
*     Recall TRAJECTORY Y (END)
*     -------------------------
*
      xx_8  =  p3_8 * p31m_8 / t1m_8
      p3_8  = xxm_8 * p3_8   / t1m_8
*
      xm_8  =  p2_8 * p31m_8 / t3m_8
      p3_8  = xmm_8 * p2_8   / t3m_8  + p3_8
*
      p2_8  =  p3_8 * p30m_8
      p3_8  = p20m_8* p3_8
*
      t2_8  =  p1_8 * p20m_8 / p10m_8
      p2_8  = t2m_8 * p1_8   / p10m_8 + p2_8
*
      t2_8  =  p4_8 * p30m_8 / p40m_8 + t2_8
      p3_8  = t2m_8 * p4_8   / p40m_8 + p3_8
*
      xx_8  = -t2_8 * xmm_8  + xx_8
      xm_8  =-xxm_8 * t2_8   + xm_8
*
      xx_8  =  p3_8 + xx_8
*
      xx_8  = -p2_8 + xx_8
*
      xx_8       = - xm_8 + xx_8
      F_capy(n)  =   xx_8 + F_capy(n)
*
*     ADJ of
********************************************************************************
*     x interpolation
********************************************************************************
*
*     ---------------------------
*     Recall TRAJECTORY X (START)
*     ---------------------------
*
      xxm_8 = F_capxm(n)
      xmm_8 = 1 - xxm_8
      ggm_8 = F_xggm(n)
      ddm_8 = F_xddm(n)
*
      t1m_8  = 1     + ggm_8
      t2m_8  = 1     + ddm_8
      p1m_8  = ggm_8 + t2m_8
      p40m_8 = ddm_8 * t2m_8 * p1m_8
      p10m_8 = ggm_8 * t1m_8 * p1m_8
      t3m_8  = ggm_8 * t2m_8
      t1m_8  = t1m_8 * ddm_8
      p20m_8 = t2m_8 - xxm_8
      p30m_8 = ggm_8 + xxm_8
      t2m_8  =-xxm_8 * xmm_8
      p4m_8  = t2m_8 * p30m_8 / p40m_8
      p1m_8  = t2m_8 * p20m_8 / p10m_8
      p31m_8 = p20m_8* p30m_8
      p2m_8  = xmm_8 * p31m_8 / t3m_8
      p3m_8  = xxm_8 * p31m_8 / t1m_8
*
*     -------------------------
*     Recall TRAJECTORY X (END)
*     -------------------------
*
      o1 = F_nm(n)-Adw_nit
      o2 = F_nm(n)
      o3 = F_nm(n)+Adw_nit
      o4 = F_nm(n)+Adw_nit+Adw_nit
*
      o1 = o1 + nijag
      o2 = o2 + nijag
      o3 = o3 + nijag
      o4 = o4 + nijag
*
*     ------------------------------------
      p1_8 = d4_8 * F_inzzm(o4-1)
      p2_8 = d4_8 * F_inzzm(o4)
      p3_8 = d4_8 * F_inzzm(o4+1)
      p4_8 = d4_8 * F_inzzm(o4+2)
*
      F_inzz(o4-1) = p1m_8  * d4_8         + F_inzz(o4-1)
      F_inzz(o4)   = p2m_8  * d4_8         + F_inzz(o4)
      F_inzz(o4+1) = p3m_8  * d4_8         + F_inzz(o4+1)
      F_inzz(o4+2) = p4m_8  * d4_8         + F_inzz(o4+2)
*
*     ------------------------------------
      p1_8 = d3_8 * F_inzzm(o3-1) + p1_8
      p2_8 = d3_8 * F_inzzm(o3)   + p2_8
      p3_8 = d3_8 * F_inzzm(o3+1) + p3_8
      p4_8 = d3_8 * F_inzzm(o3+2) + p4_8
*
      F_inzz(o3-1) = p1m_8  * d3_8         + F_inzz (o3-1)
      F_inzz(o3)   = p2m_8  * d3_8         + F_inzz (o3)
      F_inzz(o3+1) = p3m_8  * d3_8         + F_inzz (o3+1)
      F_inzz(o3+2) = p4m_8  * d3_8         + F_inzz (o3+2)
*
*     ------------------------------------
      p1_8 = d2_8 * F_inzzm(o2-1) + p1_8
      p2_8 = d2_8 * F_inzzm(o2)   + p2_8
      p3_8 = d2_8 * F_inzzm(o2+1) + p3_8
      p4_8 = d2_8 * F_inzzm(o2+2) + p4_8
*
      F_inzz(o2-1) = p1m_8  * d2_8         + F_inzz (o2-1)
      F_inzz(o2)   = p2m_8  * d2_8         + F_inzz (o2)
      F_inzz(o2+1) = p3m_8  * d2_8         + F_inzz (o2+1)
      F_inzz(o2+2) = p4m_8  * d2_8         + F_inzz (o2+2)
*
*     ------------------------------------
      p1_8 = d1_8 * F_inzzm(o1-1) + p1_8
      p2_8 = d1_8 * F_inzzm(o1)   + p2_8
      p3_8 = d1_8 * F_inzzm(o1+1) + p3_8
      p4_8 = d1_8 * F_inzzm(o1+2) + p4_8
*
      F_inzz(o1-1) = p1m_8  * d1_8         + F_inzz (o1-1)
      F_inzz(o1)   = p2m_8  * d1_8         + F_inzz (o1)
      F_inzz(o1+1) = p3m_8  * d1_8         + F_inzz (o1+1)
      F_inzz(o1+2) = p4m_8  * d1_8         + F_inzz (o1+2)
*
*     ------------------------------------
      p1_8 = c4_8 * F_inm(o4-1)   + p1_8
      p2_8 = c4_8 * F_inm(o4)     + p2_8
      p3_8 = c4_8 * F_inm(o4+1)   + p3_8
      p4_8 = c4_8 * F_inm(o4+2)   + p4_8
*
      F_in(o4-1)   = p1m_8  * c4_8         + F_in(o4-1)
      F_in(o4)     = p2m_8  * c4_8         + F_in(o4)
      F_in(o4+1)   = p3m_8  * c4_8         + F_in(o4+1)
      F_in(o4+2)   = p4m_8  * c4_8         + F_in(o4+2)
*
*     ------------------------------------
      p1_8 = c3_8 * F_inm(o3-1)   + p1_8
      p2_8 = c3_8 * F_inm(o3)     + p2_8
      p3_8 = c3_8 * F_inm(o3+1)   + p3_8
      p4_8 = c3_8 * F_inm(o3+2)   + p4_8
*
      F_in(o3-1)   = p1m_8  * c3_8         + F_in(o3-1)
      F_in(o3)     = p2m_8  * c3_8         + F_in(o3)
      F_in(o3+1)   = p3m_8  * c3_8         + F_in(o3+1)
      F_in(o3+2)   = p4m_8  * c3_8         + F_in(o3+2)
*
*     ------------------------------------
*
*        Recall TRAJECTORY 
*        -----------------
         work_m = F_inm(o3)
         if(F_inm(o3+1).lt.F_inm(o3)) then
            work_m = F_inm(o3+1)
         endif
*
*        ADJ 
*        ---
         if(prmin2m.lt.work_m) then
            prmin2 = prmin + prmin2
            prmin  = ZERO_8
         else
            work  = prmin + work
            prmin = ZERO_8
         endif
         if(F_inm(o3+1).lt.F_inm(o3)) then
            F_in(o3+1) = work + F_in(o3+1)
            work       = ZERO_8
         endif
            F_in(o3)   = work + F_in(o3)
            work       = ZERO_8
*
*        Recall TRAJECTORY
*        -----------------
         work_m = F_inm(o3)
         if(F_inm(o3+1).gt.F_inm(o3)) then
            work_m = F_inm(o3+1)
         endif
*
*        ADJ
*        ---
         if(prmax2m.gt.work_m) then
            prmax2 = prmax + prmax2
            prmax  = ZERO_8
         else
            work  = prmax + work
            prmax = ZERO_8
         endif
         if(F_inm(o3+1).gt.F_inm(o3)) then
            F_in(o3+1) = work + F_in(o3+1)
            work       = ZERO_8
         endif
            F_in(o3)   = work + F_in(o3)
            work       = ZERO_8
*
*     ------------------------------------
      p1_8 = c2_8 * F_inm(o2-1)   + p1_8
      p2_8 = c2_8 * F_inm(o2)     + p2_8
      p3_8 = c2_8 * F_inm(o2+1)   + p3_8
      p4_8 = c2_8 * F_inm(o2+2)   + p4_8
*
      F_in(o2-1)   = p1m_8  * c2_8         + F_in(o2-1)
      F_in(o2)     = p2m_8  * c2_8         + F_in(o2)
      F_in(o2+1)   = p3m_8  * c2_8         + F_in(o2+1)
      F_in(o2+2)   = p4m_8  * c2_8         + F_in(o2+2)
*
*     ------------------------------------
*
*        Recall TRAJECTORY
*        -----------------
         work_m = F_inm(o2)
         if(F_inm(o2+1).lt.F_inm(o2)) then
            work_m = F_inm(o2+1)
         endif
*
*        ADJ
*        ---
         if(prmin1m.lt.work_m) then
            prmin1 = prmin2 + prmin1
            prmin2 = ZERO_8
         else
            work   = prmin2 + work
            prmin2 = ZERO_8
         endif
         if(F_inm(o2+1).lt.F_inm(o2)) then
            F_in(o2+1) = work + F_in(o2+1)
            work       = ZERO_8
         endif
            F_in(o2)   = work +  F_in(o2)
            work       = ZERO_8
*
*        Recall TRAJECTORY
*        -----------------
         work_m = F_inm(o2)
         if(F_inm(o2+1).gt.F_inm(o2)) then
            work_m = F_inm(o2+1)
         endif
*
*        ADJ
*        ---
         if(prmax1m.gt.work_m) then
            prmax1 = prmax2 + prmax1
            prmax2 = ZERO_8
         else
            work   = prmax2 + work
            prmax2 = ZERO_8
         endif
         if(F_inm(o2+1).gt.F_inm(o2)) then
            F_in(o2+1) = work + F_in(o2+1)
            work       = ZERO_8
         endif
            F_in(o2)   = work +  F_in(o2)
            work       = ZERO_8
*
*     ------------------------------------
      p1_8 = c1_8 * F_inm(o1-1)   + p1_8
      p2_8 = c1_8 * F_inm(o1)     + p2_8
      p3_8 = c1_8 * F_inm(o1+1)   + p3_8
      p4_8 = c1_8 * F_inm(o1+2)   + p4_8
*
      F_in(o1-1)   = p1m_8  * c1_8         + F_in(o1-1)
      F_in(o1)     = p2m_8  * c1_8         + F_in(o1)
      F_in(o1+1)   = p3m_8  * c1_8         + F_in(o1+1)
      F_in(o1+2)   = p4m_8  * c1_8         + F_in(o1+2)
*
*     ------------------------------------
*
      o1 = F_nm(n)-Adw_nit
      o2 = F_nm(n)
      o3 = F_nm(n)+Adw_nit
      o4 = F_nm(n)+Adw_nit+Adw_nit
*
*     ------------------------------------
      p1_8 = b4_8 * F_inzzm(o4-1) + p1_8
      p2_8 = b4_8 * F_inzzm(o4)   + p2_8
      p3_8 = b4_8 * F_inzzm(o4+1) + p3_8
      p4_8 = b4_8 * F_inzzm(o4+2) + p4_8
*
      F_inzz(o4-1) = p1m_8  * b4_8         + F_inzz(o4-1)
      F_inzz(o4)   = p2m_8  * b4_8         + F_inzz(o4)
      F_inzz(o4+1) = p3m_8  * b4_8         + F_inzz(o4+1)
      F_inzz(o4+2) = p4m_8  * b4_8         + F_inzz(o4+2)
*
*     ------------------------------------
      p1_8 = b3_8 * F_inzzm(o3-1) + p1_8
      p2_8 = b3_8 * F_inzzm(o3)   + p2_8
      p3_8 = b3_8 * F_inzzm(o3+1) + p3_8
      p4_8 = b3_8 * F_inzzm(o3+2) + p4_8
*
      F_inzz(o3-1) = p1m_8  * b3_8         + F_inzz(o3-1)
      F_inzz(o3)   = p2m_8  * b3_8         + F_inzz(o3)
      F_inzz(o3+1) = p3m_8  * b3_8         + F_inzz(o3+1)
      F_inzz(o3+2) = p4m_8  * b3_8         + F_inzz(o3+2)
*
*     ------------------------------------
      p1_8 = b2_8 * F_inzzm(o2-1) + p1_8
      p2_8 = b2_8 * F_inzzm(o2)   + p2_8
      p3_8 = b2_8 * F_inzzm(o2+1) + p3_8
      p4_8 = b2_8 * F_inzzm(o2+2) + p4_8
*
      F_inzz(o2-1) = p1m_8  * b2_8         + F_inzz(o2-1)
      F_inzz(o2)   = p2m_8  * b2_8         + F_inzz(o2)
      F_inzz(o2+1) = p3m_8  * b2_8         + F_inzz(o2+1)
      F_inzz(o2+2) = p4m_8  * b2_8         + F_inzz(o2+2)
*
*     ------------------------------------
      p1_8 = b1_8 * F_inzzm(o1-1) + p1_8
      p2_8 = b1_8 * F_inzzm(o1)   + p2_8
      p3_8 = b1_8 * F_inzzm(o1+1) + p3_8
      p4_8 = b1_8 * F_inzzm(o1+2) + p4_8
*
      F_inzz(o1-1) = p1m_8  * b1_8         + F_inzz(o1-1)
      F_inzz(o1)   = p2m_8  * b1_8         + F_inzz(o1)
      F_inzz(o1+1) = p3m_8  * b1_8         + F_inzz(o1+1)
      F_inzz(o1+2) = p4m_8  * b1_8         + F_inzz(o1+2)
*
*     ------------------------------------
      p1_8 = a4_8 * F_inm(o4-1)   + p1_8
      p2_8 = a4_8 * F_inm(o4)     + p2_8
      p3_8 = a4_8 * F_inm(o4+1)   + p3_8
      p4_8 = a4_8 * F_inm(o4+2)   + p4_8
*
      F_in(o4-1)   = p1m_8  * a4_8         + F_in(o4-1)
      F_in(o4)     = p2m_8  * a4_8         + F_in(o4)
      F_in(o4+1)   = p3m_8  * a4_8         + F_in(o4+1)
      F_in(o4+2)   = p4m_8  * a4_8         + F_in(o4+2)
*
*     ------------------------------------
      p1_8 = a3_8 * F_inm(o3-1)   + p1_8
      p2_8 = a3_8 * F_inm(o3)     + p2_8
      p3_8 = a3_8 * F_inm(o3+1)   + p3_8
      p4_8 = a3_8 * F_inm(o3+2)   + p4_8
*
      F_in(o3-1)   = p1m_8  * a3_8         + F_in(o3-1)
      F_in(o3)     = p2m_8  * a3_8         + F_in(o3)
      F_in(o3+1)   = p3m_8  * a3_8         + F_in(o3+1)
      F_in(o3+2)   = p4m_8  * a3_8         + F_in(o3+2)
*
*     ------------------------------------
*
*        Recall TRAJECTORY
*        -----------------
         work_m  = F_inm(o3)
         if(F_inm(o3+1).lt.F_inm(o3)) then
            work_m = F_inm(o3+1)
         endif
*
*        ADJ
*        --- 
         if(prmin0m.lt.work_m) then
            prmin0 = prmin1 + prmin0
            prmin1 = ZERO_8
         else
            work   = prmin1 + work
            prmin1 = ZERO_8
         endif
         if(F_inm(o3+1).lt.F_inm(o3)) then
            F_in(o3+1) = work + F_in(o3+1)
            work       = ZERO_8 
         endif
            F_in(o3)   = work + F_in(o3)
            work       = ZERO_8
*
*        Recall TRAJECTORY
*        -----------------
         work_m  = F_inm(o3)
         if(F_inm(o3+1).gt.F_inm(o3)) then
            work_m = F_inm(o3+1)
         endif
*
*        ADJ
*        ---
         if(prmax0m.gt.work_m) then
            prmax0 = prmax1 + prmax0
            prmax1 = ZERO_8
         else
            work   = prmax1 + work
            prmax1 = ZERO_8
         endif
         if(F_inm(o3+1).gt.F_inm(o3)) then
            F_in(o3+1) = work + F_in(o3+1)
            work       = ZERO_8 
         endif
            F_in(o3)   = work + F_in(o3)
            work       = ZERO_8
*
*     ------------------------------------
      p1_8 = a2_8 * F_inm(o2-1)   + p1_8
      p2_8 = a2_8 * F_inm(o2)     + p2_8
      p3_8 = a2_8 * F_inm(o2+1)   + p3_8
      p4_8 = a2_8 * F_inm(o2+2)   + p4_8
*
      F_in(o2-1)   = p1m_8  * a2_8         + F_in(o2-1)
      F_in(o2)     = p2m_8  * a2_8         + F_in(o2)
      F_in(o2+1)   = p3m_8  * a2_8         + F_in(o2+1)
      F_in(o2+2)   = p4m_8  * a2_8         + F_in(o2+2)
*
*     ------------------------------------
*
*        ADJ
*        ---
         if(F_inm(o2+1).lt.F_inm(o2)) then
            F_in(o2+1) = prmin0 + F_in(o2+1)
            prmin0     = ZERO_8
         endif
            F_in(o2)   = prmin0 + F_in(o2)
            prmin0     = ZERO_8
*
*        ADJ
*        ---
         if(F_inm(o2+1).gt.F_inm(o2)) then
            F_in(o2+1) = prmax0 + F_in(o2+1)
            prmax0     = ZERO_8
         endif
            F_in(o2)   = prmax0 + F_in(o2)
            prmax0     = ZERO_8
*
*     ------------------------------------
      p1_8 = a1_8 * F_inm(o1-1)   + p1_8
      p2_8 = a1_8 * F_inm(o1)     + p2_8
      p3_8 = a1_8 * F_inm(o1+1)   + p3_8
      p4_8 = a1_8 * F_inm(o1+2)   + p4_8
*
      F_in(o1-1)   = p1m_8  * a1_8         + F_in(o1-1)
      F_in(o1)     = p2m_8  * a1_8         + F_in(o1)
      F_in(o1+1)   = p3m_8  * a1_8         + F_in(o1+1)
      F_in(o1+2)   = p4m_8  * a1_8         + F_in(o1+2)
*     ------------------------------------
*
      xx_8  =  p3_8 * p31m_8  / t1m_8   
      p3_8  = xxm_8 * p3_8    / t1m_8
*
      xm_8  =  p2_8 * p31m_8  / t3m_8   
      p3_8  = xmm_8 * p2_8    / t3m_8   + p3_8
*
      p2_8  =  p3_8 * p30m_8
      p3_8  = p20m_8* p3_8
*
      t2_8  =  p1_8 * p20m_8  / p10m_8
      p2_8  = t2m_8 * p1_8    / p10m_8  + p2_8
*
      t2_8  =  p4_8 * p30m_8  / p40m_8  + t2_8
      p3_8  = t2m_8 * p4_8    / p40m_8  + p3_8
*
      xx_8  = -t2_8 * xmm_8  + xx_8
      xm_8  =-xxm_8 * t2_8   + xm_8
*
      xx_8  =  p3_8 + xx_8
*
      xx_8  = -p2_8 + xx_8
*
      xx_8      = - xm_8 + xx_8
      F_capx(n) =   xx_8 + F_capx(n)
*
  80  continue
  90  continue
  100 continue
*
      else
*
      do 200 k=1,kn
      do 190 j=j0,jn
      do 180 i=i0,in
*
      n = (k-1)*nij + ((j-1)*l_ni) + i
*
*     ------------------
*     TRAJECTORY (START)
*     ------------------
***********************************************************************
*
***********************************************************************
*     x interpolation
***********************************************************************
      xxm_8 = F_capxm(n)
      xmm_8 = 1 - xxm_8
      ggm_8 = F_xggm(n)
      ddm_8 = F_xddm(n)
*
      t1m_8 = 1     + ggm_8
      t2m_8 = 1     + ddm_8
      p1m_8 = ggm_8 + t2m_8
      p4m_8 = ddm_8 * t2m_8 * p1m_8
      p1m_8 = ggm_8 * t1m_8 * p1m_8
      t3m_8 = ggm_8 * t2m_8
      t1m_8 = t1m_8 * ddm_8
      p2m_8 = t2m_8 - xxm_8
      p3m_8 = ggm_8 + xxm_8
      t2m_8 =-xxm_8 * xmm_8
      p4m_8 = t2m_8 * p3m_8 / p4m_8
      p1m_8 = t2m_8 * p2m_8 / p1m_8
      p3m_8 = p2m_8 * p3m_8
      p2m_8 = xmm_8 * p3m_8 / t3m_8
      p3m_8 = xxm_8 * p3m_8 / t1m_8
*
      o1 = F_nm(n)-Adw_nit
      o2 = F_nm(n)
      o3 = F_nm(n)+Adw_nit
      o4 = F_nm(n)+Adw_nit+Adw_nit
*
      a1m_8 = p1m_8 * F_inm(o1-1) + p2m_8 * F_inm(o1) + p3m_8 * F_inm(o1+1) + p4m_8 * F_inm(o1+2)
      a2m_8 = p1m_8 * F_inm(o2-1) + p2m_8 * F_inm(o2) + p3m_8 * F_inm(o2+1) + p4m_8 * F_inm(o2+2)
      a3m_8 = p1m_8 * F_inm(o3-1) + p2m_8 * F_inm(o3) + p3m_8 * F_inm(o3+1) + p4m_8 * F_inm(o3+2)
      a4m_8 = p1m_8 * F_inm(o4-1) + p2m_8 * F_inm(o4) + p3m_8 * F_inm(o4+1) + p4m_8 * F_inm(o4+2)
*
      b1m_8 = p1m_8 * F_inzzm(o1-1) + p2m_8 * F_inzzm(o1) + p3m_8 * F_inzzm(o1+1) + p4m_8 * F_inzzm(o1+2)
      b2m_8 = p1m_8 * F_inzzm(o2-1) + p2m_8 * F_inzzm(o2) + p3m_8 * F_inzzm(o2+1) + p4m_8 * F_inzzm(o2+2)
      b3m_8 = p1m_8 * F_inzzm(o3-1) + p2m_8 * F_inzzm(o3) + p3m_8 * F_inzzm(o3+1) + p4m_8 * F_inzzm(o3+2)
      b4m_8 = p1m_8 * F_inzzm(o4-1) + p2m_8 * F_inzzm(o4) + p3m_8 * F_inzzm(o4+1) + p4m_8 * F_inzzm(o4+2)
*
      o1 = o1 + nijag
      o2 = o2 + nijag
      o3 = o3 + nijag
      o4 = o4 + nijag
*
      c1m_8 = p1m_8 * F_inm(o1-1) + p2m_8 * F_inm(o1) + p3m_8 * F_inm(o1+1) + p4m_8 * F_inm(o1+2)
      c2m_8 = p1m_8 * F_inm(o2-1) + p2m_8 * F_inm(o2) + p3m_8 * F_inm(o2+1) + p4m_8 * F_inm(o2+2)
      c3m_8 = p1m_8 * F_inm(o3-1) + p2m_8 * F_inm(o3) + p3m_8 * F_inm(o3+1) + p4m_8 * F_inm(o3+2)
      c4m_8 = p1m_8 * F_inm(o4-1) + p2m_8 * F_inm(o4) + p3m_8 * F_inm(o4+1) + p4m_8 * F_inm(o4+2)
*
      d1m_8 = p1m_8 * F_inzzm(o1-1) + p2m_8 * F_inzzm(o1) + p3m_8 * F_inzzm(o1+1) + p4m_8 * F_inzzm(o1+2)
      d2m_8 = p1m_8 * F_inzzm(o2-1) + p2m_8 * F_inzzm(o2) + p3m_8 * F_inzzm(o2+1) + p4m_8 * F_inzzm(o2+2)
      d3m_8 = p1m_8 * F_inzzm(o3-1) + p2m_8 * F_inzzm(o3) + p3m_8 * F_inzzm(o3+1) + p4m_8 * F_inzzm(o3+2)
      d4m_8 = p1m_8 * F_inzzm(o4-1) + p2m_8 * F_inzzm(o4) + p3m_8 * F_inzzm(o4+1) + p4m_8 * F_inzzm(o4+2)
*
*
***********************************************************************
*     y interpolation
***********************************************************************
      xxm_8 = F_capym(n)
      xmm_8 = 1 - xxm_8
*
      ggm_8 = F_yggm(n)
      ddm_8 = F_yddm(n)
*
      t1m_8 = 1     + ggm_8
      t2m_8 = 1     + ddm_8
      p1m_8 = ggm_8 + t2m_8
      p4m_8 = ddm_8 * t2m_8 * p1m_8
      p1m_8 = ggm_8 * t1m_8 * p1m_8
      t3m_8 = ggm_8 * t2m_8
      t1m_8 = t1m_8 * ddm_8
      p2m_8 = t2m_8 - xxm_8
      p3m_8 = ggm_8 + xxm_8
      t2m_8 =-xxm_8 * xmm_8
      p4m_8 = t2m_8 * p3m_8 / p4m_8
      p1m_8 = t2m_8 * p2m_8 / p1m_8
      p3m_8 = p2m_8 * p3m_8
      p2m_8 = xmm_8 * p3m_8 / t3m_8
      p3m_8 = xxm_8 * p3m_8 / t1m_8
*
      a1m_y_8 = p1m_8 * a1m_8 + p2m_8 * a2m_8 + p3m_8 * a3m_8 + p4m_8 * a4m_8
      b1m_y_8 = p1m_8 * b1m_8 + p2m_8 * b2m_8 + p3m_8 * b3m_8 + p4m_8 * b4m_8
      c1m_y_8 = p1m_8 * c1m_8 + p2m_8 * c2m_8 + p3m_8 * c3m_8 + p4m_8 * c4m_8
      d1m_y_8 = p1m_8 * d1m_8 + p2m_8 * d2m_8 + p3m_8 * d3m_8 + p4m_8 * d4m_8
*
***********************************************************************
*     z interpolation
***********************************************************************
      xxm_8 = F_capzm(n)
      xmm_8 = 1.0 - xxm_8
      t1m_8 = F_czm(n) * ( xmm_8 + 1.0 )
      t2m_8 = F_czm(n) * ( xxm_8 + 1.0 )
*
*     ----------------
*     TRAJECTORY (END)
*     ----------------
*
*     --------------------
*     ADJOINT CALCULATIONS 
*     --------------------
*
*     ADJ of
********************************************************************************
*     z interpolation
********************************************************************************
      xm_8    = F_out(n) * a1m_y_8
      t1_8    = F_out(n) * b1m_y_8
      xx_8    = F_out(n) * c1m_y_8
      t2_8    = F_out(n) * d1m_y_8
      a1_y_8  =    xmm_8 * F_out(n)
      b1_y_8  =    t1m_8 * F_out(n)
      c1_y_8  =    xxm_8 * F_out(n)
      d1_y_8  =    t2m_8 * F_out(n)
      F_out(n)= ZERO_8
*
      F_cz(n)  =       t2_8 * ( xxm_8 + 1.0 ) + F_cz(n)
      xx_8     =   F_czm(n) * ( t2_8        ) + xx_8
      F_cz(n)  =       t1_8 * ( xmm_8 + 1.0 ) + F_cz(n)
      xm_8     =   F_czm(n) * ( t1_8        ) + xm_8
*
      xx_8     = - xm_8 + xx_8
      F_capz(n)=   xx_8 + F_capz(n)
*
*     ADJ of
********************************************************************************
*     y interpolation
********************************************************************************
      p1_8 = d1_y_8 * d1m_8
      p2_8 = d1_y_8 * d2m_8
      p3_8 = d1_y_8 * d3m_8
      p4_8 = d1_y_8 * d4m_8
      d1_8 = p1m_8  * d1_y_8
      d2_8 = p2m_8  * d1_y_8
      d3_8 = p3m_8  * d1_y_8
      d4_8 = p4m_8  * d1_y_8
*
      p1_8 = c1_y_8 * c1m_8 + p1_8
      p2_8 = c1_y_8 * c2m_8 + p2_8
      p3_8 = c1_y_8 * c3m_8 + p3_8
      p4_8 = c1_y_8 * c4m_8 + p4_8
      c1_8 = p1m_8  * c1_y_8
      c2_8 = p2m_8  * c1_y_8
      c3_8 = p3m_8  * c1_y_8
      c4_8 = p4m_8  * c1_y_8
*
      p1_8 = b1_y_8 * b1m_8 + p1_8
      p2_8 = b1_y_8 * b2m_8 + p2_8
      p3_8 = b1_y_8 * b3m_8 + p3_8
      p4_8 = b1_y_8 * b4m_8 + p4_8
      b1_8 = p1m_8  * b1_y_8
      b2_8 = p2m_8  * b1_y_8
      b3_8 = p3m_8  * b1_y_8
      b4_8 = p4m_8  * b1_y_8
*
      p1_8 = a1_y_8 * a1m_8 + p1_8
      p2_8 = a1_y_8 * a2m_8 + p2_8
      p3_8 = a1_y_8 * a3m_8 + p3_8
      p4_8 = a1_y_8 * a4m_8 + p4_8
      a1_8 = p1m_8  * a1_y_8
      a2_8 = p2m_8  * a1_y_8
      a3_8 = p3m_8  * a1_y_8
      a4_8 = p4m_8  * a1_y_8
*
*     ---------------------------
*     Recall TRAJECTORY Y (START)
*     ---------------------------
*
      xxm_8 = F_capym(n)
      xmm_8 = 1 - xxm_8
      ggm_8 = F_yggm(n)
      ddm_8 = F_yddm(n)
*
      t1m_8  = 1     + ggm_8
      t2m_8  = 1     + ddm_8
      p1m_8  = ggm_8 + t2m_8
      p40m_8 = ddm_8 * t2m_8 * p1m_8
      p10m_8 = ggm_8 * t1m_8 * p1m_8
      t3m_8  = ggm_8 * t2m_8
      t1m_8  = t1m_8 * ddm_8
      p20m_8 = t2m_8 - xxm_8
      p30m_8 = ggm_8 + xxm_8
      t2m_8  =-xxm_8 * xmm_8
      p4m_8  = t2m_8 * p30m_8 / p40m_8
      p1m_8  = t2m_8 * p20m_8 / p10m_8
      p31m_8 = p20m_8* p30m_8
      p2m_8  = xmm_8 * p31m_8 / t3m_8
      p3m_8  = xxm_8 * p31m_8 / t1m_8
*
*     -------------------------
*     Recall TRAJECTORY Y (END)
*     -------------------------
*
      xx_8  =  p3_8 * p31m_8 / t1m_8
      p3_8  = xxm_8 * p3_8   / t1m_8
*
      xm_8  =  p2_8 * p31m_8 / t3m_8
      p3_8  = xmm_8 * p2_8   / t3m_8  + p3_8
*
      p2_8  =  p3_8 * p30m_8
      p3_8  = p20m_8* p3_8
*
      t2_8  =  p1_8 * p20m_8 / p10m_8
      p2_8  = t2m_8 * p1_8   / p10m_8 + p2_8
*
      t2_8  =  p4_8 * p30m_8 / p40m_8 + t2_8
      p3_8  = t2m_8 * p4_8   / p40m_8 + p3_8
*
      xx_8  = -t2_8 * xmm_8  + xx_8
      xm_8  =-xxm_8 * t2_8   + xm_8
*
      xx_8  =  p3_8 + xx_8
*
      xx_8  = -p2_8 + xx_8
*
      xx_8       = - xm_8 + xx_8
      F_capy(n)  =   xx_8 + F_capy(n)
*
*     ADJ of
********************************************************************************
*     x interpolation
********************************************************************************
*
*     ---------------------------
*     Recall TRAJECTORY X (START)
*     ---------------------------
*
      xxm_8 = F_capxm(n)
      xmm_8 = 1 - xxm_8
      ggm_8 = F_xggm(n)
      ddm_8 = F_xddm(n)
*
      t1m_8  = 1     + ggm_8
      t2m_8  = 1     + ddm_8
      p1m_8  = ggm_8 + t2m_8
      p40m_8 = ddm_8 * t2m_8 * p1m_8
      p10m_8 = ggm_8 * t1m_8 * p1m_8
      t3m_8  = ggm_8 * t2m_8
      t1m_8  = t1m_8 * ddm_8
      p20m_8 = t2m_8 - xxm_8
      p30m_8 = ggm_8 + xxm_8
      t2m_8  =-xxm_8 * xmm_8
      p4m_8  = t2m_8 * p30m_8 / p40m_8
      p1m_8  = t2m_8 * p20m_8 / p10m_8
      p31m_8 = p20m_8* p30m_8
      p2m_8  = xmm_8 * p31m_8 / t3m_8
      p3m_8  = xxm_8 * p31m_8 / t1m_8
*
*     -------------------------
*     Recall TRAJECTORY X (END)
*     -------------------------
*
      o1 = F_nm(n)-Adw_nit
      o2 = F_nm(n)
      o3 = F_nm(n)+Adw_nit
      o4 = F_nm(n)+Adw_nit+Adw_nit
*
      o1 = o1 + nijag
      o2 = o2 + nijag
      o3 = o3 + nijag
      o4 = o4 + nijag
*
*     ------------------------------------
      p1_8 = d4_8 * F_inzzm(o4-1)
      p2_8 = d4_8 * F_inzzm(o4)
      p3_8 = d4_8 * F_inzzm(o4+1)
      p4_8 = d4_8 * F_inzzm(o4+2)
*
      F_inzz(o4-1) = p1m_8  * d4_8         + F_inzz(o4-1)
      F_inzz(o4)   = p2m_8  * d4_8         + F_inzz(o4)
      F_inzz(o4+1) = p3m_8  * d4_8         + F_inzz(o4+1)
      F_inzz(o4+2) = p4m_8  * d4_8         + F_inzz(o4+2)
*
*     ------------------------------------
      p1_8 = d3_8 * F_inzzm(o3-1) + p1_8
      p2_8 = d3_8 * F_inzzm(o3)   + p2_8
      p3_8 = d3_8 * F_inzzm(o3+1) + p3_8
      p4_8 = d3_8 * F_inzzm(o3+2) + p4_8
*
      F_inzz(o3-1) = p1m_8  * d3_8         + F_inzz (o3-1)
      F_inzz(o3)   = p2m_8  * d3_8         + F_inzz (o3)
      F_inzz(o3+1) = p3m_8  * d3_8         + F_inzz (o3+1)
      F_inzz(o3+2) = p4m_8  * d3_8         + F_inzz (o3+2)
*
*     ------------------------------------
      p1_8 = d2_8 * F_inzzm(o2-1) + p1_8
      p2_8 = d2_8 * F_inzzm(o2)   + p2_8
      p3_8 = d2_8 * F_inzzm(o2+1) + p3_8
      p4_8 = d2_8 * F_inzzm(o2+2) + p4_8
*
      F_inzz(o2-1) = p1m_8  * d2_8         + F_inzz (o2-1)
      F_inzz(o2)   = p2m_8  * d2_8         + F_inzz (o2)
      F_inzz(o2+1) = p3m_8  * d2_8         + F_inzz (o2+1)
      F_inzz(o2+2) = p4m_8  * d2_8         + F_inzz (o2+2)
*
*     ------------------------------------
      p1_8 = d1_8 * F_inzzm(o1-1) + p1_8
      p2_8 = d1_8 * F_inzzm(o1)   + p2_8
      p3_8 = d1_8 * F_inzzm(o1+1) + p3_8
      p4_8 = d1_8 * F_inzzm(o1+2) + p4_8
*
      F_inzz(o1-1) = p1m_8  * d1_8         + F_inzz (o1-1)
      F_inzz(o1)   = p2m_8  * d1_8         + F_inzz (o1)
      F_inzz(o1+1) = p3m_8  * d1_8         + F_inzz (o1+1)
      F_inzz(o1+2) = p4m_8  * d1_8         + F_inzz (o1+2)
*
*     ------------------------------------
      p1_8 = c4_8 * F_inm(o4-1)   + p1_8
      p2_8 = c4_8 * F_inm(o4)     + p2_8
      p3_8 = c4_8 * F_inm(o4+1)   + p3_8
      p4_8 = c4_8 * F_inm(o4+2)   + p4_8
*
      F_in(o4-1)   = p1m_8  * c4_8         + F_in(o4-1)
      F_in(o4)     = p2m_8  * c4_8         + F_in(o4)
      F_in(o4+1)   = p3m_8  * c4_8         + F_in(o4+1)
      F_in(o4+2)   = p4m_8  * c4_8         + F_in(o4+2)
*
*     ------------------------------------
      p1_8 = c3_8 * F_inm(o3-1)   + p1_8
      p2_8 = c3_8 * F_inm(o3)     + p2_8
      p3_8 = c3_8 * F_inm(o3+1)   + p3_8
      p4_8 = c3_8 * F_inm(o3+2)   + p4_8
*
      F_in(o3-1)   = p1m_8  * c3_8         + F_in(o3-1)
      F_in(o3)     = p2m_8  * c3_8         + F_in(o3)
      F_in(o3+1)   = p3m_8  * c3_8         + F_in(o3+1)
      F_in(o3+2)   = p4m_8  * c3_8         + F_in(o3+2)
*
*     ------------------------------------
      p1_8 = c2_8 * F_inm(o2-1)   + p1_8
      p2_8 = c2_8 * F_inm(o2)     + p2_8
      p3_8 = c2_8 * F_inm(o2+1)   + p3_8
      p4_8 = c2_8 * F_inm(o2+2)   + p4_8
*
      F_in(o2-1)   = p1m_8  * c2_8         + F_in(o2-1)
      F_in(o2)     = p2m_8  * c2_8         + F_in(o2)
      F_in(o2+1)   = p3m_8  * c2_8         + F_in(o2+1)
      F_in(o2+2)   = p4m_8  * c2_8         + F_in(o2+2)
*
*     ------------------------------------
      p1_8 = c1_8 * F_inm(o1-1)   + p1_8
      p2_8 = c1_8 * F_inm(o1)     + p2_8
      p3_8 = c1_8 * F_inm(o1+1)   + p3_8
      p4_8 = c1_8 * F_inm(o1+2)   + p4_8
*
      F_in(o1-1)   = p1m_8  * c1_8         + F_in(o1-1)
      F_in(o1)     = p2m_8  * c1_8         + F_in(o1)
      F_in(o1+1)   = p3m_8  * c1_8         + F_in(o1+1)
      F_in(o1+2)   = p4m_8  * c1_8         + F_in(o1+2)
*
*     ------------------------------------
*
      o1 = F_nm(n)-Adw_nit
      o2 = F_nm(n)
      o3 = F_nm(n)+Adw_nit
      o4 = F_nm(n)+Adw_nit+Adw_nit
*
*     ------------------------------------
      p1_8 = b4_8 * F_inzzm(o4-1) + p1_8
      p2_8 = b4_8 * F_inzzm(o4)   + p2_8
      p3_8 = b4_8 * F_inzzm(o4+1) + p3_8
      p4_8 = b4_8 * F_inzzm(o4+2) + p4_8
*
      F_inzz(o4-1) = p1m_8  * b4_8         + F_inzz(o4-1)
      F_inzz(o4)   = p2m_8  * b4_8         + F_inzz(o4)
      F_inzz(o4+1) = p3m_8  * b4_8         + F_inzz(o4+1)
      F_inzz(o4+2) = p4m_8  * b4_8         + F_inzz(o4+2)
*
*     ------------------------------------
      p1_8 = b3_8 * F_inzzm(o3-1) + p1_8
      p2_8 = b3_8 * F_inzzm(o3)   + p2_8
      p3_8 = b3_8 * F_inzzm(o3+1) + p3_8
      p4_8 = b3_8 * F_inzzm(o3+2) + p4_8
*
      F_inzz(o3-1) = p1m_8  * b3_8         + F_inzz(o3-1)
      F_inzz(o3)   = p2m_8  * b3_8         + F_inzz(o3)
      F_inzz(o3+1) = p3m_8  * b3_8         + F_inzz(o3+1)
      F_inzz(o3+2) = p4m_8  * b3_8         + F_inzz(o3+2)
*
*     ------------------------------------
      p1_8 = b2_8 * F_inzzm(o2-1) + p1_8
      p2_8 = b2_8 * F_inzzm(o2)   + p2_8
      p3_8 = b2_8 * F_inzzm(o2+1) + p3_8
      p4_8 = b2_8 * F_inzzm(o2+2) + p4_8
*
      F_inzz(o2-1) = p1m_8  * b2_8         + F_inzz(o2-1)
      F_inzz(o2)   = p2m_8  * b2_8         + F_inzz(o2)
      F_inzz(o2+1) = p3m_8  * b2_8         + F_inzz(o2+1)
      F_inzz(o2+2) = p4m_8  * b2_8         + F_inzz(o2+2)
*
*     ------------------------------------
      p1_8 = b1_8 * F_inzzm(o1-1) + p1_8
      p2_8 = b1_8 * F_inzzm(o1)   + p2_8
      p3_8 = b1_8 * F_inzzm(o1+1) + p3_8
      p4_8 = b1_8 * F_inzzm(o1+2) + p4_8
*
      F_inzz(o1-1) = p1m_8  * b1_8         + F_inzz(o1-1)
      F_inzz(o1)   = p2m_8  * b1_8         + F_inzz(o1)
      F_inzz(o1+1) = p3m_8  * b1_8         + F_inzz(o1+1)
      F_inzz(o1+2) = p4m_8  * b1_8         + F_inzz(o1+2)
*
*     ------------------------------------
      p1_8 = a4_8 * F_inm(o4-1)   + p1_8
      p2_8 = a4_8 * F_inm(o4)     + p2_8
      p3_8 = a4_8 * F_inm(o4+1)   + p3_8
      p4_8 = a4_8 * F_inm(o4+2)   + p4_8
*
      F_in(o4-1)   = p1m_8  * a4_8         + F_in(o4-1)
      F_in(o4)     = p2m_8  * a4_8         + F_in(o4)
      F_in(o4+1)   = p3m_8  * a4_8         + F_in(o4+1)
      F_in(o4+2)   = p4m_8  * a4_8         + F_in(o4+2)
*
*     ------------------------------------
      p1_8 = a3_8 * F_inm(o3-1)   + p1_8
      p2_8 = a3_8 * F_inm(o3)     + p2_8
      p3_8 = a3_8 * F_inm(o3+1)   + p3_8
      p4_8 = a3_8 * F_inm(o3+2)   + p4_8
*
      F_in(o3-1)   = p1m_8  * a3_8         + F_in(o3-1)
      F_in(o3)     = p2m_8  * a3_8         + F_in(o3)
      F_in(o3+1)   = p3m_8  * a3_8         + F_in(o3+1)
      F_in(o3+2)   = p4m_8  * a3_8         + F_in(o3+2)
*
*     ------------------------------------
      p1_8 = a2_8 * F_inm(o2-1)   + p1_8
      p2_8 = a2_8 * F_inm(o2)     + p2_8
      p3_8 = a2_8 * F_inm(o2+1)   + p3_8
      p4_8 = a2_8 * F_inm(o2+2)   + p4_8
*
      F_in(o2-1)   = p1m_8  * a2_8         + F_in(o2-1)
      F_in(o2)     = p2m_8  * a2_8         + F_in(o2)
      F_in(o2+1)   = p3m_8  * a2_8         + F_in(o2+1)
      F_in(o2+2)   = p4m_8  * a2_8         + F_in(o2+2)
*
*     ------------------------------------
      p1_8 = a1_8 * F_inm(o1-1)   + p1_8
      p2_8 = a1_8 * F_inm(o1)     + p2_8
      p3_8 = a1_8 * F_inm(o1+1)   + p3_8
      p4_8 = a1_8 * F_inm(o1+2)   + p4_8
*
      F_in(o1-1)   = p1m_8  * a1_8         + F_in(o1-1)
      F_in(o1)     = p2m_8  * a1_8         + F_in(o1)
      F_in(o1+1)   = p3m_8  * a1_8         + F_in(o1+1)
      F_in(o1+2)   = p4m_8  * a1_8         + F_in(o1+2)
*     ------------------------------------
*
      xx_8  =  p3_8 * p31m_8  / t1m_8   
      p3_8  = xxm_8 * p3_8    / t1m_8
*
      xm_8  =  p2_8 * p31m_8  / t3m_8   
      p3_8  = xmm_8 * p2_8    / t3m_8   + p3_8
*
      p2_8  =  p3_8 * p30m_8
      p3_8  = p20m_8* p3_8
*
      t2_8  =  p1_8 * p20m_8  / p10m_8
      p2_8  = t2m_8 * p1_8    / p10m_8  + p2_8
*
      t2_8  =  p4_8 * p30m_8  / p40m_8  + t2_8
      p3_8  = t2m_8 * p4_8    / p40m_8  + p3_8
*
      xx_8  = -t2_8 * xmm_8  + xx_8
      xm_8  =-xxm_8 * t2_8   + xm_8
*
      xx_8  =  p3_8 + xx_8
*
      xx_8  = -p2_8 + xx_8
*
      xx_8      = - xm_8 + xx_8
      F_capx(n) =   xx_8 + F_capx(n)
*
  180 continue
  190 continue
  200 continue
*
      endif
*
      return
      end