!-------------------------------------- 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 v4d_rwnest - Read (Write) from (on) NESTING WA file at each time step
*
#include "model_macros_f.h"
*

      subroutine v4d_rwnest 4,56
*
      implicit none
*
*author
*     M.Tanguay
*
*revision
* v3_03 - Tanguay M.        - Adjoint Lam configuration 
* v3_30 - Tanguay M.        - Validation for LAM version 
*
*object
*     Read (Write) from (on) NESTING WA file at each time step
*
*     ------------------------------------------------------------
*     NOTE: NESTING fields are fixed for different non-linear jobs 
*           In TLM and ADJ runs, the FIXED nesting fields are kept
*           in NESTM and NEST should be set to ZERO 
*     ------------------------------------------------------------
*
*arguments
*     none
*	
*implicits
#include "glb_ld.cdk"
#include "lun.cdk"
#include "geomg.cdk"
#include "lctl.cdk"
#include "nest.cdk"
#include "nestm.cdk"
#include "tr3d.cdk"
#include "v4dg.cdk"
#include "schm.cdk"
*
*modules
      integer  vmmlod,vmmget,vmmuld
      external vmmlod,vmmget,vmmuld
      integer pnerr, pnlkey1(20), key2(Tr3d_ntr),key2_, key2m(Tr3d_ntr), key2m_,
     %        pnlod, istep, iadd, err, igroup, n
*
      real trf,trfm
      pointer (patrf, trf(LDIST_SHAPE,*)),(patrfm, trfm(LDIST_SHAPE,*))
*
      logical plpr_L
*
*     Work arrays
*     -----------
      real work(l_ni*l_nj*l_nk)
*     ______________________________________________________
*
*
*     Flag to trace storing and retrieving of trajectory
*     --------------------------------------------------
      plpr_L = .false.
      plpr_L = plpr_L.and.Lun_out.gt.0 
*
      istep = Lctl_step 
*
*     -------------
*     NESTING state
*     -------------
*
*        ----------------
*        Read TRAJ Fields 
*        ----------------
         if(V4dg_rwnest.eq.0) then
*
*        Recover starting address 
*        ------------------------
         if(V4dg_ad_L)              iadd = V4dg_addnes_ad(istep,1) 
         if(V4dg_tl_L.or.V4dg_di_L) iadd = V4dg_addnes_tl(istep,1) 
*
         if(V4dg_tl_L.or.V4dg_di_L) igroup=0 
         if(V4dg_ad_L)              igroup=3 
*
  100    continue
*
         if(V4dg_tl_L.or.V4dg_di_L) igroup=igroup+1
         if(V4dg_ad_L)              igroup=igroup-1 
*
         if((V4dg_tl_L.or.V4dg_di_L).and.igroup.eq.3) goto 120 
         if( V4dg_ad_L              .and.igroup.eq.0) goto 120 
*
*        -------
*        GROUP=1
*        -------
         if(igroup.eq.1) then
*
           if(V4dg_tl_L.or.V4dg_ad_L) then
*
              pnlkey1(1) = VMM_KEY(nestm_um)
              pnlkey1(2) = VMM_KEY(nestm_vm)
              pnlkey1(3) = VMM_KEY(nestm_tm)
              pnlkey1(4) = VMM_KEY(nestm_psdm)
              pnlkey1(5) = VMM_KEY(nestm_pipm)
              pnlkey1(6) = VMM_KEY(nestm_fipm)
              pnlkey1(7) = VMM_KEY(nestm_tdm)
              pnlkey1(8) = VMM_KEY(nestm_fim)
              pnlkey1(9) = VMM_KEY(nestm_qm)
              pnlkey1(10)= VMM_KEY(nestm_sm)
              pnlkey1(11)= VMM_KEY(nestm_tpm)
              pnlod = 11 
*
              if (.not.Schm_hydro_L) then
                 pnlkey1(pnlod+1)=VMM_KEY(nestm_wm)
                 pnlkey1(pnlod+2)=VMM_KEY(nestm_mum)
                 pnlod = pnlod+2 
              endif
*
*             - - - - - - - - - - - - - - -
              pnerr = vmmlod(pnlkey1,pnlod)
