SUBROUTINE SLDIAG(SU,SV,ST,SQ,CDM,CDH,UA,VA,TA,QA,T0,Q0, 1 Z0M,Z0E,F,ZA,ZU,ZT,ILG,IL1,IL2) C * AUG 19/04 - Y. DELAGE. REGROUP COMMON BLOCKS C * MAKE DECLARATIONS EXPLICIT C * JUL 19/96 - Y. DELAGE. C * CALCULATES NEAR SURFACE OUTPUT VARIABLES CONSISTENT WITH C * THE FLUXES CALCULATED IN DRCOEF c * OUTPUT FIELDS ARE: C * SU : U COMPONENT OF THE WIND AT ZU C * SV : V COMPONENT OF THE WIND AT ZU C * ST : TEMPERATURE AT ZT C * SQ : SPECIFIC HUMIDITY AT ZT C * INPUT FIELDS ARE: C * CDM : DRAG COEFFICIENT C * CDH : TRASFER COEFFICIENT FOR HEAT AND MOISTURE C * UA : U COMPONENT OF THE WIND AT ZA C * VA : V COMPONENT OF THE WIND AT ZA C * TA : POTENTIAL TEMPERATURE AT ZA c * T0 : TEMPERATURE AT BOTTOM OF SURFACE LAYER C * Q0 : SPECIFIC HUMIDITY AT BOTTOM OF SURFACE LAYER C * Z0M : ROUGHNESS LENGTH FOR MOMENTUM C * Z0E : ROUGHNESS LENGTH FOR HEAT AND MOISTURE C * F : FRACTION OF GRID POINT AFFECTED BY PROCESS C * ZA : TOP OF SURFACE LAYER C * ZU : HEIGHT OF OUTPUT WIND C * ZT : HEIGHT OF OUTPUT TEMPERATURE AND HUMIDITY C * ILG : NUMBER OF POINTS TO BE TREATED IMPLICIT NONE INTEGER ILG,IL1,IL2,I REAL L,WSPD,CM,US,TS,QS,UVA,RATIO,UVU,CE REAL PSM,PSE,Y,X,PIM,PIE,PR,TTA REAL SU(ILG), SV(ILG), ST(ILG), SQ(ILG), CDM(ILG), CDH(ILG), 1 UA(ILG), VA(ILG), TA(ILG), QA(ILG), Z0M(ILG), Z0E(ILG), 2 F(ILG), T0(ILG), Q0(ILG), ZA(ILG), ZU(ILG), ZT(ILG) #include "class_com.cdk"
c * STABILITY FUNCTIONS FOR THE STABLE CASE PSM(X)= -X -.667*(X-5/.35)*EXP(-.35*X) PSE(X)= -(1+.667*X)**1.5 -.667*(X-5/.35)*EXP(-.35*X) c * STABILITY FUNCTIONS FOR THE UNSTABLE CASE Y(X)=(1-16*X)**.25 PIM(X)= LOG((1+X)**2*(1+X**2)) -2*ATAN(X) PIE(X)= 2*LOG(1+X**2) PR=1.0 DO 100 I=IL1,IL2 IF(F(I).GT.0.) THEN C * CALCULATION OF SURFACE FLUXES AND MONIN-OBUKHOV LENGTH WSPD=MAX(VMIN,SQRT(UA(I)**2+VA(I)**2)) CM=SQRT(CDM(I)) US=CM*WSPD TS=CDH(I)*(TA(I)-T0(I))/CM QS=CDH(I)*(QA(I)-Q0(I))/CM L=TA(I)*US**2/(VKC*G*(TS*(1+.61*QA(I))+.61*TA(I)*QS)) C * CALCULATE CORRECTION FACTORS TO TAKE INTO ACCOUNT THE APPROXIMATIONS C * IN DRCOEF IF(L.GT.0.) THEN C * STABLE CASE UVA=US/VKC*(LOG(ZA(I)/Z0M(I))-PSM(ZA(I)/L)+PSM(Z0M(I)/L)) RATIO=WSPD/UVA UVU=US/VKC*(LOG((ZU(I)+Z0M(I))/Z0M(I))-PSM((ZU(I)+Z0M(I))/L) 1 +PSM(Z0M(I)/L))*RATIO SU(I)=SU(I)+F(I)*UVU*UA(I)/WSPD SV(I)=SV(I)+F(I)*UVU*VA(I)/WSPD TTA=T0(I)+TS/VKC*PR*(LOG(ZA(I)/Z0E(I))-PSE(ZA(I)/L)+PSE(Z0E(I)/L)) RATIO=(TA(I)-T0(I))/SIGN(MAX(ABS(TTA-T0(I)),1.E-4),TTA-T0(I)) CE=(LOG((ZT(I)+Z0M(I))/Z0E(I))-PSE((ZT(I)+Z0M(I))/L) 1 +PSE(Z0E(I)/L))*RATIO*PR/VKC ST(I)=ST(I)+F(I)*T0(I)+TS*CE SQ(I)=SQ(I)+F(I)*Q0(I)+QS*CE ELSE C * UNSTABLE CASE UVA=US/VKC*(LOG(ZA(I)/Z0M(I))-PIM(Y(ZA(I)/L))+PIM(Y(Z0M(I)/L))) RATIO=WSPD/UVA UVU=US/VKC*(LOG((ZU(I)+Z0M(I))/Z0M(I))-PIM(Y((ZU(I)+Z0M(I))/L)) 1 +PIM(Y(Z0M(I)/L)))*RATIO SU(I)=SU(I)+F(I)*UVU*UA(I)/WSPD SV(I)=SV(I)+F(I)*UVU*VA(I)/WSPD TTA=T0(I)+TS/VKC*PR*(LOG(ZA(I)/Z0E(I))-PIE(Y(ZA(I)/L))+ 1 PIE(Y(Z0E(I)/L))) RATIO=(TA(I)-T0(I))/SIGN(MAX(ABS(TTA-T0(I)),1.E-4),TTA-T0(I)) CE=(LOG((ZT(I)+Z0M(I))/Z0E(I))-PIE(Y((ZT(I)+Z0M(I))/L)) 1 +PIE(Y(Z0E(I)/L)))*RATIO*PR/VKC ST(I)=ST(I)+F(I)*T0(I)+TS*CE SQ(I)=SQ(I)+F(I)*Q0(I)+QS*CE ENDIF ENDIF 100 CONTINUE RETURN END