SUBROUTINE CANVAP(EVAP,SUBL,RAICAN,SNOCAN,TCAN,THLIQ,TBAR,ZSNOW, 2 1 WLOST,CHCAP,QFCF,QFCL,QFN,QFC,HTCC,HTCS,HTC, 2 FI,CMASS,TSNOW,HCPSNO,RHOSNO,FROOT,THPOR, 3 THLMIN,DELZW,EVLOST,RLOST,IROOT, 4 IG,ILG,IL1,IL2,JL ) C C * AUG 19/04 - Y.DELAGE REGROUP COMMON BLOCKS; EXPLICIT DECLARATIONS C * JUN 20/02 - D.VERSEGHY. TIDY UP SUBROUTINE CALL; SHORTENED C * CLASS4 COMMON BLOCK. C * JUN 20/97 - D.VERSEGHY. CLASS - VERSION 2.7. C * MODIFICATIONS TO ALLOW FOR VARIABLE SOIL C * PERMEABLE DEPTH. C * DEC 30/96 - D.VERSEGHY. CLASS - VERSION 2.6. C * BUGFIXES IN CALCULATION OF QFN AND C * QFC. C * JAN 02/96 - D.VERSEGHY. CLASS - VERSION 2.5. C * COMPLETION OF ENERGY BALANCE C * DIAGNOSTICS. C * AUG 24/95 - D.VERSEGHY. CLASS - VERSION 2.4. C * RATIONALIZE CALCULATION OF WLOST; C * REFINE CALCULATION OF QFCL. C * DEC 22/94 - D.VERSEGHY. CLASS - VERSION 2.3. C * ADDITIONAL DIAGNOSTIC CALCULATIONS - C * HTCC AND HTC. C * JUL 30/93 - D.VERSEGHY/M.LAZARE. CLASS - VERSION 2.2. C NEW DIAGNOSTIC FIELDS. C * APR 24/92 - D.VERSEGHY/M.LAZARE. CLASS - VERSION 2.1. C * REVISED AND VECTORIZED CODE C * FOR MODEL VERSION GCM7. C * AUG 12/91 - D.VERSEGHY. CALCULATE ACTUAL EVAPORATION, C * SUBLIMATION AND TRANSPIRATION FROM C * VEGETATION CANOPY. C C * INPUT/OUTPUT ARRAYS. C IMPLICIT NONE INTEGER IG,ILG,IL1,IL2,JL,I,J REAL SLOST,THTRAN,THLLIM REAL THLIQ (ILG,IG), TBAR (ILG,IG), QFC (ILG,IG), 1 HTC (ILG,IG) C REAL EVAP (ILG), SUBL (ILG), RAICAN(ILG), SNOCAN(ILG), 1 TCAN (ILG), ZSNOW (ILG), WLOST (ILG), CHCAP (ILG), 2 QFCF (ILG), QFCL (ILG), QFN (ILG), 3 HTCC (ILG), HTCS (ILG) 3 C C * INPUT ARRAYS. C REAL FROOT (ILG,IG), THPOR(ILG,IG), THLMIN(ILG,IG), 1 DELZW (ILG,IG) C REAL FI (ILG), CMASS (ILG), TSNOW (ILG), 1 HCPSNO(ILG), RHOSNO(ILG) C C * WORK ARRAYS. C REAL EVLOST(ILG), RLOST (ILG) C INTEGER IROOT (ILG) C #include "class_com.cdk"
C----------------------------------------------------------------------- C * INITIALIZE ARRAYS. C DO 100 I=IL1,IL2 IF(FI(I).GT.0.) THEN RLOST (I)=0.0 EVLOST(I)=0.0 IROOT (I)=0 HTCC (I)=HTCC(I)-FI(I)*TCAN(I)*CHCAP(I)/DELT HTCS(I)=HTCS(I)-FI(I)*HCPSNO(I)*(TSNOW(I)+TFREZ)* 1 ZSNOW(I)/DELT HTC (I,1)=HTC(I,1)-FI(I)*(TBAR(I,1)+TFREZ)*THLIQ(I,1)* 1 HCPW*DELZW(I,1)/DELT HTC (I,2)=HTC(I,2)-FI(I)*(TBAR(I,2)+TFREZ)*THLIQ(I,2)* 1 HCPW*DELZW(I,2)/DELT HTC (I,3)=HTC(I,3)-FI(I)*(TBAR(I,3)+TFREZ)*THLIQ(I,3)* 1 HCPW*DELZW(I,3)/DELT ENDIF 100 CONTINUE C C * SUBLIMATION CASE. IF SNOW ON CANOPY IS INSUFFICIENT TO SUPPLY C * DEMAND, RESIDUAL IS TAKEN FIRST FROM SNOW UNDERLYING CANOPY AND C * THEN FROM LIQUID WATER ON CANOPY. C DO 200 I=IL1,IL2 IF(FI(I).GT.0. .AND. SUBL(I).GT.0.) THEN SLOST=SUBL(I)*DELT*RHOW IF(SLOST.LE.SNOCAN(I)) THEN SNOCAN(I)=SNOCAN(I)-SLOST SUBL(I)=0.0 ELSE SLOST=SLOST-SNOCAN(I) QFCF(I)=QFCF(I)-FI(I)*SLOST/DELT SNOCAN(I)=0.0 IF(SLOST.LE.ZSNOW(I)*RHOSNO(I)) THEN ZSNOW(I)=ZSNOW(I)-SLOST/RHOSNO(I) SUBL(I)=0.0 QFN(I)=QFN(I)+FI(I)*SLOST/DELT ELSE SLOST=SLOST-ZSNOW(I)*RHOSNO(I) QFN(I)=QFN(I)+FI(I)*ZSNOW(I)*RHOSNO(I)/DELT ZSNOW(I)=0.0 WLOST(I)=WLOST(I)-SLOST*CLHMLT/CLHVAP EVAP(I)=EVAP(I)+SLOST*(CLHMLT+CLHVAP)/ 1 (CLHVAP*DELT*RHOW) QFCL(I)=QFCL(I)+FI(I)*SLOST*(CLHMLT+CLHVAP)/ 1 (CLHVAP*DELT) ENDIF ENDIF ENDIF 200 CONTINUE C C * EVAPORATION. IF WATER ON CANOPY IS INSUFFICIENT TO SUPPLY C * DEMAND, ASSIGN RESIDUAL TO TRANSPIRATION. C * (THE WORK ARRAY "IROOT" INDICATES SOIL LAYERS WHERE ROOTS C * EXIST.) C DO 300 I=IL1,IL2 IF(FI(I).GT.0. .AND. EVAP(I).GT.0.) THEN RLOST(I)=EVAP(I)*RHOW*DELT IF(RLOST(I).LE.RAICAN(I)) THEN RAICAN(I)=RAICAN(I)-RLOST(I) EVAP (I)=0. RLOST (I)=0. ELSE RLOST(I)=RLOST(I)-RAICAN(I) QFCL(I)=QFCL(I)-FI(I)*RLOST(I)/DELT IF(MAX(FROOT(I,1),FROOT(I,2),FROOT(I,3)).GT.0.0) 1 THEN IROOT(I)=1 ELSE EVLOST(I)=RLOST(I) ENDIF EVAP (I)=0. RAICAN(I)=0. ENDIF ENDIF 300 CONTINUE C C * TRANSPIRATION. C DO 400 J=1,IG DO 400 I=IL1,IL2 IF(FI(I).GT.0. .AND. IROOT(I).GT.0) THEN IF(DELZW(I,J).GT.0.0) THEN THTRAN=RLOST(I)*FROOT(I,J)/(RHOW*DELZW(I,J)) ELSE THTRAN=0.0 ENDIF IF(THPOR(I,J).LT.THLMIN(I,J)) THEN THLLIM=THPOR(I,J) ELSE THLLIM=THLMIN(I,J) ENDIF IF(THTRAN.LE.(THLIQ(I,J)-THLLIM)) THEN QFC (I,J)=QFC(I,J)+FI(I)*RLOST(I)*FROOT(I,J)/DELT THLIQ(I,J)=THLIQ(I,J)-THTRAN ELSE QFC (I,J)=QFC(I,J)+FI(I)*(THLIQ(I,J)-THLLIM)*RHOW* 1 DELZW(I,J)/DELT EVLOST (I)=EVLOST(I)+(THTRAN+THLLIM-THLIQ(I,J))*RHOW* 1 DELZW(I,J) THLIQ(I,J)=THLLIM ENDIF ENDIF 400 CONTINUE C C * CLEANUP. C DO 500 I=IL1,IL2 IF(FI(I).GT.0.) THEN CHCAP(I)=RAICAN(I)*SPHW+SNOCAN(I)*SPHICE+CMASS(I)*SPHVEG WLOST(I)=WLOST(I)+EVLOST(I) HTCC (I)=HTCC(I)+FI(I)*TCAN(I)*CHCAP(I)/DELT HTCS(I)=HTCS(I)+FI(I)*HCPSNO(I)*(TSNOW(I)+TFREZ)* 1 ZSNOW(I)/DELT HTC (I,1)=HTC(I,1)+FI(I)*(TBAR(I,1)+TFREZ)*THLIQ(I,1)* 1 HCPW*DELZW(I,1)/DELT HTC (I,2)=HTC(I,2)+FI(I)*(TBAR(I,2)+TFREZ)*THLIQ(I,2)* 1 HCPW*DELZW(I,2)/DELT HTC (I,3)=HTC(I,3)+FI(I)*(TBAR(I,3)+TFREZ)*THLIQ(I,3)* 1 HCPW*DELZW(I,3)/DELT ENDIF 500 CONTINUE C RETURN END