*             - - - - - - - - - - - - - - -
              pnerr = VMM_GET_VAR(nestm_um)
              pnerr = VMM_GET_VAR(nestm_vm)
              pnerr = VMM_GET_VAR(nestm_tm)
              pnerr = VMM_GET_VAR(nestm_psdm)
              pnerr = VMM_GET_VAR(nestm_pipm)
              pnerr = VMM_GET_VAR(nestm_fipm)
              pnerr = VMM_GET_VAR(nestm_tdm)
              pnerr = VMM_GET_VAR(nestm_fim)
              pnerr = VMM_GET_VAR(nestm_qm)
              pnerr = VMM_GET_VAR(nestm_sm)
              pnerr = VMM_GET_VAR(nestm_tpm)
*
              if (.not.Schm_hydro_L) then
                  err = VMM_GET_VAR(nestm_wm)
                  err = VMM_GET_VAR(nestm_mum)
              endif
*
           elseif(V4dg_di_L) then
*
              pnlkey1(1) = VMM_KEY(nest_u)
              pnlkey1(2) = VMM_KEY(nest_v)
              pnlkey1(3) = VMM_KEY(nest_t)
              pnlkey1(4) = VMM_KEY(nest_psd)
              pnlkey1(5) = VMM_KEY(nest_pip)
              pnlkey1(6) = VMM_KEY(nest_fip)
              pnlkey1(7) = VMM_KEY(nest_td)
              pnlkey1(8) = VMM_KEY(nest_fi)
              pnlkey1(9) = VMM_KEY(nest_q)
              pnlkey1(10)= VMM_KEY(nest_s)
              pnlkey1(11)= VMM_KEY(nest_tp)
              pnlod = 11
*
              if (.not.Schm_hydro_L) then
                 pnlkey1(pnlod+1)=VMM_KEY(nest_w)
                 pnlkey1(pnlod+2)=VMM_KEY(nest_mu)
                 pnlod = pnlod+2
              endif
*
*             - - - - - - - - - - - - - - -
              pnerr = vmmlod(pnlkey1,pnlod)
*             - - - - - - - - - - - - - - -
              pnerr = VMM_GET_VAR(nest_u)
              pnerr = VMM_GET_VAR(nest_v)
              pnerr = VMM_GET_VAR(nest_t)
              pnerr = VMM_GET_VAR(nest_psd)
              pnerr = VMM_GET_VAR(nest_pip)
              pnerr = VMM_GET_VAR(nest_fip)
              pnerr = VMM_GET_VAR(nest_td)
              pnerr = VMM_GET_VAR(nest_fi)
              pnerr = VMM_GET_VAR(nest_q)
              pnerr = VMM_GET_VAR(nest_s)
              pnerr = VMM_GET_VAR(nest_tp)
*
              if (.not.Schm_hydro_L) then
                  err = VMM_GET_VAR(nest_w)
                  err = VMM_GET_VAR(nest_mu)
              endif
*
           endif
*
*          FORWARD MODEL
*          -------------
           if(V4dg_di_L) then
*
              call v4d_rwfld (nest_u,  work, l_ni,l_nj,LDIST_DIM,l_nk,
     %                     V4dg_iunns,iadd,plpr_L,'N_U',   V4dg_ad_L,0,-1)
*
              call v4d_rwfld (nest_v,  work, l_ni,l_nj,LDIST_DIM,l_nk,
     %                     V4dg_iunns,iadd,plpr_L,'N_V',   V4dg_ad_L,0,-1)
*
              call v4d_rwfld (nest_t,  work, l_ni,l_nj,LDIST_DIM,l_nk,
     %                     V4dg_iunns,iadd,plpr_L,'N_T',   V4dg_ad_L,0,-1)
*
              call v4d_rwfld (nest_psd,work,l_ni,l_nj,LDIST_DIM,l_nk,
     %                     V4dg_iunns,iadd,plpr_L,'N_PSD', V4dg_ad_L,0,-1)
*
              call v4d_rwfld (nest_pip,work,l_ni,l_nj,LDIST_DIM,l_nk,
     %                     V4dg_iunns,iadd,plpr_L,'N_PIP', V4dg_ad_L,0,-1)
*
              call v4d_rwfld (nest_fip,work,l_ni,l_nj,LDIST_DIM,l_nk,
     %                     V4dg_iunns,iadd,plpr_L,'N_FIP', V4dg_ad_L,0,-1)
*
              call v4d_rwfld (nest_td, work,l_ni,l_nj,LDIST_DIM,l_nk,
     %                     V4dg_iunns,iadd,plpr_L,'N_TD',  V4dg_ad_L,0,-1)
