!-------------------------------------- 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 -------------------------------------- !subroutine hintvec(psrcuu,kscolu,ksrcuugid,psrcvv,kscolv 1 & ,ksrcvvgid,ptrguu,ktcolu,ktrguugid,ptrgvv & ,ktcolv,ktrgvvgid,klev,cddegint) #if defined (DOC) * ***s/r hintvec * * * Author : S. Pellerin ARMA/AES Avril 2000 * Revision: * * JM Belanger CMDA/SMC Aug 2000 * . 32 bits conversion * ** Purpose: vectorial horizontal interpolation * * * *Arguments * input: * psrcuu(kscolu,klev) : source U componant * kscolu : number of collumns of source U componant * ksrcuugid : grid id of source U componant * psrcvv(kscolv,klev) : source V componant * kscolv : number of collumns of source V componant * ksrcvvgid : grid id of source V componant * ktcolu : number of collumns of target U componant * ktrguugid : grid id of target U componant * ktcolv : number of collumns of target V componant * ktrgvvgid : grid id of target V componant * klev : number of horizontal slabs to interpolate * cddegint : degree of horizontal interpolation * ouput: * ptrguu(ktcolu,klev) : target U componant * ptrgvv(ktcolv,klev) : target V componant * #endif implicit none *implicits integer ksrcuugid,ktrguugid,ksrcvvgid,ktrgvvgid integer kscolu,kscolv,ktcolu,ktcolv,klev real*8 psrcuu(kscolu,klev),ptrguu(ktcolu,klev),psrcvv(kscolv,klev) real*8 ptrgvv(ktcolv,klev) character*(*) cddegint c c---------------------------------------------------------- c integer ier,ezsetopt,vezuvint,ezdefset,ezgprm,iset integer clgrtyp,ini,inj,iig1,iig2,iig3,iig4,ji,itrg,jk real*8 zsrc(1),ztrguu(1),ztrgvv(1) pointer (pzsrc,zsrc) pointer (pztrguu,ztrguu) pointer (pztrgvv,ztrgvv) c c Setting degree of horizontal interpolations c ier = ezsetopt('INTERP_DEGREE',cddegint) c iset = ezdefset(ktrguugid,ksrcuugid) if (ktrguugid .eq. ktrgvvgid) then if (ksrcuugid .eq. ksrcvvgid) then do jk = 1,klev ier = vezuvint(ptrguu(1,jk),ptrgvv(1,jk),psrcuu(1,jk) & ,psrcvv(1,jk),ktcolu,kscolu) enddo else call hpalloc(pztrguu,ktcolu,ier,8) call hpalloc(pztrgvv,ktcolu,ier,8) c c .. from UU source component c call hpalloc(pzsrc,kscolu,ier,8) c do ji = 1,kscolu zsrc(ji) = 0.0 enddo c do jk = 1,klev ier = vezuvint(ptrguu(1,jk),ptrgvv(1,jk),psrcuu(1,jk),zsrc, $ ktcolu,kscolu) enddo c call hpdeallc(pzsrc,ier,1) c c .. from VV source component c iset = ezdefset(ktrguugid,ksrcvvgid) c call hpalloc(pzsrc,kscolv,ier,8) c do ji = 1,kscolv zsrc(ji) = 0.0 enddo c do jk = 1,klev ier = vezuvint(ztrguu,ztrgvv,zsrc,psrcvv(1,jk), $ ktcolu,kscolv) do ji = 1, ktcolu ptrguu(ji,jk) = ptrguu(ji,jk) + ztrguu(ji) enddo do ji = 1, ktcolv ptrgvv(ji,jk) = ptrgvv(ji,jk) + ztrgvv(ji) enddo enddo c call hpdeallc(pzsrc,ier,1) c call hpdeallc(pztrguu,ier,1) call hpdeallc(pztrgvv,ier,1) endif else c c UU interpolation .. c call hpalloc(pztrguu,ktcolu,ier,8) call hpalloc(pztrgvv,ktcolu,ier,8) c c .. from UU source component c if (ksrcuugid .eq. ksrcvvgid) then do jk = 1,klev ier = vezuvint(ptrguu(1,jk),ztrgvv,psrcuu(1,jk),psrcvv(1,jk) & ,ktcolu,kscolu) enddo else call hpalloc(pzsrc,kscolu,ier,8) c do ji = 1,kscolu zsrc(ji) = 0.0 enddo c do jk = 1,klev ier = vezuvint(ptrguu(1,jk),ztrgvv,psrcuu(1,jk),zsrc, $ ktcolu,kscolu) enddo c call hpdeallc(pzsrc,ier,1) c c .. from VV source component c iset = ezdefset(ktrguugid,ksrcvvgid) c call hpalloc(pzsrc,kscolv,ier,8) c do ji = 1,kscolv zsrc(ji) = 0.0 enddo c do jk = 1,klev ier = vezuvint(ztrguu,ztrgvv,zsrc,psrcvv(1,jk), $ ktcolu,kscolv) do ji = 1, ktcolu ptrguu(ji,jk) = ptrguu(ji,jk) + ztrguu(ji) enddo enddo c call hpdeallc(pzsrc,ier,1) endif c call hpdeallc(pztrguu,ier,1) call hpdeallc(pztrgvv,ier,1) c VV interpolation .. c call hpalloc(pztrguu,ktcolv,ier,8) call hpalloc(pztrgvv,ktcolv,ier,8) c c .. from UU source component c iset = ezdefset(ktrgvvgid,ksrcuugid) if (ksrcuugid .eq. ksrcvvgid) then do jk = 1,klev ier = vezuvint(ztrguu,ptrgvv(1,jk),psrcuu(1,jk),psrcvv(1,jk) & ,ktcolv,kscolu) enddo else call hpalloc(pzsrc,kscolu,ier,8) c do ji = 1,kscolu zsrc(ji) = 0.0 enddo c do jk = 1,klev ier = vezuvint(ztrguu,ptrgvv(1,jk),psrcuu(1,jk),zsrc, $ ktcolv,kscolu) enddo c call hpdeallc(pzsrc,ier,1) c c .. from VV source component c iset = ezdefset(ktrgvvgid,ksrcvvgid) c call hpalloc(pzsrc,kscolv,ier,8) c do ji = 1,kscolv zsrc(ji) = 0.0 enddo c do jk = 1,klev ier = vezuvint(ztrguu,ztrgvv,zsrc,psrcvv(1,jk), $ ktcolv,kscolv) do ji = 1, ktcolv ptrgvv(ji,jk) = ptrgvv(ji,jk) + ztrgvv(ji) enddo enddo c call hpdeallc(pzsrc,ier,1) endif c call hpdeallc(pztrguu,ier,1) call hpdeallc(pztrgvv,ier,1) endif c return end