!-------------------------------------- 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 initw2_tl -- TLM of initw2 * #include "model_macros_f.h"*
subroutine initw2_tl ( F_wt1, F_mul, F_mu, F_uu, F_vv, F_psd, F_fi, F_tt, F_ss, 1,4 $ F_wt1m,F_mulm,F_mum,F_uum,F_vvm,F_psdm,F_fim,F_ttm,F_ssm, $ DIST_DIM ) * implicit none * integer DIST_DIM real F_wt1(DIST_SHAPE,*),F_ss (DIST_SHAPE ),F_uu (DIST_SHAPE,*), $ F_vv (DIST_SHAPE,*),F_psd(DIST_SHAPE,*),F_fi (DIST_SHAPE,*), $ F_tt (DIST_SHAPE,*),F_mul(DIST_SHAPE,*),F_mu (DIST_SHAPE,*) * real F_wt1m(DIST_SHAPE,*),F_ssm (DIST_SHAPE ),F_uum (DIST_SHAPE,*), $ F_vvm (DIST_SHAPE,*),F_psdm(DIST_SHAPE,*),F_fim (DIST_SHAPE,*), $ F_ttm (DIST_SHAPE,*),F_mulm(DIST_SHAPE,*),F_mum (DIST_SHAPE,*) * *author * M.Tanguay * *revision * v3_03 - Tanguay M. - initial MPI version * v3_30 - Tanguay M. - Change parameters of initw2 * - use of geomg_invhsy_8, moved j0,jn,ng before * parallel region as in initw2 * *object * see id section * ------------------------------------------------- * REMARK: INPUT TRAJ: ssm, uum, vvm, psdm, fim, ttm * ------------------------------------------------- * *arguments * Name I/O Description *---------------------------------------------------------------- * F_wt1 O vertical velocity ( DZ/Dt ) * F_uu I x component of hor. velocity * F_vv I y component of hor. velocity * F_psd I vertical velocity ( pi star dot ) * F_fi I geopotential * F_tt I virtual temperature * F_ss I ln (pi / z ) * s s *---------------------------------------------------------------- * *implicits #include "glb_ld.cdk"
#include "geomg.cdk"
#include "intuv.cdk"
#include "inuvl.cdk"
#include "dcst.cdk"
#include "cstv.cdk"
#include "schm.cdk"
* *modules integer i, j, k, j0, jn, in1, in2, jn1, jn2, ng real wk1 (DIST_SHAPE,G_nk), wk2 (DIST_SHAPE,G_nk), $ wk3 (DIST_SHAPE,G_nk), wk4 (DIST_SHAPE,G_nk) real wk1m(DIST_SHAPE,G_nk), wk2m(DIST_SHAPE,G_nk), $ wk3m(DIST_SHAPE,G_nk), wk4m(DIST_SHAPE,G_nk) * __________________________________________________________________ * * TRAJECTORY * ---------- call rpn_comm_xch_halo ( F_fim, LDIST_DIM, l_ni, l_nj, G_nk, $ G_halox,G_haloy,G_periodx,G_periody,l_ni,0 ) * * TLM * --- call rpn_comm_xch_halo ( F_fi, LDIST_DIM, l_ni, l_nj, G_nk, $ G_halox,G_haloy,G_periodx,G_periody,l_ni,0 ) * in1= l_ni in2= l_niu jn1= l_nj jn2= l_njv j0 = 1 jn = l_njv if (l_south) j0 = 3 if (l_north) jn = l_njv - 1 * **************************************************** * TERM1: HORIZONTAL ADVECTION OF GEOGRAPHIC HEIGHT * **************************************************** * * Gradient of geopotential * ~~~~~~~~~~~~~~~~~~~~~~~~ * !$omp parallel !$omp do do k = 1, G_nk * * TRAJECTORY * ---------- F_mulm(:,:,k) = 0. F_mum (:,:,k) = 0. wk1m (:,:,k) = 0. wk2m (:,:,k) = 0. wk3m (:,:,k) = 0. wk4m (:,:,k) = 0. * * TLM * --- F_mul(:,:,k) = 0. F_mu (:,:,k) = 0. wk1 (:,:,k) = 0. wk2 (:,:,k) = 0. wk3 (:,:,k) = 0. wk4 (:,:,k) = 0. * do j = 1, jn1 do i = 1, in2 * * TRAJECTORY * ---------- wk1m(i,j,k) = ( F_fim(i+1,j,k) - F_fim(i,j,k) ) / Geomg_hx_8(i) $ * F_uum(i,j,k) / Dcst_grav_8 * * TLM * --- wk1(i,j,k) = ( F_fim(i+1,j,k) - F_fim(i,j,k) ) / Geomg_hx_8(i) $ * F_uu (i,j,k) / Dcst_grav_8 + $ ( F_fi (i+1,j,k) - F_fi (i,j,k) ) / Geomg_hx_8(i) $ * F_uum(i,j,k) / Dcst_grav_8 * end do end do do j = 1, jn2 do i = 1, in1 * * TRAJECTORY * ---------- wk2m(i,j,k) = ( F_fim(i,j+1,k) - F_fim(i,j,k) ) * $ Geomg_cyv2_8(j) * Geomg_invhsy_8(j) $ * F_vvm(i,j,k) / Dcst_grav_8 * * TLM * --- wk2 (i,j,k) = ( F_fim(i,j+1,k) - F_fim(i,j,k) ) * $ Geomg_cyv2_8(j) * Geomg_invhsy_8(j) $ * F_vv (i,j,k) / Dcst_grav_8 + $ ( F_fi (i,j+1,k) - F_fi (i,j,k) ) * $ Geomg_cyv2_8(j) * Geomg_invhsy_8(j) $ * F_vvm(i,j,k) / Dcst_grav_8 * end do end do end do !$omp enddo * * Interpolate from staggered grids to basic grid * !$omp single * TRAJECTORY * ---------- call rpn_comm_xch_halo ( wk1m, LDIST_DIM, l_niu,l_nj,G_nk, $ G_halox,G_haloy,G_periodx,G_periody,l_ni,0 ) call rpn_comm_xch_halo ( wk2m, LDIST_DIM, l_ni,l_njv,G_nk, $ G_halox,G_haloy,G_periodx,G_periody,l_ni,0 ) * * TLM * --- call rpn_comm_xch_halo ( wk1, LDIST_DIM, l_niu,l_nj,G_nk, $ G_halox,G_haloy,G_periodx,G_periody,l_ni,0 ) call rpn_comm_xch_halo ( wk2, LDIST_DIM, l_ni,l_njv,G_nk, $ G_halox,G_haloy,G_periodx,G_periody,l_ni,0 ) !$omp end single * !$omp do do k = 1, G_nk do j = 1, jn1 do i = 1, in2 * * TRAJECTORY * ---------- wk3m(i,j,k) = inuvl_wxux3_8(i,1) * wk1m(i-2,j,k) $ + inuvl_wxux3_8(i,2) * wk1m(i-1,j,k) $ + inuvl_wxux3_8(i,3) * wk1m(i ,j,k) $ + inuvl_wxux3_8(i,4) * wk1m(i+1,j,k) * * TLM * --- wk3(i,j,k) = inuvl_wxux3_8(i,1) * wk1(i-2,j,k) $ + inuvl_wxux3_8(i,2) * wk1(i-1,j,k) $ + inuvl_wxux3_8(i,3) * wk1(i ,j,k) $ + inuvl_wxux3_8(i,4) * wk1(i+1,j,k) end do end do end do !$omp enddo * !$omp do do k=1,G_nk do j = j0, jn do i = 1, in1 * * TRAJECTORY * ---------- wk1m(i,j,k) = inuvl_wyvy3_8(j,1) * wk2m(i,j-2,k) % + inuvl_wyvy3_8(j,2) * wk2m(i,j-1,k) % + inuvl_wyvy3_8(j,3) * wk2m(i,j ,k) % + inuvl_wyvy3_8(j,4) * wk2m(i,j+1,k) * TLM * --- wk1(i,j,k) = inuvl_wyvy3_8(j,1) * wk2(i,j-2,k) $ + inuvl_wyvy3_8(j,2) * wk2(i,j-1,k) $ + inuvl_wyvy3_8(j,3) * wk2(i,j ,k) $ + inuvl_wyvy3_8(j,4) * wk2(i,j+1,k) end do end do if (l_south) then do i = 1, in1 * * TRAJECTORY * ---------- wk1m(i,j0-2,k)= inuvl_wyvy3_8(j0-2,3) * wk2m(i,j0-2,k) % + inuvl_wyvy3_8(j0-2,4) * wk2m(i,j0-1,k) wk1m(i,j0-1,k)= inuvl_wyvy3_8(j0-1,2) * wk2m(i,j0-2,k) % + inuvl_wyvy3_8(j0-1,3) * wk2m(i,j0-1,k) % + inuvl_wyvy3_8(j0-1,4) * wk2m(i,j0,k ) * * TLM * --- wk1(i,j0-2,k) = inuvl_wyvy3_8(j0-2,3) * wk2(i,j0-2,k) $ + inuvl_wyvy3_8(j0-2,4) * wk2(i,j0-1,k) wk1(i,j0-1,k) = inuvl_wyvy3_8(j0-1,2) * wk2(i,j0-2,k) $ + inuvl_wyvy3_8(j0-1,3) * wk2(i,j0-1,k) $ + inuvl_wyvy3_8(j0-1,4) * wk2(i,j0 ,k) end do endif if (l_north) then do i = 1, in1 * * TRAJECTORY * ---------- wk1m(i,jn+2,k)= inuvl_wyvy3_8(jn+2,1) * wk2m(i,jn ,k) % + inuvl_wyvy3_8(jn+2,2) * wk2m(i,jn+1,k) wk1m(i,jn+1,k)= inuvl_wyvy3_8(jn+1,1) * wk2m(i,jn-1,k) % + inuvl_wyvy3_8(jn+1,2) * wk2m(i,jn ,k) % + inuvl_wyvy3_8(jn+1,3) * wk2m(i,jn+1,k) * * TLM * --- wk1(i,jn+2,k) = inuvl_wyvy3_8(jn+2,1) * wk2(i,jn ,k) $ + inuvl_wyvy3_8(jn+2,2) * wk2(i,jn+1,k) wk1(i,jn+1,k) = inuvl_wyvy3_8(jn+1,1) * wk2(i,jn-1,k) $ + inuvl_wyvy3_8(jn+1,2) * wk2(i,jn ,k) $ + inuvl_wyvy3_8(jn+1,3) * wk2(i,jn+1,k) end do endif do j = 1, jn1 do i = 1, in1 * * TRAJECTORY * ---------- F_wt1m(i,j,k) = ( wk3m(i,j,k) + wk1m(i,j,k) ) / Geomg_cy2_8(j) wk1m(i,j,k) = 1 + Geomg_dpib(k) * (exp(F_ssm(i,j)) - 1.0) * * TLM * --- F_wt1(i,j,k) = ( wk3(i,j,k) + wk1(i,j,k) ) / Geomg_cy2_8(j) wk1(i,j,k) = Geomg_dpib(k) * (exp(F_ssm(i,j))*F_ss(i,j)) end do end do end do !$omp enddo * ********* * TERM2 * ********* * * Prepare key factors of TERM2 !$omp single * TRAJECTORY * ---------- call rpn_comm_xch_halo ( wk1m,LDIST_DIM,l_ni,l_nj,G_nk, $ G_halox,G_haloy,G_periodx,G_periody,l_ni,0 ) * * TLM * --- call rpn_comm_xch_halo ( wk1, LDIST_DIM,l_ni,l_nj,G_nk, $ G_halox,G_haloy,G_periodx,G_periody,l_ni,0 ) !$omp end single * !$omp do do k=1,G_nk do j = 1, jn1 do i = 1, in1 * * TRAJECTORY * ---------- wk3m(i,j,k) = ((1.-intuv_c0xxu_8(i))*wk1m(i ,j,k) % + intuv_c0xxu_8(i) *wk1m(i+1,j,k))*F_uum(i,j,k) * * TLM * --- wk3 (i,j,k) = ((1.-intuv_c0xxu_8(i))*wk1m(i ,j,k) % + intuv_c0xxu_8(i) *wk1m(i+1,j,k))*F_uu (i,j,k) % + ((1.-intuv_c0xxu_8(i))*wk1 (i ,j,k) % + intuv_c0xxu_8(i) *wk1 (i+1,j,k))*F_uum(i,j,k) * end do end do do j = 1, jn2 do i = 1, in1 * * TRAJECTORY * ---------- wk4m(i,j,k) = ((1.-intuv_c0yyv_8(j))*wk1m(i,j ,k) % + intuv_c0yyv_8(j) *wk1m(i,j+1,k))*F_vvm(i,j,k) * * TLM * --- wk4 (i,j,k) = ((1.-intuv_c0yyv_8(j))*wk1m(i,j ,k) % + intuv_c0yyv_8(j) *wk1m(i,j+1,k))*F_vv (i,j,k) % + ((1.-intuv_c0yyv_8(j))*wk1 (i,j ,k) % + intuv_c0yyv_8(j) *wk1 (i,j+1,k))*F_vvm(i,j,k) * end do end do end do !$omp enddo * !$omp single * TRAJECTORY * ---------- call rpn_comm_xch_halo ( wk3m, LDIST_DIM, l_niu,l_nj,G_nk, $ G_halox,G_haloy,G_periodx,G_periody,l_ni,0 ) call rpn_comm_xch_halo ( wk4m, LDIST_DIM, l_ni,l_njv,G_nk, $ G_halox,G_haloy,G_periodx,G_periody,l_ni,0 ) * * TLM * --- call rpn_comm_xch_halo ( wk3, LDIST_DIM, l_niu,l_nj,G_nk, $ G_halox,G_haloy,G_periodx,G_periody,l_ni,0 ) call rpn_comm_xch_halo ( wk4, LDIST_DIM, l_ni,l_njv,G_nk, $ G_halox,G_haloy,G_periodx,G_periody,l_ni,0 ) !$omp end single * !$omp do do k=1,G_nk * * TRAJECTORY * ---------- call caldiv_2
( wk2m(minx,miny,k), wk3m(minx,miny,k), % wk4m(minx,miny,k), LDIST_DIM, 1 ) * * TLM * --- call caldiv_2
( wk2(minx,miny,k), wk3(minx,miny,k), % wk4(minx,miny,k), LDIST_DIM, 1 ) * enddo !$omp enddo !$omp end parallel * * Vertical integration over pi* * * TRAJECTORY * ---------- ng = (l_maxx-l_minx+1)*(l_maxy-l_miny+1) call hatoprg
(wk4m,wk2m,1.0,Geomg_hz_8,ng,G_nk) * * TLM * --- call hatoprg
(wk4,wk2,1.0,Geomg_hz_8,ng,G_nk) * !$omp parallel !$omp do do k = 1, G_nk do j = 1, jn1 do i = 1, in1 * * TRAJECTORY * ---------- F_wt1m(i,j,k) = F_wt1m(i,j,k) + $ Dcst_rgasd_8 * F_ttm(i,j,k) / Dcst_grav_8 / $ ( Geomg_pia(k) + Geomg_pib(k)*exp(F_ssm(i,j)) ) * $ ( wk4m(i,j,1) * Geomg_pib(k) / Cstv_pisrf_8 - $ F_psdm(i,j,k) * wk1m(i,j,k) ) * * TLM * --- F_wt1(i,j,k) = F_wt1(i,j,k) + * $ Dcst_rgasd_8 * F_ttm(i,j,k) / Dcst_grav_8 / $ ( Geomg_pia(k) + Geomg_pib(k)*exp(F_ssm(i,j)) ) * $ ( wk4 (i,j,1) * Geomg_pib(k) / Cstv_pisrf_8 - $ F_psdm(i,j,k) * wk1 (i,j,k) + F_psd (i,j,k) * wk1m (i,j,k) ) + * $ Dcst_rgasd_8 * F_tt (i,j,k) / Dcst_grav_8 / $ ( Geomg_pia(k) + Geomg_pib(k)*exp(F_ssm(i,j)) ) * $ ( wk4m(i,j,1) * Geomg_pib(k) / Cstv_pisrf_8 - $ F_psdm(i,j,k) * wk1m(i,j,k) ) - * $ ( Dcst_rgasd_8 * F_ttm(i,j,k) / Dcst_grav_8 / $ ( Geomg_pia(k) + Geomg_pib(k)*exp(F_ssm(i,j)) )**2 * $ ( Geomg_pib(k)*exp(F_ssm(i,j))*F_ss(i,j)) $ ) * $ ( wk4m(i,j,1) * Geomg_pib(k) / Cstv_pisrf_8 - $ F_psdm(i,j,k) * wk1m(i,j,k) ) * end do end do end do !$omp enddo * !$omp end parallel * __________________________________________________________________ * return end