*
              call v4d_rwfld (nest_fi, work,l_ni,l_nj,LDIST_DIM,l_nk,
     %                     V4dg_iunns,iadd,plpr_L,'N_FI',  V4dg_ad_L,0,-1)
*
              call v4d_rwfld (nest_q,  work,l_ni,l_nj,LDIST_DIM,l_nk,
     %                     V4dg_iunns,iadd,plpr_L,'N_Q',   V4dg_ad_L,0,-1)
*
              call v4d_rwfld (nest_s,  work, l_ni,l_nj,LDIST_DIM,1,
     %                     V4dg_iunns,iadd,plpr_L,'N_S',   V4dg_ad_L,0,-1)
*
              call v4d_rwfld (nest_tp, work,l_ni,l_nj,LDIST_DIM,l_nk,
     %                     V4dg_iunns,iadd,plpr_L,'N_TP',  V4dg_ad_L,0,-1)
*
              if (.not.Schm_hydro_L) then
*
              call v4d_rwfld (nest_w, work,l_ni,l_nj,LDIST_DIM,l_nk,
     %                     V4dg_iunns,iadd,plpr_L,'N_W',   V4dg_ad_L,0,-1)
              call v4d_rwfld (nest_mu, work,l_ni,l_nj,LDIST_DIM,l_nk,
     %                     V4dg_iunns,iadd,plpr_L,'N_MU',  V4dg_ad_L,0,-1)
*
              endif
*
           endif
*
*          TANGENT LINEAR MODEL
*          --------------------
           if(V4dg_tl_L) then
*
              call v4d_rwfld (nestm_um,  work, l_ni,l_nj,LDIST_DIM,l_nk,
     %                     V4dg_iunns,iadd,plpr_L,'NM_UM',   V4dg_ad_L,0,-1)
*
              call v4d_rwfld (nestm_vm,  work, l_ni,l_nj,LDIST_DIM,l_nk,
     %                     V4dg_iunns,iadd,plpr_L,'NM_VM',   V4dg_ad_L,0,-1)
*
              call v4d_rwfld (nestm_tm,  work, l_ni,l_nj,LDIST_DIM,l_nk,
     %                     V4dg_iunns,iadd,plpr_L,'NM_TM',   V4dg_ad_L,0,-1)
*
              call v4d_rwfld (nestm_psdm,work,l_ni,l_nj,LDIST_DIM,l_nk,
     %                     V4dg_iunns,iadd,plpr_L,'NM_PSDM', V4dg_ad_L,0,-1)
*
              call v4d_rwfld (nestm_pipm,work,l_ni,l_nj,LDIST_DIM,l_nk,
     %                     V4dg_iunns,iadd,plpr_L,'NM_PIPM', V4dg_ad_L,0,-1)
*
              call v4d_rwfld (nestm_fipm,work,l_ni,l_nj,LDIST_DIM,l_nk,
     %                     V4dg_iunns,iadd,plpr_L,'NM_FIPM', V4dg_ad_L,0,-1)
*
              call v4d_rwfld (nestm_tdm, work,l_ni,l_nj,LDIST_DIM,l_nk,
     %                     V4dg_iunns,iadd,plpr_L,'NM_TDM',  V4dg_ad_L,0,-1)
*
              call v4d_rwfld (nestm_fim, work,l_ni,l_nj,LDIST_DIM,l_nk,
     %                     V4dg_iunns,iadd,plpr_L,'NM_FIM',  V4dg_ad_L,0,-1)
*
              call v4d_rwfld (nestm_qm,  work,l_ni,l_nj,LDIST_DIM,l_nk,
     %                     V4dg_iunns,iadd,plpr_L,'NM_QM',   V4dg_ad_L,0,-1)
*
              call v4d_rwfld (nestm_sm,  work, l_ni,l_nj,LDIST_DIM,1,
     %                     V4dg_iunns,iadd,plpr_L,'NM_SM',   V4dg_ad_L,0,-1)
*
              call v4d_rwfld (nestm_tpm, work,l_ni,l_nj,LDIST_DIM,l_nk,
     %                     V4dg_iunns,iadd,plpr_L,'NM_TPM',  V4dg_ad_L,0,-1)
*
              if (.not.Schm_hydro_L) then
