!-------------------------------------- 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 vspng_lam_ad - ADJ of vspng_lam * #include "model_macros_f.h"*
subroutine vspng_lam_ad ( F_champ, DIST_DIM, pni, pnj ) 13,1 * implicit none * integer DIST_DIM,pni,pnj real F_champ(DIST_SHAPE,*) * *author * M.Tanguay * *revision * v3_03 - Tanguay M. - initial MPI version * v3_30 - Tanguay M. - Validation for LAM * *object * see id section ** *implicit #include "glb_ld.cdk"
#include "glb_pil.cdk"
#include "vspng.cdk"
* integer i,j,k,iter,i0,in,j0,jn real*8 c1_8,c2_8,c3_8,ONE_8,TWO_8,FOUR_8 parameter(ONE_8=1.d0,TWO_8=2.d0,FOUR_8=4.d0) real wk(l_ni,l_nj,G_nk) * real*8, parameter :: ZERO_8 = 0.0 *--------------------------------------------------------------------- * i0=1 in=l_niu j0=1 jn=l_njv if (l_south) j0=2 if (l_north) jn=l_njv-1 if (l_west) i0=2 if (l_east) in=l_niu-1 * * Zero adjoint variables * ---------------------- do k=1,G_nk do j=1,l_nj do i=1,l_ni wk(i,j,k) = ZERO_8 enddo enddo enddo * do iter = Vspng_niter,1,-1 * do k=Vspng_nk,1,-1 * do j=1+pil_s, l_nj-pil_n do i=1+pil_w, l_ni-pil_e wk(i,j,k) = F_champ(i,j,k) + wk(i,j,k) end do end do * c1_8= (ONE_8-TWO_8*Vspng_nu(k))*Vspng_nu(k) c2_8= Vspng_nu(k)**TWO_8 c3_8= FOUR_8*(Vspng_nu(k)-ONE_8)*Vspng_nu(k) do j=jn,j0,-1 do i=in,i0,-1 F_champ(i ,j+1,k) = c1_8*(wk(i,j,k)) + F_champ(i ,j+1,k) F_champ(i+1,j ,k) = c1_8*(wk(i,j,k)) + F_champ(i+1,j ,k) F_champ(i ,j-1,k) = c1_8*(wk(i,j,k)) + F_champ(i ,j-1,k) F_champ(i-1,j ,k) = c1_8*(wk(i,j,k)) + F_champ(i-1,j ,k) * F_champ(i-1,j+1,k) = c2_8*(wk(i,j,k)) + F_champ(i-1,j+1,k) F_champ(i+1,j+1,k) = c2_8*(wk(i,j,k)) + F_champ(i+1,j+1,k) F_champ(i-1,j-1,k) = c2_8*(wk(i,j,k)) + F_champ(i-1,j-1,k) F_champ(i+1,j-1,k) = c2_8*(wk(i,j,k)) + F_champ(i+1,j-1,k) * F_champ(i ,j ,k) = c3_8*(wk(i,j,k)) + F_champ(i ,j ,k) * wk(i,j,k) = ZERO_8 end do end do * end do * call rpn_comm_adj_halo (F_champ,LDIST_DIM,pni,pnj, $ G_nk,G_halox,G_haloy,G_periodx,G_periody,l_ni,0) * call v4d_zerohalo
(F_champ,pni,pnj,LDIST_DIM, l_nk) * end do * *---------------------------------------------------------------------- return end