!-------------------------------------- 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 adw_interp_tr - Equivalent to adw_interp for TRAJECTORY * #include "model_macros_f.h"*
subroutine adw_interp_tr ( F_outm, F_inm, F_um, F_vm, 7,10 % F_wind_L, F_mono_L, DIST_DIM, Nk,i0,in,j0,jn ) * implicit none * logical F_wind_L, F_mono_L * integer DIST_DIM, Nk, i0,in,j0,jn * real F_outm (DIST_SHAPE, Nk), % F_inm (DIST_SHAPE, Nk) real F_um(*), F_vm(*) * *author * monique tanguay * *revision * v3_00 - Tanguay M. - initial MPI version * v3_20 - Tanguay M. - Lagrange 3D * v3_30 - Tanguay M. - Adapt TL/AD to Adw_interp_type_S * *language * fortran 77 * *object * see id section * *TRAJ of *arguments *______________________________________________________________________ * | | | * NAME | DESCRIPTION | I/O | *--------------|-------------------------------------------------|-----| * | | | * F_out | interpolated field | o | * F_in | field to interpolate | i | * F_wind_L | switch: .true. : field to interpolate is a wind | i | * | like quantity | i | * F_mono_L | switch: .true. : monotonic interpolation | i | *______________|_________________________________________________|_____| * *implicits #include "glb_ld.cdk"
#include "adw.cdk"
#include "adwm.cdk"
************************************************************************ integer i, j, k, nij, nijk, nijkag, n, dest_ni * real dummy * *********************************************************************** if (Adw_interp_type_S(1:5).ne.'LAG3D') $ call gem_stop
('ADW_INTERP_TR: Adw_interp_type_S(1:5).ne.LAG3D not done',-1) * nij = l_ni *l_nj nijk = l_ni *l_nj *l_nk nijkag = Adw_nit*Adw_njt*l_nk * ************************************************************************ * * Adjust field to advection grid * * Compute extension beyond the pole if appropriate * ************************************************************************ if (G_lam) then n=0 dest_ni=l_ni else n=999 dest_ni=G_ni endif call rpn_comm_xch_halox (F_inm, LDIST_DIM, l_ni, l_nj, l_nk, % Adw_halox, Adw_haloy, G_periodx, G_periody, F_um, -Adw_halox+1, % Adw_nic+Adw_halox, -Adw_haloy+1, Adw_njc+Adw_haloy, dest_ni, n) * if (.not.G_lam) then if ( l_south ) then * if ( F_wind_L ) then call adw_pol0
(F_um, 0, Adw_nic,Adw_halox,Adw_njc, % Adw_haloy,l_nk) else call adw_pols
(F_um,Adw_wx_8, 0, Adw_nic,Adw_halox, % Adw_njc,Adw_haloy,l_nk) endif call adw_polx
(F_um,Adw_xg_8,.true.,Adw_nic,Adw_halox, % Adw_njc,Adw_haloy,l_nk) endif * if ( l_north ) then * if ( F_wind_L ) then call adw_pol0
(F_um,Adw_njc+1,Adw_nic,Adw_halox,Adw_njc, % Adw_haloy,l_nk) else call adw_pols
(F_um,Adw_wx_8, Adw_njc+1,Adw_nic,Adw_halox, % Adw_njc,Adw_haloy,l_nk) endif call adw_polx
(F_um,Adw_xg_8,.false.,Adw_nic,Adw_halox, % Adw_njc,Adw_haloy,l_nk) endif endif ************************************************************************ * * Compute second derivative for cubic spline in the vertical * ************************************************************************ if ( .not. Adw_interp_type_S(1:5).eq.'LAG3D' ) call adw_vder
( F_vm, F_um, Adw_nit, Adw_njt, l_nk ) ************************************************************************ * * Interpolate * ************************************************************************ if ( .not. Adw_interp_type_S(1:5).eq.'LAG3D' ) then call adw_tricub
( Adwm_wrkcm, F_um, F_vm, % Adwm_n1m, Adwm_capx1m, Adwm_xgg1m, % Adwm_xdd1m, Adwm_capy1m, Adwm_ygg1m, % Adwm_ydd1m, Adwm_capz1m,Adwm_cz1m, % nijk, F_mono_L,i0,in,j0,jn,l_nk) else call adw_tricub_lag3d
( Adwm_wrkcm, F_um, % Adwm_capx1m, Adwm_capy1m, Adwm_capz1m, % nijk, F_mono_L,i0,in,j0,jn,l_nk) endif * do k = 1, l_nk do j = j0,jn do i = i0,in F_outm(i,j,k) = Adwm_wrkcm ( (k-1)*nij+(j-1)*l_ni+i ) enddo enddo enddo * return end