*
              call v4d_rwfld (nestm_wm, work,l_ni,l_nj,LDIST_DIM,l_nk,
     %                     V4dg_iunns,iadd,plpr_L,'NM_WM',   V4dg_ad_L,0,-1)
              call v4d_rwfld (nestm_mum, work,l_ni,l_nj,LDIST_DIM,l_nk,
     %                     V4dg_iunns,iadd,plpr_L,'NM_MUM',  V4dg_ad_L,0,-1)
*
              endif
*
           endif
*
*          ADJOINT MODEL
*          -------------
           if(V4dg_ad_L) then
*
              if (.not.Schm_hydro_L) then
*
              call v4d_rwfld (nestm_mum,  work, l_ni,l_nj,LDIST_DIM,l_nk,
     %                     V4dg_iunns,iadd,plpr_L,'NM_MUM',  V4dg_ad_L,
     %                     l_ni*l_nj*l_nk,-1)
*
              call v4d_rwfld (nestm_wm,  work, l_ni,l_nj,LDIST_DIM,l_nk,
     %                     V4dg_iunns,iadd,plpr_L,'NM_WM',   V4dg_ad_L,
     %                     l_ni*l_nj*l_nk,-1)
*
              endif
*
              call v4d_rwfld (nestm_tpm, work, l_ni,l_nj,LDIST_DIM,l_nk,
     %                     V4dg_iunns,iadd,plpr_L,'NM_TPM',  V4dg_ad_L,
     %                     l_ni*l_nj,-1)
*
              call v4d_rwfld (nestm_sm,  work,l_ni,l_nj,LDIST_DIM,1,
     %                     V4dg_iunns,iadd,plpr_L,'NM_SM',   V4dg_ad_L,
     %                     l_ni*l_nj*l_nk,-1)
*
              call v4d_rwfld (nestm_qm,  work, l_ni,l_nj,LDIST_DIM,l_nk,
     %                     V4dg_iunns,iadd,plpr_L,'NM_QM',   V4dg_ad_L,
     %                     l_ni*l_nj*l_nk,-1)
*
              call v4d_rwfld (nestm_fim, work, l_ni,l_nj,LDIST_DIM,l_nk,
     %                     V4dg_iunns,iadd,plpr_L,'NM_FIM',  V4dg_ad_L,
     %                     l_ni*l_nj*l_nk,-1)
*
              call v4d_rwfld (nestm_tdm, work, l_ni,l_nj,LDIST_DIM,l_nk,
     %                     V4dg_iunns,iadd,plpr_L,'NM_TDM',  V4dg_ad_L,
     %                     l_ni*l_nj*l_nk,-1)
*
              call v4d_rwfld (nestm_fipm,work, l_ni,l_nj,LDIST_DIM,l_nk,
     %                     V4dg_iunns,iadd,plpr_L,'NM_FIPM', V4dg_ad_L,
     %                     l_ni*l_nj*l_nk,-1)
*
              call v4d_rwfld (nestm_pipm,work, l_ni,l_nj,LDIST_DIM,l_nk,
     %                     V4dg_iunns,iadd,plpr_L,'NM_PIPM', V4dg_ad_L,
     %                     l_ni*l_nj*l_nk,-1)
*
              call v4d_rwfld (nestm_psdm,work, l_ni,l_nj,LDIST_DIM,l_nk,
     %                     V4dg_iunns,iadd,plpr_L,'NM_PSDM', V4dg_ad_L,
     %                     l_ni*l_nj*l_nk,-1)
*
              call v4d_rwfld (nestm_tm,work, l_ni,l_nj,LDIST_DIM,l_nk,
     %                     V4dg_iunns,iadd,plpr_L,'NM_TM',   V4dg_ad_L,
     %                     l_ni*l_nj*l_nk,-1)
*
              call v4d_rwfld (nestm_vm,  work, l_ni,l_nj,LDIST_DIM,l_nk,
     %                     V4dg_iunns,iadd,plpr_L,'NM_VM',   V4dg_ad_L,
     %                     l_ni*l_nj*l_nk,-1)
*
              call v4d_rwfld (nestm_um,  work, l_ni,l_nj,LDIST_DIM,l_nk,
     %                     V4dg_iunns,iadd,plpr_L,'NM_UM',   V4dg_ad_L,
     %                     l_ni*l_nj*l_nk,-1)
*
           endif
*
         err = vmmuld(pnlkey1,pnlod)
*
         goto 100
*
         endif
