123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267 |
- *DECK CBLKTR
- SUBROUTINE CBLKTR (IFLG, NP, N, AN, BN, CN, MP, M, AM, BM, CM,
- + IDIMY, Y, IERROR, W)
- C***BEGIN PROLOGUE CBLKTR
- C***PURPOSE Solve a block tridiagonal system of linear equations
- C (usually resulting from the discretization of separable
- C two-dimensional elliptic equations).
- C***LIBRARY SLATEC (FISHPACK)
- C***CATEGORY I2B4B
- C***TYPE COMPLEX (BLKTRI-S, CBLKTR-C)
- C***KEYWORDS ELLIPTIC PDE, FISHPACK, TRIDIAGONAL LINEAR SYSTEM
- C***AUTHOR Adams, J., (NCAR)
- C Swarztrauber, P. N., (NCAR)
- C Sweet, R., (NCAR)
- C***DESCRIPTION
- C
- C Subroutine CBLKTR is a complex version of subroutine BLKTRI.
- C Both subroutines solve a system of linear equations of the form
- C
- C AN(J)*X(I,J-1) + AM(I)*X(I-1,J) + (BN(J)+BM(I))*X(I,J)
- C
- C + CN(J)*X(I,J+1) + CM(I)*X(I+1,J) = Y(I,J)
- C
- C For I = 1,2,...,M and J = 1,2,...,N.
- C
- C I+1 and I-1 are evaluated modulo M and J+1 and J-1 modulo N, i.e.,
- C
- C X(I,0) = X(I,N), X(I,N+1) = X(I,1),
- C X(0,J) = X(M,J), X(M+1,J) = X(1,J).
- C
- C These equations usually result from the discretization of
- C separable elliptic equations. Boundary conditions may be
- C Dirichlet, Neumann, or periodic.
- C
- C
- C * * * * * * * * * * On INPUT * * * * * * * * * *
- C
- C IFLG
- C = 0 Initialization only. Certain quantities that depend on NP,
- C N, AN, BN, and CN are computed and stored in the work
- C array W.
- C = 1 The quantities that were computed in the initialization are
- C used to obtain the solution X(I,J).
- C
- C NOTE A call with IFLG=0 takes approximately one half the time
- C time as a call with IFLG = 1. However, the
- C initialization does not have to be repeated unless NP, N,
- C AN, BN, or CN change.
- C
- C NP
- C = 0 If AN(1) and CN(N) are not zero, which corresponds to
- C periodic boundary conditions.
- C = 1 If AN(1) and CN(N) are zero.
- C
- C N
- C The number of unknowns in the J-direction. N must be greater
- C than 4. The operation count is proportional to MNlog2(N), hence
- C N should be selected less than or equal to M.
- C
- C AN,BN,CN
- C Real one-dimensional arrays of length N that specify the
- C coefficients in the linear equations given above.
- C
- C MP
- C = 0 If AM(1) and CM(M) are not zero, which corresponds to
- C periodic boundary conditions.
- C = 1 If AM(1) = CM(M) = 0 .
- C
- C M
- C The number of unknowns in the I-direction. M must be greater
- C than 4.
- C
- C AM,BM,CM
- C Complex one-dimensional arrays of length M that specify the
- C coefficients in the linear equations given above.
- C
- C IDIMY
- C The row (or first) dimension of the two-dimensional array Y as
- C it appears in the program calling BLKTRI. This parameter is
- C used to specify the variable dimension of Y. IDIMY must be at
- C least M.
- C
- C Y
- C A complex two-dimensional array that specifies the values of
- C the right side of the linear system of equations given above.
- C Y must be dimensioned Y(IDIMY,N) with IDIMY .GE. M.
- C
- C W
- C A one-dimensional array that must be provided by the user for
- C work space.
- C If NP=1 define K=INT(log2(N))+1 and set L=2**(K+1) then
- C W must have dimension (K-2)*L+K+5+MAX(2N,12M)
- C
- C If NP=0 define K=INT(log2(N-1))+1 and set L=2**(K+1) then
- C W must have dimension (K-2)*L+K+5+2N+MAX(2N,12M)
- C
- C **IMPORTANT** For purposes of checking, the required dimension
- C of W is computed by BLKTRI and stored in W(1)
- C in floating point format.
- C
- C * * * * * * * * * * On Output * * * * * * * * * *
- C
- C Y
- C Contains the solution X.
- C
- C IERROR
- C An error flag that indicates invalid input parameters. Except
- C for number zero, a solution is not attempted.
- C
- C = 0 No error.
- C = 1 M is less than 5.
- C = 2 N is less than 5.
- C = 3 IDIMY is less than M.
- C = 4 BLKTRI failed while computing results that depend on the
- C coefficient arrays AN, BN, CN. Check these arrays.
- C = 5 AN(J)*CN(J-1) is less than 0 for some J. Possible reasons
- C for this condition are
- C 1. The arrays AN and CN are not correct.
- C 2. Too large a grid spacing was used in the discretization
- C of the elliptic equation.
- C 3. The linear equations resulted from a partial
- C differential equation which was not elliptic.
- C
- C W
- C Contains intermediate values that must not be destroyed if
- C CBLKTR will be called again with IFLG=1. W(1) contains the
- C number of locations required by W in floating point format.
- C
- C *Long Description:
- C
- C * * * * * * * Program Specifications * * * * * * * * * * * *
- C
- C Dimension of AN(N),BN(N),CN(N),AM(M),BM(M),CM(M),Y(IDIMY,N)
- C Arguments W(see argument list)
- C
- C Latest June 1979
- C Revision
- C
- C Required CBLKTR,CBLKT1,PROC,PROCP,CPROC,CPROCP,CCMPB,INXCA,
- C Subprograms INXCB,INXCC,CPADD,PGSF,PPGSF,PPPSF,BCRH,TEVLC,
- C R1MACH
- C
- C Special The algorithm may fail if ABS(BM(I)+BN(J)) is less
- C Conditions than ABS(AM(I))+ABS(AN(J))+ABS(CM(I))+ABS(CN(J))
- C for some I and J. The algorithm will also fail if
- C AN(J)*CN(J-1) is less than zero for some J.
- C See the description of the output parameter IERROR.
- C
- C Common CCBLK
- C Blocks
- C
- C I/O NONE
- C
- C Precision Single
- C
- C Specialist Paul Swarztrauber
- C
- C Language FORTRAN
- C
- C History CBLKTR is a complex version of BLKTRI (version 3)
- C
- C Algorithm Generalized Cyclic Reduction (see reference below)
- C
- C Space
- C Required CONTROL DATA 7600
- C
- C Portability American National Standards Institute FORTRAN.
- C The machine accuracy is set using function R1MACH.
- C
- C Required NONE
- C Resident
- C Routines
- C
- C References Swarztrauber,P. and R. SWEET, 'Efficient Fortran
- C Subprograms for the solution of elliptic equations'
- C NCAR TN/IA-109, July, 1975, 138 PP.
- C
- C SWARZTRAUBER P. ,'A Direct Method for The Discrete
- C Solution of Separable Elliptic Equations', SIAM
- C J. Numer. Anal.,11(1974) PP. 1136-1150.
- C
- C * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- C
- C***REFERENCES P. N. Swarztrauber and R. Sweet, Efficient Fortran
- C subprograms for the solution of elliptic equations,
- C NCAR TN/IA-109, July 1975, 138 pp.
- C P. N. Swarztrauber, A direct method for the discrete
- C solution of separable elliptic equations, SIAM Journal
- C on Numerical Analysis 11, (1974), pp. 1136-1150.
- C***ROUTINES CALLED CBLKT1, CCMPB, CPROC, CPROCP, PROC, PROCP
- C***COMMON BLOCKS CCBLK
- C***REVISION HISTORY (YYMMDD)
- C 801001 DATE WRITTEN
- C 890531 Changed all specific intrinsics to generic. (WRB)
- C 890531 REVISION DATE from Version 3.2
- C 891214 Prologue converted to Version 4.0 format. (BAB)
- C 920501 Reformatted the REFERENCES section. (WRB)
- C***END PROLOGUE CBLKTR
- C
- DIMENSION AN(*) ,BN(*) ,CN(*) ,AM(*) ,
- 1 BM(*) ,CM(*) ,Y(IDIMY,*) ,W(*)
- EXTERNAL PROC ,PROCP ,CPROC ,CPROCP
- COMMON /CCBLK/ NPP ,K ,EPS ,CNV ,
- 1 NM ,NCMPLX ,IK
- COMPLEX AM ,BM ,CM ,Y
- C***FIRST EXECUTABLE STATEMENT CBLKTR
- NM = N
- M2 = M+M
- IERROR = 0
- IF (M-5) 101,102,102
- 101 IERROR = 1
- GO TO 119
- 102 IF (NM-3) 103,104,104
- 103 IERROR = 2
- GO TO 119
- 104 IF (IDIMY-M) 105,106,106
- 105 IERROR = 3
- GO TO 119
- 106 NH = N
- NPP = NP
- IF (NPP) 107,108,107
- 107 NH = NH+1
- 108 IK = 2
- K = 1
- 109 IK = IK+IK
- K = K+1
- IF (NH-IK) 110,110,109
- 110 NL = IK
- IK = IK+IK
- NL = NL-1
- IWAH = (K-2)*IK+K+6
- IF (NPP) 111,112,111
- C
- C DIVIDE W INTO WORKING SUB ARRAYS
- C
- 111 IW1 = IWAH
- IWBH = IW1+NM
- W(1) = IW1-1+MAX(2*NM,12*M)
- GO TO 113
- 112 IWBH = IWAH+NM+NM
- IW1 = IWBH
- W(1) = IW1-1+MAX(2*NM,12*M)
- NM = NM-1
- C
- C SUBROUTINE CCMPB COMPUTES THE ROOTS OF THE B POLYNOMIALS
- C
- 113 IF (IERROR) 119,114,119
- 114 IW2 = IW1+M2
- IW3 = IW2+M2
- IWD = IW3+M2
- IWW = IWD+M2
- IWU = IWW+M2
- IF (IFLG) 116,115,116
- 115 CALL CCMPB (NL,IERROR,AN,BN,CN,W(2),W(IWAH),W(IWBH))
- GO TO 119
- 116 IF (MP) 117,118,117
- C
- C SUBROUTINE CBLKT1 SOLVES THE LINEAR SYSTEM
- C
- 117 CALL CBLKT1 (NL,AN,BN,CN,M,AM,BM,CM,IDIMY,Y,W(2),W(IW1),W(IW2),
- 1 W(IW3),W(IWD),W(IWW),W(IWU),PROC,CPROC)
- GO TO 119
- 118 CALL CBLKT1 (NL,AN,BN,CN,M,AM,BM,CM,IDIMY,Y,W(2),W(IW1),W(IW2),
- 1 W(IW3),W(IWD),W(IWW),W(IWU),PROCP,CPROCP)
- 119 CONTINUE
- RETURN
- END
|