!-------------------------------------- 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 INITGDG2(POUT,PIN,KNI,KNJ,KNK,KIG2,CDVAR) 20 * #if defined (DOC) * ***s/r INITGDG2 - Transfer input grid-point trial fields (from RPN file) * to analysis grid fields. * WARNING!!!!!!!!!! :This also involves a transformation from true winds to wind images. * *Author : Luc Fillion *RPN/AES - 3 Nov 98 *Revision: * C. Charette *ARMA/AES Nov 1998 * - Fix branch when kig2=0 * S. Pellerin *ARMA/SMC May 2000 * - 3D Transfer variable * Luc Fillion *ARMA/EC - 10 Apr. 2007: Add warning comment above. * Luc Fillion *ARMA/EC - 20 Apr. 2007: Enforce kig2 = 1 always in grd_typ='LU' mode. * Luc Fillion *ARMA/EC - Update to v_10_0_3. * *Arguments * i : PIN(KNI,KNJ,knk) : field to be transferred * i : KNI, KNJ,KNK : equivalent to NI, NJ. Used to dimension PTRANS * i : KIG2 : grid type according to the parameter IG2 of the * RPN standard files. * i : CDVAR : variable type being transfer * * o : POUT(KNI,KNK,KNJ) : field to be filled * #endif * IMPLICIT NONE C * *IMPLICITS #include "pardim.cdk"
#include "comdim.cdk"
#include "comcst.cdk"
#include "comphy.cdk"
#include "comgem.cdk"
#include "comgrd_param.cdk"
* INTEGER KNI, KNJ,KNK,KIG2 CHARACTER*2 CDVAR REAL*8 PIN(KNI,KNJ,knk), POUT(KNI,KNK,KNJ) C CHARACTER*2 CLVAR INTEGER JI, JJ,jlev REAL*8 ZCON * ** CLVAR=CDVAR if(grd_typ.eq.'LU') kig2 = 1 C C* 1. Input field is stored from North to South C 100 continue IF(KIG2.EQ.1) THEN IF(CLVAR.EQ.'UU') THEN do jlev = 1,knk do jj = 1, KNJ DO JI = 1, KNI pout(ji,jlev,jj) = CONIMA(JJ)*pin(JI,JJ,JLEV)*RMSKNT END DO END DO enddo elseif(CLVAR.EQ.'VV') THEN DO JLEV = 1,KNK DO JJ = 1, KNJ DO JI = 1, KNI pout(ji,jlev,jj) = CONIMA(JJ)*pin(JI,JJ,JLEV)*RMSKNT END DO END DO enddo ELSEIF(CLVAR.EQ.'CC') THEN DO JLEV = 1,KNK DO JJ = 1, KNJ DO JI = 1, KNI pout(ji,jlev,jj) = pin(JI,JJ,JLEV) END DO END DO enddo ELSEIF(CLVAR.EQ.'PP') THEN DO JLEV = 1,KNK DO JJ = 1, KNJ DO JI = 1, KNI pout(ji,jlev,jj) = pin(JI,JJ,JLEV) END DO END DO enddo ELSEIF(CLVAR.EQ.'GP') THEN ZCON = 10.*RG DO JLEV = 1,KNK DO JJ = 1, KNJ DO JI = 1, KNI pout(ji,jlev,jj) = pin(JI,JJ,JLEV)*ZCON END DO END DO enddo ELSEIF(CLVAR.EQ.'GB') THEN ZCON = 10.*RG DO JLEV = 1,KNK DO JJ = 1, KNJ DO JI = 1, KNI pout(ji,jlev,jj) = pin(JI,JJ,JLEV)*ZCON END DO END DO enddo ELSEIF(CLVAR.EQ.'TT') THEN ZCON = TCDK DO JLEV = 1,KNK DO JJ = 1, KNJ DO JI = 1, KNI pout(ji,jlev,jj)=pin(JI,JJ,JLEV) +ZCON END DO END DO enddo ELSEIF(CLVAR.EQ.'UT') THEN DO JLEV = 1,KNK DO JJ = 1, KNJ DO JI = 1, KNI pout(ji,jlev,jj)=pin(JI,JJ,JLEV) END DO END DO enddo ELSEIF(CLVAR.EQ.'VT') THEN DO JLEV = 1,KNK DO JJ = 1, KNJ DO JI = 1, KNI pout(ji,jlev,jj)=pin(JI,JJ,JLEV) END DO END DO enddo ELSEIF(CLVAR.EQ.'GZ') THEN ZCON = 10.*RG DO JLEV = 1,KNK DO JJ = 1, KNJ DO JI = 1, KNI pout(ji,jlev,jj)=pin(JI,JJ,JLEV)*ZCON END DO END DO enddo ELSEIF(CLVAR.EQ.'ES') THEN DO JLEV = 1,KNK DO JJ = 1, KNJ DO JI = 1, KNI pout(ji,jlev,jj)=pin(JI,JJ,JLEV) END DO END DO enddo ELSEIF(CLVAR.EQ.'LQ') THEN DO JLEV = 1,KNK DO JJ = 1, KNJ DO JI = 1, KNI pout(ji,jlev,jj)=pin(JI,JJ,JLEV) END DO END DO enddo ELSEIF(CLVAR.EQ.'HU') THEN DO JLEV = 1,KNK DO JJ = 1, KNJ DO JI = 1, KNI pout(ji,jlev,jj)= max(pin(JI,JJ,JLEV),rminhu) END DO END DO enddo ELSEIF(CLVAR.EQ.'O3') THEN DO JLEV = 1,KNK DO JJ = 1, KNJ DO JI = 1, KNI pout(ji,jlev,jj)=pin(JI,JJ,JLEV) enddo enddo enddo ELSEIF(CLVAR.EQ.'TR') THEN DO JLEV = 1,KNK DO JJ = 1, KNJ DO JI = 1, KNI pout(ji,jlev,jj)=pin(JI,JJ,JLEV) enddo enddo enddo ELSEIF(CLVAR.EQ.'P0') THEN zcon = 1.e2 DO JLEV = 1,KNK DO JJ = 1, KNJ DO JI = 1, KNI pout(ji,jlev,jj)=zcon*pin(JI,JJ,JLEV) END DO END DO enddo ELSEIF(CLVAR.EQ.'PT') THEN zcon = 1.e2 DO JLEV = 1,KNK DO JJ = 1, KNJ DO JI = 1, KNI pout(ji,jlev,jj)= anint(zcon*pin(JI,JJ,JLEV)) END DO END DO enddo ELSEIF(CLVAR.EQ.'LP') THEN DO JLEV = 1,KNK DO JJ = 1, KNJ DO JI = 1, KNI pout(ji,jlev,jj)=pin(JI,JJ,JLEV) END DO END DO enddo ELSEIF(CLVAR.EQ.'UP') THEN DO JLEV = 1,KNK DO JJ = 1, KNJ DO JI = 1, KNI pout(ji,jlev,jj)=pin(JI,JJ,JLEV) END DO END DO enddo END IF C ELSEIF(KIG2.EQ.0) THEN C C* 2. Input field is stored from South to North C 200 CONTINUE C IF(CLVAR.EQ.'UU') THEN DO JLEV = 1,KNK DO JJ = 1, KNJ DO JI = 1, KNI POUT(JI,JLEV,JJ) = CONIMA(JJ)*RMSKNT S *PIN(JI,KNJ-JJ+1,jlev) END DO END DO enddo ELSEIF(CLVAR.EQ.'VV') THEN DO JLEV = 1,KNK DO JJ = 1, KNJ DO JI = 1, KNI POUT(JI,JLEV,JJ) = CONIMA(JJ)*RMSKNT S *PIN(JI,KNJ-JJ+1,JLEV) END DO END DO enddo ELSEIF(CLVAR.EQ.'CC') THEN DO JLEV = 1,KNK DO JJ = 1, KNJ DO JI = 1, KNI POUT(JI,JLEV,JJ) = PIN(JI,KNJ-JJ+1,JLEV) END DO END DO enddo ELSEIF(CLVAR.EQ.'PP') THEN DO JLEV = 1,KNK DO JJ = 1, KNJ DO JI = 1, KNI POUT(JI,JLEV,JJ) = PIN(JI,KNJ-JJ+1,JLEV) END DO END DO enddo ELSEIF(CLVAR.EQ.'TT') THEN ZCON = TCDK DO JLEV = 1,KNK DO JJ = 1, KNJ DO JI = 1, KNI POUT(JI,JLEV,JJ)=PIN(JI,KNJ-JJ+1,JLEV) + ZCON END DO END DO enddo ELSEIF(CLVAR.EQ.'UT') THEN DO JLEV = 1,KNK DO JJ = 1, KNJ DO JI = 1, KNI POUT(JI,JLEV,JJ)=PIN(JI,KNJ-JJ+1,JLEV) END DO END DO enddo ELSEIF(CLVAR.EQ.'VT') THEN DO JLEV = 1,KNK DO JJ = 1, KNJ DO JI = 1, KNI POUT(JI,JLEV,JJ)=PIN(JI,KNJ-JJ+1,JLEV) END DO END DO enddo ELSEIF(CLVAR.EQ.'GZ') THEN ZCON = 10.*RG DO JLEV = 1,KNK DO JJ = 1, KNJ DO JI = 1, KNI POUT(JI,JLEV,JJ)=PIN(JI,KNJ-JJ+1,JLEV)*ZCON END DO END DO enddo ELSEIF(CLVAR.EQ.'GP') THEN ZCON = 10.*RG DO JLEV = 1,KNK DO JJ = 1, KNJ DO JI = 1, KNI POUT(JI,JLEV,JJ)=PIN(JI,KNJ-JJ+1,JLEV)*ZCON END DO END DO enddo ELSEIF(CLVAR.EQ.'GB') THEN ZCON = 10.*RG DO JLEV = 1,KNK DO JJ = 1, KNJ DO JI = 1, KNI POUT(JI,JLEV,JJ)=PIN(JI,KNJ-JJ+1,JLEV)*ZCON END DO END DO enddo ELSEIF(CLVAR.EQ.'ES') THEN DO JLEV = 1,KNK DO JJ = 1, KNJ DO JI = 1, KNI POUT(JI,JLEV,JJ)=PIN(JI,KNJ-JJ+1,JLEV) END DO END DO enddo ELSEIF(CLVAR.EQ.'HU') THEN DO JLEV = 1,KNK DO JJ = 1, KNJ DO JI = 1, KNI POUT(JI,JLEV,JJ)= max(PIN(JI,KNJ-JJ+1,JLEV),rminhu) END DO END DO enddo ELSEIF(CLVAR.EQ.'LQ') THEN DO JLEV = 1,KNK DO JJ = 1, KNJ DO JI = 1, KNI POUT(JI,JLEV,JJ)=PIN(JI,KNJ-JJ+1,JLEV) END DO END DO enddo ELSEIF(CLVAR.EQ.'O3') THEN DO JLEV = 1,KNK DO JJ = 1, KNJ DO JI = 1, KNI POUT(JI,JLEV,JJ)=PIN(JI,KNJ-JJ+1,JLEV) enddo enddo enddo ELSEIF(CLVAR.EQ.'TR') THEN DO JLEV = 1,KNK DO JJ = 1, KNJ DO JI = 1, KNI POUT(JI,JLEV,JJ)=PIN(JI,KNJ-JJ+1,JLEV) enddo enddo enddo ELSEIF(CLVAR.EQ.'P0') THEN zcon = 1.e2 if('cvcord'.eq.'PRESS') zcon = 1.0 DO JLEV = 1,KNK DO JJ = 1, KNJ DO JI = 1, KNI POUT(JI,jlev,JJ)=PIN(JI,KNJ-JJ+1,JLEV)*zcon ENDDO ENDDO enddo ELSEIF(CLVAR.EQ.'PT') THEN zcon = 1.e2 if('cvcord'.eq.'PRESS') zcon = 1.0 DO JLEV = 1,KNK DO JJ = 1, KNJ DO JI = 1, KNI pout(ji,jlev,jj)= anint(zcon*pin(JI,JJ,JLEV)) END DO END DO enddo ELSEIF(CLVAR.EQ.'LP') THEN DO JLEV = 1,KNK DO JJ = 1, KNJ DO JI = 1, KNI POUT(JI,JLEV,JJ)=PIN(JI,KNJ-JJ+1,JLEV) enddo enddo enddo ELSEIF(CLVAR.EQ.'UP') THEN DO JLEV = 1,KNK DO JJ = 1, KNJ DO JI = 1, KNI POUT(JI,JLEV,JJ)=PIN(JI,KNJ-JJ+1,JLEV) enddo enddo enddo END IF C END IF C RETURN END