!-------------------------------------- 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 p_vmmphy_tl - load all fields required by the TL physics * #include "model_macros_f.h"*
subroutine p_vmmphy_tl( F_up, F_vp, F_wp, F_tp, F_qp, F_trp, 1,2 $ F_um, F_vm, F_tm, F_trm, $ F_lnpsm, F_sig, DIST_DIM, Nk ) * implicit none * integer DIST_DIM,Nk real F_up (DIST_SHAPE,Nk), F_vp (DIST_SHAPE,Nk) , $ F_wp (DIST_SHAPE,Nk), F_tp (DIST_SHAPE,Nk) , $ F_qp (DIST_SHAPE,Nk), F_trp(DIST_SHAPE,Nk,*), $ F_um (DIST_SHAPE,Nk), F_vm (DIST_SHAPE,Nk) , $ F_tm (DIST_SHAPE,Nk), F_trm(DIST_SHAPE,Nk,*), $ F_lnpsm(DIST_SHAPE), F_sig(DIST_SHAPE,Nk) * *author * Stephane Laroche - January 2004 * *revision * v3_20 - Laroche S. - initial MPI version * v3_21 - Tanguay M. - Revision Openmp * v3_30 - Tanguay M. - adapt TL/AD to itf * *object * *arguments * Name I/O Description *---------------------------------------------------------------- * F_up *---------------------------------------------------------------- * *implicits #include "glb_ld.cdk"
#include "geomg.cdk"
#include "cstv.cdk"
#include "dcst.cdk"
#include "schm.cdk"
#include "p_cond.cdk"
#include "itf_phy_buses.cdk"
#include "inuvl.cdk"
#include "vt1.cdk"
#include "vt0.cdk"
#include "itf_phy_busind.cdk"
* ** integer vmmlod,vmmget,vmmuln external vmmlod,vmmget,vmmuln * integer*8 pnt_trp(phyt_ntr),pnt_trm(phyt_ntr) integer err, key(10), i, j, k, n, i0, j0, in, jn, nksurf, $ keyp(phyt_ntr), keym(phyt_ntr), keyp_, keym_ real dt, dzmin, dzmin_, sigsfc, trp, trm real wk1(LDIST_SHAPE),wk2(LDIST_SHAPE),wk3(LDIST_SHAPE), $ wk4(LDIST_SHAPE) pointer (patrp, trp(LDIST_SHAPE,*)),(patrm, trm(LDIST_SHAPE,*)) * * ________________________________________________________________ * keyp_ = VMM_KEY (trt1) keym_ = VMM_KEY (trt0) if (phyt_ntr.gt.0) then do n=1,phyt_ntr keyp(n) = keyp_ + n keym(n) = keym_ + n end do err = vmmlod(keyp,phyt_ntr) err = vmmlod(keym,phyt_ntr) do n=1,phyt_ntr err = vmmget(keyp(n),patrp,trp) pnt_trp(n) = patrp err = vmmget(keym(n),patrm,trm) pnt_trm(n) = patrm end do endif * key( 1) = VMM_KEY(ut0) key( 2) = VMM_KEY(vt0) key( 3) = VMM_KEY(tt0) key( 4) = VMM_KEY(ut1) key( 5) = VMM_KEY(vt1) key( 6) = VMM_KEY(tt1) key( 7) = VMM_KEY(qt0) key( 8) = VMM_KEY(qt1) err = vmmlod(key,8) err = VMM_GET_VAR(ut0) err = VMM_GET_VAR(vt0) err = VMM_GET_VAR(tt0) err = VMM_GET_VAR(ut1) err = VMM_GET_VAR(vt1) err = VMM_GET_VAR(tt1) err = VMM_GET_VAR(qt0) err = VMM_GET_VAR(qt1) if (.not.Schm_hydro_L) then key(9 ) = VMM_KEY(qpt0) key(10) = VMM_KEY(qpt1) err = vmmlod(key(9),2) err = VMM_GET_VAR(qpt0) err = VMM_GET_VAR(qpt1) endif * **************************************************** * Copy variables at time t- and t* in workfields * **************************************************** * !$omp parallel * !$omp do do k=1,l_nk * do j= 1, l_nj do i= 1, l_ni F_um(i,j,k) = ut0(i,j,k) F_vm(i,j,k) = vt0(i,j,k) F_tm(i,j,k) = tt0(i,j,k) F_up(i,j,k) = ut1(i,j,k) F_vp(i,j,k) = vt1(i,j,k) F_tp(i,j,k) = tt1(i,j,k) end do end do * if (Schm_hydro_L) then do j= 1, l_nj do i= 1, l_ni F_qp(i,j,k) = qt1(i,j,k) end do end do if(k.eq.1) then do i= 1, l_ni F_lnpsm(i,j) = qt0(i,j,l_nk) end do endif else do j= 1, l_nj do i= 1, l_ni F_qp(i,j,k) = qt1(i,j,k) - qpt1(i,j,k) end do end do if(k.eq.1) then do i= 1, l_ni F_lnpsm(i,j) = qt0(i,j,l_nk) - qpt0(i,j,l_nk) end do endif endif * end do !$omp end do * * sigma levels retrieved from trajectory * -------------------------------------- * if (phyt_ntr.gt.0) then do n=1,phyt_ntr patrp = pnt_trp(n) patrm = pnt_trm(n) !$omp do do k=1,l_nk do j= 1, l_nj do i= 1, l_ni F_trp(i,j,k,n) = trp(i,j,k) F_trm(i,j,k,n) = trm(i,j,k) end do end do end do !$omp end do end do endif * * F_wp not initialized as for the NLM * ----------------------------------- * No impact from vertical motion * * * dzmin not calculated * -------------------- * No send dzmin and nksurf to the physics * * *C interpolate wind images at time t1 and t2 * ----------------------------------------- * !$omp end parallel call itf_phy_uvgridscal
( F_up, F_vp, LDIST_DIM, l_nk, .true. ) call itf_phy_uvgridscal
( F_um, F_vm, LDIST_DIM, l_nk, .true. ) * * * ________________________________________________________________ * return end