SUBROUTINE INITGDG2(POUT,PIN,KNI,KNJ,KNK,KIG2,CDVAR) 13 * #if defined (DOC) * ***s/r INITGDG2 - Transfer input grid-point trial fields * to diagnostic input arrays. 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 * Y. Yang Oct. 2003 * - add option for species (as default in ELSE block) * *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"
* INTEGER KNI, KNJ,KNK,KIG2 CHARACTER*(*) CDVAR REAL*8 PIN(KNI,KNJ,knk), POUT(KNI,KNK,KNJ) C CHARACTER*4 CLVAR INTEGER JI, JJ,jlev REAL*8 ZCON * ** CLVAR=CDVAR 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 END DO 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 ELSE DO JLEV = 1,KNK DO JJ = 1, KNJ DO JI = 1, KNI pout(ji,jlev,jj)=pin(JI,JJ,JLEV) enddo enddo 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.'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 ELSE 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