File: fbs.f

package info (click to toggle)
nastran 0.1.95-2
  • links: PTS, VCS
  • area: non-free
  • in suites: bookworm, bullseye, sid
  • size: 122,540 kB
  • sloc: fortran: 284,409; sh: 771; makefile: 324
file content (81 lines) | stat: -rw-r--r-- 3,152 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
      SUBROUTINE FBS (ZS,ZD)
C
C     GIVEN A LOWER TRIANGULAR FACTOR WITH DIAGONAL SUPERIMPOSED, AND
C     WRITTEN WITH TRAILING STRING DEFINITION WORDS, FBS WILL PERFORM
C     THE FORWARD-BACKWARD SUBSTITUTION NECESSARY TO SOLVE A LINEAR
C     SYSTEM OF EQUATIONS.
C   
C     THE ARE TWO METHODS AVAILABLE FOR THIS PROCESS.
C     METHOD 1 - THIS METHOD READS AS MANY RIGHT HAND VECTORS INTO MEMORY
C                AS POSSIBLE, AND THEN READS THE LOWER TRIANGULAR MATRIX
C                USING GETSTR AND GETSTB TO SOLVE FOR THE SOLUTION VECTORS.
C                MORE THAN ONE PASS MAY BE REQUIRED IF INSUFFICIENT MEMORY
C                EXISTS FOR LOADING ALL RIGHT HAND VECTORS AT ONE TIME.
C                THIS METHOD IS THE OLDER OF THE TWO METHODS.
C                (SEE SUBROUTINES FBSF, FBSF1, FBSF2, FBSF3 AND FBSF4)
C     METHOD 2 - THIS METHOD IS THE SAME AS METHOD 1 WITH THE EXCEPTION
C                THAT MEMORY EXISTS FOR LOADING PART OR ALL OF THE LOWER
C                TRIANGULAR MATRIX INTO OPEN CORE AFTER LOADING ALL OF 
C                THE RIGHT HAND VECTORS INTO OPEN CORE.  THIS METHOD
C                WILL ELIMINATE THE NEED TO READ THE LOWER TRIANGULAR
C                MATRIX TWICE (ONCE FORWARD AND ONCE BACKWARD).
C                (SEE SUBROUTINES FBSI, FBSI1, FBSI2, FBSI3 AND FBSI4)
C
C     THE SELECTION OF METHOD 1 OR 2 IS DEPENDENT UPON WHETHER
C     MEMORY EXISTS FOR READING THE LOWER TRIANGULAR MATRIX INTO MEMORY
C
C     SEE SUBROUTINES FBSF AND FBSI FOR OPEN CORE LAYOUTS
C
      INTEGER                    DBL      ,DBB      ,SYSBUF
     &,                          WORDS    ,RLCMPX   ,RC       
     &,                          TYPEL    ,TYPEB
      REAL                       ZS(1)    
      DOUBLE  PRECISION          ZD(1) 
      COMMON /FBSX  / DBL(7)    ,DBU(7)   ,DBB(7)   ,DBX(7)   ,LCORE   
     1,               PREC      ,SIGN     ,SCRX
      COMMON /SYSTEM/ SYSBUF    ,NOUT   
      COMMON /TYPE  / PRC(2)    ,WORDS(4) ,RLCMPX(4)
C
C     GENERAL INITIALIZATION
C
C   DIAG 46 FORCES METHOD ONE
C
      CALL SSWTCH ( 46, L46 )
      IF ( L46 .NE. 0 ) GO TO 1000
      NCOL    = DBL( 2 )
      TYPEL   = DBL( 5 )
      TYPEB   = DBB( 5 )
      RC      = RLCMPX( TYPEB )
C
C     NRHVWD = NUMBER OF WORDS REQUIRED FOR EACH RIGHT HAND VECTOR
C     NRHV   = NUMBER OF RIGHT HAND VECTORS
C  
      NRHVWD    = WORDS(TYPEL) * NCOL
      NRHV      = DBB(2)
C
C CHECK FOR RIGHT HAND VECTORS BEING THE IDENTITY MATRIX
C
      IF ( DBB( 4 ) .EQ. 8 ) NRHV = NCOL
C
C COMPUTE THE MEMORY TO READ ALL OF THE RIGHT HAND VECTORS INTO MEMORY
C
      NEED      = NRHV * NRHVWD
      IREMAIN   = LCORE - 2 * SYSBUF - NEED
C
C IF LESS THAN ONE COLUMN WORTH OF MEMORY AVAILABLE, USE METHOD ONE
C
      IF ( IREMAIN .GE. NRHVWD ) GO TO 2000
C
C  METHOD ONE - FIRST, CHECK FOR SUFFICIENT MEMORY FOR PROCESS
C
1000  MEMAVL = LCORE - 2*SYSBUF - NRHVWD
      IF ( MEMAVL .LE. 0 ) CALL MESAGE ( -8, -MEMAVL, SUBNAM )
      CALL FBSF ( ZS, ZD )
      GO TO 7000
C
C  METHOD TWO
C
2000  CALL FBSI ( ZS, ZD )
7000  CONTINUE
      RETURN
      END