*
*        -------
*        GROUP=2
*        -------
         if(igroup.eq.2) then
*
           if(V4dg_di_L) then
             key2_ = VMM_KEY (nest_tr)
             do n=1,Tr3d_ntr
                key2(n) = key2_ + n
             end do
           endif
*
           if(V4dg_tl_L.or.V4dg_ad_L) then
             key2m_ = VMM_KEY (nestm_trm)
             do n=1,Tr3d_ntr
                key2m(n) = key2m_ + n
             end do
           endif
*
           if (Tr3d_ntr.gt.0) then
              if(V4dg_di_L             ) err = vmmlod(key2, Tr3d_ntr)
              if(V4dg_tl_L.or.V4dg_ad_L) err = vmmlod(key2m,Tr3d_ntr)
              do n=1,Tr3d_ntr
                 if(V4dg_di_L             ) err = vmmget(key2 (n),patrf, trf )
                 if(V4dg_tl_L.or.V4dg_ad_L) err = vmmget(key2m(n),patrfm,trfm)
*
                 if(V4dg_di_L) then
                    call v4d_rwfld (trf, work, l_ni,l_nj,LDIST_DIM,l_nk,
     %                           V4dg_iunns,iadd,plpr_L,'N_TR',     V4dg_ad_L,0,-1)
                 endif
                 if(V4dg_tl_L) then
                    call v4d_rwfld (trfm,work, l_ni,l_nj,LDIST_DIM,l_nk,
     %                           V4dg_iunns,iadd,plpr_L,'NM_TRM',   V4dg_ad_L,0,-1)
                 endif
                 if(V4dg_ad_L) then
                    call v4d_rwfld (trfm,work, l_ni,l_nj,LDIST_DIM,l_nk,
     %                           V4dg_iunns,iadd,plpr_L,'NM_TRM',   V4dg_ad_L,
     %                           l_ni*l_nj*l_nk,-1)
                 endif
              end do
              if(V4dg_di_L             ) err = vmmuld(key2, Tr3d_ntr)
              if(V4dg_tl_L.or.V4dg_ad_L) err = vmmuld(key2m,Tr3d_ntr)
            endif
*
           goto 100
*
         endif
*
*        -----------------
*        Write TRAJ Fields 
*        -----------------
         elseif(V4dg_rwnest.eq.1) then
*
         igroup=0
*
  110    continue
*
         igroup=igroup+1
         if(igroup.eq.3) goto 120
*
*        -------
*        GROUP=1
*        -------
         if(igroup.eq.1) then
*
           pnlkey1(1) = VMM_KEY(nest_u)
           pnlkey1(2) = VMM_KEY(nest_v)
           pnlkey1(3) = VMM_KEY(nest_t)
           pnlkey1(4) = VMM_KEY(nest_psd)
           pnlkey1(5) = VMM_KEY(nest_pip)
           pnlkey1(6) = VMM_KEY(nest_fip)
           pnlkey1(7) = VMM_KEY(nest_td)
           pnlkey1(8) = VMM_KEY(nest_fi)
           pnlkey1(9) = VMM_KEY(nest_q)
           pnlkey1(10)= VMM_KEY(nest_s)
           pnlkey1(11)= VMM_KEY(nest_tp)
           pnlod = 11 
*
           if (.not.Schm_hydro_L) then
               pnlkey1(pnlod+1)=VMM_KEY(nest_w)
               pnlkey1(pnlod+2)=VMM_KEY(nest_mu)
               pnlod = pnlod+2
           endif
*
*          - - - - - - - - - - - - - - -
           pnerr = vmmlod(pnlkey1,pnlod)
*          - - - - - - - - - - - - - - -
*
           pnerr = VMM_GET_VAR(nest_u)
           pnerr = VMM_GET_VAR(nest_v)
           pnerr = VMM_GET_VAR(nest_t)
           pnerr = VMM_GET_VAR(nest_psd)
           pnerr = VMM_GET_VAR(nest_pip)
           pnerr = VMM_GET_VAR(nest_fip)
           pnerr = VMM_GET_VAR(nest_td)
           pnerr = VMM_GET_VAR(nest_fi)
           pnerr = VMM_GET_VAR(nest_q)
           pnerr = VMM_GET_VAR(nest_s)
           pnerr = VMM_GET_VAR(nest_tp)
