!-------------------------------------- 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_fillbus_tr - Fill the slice workspace variable for the physics trajectory * #include "model_macros_f.h"*
subroutine p_fillbus_tr ( F_busdyn,F_busper, 2,2 $ F_upm , F_vpm , F_tpm , F_qpm, F_trpm, $ F_umm , F_vmm , F_tmm , F_trmm, $ F_kmm , F_ktm , F_sig , $ F_jdo, F_step, DIST_DIM, Nk ) * implicit none * integer F_step,F_jdo, DIST_DIM, Nk * real F_busdyn(*),F_busper(*) real F_upm(DIST_SHAPE,Nk), F_vpm(DIST_SHAPE,Nk), $ F_tpm(DIST_SHAPE,Nk), F_qpm(DIST_SHAPE,Nk), $ F_trpm(DIST_SHAPE,Nk), $ F_umm(DIST_SHAPE,Nk), F_vmm(DIST_SHAPE,Nk), $ F_tmm(DIST_SHAPE,Nk), F_trmm(DIST_SHAPE,Nk), $ F_kmm(DIST_SHAPE,Nk), F_ktm(DIST_SHAPE,Nk), $ F_sig(DIST_SHAPE,Nk) * *author * Stephane Laroche (Dec 2001) * *revision * v3_00 - Laroche S. - initial MPI version (from p_fillbus) * v3_02 - Tanguay M./Laroche S. - do not assume TRAJ HU positive * v3_30 - Tanguay M. - adapt TL/AD to itf/pvptr * - Validation for LAM version * *object * Fill the slice workspace variable for the physics trajectory. * Change of units if required * *arguments * Name I/O Description *---------------------------------------------------------------- * F_busdyn I - dynamic bus * F_upm I - traj of wind image in x direction at time t* * F_vpm I - traj of wind image in y direction at time t* * F_tpm I - traj of virtual temperature at time t* * F_qpm I - traj of ln of pressure at time t* * F_umm I - traj of wind image in x direction at time t- * F_vmm I - traj of wind image in y direction at time t- * F_tmm I - traj of virtual temperature at time t- * F_kmm I - traj of vertical diffusion coefficients for momentum * F_ktm I - traj of vertical diffusion coefficients for heat * F_sig I - sigma levels * F_jdo I - slice number being processed *---------------------------------------------------------------- * *implicits #include "glb_ld.cdk"
#include "geomg.cdk"
#include "dcst.cdk"
#include "itf_phy_config.cdk"
#include "itf_phy_buses.cdk"
#include "itf_phy_busind.cdk"
#include "busind_tr.cdk"
* *notes * integer i, k, n, ii, indx, offp, offg, pid, gid, mul real con ** * --------------------------------------------------------------- * * 3D variables: extract row F_jdo * ------------------------------- * con = ( 1.0/cos(geomg_y_8(F_jdo))) * Dcst_rayt_8 do k= 1,Nk do i= 1, p_ni indx = (k-1)*p_ni+i-1 ii = i + p_offi C F_busdyn(utrajp +indx) = F_upm (ii,F_jdo,k) * con C F_busdyn(vtrajp +indx) = F_vpm (ii,F_jdo,k) * con F_busdyn(utrajp +indx) = F_upm (ii,F_jdo,k) F_busdyn(vtrajp +indx) = F_vpm (ii,F_jdo,k) F_busdyn(ttrajp +indx) = F_tpm (ii,F_jdo,k) C F_busdyn(utrajm +indx) = F_umm (ii,F_jdo,k) * con C F_busdyn(vtrajm +indx) = F_vmm (ii,F_jdo,k) * con F_busdyn(utrajm +indx) = F_umm (ii,F_jdo,k) * con F_busdyn(vtrajm +indx) = F_vmm (ii,F_jdo,k) * con F_busdyn(ttrajm +indx) = F_tmm (ii,F_jdo,k) F_busdyn(hutrajp+indx) = max(0., F_trpm(ii,F_jdo,k)) F_busdyn(hutrajm+indx) = max(0., F_trmm(ii,F_jdo,k)) F_busdyn(sigm +indx) = F_sig (ii,F_jdo,k) end do end do do k= 1,Nk-2 do i= 1, p_ni indx = (k-1)*p_ni+i-1 ii = i + p_offi F_busper(kmm + indx) = F_kmm(ii,F_jdo,k) F_busper(ktm + indx) = F_ktm(ii,F_jdo,k) end do end do do i= 1, p_ni indx = i-1 ii = i + p_offi F_busper(bmm + indx) = F_kmm(ii,F_jdo,Nk-1) F_busper(btm + indx) = F_ktm(ii,F_jdo,Nk-1) end do ** * * Surface fields: extract row F_jdo * --------------------------------- * do i= 1, p_ni indx = i-1 ii = i + p_offi F_busdyn(ptrajp + indx) = exp( F_qpm (ii,F_jdo,Nk) ) F_busdyn(eponmod + indx) = 1. end do * if (.not.G_LAM) then do i= 1, p_ni indx = i-1 ii = i + p_offi F_busdyn(eponmod + indx) = P_lmvd_vlsp (ii,F_jdo) end do endif * * Compute temperature from virtual temperature * -------------------------------------------- * call mfottv
( F_busdyn(ttrajp) , F_busdyn(ttrajp) , $ F_busdyn(hutrajp) , p_ni, Nk, p_ni ) call mfottv
( F_busdyn(ttrajm) , F_busdyn(ttrajm) , $ F_busdyn(hutrajm) , p_ni, Nk, p_ni ) * * --------------------------------------------------------------- * return end