!copyright (C) 2001 MSC-RPN COMM %%%RPNPHY%%% ***S/R WFLUX *SUBROUTINE WFLUX (ROS,G,WC1,TO1,RE1,TR1,RMUE,RE2,TR2,LMX,ILG) 2 #include "impnone.cdk"
INTEGER ILG,I,LMX REAL TOP(LMX) REAL*8 RI0(LMX),RI0D(LMX),RI1(LMX),RI1D(LMX),RK(LMX),RM2(LMX),WCP(LMX),WM(LMX) REAL*8 X1(LMX),X2(LMX),XM2P(LMX),XP2P(LMX) REAL*8 A11(LMX),A12(LMX),A13(LMX),A21(LMX),A22(LMX),A23(LMX),ALPHA(LMX) REAL*8 AM2B(LMX),AP2B(LMX),BETA(LMX) REAL*8 C1(LMX),C2(LMX),D(LMX),DT(LMX),EXKM(LMX),EXKP(LMX),EXMUO(LMX),FF(LMX) REAL*8 GP(LMX),RP(LMX) REAL*8 TMP1EXP(LMX),TMP2EXP(LMX) REAL ROS(LMX),G(LMX),WC1(LMX),TO1(LMX),RE1(LMX),TR1(LMX), 1 RMUE(LMX),RE2(LMX),TR2(LMX) * *Author * L.Garand (1989) * *Revision * 001 G.Pellerin(Mar90)Standard documentation * 002 D. Talbot (June 2003) - IBM conversion * - calls to vexp routine (from massvp4 library) * - divisions replaced by reciprocals * *Object * to estimate layer transmission and reflexion using * the Delta Eddington Approximation(vectorized version) * *Arguments * * - Input - * ROS reflectivity of underlaying layer * G asymmetry factor * WC1 omega parameter * TO1 optical thickness / omega * * - Output - * RE1 reflected radiation without reflexion from underlying * layer * TR1 transmitted radiation without reflexion from underlying * layer * * - Input - * RMUE cosine of equivalent sun zenith angle * * - Output - * RE2 reflected radiation with reflexion from underlying layer * TR2 transmitted radiation with reflexion from underlying * layer * * - Input - * LMX maximum number of profiles that can be requested * ILG actual number of profiles requested * ** C REAL REC_RMUE(lmx) real*8 REC_X2(LMX),REC_D(LMX) real REC_3 C REC_3=1./3. C DO I=1,ILG C FF(I)=G(I)*G(I) GP(I)=G(I)/(1.+G(I)) TOP(I)=(1.-WC1(I)*FF(I))*TO1(I) WCP(I)=(1-FF(I))*WC1(I)/(1.-WC1(I)*FF(I)) DT(I)=2.*REC_3 X1(I)=1.-WCP(I)*GP(I) WM(1)=1.-WCP(I) REC_RMUE(I)=1.0/rmue(i) RM2(I)=RMUE(I)*RMUE(I) C apres plusieurs essais avec vsqrt ca ne valide pas RK(I)=SQRT(3.*WM(1)*X1(I)) X2(I)=4.*(1.-RK(I)*RK(I)*RM2(I)) C ENDDO C ce call est tel que ca ne valide plus C CALL VREC (REC_X2,X2,ILG) C DO I=1,ILG REC_X2(I)=1.0d0/X2(I) RP(I)=SQRT(3.*WM(1)/X1(I)) ALPHA(I)=3.*WCP(I)*RM2(I)*(1.+GP(I)*WM(1))*REC_X2(I) BETA(I)=3.*WCP(I)*RMUE(I)*(1.+3.*GP(I)*RM2(I)*WM(1))*REC_X2(I) TMP1EXP(I)=-TOP(I)*REC_RMUE(I) TMP2EXP(I)=RK(I)*TOP(I) ENDDO CALL VEXP (EXMUO,TMP1EXP,ILG) CALL VEXP (EXKP,TMP2EXP,ILG) CALL VREC (EXKM,EXKP,ILG) DO I=1,ILG XP2P(I)=1.+DT(I)*RP(I) XM2P(I)=1.-DT(I)*RP(I) AP2B(I)=ALPHA(I)+DT(I)*BETA(I) AM2B(I)=ALPHA(I)-DT(I)*BETA(I) C C WITHOUT REFLEXION FROM THE UNDERLYING LAYER C A11(I)=XP2P(I) A12(I)=XM2P(I) A13(I)=AP2B(I) A22(I)=XP2P(I)*EXKP(I) A21(I)=XM2P(I)*EXKM(I) A23(I)=AM2B(I)*EXMUO(I) D(I)=A11(I)*A22(I)-A21(I)*A12(I) ENDDO CALL VREC (REC_D,D,ILG) DO I=1,ILG C1(I)=(A22(I)*A13(I)-A12(I)*A23(I))*REC_D(I) C2(I)=(A11(I)*A23(I)-A21(I)*A13(I))*REC_D(I) RI0(I)=C1(I)+C2(I)-ALPHA(I) RI1(I)=RP(I)*(C1(I)-C2(I))-BETA(I) RE1(I)=(RI0(I)-DT(I)*RI1(I))*REC_RMUE(I) RI0D(I)=C1(I)*EXKM(I)+C2(I)*EXKP(I)-ALPHA(I)*EXMUO(I) RI1D(I)=RP(I)*(C1(I)*EXKM(I)-C2(I)*EXKP(I))-BETA(I)*EXMUO(I) TR1(I)=EXMUO(I)+(RI0D(I)+DT(I)*RI1D(I))*REC_RMUE(I) C C WITH REFLEXION FROM THE UNDERLYING LAYER C A21(I)=A21(I)-ROS(I)*XP2P(I)*EXKM(I) A22(I)=A22(I)-ROS(I)*XM2P(I)*EXKP(I) A23(I)=A23(I)-ROS(I)*EXMUO(I)*(AP2B(I)-RMUE(I)) D(I)=A11(I)*A22(I)-A21(I)*A12(I) ENDDO CALL VREC (REC_D,D,ILG) DO I=1,ILG C1(I)=(A22(I)*A13(I)-A12(I)*A23(I))*REC_D(I) C2(I)=(A11(I)*A23(I)-A21(I)*A13(I))*REC_D(I) RI0(I)=C1(I)+C2(I)-ALPHA(I) RI1(I)=RP(I)*(C1(I)-C2(I))-BETA(I) RE2(I)=(RI0(I)-DT(I)*RI1(I))*REC_RMUE(I) RI0D(I)=C1(I)*EXKM(I)+C2(I)*EXKP(I)-ALPHA(I)*EXMUO(I) RI1D(I)=RP(I)*(C1(I)*EXKM(I)-C2(I)*EXKP(I))-BETA(I)*EXMUO(I) TR2(I)=EXMUO(I)+(RI0D(I)+DT(I)*RI1D(I))*REC_RMUE(I) C ENDDO RETURN END