!-------------------------------------- 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_rwtraj - Read (Write) from (on) TRAJ WA file at each time step
*
#include "model_macros_f.h"
*
subroutine v4d_rwtraj (numtr,u,v,w) 47,217
*
implicit none
*
integer numtr
*
real u(*),v(*),w(*)
*
*author
* M.Tanguay
*
*revision
* v2_10 - Tanguay M. - initial MPI version
* v2_21 - Tanguay M. - ADJ of HO option
* - ADJ of vertical sponge layer
* v2_31 - Tanguay M. - adapt for vertical hybrid coordinate
* - change parameters of v4d_rwfld
* - introduce v4d_rwfldx
* - adapt for tracers in tr3d
* v3_03 - Tanguay M. - Adjoint NoHyd configuration
* v3_11 - Tanguay M. - Remove HU in numtr.eq.1
* - ADJ of digital filter
* v3_20 - Tanguay M. - Option of storing instead of redoing TRAJ
* v3_30 - Tanguay M. - Validation for LAM Nonhyd
* v3_31 - Tanguay M. - Control BC
* v3_31 - Tanguay M. - SETTLS option
*
*object
*
*
*arguments
* Name I/O Description
*-------------------------------------------------------------------------
* numtr I Indicates which portion of TRAJECTORY to Read-Write
* u,v,w I Not VMM Fields requested when numtr.eq.13
*-------------------------------------------------------------------------
*
*-------------------------------------------------------------------------
* CAUTION: Parameters list was not extended when numtr.ne.13
*-------------------------------------------------------------------------
*
*implicits
#include "glb_ld.cdk"
#include "lun.cdk"
#include "geomg.cdk"
#include "lctl.cdk"
#include "orh.cdk"
#include "vth.cdk"
#include "vthm.cdk"
#include "vt1.cdk"
#include "vt1m.cdk"
#include "vtw.cdk"
#include "vtwm.cdk"
#include "vt0.cdk"
#include "vt0m.cdk"
#include "vtx.cdk"
#include "vtxm.cdk"
#include "rhsc.cdk"
#include "rhscm.cdk"
#include "v4dg.cdk"
#include "cstv.cdk"
#include "rstr.cdk"
#include "init.cdk"
#include "schm.cdk"
#include "cori.cdk"
#include "hzd.cdk"
#include "vspng.cdk"
#include "dcst.cdk"
#include "tr3d.cdk"
#include "p_geof.cdk"
#include "v4dr.cdk"
*
*modules
integer vmmlod,vmmget,vmmuld
external vmmlod,vmmget,vmmuld
integer pnerr,pnlkey1(20),pnlod,err,istep,i,j,k,n,iadd
*
integer key1_,key1(Tr3d_ntr),key1m_,key1m(Tr3d_ntr)
real tr,trm,tr0,tr0m
pointer (patr, tr (LDIST_SHAPE,*)),(patrm, trm (LDIST_SHAPE,*))
pointer (patr0,tr0(LDIST_SHAPE,*)),(patr0m,tr0m(LDIST_SHAPE,*))
*
logical plpr_L
*
* Work arrays
* -----------
real work(l_ni*l_nj*l_nk)
*
* ______________________________________________________
*
if( numtr.gt.17 ) call gem_stop
('v4d_rwtraj 1',-1)
if(Lctl_step .gt.100 ) call gem_stop
('v4d_rwtraj 2',-1)
if(Orh_icn .gt.2 ) call gem_stop
('v4d_rwtraj 3',-1)
* ______________________________________________________
*
*
* Flag to trace storing and retrieving of trajectory
* --------------------------------------------------
plpr_L = .false.
plpr_L = plpr_L.and.Lun_out.gt.0
*
istep = Lctl_step
*
* Create a monotonic function of time step (istep) to allow for
* unique addresses when digital filter is in use
* -------------------------------------------------------------
if(Init_balgm_L.and.Rstri_idon_L) istep = Lctl_step - (Init_dfnp-1)/2 + Init_dfnp - 1
*
* ------------------
* TRAJ initial state
* ------------------
if(numtr.eq.1) then
*
* ----------------
* Read TRAJ Fields
* ----------------
if(V4dg_rwtr.eq.0) then
*
* Recover starting address
* ------------------------
if(V4dg_ad_L) iadd = V4dg_addtab_ad(numtr,istep,1)
if(V4dg_tl_L) iadd = V4dg_addtab_tl(numtr,istep,1)
*
pnlkey1(1) = VMM_KEY(ut1m)
pnlkey1(2) = VMM_KEY(vt1m)
pnlkey1(3) = VMM_KEY(tpt1m)
pnlkey1(4) = VMM_KEY(st1m)
pnlod = 4
if (.not.Schm_hydro_L) then
pnlkey1(5) = VMM_KEY(fipt1m)
pnlod = 5
endif
* - - - - - - - - - - - - - - -
pnerr = vmmlod(pnlkey1,pnlod)
* - - - - - - - - - - - - - - -
pnerr = VMM_GET_VAR(ut1m)
pnerr = VMM_GET_VAR(vt1m)
pnerr = VMM_GET_VAR(tpt1m)
pnerr = VMM_GET_VAR(st1m)
if (.not.Schm_hydro_L) pnerr = VMM_GET_VAR(fipt1m)
*
* TANGENT LINEAR MODEL
* --------------------
if(V4dg_tl_L) then
*
call v4d_rwfld
(ut1m,work, l_ni,l_nj,LDIST_DIM,l_nk,
% V4dg_iuntr,iadd,plpr_L,'UT1M', V4dg_ad_L,0,-1)
*
call v4d_rwfld
(vt1m,work, l_ni,l_nj,LDIST_DIM,l_nk,
% V4dg_iuntr,iadd,plpr_L,'VT1M', V4dg_ad_L,0,-1)
*
call v4d_rwfld
(st1m,work, l_ni,l_nj,LDIST_DIM,1,
% V4dg_iuntr,iadd,plpr_L,'ST1M', V4dg_ad_L,0,-1)
*
call v4d_rwfld
(tpt1m,work,l_ni,l_nj,LDIST_DIM,l_nk,
% V4dg_iuntr,iadd,plpr_L,'TPT1M', V4dg_ad_L,0,-1)
*
if (.not.Schm_hydro_L) then
call v4d_rwfld
(fipt1m,work,l_ni,l_nj,LDIST_DIM,l_nk,
% V4dg_iuntr,iadd,plpr_L,'FPT1M', V4dg_ad_L,0,-1)
endif
*
endif
*
* ADJOINT MODEL
* -------------
if(V4dg_ad_L) then
*
if (.not.Schm_hydro_L) then
call v4d_rwfld
(fipt1m,work,l_ni,l_nj,LDIST_DIM,l_nk,
% V4dg_iuntr,iadd,plpr_L,'FPT1M', V4dg_ad_L,
% l_ni*l_nj*l_nk,-1)
endif
*
call v4d_rwfld
(tpt1m,work,l_ni,l_nj,LDIST_DIM,l_nk,
% V4dg_iuntr,iadd,plpr_L,'TPT1M', V4dg_ad_L,
% l_ni*l_nj,-1)
*
call v4d_rwfld
(st1m,work, l_ni,l_nj,LDIST_DIM,1,
% V4dg_iuntr,iadd,plpr_L,'ST1M', V4dg_ad_L,
% l_ni*l_nj*l_nk,-1)
*
call v4d_rwfld
(vt1m,work, l_ni,l_nj,LDIST_DIM,l_nk,
% V4dg_iuntr,iadd,plpr_L,'VT1M', V4dg_ad_L,
% l_ni*l_nj*l_nk,-1)
*
call v4d_rwfld
(ut1m,work, l_ni,l_nj,LDIST_DIM,l_nk,
% V4dg_iuntr,iadd,plpr_L,'UT1M', V4dg_ad_L,
% l_ni*l_nj*l_nk,-1)
*
endif
*
* -----------------
* Write TRAJ Fields
* -----------------
elseif(V4dg_rwtr.eq.1) then
*
pnlkey1(1) = VMM_KEY(ut1)
pnlkey1(2) = VMM_KEY(vt1)
pnlkey1(3) = VMM_KEY(tpt1)
pnlkey1(4) = VMM_KEY(st1)
pnlod = 4
if (.not.Schm_hydro_L) then
pnlkey1(5) = VMM_KEY(fipt1)
pnlod = 5
endif
* - - - - - - - - - - - - - - -
pnerr = vmmlod(pnlkey1,pnlod)
* - - - - - - - - - - - - - - -
pnerr = VMM_GET_VAR(ut1)
pnerr = VMM_GET_VAR(vt1)
pnerr = VMM_GET_VAR(tpt1)
pnerr = VMM_GET_VAR(st1)
if (.not.Schm_hydro_L) pnerr = VMM_GET_VAR(fipt1)
*
* Store starting TLM address
* --------------------------
V4dg_addtab_tl(numtr,istep,1) = V4dg_addtr
iadd = V4dg_addtr
*
call v4d_rwfld
(ut1,work, l_ni,l_nj,LDIST_DIM,l_nk,
% V4dg_iuntr,iadd,plpr_L,'UT1', V4dg_ad_L,0,1)
*
call v4d_rwfld
(vt1,work, l_ni,l_nj,LDIST_DIM,l_nk,
% V4dg_iuntr,iadd,plpr_L,'VT1', V4dg_ad_L,0,1)
*
call v4d_rwfld
(st1,work, l_ni,l_nj,LDIST_DIM,1,
% V4dg_iuntr,iadd,plpr_L,'ST1', V4dg_ad_L,0,1)
*
call v4d_rwfld
(tpt1,work,l_ni,l_nj,LDIST_DIM,l_nk,
% V4dg_iuntr,iadd,plpr_L,'TPT1', V4dg_ad_L,0,1)
*
if (.not.Schm_hydro_L) then
call v4d_rwfld
(fipt1,work,l_ni,l_nj,LDIST_DIM,l_nk,
% V4dg_iuntr,iadd,plpr_L,'FPT1', V4dg_ad_L,0,1)
endif
*
* Store starting ADJOINT address
* ------------------------------
V4dg_addtab_ad(numtr,istep,1) = iadd - l_ni*l_nj*l_nk
V4dg_addtr = iadd
*
endif
*
endif
*
* ----------------------------------------------
* TRAJ PIPT1,QPT1M (No Hyd) before HZD diffusion
* ----------------------------------------------
if(numtr.eq.2) then
*
* ----------------
* Read TRAJ Fields
* ----------------
if(V4dg_rwtr.eq.0) then
*
* Recover starting address
* ------------------------
if(V4dg_ad_L) iadd = V4dg_addtab_ad(numtr,istep,1)
if(V4dg_tl_L) iadd = V4dg_addtab_tl(numtr,istep,1)
*
pnlkey1(1) = VMM_KEY(pipt1m)
if (.not. Schm_hydro_L) then
pnlkey1(2) = VMM_KEY(qpt1m)
pnlod = 2
else
pnlod = 1
endif
* - - - - - - - - - - - - - - -
pnerr = vmmlod(pnlkey1,pnlod)
* - - - - - - - - - - - - - - -
pnerr = VMM_GET_VAR(pipt1m)
if (.not. Schm_hydro_L) pnerr = VMM_GET_VAR(qpt1m)
*
* TANGENT LINEAR MODEL
* --------------------
if(V4dg_tl_L) then
*
call v4d_rwfld
(pipt1m,work,l_ni,l_nj,LDIST_DIM,l_nk,
% V4dg_iuntr,iadd,plpr_L,'PIPT1M', V4dg_ad_L,0,-1)
*
if (.not. Schm_hydro_L) then
call v4d_rwfld
(qpt1m, work,l_ni,l_nj,LDIST_DIM,l_nk,
% V4dg_iuntr,iadd,plpr_L,'QPT1M', V4dg_ad_L,0,-1)
endif
*
endif
*
* ADJOINT MODEL
* -------------
if(V4dg_ad_L) then
*
if (.not. Schm_hydro_L) then
call v4d_rwfld
(qpt1m, work, l_ni,l_nj,LDIST_DIM,l_nk,
% V4dg_iuntr,iadd,plpr_L,'QPT1M', V4dg_ad_L,
% l_ni*l_nj*l_nk,-1)
endif
*
call v4d_rwfld
(pipt1m,work,l_ni,l_nj,LDIST_DIM,l_nk,
% V4dg_iuntr,iadd,plpr_L,'PIPT1M', V4dg_ad_L,
% l_ni*l_nj*l_nk,-1)
*
endif
*
* -----------------
* Write TRAJ Fields
* -----------------
elseif(V4dg_rwtr.eq.1) then
*
pnlkey1( 1) = VMM_KEY(pipt1)
if (.not. Schm_hydro_L) then
pnlkey1(2) = VMM_KEY(qpt1)
pnlod = 2
else
pnlod = 1
endif
* - - - - - - - - - - - - - - -
pnerr = vmmlod(pnlkey1,pnlod)
* - - - - - - - - - - - - - - -
pnerr = VMM_GET_VAR(pipt1)
if (.not. Schm_hydro_L) pnerr = VMM_GET_VAR(qpt1)
*
* Store starting TLM address
* --------------------------
V4dg_addtab_tl(numtr,istep,1) = V4dg_addtr
iadd = V4dg_addtr
*
call v4d_rwfld
(pipt1,work,l_ni,l_nj,LDIST_DIM,l_nk,
% V4dg_iuntr,iadd,plpr_L,'PIPT1', V4dg_ad_L,0,1)
*
if (.not. Schm_hydro_L) then
call v4d_rwfld
(qpt1, work,l_ni,l_nj,LDIST_DIM,l_nk,
% V4dg_iuntr,iadd,plpr_L,'QPT1', V4dg_ad_L,0,1)
endif
*
* Store starting ADJOINT address
* ------------------------------
V4dg_addtab_ad(numtr,istep,1) = iadd - l_ni*l_nj*l_nk
V4dg_addtr = iadd
*
endif
*
endif
*
* --------------------------------------------------------------
* TRAJ predictive variables
* NOTE:Fields are recovered at a fixed icn and keep their values
* --------------------------------------------------------------
if(numtr.eq.3) then
*
* -----------------------------------------------------------------
* NOTE: The relationship between TT1 and TPT1, FIT1 and FIPT1
* as defined in BACP_2 is not valid to bit pattern
* due to diffusion and physics. It is why both TRAJ are kept.
* This could be relaxed if space is restricted.
* -----------------------------------------------------------------
*
* ----------------
* Read TRAJ Fields
* ----------------
if(V4dg_rwtr.eq.0) then
*
* Recover starting address
* ------------------------
if(V4dg_ad_L) iadd = V4dg_addtab_ad(numtr,istep,1)
if(V4dg_tl_L) iadd = V4dg_addtab_tl(numtr,istep,1)
*
pnlkey1( 1)= VMM_KEY(ut1m )
pnlkey1( 2)= VMM_KEY(vt1m )
pnlkey1( 3)= VMM_KEY(tdt1m )
pnlkey1( 4)= VMM_KEY(tt1m )
pnlkey1( 5)= VMM_KEY(fit1m )
pnlkey1( 6)= VMM_KEY(tpt1m )
pnlkey1( 7)= VMM_KEY(fipt1m)
pnlkey1( 8)= VMM_KEY(tplt1m)
pnlkey1( 9)= VMM_KEY(psdt1m)
pnlkey1(10)= VMM_KEY(qt1m )
pnlkey1(11)= VMM_KEY(st1m )
pnlkey1(12)= VMM_KEY(pipt1m)
pnlkey1(13)= VMM_KEY(topo )
pnlod = 13
*
if (.not. Schm_hydro_L) then
pnlkey1(pnlod+1)= VMM_KEY(wt1m )
pnlkey1(pnlod+2)= VMM_KEY(qpt1m)
pnlkey1(pnlod+3)= VMM_KEY(mut1m)
pnlod = pnlod+3
endif
*
* - - - - - - - - - - - - - - -
pnerr = vmmlod(pnlkey1,pnlod)
* - - - - - - - - - - - - - - -
pnerr = VMM_GET_VAR(ut1m )
pnerr = VMM_GET_VAR(vt1m )
pnerr = VMM_GET_VAR(tdt1m )
pnerr = VMM_GET_VAR(tt1m )
pnerr = VMM_GET_VAR(fit1m )
pnerr = VMM_GET_VAR(tpt1m )
pnerr = VMM_GET_VAR(fipt1m)
pnerr = VMM_GET_VAR(tplt1m)
pnerr = VMM_GET_VAR(psdt1m)
pnerr = VMM_GET_VAR(qt1m )
pnerr = VMM_GET_VAR(st1m )
pnerr = VMM_GET_VAR(pipt1m)
pnerr = VMM_GET_VAR(topo )
*
if (.not. Schm_hydro_L) then
pnerr = VMM_GET_VAR(wt1m )
pnerr = VMM_GET_VAR(qpt1m)
pnerr = VMM_GET_VAR(mut1m)
endif
*
* TANGENT LINEAR MODEL
* --------------------
if(V4dg_tl_L) then
*
call v4d_rwfld
(ut1m, work,l_ni,l_nj,LDIST_DIM,l_nk,
% V4dg_iuntr,iadd,plpr_L,'UT1M', V4dg_ad_L,0,-1)
*
call v4d_rwfld
(vt1m, work,l_ni,l_nj,LDIST_DIM,l_nk,
% V4dg_iuntr,iadd,plpr_L,'VT1M', V4dg_ad_L,0,-1)
*
call v4d_rwfld
(tdt1m, work,l_ni,l_nj,LDIST_DIM,l_nk,
% V4dg_iuntr,iadd,plpr_L,'TDT1M', V4dg_ad_L,0,-1)
*
call v4d_rwfld
(tt1m, work,l_ni,l_nj,LDIST_DIM,l_nk,
% V4dg_iuntr,iadd,plpr_L,'TT1M', V4dg_ad_L,0,-1)
*
call v4d_rwfld
(fit1m, work,l_ni,l_nj,LDIST_DIM,l_nk,
% V4dg_iuntr,iadd,plpr_L,'FIT1M', V4dg_ad_L,0,-1)
*
call v4d_rwfld
(tpt1m, work,l_ni,l_nj,LDIST_DIM,l_nk,
% V4dg_iuntr,iadd,plpr_L,'TPT1M', V4dg_ad_L,0,-1)
*
call v4d_rwfld
(fipt1m,work,l_ni,l_nj,LDIST_DIM,l_nk,
% V4dg_iuntr,iadd,plpr_L,'FIPT1M',V4dg_ad_L,0,-1)
*
call v4d_rwfld
(tplt1m,work,l_ni,l_nj,LDIST_DIM,l_nk,
% V4dg_iuntr,iadd,plpr_L,'TPLT1M',V4dg_ad_L,0,-1)
*
call v4d_rwfld
(psdt1m,work,l_ni,l_nj,LDIST_DIM,l_nk,
% V4dg_iuntr,iadd,plpr_L,'PSDT1M',V4dg_ad_L,0,-1)
*
key1m_ = VMM_KEY (trt1m)
do n=1,Tr3d_ntr
key1m(n) = key1m_ + n
end do
if (Tr3d_ntr.gt.0) then
err = vmmlod(key1m,Tr3d_ntr)
do n=1,Tr3d_ntr
err = vmmget(key1m(n),patrm,trm)
call v4d_rwfld
(trm,work,l_ni,l_nj,LDIST_DIM,l_nk,
% V4dg_iuntr,iadd,plpr_L,'TRT1M', V4dg_ad_L,0,-1)
end do
err = vmmuld(key1m,Tr3d_ntr)
endif
*
call v4d_rwfld
(qt1m, work,l_ni,l_nj,LDIST_DIM,l_nk,
% V4dg_iuntr,iadd,plpr_L,'QT1M', V4dg_ad_L,0,-1)
*
call v4d_rwfld
(st1m, work,l_ni,l_nj,LDIST_DIM,1,
% V4dg_iuntr,iadd,plpr_L,'ST1M', V4dg_ad_L,0,-1)
*
call v4d_rwfld
(pipt1m,work,l_ni,l_nj,LDIST_DIM,l_nk,
% V4dg_iuntr,iadd,plpr_L,'PIPT1M',V4dg_ad_L,0,-1)
*
if (.not. Schm_hydro_L) then
call v4d_rwfld
(wt1m, work,l_ni,l_nj,LDIST_DIM,l_nk,
% V4dg_iuntr,iadd,plpr_L,'WT1M', V4dg_ad_L,0,-1)
*
call v4d_rwfld
(qpt1m, work,l_ni,l_nj,LDIST_DIM,l_nk,
% V4dg_iuntr,iadd,plpr_L,'QPT1M', V4dg_ad_L,0,-1)
*
call v4d_rwfld
(mut1m, work,l_ni,l_nj,LDIST_DIM,l_nk,
% V4dg_iuntr,iadd,plpr_L,'MUT1M', V4dg_ad_L,0,-1)
endif
*
endif
*
* ADJOINT MODEL
* -------------
if(V4dg_ad_L) then
*
if (.not. Schm_hydro_L) then
*
call v4d_rwfld
(mut1m, work,l_ni,l_nj,LDIST_DIM,l_nk,
% V4dg_iuntr,iadd,plpr_L,'MUT1M', V4dg_ad_L,
% l_ni*l_nj*l_nk,-1)
*
call v4d_rwfld
(qpt1m, work,l_ni,l_nj,LDIST_DIM,l_nk,
% V4dg_iuntr,iadd,plpr_L,'QPT1M', V4dg_ad_L,
% l_ni*l_nj*l_nk,-1)
*
call v4d_rwfld
(wt1m, work,l_ni,l_nj,LDIST_DIM,l_nk,
% V4dg_iuntr,iadd,plpr_L,'WT1M', V4dg_ad_L,
% l_ni*l_nj*l_nk,-1)
*
endif
*
call v4d_rwfld
(pipt1m,work,l_ni,l_nj,LDIST_DIM,l_nk,
% V4dg_iuntr,iadd,plpr_L,'PIPT1M',V4dg_ad_L,
% l_ni*l_nj,-1)
*
call v4d_rwfld
(st1m, work,l_ni,l_nj,LDIST_DIM,1,
% V4dg_iuntr,iadd,plpr_L,'ST1M', V4dg_ad_L,
% l_ni*l_nj*l_nk,-1)
*
call v4d_rwfld
(qt1m, work,l_ni,l_nj,LDIST_DIM,l_nk,
% V4dg_iuntr,iadd,plpr_L,'QT1M', V4dg_ad_L,
% l_ni*l_nj*l_nk,-1)
*
key1m_ = VMM_KEY (trt1m)
do n=1,Tr3d_ntr
key1m(n) = key1m_ + n
end do
if (Tr3d_ntr.gt.0) then
err = vmmlod(key1m,Tr3d_ntr)
do n=Tr3d_ntr,1,-1
err = vmmget(key1m(n),patrm,trm)
call v4d_rwfld
(trm,work,l_ni,l_nj,LDIST_DIM,l_nk,
% V4dg_iuntr,iadd,plpr_L,'TRT1M', V4dg_ad_L,
% l_ni*l_nj*l_nk,-1)
end do
err = vmmuld(key1m,Tr3d_ntr)
endif
*
call v4d_rwfld
(psdt1m,work,l_ni,l_nj,LDIST_DIM,l_nk,
% V4dg_iuntr,iadd,plpr_L,'PSDT1M',V4dg_ad_L,
% l_ni*l_nj*l_nk,-1)
*
call v4d_rwfld
(tplt1m,work,l_ni,l_nj,LDIST_DIM,l_nk,
% V4dg_iuntr,iadd,plpr_L,'TPLT1M',V4dg_ad_L,
% l_ni*l_nj*l_nk,-1)
*
call v4d_rwfld
(fipt1m,work,l_ni,l_nj,LDIST_DIM,l_nk,
% V4dg_iuntr,iadd,plpr_L,'FIPT1M',V4dg_ad_L,
% l_ni*l_nj*l_nk,-1)
*
call v4d_rwfld
(tpt1m, work,l_ni,l_nj,LDIST_DIM,l_nk,
% V4dg_iuntr,iadd,plpr_L,'TPT1M', V4dg_ad_L,
% l_ni*l_nj*l_nk,-1)
*
call v4d_rwfld
(fit1m, work,l_ni,l_nj,LDIST_DIM,l_nk,
% V4dg_iuntr,iadd,plpr_L,'FIT1M', V4dg_ad_L,
% l_ni*l_nj*l_nk,-1)
*
call v4d_rwfld
(tt1m, work,l_ni,l_nj,LDIST_DIM,l_nk,
% V4dg_iuntr,iadd,plpr_L,'TT1M', V4dg_ad_L,
% l_ni*l_nj*l_nk,-1)
*
call v4d_rwfld
(tdt1m, work,l_ni,l_nj,LDIST_DIM,l_nk,
% V4dg_iuntr,iadd,plpr_L,'TDT1M', V4dg_ad_L,
% l_ni*l_nj*l_nk,-1)
*
call v4d_rwfld
(vt1m, work,l_ni,l_nj,LDIST_DIM,l_nk,
% V4dg_iuntr,iadd,plpr_L,'VT1M', V4dg_ad_L,
% l_ni*l_nj*l_nk,-1)
*
call v4d_rwfld
(ut1m, work,l_ni,l_nj,LDIST_DIM,l_nk,
% V4dg_iuntr,iadd,plpr_L,'UT1M', V4dg_ad_L,
% l_ni*l_nj*l_nk,-1)
*
endif
*
* -----------------------------------------
* SHOULD BE TRUE TO VALIDATE GEM-DM v_3.0.2
* -----------------------------------------
IF(.FALSE.) THEN
*
* Compute phi and T
* ~~~~~~~~~~~~~~~~~
do k= 1, l_nk
do j= 1, l_nj
do i= 1, l_ni
fit1m(i,j,k) = fipt1m(i,j,k) + Cstvr_fistr_8(k) + topo(i,j)
tt1m (i,j,k) = tpt1m (i,j,k) + Cstv_tstr_8
end do
end do
end do
*
ENDIF
*
* -----------------
* Write TRAJ Fields
* -----------------
elseif(V4dg_rwtr.eq.1) then
*
pnlkey1( 1)= VMM_KEY(ut1 )
pnlkey1( 2)= VMM_KEY(vt1 )
pnlkey1( 3)= VMM_KEY(tdt1 )
pnlkey1( 4)= VMM_KEY(tt1 )
pnlkey1( 5)= VMM_KEY(fit1 )
pnlkey1( 6)= VMM_KEY(qt1 )
pnlkey1( 7)= VMM_KEY(tpt1 )
pnlkey1( 8)= VMM_KEY(fipt1)
pnlkey1( 9)= VMM_KEY(pipt1)
pnlkey1(10)= VMM_KEY(tplt1)
pnlkey1(11)= VMM_KEY(psdt1)
pnlkey1(12)= VMM_KEY(st1 )
pnlod = 12
*
if (.not. Schm_hydro_L) then
pnlkey1(pnlod+1)= VMM_KEY(wt1 )
pnlkey1(pnlod+2)= VMM_KEY(qpt1)
pnlkey1(pnlod+3)= VMM_KEY(mut1)
pnlod = pnlod+3
endif
*
* - - - - - - - - - - - - - - -
pnerr = vmmlod(pnlkey1,pnlod)
* - - - - - - - - - - - - - - -
pnerr = VMM_GET_VAR(ut1 )
pnerr = VMM_GET_VAR(vt1 )
pnerr = VMM_GET_VAR(tdt1 )
pnerr = VMM_GET_VAR(tt1 )
pnerr = VMM_GET_VAR(fit1 )
pnerr = VMM_GET_VAR(qt1 )
pnerr = VMM_GET_VAR(tpt1 )
pnerr = VMM_GET_VAR(fipt1)
pnerr = VMM_GET_VAR(pipt1)
pnerr = VMM_GET_VAR(tplt1)
pnerr = VMM_GET_VAR(psdt1)
pnerr = VMM_GET_VAR(st1 )
*
if (.not. Schm_hydro_L) then
pnerr = VMM_GET_VAR(wt1 )
pnerr = VMM_GET_VAR(qpt1)
pnerr = VMM_GET_VAR(mut1)
endif
*
* Store starting TLM address
* --------------------------
V4dg_addtab_tl(numtr,istep,1) = V4dg_addtr
iadd = V4dg_addtr
*
call v4d_rwfld
(ut1, work,l_ni,l_nj,LDIST_DIM,l_nk,
% V4dg_iuntr,iadd,plpr_L,'UT1', V4dg_ad_L,0,1)
*
call v4d_rwfld
(vt1, work,l_ni,l_nj,LDIST_DIM,l_nk,
% V4dg_iuntr,iadd,plpr_L,'VT1', V4dg_ad_L,0,1)
*
call v4d_rwfld
(tdt1, work,l_ni,l_nj,LDIST_DIM,l_nk,
% V4dg_iuntr,iadd,plpr_L,'TDT1', V4dg_ad_L,0,1)
*
call v4d_rwfld
(tt1, work,l_ni,l_nj,LDIST_DIM,l_nk,
% V4dg_iuntr,iadd,plpr_L,'TT1', V4dg_ad_L,0,1)
*
call v4d_rwfld
(fit1, work,l_ni,l_nj,LDIST_DIM,l_nk,
% V4dg_iuntr,iadd,plpr_L,'FIT1', V4dg_ad_L,0,1)
*
call v4d_rwfld
(tpt1, work,l_ni,l_nj,LDIST_DIM,l_nk,
% V4dg_iuntr,iadd,plpr_L,'TPT1', V4dg_ad_L,0,1)
*
call v4d_rwfld
(fipt1,work,l_ni,l_nj,LDIST_DIM,l_nk,
% V4dg_iuntr,iadd,plpr_L,'FIPT1',V4dg_ad_L,0,1)
*
call v4d_rwfld
(tplt1,work,l_ni,l_nj,LDIST_DIM,l_nk,
% V4dg_iuntr,iadd,plpr_L,'TPLT1',V4dg_ad_L,0,1)
*
call v4d_rwfld
(psdt1,work,l_ni,l_nj,LDIST_DIM,l_nk,
% V4dg_iuntr,iadd,plpr_L,'PSDT1',V4dg_ad_L,0,1)
*
key1_ = VMM_KEY (trt1)
do n=1,Tr3d_ntr
key1(n) = key1_ + n
end do
if (Tr3d_ntr.gt.0) then
err = vmmlod(key1,Tr3d_ntr)
do n=1,Tr3d_ntr
err = vmmget(key1(n),patr,tr)
call v4d_rwfld
(tr,work,l_ni,l_nj,LDIST_DIM,l_nk,
% V4dg_iuntr,iadd,plpr_L,'TRT1', V4dg_ad_L,0,1)
end do
err = vmmuld(key1,Tr3d_ntr)
endif
*
call v4d_rwfld
(qt1, work,l_ni,l_nj,LDIST_DIM,l_nk,
% V4dg_iuntr,iadd,plpr_L,'QT1', V4dg_ad_L,0,1)
*
call v4d_rwfld
(st1, work,l_ni,l_nj,LDIST_DIM,1,
% V4dg_iuntr,iadd,plpr_L,'ST1', V4dg_ad_L,0,1)
*
call v4d_rwfld
(pipt1,work,l_ni,l_nj,LDIST_DIM,l_nk,
% V4dg_iuntr,iadd,plpr_L,'PIPT1',V4dg_ad_L,0,1)
*
if (.not. Schm_hydro_L) then
call v4d_rwfld
(wt1, work,l_ni,l_nj,LDIST_DIM,l_nk,
% V4dg_iuntr,iadd,plpr_L,'WT1', V4dg_ad_L,0,1)
*
call v4d_rwfld
(qpt1, work,l_ni,l_nj,LDIST_DIM,l_nk,
% V4dg_iuntr,iadd,plpr_L,'QPT1', V4dg_ad_L,0,1)
*
call v4d_rwfld
(mut1, work,l_ni,l_nj,LDIST_DIM,l_nk,
% V4dg_iuntr,iadd,plpr_L,'MUT1', V4dg_ad_L,0,1)
endif
*
* Store starting ADJOINT address
* ------------------------------
V4dg_addtab_ad(numtr,istep,1) = iadd - l_ni*l_nj*l_nk
V4dg_addtr = iadd
*
endif
*
endif
*
* --------------------------------------------------------------
* TRAJ Positions at time TH before ADV_MAIN modified by ADV_MAIN
* NOTE:Fields are changed at each icn
* --------------------------------------------------------------
if(numtr.eq.4) then
*
* ----------------
* Read TRAJ Fields
* ----------------
if(V4dg_rwtr.eq.0) then
*
* Recover starting address
* ------------------------
if(V4dg_ad_L) iadd = V4dg_addtab_ad(numtr,istep,Orh_icn)
if(V4dg_tl_L) iadd = V4dg_addtab_tl(numtr,istep,Orh_icn)
*
pnlkey1(1) = VMM_KEY(xthm)
pnlkey1(2) = VMM_KEY(ythm)
pnlkey1(3) = VMM_KEY(zthm)
pnlkey1(4) = VMM_KEY(xcthm)
pnlkey1(5) = VMM_KEY(ycthm)
pnlkey1(6) = VMM_KEY(zcthm)
pnlod = 6
* - - - - - - - - - - - - - - -
pnerr = vmmlod(pnlkey1,pnlod)
* - - - - - - - - - - - - - - -
pnerr = VMM_GET_VAR(xthm)
pnerr = VMM_GET_VAR(ythm)
pnerr = VMM_GET_VAR(zthm)
pnerr = VMM_GET_VAR(xcthm)
pnerr = VMM_GET_VAR(ycthm)
pnerr = VMM_GET_VAR(zcthm)
*
* TANGENT LINEAR MODEL
* --------------------
if(V4dg_tl_L) then
*
call v4d_rwfldx
(xcthm,l_ni,l_nj,l_nk,
% V4dg_iuntr,iadd,plpr_L,'XCTHM',V4dg_ad_L,0,-1)
*
call v4d_rwfldx
(ycthm,l_ni,l_nj,l_nk,
% V4dg_iuntr,iadd,plpr_L,'YCTHM',V4dg_ad_L,0,-1)
*
call v4d_rwfldx
(zcthm,l_ni,l_nj,l_nk,
% V4dg_iuntr,iadd,plpr_L,'ZCTHM',V4dg_ad_L,0,-1)
*
call v4d_rwfldx
(xthm, l_ni,l_nj,l_nk,
% V4dg_iuntr,iadd,plpr_L,'XTHM', V4dg_ad_L,0,-1)
*
call v4d_rwfldx
(ythm, l_ni,l_nj,l_nk,
% V4dg_iuntr,iadd,plpr_L,'YTHM', V4dg_ad_L,0,-1)
*
call v4d_rwfldx
(zthm, l_ni,l_nj,l_nk,
% V4dg_iuntr,iadd,plpr_L,'ZTHM', V4dg_ad_L,0,-1)
*
endif
*
* ADJOINT MODEL
* -------------
if(V4dg_ad_L) then
*
call v4d_rwfldx
(zthm, l_ni,l_nj,l_nk,
% V4dg_iuntr,iadd,plpr_L,'ZTHM', V4dg_ad_L,
% l_ni*l_nj*l_nk,-1)
*
call v4d_rwfldx
(ythm, l_ni,l_nj,l_nk,
% V4dg_iuntr,iadd,plpr_L,'YTHM', V4dg_ad_L,
% l_ni*l_nj*l_nk,-1)
*
call v4d_rwfldx
(xthm, l_ni,l_nj,l_nk,
% V4dg_iuntr,iadd,plpr_L,'XTHM', V4dg_ad_L,
% l_ni*l_nj*l_nk,-1)
*
call v4d_rwfldx
(zcthm,l_ni,l_nj,l_nk,
% V4dg_iuntr,iadd,plpr_L,'ZCTHM',V4dg_ad_L,
% l_ni*l_nj*l_nk,-1)
*
call v4d_rwfldx
(ycthm,l_ni,l_nj,l_nk,
% V4dg_iuntr,iadd,plpr_L,'YCTHM',V4dg_ad_L,
% l_ni*l_nj*l_nk,-1)
*
call v4d_rwfldx
(xcthm,l_ni,l_nj,l_nk,
% V4dg_iuntr,iadd,plpr_L,'XCTHM',V4dg_ad_L,
% l_ni*l_nj*l_nk,-1)
*
endif
*
* -----------------
* Write TRAJ Fields
* -----------------
elseif(V4dg_rwtr.eq.1) then
*
*
pnlkey1(1) = VMM_KEY(xth)
pnlkey1(2) = VMM_KEY(yth)
pnlkey1(3) = VMM_KEY(zth)
pnlkey1(4) = VMM_KEY(xcth)
pnlkey1(5) = VMM_KEY(ycth)
pnlkey1(6) = VMM_KEY(zcth)
pnlod = 6
* - - - - - - - - - - - - - - -
pnerr = vmmlod(pnlkey1,pnlod)
* - - - - - - - - - - - - - - -
pnerr = VMM_GET_VAR(xth)
pnerr = VMM_GET_VAR(yth)
pnerr = VMM_GET_VAR(zth)
pnerr = VMM_GET_VAR(xcth)
pnerr = VMM_GET_VAR(ycth)
pnerr = VMM_GET_VAR(zcth)
*
* Store starting TLM address
* --------------------------
V4dg_addtab_tl(numtr,istep,Orh_icn) = V4dg_addtr
iadd = V4dg_addtr
*
call v4d_rwfldx
(xcth,l_ni,l_nj,l_nk,
% V4dg_iuntr,iadd,plpr_L,'XCTH',V4dg_ad_L,0,1)
*
call v4d_rwfldx
(ycth,l_ni,l_nj,l_nk,
% V4dg_iuntr,iadd,plpr_L,'YCTH',V4dg_ad_L,0,1)
*
call v4d_rwfldx
(zcth,l_ni,l_nj,l_nk,
% V4dg_iuntr,iadd,plpr_L,'ZCTH',V4dg_ad_L,0,1)
*
call v4d_rwfldx
(xth, l_ni,l_nj,l_nk,
% V4dg_iuntr,iadd,plpr_L,'XTH', V4dg_ad_L,0,1)
*
call v4d_rwfldx
(yth, l_ni,l_nj,l_nk,
% V4dg_iuntr,iadd,plpr_L,'YTH', V4dg_ad_L,0,1)
*
call v4d_rwfldx
(zth, l_ni,l_nj,l_nk,
% V4dg_iuntr,iadd,plpr_L,'ZTH', V4dg_ad_L,0,1)
*
* Store starting ADJOINT address
* ------------------------------
V4dg_addtab_ad(numtr,istep,Orh_icn) = iadd - l_ni*l_nj*l_nk
V4dg_addtr = iadd
*
endif
*
endif
*
* -------------------------------------------------------------------------
* TRAJ Winds at time TH before ADV_MAIN NOT modified by ADV_MAIN
* NOTE:Fields are changed at each icn
* -------------------------------------------------------------------------
if(numtr.eq.5) then
*
* ----------------
* Read TRAJ Fields
* ----------------
if(V4dg_rwtr.eq.0) then
*
* Recover starting address
* ------------------------
if(V4dg_ad_L) iadd = V4dg_addtab_ad(numtr,istep,Orh_icn)
if(V4dg_tl_L) iadd = V4dg_addtab_tl(numtr,istep,Orh_icn)
*
pnlkey1(1) = VMM_KEY(uthm)
pnlkey1(2) = VMM_KEY(vthm)
pnlkey1(3) = VMM_KEY(psdthm)
pnlod = 3
* - - - - - - - - - - - - - - -
pnerr = vmmlod(pnlkey1,pnlod)
* - - - - - - - - - - - - - - -
pnerr = VMM_GET_VAR(uthm)
pnerr = VMM_GET_VAR(vthm)
pnerr = VMM_GET_VAR(psdthm)
*
* TANGENT LINEAR MODEL
* --------------------
if(V4dg_tl_L) then
*
call v4d_rwfld
(uthm, work,l_ni,l_nj,LDIST_DIM,l_nk,
% V4dg_iuntr,iadd,plpr_L,'UTHM', V4dg_ad_L,0,-1)
*
call v4d_rwfld
(vthm, work,l_ni,l_nj,LDIST_DIM,l_nk,
% V4dg_iuntr,iadd,plpr_L,'VTHM', V4dg_ad_L,0,-1)
*
call v4d_rwfld
(psdthm,work,l_ni,l_nj,LDIST_DIM,l_nk,
% V4dg_iuntr,iadd,plpr_L,'PSDTHM',V4dg_ad_L,0,-1)
*
endif
*
* ADJOINT MODEL
* -------------
if(V4dg_ad_L) then
*
call v4d_rwfld
(psdthm,work,l_ni,l_nj,LDIST_DIM,l_nk,
% V4dg_iuntr,iadd,plpr_L,'PSDTHM',V4dg_ad_L,l_ni*l_nj*l_nk,-1)
*
call v4d_rwfld
(vthm, work,l_ni,l_nj,LDIST_DIM,l_nk,
% V4dg_iuntr,iadd,plpr_L,'VTHM', V4dg_ad_L,l_ni*l_nj*l_nk,-1)
*
call v4d_rwfld
(uthm, work,l_ni,l_nj,LDIST_DIM,l_nk,
% V4dg_iuntr,iadd,plpr_L,'UTHM', V4dg_ad_L,l_ni*l_nj*l_nk,-1)
*
endif
*
* -----------------
* Write TRAJ Fields
* -----------------
elseif(V4dg_rwtr.eq.1) then
*
pnlkey1(1) = VMM_KEY(uth)
pnlkey1(2) = VMM_KEY(vth)
pnlkey1(3) = VMM_KEY(psdth)
pnlod = 3
*
* - - - - - - - - - - - - - - -
pnerr = vmmlod(pnlkey1,pnlod)
* - - - - - - - - - - - - - - -
*
pnerr = VMM_GET_VAR(uth)
pnerr = VMM_GET_VAR(vth)
pnerr = VMM_GET_VAR(psdth)
*
* Store starting TLM address
* --------------------------
V4dg_addtab_tl(numtr,istep,Orh_icn) = V4dg_addtr
iadd = V4dg_addtr
*
call v4d_rwfld
(uth, work,l_ni,l_nj,LDIST_DIM,l_nk,
% V4dg_iuntr,iadd,plpr_L,'UTH', V4dg_ad_L,0,1)
call v4d_rwfld
(vth, work,l_ni,l_nj,LDIST_DIM,l_nk,
% V4dg_iuntr,iadd,plpr_L,'VTH', V4dg_ad_L,0,1)
*
call v4d_rwfld
(psdth,work,l_ni,l_nj,LDIST_DIM,l_nk,
% V4dg_iuntr,iadd,plpr_L,'PSDTH',V4dg_ad_L,0,1)
*
* Store starting ADJOINT address
* ------------------------------
V4dg_addtab_ad(numtr,istep,Orh_icn) = iadd - l_ni*l_nj*l_nk
V4dg_addtr = iadd
*
endif
*
endif
*
* ----------------------------------------------------------------------
* TRAJ fields at T0 and TX used as INPUT that were modified by subr. BAC
* at the previous Orh_icn
* ----------------------------------------------------------------------
if(numtr.eq.6) then
*
* ----------------
* Read TRAJ Fields
* ----------------
if(V4dg_rwtr.eq.0) then
*
* Recover starting address
* ------------------------
if(V4dg_ad_L) iadd = V4dg_addtab_ad(numtr,istep,Orh_icn)
if(V4dg_tl_L) iadd = V4dg_addtab_tl(numtr,istep,Orh_icn)
*
pnlkey1(1) = VMM_KEY(tpt0m)
pnlkey1(2) = VMM_KEY(tplt0m)
pnlkey1(3) = VMM_KEY(pipt0m)
pnlkey1(4) = VMM_KEY(st0m)
pnlkey1(5) = VMM_KEY(qt0m)
pnlod = 5
if (.not. Schm_hydro_L) then
pnlkey1(pnlod+1) = VMM_KEY(fipt0m)
pnlkey1(pnlod+2) = VMM_KEY(mut0m)
pnlkey1(pnlod+3) = VMM_KEY(multxm)
pnlod = pnlod+3
endif
if (Cori_cornl_L) then
pnlkey1(pnlod+1) = VMM_KEY(ut0m)
pnlkey1(pnlod+2) = VMM_KEY(vt0m)
pnlod = pnlod+2
endif
*
* - - - - - - - - - - - - - - -
pnerr = vmmlod(pnlkey1,pnlod)
* - - - - - - - - - - - - - - -
pnerr = VMM_GET_VAR(tpt0m)
pnerr = VMM_GET_VAR(tplt0m)
pnerr = VMM_GET_VAR(pipt0m)
pnerr = VMM_GET_VAR(st0m)
pnerr = VMM_GET_VAR(qt0m)
if (.not. Schm_hydro_L) then
pnerr = VMM_GET_VAR(fipt0m)
pnerr = VMM_GET_VAR(mut0m)
pnerr = VMM_GET_VAR(multxm)
endif
if (Cori_cornl_L) then
pnerr = VMM_GET_VAR(ut0m)
pnerr = VMM_GET_VAR(vt0m)
endif
*
* TANGENT LINEAR MODEL
* --------------------
if(V4dg_tl_L) then
*
if (Cori_cornl_L) then
call v4d_rwfld
(ut0m, work,l_ni,l_nj,LDIST_DIM,l_nk,
% V4dg_iuntr,iadd,plpr_L,'UT0M', V4dg_ad_L,0,-1)
*
call v4d_rwfld
(vt0m, work,l_ni,l_nj,LDIST_DIM,l_nk,
% V4dg_iuntr,iadd,plpr_L,'VT0M', V4dg_ad_L,0,-1)
endif
*
call v4d_rwfld
(tpt0m, work,l_ni,l_nj,LDIST_DIM,l_nk,
% V4dg_iuntr,iadd,plpr_L,'TPT0M', V4dg_ad_L,0,-1)
*
call v4d_rwfld
(tplt0m,work,l_ni,l_nj,LDIST_DIM,l_nk,
% V4dg_iuntr,iadd,plpr_L,'TPLT0M',V4dg_ad_L,0,-1)
*
call v4d_rwfld
(pipt0m,work,l_ni,l_nj,LDIST_DIM,l_nk,
% V4dg_iuntr,iadd,plpr_L,'PIPT0M',V4dg_ad_L,0,-1)
*
call v4d_rwfld
(st0m, work,l_ni,l_nj,LDIST_DIM,1,
% V4dg_iuntr,iadd,plpr_L,'ST0M', V4dg_ad_L,0,-1)
*
call v4d_rwfld
(qt0m, work,l_ni,l_nj,LDIST_DIM,l_nk,
% V4dg_iuntr,iadd,plpr_L,'QT0M', V4dg_ad_L,0,-1)
*
if (.not. Schm_hydro_L) then
call v4d_rwfld
(fipt0m,work,l_ni,l_nj,LDIST_DIM,l_nk,
% V4dg_iuntr,iadd,plpr_L,'FIPT0M',V4dg_ad_L,0,-1)
*
call v4d_rwfld
(mut0m, work,l_ni,l_nj,LDIST_DIM,l_nk,
% V4dg_iuntr,iadd,plpr_L,'MUT0M', V4dg_ad_L,0,-1)
*
call v4d_rwfld
(multxm,work,l_ni,l_nj,LDIST_DIM,l_nk,
% V4dg_iuntr,iadd,plpr_L,'MULTXM',V4dg_ad_L,0,-1)
endif
*
endif
*
* ADJOINT MODEL
* -------------
if(V4dg_ad_L) then
*
if (.not. Schm_hydro_L) then
call v4d_rwfld
(multxm,work,l_ni,l_nj,LDIST_DIM,l_nk,
% V4dg_iuntr,iadd,plpr_L,'MULTXM',V4dg_ad_L,
% l_ni*l_nj*l_nk,-1)
*
call v4d_rwfld
(mut0m, work,l_ni,l_nj,LDIST_DIM,l_nk,
% V4dg_iuntr,iadd,plpr_L,'MUT0M', V4dg_ad_L,
% l_ni*l_nj*l_nk,-1)
*
call v4d_rwfld
(fipt0m,work,l_ni,l_nj,LDIST_DIM,l_nk,
% V4dg_iuntr,iadd,plpr_L,'FIPT0M',V4dg_ad_L,
% l_ni*l_nj*l_nk,-1)
endif
*
call v4d_rwfld
(qt0m, work,l_ni,l_nj,LDIST_DIM,l_nk,
% V4dg_iuntr,iadd,plpr_L,'QT0M', V4dg_ad_L,
% l_ni*l_nj,-1)
*
call v4d_rwfld
(st0m, work,l_ni,l_nj,LDIST_DIM,1,
% V4dg_iuntr,iadd,plpr_L,'ST0M', V4dg_ad_L,
% l_ni*l_nj*l_nk,-1)
*
call v4d_rwfld
(pipt0m,work,l_ni,l_nj,LDIST_DIM,l_nk,
% V4dg_iuntr,iadd,plpr_L,'PIPT0M',V4dg_ad_L,
% l_ni*l_nj*l_nk,-1)
*
call v4d_rwfld
(tplt0m,work,l_ni,l_nj,LDIST_DIM,l_nk,
% V4dg_iuntr,iadd,plpr_L,'TPLT0M',V4dg_ad_L,
% l_ni*l_nj*l_nk,-1)
*
call v4d_rwfld
(tpt0m, work,l_ni,l_nj,LDIST_DIM,l_nk,
% V4dg_iuntr,iadd,plpr_L,'TP0M', V4dg_ad_L,
% l_ni*l_nj*l_nk,-1)
*
if (Cori_cornl_L) then
call v4d_rwfld
(vt0m, work,l_ni,l_nj,LDIST_DIM,l_nk,
% V4dg_iuntr,iadd,plpr_L,'VT0M', V4dg_ad_L,
% l_ni*l_nj*l_nk,-1)
call v4d_rwfld
(ut0m, work,l_ni,l_nj,LDIST_DIM,l_nk,
% V4dg_iuntr,iadd,plpr_L,'UT0M', V4dg_ad_L,
% l_ni*l_nj*l_nk,-1)
endif
*
endif
*
* -----------------
* Write TRAJ Fields
* -----------------
elseif(V4dg_rwtr.eq.1) then
*
pnlkey1(1) = VMM_KEY(tpt0)
pnlkey1(2) = VMM_KEY(tplt0)
pnlkey1(3) = VMM_KEY(pipt0)
pnlkey1(4) = VMM_KEY(st0)
pnlkey1(5) = VMM_KEY(qt0)
pnlod = 5
if (.not. Schm_hydro_L) then
pnlkey1(pnlod+1) = VMM_KEY(fipt0)
pnlkey1(pnlod+2) = VMM_KEY(mut0)
pnlkey1(pnlod+3) = VMM_KEY(multx)
pnlod = pnlod+3
endif
if (Cori_cornl_L) then
pnlkey1(pnlod+1) = VMM_KEY(ut0)
pnlkey1(pnlod+2) = VMM_KEY(vt0)
pnlod = pnlod+2
endif
*
* - - - - - - - - - - - - - - -
pnerr = vmmlod(pnlkey1,pnlod)
* - - - - - - - - - - - - - - -
pnerr = VMM_GET_VAR(tpt0)
pnerr = VMM_GET_VAR(tplt0)
pnerr = VMM_GET_VAR(pipt0)
pnerr = VMM_GET_VAR(st0)
pnerr = VMM_GET_VAR(qt0)
if (.not. Schm_hydro_L) then
pnerr = VMM_GET_VAR(fipt0)
pnerr = VMM_GET_VAR(mut0)
pnerr = VMM_GET_VAR(multx)
endif
if (Cori_cornl_L) then
pnerr = VMM_GET_VAR(ut0)
pnerr = VMM_GET_VAR(vt0)
endif
*
* Store starting TLM address
* --------------------------
V4dg_addtab_tl(numtr,istep,Orh_icn) = V4dg_addtr
iadd = V4dg_addtr
*
if (Cori_cornl_L) then
call v4d_rwfld
(ut0, work,l_ni,l_nj,LDIST_DIM,l_nk,
% V4dg_iuntr,iadd,plpr_L,'UT0', V4dg_ad_L,0,1)
*
call v4d_rwfld
(vt0, work,l_ni,l_nj,LDIST_DIM,l_nk,
% V4dg_iuntr,iadd,plpr_L,'VT0', V4dg_ad_L,0,1)
endif
*
call v4d_rwfld
(tpt0, work,l_ni,l_nj,LDIST_DIM,l_nk,
% V4dg_iuntr,iadd,plpr_L,'TPT0', V4dg_ad_L,0,1)
*
call v4d_rwfld
(tplt0,work,l_ni,l_nj,LDIST_DIM,l_nk,
% V4dg_iuntr,iadd,plpr_L,'TPLT0',V4dg_ad_L,0,1)
*
call v4d_rwfld
(pipt0,work,l_ni,l_nj,LDIST_DIM,l_nk,
% V4dg_iuntr,iadd,plpr_L,'PIPT0',V4dg_ad_L,0,1)
*
call v4d_rwfld
(st0, work,l_ni,l_nj,LDIST_DIM,1,
% V4dg_iuntr,iadd,plpr_L,'ST0', V4dg_ad_L,0,1)
*
call v4d_rwfld
(qt0, work,l_ni,l_nj,LDIST_DIM,l_nk,
% V4dg_iuntr,iadd,plpr_L,'QT0', V4dg_ad_L,0,1)
*
if (.not. Schm_hydro_L) then
call v4d_rwfld
(fipt0,work,l_ni,l_nj,LDIST_DIM,l_nk,
% V4dg_iuntr,iadd,plpr_L,'FIPT0',V4dg_ad_L,0,1)
*
call v4d_rwfld
(mut0, work,l_ni,l_nj,LDIST_DIM,l_nk,
% V4dg_iuntr,iadd,plpr_L,'MUT0', V4dg_ad_L,0,1)
*
call v4d_rwfld
(multx,work,l_ni,l_nj,LDIST_DIM,l_nk,
% V4dg_iuntr,iadd,plpr_L,'MULTX',V4dg_ad_L,0,1)
endif
*
* Store starting ADJOINT address
* ------------------------------
V4dg_addtab_ad(numtr,istep,Orh_icn) = iadd - l_ni*l_nj*l_nk
V4dg_addtr = iadd
*
endif
*
endif
*
* ---------------------------------------------------------------
* TRAJ fields at TX used as INPUT that were modified by subr. BAC
* at the previous time step (.not.Schm_hydro only)
* ---------------------------------------------------------------
if(numtr.eq.7) then
*
* ----------------
* Read TRAJ Fields
* ----------------
if(V4dg_rwtr.eq.0) then
*
* Recover starting address
* ------------------------
if(V4dg_ad_L) iadd = V4dg_addtab_ad(numtr,istep,Orh_icn)
if(V4dg_tl_L) iadd = V4dg_addtab_tl(numtr,istep,Orh_icn)
*
pnlkey1(1) = VMM_KEY(multxm)
*
* - - - - - - - - - - - - - - -
pnerr = vmmlod(pnlkey1,1)
* - - - - - - - - - - - - - - -
pnerr = VMM_GET_VAR(multxm)
*
* TANGENT LINEAR MODEL
* --------------------
if(V4dg_tl_L) then
*
call v4d_rwfld
(multxm,work,l_ni,l_nj,LDIST_DIM,l_nk,
% V4dg_iuntr,iadd,plpr_L,'MULTXM',V4dg_ad_L,0,-1)
endif
*
* ADJOINT MODEL
* -------------
if(V4dg_ad_L) then
*
call v4d_rwfld
(multxm,work,l_ni,l_nj,LDIST_DIM,l_nk,
% V4dg_iuntr,iadd,plpr_L,'MULTXM',V4dg_ad_L,
% l_ni*l_nj*l_nk,-1)
endif
*
* -----------------
* Write TRAJ Fields
* -----------------
elseif(V4dg_rwtr.eq.1) then
*
pnlkey1(1) = VMM_KEY(multx)
*
* - - - - - - - - - - - - - - -
pnerr = vmmlod(pnlkey1,1)
* - - - - - - - - - - - - - - -
pnerr = VMM_GET_VAR(multx)
*
* Store starting TLM address
* --------------------------
V4dg_addtab_tl(numtr,istep,Orh_icn) = V4dg_addtr
iadd = V4dg_addtr
*
call v4d_rwfld
(multx,work,l_ni,l_nj,LDIST_DIM,l_nk,
% V4dg_iuntr,iadd,plpr_L,'MULTX',V4dg_ad_L,0,1)
*
* Store starting ADJOINT address
* ------------------------------
V4dg_addtab_ad(numtr,istep,Orh_icn) = iadd - l_ni*l_nj*l_nk
V4dg_addtr = iadd
*
endif
*
endif
*
* ---------------------------------------------------------------
* TRAJ RHS interpolated fields
* ---------------------------------------------------------------
if(numtr.eq.8) then
*
* ----------------
* Read TRAJ Fields
* ----------------
if(V4dg_rwtr.eq.0) then
*
* Recover starting address
* ------------------------
if(V4dg_ad_L) iadd = V4dg_addtab_ad(numtr,istep,Orh_icn)
if(V4dg_tl_L) iadd = V4dg_addtab_tl(numtr,istep,Orh_icn)
*
pnlkey1(1) = VMM_KEY(ruw2m)
pnlkey1(2) = VMM_KEY(rvw2m)
pnlkey1(3) = VMM_KEY(rcnm)
pnlkey1(4) = VMM_KEY(rthm)
pnlkey1(5) = VMM_KEY(xct1m)
pnlkey1(6) = VMM_KEY(yct1m)
pnlkey1(7) = VMM_KEY(zct1m)
pnlod = 7
*
if (.not. Schm_hydro_L) then
pnlkey1(8) = VMM_KEY(rwm)
pnlkey1(9) = VMM_KEY(rvvm)
pnlod = 9
endif
*
* - - - - - - - - - - - - - - -
pnerr = vmmlod(pnlkey1,pnlod)
* - - - - - - - - - - - - - - -
*
pnerr = VMM_GET_VAR(ruw2m)
pnerr = VMM_GET_VAR(rvw2m)
pnerr = VMM_GET_VAR(rcnm)
pnerr = VMM_GET_VAR(rthm)
pnerr = VMM_GET_VAR(xct1m)
pnerr = VMM_GET_VAR(yct1m)
pnerr = VMM_GET_VAR(zct1m)
*
if (.not. Schm_hydro_L) then
pnerr = VMM_GET_VAR(rwm)
pnerr = VMM_GET_VAR(rvvm)
endif
*
* TANGENT LINEAR MODEL
* --------------------
if(V4dg_tl_L) then
*
call v4d_rwfld
(ruw2m,work,l_ni,l_nj,LDIST_DIM,l_nk,
% V4dg_iuntr,iadd,plpr_L,'RUW2M',V4dg_ad_L,0,-1)
*
call v4d_rwfld
(rvw2m,work,l_ni,l_nj,LDIST_DIM,l_nk,
% V4dg_iuntr,iadd,plpr_L,'RVW2M',V4dg_ad_L,0,-1)
*
call v4d_rwfld
(rcnm,work,l_ni,l_nj,LDIST_DIM,l_nk,
% V4dg_iuntr,iadd,plpr_L,'RCNM', V4dg_ad_L,0,-1)
*
call v4d_rwfld
(rthm,work,l_ni,l_nj,LDIST_DIM,l_nk,
% V4dg_iuntr,iadd,plpr_L,'RTHM', V4dg_ad_L,0,-1)
*
call v4d_rwfldx
(xct1m,l_ni,l_nj,l_nk,
% V4dg_iuntr,iadd,plpr_L,'XCT1M',V4dg_ad_L,0,-1)
*
call v4d_rwfldx
(yct1m,l_ni,l_nj,l_nk,
% V4dg_iuntr,iadd,plpr_L,'YCT1M',V4dg_ad_L,0,-1)
*
call v4d_rwfldx
(zct1m,l_ni,l_nj,l_nk,
% V4dg_iuntr,iadd,plpr_L,'ZCT1M',V4dg_ad_L,0,-1)
*
if (.not. Schm_hydro_L) then
call v4d_rwfld
(rwm,work,l_ni,l_nj,LDIST_DIM,l_nk,
% V4dg_iuntr,iadd,plpr_L,'RWM', V4dg_ad_L,0,-1)
*
call v4d_rwfld
(rvvm,work,l_ni,l_nj,LDIST_DIM,l_nk,
% V4dg_iuntr,iadd,plpr_L,'RVVM', V4dg_ad_L,0,-1)
endif
*
endif
*
* ADJOINT MODEL
* -------------
if(V4dg_ad_L) then
*
if (.not. Schm_hydro_L) then
call v4d_rwfld
(rvvm,work,l_ni,l_nj,LDIST_DIM,l_nk,
% V4dg_iuntr,iadd,plpr_L,'RVVM', V4dg_ad_L,
% l_ni*l_nj*l_nk,-1)
call v4d_rwfld
(rwm,work,l_ni,l_nj,LDIST_DIM,l_nk,
% V4dg_iuntr,iadd,plpr_L,'RWM', V4dg_ad_L,
% l_ni*l_nj*l_nk,-1)
endif
*
call v4d_rwfldx
(zct1m,l_ni,l_nj,l_nk,
% V4dg_iuntr,iadd,plpr_L,'ZCT1M',V4dg_ad_L,
% l_ni*l_nj*l_nk,-1)
*
call v4d_rwfldx
(yct1m,l_ni,l_nj,l_nk,
% V4dg_iuntr,iadd,plpr_L,'YCT1M',V4dg_ad_L,
% l_ni*l_nj*l_nk,-1)
*
call v4d_rwfldx
(xct1m,l_ni,l_nj,l_nk,
% V4dg_iuntr,iadd,plpr_L,'XCT1M',V4dg_ad_L,
% l_ni*l_nj*l_nk,-1)
*
call v4d_rwfld
(rthm,work,l_ni,l_nj,LDIST_DIM,l_nk,
% V4dg_iuntr,iadd,plpr_L,'RTHM', V4dg_ad_L,
% l_ni*l_nj*l_nk,-1)
*
call v4d_rwfld
(rcnm,work,l_ni,l_nj,LDIST_DIM,l_nk,
% V4dg_iuntr,iadd,plpr_L,'RCNM', V4dg_ad_L,
% l_ni*l_nj*l_nk,-1)
*
call v4d_rwfld
(rvw2m,work,l_ni,l_nj,LDIST_DIM,l_nk,
% V4dg_iuntr,iadd,plpr_L,'RVW2M',V4dg_ad_L,
% l_ni*l_nj*l_nk,-1)
*
call v4d_rwfld
(ruw2m,work,l_ni,l_nj,LDIST_DIM,l_nk,
% V4dg_iuntr,iadd,plpr_L,'RUW2M',V4dg_ad_L,
% l_ni*l_nj*l_nk,-1)
*
endif
*
* -----------------
* Write TRAJ Fields
* -----------------
elseif(V4dg_rwtr.eq.1) then
*
pnlkey1(1) = VMM_KEY(ruw2)
pnlkey1(2) = VMM_KEY(rvw2)
pnlkey1(3) = VMM_KEY(rcn)
pnlkey1(4) = VMM_KEY(rth)
pnlkey1(5) = VMM_KEY(xct1)
pnlkey1(6) = VMM_KEY(yct1)
pnlkey1(7) = VMM_KEY(zct1)
pnlod = 7
*
if (.not. Schm_hydro_L) then
pnlkey1(8) = VMM_KEY(rw)
pnlkey1(9) = VMM_KEY(rvv)
pnlod = 9
endif
*
* - - - - - - - - - - - - - - -
pnerr = vmmlod(pnlkey1,pnlod)
* - - - - - - - - - - - - - - -
*
pnerr = VMM_GET_VAR(ruw2)
pnerr = VMM_GET_VAR(rvw2)
pnerr = VMM_GET_VAR(rcn)
pnerr = VMM_GET_VAR(rth)
pnerr = VMM_GET_VAR(xct1)
pnerr = VMM_GET_VAR(yct1)
pnerr = VMM_GET_VAR(zct1)
*
if (.not. Schm_hydro_L) then
pnerr = VMM_GET_VAR(rw)
pnerr = VMM_GET_VAR(rvv)
endif
*
* Store starting TLM address
* --------------------------
V4dg_addtab_tl(numtr,istep,Orh_icn) = V4dg_addtr
iadd = V4dg_addtr
*
call v4d_rwfld
(ruw2,work,l_ni,l_nj,LDIST_DIM,l_nk,
% V4dg_iuntr,iadd,plpr_L,'RUW2',V4dg_ad_L,0,1)
*
call v4d_rwfld
(rvw2,work,l_ni,l_nj,LDIST_DIM,l_nk,
% V4dg_iuntr,iadd,plpr_L,'RVW2',V4dg_ad_L,0,1)
*
call v4d_rwfld
(rcn,work,l_ni,l_nj,LDIST_DIM,l_nk,
% V4dg_iuntr,iadd,plpr_L,'RCN', V4dg_ad_L,0,1)
*
call v4d_rwfld
(rth,work,l_ni,l_nj,LDIST_DIM,l_nk,
% V4dg_iuntr,iadd,plpr_L,'RTH', V4dg_ad_L,0,1)
*
call v4d_rwfldx
(xct1,l_ni,l_nj,l_nk,
% V4dg_iuntr,iadd,plpr_L,'XCT1',V4dg_ad_L,0,1)
*
call v4d_rwfldx
(yct1,l_ni,l_nj,l_nk,
% V4dg_iuntr,iadd,plpr_L,'YCT1',V4dg_ad_L,0,1)
*
call v4d_rwfldx
(zct1,l_ni,l_nj,l_nk,
% V4dg_iuntr,iadd,plpr_L,'ZCT1',V4dg_ad_L,0,1)
*
if (.not. Schm_hydro_L) then
call v4d_rwfld
(rw,work,l_ni,l_nj,LDIST_DIM,l_nk,
% V4dg_iuntr,iadd,plpr_L,'RW', V4dg_ad_L,0,1)
call v4d_rwfld
(rvv,work,l_ni,l_nj,LDIST_DIM,l_nk,
% V4dg_iuntr,iadd,plpr_L,'RVV', V4dg_ad_L,0,1)
endif
*
* Store starting ADJOINT address
* ------------------------------
V4dg_addtab_ad(numtr,istep,Orh_icn) = iadd - l_ni*l_nj*l_nk
V4dg_addtr = iadd
*
endif
*
endif
*
* ---------------------------------------------------------------
* TRAJ GPTX at end of SOL_MAIN
* ---------------------------------------------------------------
if(numtr.eq.9) then
*
if(Schm_itnlh.gt.10) call gem_stop
('v4d_rwtraj 4',-1)
*
* ----------------
* Read TRAJ Fields
* ----------------
if(V4dg_rwtr.eq.0) then
*
* Recover starting address
* ------------------------
if(V4dg_ad_L) iadd = V4dr_addtab_sol_ad(istep,Orh_icn,V4dr_iln)
if(V4dg_tl_L) iadd = V4dr_addtab_sol_tl(istep,Orh_icn,V4dr_iln)
*
pnlkey1(1) = VMM_KEY(gptxm)
* - - - - - - - - - - - - - - -
pnerr = vmmlod(pnlkey1,1)
* - - - - - - - - - - - - - - -
pnerr = VMM_GET_VAR(gptxm)
*
* TANGENT LINEAR MODEL
* --------------------
if(V4dg_tl_L) then
*
call v4d_rwfld
(gptxm,work, l_ni,l_nj,LDIST_DIM,l_nk,
% V4dg_iuntr,iadd,plpr_L,'GPXM', V4dg_ad_L,0,-1)
*
endif
*
* ADJOINT MODEL
* -------------
if(V4dg_ad_L) then
*
call v4d_rwfld
(gptxm,work, l_ni,l_nj,LDIST_DIM,l_nk,
% V4dg_iuntr,iadd,plpr_L,'GPXM', V4dg_ad_L,
% l_ni*l_nj*l_nk,-1)
*
endif
*
* -----------------
* Write TRAJ Fields
* -----------------
elseif(V4dg_rwtr.eq.1) then
*
pnlkey1(1) = VMM_KEY(gptx)
* - - - - - - - - - - - - - - -
pnerr = vmmlod(pnlkey1,1)
* - - - - - - - - - - - - - - -
pnerr = VMM_GET_VAR(gptx)
*
* Store starting TLM address
* --------------------------
V4dr_addtab_sol_tl(istep,Orh_icn,V4dr_iln) = V4dg_addtr
iadd = V4dg_addtr
*
call v4d_rwfld
(gptx,work, l_ni,l_nj,LDIST_DIM,l_nk,
% V4dg_iuntr,iadd,plpr_L,'GPX', V4dg_ad_L,0,1)
*
* Store starting ADJOINT address
* ------------------------------
V4dr_addtab_sol_ad(istep,Orh_icn,V4dr_iln) = iadd - l_ni*l_nj*l_nk
V4dg_addtr = iadd
*
endif
*
endif
*
* ---------------------------------------------------------------
* TRAJ advection winds
* ---------------------------------------------------------------
if(numtr.eq.13) then
*
* ----------------
* Read TRAJ Fields
* ----------------
if(V4dg_rwtr.eq.0) then
*
* Recover starting address
* ------------------------
if(V4dg_ad_L) iadd = V4dg_addtab_ad(numtr,istep,Orh_icn)
if(V4dg_tl_L) iadd = V4dg_addtab_tl(numtr,istep,Orh_icn)
*
* TANGENT LINEAR MODEL
* --------------------
if(V4dg_tl_L) then
*
call v4d_rwfldx
(u,l_ni,l_nj,l_nk,
% V4dg_iuntr,iadd,plpr_L,'F_UM',V4dg_ad_L,0,-1)
*
call v4d_rwfldx
(v,l_ni,l_nj,l_nk,
% V4dg_iuntr,iadd,plpr_L,'F_VM',V4dg_ad_L,0,-1)
*
call v4d_rwfldx
(w,l_ni,l_nj,l_nk,
% V4dg_iuntr,iadd,plpr_L,'F_WM',V4dg_ad_L,0,-1)
*
endif
*
* ADJOINT MODEL
* -------------
if(V4dg_ad_L) then
*
call v4d_rwfldx
(w, l_ni,l_nj,l_nk,
% V4dg_iuntr,iadd,plpr_L,'F_WM', V4dg_ad_L,
% l_ni*l_nj*l_nk,-1)
*
call v4d_rwfldx
(v, l_ni,l_nj,l_nk,
% V4dg_iuntr,iadd,plpr_L,'F_VM', V4dg_ad_L,
% l_ni*l_nj*l_nk,-1)
*
call v4d_rwfldx
(u, l_ni,l_nj,l_nk,
% V4dg_iuntr,iadd,plpr_L,'F_UM', V4dg_ad_L,
% l_ni*l_nj*l_nk,-1)
*
endif
*
* -----------------
* Write TRAJ Fields
* -----------------
elseif(V4dg_rwtr.eq.1) then
*
* Store starting TLM address
* --------------------------
V4dg_addtab_tl(numtr,istep,Orh_icn) = V4dg_addtr
iadd = V4dg_addtr
*
call v4d_rwfldx
(u,l_ni,l_nj,l_nk,
% V4dg_iuntr,iadd,plpr_L,'F_U',V4dg_ad_L,0,1)
*
call v4d_rwfldx
(v,l_ni,l_nj,l_nk,
% V4dg_iuntr,iadd,plpr_L,'F_V',V4dg_ad_L,0,1)
*
call v4d_rwfldx
(w,l_ni,l_nj,l_nk,
% V4dg_iuntr,iadd,plpr_L,'F_W',V4dg_ad_L,0,1)
*
*
* Store starting ADJOINT address
* ------------------------------
V4dg_addtab_ad(numtr,istep,Orh_icn) = iadd - l_ni*l_nj*l_nk
V4dg_addtr = iadd
*
endif
*
endif
*
* ---------------------------------------------
* TRAJ current state AFTER nesting and blending
* ---------------------------------------------
if(numtr.eq.14) then
*
* ----------------
* Read TRAJ Fields
* ----------------
if(V4dg_rwtr.eq.0) then
*
* Recover starting address
* ------------------------
if(V4dg_ad_L) iadd = V4dg_addtab_ad(numtr,istep,1)
if(V4dg_tl_L) iadd = V4dg_addtab_tl(numtr,istep,1)
*
pnlkey1(1) = VMM_KEY(ut1m)
pnlkey1(2) = VMM_KEY(vt1m)
pnlkey1(3) = VMM_KEY(tpt1m)
pnlkey1(4) = VMM_KEY(st1m)
pnlod = 4
if (.not.Schm_hydro_L) then
pnlkey1(5) = VMM_KEY(fipt1m)
pnlod = 5
endif
* - - - - - - - - - - - - - - -
pnerr = vmmlod(pnlkey1,pnlod)
* - - - - - - - - - - - - - - -
pnerr = VMM_GET_VAR(ut1m)
pnerr = VMM_GET_VAR(vt1m)
pnerr = VMM_GET_VAR(tpt1m)
pnerr = VMM_GET_VAR(st1m)
if (.not.Schm_hydro_L) pnerr = VMM_GET_VAR(fipt1m)
*
* TANGENT LINEAR MODEL
* --------------------
if(V4dg_tl_L) then
*
call v4d_rwfld
(ut1m,work, l_ni,l_nj,LDIST_DIM,l_nk,
% V4dg_iuntr,iadd,plpr_L,'UT1M', V4dg_ad_L,0,-1)
*
call v4d_rwfld
(vt1m,work, l_ni,l_nj,LDIST_DIM,l_nk,
% V4dg_iuntr,iadd,plpr_L,'VT1M', V4dg_ad_L,0,-1)
*
call v4d_rwfld
(st1m,work, l_ni,l_nj,LDIST_DIM,1,
% V4dg_iuntr,iadd,plpr_L,'ST1M', V4dg_ad_L,0,-1)
*
call v4d_rwfld
(tpt1m,work,l_ni,l_nj,LDIST_DIM,l_nk,
% V4dg_iuntr,iadd,plpr_L,'TPT1M', V4dg_ad_L,0,-1)
*
if (.not.Schm_hydro_L) then
call v4d_rwfld
(fipt1m,work,l_ni,l_nj,LDIST_DIM,l_nk,
% V4dg_iuntr,iadd,plpr_L,'FPT1M', V4dg_ad_L,0,-1)
endif
*
endif
*
* ADJOINT MODEL
* -------------
if(V4dg_ad_L) then
*
if (.not.Schm_hydro_L) then
call v4d_rwfld
(fipt1m,work,l_ni,l_nj,LDIST_DIM,l_nk,
% V4dg_iuntr,iadd,plpr_L,'FPT1M', V4dg_ad_L,
% l_ni*l_nj*l_nk,-1)
endif
*
call v4d_rwfld
(tpt1m,work,l_ni,l_nj,LDIST_DIM,l_nk,
% V4dg_iuntr,iadd,plpr_L,'TPT1M', V4dg_ad_L,
% l_ni*l_nj,-1)
*
call v4d_rwfld
(st1m,work, l_ni,l_nj,LDIST_DIM,1,
% V4dg_iuntr,iadd,plpr_L,'ST1M', V4dg_ad_L,
% l_ni*l_nj*l_nk,-1)
*
call v4d_rwfld
(vt1m,work, l_ni,l_nj,LDIST_DIM,l_nk,
% V4dg_iuntr,iadd,plpr_L,'VT1M', V4dg_ad_L,
% l_ni*l_nj*l_nk,-1)
*
call v4d_rwfld
(ut1m,work, l_ni,l_nj,LDIST_DIM,l_nk,
% V4dg_iuntr,iadd,plpr_L,'UT1M', V4dg_ad_L,
% l_ni*l_nj*l_nk,-1)
*
endif
*
* -----------------
* Write TRAJ Fields
* -----------------
elseif(V4dg_rwtr.eq.1) then
*
pnlkey1(1) = VMM_KEY(ut1)
pnlkey1(2) = VMM_KEY(vt1)
pnlkey1(3) = VMM_KEY(tpt1)
pnlkey1(4) = VMM_KEY(st1)
pnlod = 4
if (.not.Schm_hydro_L) then
pnlkey1(5) = VMM_KEY(fipt1)
pnlod = 5
endif
* - - - - - - - - - - - - - - -
pnerr = vmmlod(pnlkey1,pnlod)
* - - - - - - - - - - - - - - -
pnerr = VMM_GET_VAR(ut1)
pnerr = VMM_GET_VAR(vt1)
pnerr = VMM_GET_VAR(tpt1)
pnerr = VMM_GET_VAR(st1)
if (.not.Schm_hydro_L) pnerr = VMM_GET_VAR(fipt1)
*
* Store starting TLM address
* --------------------------
V4dg_addtab_tl(numtr,istep,1) = V4dg_addtr
iadd = V4dg_addtr
*
call v4d_rwfld
(ut1,work, l_ni,l_nj,LDIST_DIM,l_nk,
% V4dg_iuntr,iadd,plpr_L,'UT1', V4dg_ad_L,0,1)
*
call v4d_rwfld
(vt1,work, l_ni,l_nj,LDIST_DIM,l_nk,
% V4dg_iuntr,iadd,plpr_L,'VT1', V4dg_ad_L,0,1)
*
call v4d_rwfld
(st1,work, l_ni,l_nj,LDIST_DIM,1,
% V4dg_iuntr,iadd,plpr_L,'ST1', V4dg_ad_L,0,1)
*
call v4d_rwfld
(tpt1,work,l_ni,l_nj,LDIST_DIM,l_nk,
% V4dg_iuntr,iadd,plpr_L,'TPT1', V4dg_ad_L,0,1)
*
if (.not.Schm_hydro_L) then
call v4d_rwfld
(fipt1,work,l_ni,l_nj,LDIST_DIM,l_nk,
% V4dg_iuntr,iadd,plpr_L,'FPT1', V4dg_ad_L,0,1)
endif
*
* Store starting ADJOINT address
* ------------------------------
V4dg_addtab_ad(numtr,istep,1) = iadd - l_ni*l_nj*l_nk
V4dg_addtr = iadd
*
endif
*
endif
*
* ---------------------------------------------
* TRAJ XT1 YT1 ZT1 before ADV_MAIN_2_POS_SETTLS
* ---------------------------------------------
if(numtr.eq.15) then
*
* ----------------
* Read TRAJ Fields
* ----------------
if(V4dg_rwtr.eq.0) then
*
* Recover starting address
* ------------------------
if(V4dg_ad_L) iadd = V4dg_addtab_ad(numtr,istep,1)
if(V4dg_tl_L) iadd = V4dg_addtab_tl(numtr,istep,1)
*
pnlkey1(1) = VMM_KEY(xt1m)
pnlkey1(2) = VMM_KEY(yt1m)
pnlkey1(3) = VMM_KEY(zt1m)
pnlod = 3
* - - - - - - - - - - - - - - -
pnerr = vmmlod(pnlkey1,pnlod)
* - - - - - - - - - - - - - - -
pnerr = VMM_GET_VAR(xt1m)
pnerr = VMM_GET_VAR(yt1m)
pnerr = VMM_GET_VAR(zt1m)
*
* TANGENT LINEAR MODEL
* --------------------
if(V4dg_tl_L) then
*
call v4d_rwfldx
(xt1m, l_ni,l_nj,l_nk,
% V4dg_iuntr,iadd,plpr_L,'XT1M', V4dg_ad_L,0,-1)
*
call v4d_rwfldx
(yt1m, l_ni,l_nj,l_nk,
% V4dg_iuntr,iadd,plpr_L,'YT1M', V4dg_ad_L,0,-1)
*
call v4d_rwfldx
(zt1m, l_ni,l_nj,l_nk,
% V4dg_iuntr,iadd,plpr_L,'ZT1M', V4dg_ad_L,0,-1)
*
endif
*
* ADJOINT MODEL
* -------------
if(V4dg_ad_L) then
*
call v4d_rwfldx
(zt1m, l_ni,l_nj,l_nk,
% V4dg_iuntr,iadd,plpr_L,'ZT1M', V4dg_ad_L,
% l_ni*l_nj*l_nk,-1)
*
call v4d_rwfldx
(yt1m, l_ni,l_nj,l_nk,
% V4dg_iuntr,iadd,plpr_L,'YT1M', V4dg_ad_L,
% l_ni*l_nj*l_nk,-1)
*
call v4d_rwfldx
(xt1m, l_ni,l_nj,l_nk,
% V4dg_iuntr,iadd,plpr_L,'XT1M', V4dg_ad_L,
% l_ni*l_nj*l_nk,-1)
*
endif
*
* -----------------
* Write TRAJ Fields
* -----------------
elseif(V4dg_rwtr.eq.1) then
*
pnlkey1(1) = VMM_KEY(xt1)
pnlkey1(2) = VMM_KEY(yt1)
pnlkey1(3) = VMM_KEY(zt1)
pnlod = 3
* - - - - - - - - - - - - - - -
pnerr = vmmlod(pnlkey1,pnlod)
* - - - - - - - - - - - - - - -
pnerr = VMM_GET_VAR(xt1)
pnerr = VMM_GET_VAR(yt1)
pnerr = VMM_GET_VAR(zt1)
*
* Store starting TLM address
* --------------------------
V4dg_addtab_tl(numtr,istep,1) = V4dg_addtr
iadd = V4dg_addtr
*
call v4d_rwfldx
(xt1, l_ni,l_nj,l_nk,
% V4dg_iuntr,iadd,plpr_L,'XT1', V4dg_ad_L,0,1)
*
call v4d_rwfldx
(yt1, l_ni,l_nj,l_nk,
% V4dg_iuntr,iadd,plpr_L,'YT1', V4dg_ad_L,0,1)
*
call v4d_rwfldx
(zt1, l_ni,l_nj,l_nk,
% V4dg_iuntr,iadd,plpr_L,'ZT1', V4dg_ad_L,0,1)
*
* Store starting ADJOINT address
* ------------------------------
V4dg_addtab_ad(numtr,istep,1) = iadd - l_ni*l_nj*l_nk
V4dg_addtr = iadd
*
endif
*
endif
*
* ---------------------------------------------------------
* TRAJ Winds at time T1 and TW before ADV_MAIN_1_WND_SETTLS
* ---------------------------------------------------------
if(numtr.eq.16) then
*
* ----------------
* Read TRAJ Fields
* ----------------
if(V4dg_rwtr.eq.0) then
*
*
* Recover starting address
* ------------------------
if(V4dg_ad_L) iadd = V4dg_addtab_ad(numtr,istep,1)
if(V4dg_tl_L) iadd = V4dg_addtab_tl(numtr,istep,1)
*
pnlkey1(1) = VMM_KEY(ut1m)
pnlkey1(2) = VMM_KEY(vt1m)
pnlkey1(3) = VMM_KEY(psdt1m)
pnlkey1(4) = VMM_KEY(utwm)
pnlkey1(5) = VMM_KEY(vtwm)
pnlkey1(6) = VMM_KEY(psdtwm)
pnlod = 6
* - - - - - - - - - - - - - - -
pnerr = vmmlod(pnlkey1,pnlod)
* - - - - - - - - - - - - - - -
pnerr = VMM_GET_VAR(ut1m)
pnerr = VMM_GET_VAR(vt1m)
pnerr = VMM_GET_VAR(psdt1m)
pnerr = VMM_GET_VAR(utwm)
pnerr = VMM_GET_VAR(vtwm)
pnerr = VMM_GET_VAR(psdtwm)
*
* TANGENT LINEAR MODEL
* --------------------
if(V4dg_tl_L) then
*
call v4d_rwfld
(ut1m, work,l_ni,l_nj,LDIST_DIM,l_nk,
% V4dg_iuntr,iadd,plpr_L,'UT1M', V4dg_ad_L,0,-1)
*
call v4d_rwfld
(vt1m, work,l_ni,l_nj,LDIST_DIM,l_nk,
% V4dg_iuntr,iadd,plpr_L,'VT1M', V4dg_ad_L,0,-1)
*
call v4d_rwfld
(psdt1m,work,l_ni,l_nj,LDIST_DIM,l_nk,
% V4dg_iuntr,iadd,plpr_L,'PSDT1M',V4dg_ad_L,0,-1)
*
call v4d_rwfld
(utwm, work,l_ni,l_nj,LDIST_DIM,l_nk,
% V4dg_iuntr,iadd,plpr_L,'UTWM', V4dg_ad_L,0,-1)
*
call v4d_rwfld
(vtwm, work,l_ni,l_nj,LDIST_DIM,l_nk,
% V4dg_iuntr,iadd,plpr_L,'VTWM', V4dg_ad_L,0,-1)
*
call v4d_rwfld
(psdtwm,work,l_ni,l_nj,LDIST_DIM,l_nk,
% V4dg_iuntr,iadd,plpr_L,'PSDTWM',V4dg_ad_L,0,-1)
*
endif
*
* ADJOINT MODEL
* -------------
if(V4dg_ad_L) then
*
call v4d_rwfld
(psdtwm,work,l_ni,l_nj,LDIST_DIM,l_nk,
% V4dg_iuntr,iadd,plpr_L,'PSDTWM',V4dg_ad_L,l_ni*l_nj*l_nk,-1)
*
call v4d_rwfld
(vtwm, work,l_ni,l_nj,LDIST_DIM,l_nk,
% V4dg_iuntr,iadd,plpr_L,'VTWM', V4dg_ad_L,l_ni*l_nj*l_nk,-1)
*
call v4d_rwfld
(utwm, work,l_ni,l_nj,LDIST_DIM,l_nk,
% V4dg_iuntr,iadd,plpr_L,'UTWM', V4dg_ad_L,l_ni*l_nj*l_nk,-1)
*
call v4d_rwfld
(psdt1m,work,l_ni,l_nj,LDIST_DIM,l_nk,
% V4dg_iuntr,iadd,plpr_L,'PSDT1M',V4dg_ad_L,l_ni*l_nj*l_nk,-1)
*
call v4d_rwfld
(vt1m, work,l_ni,l_nj,LDIST_DIM,l_nk,
% V4dg_iuntr,iadd,plpr_L,'VT1M', V4dg_ad_L,l_ni*l_nj*l_nk,-1)
*
call v4d_rwfld
(ut1m, work,l_ni,l_nj,LDIST_DIM,l_nk,
% V4dg_iuntr,iadd,plpr_L,'UT1M', V4dg_ad_L,l_ni*l_nj*l_nk,-1)
*
endif
*
* -----------------
* Write TRAJ Fields
* -----------------
elseif(V4dg_rwtr.eq.1) then
*
pnlkey1(1) = VMM_KEY(ut1)
pnlkey1(2) = VMM_KEY(vt1)
pnlkey1(3) = VMM_KEY(psdt1)
pnlkey1(4) = VMM_KEY(utw)
pnlkey1(5) = VMM_KEY(vtw)
pnlkey1(6) = VMM_KEY(psdtw)
pnlod = 6
*
* - - - - - - - - - - - - - - -
pnerr = vmmlod(pnlkey1,pnlod)
* - - - - - - - - - - - - - - -
*
pnerr = VMM_GET_VAR(ut1)
pnerr = VMM_GET_VAR(vt1)
pnerr = VMM_GET_VAR(psdt1)
pnerr = VMM_GET_VAR(utw)
pnerr = VMM_GET_VAR(vtw)
pnerr = VMM_GET_VAR(psdtw)
*
* Store starting TLM address
* --------------------------
V4dg_addtab_tl(numtr,istep,1) = V4dg_addtr
iadd = V4dg_addtr
*
call v4d_rwfld
(ut1, work,l_ni,l_nj,LDIST_DIM,l_nk,
% V4dg_iuntr,iadd,plpr_L,'UT1', V4dg_ad_L,0,1)
call v4d_rwfld
(vt1, work,l_ni,l_nj,LDIST_DIM,l_nk,
% V4dg_iuntr,iadd,plpr_L,'VT1', V4dg_ad_L,0,1)
*
call v4d_rwfld
(psdt1,work,l_ni,l_nj,LDIST_DIM,l_nk,
% V4dg_iuntr,iadd,plpr_L,'PSDT1',V4dg_ad_L,0,1)
*
call v4d_rwfld
(utw, work,l_ni,l_nj,LDIST_DIM,l_nk,
% V4dg_iuntr,iadd,plpr_L,'UTW', V4dg_ad_L,0,1)
call v4d_rwfld
(vtw, work,l_ni,l_nj,LDIST_DIM,l_nk,
% V4dg_iuntr,iadd,plpr_L,'VTW', V4dg_ad_L,0,1)
*
call v4d_rwfld
(psdtw,work,l_ni,l_nj,LDIST_DIM,l_nk,
% V4dg_iuntr,iadd,plpr_L,'PSDTW',V4dg_ad_L,0,1)
*
* Store starting ADJOINT address
* ------------------------------
V4dg_addtab_ad(numtr,istep,1) = iadd - l_ni*l_nj*l_nk
V4dg_addtr = iadd
*
endif
*
endif
*
* ------------------------------
* TRAJ ZT1 inside ADV_MAIN_2_POS
* ------------------------------
if(numtr.eq.17) then
*
* ----------------
* Read TRAJ Fields
* ----------------
if(V4dg_rwtr.eq.0) then
*
* Recover starting address
* ------------------------
if(V4dg_ad_L) iadd = V4dg_addtab_ad(numtr,istep,1)
if(V4dg_tl_L) iadd = V4dg_addtab_tl(numtr,istep,1)
*
pnlkey1(1) = VMM_KEY(zt1m)
pnlod = 1
* - - - - - - - - - - - - - - -
pnerr = vmmlod(pnlkey1,pnlod)
* - - - - - - - - - - - - - - -
pnerr = VMM_GET_VAR(zt1m)
*
* TANGENT LINEAR MODEL
* --------------------
if(V4dg_tl_L) then
*
call v4d_rwfldx
(zt1m, l_ni,l_nj,l_nk,
% V4dg_iuntr,iadd,plpr_L,'ZT1M', V4dg_ad_L,0,-1)
*
endif
*
* ADJOINT MODEL
* -------------
if(V4dg_ad_L) then
*
call v4d_rwfldx
(zt1m, l_ni,l_nj,l_nk,
% V4dg_iuntr,iadd,plpr_L,'ZT1M', V4dg_ad_L,
% l_ni*l_nj*l_nk,-1)
*
endif
*
* -----------------
* Write TRAJ Fields
* -----------------
elseif(V4dg_rwtr.eq.1) then
*
pnlkey1(1) = VMM_KEY(zt1)
pnlod = 1
* - - - - - - - - - - - - - - -
pnerr = vmmlod(pnlkey1,pnlod)
* - - - - - - - - - - - - - - -
pnerr = VMM_GET_VAR(zt1)
*
* Store starting TLM address
* --------------------------
V4dg_addtab_tl(numtr,istep,1) = V4dg_addtr
iadd = V4dg_addtr
*
call v4d_rwfldx
(zt1, l_ni,l_nj,l_nk,
% V4dg_iuntr,iadd,plpr_L,'ZT1', V4dg_ad_L,0,1)
*
* Store starting ADJOINT address
* ------------------------------
V4dg_addtab_ad(numtr,istep,1) = iadd - l_ni*l_nj*l_nk
V4dg_addtr = iadd
*
endif
*
endif
*
pnerr = vmmuld(-1,0)
*
return
end