!-------------------------------------- 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 rhs_tr - Equivalent to rhs for TRAJECTORY * #include "model_macros_f.h"*
subroutine rhs_tr() 1,1 * implicit none * *author * M.Tanguay * *revision * v2_10 - Tanguay M. - initial MPI version * v2_21 - Tanguay M. - replace xfis by topo * v2_31 - Tanguay M. - adapt for tracers in tr3d * v3_00 - Tanguay M. - adapt to restructured rhs * v3_03 - Tanguay M. - Adjoint Lam and NoHyd configuration * v3_11 - Tanguay M. - AIXport+Opti+OpenMP for TLM-ADJ * v3_21 - Tanguay M. - Revision Openmp * v3_31 - Tanguay M. - Introduce time extrapolation * *object * see id section * *arguments * none * *implicits #include "glb_ld.cdk"
#include "schm.cdk"
#include "lun.cdk"
#include "orhm.cdk"
#include "orh.cdk"
#include "p_geof.cdk"
#include "rhscm.cdk"
#include "vt1m.cdk"
#include "nestm.cdk"
* *modules integer vmmlod, vmmget, vmmuld external vmmlod, vmmget, vmmuld integer pnerr, pnlod, pnlkey1(30), i,j,k * * ______________________________________________________ * if(Lun_debug_L) write (Lun_out,1000) * pnlkey1( 1) = VMM_KEY(rum) pnlkey1( 2) = VMM_KEY(rvm) pnlkey1( 3) = VMM_KEY(rcnm) pnlkey1( 4) = VMM_KEY(rthm) pnlkey1( 5) = VMM_KEY(orum) pnlkey1( 6) = VMM_KEY(orvm) pnlkey1( 7) = VMM_KEY(orcnm) pnlkey1( 8) = VMM_KEY(orthm) pnlkey1( 9) = VMM_KEY(ruw1m) pnlkey1(10) = VMM_KEY(rvw1m) pnlkey1(11) = VMM_KEY(ut1m) pnlkey1(12) = VMM_KEY(vt1m) pnlkey1(13) = VMM_KEY(tt1m) pnlkey1(14) = VMM_KEY(qt1m) pnlkey1(15) = VMM_KEY(fit1m) pnlkey1(16) = VMM_KEY(st1m) pnlkey1(17) = VMM_KEY(tdt1m) pnlkey1(18) = VMM_KEY(psdt1m) pnlod = 18 if (.not. Schm_hydro_L) then pnlkey1(pnlod+1) = VMM_KEY(rwm) pnlkey1(pnlod+2) = VMM_KEY(rvvm) pnlkey1(pnlod+3) = VMM_KEY(orwm) pnlkey1(pnlod+4) = VMM_KEY(orvvm) pnlkey1(pnlod+5) = VMM_KEY(wt1m) pnlkey1(pnlod+6) = VMM_KEY(topo) pnlkey1(pnlod+7) = VMM_KEY(fipt1m) pnlkey1(pnlod+8) = VMM_KEY(mut1m) pnlod = pnlod+8 endif if (G_lam) then pnlkey1(pnlod+1) = VMM_KEY(nestm_um) pnlkey1(pnlod+2) = VMM_KEY(nestm_vm) pnlod = pnlod+2 endif * * - - - - - - - - - - - - - pnerr = vmmlod(pnlkey1,pnlod) * - - - - - - - - - - - - - pnerr = VMM_GET_VAR(rum) pnerr = VMM_GET_VAR(rvm) pnerr = VMM_GET_VAR(rcnm) pnerr = VMM_GET_VAR(rthm) pnerr = VMM_GET_VAR(orum) pnerr = VMM_GET_VAR(orvm) pnerr = VMM_GET_VAR(orcnm) pnerr = VMM_GET_VAR(orthm) pnerr = VMM_GET_VAR(ruw1m) pnerr = VMM_GET_VAR(rvw1m) pnerr = VMM_GET_VAR(ut1m) pnerr = VMM_GET_VAR(vt1m) pnerr = VMM_GET_VAR(tt1m) pnerr = VMM_GET_VAR(qt1m) pnerr = VMM_GET_VAR(fit1m) pnerr = VMM_GET_VAR(st1m) pnerr = VMM_GET_VAR(tdt1m) pnerr = VMM_GET_VAR(psdt1m) if (.not. Schm_hydro_L) then pnerr = VMM_GET_VAR(rwm) pnerr = VMM_GET_VAR(rvvm) pnerr = VMM_GET_VAR(orwm) pnerr = VMM_GET_VAR(orvvm) pnerr = VMM_GET_VAR(wt1m) pnerr = VMM_GET_VAR(topo) pnerr = VMM_GET_VAR(fipt1m) pnerr = VMM_GET_VAR(mut1m) else rwm_ = 0 rvvm_ = 0 orwm_ = 0 orvvm_ = 0 wt1m_ = 0 topo_ = 0 fipt1m_= 0 mut1m_ = 0 endif if (G_lam) then pnerr = VMM_GET_VAR(nestm_um) pnerr = VMM_GET_VAR(nestm_vm) else nestm_um_ = 0 nestm_vm_ = 0 endif * * Perform the computation in the LAST * cycle of Crank-Nicholson procedure only * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if ( Orh_icn .eq. Schm_itcn .or. .not.Orh_crank_L ) then * call rhsp_2
( rum, rvm, rcnm, rthm, rwm, rvvm, % orum, orvm, orcnm, orthm, orwm, orvvm, % ruw1m, rvw1m, ut1m, vt1m, tt1m, qt1m, % fit1m, st1m, tdt1m, psdt1m, nestm_um, nestm_vm, % wt1m, topo, fipt1m, mut1m, LDIST_DIM,l_nk ) * else * * Recover TRAJ RHS (RU,RV,RCNM,RTHM) to continue TRAJECTORY calculations * ---------------------------------------------------------------------- * !$omp parallel * !$omp do do k=1,l_nk do j=1,l_nj do i=1,l_ni rum (i,j,k) = orum (i,j,k) rvm (i,j,k) = orvm (i,j,k) rcnm(i,j,k) = orcnm(i,j,k) rthm(i,j,k) = orthm(i,j,k) end do end do end do !$omp end do * if (.not. Schm_hydro_L) then !$omp do do k=1,l_nk do j= 1, l_nj do i= 1, l_ni rwm (i,j,k) = orwm (i,j,k) rvvm(i,j,k) = orvvm(i,j,k) end do end do end do !$omp end do endif * !$omp end parallel * endif pnerr = vmmuld(-1,0) * 1000 format(3X,'TRAJ of COMPUTE THE RIGHT-HAND-SIDES: (S/R RHS_TR)') * return end