!-------------------------------------- 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 bac_ad - ADJ of bac_tl * #include "model_macros_f.h"*
subroutine bac_ad( Itr, Itnlh ) 1,1 * implicit none * integer Itr, Itnlh * *author * M.Tanguay * *revision * v2_10 - Tanguay M. - initial MPI version * v2_21 - Tanguay M. - reduce standard output as in model * v2_30 - Edouard S. - remove pi' at the top (pptt0) - hybrid version * v2_31 - Tanguay M. - adapt for vertical hybrid coordinate * - adapt for tracers in tr3d * v3_03 - Tanguay M. - Adjoint NoHyd configuration * v3_11 - Tanguay M. - AIXport+Opti+OpenMP for TLM-ADJ * *object * see id section * ------------------------------------------------------------------------ * REMARK: INPUT TRAJ: F_gptxm, F_rthm, F_nthm, * F_r3m, F_r3pm, F_rvvm, F_n3m, F_n3pm (NoHyd) * ------------------------------------------------------------------------ * *arguments * Name I/O Description *---------------------------------------------------------------- * Itr I current nonlinear iteration number * Itnlh I total number of nonlinear iterations *---------------------------------------------------------------- * *implicits #include "glb_ld.cdk"
#include "lun.cdk"
#include "schm.cdk"
#include "p_geof.cdk"
#include "rhsc.cdk"
#include "nl.cdk"
#include "vt0.cdk"
#include "vtx.cdk"
#include "rhscm.cdk"
#include "nlm.cdk"
#include "vtxm.cdk"
* *modules integer vmmlod, vmmget, vmmuld external vmmlod, vmmget, vmmuld * integer pnerr, pnlod, pnlkey1(60), i, j, k * real*8 ZERO_8 parameter( ZERO_8=0.0 ) * real wijk0 (LDIST_SHAPE,l_nk),wijk1 (LDIST_SHAPE,l_nk) real wijk0m(LDIST_SHAPE,l_nk),wijk1m(LDIST_SHAPE,l_nk) * * ______________________________________________________ * if (Lun_debug_L) write(Lun_out,1000) * pnlkey1(1) = VMM_KEY(st0) pnlkey1(2) = VMM_KEY(pipt0) pnlkey1(3) = VMM_KEY(qt0) pnlkey1(4) = VMM_KEY(fit0) pnlkey1(5) = VMM_KEY(fipt0) pnlkey1(6) = VMM_KEY(topo) pnlkey1(7) = VMM_KEY(tt0) pnlkey1(8) = VMM_KEY(tpt0) pnlkey1(9) = VMM_KEY(tplt0) pnlkey1(10)= VMM_KEY(ut0) pnlkey1(11)= VMM_KEY(vt0) pnlkey1(12)= VMM_KEY(psdt0) pnlkey1(13)= VMM_KEY(tdt0) pnlkey1(14)= VMM_KEY(gptx) pnlkey1(15)= VMM_KEY(gxtx) pnlkey1(16)= VMM_KEY(ru) pnlkey1(17)= VMM_KEY(rv) pnlkey1(18)= VMM_KEY(rcn) pnlkey1(19)= VMM_KEY(rth) pnlod = 19 * if (.not. Schm_hydro_L) then pnlkey1(pnlod+1) = VMM_KEY(qpt0) pnlkey1(pnlod+2) = VMM_KEY(wt0) pnlkey1(pnlod+3) = VMM_KEY(mut0) pnlkey1(pnlod+4) = VMM_KEY(multx) pnlkey1(pnlod+5) = VMM_KEY(rvv) pnlkey1(pnlod+6) = VMM_KEY(r3) pnlkey1(pnlod+7) = VMM_KEY(r3p) pnlod = pnlod+7 endif * * TRAJECTORY * ---------- pnlkey1(pnlod + 1) = VMM_KEY(gptxm) pnlkey1(pnlod + 2) = VMM_KEY(rthm) pnlod = pnlod + 2 * if (.not. Schm_hydro_L) then pnlkey1(pnlod+1) = VMM_KEY(rvvm) pnlkey1(pnlod+2) = VMM_KEY(r3m) pnlkey1(pnlod+3) = VMM_KEY(r3pm) pnlod = pnlod+3 endif * pnerr = vmmlod(pnlkey1,pnlod) * pnerr = VMM_GET_VAR(st0) pnerr = VMM_GET_VAR(pipt0) pnerr = VMM_GET_VAR(qt0) pnerr = VMM_GET_VAR(fit0) pnerr = VMM_GET_VAR(fipt0) pnerr = VMM_GET_VAR(topo) pnerr = VMM_GET_VAR(tt0) pnerr = VMM_GET_VAR(tpt0) pnerr = VMM_GET_VAR(tplt0) pnerr = VMM_GET_VAR(ut0) pnerr = VMM_GET_VAR(vt0) pnerr = VMM_GET_VAR(psdt0) pnerr = VMM_GET_VAR(tdt0) pnerr = VMM_GET_VAR(gptx) pnerr = VMM_GET_VAR(gxtx) pnerr = VMM_GET_VAR(ru) pnerr = VMM_GET_VAR(rv) pnerr = VMM_GET_VAR(rcn) pnerr = VMM_GET_VAR(rth) * if (.not. Schm_hydro_L) then pnerr = VMM_GET_VAR(qpt0) pnerr = VMM_GET_VAR(wt0) pnerr = VMM_GET_VAR(mut0) pnerr = VMM_GET_VAR(multx) pnerr = VMM_GET_VAR(rvv) pnerr = VMM_GET_VAR(r3) pnerr = VMM_GET_VAR(r3p) else qpt0_ = 0 wt0_ = 0 mut0_ = 0 multx_= 0 rvv_ = 0 r3_ = 0 r3p_ = 0 endif * * TRAJECTORY * ---------- pnerr = VMM_GET_VAR(gptxm) pnerr = VMM_GET_VAR(rthm) * if (.not. Schm_hydro_L) then pnerr = VMM_GET_VAR(rvvm) pnerr = VMM_GET_VAR(r3m) pnerr = VMM_GET_VAR(r3pm) else rvvm_ = 0 r3m_ = 0 r3pm_ = 0 endif * * Zero adjoint variables * ---------------------- do k=1,l_nk do j=l_miny,l_maxy do i=l_minx,l_maxx wijk0(i,j,k) = ZERO_8 wijk1(i,j,k) = ZERO_8 enddo enddo enddo * call bacp_2_ad
% ( Itr , Itnlh , st0 , pipt0 , qt0 , % fit0 , fipt0 , topo , tt0 , tpt0 , tplt0, % ut0 , vt0 , psdt0 , tdt0 , % qpt0 , wt0 , mut0 , multx , gptx , gxtx , % ru , rv , rth , r3 , r3p , rvv , rcn, % nl_nu , nl_nv , nl_nth , nl_n3 , nl_n3p , % nl_ncn, wijk0 , wijk1 , * % gptxm , % rthm , r3m , r3pm , rvvm , % nlm_nthm, nlm_n3m, nlm_n3pm, % wijk0m , wijk1m , * % LDIST_DIM, l_nk ) * pnerr = vmmuld(-1,0) 1000 format (5X,' ADJ of BACK SUBSTITUTION: (S/R BAC_AD)') return end