*
           if (.not.Schm_hydro_L) then
               err = VMM_GET_VAR(nest_w)
               err = VMM_GET_VAR(nest_mu)
           endif
*
*          Store starting TLM address
*          --------------------------
           V4dg_addnes_tl(istep,1) = V4dg_addns 
           iadd                    = V4dg_addns 
*
              call v4d_rwfld (nest_u,  work, l_ni,l_nj,LDIST_DIM,l_nk,
     %                     V4dg_iunns,iadd,plpr_L,'N_U',   V4dg_ad_L,0,1)
*
              call v4d_rwfld (nest_v,  work, l_ni,l_nj,LDIST_DIM,l_nk,
     %                     V4dg_iunns,iadd,plpr_L,'N_V',   V4dg_ad_L,0,1)
*
              call v4d_rwfld (nest_t,  work, l_ni,l_nj,LDIST_DIM,l_nk,
     %                     V4dg_iunns,iadd,plpr_L,'N_T',   V4dg_ad_L,0,1)
*
              call v4d_rwfld (nest_psd,work,l_ni,l_nj,LDIST_DIM,l_nk,
     %                     V4dg_iunns,iadd,plpr_L,'N_PSD', V4dg_ad_L,0,1)
*
              call v4d_rwfld (nest_pip,work,l_ni,l_nj,LDIST_DIM,l_nk,
     %                     V4dg_iunns,iadd,plpr_L,'N_PIP', V4dg_ad_L,0,1)
*
              call v4d_rwfld (nest_fip,work,l_ni,l_nj,LDIST_DIM,l_nk,
     %                     V4dg_iunns,iadd,plpr_L,'N_FIP', V4dg_ad_L,0,1)
*
              call v4d_rwfld (nest_td, work,l_ni,l_nj,LDIST_DIM,l_nk,
     %                     V4dg_iunns,iadd,plpr_L,'N_TD',  V4dg_ad_L,0,1)
*
              call v4d_rwfld (nest_fi, work,l_ni,l_nj,LDIST_DIM,l_nk,
     %                     V4dg_iunns,iadd,plpr_L,'N_FI',  V4dg_ad_L,0,1)
*
              call v4d_rwfld (nest_q,  work,l_ni,l_nj,LDIST_DIM,l_nk,
     %                     V4dg_iunns,iadd,plpr_L,'N_Q',   V4dg_ad_L,0,1)
*
              call v4d_rwfld (nest_s,  work, l_ni,l_nj,LDIST_DIM,1,
     %                     V4dg_iunns,iadd,plpr_L,'N_S',   V4dg_ad_L,0,1)
*
              call v4d_rwfld (nest_tp, work,l_ni,l_nj,LDIST_DIM,l_nk,
     %                     V4dg_iunns,iadd,plpr_L,'N_TP',  V4dg_ad_L,0,1)
*
              if (.not.Schm_hydro_L) then
*
              call v4d_rwfld (nest_w, work,l_ni,l_nj,LDIST_DIM,l_nk,
     %                     V4dg_iunns,iadd,plpr_L,'N_W',   V4dg_ad_L,0,1)
*
              call v4d_rwfld (nest_mu, work,l_ni,l_nj,LDIST_DIM,l_nk,
     %                     V4dg_iunns,iadd,plpr_L,'N_MU',  V4dg_ad_L,0,1)
*
              endif
*
            err = vmmuld(pnlkey1,pnlod)
*
            goto 110
*
         endif
*
*        -------
*        GROUP=2
*        -------
         if(igroup.eq.2) then
*
           key2_ = VMM_KEY (nest_tr)
           do n=1,Tr3d_ntr
              key2(n) = key2_ + n
           end do
           if (Tr3d_ntr.gt.0) then
              err = vmmlod(key2,Tr3d_ntr)
              do n=1,Tr3d_ntr
                 err = vmmget(key2(n),patrf,trf)
*
                 call v4d_rwfld (trf, work,l_ni,l_nj,LDIST_DIM,l_nk,
     %                        V4dg_iunns,iadd,plpr_L,'N_TR',  V4dg_ad_L,0,1)
              enddo
              err = vmmuld(key2,Tr3d_ntr)
           endif

*          Store starting ADJOINT address 
*          ------------------------------
           V4dg_addnes_ad(istep,1) = iadd - l_ni*l_nj*l_nk
           V4dg_addns              = iadd
*
           goto 110
*
         endif
*
      endif
*
  120 continue
*
      return
      end