?? dsrc2c.f90
字號:
IN = LOOP-1 IF (MOD(IN,2).EQ.1) GO TO 230! ! ... CODE FOR THE EVEN ITERATIONS. ! ! U = U(IN) ! WKSP(IB1) = U(IN-1) ! CALL ITJSI (N,IA,JA,A,RHS,U,WKSP(IB1),WKSP(IB2),ICNT) ! IF (HALT) GO TO 270 GO TO 240! ! ... CODE FOR THE ODD ITERATIONS. ! ! U = U(IN-1) ! WKSP(IB1) = U(IN) ! 230 CALL ITJSI (N,IA,JA,A,RHS,WKSP(IB1),U,WKSP(IB2),ICNT) ! IF (HALT) GO TO 270 240 CONTINUE ! ! ... ITMAX HAS BEEN REACHED! IF (IPARM(11).NE.0) GO TO 250 TIMI2 = TIMER(DUMMY) TIME1 = DBLE(TIMI2-TIMI1) 250 IER = 23 IF (LEVEL.GE.1) WRITE (NOUT,260) ITMAX 260 FORMAT ('0','*** W A R N I N G ************'/'0', & & ' IN ITPACK ROUTINE JSI'/' ',' FAILURE TO CONVERGE IN',I5& & ,' ITERATIONS') IF (IPARM(3).EQ.0) RPARM(1) = STPTST GO TO 300 ! ! ... METHOD HAS CONVERGED ! 270 IF (IPARM(11).NE.0) GO TO 280 TIMI2 = TIMER(DUMMY) TIME1 = DBLE(TIMI2-TIMI1) 280 IF (LEVEL.GE.1) WRITE (NOUT,290) IN 290 FORMAT (/1X,'JSI HAS CONVERGED IN ',I5,' ITERATIONS')! ! ... PUT SOLUTION INTO U IF NOT ALREADY THERE. ! 300 CONTINUE IF (MOD(IN,2).EQ.1) CALL DCOPY (N,WKSP(IB1),1,U,1) ! ! ... UNSCALE THE MATRIX, SOLUTION, AND RHS VECTORS. ! CALL UNSCAL (N,IA,JA,A,RHS,U,WKSP)! ! ... UN-PERMUTE MATRIX,RHS, AND SOLUTION ! IF (IPARM(9).LT.0) GO TO 330 CALL PERMAT (N,IA,JA,A,IWKSP(IB2),IWKSP(IB3),ISYM,LEVEL,NOUT, & & IERPER) IF (IERPER.EQ.0) GO TO 320 IF (LEVEL.GE.0) WRITE (NOUT,310) IERPER 310 FORMAT ('0','*** F A T A L E R R O R ************'/'0', & & ' CALLED FROM ITPACK ROUTINE JSI '/' ', & & ' ERROR DETECTED IN SUBROUTINE PERMAT'/' ', & & ' WHICH UNDOES THE RED-BLACK PERMUTATION '/' ', & & ' IER = ',I5) IF (IER.EQ.0) IER = IERPER GO TO 360 320 CALL PERVEC (N,RHS,IWKSP(IB2)) CALL PERVEC (N,U,IWKSP(IB2)) ! ! ... OPTIONAL ERROR ANALYSIS ! 330 IDGTS = IPARM(12) IF (IDGTS.LT.0) GO TO 340 IF (IPARM(2).LE.0) IDGTS = 0 CALL PERROR5 (N,IA,JA,A,RHS,U,WKSP,DIGIT1,DIGIT2,IDGTS)! ! ... SET RETURN PARAMETERS IN IPARM AND RPARM ! 340 IF (IPARM(11).NE.0) GO TO 350 TIMJ2 = TIMER(DUMMY) TIME2 = DBLE(TIMJ2-TIMJ1) 350 IF (IPARM(3).NE.0) GO TO 360 IPARM(1) = IN IPARM(9) = NB RPARM(2) = CME RPARM(3) = SME RPARM(9) = TIME1 RPARM(10) = TIME2 RPARM(11) = DIGIT1 RPARM(12) = DIGIT2 ! 360 CONTINUE IERR = IER IF (LEVEL.GE.3) CALL ECHALL (N,IA,JA,A,RHS,IPARM,RPARM,2) ! RETURN END SUBROUTINE SOR (NN,IA,JA,A,RHS,U,IWKSP,NW,WKSP,IPARM,RPARM,IERR)! ! ITPACK 2C MAIN SUBROUTINE SOR (SUCCESSIVE OVERRELATION) ! EACH OF THE MAIN SUBROUTINES: ! JCG, JSI, SOR, SSORCG, SSORSI, RSCG, RSSI ! CAN BE USED INDEPENDENTLY OF THE OTHERS ! ! ... FUNCTION: ! ! THIS SUBROUTINE, SOR, DRIVES THE SUCCESSIVE ! OVERRELAXATION ALGORITHM. ! ! ... PARAMETER LIST: ! ! N INPUT INTEGER. DIMENSION OF THE MATRIX. (= NN) ! IA,JA INPUT INTEGER VECTORS. THE TWO INTEGER ARRAYS OF ! THE SPARSE MATRIX REPRESENTATION. ! A INPUT D.P. VECTOR. THE D.P. ARRAY OF THE SPARSE ! MATRIX REPRESENTATION ! RHS INPUT D.P. VECTOR. CONTAINS THE RIGHT HAND SIDE ! OF THE MATRIX PROBLEM.! U INPUT/OUTPUT D.P. VECTOR. ON INPUT, U CONTAINS THE ! INITIAL GUESS TO THE SOLUTION. ON OUTPUT, IT CONTAINS ! THE LATEST ESTIMATE TO THE SOLUTION. ! IWKSP INTEGER VECTOR WORKSPACE OF LENGTH 3*N ! NW INPUT INTEGER. LENGTH OF AVAILABLE WKSP. ON OUTPUT, ! IPARM(8) IS AMOUNT USED. ! WKSP D.P. VECTOR USED FOR WORKING SPACE. SOR NEEDS THIS ! TO BE IN LENGTH AT LEAST N ! IPARM INTEGER VECTOR OF LENGTH 12. ALLOWS USER TO SPECIFY! SOME INTEGER PARAMETERS WHICH AFFECT THE METHOD. ! RPARM D.P. VECTOR OF LENGTH 12. ALLOWS USER TO SPECIFY SOME ! D.P. PARAMETERS WHICH AFFECT THE METHOD.! IER OUTPUT INTEGER. ERROR FLAG. (= IERR) ! ! ... SOR SUBPROGRAM REFERENCES: ! ! FROM ITPACK BISRCH, DFAULT, ECHALL, ECHOUT, IPSTR, ITERM,! TIMER, ITSOR, IVFILL, PERMAT, PERROR5, ! PERVEC, PFSOR1, PMULT, PRBNDX, PSTOP, QSORT, ! SBELM, SCAL, DCOPY, DDOT, TAU, UNSCAL, VFILL,! VOUT, WEVMW ! SYSTEM DABS, DLOG10, DBLE(AMAX0), DMAX1, DBLE(FLOAT), ! DSQRT! ! VERSION: ITPACK 2C (MARCH 1982)! ! CODE WRITTEN BY: DAVID KINCAID, ROGER GRIMES, JOHN RESPESS ! CENTER FOR NUMERICAL ANALYSIS ! UNIVERSITY OF TEXAS ! AUSTIN, TX 78712 ! (512) 471-1242! ! FOR ADDITIONAL DETAILS ON THE ! (A) SUBROUTINE SEE TOMS ARTICLE 1982 ! (B) ALGORITHM SEE CNA REPORT 150 ! ! BASED ON THEORY BY: DAVID YOUNG, DAVID KINCAID, LOU HAGEMAN ! ! REFERENCE THE BOOK: APPLIED ITERATIVE METHODS ! L. HAGEMAN, D. YOUNG ! ACADEMIC PRESS, 1981 ! ! ************************************************** ! * IMPORTANT NOTE * ! * * ! * WHEN INSTALLING ITPACK ROUTINES ON A * ! * DIFFERENT COMPUTER, RESET SOME OF THE VALUES * ! * IN SUBROUTNE DFAULT. MOST IMPORTANT ARE * ! * * ! * DRELPR MACHINE RELATIVE PRECISION * ! * RPARM(1) STOPPING CRITERION * ! * * ! * ALSO CHANGE SYSTEM-DEPENDENT ROUTINE * ! * SECOND USED IN TIMER * ! * * ! ************************************************** ! ! SPECIFICATIONS FOR ARGUMENTS ! INTEGER IA(1),JA(1),IWKSP(1),IPARM(12),NN,NW,IERR DOUBLE PRECISION A(1),RHS(NN),U(NN),WKSP(NW),RPARM(12)! ! SPECIFICATIONS FOR LOCAL VARIABLES! INTEGER IB1,IB2,IB3,IDGTS,IER,IERPER,ITMAX1,LOOP,N,NB,N3 DOUBLE PRECISION DIGIT1,DIGIT2,TEMP,TIME1,TIME2,TOL ! ! *** BEGIN: ITPACK COMMON ! INTEGER IN,IS,ISYM,ITMAX,LEVEL,NOUT COMMON /ITCOM1/ IN,IS,ISYM,ITMAX,LEVEL,NOUT ! LOGICAL ADAPT,BETADT,CASEII,HALT,PARTAD COMMON /ITCOM2/ ADAPT,BETADT,CASEII,HALT,PARTAD ! DOUBLE PRECISION BDELNM,BETAB,CME,DELNNM,DELSNM,FF,GAMMA,OMEGA,QA,& & QT,RHO,RRR,SIGE,SME,SPECR,SPR,DRELPR,STPTST,UDNM,ZETA COMMON /ITCOM3/ BDELNM,BETAB,CME,DELNNM,DELSNM,FF,GAMMA,OMEGA,QA, & & QT,RHO,RRR,SIGE,SME,SPECR,SPR,DRELPR,STPTST,UDNM,ZETA ! ! *** END : ITPACK COMMON ! ! ... VARIABLES IN COMMON BLOCK - ITCOM1! ! IN - ITERATION NUMBER ! IS - ITERATION NUMBER WHEN PARAMETERS LAST CHANGED! ISYM - SYMMETRIC/NONSYMMETRIC STORAGE FORMAT SWITCH ! ITMAX - MAXIMUM NUMBER OF ITERATIONS ALLOWED ! LEVEL - LEVEL OF OUTPUT CONTROL SWITCH ! NOUT - OUTPUT UNIT NUMBER ! ! ... VARIABLES IN COMMON BLOCK - ITCOM2! ! ADAPT - FULLY ADAPTIVE PROCEDURE SWITCH ! BETADT - SWITCH FOR ADAPTIVE DETERMINATION OF BETA ! CASEII - ADAPTIVE PROCEDURE CASE SWITCH ! HALT - STOPPING TEST SWITCH ! PARTAD - PARTIALLY ADAPTIVE PROCEDURE SWITCH! ! ... VARIABLES IN COMMON BLOCK - ITCOM3! ! BDELNM - TWO NORM OF B TIMES DELTA-SUPER-N! BETAB - ESTIMATE FOR THE SPECTRAL RADIUS OF LU MATRIX! CME - ESTIMATE OF LARGEST EIGENVALUE ! DELNNM - INNER PRODUCT OF PSEUDO-RESIDUAL AT ITERATION N ! DELSNM - INNER PRODUCT OF PSEUDO-RESIDUAL AT ITERATION S ! FF - ADAPTIVE PROCEDURE DAMPING FACTOR! GAMMA - ACCELERATION PARAMETER ! OMEGA - OVERRELAXATION PARAMETER FOR SOR AND SSOR ! QA - PSEUDO-RESIDUAL RATIO ! QT - VIRTUAL SPECTRAL RADIUS! RHO - ACCELERATION PARAMETER ! RRR - ADAPTIVE PARAMETER ! SIGE - PARAMETER SIGMA-SUB-E ! SME - ESTIMATE OF SMALLEST EIGENVALUE ! SPECR - SPECTRAL RADIUS ESTIMATE FOR SSOR! DRELPR - MACHINE RELATIVE PRECISION ! STPTST - STOPPING PARAMETER ! UDNM - TWO NORM OF U! ZETA - STOPPING CRITERION ! ! ... INITIALIZE COMMON BLOCKS! LEVEL = IPARM(2) NOUT = IPARM(4) IF (LEVEL.GE.1) WRITE (NOUT,10) 10 FORMAT ('0'///1X,'BEGINNING OF ITPACK SOLUTION MODULE SOR') IER = 0 IF (IPARM(1).LE.0) RETURN N = NN IF (IPARM(11).EQ.0) TIMJ1 = TIMER(DUMMY) IF (LEVEL.GE.3) GO TO 20 CALL ECHOUT (IPARM,RPARM,3) GO TO 30 20 CALL ECHALL (N,IA,JA,A,RHS,IPARM,RPARM,1) 30 TEMP = 5.0D2*DRELPR IF (ZETA.GE.TEMP) GO TO 50 IF (LEVEL.GE.1) WRITE (NOUT,40) ZETA,DRELPR,TEMP 40 FORMAT ('0','*** W A R N I N G ************'/'0', & & ' IN ITPACK ROUTINE SOR'/' ',' RPARM(1) =',D10.3, & & ' (ZETA)'/' ',' A VALUE THIS SMALL MAY HINDER CONVERGENCE '/& & ' ',' SINCE MACHINE PRECISION DRELPR =',D10.3/' ', & & ' ZETA RESET TO ',D10.3) ZETA = TEMP 50 CONTINUE TIME1 = RPARM(9) TIME2 = RPARM(10) DIGIT1 = RPARM(11) DIGIT2 = RPARM(12) ! ! ... VERIFY N ! IF (N.GT.0) GO TO 70 IER = 31 IF (LEVEL.GE.0) WRITE (NOUT,60) N 60 FORMAT ('0','*** F A T A L E R R O R ************'/'0', & & ' CALLED FROM ITPACK ROUTINE SOR '/' ', & & ' INVALID MATRIX DIMENSION, N =',I8) GO TO 360 70 CONTINUE ! ! ... REMOVE ROWS AND COLUMNS IF REQUESTED ! IF (IPARM(10).EQ.0) GO TO 90 TOL = RPARM(8) CALL IVFILL (N,IWKSP,0) CALL VFILL (N,WKSP,0.0D0) CALL SBELM (N,IA,JA,A,RHS,IWKSP,WKSP,TOL,ISYM,LEVEL,NOUT,IER) IF (IER.EQ.0) GO TO 90 IF (LEVEL.GE.0) WRITE (NOUT,80) IER,TOL 80 FORMAT ('0','*** F A T A L E R R O R ************'/'0', & & ' CALLED FROM ITPACK ROUTINE SOR '/' ', & & ' ERROR DETECTED IN SUBROUTINE SBELM '/' ', & & ' WHICH REMOVES ROWS AND COLUMNS OF SYSTEM '/' ', & & ' WHEN DIAGONAL ENTRY TOO LARGE '/' ',' IER = ',I5,5X,& & ' RPARM(8) = ',D10.3,' (TOL)') GO TO 360 ! ! ... INITIALIZE WKSP BASE ADDRESSES. ! 90 IB1 = 1 IB2 = IB1+N IB3 = IB2+N IPARM(8) = N IF (NW.GE.IPARM(8)) GO TO 110 IER = 32 IF (LEVEL.GE.0) WRITE (NOUT,100) NW,IPARM(8) 100 FORMAT ('0','*** F A T A L E R R O R ************'/'0', & & ' CALLED FROM ITPACK ROUTINE SOR '/' ', & & ' NOT ENOUGH WORKSPACE AT ',I10/' ',' SET IPARM(8) =',I10& & ,' (NW)') GO TO 360 ! ! ... PERMUTE TO RED-BLACK SYSTEM IF REQUESTED ! 110 NB = IPARM(9) IF (NB.LT.0) GO TO 170 N3 = 3*N CALL IVFILL (N3,IWKSP,0) CALL PRBNDX (N,NB,IA,JA,IWKSP,IWKSP(IB2),LEVEL,NOUT,IER) IF (IER.EQ.0) GO TO 130 IF (LEVEL.GE.0) WRITE (NOUT,120) IER,NB 120 FORMAT ('0','*** F A T A L E R R O R ************'/'0', & & ' CALLED FROM ITPACK ROUTINE SOR '/' ', & & ' ERROR DETECTED IN SUBROUTINE PRBNDX'/' ', & & ' WHICH COMPUTES THE RED-BLACK INDEXING'/' ',' IER = ',I5& & ,' IPARM(9) = ',I5,' (NB)') GO TO 360 ! ! ... PERMUTE MATRIX AND RHS!
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -