SUBROUTINE RELHUM !shc start I (GTMP,GWV,GPS,IMAX,JMAX,KMAX,A,B, O GRH) C*********************************************************************** C CALCULATION OF RELATIVE HUMIDITY C フルレベル気圧計算機能付(J分割版) C CREATED MAR.05,1998 T.TSUYUKI C REVISED TO DECREASE LOG CALCULATION AUG 1999 Y.TAHARA C 2000.04.18 作業配列を用いた高速版 RELHUM9とどちらが速いか C 未チェック C*********************************************************************** C C GTMP: 気温(フルレベル)(K) C GWV: 比湿(フルレベル)(KG/KG) C GPS: モデル地表気圧(レベル1/2)(HPA) C C GRH: 相対湿度(フルレベル)(NON-UNIT) C*********************************************************************** ! IMPLICIT DOUBLE PRECISION (A-H,O-Z) C PARAMETER (KM=50,IMAXD=640) C DIMENSION GTMP(IMAX,JMAX,KMAX), GWV (IMAX,JMAX,KMAX), & GPS (IMAX,JMAX ) DIMENSION GRH (IMAX,JMAX,KMAX) C DIMENSION PFULL(IMAXD,KM) REAL*8 A(KMAX+1), B(KMAX+1) PARAMETER( E0C=6.11D0,AL=17.3D0,BL=237.3D0, . AI=21.9D0,BI=265.3D0) C******************** PROCEDURE **************************************** IF (KMAX.GT.KM) THEN WRITE(6,*) ' ERROR: IS TOO LARGE. in RELHUM' STOP 100 END IF C : 格子点毎の処理 DO 1000 J = 1, JMAX C : ハーフレベル気圧(HPA)計算 DO 100 K = 1, KMAX-1 DO 1100 I = 1, IMAX PU = A(K+1) + B(K+1)*GPS(I,J) PD = A(K ) + B(K )*GPS(I,J) C : フルレベル気圧(HPA)計算 ! WRFVAR compiles at double precision by default, so DLOG is overkill ! PFULL(I,K) = DEXP(( PD*DLOG(PD)-PU*DLOG(PU) )/(PD-PU) -1.D0) PFULL(I,K) = EXP(( PD*LOG(PD)-PU*LOG(PU) )/(PD-PU) -1.D0) 1100 CONTINUE 100 CONTINUE DO 1300 I = 1, IMAX PFULL(I,KMAX) = (A(KMAX)+B(KMAX)*GPS(I,J))/2.D0 1300 CONTINUE C : フルレベル相対湿度(NON-UNIT)計算 DO 300 K = 1, KMAX DO 1400 I = 1, IMAX P = PFULL(I,K) T = GTMP(I,J,K) Q = GWV (I,J,K) E = Q*P/(0.378D0*Q+0.622D0) C CALL TETEN (ES,T) C===================================================== TC = T-t_kelvin IF (TC.GE.0.D0) THEN ES= E0C * EXP(AL*TC/(BL+TC)) ELSE IF (TC.LE.-15.D0) THEN ES= E0C * EXP(AI*TC/(BI+TC)) ELSE ES= E0C * (EXP(AL*TC/(BL+TC))*(15.D0+TC)/15.D0 + . EXP(AI*TC/(BI+TC))*(-TC)/15.D0) END IF C===================================================== GRH(I,J,K) = E/ES 1400 CONTINUE 300 CONTINUE 1000 CONTINUE RETURN END SUBROUTINE RELHUM !shc end