# Date: Fri, 16 Sep 1994 12:16:27 +0200 # From: "Michela Redivo Zaglia -tel.+39 49 8287625" # Subject: NA5 package # This is a shell archive. # Remove everything above and including the cut line. # Then run the rest of the file through sh. #----cut here-----cut here-----cut here-----cut here----# #!/bin/sh # shar: Shell Archiver # Run the following text with /bin/sh to create: # disk$site:[elen.cgs]aaaread.me # disk$site:[elen.cgs]makefile # disk$site:[elen.cgs]bsmrzs.f # disk$site:[elen.cgs]chksig.f # disk$site:[elen.cgs]compo1.f # disk$site:[elen.cgs]compo2.f # disk$site:[elen.cgs]compol.f # disk$site:[elen.cgs]compp1.f # disk$site:[elen.cgs]cresol.f # disk$site:[elen.cgs]exa1.f # disk$site:[elen.cgs]exa2.f # disk$site:[elen.cgs]exa3.f # disk$site:[elen.cgs]exa4.f # disk$site:[elen.cgs]exa5.f # disk$site:[elen.cgs]fh.f # disk$site:[elen.cgs]gameta.f # disk$site:[elen.cgs]gsolvd.f # disk$site:[elen.cgs]matvec.f # disk$site:[elen.cgs]pinner.f # disk$site:[elen.cgs]polmul.f # disk$site:[elen.cgs]rxsumm.f # disk$site:[elen.cgs]solshf.f # disk$site:[elen.cgs]ssumm.f # disk$site:[elen.cgs]stomhf.f # disk$site:[elen.cgs]storhf.f # disk$site:[elen.cgs]sunorm.f # disk$site:[elen.cgs]zsumm.f # This archive created: Fri Sep 16 11:19:31 1994 echo shar: extracting aaaread.me sed 's/^X//' << \SHAR_EOF > aaaread.me X *************************************************************************** X * All the software contained in this library is protected by copyright. * X * Permission to use, copy, modify, and distribute this software for any * X * purpose without fee is hereby granted, provided that this entire notice * X * is included in all copies of any software which is or includes a copy * X * or modification of this software and in all copies of the supporting * X * documentation for such software. * X *************************************************************************** X * THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED * X * WARRANTY. IN NO EVENT, NEITHER THE AUTHORS NOR THE PUBLISHER, BE LIABLE * X * FOR ANY ERROR IN THE SOFTWARE, ANY MISUSE OF IT OR ANY DAMAGE ARISING * X * OUT OF ITS USE. THE ENTIRE RISK OF USING THE SOFTWARE LIES WITH THE * X * PARTY DOING SO. * X *************************************************************************** X * ANY USE OF THE SOFTWARE CONSTITUTES ACCEPTANCE OF THE TERMS OF THE * X * ABOVE STATEMENT. * X *************************************************************************** X X * AUTHORS: X X C. BREZINSKI X UNIVERSITY OF LILLE - FRANCE X X M. REDIVO ZAGLIA X UNIVERSITY OF PADOVA - ITALY X X * REFERENCE: X X TREATMENT OF NEAR-BREAKDOWN IN THE CGS ALGORITHM X NUMERICAL ALGORITHMS 7 (1994) PP. 33-73. X X * SOFTWARE REVISION DATE: X X FEBRUARY, 1993 X X * MODULES: X X - MAIN PROGRAMS EXA1, EXA2, EXA3, EXA4, EXA5 X X - SUBROUTINES BSMRZS, CHKSIG, COMPO1, COMPO2, COMPOL, X COMPP1, CRESOL, GSOLVD, POLMUL, SOLSHF, X STOMHF, STORHF. X X - DOUBLE PRECISION FUNCTIONS FH, GAMETA, RXSUMM, SSUMM, SUNORM, ZSUMM. X X X * MODULES GIVEN IN NETLIB (NA1 FROM NUMERALGO): X X - SUBROUTINE MATVEC. X X - DOUBLE PRECISION FUNCTION PINNER. X X * REMARK: A makefile IS ALSO PROVIDED X SHAR_EOF if test 2189 -ne "`wc -c aaaread.me`" then echo shar: error transmitting aaaread.me '(should have been 2189 characters)' fi echo shar: extracting makefile sed 's/^X//' << \SHAR_EOF > makefile X.KEEP_STATE: XFC=f77 XOBJS1 = bsmrzs.o chksig.o compo1.o compo2.o compol.o compp1.o \ X cresol.o gsolvd.o polmul.o solshf.o stomhf.o storhf.o \ X fh.o gameta.o rxsumm.o ssumm.o sunorm.o zsumm.o matvec.o pinner.o X XFLIBS = -lm X Xall : exa1 exa2 exa3 exa4 exa5 X Xexa1 : $(OBJS1) exa1.o X $(FC) $(OBJS1) exa1.o -o exa1 $(FLIBS) X Xexa2 : $(OBJS1) exa2.o X $(FC) $(OBJS1) exa2.o -o exa2 $(FLIBS) X Xexa3 : $(OBJS1) exa3.o X $(FC) $(OBJS1) exa3.o -o exa3 $(FLIBS) X Xexa4 : $(OBJS1) exa4.o X $(FC) $(OBJS1) exa4.o -o exa4 $(FLIBS) X Xexa5 : $(OBJS1) exa5.o X $(FC) $(OBJS1) exa5.o -o exa5 $(FLIBS) X X X SHAR_EOF if test 597 -ne "`wc -c makefile`" then echo shar: error transmitting makefile '(should have been 597 characters)' fi echo shar: extracting bsmrzs.f sed 's/^X//' << \SHAR_EOF > bsmrzs.f XC+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ XC + XC SUBROUTINE NAME - BSMRZS + XC + XC+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ XC + XC DESCRIPTION: + XC + XC COMPUTES THE SOLUTION OF A SYSTEM OF LINEAR EQUATIONS BY THE + XC BSMRZS ALGORITHM WHICH AVOIDS BREAKDOWN AND NEAR-BREAKDOWN IN THE + XC CGS ALGORITHM. + XC + XC USAGE: + XC CALL BSMRZS (N, A, AB, Y, X, R, NORM, MAXBCK, MAXN, V, W, U, + XC LMAT, RMAT, ETA, ETAP, GAMMA, GAMMAP, D, C, P, P1, + XC PWK, IR, NK, EPS, EPS1, EPS2, INIT, IFLAG, IER) + XC + XC ARGUMENTS: + XC + XC N - INPUT INTEGER VALUE, DIMENSION OF THE SYSTEM. + XC + XC A - INPUT REAL MATRIX OF DIMENSION (N,N) CONTAINING THE + XC MATRIX OF THE SYSTEM. + XC + XC AB - INPUT/WORKING REAL VECTOR OF DIMENSION N CONTAINING, + XC BEFORE THE FIRST CALL, THE RIGHT HAND SIDE OF THE SYSTEM. + XC THE VECTOR IS USED AS A WORKING AREA IN THE NEXT CALLS + XC AND THEN THE INPUT VALUES ARE ALWAYS DESTROYED BY THE + XC SUBROUTINE. + XC + XC Y - INPUT/OUTPUT REAL VECTOR OF DIMENSION N CONTAINING, + XC BEFORE THE FIRST CALL, THE AUXILIARY VECTOR y. + XC IF IFLAG .EQ. 0 THE VECTOR Y IS SET TO r = b - A x + XC 0 0 + XC BY THE SUBROUTINE DURING THE FIRST CALL. + XC + XC X - INPUT/OUTPUT REAL VECTOR OF DIMENSION N CONTAINING + XC AFTER THE (k+1)-TH CALL, THE SOLUTION x . + XC k+1 + XC BEFORE THE FIRST CALL, X MUST CONTAIN x . + XC 0 + XC + XC R - OUTPUT REAL VECTOR OF DIMENSION N CONTAINING, AFTER THE + XC (k+1)-TH CALL, THE RESIDUAL VECTOR r . + XC k+1 + XC IF, AT THE FIRST CALL, THE NORM OF THE VECTOR R = r IS + XC 0 + XC LESS THAN EPS2 THEN THE VECTOR R CONTAINS r IN OUTPUT. + XC 0 + XC + XC NORM - OUTPUT REAL VALUE CONTAINING, AFTER THE (k+1)-TH CALL, + XC THE NORM OF THE RESIDUAL VECTOR r . + XC k+1 + XC + XC MAXBCK - INPUT INTEGER VALUE. IT REPRESENTS THE MAXIMUM VALUE + XC ALLOWED FOR THE JUMP m . IT MUST BE GREATER OR EQUAL TO + XC k + XC 2 AND LESS OR EQUAL TO MAXN. IT IS USED TO CONTROL THE + XC DIMENSION OF THE WORKING ARRAYS. + XC + XC MAXN - INPUT INTEGER VALUE. IT REPRESENTS THE MAXIMUM VALUE + XC ALLOWED, GREATER OR EQUAL TO N, FOR n + m . + XC k k + XC + XC V - WORKING REAL MATRIX OF DIMENSION (N,0:2*MAXBCK). + XC V(I), I=0,2*MAXBCK, CONTAINS A**I * z . + XC k + XC + XC W - WORKING REAL MATRIX OF DIMENSION (N,0:2*MAXBCK-2). + XC W(I), I=0,2*MAXBCK-2, CONTAINS A**I * r . + XC k + XC + XC U - WORKING REAL MATRIX OF DIMENSION (N,0:2*MAXBCK-1). + XC W(I), I=0,2*MAXBCK-1, CONTAINS A**I * s . + XC k + XC + XC LMAT - WORKING REAL VECTOR OF DIMENSION: + XC (8*MAXBCK) IF MAXBCK <= 2 + XC ((2*MAXBCK-1)*(2*MAXBCK-1)) IF MAXBCK > 2 + XC + XC RMAT - WORKING REAL MATRIX OF DIMENSION (2,0:2*MAXBCK-1). + XC + XC ETA - WORKING REAL VECTOR CONTAINING THE ETA . + XC i + XC + XC ETAP - WORKING REAL VECTOR CONTAINING THE ETA'. + XC i + XC + XC GAMMA - WORKING REAL VECTOR CONTAINING THE GAMMA . + XC i + XC + XC GAMMAP - WORKING REAL VECTOR CONTAINING THE GAMMA'. + XC i + XC + XC D - WORKING REAL VECTOR OF DIMENSION (0:2*MAXBCK-1). + XC + XC C - WORKING REAL VECTOR OF DIMENSION (0:2*MAXBCK-1). + XC + XC P - INPUT/OUTPUT REAL VECTOR OF DIMENSION (0:MAXN). + XC IT CONTAINS, BEFORE THE (k+1)-TH CALL, THE COEFFICIENTS + XC OF THE POLYNOMIAL P OF DEGREE NK, AND AFTER THE (k+1)-TH + XC k + XC CALL, THE COEFFICIENTS OF THE POLYNOMIAL P OF DEGREE + XC k+1 + XC NK+MK. THE POLYNOMIAL IS INITIALIZED BY THE SUBROUTINE + XC DURING THE FIRST CALL. + XC + XC P1 - INPUT/OUTPUT REAL VECTOR OF DIMENSION (0:MAXN). + XC IT CONTAINS, BEFORE THE (k+1)-TH CALL, THE COEFFICIENTS + XC (1) + XC OF THE POLYNOMIAL P OF DEGREE NK, AND AFTER THE (k+1)-TH + XC k (1) + XC CALL, THE COEFFICIENTS OF THE POLYNOMIAL P OF DEGREE + XC k+1 + XC NK+MK. THE POLYNOMIAL IS INITIALIZED BY THE SUBROUTINE + XC DURING THE FIRST CALL. + XC + XC PWK - WORKING REAL VECTOR OF DIMENSION (0:2*MAXN+1). + XC + XC IR - INPUT ROWS DIMENSION EXACTLY AS SPECIFIED IN THE + XC DIMENSION STATEMENTS IN THE CALLING PROGRAM FOR + XC THE MATRICES A, V, W AND U. + XC + XC NK - OUTPUT INTEGER VALUE, DIMENSION OF THE INTERMEDIATE + XC KRYLOV SUBSPACE. + XC + XC EPS - INPUT REAL VALUE USED FOR TESTING THE NEAR BREAKDOWN. + XC THE SUBROUTINE DOES NOT CONTROL WHETHER OR NOT EPS IS + XC A NEGATIVE OR ZERO REAL NUMBER. + XC + XC EPS1 - INPUT REAL VALUE USED FOR TESTING THE PIVOTS IN GAUSSIAN + XC ELIMINATION FOR SOLVING THE AUXILIARY SYSTEMS. + XC IF DABS(X) .LE. EPS1, THEN X IS CONSIDERED TO BE ZERO. + XC THE SUBROUTINE DOES NOT CONTROL WHETHER OR NOT EPS1 IS + XC A NEGATIVE OR ZERO REAL NUMBER. + XC + XC EPS2 - INPUT REAL VALUE USED FOR TESTING THE FINAL SOLUTION. + XC THE FINAL SOLUTION IS OBTAINED WHEN THE NORM OF THE + XC RESIDUAL VECTOR IS SMALLER THAN EPS2. + XC THE SUBROUTINE DOES NOT CONTROL WHETHER OR NOT EPS2 IS + XC A NEGATIVE OR ZERO REAL NUMBER. + XC + XC INIT - INPUT/OUTPUT INTEGER TO BE SET TO ZERO BEFORE THE + XC FIRST CALL OF THE SUBROUTINE. ITS VALUE IS CHANGED + XC TO 1 BY THE SUBROUTINE DURING THE FIRST CALL. + XC FOR A NEW APPLICATION OF THE METHOD, INIT MUST SET + XC AGAIN TO ZERO. + XC + XC IFLAG - INPUT INTEGER. + XC IF IFLAG .EQ. 0 THEN THE AUXILIARY VECTOR y IS CHOSEN + XC TO COINCIDE WITH THE VECTOR z = r . + XC 0 0 + XC IF IFLAG .NE. 0 THEN THE USER MUST DEFINE y IN THE MAIN + XC PROGRAM BEFORE THE FIRST CALL. + XC + XC IER - OUTPUT INDEX WARNING/ERROR. + XC IER = 100 CALL OF THE SUBROUTINE WITH A NON ZERO IER + XC VALUE. + XC IER = 200 THE NORM OF THE RESIDUAL VECTOR IS LESS OR + XC EQUAL TO EPS2. THE EXACT SOLUTION HAS BEEN + XC OBTAINED. + XC IER = 300 SOLUTION NOT OBTAINED AFTER REACHING THE + XC VALUE NK+MK=MAXN. + XC IER = 400 SOLUTION NOT OBTAINED AFTER REACHING THE + XC DIMENSION N OF THE SYSTEM, DUE TO THE + XC PRECISION OF THE COMPUTER. + XC THE COMPUTATION CONTINUES UNTIL NK+MK=MAXN + XC AT MOST. + XC IER = 500 THE VALUE OF MAXBCK IS GREATER THAN MAXN OR + XC LESS THAN 2. + XC IER = 600 THE VALUE OF m EXCEEDS THE VALUE OF MAXBCK.+ XC k + XC IER = 700 JUMP FOR BREAKDOWN C(0) = 0 + XC (mk) + XC IER = 800 JUMP FOR BREAKDOWN sigma = 0 + XC k+1 (mk) + XC IER = 900 JUMP FOR NEAR-BREAKDOWN |sigma | <= EPS + XC k+1 + XC IER = 1000 JUMP FOR NEAR-BREAKDOWN |D(0)/C(0)|>= 1/EPS + XC IER = 1100 JUMP FOR NEAR-BREAKDOWN + XC NK=0, |C(1)/C(0)| >= 1/EPS + XC IER = 1200 JUMP FOR NEAR-BREAKDOWN + XC NK<>0, |D(0)/C(0)| <= EPS + XC + XC + XC EXTERNAL MODULES: + XC + XC - DOUBLE PRECISION FUNCTIONS SUNORM, FH, GAMETA, PINNER, RXSUMM, + XC SSUMM, ZSUMM + XC - SUBROUTINES CHKSIG, COMPO1, COMPO2, COMPOL, COMPP1, + XC CRESOL, GSOLVD, MATVEC, POLMUL, SOLSHF, + XC STOMHF, STORHF + XC + XC REMARKS: + XC + XC - ALL THE REAL ARGUMENTS PASSED FROM THE CALLING PROGRAM MUST BE + XC IN DOUBLE PRECISION. + XC - THE VARIABLE NK, THE VECTORS Y, X, R, AB, D, C, P, P1, PWK, LMAT + XC AND THE ARRAYS V, W, U, AND RMAT MUST NOT BE MODIFIED BY THE USER + XC BETWEEN TWO CONSECUTIVE CALLS OF THE SUBROUTINE. + XC - IN THE CALLING PROCEDURE, THE ROWS DIMENSION FOR THE ARRAYS A, V, W,+ XC AND U MUST BE THE SAME. + XC - IN THE CALLING PROCEDURE THE MINIMAL DIMENSIONS FOR THE MATRIX AND + XC VECTOR ARGUMENTS (IR=N) ARE: + XC A(N,N) + XC AB(N) + XC Y(N) + XC X(N) + XC R(N) + XC V(N,0:2*MAXBCK) + XC W(N,0:2*MAXBCK-2) + XC U(N,0:2*MAXBCK-1) + XC LMAT(8*MAXBCK) IF MAXBCK <= 2 + XC OR + XC LMAT((2*MAXBCK-1)*(2*MAXBCK-1)) IF MAXBCK > 2 + XC RMAT(2,0:2*MAXBCK-1) + XC ETA(0:MAXBCK) + XC ETAP(0:MAXBCK-1) + XC GAMMA(0:MAXBCK) + XC GAMMAP(0:MAXBCK-1) + XC D(0:2*MAXBCK-1) + XC C(0:2*MAXBCK-1) + XC P(0:MAXN) + XC P1(0:MAXN) + XC PWK(0:2*MAXN+1) + XC + XC AUTHORS: + XC + XC C. BREZINSKI + XC UNIVERSITY OF LILLE - FRANCE + XC M. REDIVO ZAGLIA + XC UNIVERSITY OF PADOVA - ITALY + XC + XC REFERENCE: + XC + XC - TREATMENT OF NEAR-BREAKDOWN IN THE CGS ALGORITHM + XC NUMERICAL ALGORITHMS 7 (1994) 33-73 + XC + XC+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ XC X SUBROUTINE BSMRZS (N, A, AB, Y, X, R, NORM, MAXBCK, MAXN, X * V, W, U, LMAT, RMAT, ETA, ETAP, GAMMA, GAMMAP, D, C, X * P, P1, PWK, IR, NK, EPS, EPS1, EPS2, INIT, IFLAG, IER) XC XC ... SPECIFICATIONS FOR ARGUMENTS XC X INTEGER IER, IFLAG, INIT, IR, MAXBCK, MAXN, N, NK X DOUBLE PRECISION EPS, EPS1, EPS2, NORM X DOUBLE PRECISION A(IR,1), W(IR,0:1), V(IR,0:1), U(IR,0:1), X * D(0:1), C(0:1), Y(1), AB(1), X(1), R(1), LMAT(1), X * RMAT(2,0:1), ETA(0:1), ETAP(0:1), GAMMA(0:1), X * GAMMAP(0:1), P(0:1), P1(0:1), PWK(0:1) XC XC ... SPECIFICATIONS FOR EXTERNAL MODULES XC X DOUBLE PRECISION SUNORM, PINNER, RXSUMM, SSUMM, ZSUMM XC XC ... SPECIFICATIONS FOR LOCAL VARIABLES XC X INTEGER I, INDS, J, MK, NFIND X DOUBLE PRECISION SIGMA X LOGICAL JUMP X SAVE NFIND, SIGMA XC XC ... EXECUTABLE STATEMENTS XC XC XC ... FIRST CALL OF THE SUBROUTINE XC X IF (INIT .EQ. 0) THEN X IER = 0 X INIT = 1 X NK = 0 X NFIND = 0 XC XC ... STORE THE VALUES FOR P1(0) AND P(0) XC X P1(0) = 1.0D0 X P(0) = 1.0D0 XC XC ... CONTROL THE VALUE OF MAXN AND OF MAXBCK XC X IF (MAXBCK .GT. MAXN .OR. MAXBCK .LT. 2) THEN X IER = 500 X RETURN X END IF XC XC ... COMPUTATION OF THE VECTORS r AND z XC 0 0 XC X CALL MATVEC (N, A, X, 1, R, 1, IR, 0) X DO 10 I = 1, N X R(I) = AB(I) - R(I) XC XC ... STORE THE VALUES FOR V(0), W(0) AND U(0) XC X V(I,0) = R(I) X W(I,0) = R(I) X U(I,0) = R(I) XC XC ... TEST FOR y = z XC 0 X IF (IFLAG .EQ. 0) Y(I) = R(I) X 10 CONTINUE XC XC ... COMPUTE THE NORM OF THE RESIDUAL VECTOR r XC 0 XC X NORM = SUNORM(N,R) XC XC (0) XC ... INITIALIZE THE VALUE OF sigma XC 0 XC X SIGMA = PINNER(N, Y, R, 1, IR) XC XC ... TEST FOR THE SOLUTION XC X IF (NORM .LE. EPS2) THEN X IER = 200 X NK = NK + 1 X RETURN X END IF X END IF XC XC ... FIRST AND NEXT CALLS OF THE SUBROUTINE XC X IF (IER .NE. 0) THEN X IER = 100 X RETURN X END IF XC XC ... INITIALIZATION OF m XC k X MK = 1 XC XC ... COMPUTATION OF V(1), V(2) AND U(1) XC X CALL MATVEC (N, A, V, 1, V, 2, IR, 0) X CALL MATVEC (N, A, V, 2, V, 3, IR, 0) X CALL MATVEC (N, A, U, 1, U, 2, IR, 0) XC XC (m ) XC k-1 XC ... SET D(0)= sigma XC k XC X D(0) = SIGMA XC XC ... COMPUTATION OF C(0)=(y,A*z ) XC k X C(0) = PINNER(N, Y, V, 2, IR) XC XC ... COMPUTATION OF D(1) AND OF C(1) XC X D(1) = PINNER(N, Y, U, 2, IR) X C(1) = PINNER(N, Y, V, 3, IR) XC XC ... INITIALIZATION OF THE FLAG JUMP XC X JUMP = .FALSE. XC XC ... CASE MK = 1 XC XC ... CONTROL FOR BREAKDOWN XC (IMPOSSIBLE TO COMPUTE BETA(0)) XC X IF (C(0) .EQ. 0.0D0) THEN X IER = 700 X JUMP = .TRUE. X END IF XC XC ... IF NO JUMP ... X IF (.NOT. JUMP) THEN XC XC ... COMPUTE BETA(0), ALPHA(0) XC AND (IF NK<>0) ALPHA'(0) XC X CALL SOLSHF (LMAT, RMAT, C, D, P1, NK, MK, EPS1, INDS) XC XC ... COMPUTE GAMMA(0), ETA(0) XC AND (IF NK<>0) ETA'(0) XC X CALL CRESOL (RMAT, GAMMA, GAMMAP, ETA, ETAP, P1, NK, MK) XC XC ... COMPUTE THE VECTOR s XC k+1 XC X IF (NK .EQ. 0) THEN X DO 20 J = 1, N X AB(J) = ETA(0)*U(J,0) + U(J,1) - ETA(0)*GAMMA(0)*V(J,1) X * - GAMMA(0)*V(J,2) X 20 CONTINUE X ELSE X DO 30 J = 1, N X AB(J) = ETA(0)*U(J,0) + U(J,1) - ETA(0)*GAMMA(0)*V(J,1) X * - GAMMA(0)*V(J,2) + ETAP(0)*W(J,0) + U(J,1) X 30 CONTINUE X END IF XC XC (m ) XC k XC ... COMPUTATION OF sigma = (y, s ) XC k+1 k+1 XC X SIGMA = PINNER(N, Y, AB, 1, IR) XC XC ... COMPUTE THE RESIDUAL VECTOR r XC k+1 XC X DO 40 J = 1, N X R(J) = W(J,0)-2.0D0*GAMMA(0)*U(J,1)+GAMMA(0)**2*V(J,2) X 40 CONTINUE XC XC ... COMPUTE THE NORM OF THE RESIDUAL VECTOR r XC k+1 XC X NORM = SUNORM(N,R) XC XC ... CONTROL FOR BREAKDOWN OR NEAR-BREAKDOWN XC OR POSSIBLE SOLUTION (CASE MK = 1) XC X CALL CHKSIG (C, D, NK, MK, EPS, SIGMA, JUMP, IER) XC XC ... TEST FOR THE JUMP XC X IF ((NORM .LE. EPS2) .OR. (.NOT. JUMP)) THEN XC XC ... COMPUTE THE SOLUTION VECTOR x XC k+1 XC X DO 50 J = 1, N X X(J) = X(J)+2.0D0*GAMMA(0)*U(J,0)-GAMMA(0)**2*V(J,1) X 50 CONTINUE XC XC ... TEST FOR THE SOLUTION XC X IF (NORM .LE. EPS2) THEN X IER = 200 XC XC ... COMPUTE THE VALUE OF n XC k+1 X NK = NK + 1 X RETURN X END IF X END IF X END IF XC XC ... START OF THE LOOP TO COMPUTE BETA , BETA' AND XC i i XC ALPHA , ALPHA' UNTIL THE SYSTEM IS NON SINGULAR XC i i XC OR NO BREAKDOWN AND NO NEAR-BREAKDOWN AT THE XC NEXT STEP XC X 60 CONTINUE X IF (JUMP .OR. (INDS .NE. 0)) THEN XC XC ... SET THE FLAG JUMP XC X JUMP = .FALSE. XC XC ... INCREASE THE VALUE OF m XC k X MK = MK + 1 XC XC ... CONTROL THE VALUE OF MAXN XC X IF (MK .EQ. MAXN-NK+1) THEN X NK = MAXN X IER = 300 X RETURN X END IF XC XC ... CONTROL THE VALUE OF m XC k X IF (MK .GT. MAXBCK) THEN X NK = NK + MK - 1 X IER = 600 X RETURN X END IF XC XC ... FOR THE NEW m XC k XC X DO 70 I = -1, 0 XC XC ... COMPUTATION OF V(2*MK-1) AND OF V(2*MK) XC X CALL MATVEC (N, A, V, 2*MK+I, V, 2*MK+I+1, IR, 0) XC XC ... COMPUTATION OF W(2*MK-3), W(2*MK-2) XC U(2*MK-2), U(2*MK-1) XC ONLY IF m <= n + 1 XC k k XC ELSE COMPUTATION OF U(NK+MK) XC X IF (MK .LE. NK+1) THEN X CALL MATVEC (N, A, W, 2*MK+I-2, W, 2*MK+I-1, IR, 0) X CALL MATVEC (N, A, U, 2*MK+I-1, U, 2*MK+I, IR, 0) X ELSE IF (I .EQ. -1) THEN X CALL MATVEC (N, A, U, NK+MK, U, NK+MK+1, IR, 0) X END IF X 70 CONTINUE XC X DO 80 I = 2, 1, -1 XC XC ... COMPUTATION OF C(2m -2) AND C(2m -1), XC k k XC ... COMPUTATION OF D(2m -2) AND D(2m -1) XC k k XC IF m <= n XC k k XC ... COMPUTATION OF D(n + m - 1) XC k k XC IF m > n XC k k XC X C(2*MK-I) = PINNER(N, Y, V, 2*MK-I+2, IR) X IF (MK .LE. NK) THEN X D(2*MK-I) = PINNER(N, Y, U, 2*MK-I+1, IR) X ELSE IF (I .EQ. 2) THEN X D(MK+NK-1) = PINNER(N, Y, U, MK+NK, IR) X END IF XC X 80 CONTINUE XC XC ... SOLVE THE SYSTEM XC XC ... COMPUTATION OF BETA , BETA' AND OF XC i i XC ALPHA , ALPHA' XC i i XC X CALL SOLSHF (LMAT, RMAT, C, D, P1, NK, MK, EPS1, INDS) XC XC ... IF NON SINGULAR SYSTEM THEN ... XC X IF (INDS .EQ. 0) THEN XC XC ... CONSTRUCT THE VECTORS OF THE SOLUTIONS XC GAMMA , GAMMA' , ETA AND ETA' XC i i i i XC X CALL CRESOL (RMAT, GAMMA, GAMMAP, ETA, ETAP, P1, NK, MK) XC XC ... COMPUTATION OF THE VECTOR s XC k+1 XC X CALL COMPO2 (GAMMA, GAMMAP, ETA, ETAP, NK, MK, X * LMAT(1), LMAT(2*MAXBCK), LMAT(4*MAXBCK), X * LMAT(6*MAXBCK+1)) X DO 90 J = 1, N X AB(J) = SSUMM(LMAT(1), LMAT(2*MAXBCK), LMAT(4*MAXBCK), X * LMAT(6*MAXBCK+1), V, W, U, IR, J, NK, MK) X 90 CONTINUE XC XC (m ) XC k XC ... COMPUTATION OF sigma = (y, s ) XC k+1 k+1 XC X SIGMA = PINNER(N, Y, AB, 1, IR) XC XC XC ... COMPUTE THE RESIDUAL VECTOR r XC k+1 XC X CALL COMPOL (GAMMA, GAMMAP, NK, MK, LMAT(1), LMAT(2*MAXBCK), X * LMAT(4*MAXBCK), LMAT(6*MAXBCK+1)) X DO 100 J = 1, N X R(J) = RXSUMM(LMAT(2*MAXBCK), LMAT(4*MAXBCK), X * LMAT(6*MAXBCK+1), V, W, U, IR, J, NK, MK, 1) X 100 CONTINUE XC XC ... COMPUTE THE NORM OF THE RESIDUAL VECTOR r XC k+1 XC X NORM = SUNORM(N,R) XC XC ... CONTROL FOR BREAKDOWN OR NEAR-BREAKDOWN XC OR POSSIBLE SOLUTION (CASE MK > 1) XC X CALL CHKSIG (C, D, NK, MK, EPS, SIGMA, JUMP, IER) XC XC ... TEST FOR THE JUMP XC X IF ((NORM .LE. EPS2) .OR. (.NOT. JUMP)) THEN XC XC ... COMPUTE THE SOLUTION VECTOR x XC k+1 XC X DO 110 J = 1, N X X(J) = X(J) - RXSUMM(LMAT(1), LMAT(4*MAXBCK), X * LMAT(6*MAXBCK+1), V, W, U, IR, J, NK, MK, 0) X 110 CONTINUE XC XC ... TEST FOR THE SOLUTION XC X IF (NORM .LE. EPS2) THEN X IER = 200 XC XC ... COMPUTE THE VALUE OF n XC k+1 X NK = NK + MK X RETURN X END IF X END IF X END IF XC XC ... END OF THE LOOP TO COMPUTE BETA , BETA' AND XC i i XC ALPHA , ALPHA' XC i i X GO TO 60 X END IF XC XC ... COMPUTE THE VALUE OF n XC k+1 X NK = NK + MK XC XC ... CONTROL THE VALUE OF n XC k XC X IF (NK .GE. N .AND. NFIND .EQ. 0) THEN X IER = 400 X NFIND = 1 X END IF XC XC ... CONTROL THE VALUE OF MAXN XC X IF (NK .EQ. MAXN) THEN X IER = 300 X RETURN X END IF XC XC ... COMPUTE THE VECTOR z XC k+1 XC X CALL COMPO1 (ETA, ETAP, NK-MK, MK, LMAT(1), LMAT(2*MAXBCK), X * LMAT(4*MAXBCK)) X DO 120 J = 1, N X V(J,0) = ZSUMM(LMAT(1), LMAT(2*MAXBCK), LMAT(4*MAXBCK), X * V, W, U, IR, J, NK-MK, MK) X 120 CONTINUE XC XC ... SAVE THE VALUES OF s AND OF r XC k+1 k+1 X DO 130 J = 1, N X U(J,0) = AB(J) X W(J,0) = R(J) X 130 CONTINUE XC XC ... COMPUTE THE COEFFICIENTS OF XC (1) XC THE POLYNOMIALS P AND P XC k+1 k+1 XC X CALL COMPP1 (ETA, ETAP, GAMMA, GAMMAP, P, P1, NK-MK, MK, PWK) XC X RETURN X END SHAR_EOF if test 33381 -ne "`wc -c bsmrzs.f`" then echo shar: error transmitting bsmrzs.f '(should have been 33381 characters)' fi echo shar: extracting chksig.f sed 's/^X//' << \SHAR_EOF > chksig.f XC+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ XC + XC SUBROUTINE NAME - CHKSIG + XC + XC+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ XC + XC DESCRIPTION: + XC + XC CONTROLS THE CONDITIONS THAT COULD PRODUCE A BREAKDOWN, + XC A NEAR-BREAKDOWN OR IF THE SOLUTION IS ABOUT TO BE OBTAINED. + XC + XC USAGE: + XC + XC CALL CHKSIG (C, D, NK, MK, EPS, SIGMA, JUMP, IER) + XC + XC ARGUMENTS: + XC + XC C - INPUT REAL VECTOR CONTAINING THE c 'S. + XC i + XC + XC D - INPUT REAL VECTOR CONTAINING THE d 'S. + XC i + XC + XC NK - INPUT INTEGER EQUAL TO THE DIMENSION OF THE PREVIOUS + XC MATRIX OF THE SYSTEM. + XC + XC MK - INPUT INTEGER EQUAL TO THE LENGTH OF THE NEW JUMP. + XC + XC EPS - INPUT REAL VALUE USED FOR TESTING THE NEAR BREAKDOWN. + XC THE SUBROUTINE DOES NOT CONTROL WHETHER OR NOT EPS IS + XC A NEGATIVE OR ZERO REAL NUMBER. + XC + XC (m ) + XC k + XC SIGMA - INPUT REAL VALUE EQUAL TO THE sigma . + XC k+1 + XC + XC JUMP - OUTPUT LOGICAL VALUE. + XC IF JUMP = .FALSE. THEN THERE IS NO BREAKDOWN, NO + XC NEAR-BREAKDOWN NOR POSSIBLE SOLUTION. + XC IF JUMP = .TRUE. THEN THERE IS A BREAKDOWN OR A + XC NEAR-BREAKDOWN OR A POSSIBLE SOLUTION. + XC + XC IER - OUTPUT INDEX WARNING/ERROR + XC (mk) + XC IER = 800 BREAKDOWN OR POSSIBLE SOLUTION. sigma = 0 + XC k+1 + XC IER = 900 NEAR-BREAKDOWN OR POSSIBLE SOLUTION. + XC (mk) + XC |sigma | <= EPS + XC k+1 + XC IER = 1000 JUMP FOR NEAR-BREAKDOWN. |D(0)/C(0)| >= 1/EPS. + XC IER = 1100 JUMP FOR NEAR-BREAKDOWN. + XC NK=0, |C(1)/C(0)| >= 1/EPS. + XC IER = 1200 JUMP FOR NEAR-BREAKDOWN. + XC NK<>0, |D(0)/C(0)| <= EPS. + XC + XC REMARKS: + XC + XC - ALL THE REAL ARGUMENTS PASSED FROM THE CALLING PROGRAM MUST BE + XC IN DOUBLE PRECISION. + XC - IN THE CALLING PROCEDURE THE DIMENSIONS FOR THE ARGUMENTS ARE: + XC C(0:*) + XC D(0:*) + XC + XC AUTHORS: + XC + XC C. BREZINSKI + XC UNIVERSITY OF LILLE - FRANCE + XC M. REDIVO ZAGLIA + XC UNIVERSITY OF PADOVA - ITALY + XC + XC REFERENCES: + XC + XC - TREATMENT OF NEAR-BREAKDOWN IN THE CGS ALGORITHMS + XC NUMERICAL ALGORITHMS 7 (1994) 33-73 + XC + XC+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ XC X SUBROUTINE CHKSIG (C, D, NK, MK, EPS, SIGMA, JUMP, IER) XC XC ... SPECIFICATIONS FOR ARGUMENTS XC X INTEGER IER, NK X LOGICAL JUMP X DOUBLE PRECISION EPS, SIGMA X DOUBLE PRECISION C(0:1), D(0:1) XC XC ... EXECUTABLE STATEMENTS XC XC ... CONTROL FOR BREAKDOWN OR NEAR BREAKDOWN XC OR IF THE SOLUTION IS ABOUT TO BE OBTAINED XC X IF (DABS(SIGMA) .LE. EPS) THEN X JUMP = .TRUE. X IF (SIGMA .EQ. 0.0D0) THEN X IER = 800 X ELSE X IER = 900 X END IF X RETURN X END IF XC XC ... ONLY FOR MK = 1 XC X IF (MK .EQ. 1) THEN XC XC ... CONTROL FOR NEAR BREAKDOWN ... XC XC ... IN COMPUTING BETA(0) XC X IF (DABS(D(0)/C(0)) .GE. 1.0D0/EPS) THEN X JUMP = .TRUE. X IER = 1000 XC XC OR ... XC ... IN COMPUTING ALPHA(0) XC FOR THE CASE MK > NK = 0 XC X ELSE IF (NK.EQ.0 .AND. DABS(C(1)/C(0)) .GE. 1.0D0/EPS) THEN X JUMP = .TRUE. X IER = 1100 XC XC OR ... XC ... IN COMPUTING ALPHA'(0) XC FOR THE CASE MK <= NK, NK<>0 XC X ELSE IF (NK.NE.0 .AND. DABS(D(0)/C(0)) .LE. EPS) THEN X JUMP = .TRUE. X IER = 1200 X END IF X END IF XC X RETURN X END SHAR_EOF if test 7834 -ne "`wc -c chksig.f`" then echo shar: error transmitting chksig.f '(should have been 7834 characters)' fi echo shar: extracting compo1.f sed 's/^X//' << \SHAR_EOF > compo1.f XC+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ XC + XC SUBROUTINE NAME - COMPO1 + XC + XC+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ XC + XC DESCRIPTION: + XC + XC COMPUTES THE COEFFICIENTS OF THE POLYNOMIALS APPEARING IN THE + XC FORMULA FOR THE COMPUTATION OF z . + XC k+1 + XC + XC USAGE: + XC CALL COMPO1 (ETA, ETAP, NK, MK, POL1, POL2, POL3) + XC + XC ARGUMENTS: + XC + XC ETA - INPUT REAL VECTOR CONTAINING THE ETA . + XC i + XC + XC ETAP - INPUT REAL VECTOR CONTAINING THE ETA'. + XC i + XC + XC NK - INPUT INTEGER EQUAL TO THE DIMENSION OF THE PREVIOUS + XC MATRIX OF THE SYSTEM. + XC + XC MK - INPUT INTEGER EQUAL TO THE DIMENSION OF THE NEW JUMP. + XC + XC POL1 - OUTPUT REAL VECTOR CONTAINING THE COEFFICIENTS OF THE + XC POLYNOMIAL t(xi)**2. + XC + XC POL2 - OUTPUT REAL VECTOR CONTAINING THE COEFFICIENTS OF THE + XC POLYNOMIAL t(xi) * q(xi). + XC + XC POL3 - OUTPUT REAL VECTOR CONTAINING THE COEFFICIENTS OF THE + XC POLYNOMIAL q(xi)**2. + XC + XC EXTERNAL MODULES: + XC + XC - SUBROUTINE POLMUL + XC + XC REMARKS: + XC + XC - ALL THE REAL ARGUMENTS PASSED FROM THE CALLING PROGRAM MUST BE + XC IN DOUBLE PRECISION. + XC - IN THE CALLING PROCEDURE THE DIMENSIONS FOR THE MATRIX AND VECTOR + XC ARGUMENTS ARE: + XC ETA(0:*) + XC ETAP(0:*) + XC POL1(0:*) + XC POL2(0:*) + XC POL3(0:*) + XC + XC AUTHORS: + XC + XC C. BREZINSKI + XC UNIVERSITY OF LILLE - FRANCE + XC M. REDIVO ZAGLIA + XC UNIVERSITY OF PADOVA - ITALY + XC + XC REFERENCE: + XC + XC - TREATMENT OF NEAR-BREAKDOWN IN THE CGS ALGORITHM + XC NUMERICAL ALGORITHMS 7 (1994) 33-73 + XC + XC+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ XC X SUBROUTINE COMPO1 (ETA, ETAP, NK, MK, POL1, POL2, POL3) XC XC ... SPECIFICATIONS FOR ARGUMENTS XC X INTEGER NK, MK X DOUBLE PRECISION ETA(0:1), ETAP(0:1), POL1(0:1), POL2(0:1), X * POL3(0:2) XC XC ... SPECIFICATIONS FOR LOCAL VARIABLES XC X INTEGER IER, NV XC XC ... EXECUTABLE STATEMENTS XC XC XC ... CASE MK = 1 XC X IF (MK .EQ. 1) THEN X POL3(0) = ETA(0)**2 X POL3(1) = 2.0D0 * ETA(0) X POL3(2) = 1.0D0 X IF (MK .LE. NK) THEN X POL1(0) = ETAP(0)**2 X POL2(0) = ETA(0) * ETAP(0) X POL2(1) = ETAP(0) X END IF X RETURN X END IF XC XC ... SET THE DEGREE OF THE POLYNOMIAL t(xi) XC (COEFFICIENTS STORED IN ETAP) XC XC ... CASE MK <= NK XC X IF (MK .LE. NK) THEN X NV = MK - 1 X ELSE XC XC ... CASE MK > NK XC X NV = NK - 1 X END IF XC X IF (NK .NE. 0) THEN XC XC ... COMPUTES THE COEFFICIENTS OF THE XC POLYNOMIAL t(xi)**2 XC X CALL POLMUL(ETAP, NV, ETAP, NV, POL1, IER) XC XC ... COMPUTES THE COEFFICIENTS OF THE XC POLYNOMIAL t(xi) * q(xi) XC X CALL POLMUL(ETAP, NV, ETA, MK, POL2, IER) X END IF XC XC ... COMPUTES THE COEFFICIENTS OF THE XC POLYNOMIAL q(xi)**2 XC X CALL POLMUL(ETA, MK, ETA, MK, POL3, IER) XC X RETURN X END SHAR_EOF if test 6954 -ne "`wc -c compo1.f`" then echo shar: error transmitting compo1.f '(should have been 6954 characters)' fi echo shar: extracting compo2.f sed 's/^X//' << \SHAR_EOF > compo2.f XC+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ XC + XC SUBROUTINE NAME - COMPO2 + XC + XC+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ XC + XC DESCRIPTION: + XC + XC COMPUTES THE COEFFICIENTS OF THE POLYNOMIALS APPEARING IN THE + XC FORMULA FOR THE COMPUTATION OF s . + XC k+1 + XC + XC USAGE: + XC CALL COMPO2 (GAMMA, GAMMAP, ETA, ETAP, NK, MK, POL1, POL2, + XC POL3, POL4) + XC + XC ARGUMENTS: + XC + XC GAMMA - INPUT REAL VECTOR CONTAINING THE GAMMA . + XC i + XC + XC GAMMAP - INPUT REAL VECTOR CONTAINING THE GAMMA' . + XC i + XC + XC ETA - INPUT REAL VECTOR CONTAINING THE ETA . + XC i + XC + XC ETAP - INPUT REAL VECTOR CONTAINING THE ETA'. + XC i + XC + XC NK - INPUT INTEGER EQUAL TO THE DIMENSION OF THE PREVIOUS + XC MATRIX OF THE SYSTEM. + XC + XC MK - INPUT INTEGER EQUAL TO THE DIMENSION OF THE NEW JUMP. + XC + XC POL1 - OUTPUT REAL VECTOR CONTAINING THE COEFFICIENTS OF THE + XC POLYNOMIAL t(xi) * (1 - xi*v(xi)). + XC + XC POL2 - OUTPUT REAL VECTOR CONTAINING THE COEFFICIENTS OF THE + XC POLYNOMIAL (1 - xi*v(xi)) * q(xi). + XC + XC POL3 - OUTPUT REAL VECTOR CONTAINING THE COEFFICIENTS OF THE + XC POLYNOMIAL t(xi) * w(xi). + XC + XC POL4 - OUTPUT REAL VECTOR CONTAINING THE COEFFICIENTS OF THE + XC POLYNOMIAL w(xi) * q(xi). + XC + XC EXTERNAL MODULES: + XC + XC - SUBROUTINE POLMUL + XC + XC REMARKS: + XC + XC - ALL THE REAL ARGUMENTS PASSED FROM THE CALLING PROGRAM MUST BE + XC IN DOUBLE PRECISION. + XC - IN THE CALLING PROCEDURE THE DIMENSIONS FOR THE MATRIX AND VECTOR + XC ARGUMENTS ARE: + XC GAMMA(0:*) + XC GAMMAP(0:*) + XC ETA(0:*) + XC ETAP(0:*) + XC POL1(0:*) + XC POL2(0:*) + XC POL3(0:*) + XC POL4(0:*) + XC + XC AUTHORS: + XC + XC C. BREZINSKI + XC UNIVERSITY OF LILLE - FRANCE + XC M. REDIVO ZAGLIA + XC UNIVERSITY OF PADOVA - ITALY + XC + XC REFERENCE: + XC + XC - TREATMENT OF NEAR-BREAKDOWN IN THE CGS ALGORITHM + XC NUMERICAL ALGORITHMS 7 (1994) 33-73 + XC + XC+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ XC X SUBROUTINE COMPO2 (GAMMA, GAMMAP, ETA, ETAP, NK, MK, POL1, X * POL2, POL3, POL4) XC XC ... SPECIFICATIONS FOR ARGUMENTS XC X INTEGER NK, MK X DOUBLE PRECISION GAMMA(0:1), GAMMAP(0:1), ETA(0:1), ETAP(0:1), X * POL1(0:1), POL2(0:1), POL3(0:1), POL4(0:1) XC XC ... SPECIFICATIONS FOR LOCAL VARIABLES XC X INTEGER I, IER, NV, NV1 XC XC ... EXECUTABLE STATEMENTS XC XC XC ... CASE MK = 1 XC X IF (MK .EQ. 1) THEN X POL2(0) = ETA(0) X POL4(0) = GAMMA(0) * ETA(0) X POL4(1) = GAMMA(0) X IF (MK .LE. NK) THEN X POL1(0) = ETAP(0) X POL3(0) = ETAP(0) * GAMMA(0) X END IF X RETURN X END IF XC XC ... SET THE DEGREE OF THE POLYNOMIAL v(xi) XC (COEFFICIENTS STORED IN GAMMAP) XC AND OF THE POLYNOMIAL t(xi) XC (COEFFICIENTS STORED IN ETAP) XC XC ... CASE MK <= NK XC X IF (MK .LE. NK) THEN X NV = MK - 2 X NV1 = MK - 1 X ELSE XC XC ... CASE MK > NK XC X NV = NK - 1 X NV1 = NK - 1 X END IF XC X POL4(0) = 1.0D0 X IF (NK .NE. 0) THEN XC XC ... STORES THE COEFFICIENTS OF THE XC POLYNOMIAL (1 - xi*v(xi)) XC X DO 10 I = 1, NV+1 X POL4(I) = -GAMMAP(I-1) X 10 CONTINUE XC XC ... COMPUTES THE COEFFICIENTS OF THE XC POLYNOMIAL t(xi) * (1 - xi*v(xi)) XC X CALL POLMUL(ETAP, NV1, POL4, NV+1, POL1, IER) XC XC ... COMPUTES THE COEFFICIENTS OF THE XC POLYNOMIAL t(xi) * w(xi) XC X CALL POLMUL(ETAP, NV1, GAMMA, MK-1, POL3, IER) X END IF XC XC ... COMPUTES THE COEFFICIENTS OF THE XC POLYNOMIAL (1 - xi*v(xi)) * q(xi) XC X CALL POLMUL(POL4, NV+1, ETA, MK, POL2, IER) XC XC ... COMPUTES THE COEFFICIENTS OF THE XC POLYNOMIAL w(xi) * q(xi) XC X CALL POLMUL(GAMMA, MK-1, ETA, MK, POL4, IER) XC X RETURN X END SHAR_EOF if test 8655 -ne "`wc -c compo2.f`" then echo shar: error transmitting compo2.f '(should have been 8655 characters)' fi echo shar: extracting compol.f sed 's/^X//' << \SHAR_EOF > compol.f XC+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ XC + XC SUBROUTINE NAME - COMPOL + XC + XC+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ XC + XC DESCRIPTION: + XC + XC COMPUTES THE COEFFICIENTS OF THE POLYNOMIALS APPEARING IN THE + XC FORMULAE FOR THE COMPUTATION OF x (THE NEW SOLUTION) AND OF r + XC k+1 k+1 + XC (THE NEW RESIDUAL). + XC + XC USAGE: + XC CALL COMPOL (GAMMA, GAMMAP, NK, MK, POL1, POL2, POL3, POL4) + XC + XC ARGUMENTS: + XC + XC GAMMA - INPUT REAL VECTOR CONTAINING THE GAMMA . + XC i + XC + XC GAMMAP - INPUT REAL VECTOR CONTAINING THE GAMMA' . + XC i + XC + XC NK - INPUT INTEGER EQUAL TO THE DIMENSION OF THE PREVIOUS + XC MATRIX OF THE SYSTEM. + XC + XC MK - INPUT INTEGER EQUAL TO THE DIMENSION OF THE NEW JUMP. + XC + XC POL1 - OUTPUT REAL VECTOR CONTAINING THE COEFFICIENTS OF THE + XC POLYNOMIAL v(xi) * (xi*v(xi) - 2). + XC + XC POL2 - OUTPUT REAL VECTOR CONTAINING THE COEFFICIENTS OF THE + XC POLYNOMIAL (1 - xi*v(xi))**2. + XC + XC POL3 - OUTPUT REAL VECTOR CONTAINING THE COEFFICIENTS OF THE + XC POLYNOMIAL (1 - xi*v(xi)) * w(xi). + XC + XC POL4 - OUTPUT REAL VECTOR CONTAINING THE COEFFICIENTS OF THE + XC POLYNOMIAL w(xi)**2. + XC + XC EXTERNAL MODULES: + XC + XC - SUBROUTINE POLMUL + XC + XC REMARKS: + XC + XC - ALL THE REAL ARGUMENTS PASSED FROM THE CALLING PROGRAM MUST BE + XC IN DOUBLE PRECISION. + XC - IN THE CALLING PROCEDURE THE DIMENSIONS FOR THE MATRIX AND VECTOR + XC ARGUMENTS ARE: + XC GAMMA(0:*) + XC GAMMAP(0:*) + XC POL1(0:*) + XC POL2(0:*) + XC POL3(0:*) + XC POL4(0:*) + XC + XC AUTHORS: + XC + XC C. BREZINSKI + XC UNIVERSITY OF LILLE - FRANCE + XC M. REDIVO ZAGLIA + XC UNIVERSITY OF PADOVA - ITALY + XC + XC REFERENCE: + XC + XC - TREATMENT OF NEAR-BREAKDOWN IN THE CGS ALGORITHM + XC NUMERICAL ALGORITHMS 7 (1994) 33-73 + XC + XC+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ XC X SUBROUTINE COMPOL (GAMMA, GAMMAP, NK, MK, POL1, POL2, POL3, POL4) XC XC ... SPECIFICATIONS FOR ARGUMENTS XC X INTEGER NK, MK X DOUBLE PRECISION GAMMA(0:1), GAMMAP(0:1), POL1(0:1), POL2(0:1), X * POL3(0:1), POL4(0:1) XC XC ... SPECIFICATIONS FOR LOCAL VARIABLES XC X INTEGER I, IER, NV XC XC ... EXECUTABLE STATEMENTS XC XC XC ... CASE MK = 1 XC X IF (MK .EQ. 1) THEN X POL3(0) = GAMMA(0) X POL4(0) = GAMMA(0)**2 X RETURN X END IF XC XC ... SET THE DEGREE OF THE POLYNOMIAL v(xi) XC (COEFFICIENTS STORED IN GAMMAP) XC XC ... CASE MK <= NK XC X IF (MK .LE. NK) THEN X NV = MK - 2 X ELSE XC XC ... CASE MK > NK XC X NV = NK - 1 X END IF X IF (NK .NE. 0) THEN XC XC ... STORES THE COEFFICIENTS OF THE XC POLYNOMIAL (xi*v(xi) - 2) XC X POL4(0) = -2.0D0 X DO 10 I = 1, NV+1 X POL4(I) = GAMMAP(I-1) X 10 CONTINUE XC XC ... COMPUTES THE COEFFICIENTS OF THE XC POLYNOMIAL v(xi) * (xi*v(xi) - 2) XC X CALL POLMUL(GAMMAP, NV, POL4, NV+1, POL1, IER) XC XC ... STORES THE COEFFICIENTS OF THE XC POLYNOMIAL (1 - xi*v(xi)) XC X POL4(0) = 1.0D0 X DO 20 I = 1, NV+1 X POL4(I) = -GAMMAP(I-1) X 20 CONTINUE XC XC ... COMPUTES THE COEFFICIENTS OF THE XC POLYNOMIAL (1 - xi*v(xi))**2 XC X CALL POLMUL(POL4, NV+1, POL4, NV+1, POL2, IER) XC X ELSE X POL4(0) = 1.0D0 X POL2(0) = 1.0D0 X END IF XC XC ... COMPUTES THE COEFFICIENTS OF THE XC POLYNOMIAL (1 - xi*v(xi)) * w(xi) XC X CALL POLMUL(POL4, NV+1, GAMMA, MK-1, POL3, IER) XC XC ... COMPUTES THE COEFFICIENTS OF THE XC POLYNOMIAL w(xi)**2 XC X CALL POLMUL(GAMMA, MK-1, GAMMA, MK-1, POL4, IER) XC X RETURN X END SHAR_EOF if test 7943 -ne "`wc -c compol.f`" then echo shar: error transmitting compol.f '(should have been 7943 characters)' fi echo shar: extracting compp1.f sed 's/^X//' << \SHAR_EOF > compp1.f XC+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ XC + XC SUBROUTINE NAME - COMPP1 + XC + XC+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ XC + XC DESCRIPTION: + XC + XC (1) + XC COMPUTES THE COEFFICIENTS OF THE POLYNOMIALS P AND P . + XC k+1 k+1 + XC + XC USAGE: + XC CALL COMPP1 (ETA, ETAP, GAMMA, GAMMAP, P, P1, NK, MK, POL) + XC + XC ARGUMENTS: + XC + XC ETA - INPUT REAL VECTOR CONTAINING THE ETA . + XC i + XC + XC ETAP - INPUT REAL VECTOR CONTAINING THE ETA'. + XC i + XC + XC GAMMA - INPUT/WORKING REAL VECTOR CONTAINING, IN INPUT, THE + XC GAMMA . + XC i + XC + XC GAMMAP - INPUT/WORKING REAL VECTOR CONTAINING, IN INPUT, THE + XC GAMMA' . + XC i + XC + XC P - INPUT/OUTPUT REAL VECTOR CONTAINING, IN INPUT, THE + XC COEFFICIENTS OF THE POLYNOMIAL P OF DEGREE NK AND, IN + XC k + XC OUTPUT, THE COEFFICIENTS OF THE POLYNOMIAL P . + XC k+1 + XC + XC P1 - INPUT/OUTPUT REAL VECTOR CONTAINING, IN INPUT, THE + XC (1) + XC COEFFICIENTS OF THE POLYNOMIAL P OF DEGREE NK AND, + XC k (1) + XC IN OUTPUT, THE COEFFICIENTS OF THE POLYNOMIAL P . + XC k+1 + XC + XC NK - INPUT INTEGER EQUAL TO THE DIMENSION OF THE PREVIOUS + XC MATRIX OF THE SYSTEM. + XC + XC MK - INPUT INTEGER EQUAL TO THE DIMENSION OF THE NEW JUMP. + XC + XC POL - WORKING REAL VECTOR OF DIMENSION AT LEAST 2*(NK+MK+1). + XC + XC EXTERNAL MODULES: + XC + XC - SUBROUTINE POLMUL + XC + XC REMARKS: + XC + XC - ALL THE REAL ARGUMENTS PASSED FROM THE CALLING PROGRAM MUST BE + XC IN DOUBLE PRECISION. + XC - IN THE CALLING PROCEDURE THE DIMENSIONS FOR THE MATRIX AND VECTOR + XC ARGUMENTS ARE: + XC ETA(0:*) + XC ETAP(0:*) + XC GAMMA(0:*) + XC GAMMAP(0:*) + XC P(0:*) + XC P1(0:*) + XC POL(0:*) + XC + XC AUTHORS: + XC + XC C. BREZINSKI + XC UNIVERSITY OF LILLE - FRANCE + XC M. REDIVO ZAGLIA + XC UNIVERSITY OF PADOVA - ITALY + XC + XC REFERENCE: + XC + XC - TREATMENT OF NEAR-BREAKDOWN IN THE CGS ALGORITHM + XC NUMERICAL ALGORITHMS 7 (1994) 33-73 + XC + XC+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ XC X SUBROUTINE COMPP1 (ETA, ETAP, GAMMA, GAMMAP, P, P1, NK, MK, POL) XC XC ... SPECIFICATIONS FOR ARGUMENTS XC X INTEGER NK, MK X DOUBLE PRECISION ETA(0:1), ETAP(0:1), GAMMA(0:1), GAMMAP(0:1), X * P(0:1), P1(0:1), POL(0:1) XC XC ... SPECIFICATIONS FOR LOCAL VARIABLES XC X INTEGER I, IER, NM, NV, NV1 XC XC ... EXECUTABLE STATEMENTS XC XC XC ... CASE MK = 1 XC X IF (MK .EQ. 1) THEN X POL(0) = ETA(0)*P1(0) X POL(NK+1) = 1.0D0 X P(NK+1) = -GAMMA(0) X IF (MK .LE. NK) THEN X POL(0) = POL(0) + ETAP(0) X DO 10 I = 1, NK X POL(I) = ETA(0)*P1(I) + P1(I-1) + ETAP(0)*P(I) X P(I) = P(I) - GAMMA(0)*P1(I-1) X 10 CONTINUE X END IF X DO 20 I = 0, NK+1 X P1(I) = POL(I) X 20 CONTINUE X RETURN X END IF XC X NM = NK + MK + 1 XC XC ... SET THE DEGREE OF THE POLYNOMIAL t(xi) XC (COEFFICIENTS STORED IN ETAP) AND XC OF THE POLYNOMIAL v(xi) (COEFFICIENTS XC STORED IN GAMMAP) XC XC ... CASE MK <= NK XC X IF (MK .LE. NK) THEN X NV = MK - 1 X NV1 = MK - 2 X ELSE XC XC ... CASE MK > NK XC X NV = NK - 1 X NV1 = NK - 1 X END IF XC XC ... COMPUTES THE COEFFICIENTS OF THE XC POLYNOMIAL t(xi) * P (xi) (NK .NE. 0) XC k XC X IF (NK .NE. 0) CALL POLMUL(ETAP, NV, P, NK, POL, IER) XC XC ... COMPUTES THE COEFFICIENTS OF THE XC (1) XC POLYNOMIAL q(xi) * P (xi) AND XC k XC SAVE IN POL THIS TERM OF THE XC (1) XC POLYNOMIAL P (xi) XC k+1 XC X IF (MK .LE. NK) THEN X CALL POLMUL(ETA, MK, P1, NK, POL(NM), IER) X ELSE X CALL POLMUL(P1, NK, ETA, MK, POL(NM), IER) X END IF XC XC ... CASE NK .NE. 0 XC X IF (NK .NE. 0) THEN XC XC ... ADDS IN POL THE SECOND TERM TO COMPLETE XC THE COMPUTATION OF THE COEFFICIENTS OF THE XC (1) XC POLYNOMIAL P (xi) XC k+1 XC X DO 30 I = 0, NK + NV X POL(NM+I) = POL(NM+I) + POL(I) X 30 CONTINUE XC XC ... STORES THE COEFFICIENTS OF THE XC POLYNOMIAL (1 - xi*v(xi)) XC X DO 40 I = NV1 + 1, 1, -1 X GAMMAP(I) = -GAMMAP(I-1) X 40 CONTINUE X GAMMAP(0) = 1.0D0 XC XC ... COMPUTES THE COEFFICIENTS OF THE XC POLYNOMIAL (1 - xi*v(xi))* P (xi) XC k XC X CALL POLMUL(GAMMAP, NV1+1, P, NK, POL, IER) XC X ELSE X POL(0) = P(0) X END IF XC XC ... STORES THE COEFFICIENTS OF THE XC POLYNOMIAL -xi*w(xi) XC X DO 50 I = MK, 1, -1 X GAMMA(I) = -GAMMA(I-1) X 50 CONTINUE X GAMMA(0) = 0.0D0 XC XC ... COMPUTES THE COEFFICIENTS OF THE XC (1) XC POLYNOMIAL -xi*w(xi) * P (xi) XC k XC X IF (MK .LE. NK) THEN X CALL POLMUL(GAMMA, MK, P1, NK, P, IER) X ELSE X CALL POLMUL(P1, NK, GAMMA, MK, P, IER) X END IF XC XC ... COMPUTES THE COEFFICIENTS OF THE XC POLYNOMIAL P (xi) XC k+1 XC X DO 60 I = 0, NK + NV1 + 1 X P(I) = P(I) + POL(I) X 60 CONTINUE XC XC ... STORES THE COEFFICIENTS OF THE XC (1) XC POLYNOMIAL P (xi) XC k+1 XC X DO 70 I = 0, NK + MK X P1(I) = POL(NM+I) X 70 CONTINUE XC X RETURN X END SHAR_EOF if test 11012 -ne "`wc -c compp1.f`" then echo shar: error transmitting compp1.f '(should have been 11012 characters)' fi echo shar: extracting cresol.f sed 's/^X//' << \SHAR_EOF > cresol.f XC+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ XC + XC SUBROUTINE NAME - CRESOL + XC + XC+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ XC + XC DESCRIPTION: + XC + XC STORES IN SEPARATE VECTORS THE VALUES OBTAINED FOR THE + XC ALPHA , ALPHA', BETA , BETA' BY SOLVING THE AUXILIARY SYSTEM, + XC i i i i + XC AND COMPUTES THE ETA , ETA' , GAMMA AND GAMMA' . + XC i i i i + XC + XC USAGE: + XC CALL CRESOL (RMAT, GAMMA, GAMMAP, ETA, ETAP, P1, NK, MK) + XC + XC ARGUMENTS: + XC + XC RMAT - INPUT REAL MATRIX OF DIMENSION (2,0:*) WHICH CONTAINS + XC THE SOLUTIONS OF THE AUXILIARY SYSTEM. + XC + XC GAMMA - OUTPUT REAL VECTOR CONTAINING THE GAMMA . + XC i + XC + XC GAMMAP - OUTPUT REAL VECTOR CONTAINING THE GAMMA' . + XC i + XC + XC ETA - OUTPUT REAL VECTOR CONTAINING THE ETA . + XC i + XC + XC ETAP - OUTPUT REAL VECTOR CONTAINING THE ETA' . + XC i + XC + XC P1 - INPUT REAL VECTOR CONTAINING THE COEFFICIENTS OF THE + XC (1) + XC POLYNOMIAL P OF DEGREE NK. + XC k + XC + XC NK - INPUT INTEGER EQUAL TO THE DIMENSION OF THE PREVIOUS + XC MATRIX OF THE SYSTEM. + XC + XC MK - INPUT INTEGER EQUAL TO THE DIMENSION OF THE NEW JUMP. + XC + XC EXTERNAL MODULES: + XC + XC DOUBLE PRECISION FUNCTION GAMETA + XC + XC REMARKS: + XC + XC - ALL THE REAL ARGUMENTS PASSED FROM THE CALLING PROGRAM MUST BE + XC IN DOUBLE PRECISION. + XC - IN THE CALLING PROCEDURE THE DIMENSIONS FOR THE MATRIX AND VECTOR + XC ARGUMENTS ARE: + XC RMAT(2,0:*) + XC GAMMA(0:*) + XC GAMMAP(0:*) + XC ETA(0:*) + XC ETAP(0:*) + XC P1(0:*) + XC + XC AUTHORS: + XC + XC C. BREZINSKI + XC UNIVERSITY OF LILLE - FRANCE + XC M. REDIVO ZAGLIA + XC UNIVERSITY OF PADOVA - ITALY + XC + XC REFERENCE: + XC + XC - TREATMENT OF NEAR-BREAKDOWN IN THE CGS ALGORITHM + XC NUMERICAL ALGORITHMS 7 (1994) 33-73 + XC + XC+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ XC X SUBROUTINE CRESOL (RMAT, GAMMA, GAMMAP, ETA, ETAP, P1, NK, MK) XC XC ... SPECIFICATIONS FOR ARGUMENTS XC X INTEGER NK, MK X DOUBLE PRECISION RMAT(2,0:1), GAMMA(0:1), GAMMAP(0:1), ETA(0:1), X * ETAP(0:1), P1(0:1) XC XC ... SPECIFICATIONS FOR EXTERNAL FUNCTIONS XC X DOUBLE PRECISION GAMETA XC XC ... SPECIFICATIONS FOR LOCAL VARIABLES XC X INTEGER I, I2, NC, NC1, NCC XC XC ... EXECUTABLE STATEMENTS XC XC XC ... CASE MK = 1 XC X IF (MK .EQ. 1) THEN XC XC ... STORES GAMMA = BETA XC 0 0 XC X GAMMA(0) = RMAT(1,0) XC XC ... STORES ETA = ALPHA + P1(NK-1) XC 0 0 XC X ETA(0) = RMAT(2,0) XC XC ... STORES ETA = ALPHA = 1 XC 1 1 XC X ETA(1) = 1.0D0 XC XC ... STORES ETA' = ALPHA' (IF MK <= NK) XC 0 0 XC X IF (MK .LE. NK) ETAP(0) = RMAT(2,1) XC X RETURN X END IF XC XC ... CASE MK <= NK XC X IF (MK .LE. NK) THEN X NC = MK - 2 X NC1 = MK - 1 X ELSE XC XC ... CASE MK > NK XC X NC = NK - 1 X NC1 = NK - 1 X END IF XC XC ... STORES THE BETA AND BETA' XC i i XC AND THE ALPHA AND ALPHA' XC i i XC XC ... BOTH CASES: MK <= NK AND MK > NK XC X IF (NK .NE. 0) THEN X DO 10 I = 0, NC X I2 = I*2 X GAMMA(I) = RMAT(1,I2) X GAMMAP(I) = RMAT(1,I2+1) X ETA(I) = RMAT(2,I2) X ETAP(I) = RMAT(2,I2+1) X 10 CONTINUE X END IF XC X ETA(MK) = 1.0D0 XC XC ... CASE MK <= NK XC X IF (MK .LE. NK) THEN X GAMMA(MK-1) = RMAT(1,2*MK-2) X ETA(MK-1) = RMAT(2,2*MK-2) X ETAP(MK-1) = RMAT(2,2*MK-1) XC XC ... CASE MK > NK XC X ELSE X DO 20 I = NK, MK-1 X NCC = NK + I X GAMMA(I) = RMAT(1,NCC) X ETA(I) = RMAT(2,NCC) X 20 CONTINUE X END IF XC XC ... COMPUTES THE GAMMA AND GAMMA' XC i i XC AND THE ETA AND ETA' XC i i XC XC ... BOTH CASES: MK <= NK AND MK > NK XC X IF (NK .NE. 0) THEN X DO 30 I = 0, NC X I2 = I*2 X RMAT(1,I2) = GAMETA(MK-1,I,GAMMA,P1,NK) X RMAT(1,I2+1) = GAMETA(NC,I,GAMMAP,P1,NK) X RMAT(2,I2) = GAMETA(MK-1,I,ETA,P1,NK) X IF (NK .GE. MK-I) RMAT(2,I2) = RMAT(2,I2) + P1(NK-MK+I) X RMAT(2,I2+1) = GAMETA(NC1,I,ETAP,P1,NK) X 30 CONTINUE X END IF XC XC ... CASE MK <= NK XC X IF (MK .LE. NK) THEN X IF (NK .GE. 1) THEN X RMAT(2,2*MK-2) = ETA(MK-1) + P1(NK-1) X ELSE X RMAT(2,2*MK-2) = ETA(MK-1) X END IF XC XC ... CASE MK > NK XC X ELSE X DO 40 I = NK, MK-1 X NCC = NK + I X RMAT(1,NCC) = GAMETA(MK-1,I,GAMMA,P1,NK) X RMAT(2,NCC) = GAMETA(MK-1,I,ETA,P1,NK) X IF (NK .GE. MK-I) RMAT(2,NCC) = RMAT(2,NCC)+P1(NK-MK+I) X 40 CONTINUE X END IF XC XC ... STORES THE GAMMA AND GAMMA' XC i i XC AND THE ETA AND ETA' XC i i XC XC ... BOTH CASES: MK <= NK AND MK > NK XC X IF (NK .NE. 0) THEN X DO 50 I = 0, NC X I2 = I*2 X GAMMA(I) = RMAT(1,I2) X GAMMAP(I) = RMAT(1,I2+1) X ETA(I) = RMAT(2,I2) X ETAP(I) = RMAT(2,I2+1) X 50 CONTINUE X END IF XC XC ... CASE MK <= NK XC X IF (MK .LE. NK) THEN X ETA(MK-1) = RMAT(2,2*MK-2) XC XC ... CASE MK > NK XC X ELSE X DO 60 I = NK, MK-1 X NCC = NK + I X GAMMA(I) = RMAT(1,NCC) X ETA(I) = RMAT(2,NCC) X 60 CONTINUE X END IF XC X RETURN X END SHAR_EOF if test 10510 -ne "`wc -c cresol.f`" then echo shar: error transmitting cresol.f '(should have been 10510 characters)' fi echo shar: extracting exa1.f sed 's/^X//' << \SHAR_EOF > exa1.f XC+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ XC + XC PROGRAM NAME - EXA1 + XC + XC+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ XC + XC DESCRIPTION: + XC + XC MAIN PROGRAM TO TEST THE SUBROUTINE BSMRZS. + XC + XC MODULES REQUIRED: + XC + XC - SUBROUTINES BSMRZS, CHKSIG, COMPO1, COMPO2, COMPOL, + XC COMPP1, CRESOL, GSOLVD, POLMUL, SOLSHF, + XC STOMHF, STORHF. + XC - DOUBLE PRECISION FUNCTIONS FH, GAMETA, RXSUMM, SSUMM, SUNORM, + XC ZSUMM. + XC + XC MODULES REQUIRED GIVEN IN NETLIB (NA1 FROM NUMERALGO): + XC + XC - SUBROUTINES MATVEC. + XC - DOUBLE PRECISION FUNCTIONS PINNER. + XC + XC REMARK: + XC + XC - IF MAXBCK IS SET EQUAL TO A VALUE LESS THAN 3, THEN THE DIMENSION + XC OF THE WORKING VECTOR LMAT MUST BE SET EQUAL TO (8*MAXBCK). + XC + XC AUTHORS: + XC + XC C. BREZINSKI + XC UNIVERSITY OF LILLE - FRANCE + XC M. REDIVO ZAGLIA + XC UNIVERSITY OF PADOVA - ITALY + XC + XC REFERENCE: + XC + XC - TREATMENT OF NEAR-BREAKDOWN IN THE CGS ALGORITHM + XC NUMERICAL ALGORITHMS 7 (1994) 33-73 + XC + XC+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ XC X PROGRAM EXA1 XC XC ... SPECIFICATIONS FOR VARIABLES AND CONSTANTS XC X INTEGER I, IER, IFLAG, INIT, IR, J, K, KSAV, MAXBCK, MAXN, X * N, NBC, NK, NKSAV X DOUBLE PRECISION EPS, EPS1, EPS2, RBEST, TMP, ACONST, NORM XC XC ... SPECIFICATIONS FOR PARAMETER CONSTANTS XC X PARAMETER (N=40, IR=40, MAXBCK=40, MAXN=40, NBC=40, X * EPS=1.0D-8, EPS1=1.0D-8, EPS2=1.D-9, ACONST=0.95) XC XC ... SPECIFICATIONS FOR VECTORS AND MATRICES XC X DOUBLE PRECISION A(IR,IR), AB(IR), Y(IR), X(IR), R(IR), X * C(0:2*MAXBCK-1), D(0:2*MAXBCK-1), V(IR,0:2*MAXBCK), X * W(IR,0:2*MAXBCK-2), U(IR,0:2*MAXBCK-1), X * RMAT(2,0:2*MAXBCK-1), LMAT((2*MAXBCK-1)*(2*MAXBCK-1)), X * ETA(0:MAXBCK), ETAP(0:MAXBCK-1), GAMMA(0:MAXBCK), X * GAMMAP(0:MAXBCK-1), P(0:MAXN), P1(0:MAXN), PWK(0:2*MAXN+1), X * ADIG(IR), XBEST(IR), ACT(IR), CB(IR) XC XC ... SPECIFICATIONS FOR EXTERNAL FUNCTIONS XC X DOUBLE PRECISION SUNORM XC XC ... EXECUTABLE STATEMENTS XC XC XC ... CHOICE OF IFLAG XC XC IFLAG .EQ. 0 Y IS SET TO r BY THE SUBROUTINE XC 0 XC IFLAG .NE. 0 THE USER MUST DEFINE Y IN XC THE MAIN PROGRAM XC X IFLAG = 0 XC X WRITE (*,*) ' OUTPUT RESULTS FROM EXA1' X WRITE (*,*) X WRITE (*,*) ' DIMENSION OF THE SYSTEM = ',N X WRITE (*,*) ' NUMBER OF CALLS = ',NBC X WRITE (*,*) ' MAXBCK (MAX JUMP MK) = ',MAXBCK X WRITE (*,*) ' MAXN (MAX NK+MK) = ',MAXN X WRITE (*,*) ' IFLAG = ',IFLAG X WRITE (*,*) ' EPS (NEAR-BREAKDOWN) = ',EPS X WRITE (*,*) ' EPS1 (GAUSS) = ',EPS1 X WRITE (*,*) ' EPS2 (SOLUTION) = ',EPS2 X WRITE (*,*) ' ACONST = ',ACONST X WRITE (*,*) X WRITE (*,*) ' ITER. NK NORM' X DO 20 I = 1, N X X(I) = 0.0D0 X Y(I) = 1.0D0 X DO 10 J = 1, N X A(I,J) = 0.0D0 X 10 CONTINUE X 20 CONTINUE XC X A(N,1) = ACONST X AB(N) = ACONST X CB(N) = AB(N) X DO 30 I = 2, N X A(I-1,I) = 1.0D0 X AB(I-1) = 1.0D0 X CB(I-1) = AB(I-1) X 30 CONTINUE XC X INIT = 0 XC X DO 50 K = 0, NBC X CALL BSMRZS (N, A, AB, Y, X, R, NORM, MAXBCK, MAXN, V, W, X * U, LMAT, RMAT, ETA, ETAP, GAMMA, GAMMAP, D, C, P, P1, X * PWK, IR, NK, EPS, EPS1, EPS2, INIT, IFLAG, IER) X IF (K .EQ. 0 .OR. NORM .LT. RBEST) THEN X RBEST = NORM X KSAV = K X NKSAV = NK X DO 40 I = 1, N X XBEST(I) = X(I) X 40 CONTINUE X END IF X WRITE (*,100) K, NK, NORM X IF (IER .EQ. 400) THEN X WRITE (*,*) X WRITE (*,*) ' SOLUTION NOT OBTAINED AFTER REACHING' X WRITE (*,*) ' THE DIMENSION N OF THE SYSTEM. THE' X WRITE (*,*) ' COMPUTATION CONTINUES UNTIL MAXN AT MOST' X WRITE (*,*) X IER = 0 X ELSE IF (IER .GE. 700) THEN X WRITE (*,*) X WRITE (*,*) ' JUMP FOR BREAKDOWN OR NEAR-BREAKDOWN ',IER X WRITE (*,*) X IER = 0 X END IF X IF (IER .NE. 0) THEN X WRITE (*,*) X IF (IER .EQ. 200) THEN X WRITE (*,*) ' THE SOLUTION HAS BEEN OBTAINED' X ELSE IF (IER .EQ. 300) THEN X WRITE (*,*) ' SOLUTION NOT OBTAINED AFTER' X WRITE (*,*) ' REACHING THE VALUE OF MAXN' X ELSE IF (IER .EQ. 600) THEN X WRITE (*,*) ' THE VALUE OF THE JUMP MK' X WRITE (*,*) ' IS GREATER THAN MAXBCK' X ELSE X WRITE (*,*) ' STOP DUE TO ERROR ', IER X STOP X END IF X GO TO 60 X END IF X 50 CONTINUE X WRITE (*,*) X WRITE (*,300) ' SOLUTION NOT OBTAINED AFTER', NBC X WRITE (*,*) ' ITERATIONS OF THE SUBROUTINE' X 60 CONTINUE X WRITE (*,*) X DO 70 I= 1, N X TMP = DABS(X(I)-1.0D0) X IF (TMP .EQ. 0.0D0) THEN X ADIG(I) = 999.00 X ELSE X ADIG(I) = -DLOG10(TMP) X END IF X 70 CONTINUE XC XC ... COMPUTE THE ACTUAL RESIDUAL XC X CALL MATVEC (N, A, X, 1, ACT, 1, IR, 0) X DO 80 I = 1, N X ACT(I) = ACT(I)-CB(I) X 80 CONTINUE X WRITE(*,500) ' ACTUAL RESIDUAL',SUNORM(N,ACT) X WRITE (*,*) XC X IF (IER .EQ. 200) THEN X WRITE (*,*) X * ' FINAL SOLUTION N. OF SIGN. DIG. ' X WRITE (*,200) (X(I),ADIG(I),I=1,N) X ELSE X WRITE (*,*) X * ' LAST SOLUTION N. OF SIGN. DIG. ' X WRITE (*,200) (X(I),ADIG(I),I=1,N) X WRITE (*,*) X WRITE (*,*) ' SOLUTION OF MINIMAL RESIDUAL OBTAINED AT' X WRITE (*,*) ' ITER. NK NORM' X WRITE (*,100) KSAV, NKSAV, RBEST X WRITE (*,*) X WRITE (*,400) (XBEST(I),I=1,N) X END IF X STOP X 100 FORMAT (I5,I8,D28.15) X 200 FORMAT (D25.15,F15.2) X 300 FORMAT (T2,A,I4) X 400 FORMAT (D25.15) X 500 FORMAT (T2,A,D24.15) X END SHAR_EOF if test 8688 -ne "`wc -c exa1.f`" then echo shar: error transmitting exa1.f '(should have been 8688 characters)' fi echo shar: extracting exa2.f sed 's/^X//' << \SHAR_EOF > exa2.f XC+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ XC + XC PROGRAM NAME - EXA2 + XC + XC+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ XC + XC DESCRIPTION: + XC + XC MAIN PROGRAM TO TEST THE SUBROUTINE BSMRZS. + XC + XC MODULES REQUIRED: + XC + XC - SUBROUTINES BSMRZS, CHKSIG, COMPO1, COMPO2, COMPOL, + XC COMPP1, CRESOL, GSOLVD, POLMUL, SOLSHF, + XC STOMHF, STORHF. + XC - DOUBLE PRECISION FUNCTIONS FH, GAMETA, RXSUMM, SSUMM, SUNORM, + XC ZSUMM. + XC + XC MODULES REQUIRED GIVEN IN NETLIB (NA1 FROM NUMERALGO): + XC + XC - SUBROUTINES MATVEC. + XC - DOUBLE PRECISION FUNCTIONS PINNER. + XC + XC REMARK: + XC + XC - IF MAXBCK IS SET EQUAL TO A VALUE LESS THAN 3, THEN THE DIMENSION + XC OF THE WORKING VECTOR LMAT MUST BE SET EQUAL TO (8*MAXBCK). + XC + XC AUTHORS: + XC + XC C. BREZINSKI + XC UNIVERSITY OF LILLE - FRANCE + XC M. REDIVO ZAGLIA + XC UNIVERSITY OF PADOVA - ITALY + XC + XC REFERENCE: + XC + XC - TREATMENT OF NEAR-BREAKDOWN IN THE CGS ALGORITHM + XC NUMERICAL ALGORITHMS 7 (1994) 33-73 + XC + XC+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ XC X PROGRAM EXA2 X XC XC ... SPECIFICATIONS FOR VARIABLES AND CONSTANTS XC X INTEGER I, IER, IFLAG, INIT, IR, J, K, KSAV, MAXBCK, MAXN, X * N, NBC, NK, NKSAV X DOUBLE PRECISION EPS, EPS1, EPS2, RBEST, TMP, ACONST, SOL, NORM XC XC ... SPECIFICATIONS FOR PARAMETER CONSTANTS XC X PARAMETER (N=40, IR=40, MAXBCK=10, MAXN=40, NBC=40, X * EPS=1.D-4, EPS1=1.D-12, EPS2=1.D-14, ACONST=1.D-4) XC XC ... SPECIFICATIONS FOR VECTORS AND MATRICES XC X DOUBLE PRECISION A(IR,IR), AB(IR), Y(IR), X(IR), R(IR), X * C(0:2*MAXBCK-1), D(0:2*MAXBCK-1), V(IR,0:2*MAXBCK), X * W(IR,0:2*MAXBCK-2), U(IR,0:2*MAXBCK-1), X * RMAT(2,0:2*MAXBCK-1), LMAT((2*MAXBCK-1)*(2*MAXBCK-1)), X * ETA(0:MAXBCK), ETAP(0:MAXBCK-1), GAMMA(0:MAXBCK), X * GAMMAP(0:MAXBCK-1), P(0:MAXN), P1(0:MAXN), PWK(0:2*MAXN+1), X * ADIG(IR), XBEST(IR), SOLU(IR), ACT(IR), CB(IR) XC XC ... SPECIFICATIONS FOR EXTERNAL FUNCTIONS XC X DOUBLE PRECISION SUNORM XC XC ... EXECUTABLE STATEMENTS XC XC XC ... CHOICE OF IFLAG XC XC IFLAG .EQ. 0 Y IS SET TO r BY THE SUBROUTINE XC 0 XC IFLAG .NE. 0 THE USER MUST DEFINE Y IN XC THE MAIN PROGRAM XC X IFLAG = 0 XC X WRITE (*,*) ' OUTPUT RESULTS FROM EXA2' X WRITE (*,*) X WRITE (*,*) ' DIMENSION OF THE SYSTEM = ',N X WRITE (*,*) ' NUMBER OF CALLS = ',NBC X WRITE (*,*) ' MAXBCK (MAX JUMP MK) = ',MAXBCK X WRITE (*,*) ' MAXN (MAX NK+MK) = ',MAXN X WRITE (*,*) ' IFLAG = ',IFLAG X WRITE (*,*) ' EPS (NEAR-BREAKDOWN) = ',EPS X WRITE (*,*) ' EPS1 (GAUSS) = ',EPS1 X WRITE (*,*) ' EPS2 (SOLUTION) = ',EPS2 X WRITE (*,*) ' ACONST = ',ACONST X WRITE (*,*) X WRITE (*,*) ' ITER. NK NORM' X DO 20 I = 1, N X X(I) = 0.0D0 X Y(I) = 1.0D0 X AB(I) = 0.0D0 X DO 10 J = 1, N X A(I,J) = 0.0D0 X 10 CONTINUE X 20 CONTINUE XC X AB(1) = 5.0D0 X AB(2) = -3.0D0 X AB(3) = 4.0D0 X AB(4) = -4.0D0 X DO 30 I = 1, N X CB(I) = AB(I) X A(I,I) = -(-1.0D0)**I X 30 CONTINUE X DO 40 I = 1, N/2 X A(2*I-1, 2*I) = I - 1.0D0 + ACONST X 40 CONTINUE XC X INIT = 0 XC X DO 60 K = 0, NBC X CALL BSMRZS (N, A, AB, Y, X, R, NORM, MAXBCK, MAXN, V, W, X * U, LMAT, RMAT, ETA, ETAP, GAMMA, GAMMAP, D, C, P, P1, X * PWK, IR, NK, EPS, EPS1, EPS2, INIT, IFLAG, IER) X IF (K .EQ. 0 .OR. NORM .LT. RBEST) THEN X RBEST = NORM X KSAV = K X NKSAV = NK X DO 50 I = 1, N X XBEST(I) = X(I) X 50 CONTINUE X END IF X WRITE (*,100) K, NK, NORM X IF (IER .EQ. 400) THEN X WRITE (*,*) X WRITE (*,*) ' SOLUTION NOT OBTAINED AFTER REACHING' X WRITE (*,*) ' THE DIMENSION N OF THE SYSTEM. THE' X WRITE (*,*) ' COMPUTATION CONTINUES UNTIL MAXN AT MOST' X WRITE (*,*) X IER = 0 X ELSE IF (IER .GE. 700) THEN X WRITE (*,*) X WRITE (*,*) ' JUMP FOR BREAKDOWN OR NEAR-BREAKDOWN ',IER X WRITE (*,*) X IER = 0 X END IF X IF (IER .NE. 0) THEN X WRITE (*,*) X IF (IER .EQ. 200) THEN X WRITE (*,*) ' THE SOLUTION HAS BEEN OBTAINED' X ELSE IF (IER .EQ. 300) THEN X WRITE (*,*) ' SOLUTION NOT OBTAINED AFTER' X WRITE (*,*) ' REACHING THE VALUE OF MAXN' X ELSE IF (IER .EQ. 600) THEN X WRITE (*,*) ' THE VALUE OF THE JUMP MK' X WRITE (*,*) ' IS GREATER THAN MAXBCK' X ELSE X WRITE (*,*) ' STOP DUE TO ERROR ', IER X STOP X END IF X GO TO 70 X END IF X 60 CONTINUE X WRITE (*,*) X WRITE (*,300) ' SOLUTION NOT OBTAINED AFTER', NBC X WRITE (*,*) ' ITERATIONS OF THE SUBROUTINE' XC X 70 CONTINUE X WRITE (*,*) XC XC ... COMPUTE THE EXACT SOLUTION XC X DO 80 I = 1, N/2 X SOLU(2*I) = -CB(2*I) X SOLU(2*I-1) = CB(2*I-1) + (I-1.0D0+ACONST) * CB(2*I) X 80 CONTINUE X DO 90 I= 1, N X TMP = DABS(X(I)-SOLU(I)) X IF (TMP .EQ. 0.0D0) THEN X ADIG(I) = 999.00 X ELSE X SOL = SOLU(I) X IF (SOLU(I) .EQ. 0.0D0) SOL=1.0D0 X ADIG(I) = -DLOG10(TMP/DABS(SOL)) X END IF X 90 CONTINUE XC XC ... COMPUTE THE ACTUAL RESIDUAL XC X CALL MATVEC (N, A, X, 1, ACT, 1, IR, 0) X DO 95 I = 1, N X ACT(I) = ACT(I)-CB(I) X 95 CONTINUE X WRITE(*,500) ' ACTUAL RESIDUAL',SUNORM(N,ACT) X WRITE (*,*) XC X IF (IER .EQ. 200) THEN X WRITE (*,*) X * ' FINAL SOLUTION N. OF SIGN. DIG. ' X WRITE (*,200) (X(I),ADIG(I),I=1,N) X ELSE X WRITE (*,*) X * ' LAST SOLUTION N. OF SIGN. DIG. ' X WRITE (*,200) (X(I),ADIG(I),I=1,N) X WRITE (*,*) X WRITE (*,*) ' SOLUTION OF MINIMAL RESIDUAL OBTAINED AT' X WRITE (*,*) ' ITER. NK NORM' X WRITE (*,100) KSAV, NKSAV, RBEST X WRITE (*,*) X WRITE (*,400) (XBEST(I),I=1,N) X END IF X STOP X 100 FORMAT (I5,I8,D28.15) X 200 FORMAT (D25.15,F15.2) X 300 FORMAT (T2,A,I4) X 400 FORMAT (D25.15) X 500 FORMAT (T2,A,D24.15) X END SHAR_EOF if test 9082 -ne "`wc -c exa2.f`" then echo shar: error transmitting exa2.f '(should have been 9082 characters)' fi echo shar: extracting exa3.f sed 's/^X//' << \SHAR_EOF > exa3.f XC+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ XC + XC PROGRAM NAME - EXA3 + XC + XC+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ XC + XC DESCRIPTION: + XC + XC MAIN PROGRAM TO TEST THE SUBROUTINE BSMRZS. + XC + XC MODULES REQUIRED: + XC + XC - SUBROUTINES BSMRZS, CHKSIG, COMPO1, COMPO2, COMPOL, + XC COMPP1, CRESOL, GSOLVD, POLMUL, SOLSHF, + XC STOMHF, STORHF. + XC - DOUBLE PRECISION FUNCTIONS FH, GAMETA, RXSUMM, SSUMM, SUNORM, + XC ZSUMM. + XC + XC MODULES REQUIRED GIVEN IN NETLIB (NA1 FROM NUMERALGO): + XC + XC - SUBROUTINES MATVEC. + XC - DOUBLE PRECISION FUNCTIONS PINNER. + XC + XC REMARK: + XC + XC - IF MAXBCK IS SET EQUAL TO A VALUE LESS THAN 3, THEN THE DIMENSION + XC OF THE WORKING VECTOR LMAT MUST BE SET EQUAL TO (8*MAXBCK). + XC + XC AUTHORS: + XC + XC C. BREZINSKI + XC UNIVERSITY OF LILLE - FRANCE + XC M. REDIVO ZAGLIA + XC UNIVERSITY OF PADOVA - ITALY + XC + XC REFERENCE: + XC + XC - TREATMENT OF NEAR-BREAKDOWN IN THE CGS ALGORITHM + XC NUMERICAL ALGORITHMS 7 (1994) 33-73 + XC + XC+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ XC + X PROGRAM EXA3 X XC XC ... SPECIFICATIONS FOR VARIABLES AND CONSTANTS XC X INTEGER I, IER, IFLAG, INIT, IR, J, K, KSAV, MAXBCK, MAXN, X * N, NBC, NK, NKSAV X DOUBLE PRECISION EPS, EPS1, EPS2, RBEST, TMP, ACONST, SOL, NORM XC XC ... SPECIFICATIONS FOR PARAMETER CONSTANTS XC X PARAMETER (N=40, IR=40, MAXBCK=10, MAXN=40, NBC=40, X * EPS=1.0D-8, EPS1=1.0D-13, EPS2=1.D-13, ACONST=1.D-9) XC XC XC ... SPECIFICATIONS FOR VECTORS AND MATRICES XC X DOUBLE PRECISION A(IR,IR), AB(IR), Y(IR), X(IR), R(IR), X * C(0:2*MAXBCK-1), D(0:2*MAXBCK-1), V(IR,0:2*MAXBCK), X * W(IR,0:2*MAXBCK-2), U(IR,0:2*MAXBCK-1), X * RMAT(2,0:2*MAXBCK-1), LMAT((2*MAXBCK-1)*(2*MAXBCK-1)), X * ETA(0:MAXBCK), ETAP(0:MAXBCK-1), GAMMA(0:MAXBCK), X * GAMMAP(0:MAXBCK-1), P(0:MAXN), P1(0:MAXN), PWK(0:2*MAXN+1), X * ADIG(IR), XBEST(IR), SOLU(IR), ACT(IR), CB(IR) XC XC ... SPECIFICATIONS FOR EXTERNAL FUNCTIONS XC X DOUBLE PRECISION SUNORM XC XC ... EXECUTABLE STATEMENTS XC XC XC ... CHOICE OF IFLAG XC XC IFLAG .EQ. 0 Y IS SET TO r BY THE SUBROUTINE XC 0 XC IFLAG .NE. 0 THE USER MUST DEFINE Y IN XC THE MAIN PROGRAM XC X IFLAG = 0 XC X WRITE (*,*) ' OUTPUT RESULTS FROM EXA3' X WRITE (*,*) X WRITE (*,*) ' DIMENSION OF THE SYSTEM = ',N X WRITE (*,*) ' NUMBER OF CALLS = ',NBC X WRITE (*,*) ' MAXBCK (MAX JUMP MK) = ',MAXBCK X WRITE (*,*) ' MAXN (MAX NK+MK) = ',MAXN X WRITE (*,*) ' IFLAG = ',IFLAG X WRITE (*,*) ' EPS (NEAR-BREAKDOWN) = ',EPS X WRITE (*,*) ' EPS1 (GAUSS) = ',EPS1 X WRITE (*,*) ' EPS2 (SOLUTION) = ',EPS2 X WRITE (*,*) ' ACONST = ',ACONST X WRITE (*,*) X WRITE (*,*) ' ITER. NK NORM' X DO 20 I = 1, N X X(I) = 0.0D0 X Y(I) = 1.0D0 X AB(I) = DBLE(I) X CB(I) = AB(I) X DO 10 J = 1, N X A(I,J) = 0.0D0 X 10 CONTINUE X 20 CONTINUE XC X DO 30 I = 1, N/2 X A(2*I-1, 2*I) = 1.0D0 + I*ACONST X A(2*I, 2*I-1) = -1.0D0 X 30 CONTINUE XC X INIT = 0 XC X DO 50 K = 0, NBC X CALL BSMRZS (N, A, AB, Y, X, R, NORM, MAXBCK, MAXN, V, W, X * U, LMAT, RMAT, ETA, ETAP, GAMMA, GAMMAP, D, C, P, P1, X * PWK, IR, NK, EPS, EPS1, EPS2, INIT, IFLAG, IER) X IF (K .EQ. 0 .OR. NORM .LT. RBEST) THEN X RBEST = NORM X KSAV = K X NKSAV = NK X DO 40 I = 1, N X XBEST(I) = X(I) X 40 CONTINUE X END IF X WRITE (*,100) K, NK, NORM X IF (IER .EQ. 400) THEN X WRITE (*,*) X WRITE (*,*) ' SOLUTION NOT OBTAINED AFTER REACHING' X WRITE (*,*) ' THE DIMENSION N OF THE SYSTEM. THE' X WRITE (*,*) ' COMPUTATION CONTINUES UNTIL MAXN AT MOST' X WRITE (*,*) X IER = 0 X ELSE IF (IER .GE. 700) THEN X WRITE (*,*) X WRITE (*,*) ' JUMP FOR BREAKDOWN OR NEAR-BREAKDOWN ',IER X WRITE (*,*) X IER = 0 X END IF X IF (IER .NE. 0) THEN X WRITE (*,*) X IF (IER .EQ. 200) THEN X WRITE (*,*) ' THE SOLUTION HAS BEEN OBTAINED' X ELSE IF (IER .EQ. 300) THEN X WRITE (*,*) ' SOLUTION NOT OBTAINED AFTER' X WRITE (*,*) ' REACHING THE VALUE OF MAXN' X ELSE IF (IER .EQ. 600) THEN X WRITE (*,*) ' THE VALUE OF THE JUMP MK' X WRITE (*,*) ' IS GREATER THAN MAXBCK' X ELSE X WRITE (*,*) ' STOP DUE TO ERROR ', IER X STOP X END IF X GO TO 60 X END IF X 50 CONTINUE X WRITE (*,*) X WRITE (*,300) ' SOLUTION NOT OBTAINED AFTER', NBC X WRITE (*,*) ' ITERATIONS OF THE SUBROUTINE' XC X 60 CONTINUE X WRITE (*,*) XC XC ... COMPUTE THE EXACT SOLUTION XC X DO 80 I = 1, N/2 X SOLU(2*I-1) = -CB(2*I) X SOLU(2*I) = CB(2*I-1) /(1.0D0 + I*ACONST) X 80 CONTINUE X DO 90 I= 1, N X TMP = DABS(X(I)-SOLU(I)) X IF (TMP .EQ. 0.0D0) THEN X ADIG(I) = 999.00 X ELSE X SOL = SOLU(I) X IF (SOLU(I) .EQ. 0.0D0) SOL=1.0D0 X ADIG(I) = -DLOG10(TMP/DABS(SOL)) X END IF X 90 CONTINUE XC XC ... COMPUTE THE ACTUAL RESIDUAL XC X CALL MATVEC (N, A, X, 1, ACT, 1, IR, 0) X DO 95 I = 1, N X ACT(I) = ACT(I)-CB(I) X 95 CONTINUE X WRITE(*,500) ' ACTUAL RESIDUAL',SUNORM(N,ACT) X WRITE (*,*) XC X IF (IER .EQ. 200) THEN X WRITE (*,*) X * ' FINAL SOLUTION N. OF SIGN. DIG. ' X WRITE (*,200) (X(I),ADIG(I),I=1,N) X ELSE X WRITE (*,*) X * ' LAST SOLUTION N. OF SIGN. DIG. ' X WRITE (*,200) (X(I),ADIG(I),I=1,N) X WRITE (*,*) X WRITE (*,*) ' SOLUTION OF MINIMAL RESIDUAL OBTAINED AT' X WRITE (*,*) ' ITER. NK NORM' X WRITE (*,100) KSAV, NKSAV, RBEST X WRITE (*,*) X WRITE (*,400) (XBEST(I),I=1,N) X END IF X STOP X 100 FORMAT (I5,I8,D28.15) X 200 FORMAT (D25.15,F15.2) X 300 FORMAT (T2,A,I4) X 400 FORMAT (D25.15) X 500 FORMAT (T2,A,D24.15) X END X SHAR_EOF if test 8964 -ne "`wc -c exa3.f`" then echo shar: error transmitting exa3.f '(should have been 8964 characters)' fi echo shar: extracting exa4.f sed 's/^X//' << \SHAR_EOF > exa4.f XC+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ XC + XC PROGRAM NAME - EXA4 + XC + XC+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ XC + XC DESCRIPTION: + XC + XC MAIN PROGRAM TO TEST THE SUBROUTINE BSMRZS. + XC + XC MODULES REQUIRED: + XC + XC - SUBROUTINES BSMRZS, CHKSIG, COMPO1, COMPO2, COMPOL, + XC COMPP1, CRESOL, GSOLVD, POLMUL, SOLSHF, + XC STOMHF, STORHF. + XC - DOUBLE PRECISION FUNCTIONS FH, GAMETA, RXSUMM, SSUMM, SUNORM, + XC ZSUMM. + XC + XC MODULES REQUIRED GIVEN IN NETLIB (NA1 FROM NUMERALGO): + XC + XC - SUBROUTINES MATVEC. + XC - DOUBLE PRECISION FUNCTIONS PINNER. + XC + XC REMARK: + XC + XC - IF MAXBCK IS SET EQUAL TO A VALUE LESS THAN 3, THEN THE DIMENSION + XC OF THE WORKING VECTOR LMAT MUST BE SET EQUAL TO (8*MAXBCK). + XC + XC AUTHORS: + XC + XC C. BREZINSKI + XC UNIVERSITY OF LILLE - FRANCE + XC M. REDIVO ZAGLIA + XC UNIVERSITY OF PADOVA - ITALY + XC + XC REFERENCE: + XC + XC - TREATMENT OF NEAR-BREAKDOWN IN THE CGS ALGORITHM + XC NUMERICAL ALGORITHMS 7 (1994) 33-73 + XC + XC+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ XC X PROGRAM EXA4 XC XC ... SPECIFICATIONS FOR VARIABLES AND CONSTANTS XC X INTEGER I, IER, IFLAG, INIT, IR, J, K, KSAV, MAXBCK, MAXN, X * N, NBC, NK, NKSAV X DOUBLE PRECISION EPS, EPS1, EPS2, RBEST, TMP, NORM, ACONST XC XC ... SPECIFICATIONS FOR PARAMETER CONSTANTS XC X PARAMETER (N=200, IR=200, MAXBCK=10, MAXN=200, NBC=200, X * EPS=1.0D-5, EPS1=1.0D-14, EPS2=1.0D-9, ACONST=1.D-8) XC XC ... SPECIFICATIONS FOR VECTORS AND MATRICES XC X DOUBLE PRECISION A(IR,IR), AB(IR), Y(IR), X(IR), R(IR), X * C(0:2*MAXBCK-1), D(0:2*MAXBCK-1), V(IR,0:2*MAXBCK), X * W(IR,0:2*MAXBCK-2), U(IR,0:2*MAXBCK-1), X * RMAT(2,0:2*MAXBCK-1), LMAT((2*MAXBCK-1)*(2*MAXBCK-1)), X * ETA(0:MAXBCK), ETAP(0:MAXBCK-1), GAMMA(0:MAXBCK), X * GAMMAP(0:MAXBCK-1), P(0:MAXN), P1(0:MAXN), PWK(0:2*MAXN+1), X * ADIG(IR), XBEST(IR), ACT(IR), CB(IR) XC XC ... SPECIFICATIONS FOR EXTERNAL FUNCTIONS XC X DOUBLE PRECISION SUNORM XC XC ... EXECUTABLE STATEMENTS XC XC XC ... CHOICE OF IFLAG XC XC IFLAG .EQ. 0 Y IS SET TO r BY THE SUBROUTINE XC 0 XC IFLAG .NE. 0 THE USER MUST DEFINE Y IN XC THE MAIN PROGRAM XC X IFLAG = 0 XC X WRITE (*,*) ' OUTPUT RESULTS FROM EXA4' X WRITE (*,*) X WRITE (*,*) ' DIMENSION OF THE SYSTEM = ',N X WRITE (*,*) ' NUMBER OF CALLS = ',NBC X WRITE (*,*) ' MAXBCK (MAX JUMP MK) = ',MAXBCK X WRITE (*,*) ' MAXN (MAX NK+MK) = ',MAXN X WRITE (*,*) ' IFLAG = ',IFLAG X WRITE (*,*) ' EPS (NEAR-BREAKDOWN) = ',EPS X WRITE (*,*) ' EPS1 (GAUSS) = ',EPS1 X WRITE (*,*) ' EPS2 (SOLUTION) = ',EPS2 X WRITE (*,*) ' A CONSTANT = ',ACONST X WRITE (*,*) X WRITE (*,*) ' ITER. NK NORM' X DO 20 I = 1, N X X(I) = 0.0D0 X Y(I) = 1.0D0 X DO 10 J = 1, N X A(I,J) = 0.0D0 X 10 CONTINUE X 20 CONTINUE XC X A(1,1) = ACONST X AB(1) = 1.0D0 + ACONST X CB(1) = AB(1) X AB(N) = -1.0D0 + ACONST X CB(N) = AB(N) X DO 30 I = 2, N X A(I-1,I) = 1.0D0 X A(I,I-1) = -1.0D0 X A(I,I) = ACONST X IF (I .NE. N) THEN X AB(I) = ACONST X CB(I) = AB(I) X END IF X 30 CONTINUE XC X INIT = 0 XC X DO 50 K = 0, NBC X CALL BSMRZS (N, A, AB, Y, X, R, NORM, MAXBCK, MAXN, V, W, X * U, LMAT, RMAT, ETA, ETAP, GAMMA, GAMMAP, D, C, P, P1, X * PWK, IR, NK, EPS, EPS1, EPS2, INIT, IFLAG, IER) X IF (K .EQ. 0 .OR. NORM .LT. RBEST) THEN X RBEST = NORM X KSAV = K X NKSAV = NK X DO 40 I = 1, N X XBEST(I) = X(I) X 40 CONTINUE X END IF X WRITE (*,100) K, NK, NORM X IF (IER .EQ. 400) THEN X WRITE (*,*) X WRITE (*,*) ' SOLUTION NOT OBTAINED AFTER REACHING' X WRITE (*,*) ' THE DIMENSION N OF THE SYSTEM. THE' X WRITE (*,*) ' COMPUTATION CONTINUES UNTIL MAXN AT MOST' X WRITE (*,*) X IER = 0 X ELSE IF (IER .GE. 700) THEN X WRITE (*,*) X WRITE (*,*) ' JUMP FOR BREAKDOWN OR NEAR-BREAKDOWN ',IER X WRITE (*,*) X IER = 0 X END IF X IF (IER .NE. 0) THEN X WRITE (*,*) X IF (IER .EQ. 200) THEN X WRITE (*,*) ' THE SOLUTION HAS BEEN OBTAINED' X ELSE IF (IER .EQ. 300) THEN X WRITE (*,*) ' SOLUTION NOT OBTAINED AFTER' X WRITE (*,*) ' REACHING THE VALUE OF MAXN' X ELSE IF (IER .EQ. 600) THEN X WRITE (*,*) ' THE VALUE OF THE JUMP MK' X WRITE (*,*) ' IS GREATER THAN MAXBCK' X ELSE X WRITE (*,*) ' STOP DUE TO ERROR ', IER X STOP X END IF X GO TO 60 X END IF X 50 CONTINUE X WRITE (*,*) X WRITE (*,300) ' SOLUTION NOT OBTAINED AFTER', NBC X WRITE (*,*) ' ITERATIONS OF THE SUBROUTINE' XC X 60 CONTINUE X WRITE (*,*) X DO 70 I= 1, N X TMP = DABS(X(I)-1.0D0) X IF (TMP .EQ. 0.0D0) THEN X ADIG(I) = 999.00 X ELSE X ADIG(I) = -DLOG10(TMP/1.0D0) X END IF X 70 CONTINUE XC XC ... COMPUTE THE ACTUAL RESIDUAL XC X CALL MATVEC (N, A, X, 1, ACT, 1, IR, 0) X DO 80 I = 1, N X ACT(I) = ACT(I)-CB(I) X 80 CONTINUE X WRITE(*,500) ' ACTUAL RESIDUAL',SUNORM(N,ACT) X WRITE (*,*) XC X IF (IER .EQ. 200) THEN X WRITE (*,*) X * ' FINAL SOLUTION N. OF SIGN. DIG. ' X WRITE (*,200) (X(I),ADIG(I),I=1,N) X ELSE X WRITE (*,*) X * ' LAST SOLUTION N. OF SIGN. DIG. ' X WRITE (*,200) (X(I),ADIG(I),I=1,N) X WRITE (*,*) X WRITE (*,*) ' SOLUTION OF MINIMAL RESIDUAL OBTAINED AT' X WRITE (*,*) ' ITER. NK NORM' X WRITE (*,100) KSAV, NKSAV, RBEST X WRITE (*,*) X WRITE (*,400) (XBEST(I),I=1,N) X END IF X STOP X 100 FORMAT (I5,I8,D28.15) X 200 FORMAT (D25.15,F15.2) X 300 FORMAT (T2,A,I4) X 400 FORMAT (D25.15) X 500 FORMAT (T2,A,D24.15) X END SHAR_EOF if test 8860 -ne "`wc -c exa4.f`" then echo shar: error transmitting exa4.f '(should have been 8860 characters)' fi echo shar: extracting exa5.f sed 's/^X//' << \SHAR_EOF > exa5.f XC+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ XC + XC PROGRAM NAME - EXA5 + XC + XC+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ XC + XC DESCRIPTION: + XC + XC MAIN PROGRAM TO TEST THE SUBROUTINE BSMRZS. + XC + XC MODULES REQUIRED: + XC + XC - SUBROUTINES BSMRZS, CHKSIG, COMPO1, COMPO2, COMPOL, + XC COMPP1, CRESOL, GSOLVD, POLMUL, SOLSHF, + XC STOMHF, STORHF. + XC - DOUBLE PRECISION FUNCTIONS FH, GAMETA, RXSUMM, SSUMM, SUNORM, + XC ZSUMM. + XC + XC MODULES REQUIRED GIVEN IN NETLIB (NA1 FROM NUMERALGO): + XC + XC - SUBROUTINES MATVEC. + XC - DOUBLE PRECISION FUNCTIONS PINNER. + XC + XC REMARK: + XC + XC - IF MAXBCK IS SET EQUAL TO A VALUE LESS THAN 3, THEN THE DIMENSION + XC OF THE WORKING VECTOR LMAT MUST BE SET EQUAL TO (8*MAXBCK). + XC + XC AUTHORS: + XC + XC C. BREZINSKI + XC UNIVERSITY OF LILLE - FRANCE + XC M. REDIVO ZAGLIA + XC UNIVERSITY OF PADOVA - ITALY + XC + XC REFERENCE: + XC + XC - TREATMENT OF NEAR-BREAKDOWN IN THE CGS ALGORITHM + XC NUMERICAL ALGORITHMS 7 (1994) 33-73 + XC + XC+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ XC X PROGRAM EXA5 XC XC ... SPECIFICATIONS FOR VARIABLES AND CONSTANTS XC X INTEGER I, IER, IFLAG, INIT, IR, J, K, KSAV, MAXBCK, MAXN, X * N, NBC, NK, NKSAV X DOUBLE PRECISION EPS, EPS1, EPS2, RBEST, TMP, NORM XC XC ... SPECIFICATIONS FOR PARAMETER CONSTANTS XC X PARAMETER (N=401, IR=401, MAXBCK=10, MAXN=401, NBC=100, X * EPS=1.D-7, EPS1=1.D-7, EPS2=1.D-14) XC XC ... SPECIFICATIONS FOR VECTORS AND MATRICES XC X DOUBLE PRECISION A(IR,IR), AB(IR), Y(IR), X(IR), R(IR), X * C(0:2*MAXBCK-1), D(0:2*MAXBCK-1), V(IR,0:2*MAXBCK), X * W(IR,0:2*MAXBCK-2), U(IR,0:2*MAXBCK-1), X * RMAT(2,0:2*MAXBCK-1), LMAT((2*MAXBCK-1)*(2*MAXBCK-1)), X * ETA(0:MAXBCK), ETAP(0:MAXBCK-1), GAMMA(0:MAXBCK), X * GAMMAP(0:MAXBCK-1), P(0:MAXN), P1(0:MAXN), PWK(0:2*MAXN+1), X * ADIG(IR), XBEST(IR), ACT(IR), CB(IR) XC XC ... SPECIFICATIONS FOR EXTERNAL FUNCTIONS XC X DOUBLE PRECISION SUNORM XC XC ... EXECUTABLE STATEMENTS XC XC XC ... CHOICE OF IFLAG XC XC IFLAG .EQ. 0 Y IS SET TO r BY THE SUBROUTINE XC 0 XC IFLAG .NE. 0 THE USER MUST DEFINE Y IN XC THE MAIN PROGRAM XC X IFLAG = 1 XC X WRITE (*,*) ' OUTPUT RESULTS FROM EXA5' X WRITE (*,*) X WRITE (*,*) ' DIMENSION OF THE SYSTEM = ',N X WRITE (*,*) ' NUMBER OF CALLS = ',NBC X WRITE (*,*) ' MAXBCK (MAX JUMP MK) = ',MAXBCK X WRITE (*,*) ' MAXN (MAX NK+MK) = ',MAXN X WRITE (*,*) ' IFLAG = ',IFLAG X WRITE (*,*) ' EPS (NEAR-BREAKDOWN) = ',EPS X WRITE (*,*) ' EPS1 (GAUSS) = ',EPS1 X WRITE (*,*) ' EPS2 (SOLUTION) = ',EPS2 X WRITE (*,*) X WRITE (*,*) ' ITER. NK NORM' XC X DO 20 I = 1, N X X(I) = 0.0D0 X Y(I) = -(-1.0D0)**I X DO 10 J = 1, N X A(I,J) = 0.0D0 X 10 CONTINUE X 20 CONTINUE X Y(1) = 0.0D0 X Y(2) = 0.0D0 X Y(3) = 0.0D0 XC XC ... SET THE LAST COMPONENT OF Y XC EQUAL TO 1.0D-8 OR 0.0D0 XC X Y(N) = 1.0D-8 XC Y(N) = 0.0D0 XC X DO 30 I = 2, N X A(I-1,I) = 1.0D0 X IF (I .NE. 2) A(I,I-2) = 1.0D0 X A(I,I) = 2.0D0 X 30 CONTINUE X A(1,1) = 2.0D0 X AB(1) = 3.0D0 X AB(2) = AB(1) X AB(N) = AB(1) X CB(1) = AB(1) X CB(2) = AB(2) X CB(N) = AB(N) X DO 40 I = 3, N-1 X AB(I) = 4.0D0 X CB(I) = AB(I) X 40 CONTINUE XC X INIT = 0 XC X DO 60 K = 0, NBC X CALL BSMRZS (N, A, AB, Y, X, R, NORM, MAXBCK, MAXN, V, W, X * U, LMAT, RMAT, ETA, ETAP, GAMMA, GAMMAP, D, C, P, P1, X * PWK, IR, NK, EPS, EPS1, EPS2, INIT, IFLAG, IER) X IF (K .EQ. 0 .OR. NORM .LT. RBEST) THEN X RBEST = NORM X KSAV = K X NKSAV = NK X DO 50 I = 1, N X XBEST(I) = X(I) X 50 CONTINUE X END IF X WRITE (*,100) K, NK, NORM X IF (IER .EQ. 400) THEN X WRITE (*,*) X WRITE (*,*) ' SOLUTION NOT OBTAINED AFTER REACHING' X WRITE (*,*) ' THE DIMENSION N OF THE SYSTEM. THE' X WRITE (*,*) ' COMPUTATION CONTINUES UNTIL MAXN AT MOST' X WRITE (*,*) X IER = 0 X ELSE IF (IER .GE. 700) THEN X WRITE (*,*) X WRITE (*,*) ' JUMP FOR BREAKDOWN OR NEAR-BREAKDOWN ',IER X WRITE (*,*) X IER = 0 X END IF X IF (IER .NE. 0) THEN X WRITE (*,*) X IF (IER .EQ. 200) THEN X WRITE (*,*) ' THE SOLUTION HAS BEEN OBTAINED' X ELSE IF (IER .EQ. 300) THEN X WRITE (*,*) ' SOLUTION NOT OBTAINED AFTER' X WRITE (*,*) ' REACHING THE VALUE OF MAXN' X ELSE IF (IER .EQ. 600) THEN X WRITE (*,*) ' THE VALUE OF THE JUMP MK' X WRITE (*,*) ' IS GREATER THAN MAXBCK' X ELSE X WRITE (*,*) ' STOP DUE TO ERROR ', IER X STOP X END IF X GO TO 70 X END IF X 60 CONTINUE X WRITE (*,*) X WRITE (*,300) ' SOLUTION NOT OBTAINED AFTER', NBC X WRITE (*,*) ' ITERATIONS OF THE SUBROUTINE' XC X 70 CONTINUE X WRITE (*,*) X DO 80 I= 1, N X TMP = DABS(X(I)-1.0D0) X IF (TMP .EQ. 0.0D0) THEN X ADIG(I) = 999.00 X ELSE X ADIG(I) = -DLOG10(TMP/1.0D0) X END IF X 80 CONTINUE XC XC ... COMPUTE THE ACTUAL RESIDUAL XC X CALL MATVEC (N, A, X, 1, ACT, 1, IR, 0) X DO 90 I = 1, N X ACT(I) = ACT(I)-CB(I) X 90 CONTINUE X WRITE(*,500) ' ACTUAL RESIDUAL',SUNORM(N,ACT) X WRITE (*,*) XC X IF (IER .EQ. 200) THEN X WRITE (*,*) X * ' FINAL SOLUTION N. OF SIGN. DIG. ' X WRITE (*,200) (X(I),ADIG(I),I=1,N) X ELSE X WRITE (*,*) X * ' LAST SOLUTION N. OF SIGN. DIG. ' X WRITE (*,200) (X(I),ADIG(I),I=1,N) X WRITE (*,*) X WRITE (*,*) ' SOLUTION OF MINIMAL RESIDUAL OBTAINED AT' X WRITE (*,*) ' ITER. NK NORM' X WRITE (*,100) KSAV, NKSAV, RBEST X WRITE (*,*) X WRITE (*,400) (XBEST(I),I=1,N) X END IF X STOP X 100 FORMAT (I5,I8,D28.15) X 200 FORMAT (D25.15,F15.2) X 300 FORMAT (T2,A,I4) X 400 FORMAT (D25.15) X 500 FORMAT (T2,A,D24.15) X END SHAR_EOF if test 9016 -ne "`wc -c exa5.f`" then echo shar: error transmitting exa5.f '(should have been 9016 characters)' fi echo shar: extracting fh.f sed 's/^X//' << \SHAR_EOF > fh.f XC+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ XC + XC FUNCTION NAME - FH + XC + XC+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ XC + XC DESCRIPTION: + XC + XC DOUBLE PRECISION FUNCTION: + XC COMPUTES THE COEFFICIENT f (OR h ) (NEEDED IN THE SYSTEM TO + XC i,j i,j + XC BE SOLVED FOR THE COMPUTATION OF THE ALPHA , ALPHA', BETA , BETA') + XC i i i i + XC AS A LINEAR COMBINATION OF THE d (OR c ) AND OF THE COEFFICIENTS + XC (1) i i + XC OF THE POLYNOMIAL P . + XC k + XC + XC USAGE: + XC FH (I, J, CD, P1, NK, IFLAG) + XC + XC ARGUMENTS: + XC + XC I - INPUT INTEGER STATING THAT D(I+1) (OR C(I)) IS THE FIRST + XC VALUE TO BE CHOSEN IN THE LINEAR COMBINATION. + XC + XC J - INPUT INTEGER GIVING THE NUMBER OF TERMS MINUS ONE + XC IN THE LINEAR COMBINATION. + XC + XC CD - INPUT REAL VECTOR CONTAINING THE d 'S (OR c 'S). + XC i i + XC + XC P1 - INPUT REAL VECTOR CONTAINING THE COEFFICIENTS OF THE + XC (1) + XC POLYNOMIAL P OF DEGREE NK. + XC k + XC + XC NK - INPUT INTEGER EQUAL TO THE DIMENSION OF THE PREVIOUS + XC MATRIX OF THE SYSTEM. + XC + XC IFLAG - INPUT INTEGER FLAG. + XC IF IFLAG = 0, h IS COMPUTED + XC i,j + XC IF IFLAG = 1, f IS COMPUTED + XC i,j + XC + XC + XC REMARKS: + XC + XC - ALL THE REAL ARGUMENTS PASSED FROM THE CALLING PROGRAM MUST BE + XC IN DOUBLE PRECISION. + XC - IN THE CALLING PROCEDURE THE DIMENSIONS FOR THE VECTOR ARGUMENTS + XC ARE: + XC CD(0:*) + XC P1(0:*) + XC + XC AUTHORS: + XC + XC C. BREZINSKI + XC UNIVERSITY OF LILLE - FRANCE + XC M. REDIVO ZAGLIA + XC UNIVERSITY OF PADOVA - ITALY + XC + XC REFERENCE: + XC + XC - TREATMENT OF NEAR-BREAKDOWN IN THE CGS ALGORITHM + XC NUMERICAL ALGORITHMS 7 (1994) 33-73 + XC + XC+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ XC X DOUBLE PRECISION FUNCTION FH (I, J, CD, P1, NK, IFLAG) XC XC ... SPECIFICATIONS FOR ARGUMENTS XC X INTEGER I, IFLAG, J, NK X DOUBLE PRECISION CD(0:1), P1(0:1) XC XC ... SPECIFICATIONS FOR LOCAL VARIABLES XC X INTEGER L X DOUBLE PRECISION ACC XC XC ... EXECUTABLE STATEMENTS XC X ACC = 0.0D0 X IF (J .NE. 0) THEN X DO 10 L = 0, J-1 X IF (NK .GE. J-L) ACC = ACC + CD(I+L+IFLAG) * P1(NK-J+L) X 10 CONTINUE X END IF XC XC ... SET THE RESULT VALUE XC X FH = ACC + CD(I+J+IFLAG) X RETURN X END SHAR_EOF if test 6229 -ne "`wc -c fh.f`" then echo shar: error transmitting fh.f '(should have been 6229 characters)' fi echo shar: extracting gameta.f sed 's/^X//' << \SHAR_EOF > gameta.f XC+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ XC + XC FUNCTION NAME - GAMETA + XC + XC+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ XC + XC DESCRIPTION: + XC + XC DOUBLE PRECISION FUNCTION: + XC COMPUTES THE VALUE OF THE COEFFICIENTS GAMMA OR GAMMA' OR ETA OR + XC j j j + XC ETA' (OF THE POLYNOMIALS w OR v OR q OR t ) AS A LINEAR + XC j k k k k + XC COMBINATION OF THE BETA OR OF THE BETA' OR OF THE ALPHA OR OF + XC i i i + XC (1) + XC THE ALPHA' , WITH THE COEFFICIENTS OF THE POLYNOMIAL P . + XC i k + XC + XC USAGE: + XC GAMETA (I, J, ALBE, P1, NK) + XC + XC ARGUMENTS: + XC + XC I - INPUT INTEGER NEEDED TO DEFINE THE NUMBER OF TERMS IN THE + XC LINEAR COMBINATION. + XC + XC J - INPUT INTEGER DEFINING THE INDEX OF THE COEFFICIENT TO BE + XC COMPUTED. + XC + XC ALBE - INPUT REAL VECTOR CONTAINING THE VALUES OF ALPHA OR OF + XC i + XC ALPHA' OR OF BETA OR OF BETA'. + XC i i i + XC + XC P1 - INPUT REAL VECTOR CONTAINING THE COEFFICIENTS OF THE + XC (1) + XC POLYNOMIAL P OF DEGREE NK. + XC k + XC + XC NK - INPUT INTEGER EQUAL TO THE DIMENSION OF THE PREVIOUS + XC MATRIX OF THE SYSTEM. + XC + XC REMARKS: + XC + XC - ALL THE REAL ARGUMENTS PASSED FROM THE CALLING PROGRAM MUST BE + XC IN DOUBLE PRECISION. + XC - IN THE CALLING PROCEDURE THE DIMENSIONS FOR THE VECTOR ARGUMENTS + XC ARE: + XC ALBE(0:*) + XC P1(0:*) + XC + XC AUTHORS: + XC + XC C. BREZINSKI + XC UNIVERSITY OF LILLE - FRANCE + XC M. REDIVO ZAGLIA + XC UNIVERSITY OF PADOVA - ITALY + XC + XC REFERENCE: + XC + XC - TREATMENT OF NEAR-BREAKDOWN IN THE CGS ALGORITHM + XC NUMERICAL ALGORITHMS 7 (1994) 33-73 + XC + XC+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ XC X DOUBLE PRECISION FUNCTION GAMETA (I, J, ALBE, P1, NK) XC XC ... SPECIFICATIONS FOR ARGUMENTS XC X INTEGER I, J, NK X DOUBLE PRECISION ALBE(0:1), P1(0:1) XC XC ... SPECIFICATIONS FOR LOCAL VARIABLES XC X INTEGER L X DOUBLE PRECISION ACC XC XC ... EXECUTABLE STATEMENTS XC XC ... CASE I = J XC X IF (I .EQ. J) THEN X GAMETA = ALBE(I) X RETURN X END IF XC XC ... CASE I <> J XC X ACC = 0.0D0 X DO 10 L = 1, I-J X IF (NK .GE. L) ACC = ACC + ALBE(L+J) * P1(NK-L) X 10 CONTINUE XC XC ... SET THE RESULT VALUE XC X GAMETA = ACC + ALBE(J) X RETURN X END SHAR_EOF if test 6087 -ne "`wc -c gameta.f`" then echo shar: error transmitting gameta.f '(should have been 6087 characters)' fi echo shar: extracting gsolvd.f sed 's/^X//' << \SHAR_EOF > gsolvd.f XC+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ XC + XC SUBPROGRAM NAME - GSOLVD + XC + XC+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ XC + XC DESCRIPTION: + XC + XC COMPUTES THE SOLUTION OF A SYSTEM OF LINEAR EQUATIONS WITH A + XC AS COEFFICIENT MATRIX. THE MATRIX B CONTAINS THE 2 RIGHT HAND + XC SIDES. THE METHOD IS GAUSSIAN ELIMINATION. + XC IF THE MATRIX A IS NON-SINGULAR THE SOLUTIONS ARE SET IN THE + XC ROWS OF THE MATRIX B. + XC + XC USAGE: + XC CALL GSOLVD (A, B, N, EPS, INDS) + XC + XC ARGUMENTS: + XC + XC A - INPUT/WORKING REAL VECTOR OF DIMENSION (N*N) CONTAINING + XC THE COEFFICIENT MATRIX. + XC + XC B - INPUT/OUTPUT REAL ARRAY OF DIMENSION (2,N). + XC + XC N - INPUT INTEGER INDICATING THE DIMENSION OF THE SYSTEM. + XC + XC EPS - INPUT REAL VALUE USED IN TESTS FOR ZERO. + XC IF DABS(X) .LE. EPS, THEN X IS CONSIDERED TO BE ZERO. + XC + XC INDS - OUTPUT INTEGER VALUE. + XC IF INDS = 0 THEN THE MATRIX A IS NON-SINGULAR. + XC IF INDS = 1 THEN THE MATRIX A IS SINGULAR. + XC + XC REMARKS: + XC + XC - ALL THE REAL ARGUMENTS PASSED FROM THE CALLING PROGRAM MUST BE + XC IN DOUBLE PRECISION. + XC - IN THE CALLING PROCEDURE THE MINIMAL DIMENSIONS FOR THE ARGUMENTS + XC ARE: + XC A(N*N) + XC B(2,N) + XC + XC AUTHORS: + XC + XC C. BREZINSKI + XC UNIVERSITY OF LILLE - FRANCE + XC M. REDIVO ZAGLIA + XC UNIVERSITY OF PADOVA - ITALY + XC + XC REFERENCES: + XC + XC - TREATMENT OF NEAR-BREAKDOWN IN THE CGS ALGORITHMS + XC NUMERICAL ALGORITHMS 7 (1994) 33-73 + XC + XC+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ XC X SUBROUTINE GSOLVD (A, B, N, EPS, INDS) XC XC ... SPECIFICATIONS FOR ARGUMENTS XC X INTEGER INDS, N X DOUBLE PRECISION EPS X DOUBLE PRECISION A(1), B(2,1) XC XC ... SPECIFICATIONS FOR LOCAL VARIABLES XC X INTEGER I, IPIVOT, J, K, NN, NN1 X DOUBLE PRECISION TMP, PIVOT, DET XC XC ... EXECUTABLE STATEMENTS XC X INDS = 0 XC X IF (N .NE. 1) THEN XC XC ... TRIANGULARIZATION XC X DO 70 K = 1, N-1 XC XC ... SEARCH FOR THE PIVOT (PARTIAL PIVOTING) XC X PIVOT = 0.0D0 X DET = 1.0D0 X NN = N * (K - 1) X DO 10 I = K, N X TMP = DABS(A(I+NN)) X IF (TMP .GT. PIVOT) THEN X IPIVOT = I X PIVOT = TMP X END IF X 10 CONTINUE X DET = DET * PIVOT XC XC ... TEST FOR SINGULAR MATRIX XC X IF (DABS(PIVOT) .LE. EPS) THEN X INDS = 1 X RETURN X END IF XC XC ... EXCHANGE THE ROW K WITH THE ROW XC CONTAINING THE MAXIMUM PIVOT XC X DO 20 J = K, N X NN1 = N * (J - 1) X TMP = A(K+NN1) X A(K+NN1) = A(IPIVOT+NN1) X A(IPIVOT+NN1) = TMP X 20 CONTINUE X DO 30 J = 1, 2 X TMP = B(J,K) X B(J,K) = B(J,IPIVOT) X B(J,IPIVOT) = TMP X 30 CONTINUE XC XC ... APPLY THE ELEMENTS TRANSFORMATION XC X DO 60 I = K+1, N X IF (A(I+NN) .NE. 0.0D0) THEN X TMP = A(I+NN) / A(K+NN) X DO 40 J = K+1, N X NN1 = N * (J - 1) X A(I+NN1) = A(I+NN1) - TMP * A(K+NN1) X 40 CONTINUE X DO 50 J = 1, 2 X B(J,I) = B(J,I) - TMP * B(J,K) X 50 CONTINUE X END IF X 60 CONTINUE X 70 CONTINUE X END IF XC XC ... TEST FOR SINGULAR MATRIX XC (PIVOT OF THE LAST ROW) XC X DET = DET * A(N*N) X IF (DABS(DET) .LE. EPS) THEN X INDS = 1 X RETURN X END IF XC XC ... SOLVING THE TRIANGULAR SYSTEM XC FOR THE 2 RIGHT HAND SIDES XC X DO 100 K = 1, 2 X B(K,N) = B(K,N) / A(N*N) X IF (N .NE. 1) THEN X DO 90 I = N-1, 1, -1 X DO 80 J = I+1, N X B(K,I) = B(K,I) - A(I+N*(J-1)) * B(K,J) X 80 CONTINUE X B(K,I) = B(K,I) / A(I+N*(I-1)) X 90 CONTINUE X END IF X 100 CONTINUE X RETURN X END SHAR_EOF if test 7323 -ne "`wc -c gsolvd.f`" then echo shar: error transmitting gsolvd.f '(should have been 7323 characters)' fi echo shar: extracting matvec.f sed 's/^X//' << \SHAR_EOF > matvec.f XC+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ XC + XC SUBROUTINE NAME - MATVEC + XC + XC+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ XC + XC DESCRIPTION: + XC + XC COMPUTES THE PRODUCT BETWEEN A MATRIX (OR ITS TRANSPOSED) AND A + XC VECTOR. + XC THE VECTOR IS STORED AS A COLUMN OF THE ARRAY B. + XC THE RESULTING VECTOR IS PUT IN A PRESCRIBED COLUMN OF THE ARRAY C. + XC + XC USAGE: + XC CALL MATVEC (IP, A, B, IB, C, IC, IR, IFLAG) + XC + XC ARGUMENTS: + XC + XC + XC IP - NUMBER OF ELEMENTS TO BE CONSIDERED IN EACH VECTOR + XC STARTING FROM THE FIRST ONE. + XC + XC A - INPUT REAL MATRIX OF DIMENSION (IP,IP). + XC + XC B - INPUT REAL MATRIX CONTAINING A CERTAIN NUMBER OF COLUMN + XC VECTORS. ITS FIRST DIMENSION MUST BE IP. + XC + XC IB - INPUT COLUMN OF THE MATRIX B. SECOND VECTOR OF THE INNER + XC PRODUCT. + XC + XC C - OUTPUT REAL MATRIX CONTAINING A CERTAIN NUMBER OF COLUMN + XC VECTORS. ITS FIRST DIMENSION MUST BE IP. + XC + XC IC - COLUMN OF THE MATRIX C IN WHICH THE RESULTING VECTOR WILL + XC BE STORED. + XC + XC IR - INPUT ROWS DIMENSION EXACTLY AS SPECIFIED IN THE + XC DIMENSION STATEMENTS IN THE CALLING PROGRAM FOR THE + XC MATRIX B. + XC + XC IFLAG - IF IFLAG .EQ. 0 THE MATRIX A IS CONSIDERED + XC IF IFLAG .NE. 0 THE TRANSPOSED MATRIX A IS CONSIDERED + XC + XC REMARKS: + XC + XC - ALL THE REAL ARGUMENTS PASSED FROM THE CALLING PROGRAM MUST BE + XC IN DOUBLE PRECISION. + XC - IN THE CALLING PROCEDURE, IF THE MATRIX B (OR C) HAS ITS SECOND + XC DIMENSION WITH A LOWER BOUND NOT EQUAL TO 1, THEN THE VALUE IB = 1 + XC (OR IC = 1) CORRESPONDS TO ITS FIRST COLUMN AND NOT TO THE COLUMN + XC WHOSE INDEX IS 1. + XC - IN THE CALLING PROCEDURE THE MINIMAL DIMENSIONS FOR THE + XC MATRIX AND VECTOR ARGUMENTS (IR=IP) ARE: + XC A(IP,IP) + XC B(IP,*) + XC C(IP,*) + XC + XC AUTHORS: + XC + XC C. BREZINSKI AND H. SADOK + XC UNIVERSITY OF LILLE - FRANCE + XC M. REDIVO ZAGLIA + XC UNIVERSITY OF PADOVA - ITALY + XC + XC REFERENCES: + XC + XC - AVOIDING BREAKDOWN AND NEAR-BREAKDOWN IN LANCZOS TYPE ALGORITHMS, + XC NUMERICAL ALGORITHMS, 1(1991), PP. 261-284. + XC + XC - ADDENDUM TO "AVOIDING BREAKDOWN AND NEAR-BREAKDOWN IN LANCZOS TYPE + XC ALGORITHMS", NUMERICAL ALGORITHMS, 2(1992), PP. 133-136. + XC + XC - TREATMENT OF NEAR-BREAKDOWN IN THE CGS ALGORITHM, + XC NUMERICAL ALGORITHMS 7 (1994) 33-73 + XC+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ XC X SUBROUTINE MATVEC (IP, A, B, IB, C, IC, IR, IFLAG) XC XC ... SPECIFICATIONS FOR ARGUMENTS XC X INTEGER IB, IC, IFLAG, IP, IR X DOUBLE PRECISION A(IR,1), B(1), C(1) XC XC ... SPECIFICATIONS FOR LOCAL VARIABLES XC X DOUBLE PRECISION ACC X INTEGER I, J, IBSTAR, ICSTAR XC XC ... EXECUTABLE STATEMENTS XC X IBSTAR = (IB-1)*IR X ICSTAR = (IC-1)*IR X DO 20 J = 1, IP X ACC = 0.0D0 X DO 10 I = 1, IP X IF (IFLAG .EQ. 0) THEN X ACC = ACC + A(J,I) * B(IBSTAR+I) X ELSE X ACC = ACC + A(I,J) * B(IBSTAR+I) X END IF X 10 CONTINUE XC XC ... SET THE RESULT VALUE XC X C(ICSTAR+J) = ACC X 20 CONTINUE X RETURN X END SHAR_EOF if test 6964 -ne "`wc -c matvec.f`" then echo shar: error transmitting matvec.f '(should have been 6964 characters)' fi echo shar: extracting pinner.f sed 's/^X//' << \SHAR_EOF > pinner.f XC+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ XC + XC FUNCTION NAME - PINNER + XC + XC+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ XC + XC DESCRIPTION: + XC + XC DOUBLE PRECISION FUNCTION: + XC COMPUTES THE INNER PRODUCT OF TWO VECTORS. + XC THE DIMENSION OF THE FIRST VECTOR IS IR. THE SECOND VECTOR + XC IS STORED AS A COLUMN OF THE ARRAY B WHOSE FIRST DIMENSION IS IR. + XC + XC USAGE: + XC PINNER (IP, A, B, IB, IR) + XC + XC ARGUMENTS: + XC + XC IP - NUMBER OF ELEMENTS TO BE CONSIDERED IN EACH VECTOR + XC STARTING FROM THE FIRST ONE. + XC + XC A - INPUT REAL VECTOR (FIRST VECTOR OF THE INNER PRODUCT). + XC + XC B - INPUT REAL MATRIX CONTAINING A CERTAIN NUMBER OF COLUMN + XC VECTORS. + XC + XC IB - INPUT INTEGER DEFINING THE NUMBER OF THE COLUMN OF THE + XC MATRIX B WHICH IS THE SECOND VECTOR OF THE INNER PRODUCT. + XC + XC IR - INPUT ROWS DIMENSION EXACTLY AS SPECIFIED IN THE + XC DIMENSION STATEMENTS IN THE CALLING PROGRAM FOR THE + XC MATRIX B. + XC + XC REMARKS: + XC + XC - ALL THE REAL ARGUMENTS PASSED FROM THE CALLING PROGRAM MUST BE + XC IN DOUBLE PRECISION. + XC - IN THE CALLING PROCEDURE THE MINIMAL DIMENSIONS FOR THE + XC MATRIX AND VECTOR ARGUMENTS (IR=IP) ARE: + XC A(IP) + XC B(IP,*) + XC - IN THE CALLING PROCEDURE, IF THE MATRIX B HAS ITS SECOND DIMENSION + XC WITH A LOWER BOUND NOT EQUAL TO 1, THEN THE VALUE IB = 1 + XC CORRESPONDS TO ITS FIRST COLUMN AND NOT TO THE COLUMN WHOSE INDEX + XC IS 1. + XC + XC AUTHORS: + XC + XC C. BREZINSKI AND H. SADOK + XC UNIVERSITY OF LILLE - FRANCE + XC M. REDIVO ZAGLIA + XC UNIVERSITY OF PADOVA - ITALY + XC + XC REFERENCES: + XC + XC - AVOIDING BREAKDOWN AND NEAR-BREAKDOWN IN LANCZOS TYPE ALGORITHMS, + XC NUMERICAL ALGORITHMS, 1(1991), PP. 261-284. + XC + XC - ADDENDUM TO "AVOIDING BREAKDOWN AND NEAR-BREAKDOWN IN LANCZOS TYPE + XC ALGORITHMS", NUMERICAL ALGORITHMS, 2(1992), PP. 133-136. + XC + XC - TREATMENT OF NEAR-BREAKDOWN IN THE CGS ALGORITHM, + XC NUMERICAL ALGORITHMS 7 (1994) 33-73 + XC+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ XC X DOUBLE PRECISION FUNCTION PINNER (IP, A, B, IB, IR) XC XC ... SPECIFICATIONS FOR ARGUMENTS XC X DOUBLE PRECISION A(1), B(1) X INTEGER IB, IP, IR XC XC ... SPECIFICATIONS FOR LOCAL VARIABLES XC X DOUBLE PRECISION ACC X INTEGER I, IBSTAR XC XC ... EXECUTABLE STATEMENTS XC X IBSTAR = (IB-1)*IR X ACC = 0.0D0 X DO 10 I = 1, IP X ACC = ACC + A(I) * B(IBSTAR+I) X 10 CONTINUE XC XC ... SET THE RESULT VALUE XC X PINNER = ACC X RETURN X END SHAR_EOF if test 5838 -ne "`wc -c pinner.f`" then echo shar: error transmitting pinner.f '(should have been 5838 characters)' fi echo shar: extracting polmul.f sed 's/^X//' << \SHAR_EOF > polmul.f XC+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ XC + XC SUBROUTINE NAME - POLMUL + XC + XC+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ XC + XC DESCRIPTION: + XC + XC COMPUTES THE PRODUCT BETWEEN TWO POLYNOMIALS. + XC + XC USAGE: + XC CALL POLMUL (P1, IDP1, P2, IDP2, PRES, IER) + XC + XC ARGUMENTS: + XC + XC P1 - INPUT REAL VECTOR OF DIMENSION (0:IDP1) CONTAINING THE + XC COEFFICIENTS OF THE FIRST POLYNOMIAL, ORDERED FROM + XC SMALLEST TO LARGEST POWER. + XC + XC IDP1 - INPUT INTEGER VALUE. IT REPRESENTS THE DEGREE OF THE + XC FIRST POLYNOMIAL. + XC + XC P2 - INPUT REAL VECTOR OF DIMENSION (0:IDP2) CONTAINING THE + XC COEFFICIENTS OF THE SECOND POLYNOMIAL, ORDERED FROM + XC SMALLEST TO LARGEST POWER. + XC + XC IDP2 - INPUT INTEGER VALUE. IT REPRESENTS THE DEGREE OF THE + XC SECOND POLYNOMIAL. + XC + XC PRES - OUTPUT REAL VECTOR OF DIMENSION (0:IDP1+IDP2) CONTAINING + XC THE COEFFICIENTS OF THE RESULTANT POLYNOMIAL, ORDERED + XC FROM SMALLEST TO LARGEST POWER. + XC + XC IER - OUTPUT INDEX WARNING/ERROR. + XC IER = 2000 THE DEGREE IDP1 IS GREATER THAN THE DEGREE + XC IDP2. + XC + XC REMARKS: + XC + XC - ALL THE REAL ARGUMENTS PASSED FROM THE CALLING PROGRAM MUST BE + XC IN DOUBLE PRECISION. + XC - THE DEGREE OF THE FIRST POLYNOMIAL MUST BE LESS OR EQUAL THAN THE + XC DEGREE OF THE SECOND POLYNOMIAL. + XC - IN THE CALLING PROCEDURE THE DIMENSIONS FOR THE VECTOR ARGUMENTS + XC ARE: + XC P1(0:*) + XC P2(0:*) + XC PRES(0:*) + XC + XC AUTHORS: + XC + XC C. BREZINSKI + XC UNIVERSITY OF LILLE - FRANCE + XC M. REDIVO ZAGLIA + XC UNIVERSITY OF PADOVA - ITALY + XC + XC REFERENCE: + XC + XC - TREATMENT OF NEAR-BREAKDOWN IN THE CGS ALGORITHM + XC NUMERICAL ALGORITHMS 7 (1994) 33-73 + XC + XC+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ XC X SUBROUTINE POLMUL (P1, IDP1, P2, IDP2, PRES, IER) XC XC ... SPECIFICATIONS FOR ARGUMENTS XC X INTEGER IDP1, IDP2, IER X DOUBLE PRECISION P1(0:1), P2(0:1), PRES(0:1) XC XC ... SPECIFICATIONS FOR LOCAL VARIABLES XC X INTEGER I, I1, I2, IDPRES, J XC XC ... EXECUTABLE STATEMENTS XC X IF (IDP1 .GT. IDP2) THEN X IER = 2000 X RETURN X END IF XC X IDPRES = IDP1 + IDP2 XC XC ... COMPUTES THE COEFFICIENTS OF PRES XC X DO 20 I = 0, IDPRES X I1 = MAX0(0,I-IDP1) X I2 = MIN0(IDP2,I) X PRES(I) = 0.0D0 X DO 10 J = I1, I2 X PRES(I) = PRES(I) + P1(I-J) * P2(J) X 10 CONTINUE X 20 CONTINUE X RETURN X END SHAR_EOF if test 5795 -ne "`wc -c polmul.f`" then echo shar: error transmitting polmul.f '(should have been 5795 characters)' fi echo shar: extracting rxsumm.f sed 's/^X//' << \SHAR_EOF > rxsumm.f XC+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ XC + XC FUNCTION NAME - RXSUMM + XC + XC+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ XC + XC DESCRIPTION: + XC + XC DOUBLE PRECISION FUNCTION: + XC COMPUTES THE COMPONENT NR OF A VECTOR OBTAINED AS A LINEAR + XC COMBINATION, WITH THE COEFFICIENTS STORED IN THE VECTORS P1, P2 + XC AND P3, OF THE COLUMN VECTORS STORED IN V, W AND IN U. + XC + XC USAGE: + XC RXSUMM (P1, P2, P3, V, W, U, IR, NR, NK, MK, IFLAG) + XC + XC ARGUMENTS: + XC + XC P1 - INPUT REAL VECTOR WHICH CONTAINS THE COEFFICIENTS OF THE + XC POLYNOMIAL v(xi)*(xi*v(xi) - 2) (FOR THE COMPUTATION OF + XC THE NEW SOLUTION x) OR OF THE POLYNOMIAL (1-xi*v(xi))**2 + XC (FOR THE COMPUTATION OF THE NEW RESIDUAL r). + XC + XC P2 - INPUT REAL VECTOR WHICH CONTAINS THE COEFFICIENTS OF THE + XC POLYNOMIAL (1 - xi*v(xi)) * w(xi). + XC + XC P3 - INPUT REAL VECTOR WHICH CONTAINS THE COEFFICIENTS OF THE + XC POLYNOMIAL w(xi)**2. + XC + XC V - INPUT REAL MATRIX CONTAINING A CERTAIN NUMBER OF COLUMN + XC VECTORS. + XC + XC W - INPUT REAL MATRIX CONTAINING A CERTAIN NUMBER OF COLUMN + XC VECTORS. + XC + XC U - INPUT REAL MATRIX CONTAINING A CERTAIN NUMBER OF COLUMN + XC VECTORS. + XC + XC IR - INPUT ROWS DIMENSION EXACTLY AS SPECIFIED IN THE + XC DIMENSION STATEMENTS IN THE CALLING PROGRAM FOR THE + XC MATRICES V, W AND U. + XC + XC NR - INPUT INTEGER EQUAL TO THE COMPONENT WHICH HAS TO BE + XC USED AND COMPUTED. + XC + XC NK - INPUT INTEGER EQUAL TO THE DIMENSION OF THE PREVIOUS + XC MATRIX OF THE SYSTEM. + XC + XC MK - INPUT INTEGER EQUAL TO THE DIMENSION OF THE NEW JUMP. + XC + XC IFLAG - INPUT INTEGER FLAG. + XC IF IFLAG = 0 THE NEW SOLUTION x WILL BE COMPUTED. + XC IF IFLAG = 1 THE NEW RESIDUAL r WILL BE COMPUTED. + XC + XC REMARKS: + XC + XC - ALL THE REAL ARGUMENTS PASSED FROM THE CALLING PROGRAM MUST BE + XC IN DOUBLE PRECISION. + XC - IN THE CALLING PROCEDURE THE DIMENSIONS FOR THE ARRAY ARGUMENTS + XC ARE: + XC P1(0:*) + XC P2(0:*) + XC P3(0:*) + XC V(IR,0:*) + XC W(IR,0:*) + XC U(IR,0:*) + XC + XC AUTHORS: + XC + XC C. BREZINSKI + XC UNIVERSITY OF LILLE - FRANCE + XC M. REDIVO ZAGLIA + XC UNIVERSITY OF PADOVA - ITALY + XC + XC REFERENCE: + XC + XC - TREATMENT OF NEAR-BREAKDOWN IN THE CGS ALGORITHM + XC NUMERICAL ALGORITHMS 7 (1994) 33-73 + XC + XC+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ XC X DOUBLE PRECISION FUNCTION RXSUMM (P1, P2, P3, V, W, U, IR, NR, X * NK, MK, IFLAG) XC XC ... SPECIFICATIONS FOR ARGUMENTS XC X INTEGER IR, NK, NR, MK, IFLAG X DOUBLE PRECISION P1(0:1), P2(0:1), P3(0:1), V(IR,0:1), W(IR,0:1), X * U(IR,0:1) XC XC ... SPECIFICATIONS FOR LOCAL VARIABLES XC X DOUBLE PRECISION ACC X INTEGER I, IFL XC XC ... EXECUTABLE STATEMENTS XC XC XC ... CASE MK = 1 XC X IF (MK .EQ. 1) THEN X IF (IFLAG .EQ. 0) THEN X ACC = - 2.0D0 * P2(0) * U(NR,0) + P3(0) * V(NR,1) X ELSE X ACC = W(NR,0) - 2.0D0 * P2(0) * U(NR,1) + P3(0) * V(NR,2) X END IF X RXSUMM = ACC X RETURN X END IF XC X ACC = 0.0D0 XC XC ... CASE MK <= NK XC X IF (MK .LE. NK) THEN X DO 10 I = 0, 2*MK - 2 X IFL = I + IFLAG X ACC = ACC - 2.0D0*P2(I)*U(NR,IFL) + P3(I)*V(NR,IFL+1) X 10 CONTINUE X DO 20 I = 0, 2*MK - 3 + IFLAG X ACC = ACC + P1(I) * W(NR,I) X 20 CONTINUE XC XC ... CASE MK > NK XC X ELSE X DO 30 I = 0, 2*MK - 2 X ACC = ACC + P3(I) * V(NR,I+1+IFLAG) X 30 CONTINUE X DO 40 I = 0, NK + MK - 1 X ACC = ACC - 2.0D0 * P2(I) * U(NR,I+IFLAG) X 40 CONTINUE X IF ((IFLAG .EQ. 0 .AND. NK .NE. 0) .OR. IFLAG .EQ. 1) THEN X DO 50 I = 0, 2*NK - 1 + IFLAG X ACC = ACC + P1(I) * W(NR,I) X 50 CONTINUE X END IF X END IF XC XC ... SET THE RESULT VALUE XC X RXSUMM = ACC X RETURN X END SHAR_EOF if test 8229 -ne "`wc -c rxsumm.f`" then echo shar: error transmitting rxsumm.f '(should have been 8229 characters)' fi echo shar: extracting solshf.f sed 's/^X//' << \SHAR_EOF > solshf.f XC+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ XC + XC SUBROUTINE NAME - SOLSHF + XC + XC+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ XC + XC DESCRIPTION: + XC + XC COMPUTES THE SOLUTIONS OF THE AUXILIARY SYSTEMS, THAT IS THE + XC ALPHA , ALPHA' , BETA AND BETA'. + XC i i i i + XC + XC USAGE: + XC + XC CALL SOLSHF (LMAT, RMAT, C, D, P1, NK, MK, EPS, INDS) + XC + XC ARGUMENTS: + XC + XC LMAT - WORKING REAL VECTOR TO STORE THE COEFFICIENTS OF THE + XC AUXILIARY SYSTEM. + XC + XC RMAT - OUTPUT REAL MATRIX OF DIMENSION (2,0:*). + XC IF THE SYSTEM IS NON SINGULAR, IT CONTAINS IN OUTPUT: + XC ROW 1 THE BETA AND THE BETA'. + XC i i + XC ROW 2 THE ALPHA AND THE ALPHA' . + XC i i + XC + XC C - INPUT REAL VECTOR CONTAINING THE c 'S. + XC i + XC + XC D - INPUT REAL VECTOR CONTAINING THE d 'S. + XC i + XC + XC P1 - INPUT REAL VECTOR CONTAINING THE COEFFICIENTS OF THE + XC (1) + XC POLYNOMIAL P OF DEGREE NK. + XC k + XC + XC NK - INPUT INTEGER EQUAL TO THE DIMENSION OF THE PREVIOUS + XC MATRIX OF THE SYSTEM. + XC + XC MK - INPUT INTEGER EQUAL TO THE LENGTH OF THE NEW JUMP. + XC + XC EPS - INPUT REAL VALUE USED FOR TESTING THE PIVOTS IN GAUSSIAN + XC ELIMINATION. + XC IF DABS(X) .LE. EPS, THEN X IS CONSIDERED TO BE ZERO. + XC THE SUBROUTINE DOES NOT CONTROL WHETHER OR NOT EPS IS + XC A NEGATIVE OR ZERO REAL NUMBER. + XC + XC INDS - OUTPUT INTEGER VALUE. + XC IF INDS = 0 THEN THE SYSTEM IS NON-SINGULAR. + XC IF INDS = 1 THEN THE SYSTEM IS SINGULAR. + XC + XC EXTERNAL MODULES: + XC + XC - DOUBLE PRECISION FUNCTION FH + XC - SUBROUTINES GSOLVD, STOMHF, STORHF + XC + XC REMARKS: + XC + XC - ALL THE REAL ARGUMENTS PASSED FROM THE CALLING PROGRAM MUST BE + XC IN DOUBLE PRECISION. + XC - IN THE CALLING PROCEDURE THE DIMENSIONS FOR THE ARGUMENTS ARE: + XC LMAT(*) + XC RMAT(2,0:*) + XC C(0:*) + XC D(0:*) + XC P1(0:*) + XC + XC AUTHORS: + XC + XC C. BREZINSKI + XC UNIVERSITY OF LILLE - FRANCE + XC M. REDIVO ZAGLIA + XC UNIVERSITY OF PADOVA - ITALY + XC + XC REFERENCES: + XC + XC - TREATMENT OF NEAR-BREAKDOWN IN THE CGS ALGORITHMS + XC NUMERICAL ALGORITHMS 7 (1994) 33-73 + XC + XC+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ XC X SUBROUTINE SOLSHF (LMAT, RMAT, C, D, P1, NK, MK, EPS, INDS) XC XC ... SPECIFICATIONS FOR ARGUMENTS XC X INTEGER INDS, MK, NK X DOUBLE PRECISION EPS X DOUBLE PRECISION LMAT(1), RMAT(2,0:1), C(0:1), D(0:1), P1(0:1) XC XC ... SPECIFICATIONS FOR EXTERNAL MODULES XC X DOUBLE PRECISION FH XC XC ... SPECIFICATIONS FOR LOCAL VARIABLES XC X INTEGER IFLAG, NN XC XC ... EXECUTABLE STATEMENTS XC XC XC ... CASE MK = 1 XC X IF (MK .EQ. 1) THEN X INDS = 0 XC XC ... COMPUTES BETA(0) XC X RMAT(1,0) = D(0)/C(0) XC XC ... COMPUTES ALPHA(0) (CAS MK > NK = 0) XC X RMAT(2,0) = -C(1)/C(0) XC X IF (MK .LE. NK) THEN XC XC ... COMPUTES ALPHA'(0) XC X RMAT(2,1) = -C(0)/D(0) XC XC ... COMPUTES ALPHA(0) + P1(NK-1) XC (CAS MK <= NK) XC X RMAT(2,0) = (-FH(0,1,C,P1,NK,0) - D(1) * RMAT(2,1)) X * / C(0) + P1(NK-1) X END IF X RETURN X END IF XC XC ... CHOICE FOR THE SYSTEM XC X IF (MK .LE. NK) THEN X NN = MK - 1 X IFLAG = 1 X ELSE X NN = NK X IFLAG = 2 X END IF XC XC ... COMPUTATION OF BETA , BETA' AND OF XC i i XC ALPHA , ALPHA' XC i i XC XC ... STORE THE COEFFICIENTS AND THE RIGHT HAND XC SIDES XC X CALL STOMHF (LMAT, C, D, P1, NK, MK, IFLAG) X CALL STORHF (RMAT, C, D, P1, NK, MK, IFLAG) XC XC ... SOLVE THE SYSTEM XC X CALL GSOLVD (LMAT, RMAT, NN+MK, EPS, INDS) XC XC ... IF NON SINGULAR SYSTEM, STORE THE XC ADDITIONAL SOLUTION XC X IF (INDS .EQ. 0 .AND. IFLAG .EQ. 1) RMAT(2,2*MK-1) = -C(0)/D(0) XC X RETURN X END SHAR_EOF if test 8787 -ne "`wc -c solshf.f`" then echo shar: error transmitting solshf.f '(should have been 8787 characters)' fi echo shar: extracting ssumm.f sed 's/^X//' << \SHAR_EOF > ssumm.f XC+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ XC + XC FUNCTION NAME - SSUMM + XC + XC+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ XC + XC DESCRIPTION: + XC + XC DOUBLE PRECISION FUNCTION: + XC COMPUTES THE COMPONENT NR OF A VECTOR OBTAINED AS A LINEAR + XC COMBINATION, WITH THE COEFFICIENTS STORED IN THE VECTORS P1, P2, + XC P3 AND P4, OF THE COLUMN VECTORS STORED IN V, W AND IN U. + XC + XC USAGE: + XC SSUMM (P1, P2, P3, P4, V, W, U, IR, NR, NK, MK) + XC + XC ARGUMENTS: + XC + XC P1 - INPUT REAL VECTOR WHICH CONTAINS THE COEFFICIENTS OF THE + XC POLYNOMIAL t(xi) * (1 - xi*v(xi)). + XC + XC P2 - INPUT REAL VECTOR WHICH CONTAINS THE COEFFICIENTS OF THE + XC POLYNOMIAL (1 - xi*v(xi)) * q(xi). + XC + XC P3 - INPUT REAL VECTOR WHICH CONTAINS THE COEFFICIENTS OF THE + XC POLYNOMIAL t(xi) * w(xi). + XC + XC P4 - INPUT REAL VECTOR WHICH CONTAINS THE COEFFICIENTS OF THE + XC POLYNOMIAL w(xi) * q(xi). + XC + XC V - INPUT REAL MATRIX CONTAINING A CERTAIN NUMBER OF COLUMN + XC VECTORS. + XC + XC W - INPUT REAL MATRIX CONTAINING A CERTAIN NUMBER OF COLUMN + XC VECTORS. + XC + XC U - INPUT REAL MATRIX CONTAINING A CERTAIN NUMBER OF COLUMN + XC VECTORS. + XC + XC IR - INPUT ROWS DIMENSION EXACTLY AS SPECIFIED IN THE + XC DIMENSION STATEMENTS IN THE CALLING PROGRAM FOR THE + XC MATRICES V, W AND U. + XC + XC NR - INPUT INTEGER EQUAL TO THE COMPONENT WHICH HAS TO BE + XC USED AND COMPUTED. + XC + XC NK - INPUT INTEGER EQUAL TO THE DIMENSION OF THE PREVIOUS + XC MATRIX OF THE SYSTEM. + XC + XC MK - INPUT INTEGER EQUAL TO THE DIMENSION OF THE NEW JUMP. + XC + XC REMARKS: + XC + XC - ALL THE REAL ARGUMENTS PASSED FROM THE CALLING PROGRAM MUST BE + XC IN DOUBLE PRECISION. + XC - IN THE CALLING PROCEDURE THE DIMENSIONS FOR THE ARRAY ARGUMENTS + XC ARE: + XC P1(0:*) + XC P2(0:*) + XC P3(0:*) + XC P4(0:*) + XC V(IR,0:*) + XC W(IR,0:*) + XC U(IR,0:*) + XC + XC AUTHORS: + XC + XC C. BREZINSKI + XC UNIVERSITY OF LILLE - FRANCE + XC M. REDIVO ZAGLIA + XC UNIVERSITY OF PADOVA - ITALY + XC + XC REFERENCE: + XC + XC - TREATMENT OF NEAR-BREAKDOWN IN THE CGS ALGORITHM + XC NUMERICAL ALGORITHMS 7 (1994) 33-73 + XC + XC+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ XC X DOUBLE PRECISION FUNCTION SSUMM (P1, P2, P3, P4, V, W, U, IR, X * NR, NK, MK) XC XC ... SPECIFICATIONS FOR ARGUMENTS XC X INTEGER IR, NK, NR, MK X DOUBLE PRECISION P1(0:1), P2(0:1), P3(0:1), P4(0:1), X * V(IR,0:1), W(IR,0:1), U(IR,0:1) XC XC ... SPECIFICATIONS FOR LOCAL VARIABLES XC X DOUBLE PRECISION ACC X INTEGER I XC XC ... EXECUTABLE STATEMENTS XC XC XC ... CASE MK = 1 XC X IF (MK .EQ. 1) THEN X ACC = P2(0) * U(NR,0) + U(NR,1) - P4(0) * V(NR,1) - X * P4(1) * V(NR,2) X IF (MK .LE. NK) X * ACC = ACC + P1(0) * W(NR,0) - P3(0) * U(NR,1) X SSUMM = ACC X RETURN X END IF XC XC ... BOTH CASES MK <= NK AND MK > NK XC X ACC = 0.0D0 X DO 10 I = 0, 2*MK - 1 X ACC = ACC - P4(I) * V(NR,I+1) X 10 CONTINUE XC XC ... CASE MK <= NK XC X IF (MK .LE. NK) THEN X DO 20 I = 0, 2*MK - 2 X ACC = ACC + P1(I) * W(NR,I) + P2(I) * U(NR,I) - X * P3(I) * U(NR,I+1) X 20 CONTINUE X ACC = ACC + P2(2*MK-1) * U(NR,2*MK-1) XC XC ... CASE MK > NK XC X ELSE X DO 30 I = 0, NK + MK X ACC = ACC + P2(I) * U(NR,I) X 30 CONTINUE X IF (NK .NE. 0) THEN X DO 40 I = 0, NK + MK - 2 X ACC = ACC - P3(I) * U(NR,I+1) X 40 CONTINUE X DO 50 I = 0, 2*NK - 1 X ACC = ACC + P1(I) * W(NR,I) X 50 CONTINUE X END IF X END IF XC XC ... SET THE RESULT VALUE XC X SSUMM = ACC X RETURN X END SHAR_EOF if test 8089 -ne "`wc -c ssumm.f`" then echo shar: error transmitting ssumm.f '(should have been 8089 characters)' fi echo shar: extracting stomhf.f sed 's/^X//' << \SHAR_EOF > stomhf.f XC+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ XC + XC SUBROUTINE NAME - STOMHF + XC + XC+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ XC + XC DESCRIPTION: + XC + XC STORES IN THE VECTOR LMAT THE COEFFICIENTS OF THE SYSTEM TO BE + XC SOLVED FOR THE COMPUTATION OF THE ALPHA , ALPHA', BETA , BETA' . + XC i i i i + XC + XC USAGE: + XC CALL STOMAT (LMAT, C, D, P1, NK, MK, IFLAG) + XC + XC ARGUMENTS: + XC + XC LMAT - OUTPUT REAL VECTOR WHICH CONTAINS THE COEFFICIENTS OF + XC THE AUXILIARY SYSTEM. + XC + XC C - INPUT REAL VECTOR CONTAINING THE c 'S. + XC i + XC + XC D - INPUT REAL VECTOR CONTAINING THE d 'S. + XC i + XC + XC P1 - INPUT REAL VECTOR CONTAINING THE COEFFICIENTS OF THE + XC (1) + XC POLYNOMIAL P OF DEGREE NK. + XC k + XC + XC NK - INPUT INTEGER EQUAL TO THE DIMENSION OF THE PREVIOUS + XC MATRIX OF THE SYSTEM. + XC + XC MK - INPUT INTEGER EQUAL TO THE DIMENSION OF THE NEW JUMP. + XC + XC IFLAG - INPUT INTEGER FLAG. + XC IF IFLAG = 1 THE CASE MK <= NK IS CONSIDERED. + XC IF IFLAG = 2 THE CASE MK > NK IS CONSIDERED. + XC + XC EXTERNAL MODULES: + XC + XC - DOUBLE PRECISION FUNCTION FH + XC + XC REMARKS: + XC + XC - ALL THE REAL ARGUMENTS PASSED FROM THE CALLING PROGRAM MUST BE + XC IN DOUBLE PRECISION. + XC - IN THE CALLING PROCEDURE THE DIMENSIONS FOR THE VECTOR ARGUMENTS + XC ARE: + XC LMAT(*) + XC C(0:*) + XC D(0:*) + XC P1(0:*) + XC + XC AUTHORS: + XC + XC C. BREZINSKI + XC UNIVERSITY OF LILLE - FRANCE + XC M. REDIVO ZAGLIA + XC UNIVERSITY OF PADOVA - ITALY + XC + XC REFERENCE: + XC + XC - TREATMENT OF NEAR-BREAKDOWN IN THE CGS ALGORITHM + XC NUMERICAL ALGORITHMS 7 (1994) 33-73 + XC + XC+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ XC X SUBROUTINE STOMHF (LMAT, C, D, P1, NK, MK, IFLAG) XC XC ... SPECIFICATIONS FOR ARGUMENTS XC X INTEGER IFLAG, NK, MK X DOUBLE PRECISION LMAT(1), C(0:1), D(0:1), P1(0:1) XC XC ... SPECIFICATIONS FOR LOCAL VARIABLES XC X INTEGER ICOL, IROW, NI, NN, NN2, NNM XC XC ... SPECIFICATIONS FOR EXTERNAL FUNCTIONS XC X DOUBLE PRECISION FH XC XC ... EXECUTABLE STATEMENTS XC XC XC ... CASE MK <= NK XC X IF (IFLAG .EQ. 1) THEN X NN = MK - 1 X ELSE XC XC ... CASE MK > NK XC X NN = NK X END IF XC XC ... COMPUTE THE DIMENSION OF THE SYSTEM XC X NNM = NN + MK XC XC ... CLEAR THE ARRAY COMPONENTS XC X DO 10 IROW = 1, NNM * NNM X LMAT(IROW) = 0.0D0 X 10 CONTINUE XC XC ... BOTH CASES: MK <= NK AND MK > NK XC X IF (NK .NE. 0) THEN X DO 30 ICOL = NN*2, 2, -2 X NI = NN - ICOL/2 X NN2 = NNM * ICOL X DO 20 IROW = NI, NI+NN-1 X LMAT(NN2-IROW) = D(IROW-NI) X LMAT(NN2+NNM-IROW) = C(IROW-NI) X 20 CONTINUE X 30 CONTINUE X END IF X DO 50 IROW = MK-1, 0, -1 X NN2 = MK - IROW X DO 40 ICOL = 0, NN*2, 2 X NI = ICOL/2 X LMAT(NN2+NNM*ICOL) = FH(IROW,NI,C,P1,NK,0) X IF (ICOL .NE. NN*2) THEN X LMAT(NN2+NNM*(ICOL+1)) = FH(IROW,NI,D,P1,NK,1) X END IF X 40 CONTINUE X 50 CONTINUE XC XC ... CASE MK > NK XC X IF (IFLAG .EQ. 2) THEN X IF (NK .NE. 0) THEN X DO 70 ICOL = 1, MK-NN-1 X NN2 = NNM * (NN*2 + ICOL + 1) X DO 60 IROW = 0, NN-1 X LMAT(NN2-IROW) = C(IROW+ICOL) X 60 CONTINUE X 70 CONTINUE X END IF X DO 90 IROW = MK-1, 0, -1 X NN2 = NNM*NN*2 + MK - IROW X DO 80 ICOL= 1, MK-NN-1 X LMAT(NN2+NNM*ICOL) = FH(IROW,NN+ICOL,C,P1,NK,0) X 80 CONTINUE X 90 CONTINUE X END IF X RETURN X END SHAR_EOF if test 7645 -ne "`wc -c stomhf.f`" then echo shar: error transmitting stomhf.f '(should have been 7645 characters)' fi echo shar: extracting storhf.f sed 's/^X//' << \SHAR_EOF > storhf.f XC+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ XC + XC SUBROUTINE NAME - STORHF + XC + XC+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ XC + XC DESCRIPTION: + XC + XC STORES IN THE ARRAY RMAT THE RIGHT HAND SIDES OF THE SYSTEM TO BE + XC SOLVED FOR THE COMPUTATION OF THE ALPHA , ALPHA', BETA , BETA' . + XC i i i i + XC + XC USAGE: + XC CALL STORHF (RMAT, C, D, P1, NK, MK, IFLAG) + XC + XC ARGUMENTS: + XC + XC RMAT - OUTPUT REAL MATRIX OF DIMENSION (2,0:*) WHICH CONTAINS + XC THE 2 RIGHT HAND SIDES OF THE SYSTEM. + XC + XC C - INPUT REAL VECTOR CONTAINING THE c 'S. + XC i + XC + XC D - INPUT REAL VECTOR CONTAINING THE d 'S. + XC i + XC + XC P1 - INPUT REAL VECTOR CONTAINING THE COEFFICIENTS OF THE + XC (1) + XC POLYNOMIAL P OF DEGREE NK. + XC k + XC + XC NK - INPUT INTEGER EQUAL TO THE DIMENSION OF THE PREVIOUS + XC MATRIX OF THE SYSTEM. + XC + XC MK - INPUT INTEGER EQUAL TO THE DIMENSION OF THE NEW JUMP. + XC + XC IFLAG - INPUT INTEGER FLAG. + XC IF IFLAG = 1 THE CASE MK <= NK IS CONSIDERED. + XC IF IFLAG = 2 THE CASE MK > NK IS CONSIDERED. + XC + XC EXTERNAL MODULES: + XC + XC - DOUBLE PRECISION FUNCTION FH + XC + XC REMARKS: + XC + XC - ALL THE REAL ARGUMENTS PASSED FROM THE CALLING PROGRAM MUST BE + XC IN DOUBLE PRECISION. + XC - IN THE CALLING PROCEDURE THE DIMENSIONS FOR THE MATRIX AND VECTOR + XC ARGUMENTS ARE: + XC RMAT(2,0:*) + XC C(0:*) + XC D(0:*) + XC P1(0:*) + XC + XC AUTHORS: + XC + XC C. BREZINSKI + XC UNIVERSITY OF LILLE - FRANCE + XC M. REDIVO ZAGLIA + XC UNIVERSITY OF PADOVA - ITALY + XC + XC REFERENCE: + XC + XC - TREATMENT OF NEAR-BREAKDOWN IN THE CGS ALGORITHM + XC NUMERICAL ALGORITHMS 7 (1994) 33-73 + XC + XC+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ XC X SUBROUTINE STORHF (RMAT, C, D, P1, NK, MK, IFLAG) XC XC ... SPECIFICATIONS FOR ARGUMENTS XC X INTEGER IFLAG, NK, MK X DOUBLE PRECISION RMAT(2,0:1), C(0:1), D(0:1), P1(0:1) XC XC ... SPECIFICATIONS FOR LOCAL VARIABLES XC X INTEGER IROW, ICOL, NNM, NN2 X DOUBLE PRECISION CONST XC XC ... SPECIFICATIONS FOR EXTERNAL FUNCTIONS XC X DOUBLE PRECISION FH XC XC ... EXECUTABLE STATEMENTS XC XC XC ... COMPUTE THE MAXIMUM INDEX OF THE XC COMPONENTS IN THE ARRAY XC XC ... CASE MK <= NK XC X IF (IFLAG .EQ. 1) THEN X NNM = 2*(MK-1) X ELSE XC XC ... CASE MK > NK XC X NNM = NK + MK -1 X END IF XC XC ... CLEAR THE ARRAY COMPONENTS XC X DO 20 ICOL = 0, NNM X DO 10 IROW = 1, 2 X RMAT(IROW,ICOL) = 0.0D0 X 10 CONTINUE X 20 CONTINUE XC XC ... STORES THE RIGHT HAND SIDE FOR THE XC SYSTEM THAT COMPUTES THE BETA AND BETA' XC i i XC X IROW = 1 XC XC ... BOTH CASES: MK <= NK AND MK > NK XC X DO 30 ICOL = MK-1, 0, -1 X RMAT(IROW,MK-1-ICOL) = D(ICOL) X 30 CONTINUE XC XC ... STORES THE RIGHT HAND SIDE FOR THE XC SYSTEM THAT COMPUTES THE ALPHA AND ALPHA' XC i i XC X IROW = 2 XC XC ... CASE MK <= NK XC X IF (IFLAG .EQ. 1) CONST = -C(0)/D(0) XC XC ... BOTH CASES: MK <= NK AND MK > NK XC X IF (NK .NE. 0) THEN X DO 40 ICOL = MK, NNM X NN2 = 2*MK-1-ICOL X RMAT(IROW,ICOL) = - C(NN2) XC XC ... CASE MK <= NK XC X IF (IFLAG .EQ. 1) X * RMAT(IROW,ICOL) = RMAT(IROW,ICOL) - CONST * D(NN2) X 40 CONTINUE X END IF XC XC XC ... BOTH CASES: MK <= NK AND MK > NK XC X DO 50 ICOL = 0, MK-1 X NN2 = MK-1-ICOL X RMAT(IROW,ICOL) = - FH(NN2,MK,C,P1,NK,0) XC XC ... CASE MK <= NK XC X IF (IFLAG .EQ. 1) X * RMAT(IROW,ICOL) = RMAT(IROW,ICOL)-CONST*FH(NN2,MK-1,D,P1,NK,1) X 50 CONTINUE X RETURN X END SHAR_EOF if test 7912 -ne "`wc -c storhf.f`" then echo shar: error transmitting storhf.f '(should have been 7912 characters)' fi echo shar: extracting sunorm.f sed 's/^X//' << \SHAR_EOF > sunorm.f XC+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ XC + XC FUNCTION NAME - SUNORM + XC + XC+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ XC + XC DESCRIPTION: + XC + XC DOUBLE PRECISION FUNCTION: + XC COMPUTES THE MAXIMUM NORM OF A VECTOR. + XC + XC USAGE: + XC SUNORM (IP, VEC) + XC + XC ARGUMENTS: + XC + XC IP - INPUT DIMENSION OF THE VECTOR SPACE (NUMBER OF + XC ELEMENTS OF THE VECTOR TO BE CONSIDERED). + XC + XC VEC - INPUT REAL VECTOR OF DIMENSION IR >= IP. + XC + XC REMARKS: + XC + XC - THE REAL VECTOR VEC, PASSED FROM THE CALLING PROGRAM, MUST BE + XC IN DOUBLE PRECISION. + XC - IN THE CALLING PROCEDURE THE MINIMAL DIMENSION FOR THE + XC VECTOR ARGUMENT (IR=IP) IS: + XC VEC(IP) + XC + XC AUTHORS: + XC + XC C. BREZINSKI + XC UNIVERSITY OF LILLE - FRANCE + XC M. REDIVO ZAGLIA + XC UNIVERSITY OF PADOVA - ITALY + XC + XC REFERENCE: + XC + XC - TREATMENT OF NEAR-BREAKDOWN IN THE CGS ALGORITHM + XC NUMERICAL ALGORITHMS 7 (1994) 33-73 + XC + XC+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ XC X DOUBLE PRECISION FUNCTION SUNORM (IP, VEC) XC XC ... SPECIFICATIONS FOR ARGUMENTS XC X DOUBLE PRECISION VEC(1) X INTEGER IP XC XC ... SPECIFICATIONS FOR LOCAL VARIABLES XC X DOUBLE PRECISION ANORM, AMAXN X INTEGER I XC XC ... EXECUTABLE STATEMENTS XC X AMAXN = 0.0D0 X DO 10 I = 1, IP X ANORM = DABS(VEC(I)) X IF (ANORM .GT. AMAXN) AMAXN = ANORM X 10 CONTINUE XC XC ... SET THE RESULT VALUE XC X SUNORM = AMAXN X RETURN X END SHAR_EOF if test 4047 -ne "`wc -c sunorm.f`" then echo shar: error transmitting sunorm.f '(should have been 4047 characters)' fi echo shar: extracting zsumm.f sed 's/^X//' << \SHAR_EOF > zsumm.f XC+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ XC + XC FUNCTION NAME - ZSUMM + XC + XC+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ XC + XC DESCRIPTION: + XC + XC DOUBLE PRECISION FUNCTION: + XC COMPUTES THE COMPONENT NR OF A VECTOR OBTAINED AS A LINEAR + XC COMBINATION, WITH THE COEFFICIENTS STORED IN THE VECTORS P1, P2 + XC AND P3, OF THE COLUMN VECTORS STORED IN V, W AND IN U. + XC + XC USAGE: + XC ZSUMM (P1, P2, P3, V, W, U, IR, NR, NK, MK) + XC + XC ARGUMENTS: + XC + XC P1 - INPUT REAL VECTOR WHICH CONTAINS THE COEFFICIENTS OF THE + XC POLYNOMIAL t(xi)**2. + XC + XC P2 - INPUT REAL VECTOR WHICH CONTAINS THE COEFFICIENTS OF THE + XC POLYNOMIAL t(xi) * q(xi). + XC + XC P3 - INPUT REAL VECTOR WHICH CONTAINS THE COEFFICIENTS OF THE + XC POLYNOMIAL q(xi)**2. + XC + XC V - INPUT REAL MATRIX CONTAINING A CERTAIN NUMBER OF COLUMN + XC VECTORS. + XC + XC W - INPUT REAL MATRIX CONTAINING A CERTAIN NUMBER OF COLUMN + XC VECTORS. + XC + XC U - INPUT REAL MATRIX CONTAINING A CERTAIN NUMBER OF COLUMN + XC VECTORS. + XC + XC IR - INPUT ROWS DIMENSION EXACTLY AS SPECIFIED IN THE + XC DIMENSION STATEMENTS IN THE CALLING PROGRAM FOR THE + XC MATRICES V, W AND U. + XC + XC NR - INPUT INTEGER EQUAL TO THE COMPONENT WHICH HAS TO BE + XC USED AND COMPUTED. + XC + XC NK - INPUT INTEGER EQUAL TO THE DIMENSION OF THE PREVIOUS + XC MATRIX OF THE SYSTEM. + XC + XC MK - INPUT INTEGER EQUAL TO THE DIMENSION OF THE NEW JUMP. + XC + XC REMARKS: + XC + XC - ALL THE REAL ARGUMENTS PASSED FROM THE CALLING PROGRAM MUST BE + XC IN DOUBLE PRECISION. + XC - IN THE CALLING PROCEDURE THE DIMENSIONS FOR THE ARRAY ARGUMENTS + XC ARE: + XC P1(0:*) + XC P2(0:*) + XC P3(0:*) + XC V(IR,0:*) + XC W(IR,0:*) + XC U(IR,0:*) + XC + XC AUTHORS: + XC + XC C. BREZINSKI + XC UNIVERSITY OF LILLE - FRANCE + XC M. REDIVO ZAGLIA + XC UNIVERSITY OF PADOVA - ITALY + XC + XC REFERENCE: + XC + XC - TREATMENT OF NEAR-BREAKDOWN IN THE CGS ALGORITHM + XC NUMERICAL ALGORITHMS 7 (1994) 33-73 + XC + XC+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ XC X DOUBLE PRECISION FUNCTION ZSUMM (P1, P2, P3, V, W, U, IR, NR, X * NK, MK) XC XC ... SPECIFICATIONS FOR ARGUMENTS XC X INTEGER IR, NK, NR, MK X DOUBLE PRECISION P1(0:1), P2(0:1), P3(0:2), V(IR,0:1), W(IR,0:1), X * U(IR,0:1) XC XC ... SPECIFICATIONS FOR LOCAL VARIABLES XC X DOUBLE PRECISION ACC X INTEGER I XC XC ... EXECUTABLE STATEMENTS XC XC XC ... CASE MK = 1 XC X IF (MK .EQ. 1) THEN X ACC = P3(0)*V(NR,0) + P3(1)*V(NR,1) + P3(2)*V(NR,2) X IF (MK .LE. NK) X * ACC = ACC + 2.0D0 * (P2(0)*U(NR,0) + P2(1)*U(NR,1)) X * + P1(0) * W(NR,0) X ZSUMM = ACC X RETURN X END IF XC X ACC = 0.0D0 XC XC ... BOTH CASES MK <= NK AND MK > NK XC X DO 10 I = 0, 2*MK X ACC = ACC + P3(I) * V(NR,I) X 10 CONTINUE XC XC ... CASE MK <= NK XC X IF (MK .LE. NK) THEN X DO 20 I = 0, 2*MK - 2 X ACC = ACC + P1(I) * W(NR,I) + 2.0D0 * P2(I) * U(NR,I) X 20 CONTINUE X ACC = ACC + 2.0D0 * P2(2*MK-1) * U(NR,2*MK-1) XC XC ... CASE MK > NK XC X ELSE IF (NK .NE. 0) THEN X DO 30 I = 0, 2*NK - 2 X ACC = ACC + P1(I) * W(NR,I) X 30 CONTINUE X DO 40 I = 0, NK + MK - 1 X ACC = ACC + 2.0D0 * P2(I) * U(NR,I) X 40 CONTINUE X END IF XC XC ... SET THE RESULT VALUE XC X ZSUMM = ACC X RETURN X END SHAR_EOF if test 7603 -ne "`wc -c zsumm.f`" then echo shar: error transmitting zsumm.f '(should have been 7603 characters)' fi # End of shell archive exit 0