! $Id: BLKSLV.f,v 1.1 2009/09/16 14:06:49 bmy Exp $ SUBROUTINE BLKSLV(SUMB) !----------------------------------------------------------------------- ! Solves the block tri-diagonal system: ! A(I)*X(I-1) + B(I)*X(I) + C(I)*X(I+1) = H(I) !----------------------------------------------------------------------- USE JV_MIE_MOD IMPLICIT NONE # include "define.h" integer i, j, k, id real*8 sum, SUMB !-----------UPPER BOUNDARY ID=1 CALL GEN(1) CALL MATIN4 (B) DO I=1,N RR(I,1) = 0.0d0 DO J=1,N SUM = 0.0d0 DO K=1,N SUM = SUM - B(I,K)*CC(K,J) ENDDO DD(I,J,1) = SUM RR(I,1) = RR(I,1) + B(I,J)*H(J) ENDDO ENDDO !----------CONTINUE THROUGH ALL DEPTH POINTS ID=2 TO ID=ND-1 DO ID=2,ND-1 CALL GEN(ID) DO I=1,N DO J=1,N B(I,J) = B(I,J) + A(I)*DD(I,J,ID-1) ENDDO H(I) = H(I) - A(I)*RR(I,ID-1) ENDDO CALL MATIN4 (B) DO I=1,N RR(I,ID) = 0.0d0 DO J=1,N RR(I,ID) = RR(I,ID) + B(I,J)*H(J) DD(I,J,ID) = - B(I,J)*C1(J) ENDDO ENDDO ENDDO !---------FINAL DEPTH POINT: ND CALL GEN(ND) DO I=1,N DO J=1,N SUM = 0.0d0 DO K=1,N SUM = SUM + AA(I,K)*DD(K,J,ND-1) ENDDO B(I,J) = B(I,J) + SUM H(I) = H(I) - AA(I,J)*RR(J,ND-1) ENDDO ENDDO CALL MATIN4 (B) DO I=1,N RR(I,ND) = 0.0d0 DO J=1,N RR(I,ND) = RR(I,ND) + B(I,J)*H(J) ENDDO ENDDO !-----------BACK SOLUTION DO ID=ND-1,1,-1 DO I=1,N DO J=1,N RR(I,ID) = RR(I,ID) + DD(I,J,ID)*RR(J,ID+1) ENDDO ENDDO ENDDO !----------MEAN J & H DO ID=1,ND,2 FJ(ID) = 0.0d0 DO I=1,N FJ(ID) = FJ(ID) + RR(I,ID)*WT(I) ENDDO ENDDO DO ID=2,ND,2 FJ(ID) = 0.0d0 DO I=1,N FJ(ID) = FJ(ID) + RR(I,ID)*WT(I)*EMU(I) ENDDO ENDDO C---------------MCZ Diffuse Radiation 9/29/2010 (in v9-01-01 4/17/2012) SUMB = RR(1,ND)*WT(1)*EMU(1) + RR(2,ND)*WT(2)*EMU(2) & + RR(3,ND)*WT(3)*EMU(3) + RR(4,ND)*WT(4)*EMU(4) !write(6,*), 'SUMB1', SUMB ! Output fluxes for testing purposes c CALL CH_FLUX c RETURN END