home *** CD-ROM | disk | FTP | other *** search
/ Liren Large Software Subsidy 9 / 09.iso / e / e001 / 1.ddi / TMP / ADINA42.FOR < prev    next >
Encoding:
Text File  |  1991-01-07  |  220.8 KB  |  7,803 lines

  1. C *CDC* *DECK MATWRF
  2. C *UNI* )FOR,IS  N.MATWRF, R.MATWRF
  3.       SUBROUTINE MATWRF (N,DEN,PROP)
  4. C
  5. C
  6. C     PROGRAM TO PRINT FLUID PROPERTIES
  7. C     FOR THREE-DIMENSIONAL FLUID ELEMENTS
  8. C
  9. C
  10.       IMPLICIT REAL*8 (A-H,O-Z)
  11.       COMMON /EL/ IND,ICOUNT,NPAR(20),NUMEG,NEGL,NEGNL,IMASS,IDAMP,ISTAT
  12.      1           ,NDOF,KLIN,IEIG,IMASSN,IDAMPN
  13.       COMMON /PRCON/ IDATWR,IPRIC,NPB,IDC,IVC,IAC,IPC,IPNODE(3,15)
  14.       DIMENSION PROP(1)
  15.       EQUIVALENCE (NPAR(15),MODEL),(NPAR(16),NUMMAT),(NPAR(17),NCON),
  16.      1            (NPAR(20),IDW)
  17. C
  18. C
  19.       IF (IDATWR.GT.1) RETURN
  20.       WRITE(6,2100) N,DEN
  21. C
  22.       GO TO (1,1,1,1,1,1),MODEL
  23. C
  24. C
  25. C.... MODEL = 1    C O N S T A N T  B U L K  M O D U L U S
  26. C
  27.     1 WRITE(6,2101) (PROP(I), I=1,NCON)
  28.       RETURN
  29. C
  30. C
  31. C
  32.  2100 FORMAT (27H FLUID CONSTANTS SET NUMBER,6H .... ,I5//,
  33.      1        1H ,4X,29HDEN ..........( DENSITY ).. =, E14.6/)
  34.  2101 FORMAT (1H ,4X,29HK ............( PROP(1) ).. =, E14.6///)
  35. C
  36. C
  37.       END
  38. C *CDC* *DECK FQUADS
  39. C *UNI* )FOR,IS  N.FQUADS, R.FQUADS
  40.       SUBROUTINE FQUADS (ND,B,S,XYZ,PROP,RE,EDIS,WA,NOD9)
  41. C
  42. C
  43. C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
  44. C .                                                                   .
  45. C .                                                                   .
  46. C .      HEXAHEDRAL CURVILINEAR THREE-DIMENSIONAL FLUID ELEMENTS      .
  47. C .                                                                   .
  48. C .      ISOPARAMETRIC OR SUBPARAMETRIC                               .
  49. C .                                                                   .
  50. C .                                                                   .
  51. C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
  52. C
  53. C
  54. C
  55.       IMPLICIT REAL*8 (A-H,O-Z)
  56.       COMMON /EL/ IND,ICOUNT,NPAR(20),NUMEG,NEGL,NEGNL,IMASS,IDAMP,ISTAT
  57.      1            ,NDOFDM,KLIN,IEIG,IMASSN,IDAMPN
  58.       COMMON /VAR/ NG,MODEX,IUPDT,KSTEP,ITEMAX,IEQREF,ITE,KPRI,
  59.      1             IREF,IEQUIT,IPRI,KPLOTN,KPLOTE
  60.       COMMON /THREED/ DE,IELD,IELX,IEL,NPT,IDW,NND9,ISOCOR
  61.       COMMON /MTMD3D/ D(6,6),STRESS(6),STRAIN(6),IPT,NEL,IPS
  62.       COMMON /GAUSS/ XG(4,4),WGT(4,4),EVAL2(9,2),EVAL3(27,3),E1,E2,E3
  63. C
  64.       DIMENSION B(1),S(1),XYZ(1),PROP(1),RE(1),EDIS(1),WA(1),NOD9(1)
  65.       DIMENSION DISD(9),TAU(6),XXX(63)
  66. C
  67.       EQUIVALENCE (NPAR(3),INDNL),(NPAR(10),NINT),(NPAR(11),NINTZ),
  68.      1            (NPAR(15),MODEL)
  69. C
  70. C
  71.       IF (IND.GE.4) GO TO 100
  72. C
  73. C
  74. C     F I N D  S T I F F N E S S  O F
  75. C     L I N E A R  F L U I D  E L E M E N T
  76. C
  77. C
  78. C
  79. C     INTEGRATE B(TRANSPOSED) * B
  80. C
  81.       DO 30 LX=1,NINT
  82.       E1=XG(LX,NINT)
  83.       DO 30 LY=1,NINT
  84.       E2=XG(LY,NINT)
  85.       DO 30 LZ=1,NINTZ
  86.       E3=XG(LZ,NINTZ)
  87.       WT=WGT(LX,NINT)*WGT(LY,NINT)*WGT(LZ,NINTZ)
  88. C
  89. C     EVALUATE STRAIN-DISPLACEMENT MATRIX B AND JACOBIAN DETERMINANT
  90. C     AT THIS INTEGRATION POINT
  91. C
  92.       CALL FDERIQ (NEL,XYZ,B,DET,E1,E2,E3,NOD9)
  93. C
  94.       PROPK=PROP(1)
  95.       FAC=WT*DET*PROPK
  96.       FAC=DSQRT(FAC)
  97.       DO 10 I=1,ND
  98.  10   B(I)=FAC*B(I)
  99.       KL=0
  100.       DO 20 I=1,ND
  101.       DO 20 J=I,ND
  102.       KL=KL+1
  103.  20   S(KL)=S(KL)+B(I)*B(J)
  104.  30   CONTINUE
  105. C
  106. C
  107.       RETURN
  108. C
  109. C
  110. C     C A L C U L A T E  N O N L I N E A R
  111. C     F L U I D  E L E M E N T  M A T R I C E S
  112. C
  113. C
  114.   100 CONTINUE
  115.       DO 105 J=1,ND
  116.   105 XXX(J)=XYZ(J)
  117.       IF (INDNL.EQ.0) GO TO 140
  118.       DO 110 J=1,ND
  119.  110  XXX(J)=XYZ(J)+EDIS(J)
  120. C
  121. C
  122. C     CALCULATE FLUID STIFFNESS MATRIX AND
  123. C     AND ELEMENT NODAL FORCES
  124. C
  125. C
  126.   140 IPT=0
  127.       DO 470 LX=1,NINT
  128.       E1=XG(LX,NINT)
  129.       DO 470 LY=1,NINT
  130.       E2=XG(LY,NINT)
  131.       DO 470 LZ=1,NINTZ
  132.       E3=XG(LZ,NINTZ)
  133.       WT=WGT(LX,NINT)*WGT(LY,NINT)*WGT(LZ,NINTZ)
  134.       IPT=IPT+1
  135. C
  136. C
  137. C     U P D A T E D    L A G R A N G I A N    F O R M U L A T I O N
  138. C
  139. C
  140. C     EVALUATE DERIVATIVE OPERATOR B (IN COMPACTED FORM)
  141. C
  142.       CALL FDERIQ (NEL,XXX,B,DET,E1,E2,E3,NOD9)
  143. C
  144. C
  145.       DO 320 I=1,9
  146.  320  DISD(I)=0.0
  147. C
  148. C     CALCULATE DISPLACEMENT DERIVATIVES
  149. C
  150.       DO 330 J=3,ND,3
  151.       I=J-1
  152.       K=J-2
  153.       DISD(1)=DISD(1)+B(K)*EDIS(K)
  154.       DISD(2)=DISD(2)+B(I)*EDIS(I)
  155.       DISD(3)=DISD(3)+B(J)*EDIS(J)
  156.       DISD(4)=DISD(4)+B(I)*EDIS(K)
  157.       DISD(5)=DISD(5)+B(J)*EDIS(K)
  158.       DISD(6)=DISD(6)+B(K)*EDIS(I)
  159.       DISD(7)=DISD(7)+B(J)*EDIS(I)
  160.       DISD(8)=DISD(8)+B(K)*EDIS(J)
  161.  330  DISD(9)=DISD(9)+B(I)*EDIS(J)
  162. C
  163. C     EVALUATE CURRENT PRESSURES
  164. C
  165.       CALL STST3F (DISD,PRESS,PROP)
  166. C
  167. C     ADD PRESSURE CONTRIBUTION TO ELEMENT FORCE VECTOR
  168. C
  169.       FAC=WT*DET
  170.       TAU(1)=-PRESS*FAC
  171.       DO 350 I=1,ND
  172.       RE(I)=RE(I)+B(I)*TAU(1)
  173.   350 CONTINUE
  174. C
  175.       IF (ICOUNT-2) 360,360,470
  176.  360  IF (IREF) 470,370,470
  177. C
  178. C     ADD LINEAR CONTRIBUTION TO ELEMENT STIFFNESS MATRIX
  179. C
  180.   370 PROPK=PROP(1)
  181.       FAC=WT*DET*PROPK
  182.       KL=0
  183.       DO 380 I=1,ND
  184.       DO 380 J=I,ND
  185.       KL=KL+1
  186.   380 S(KL)=S(KL) + B(I)*B(J)*FAC
  187. C
  188. C     ADD NONLINEAR CONTRIBUTION TO STIFFNESS MATRIX
  189. C
  190.       IF (INDNL.EQ.0 .OR. TAU(1).EQ.0.) GO TO 470
  191.       KL=1
  192.       DO 491 J=1,ND,3
  193.       DB1=TAU(1)*B(J)
  194.       DB2=TAU(1)*B(J+1)
  195.       DB3=TAU(1)*B(J+2)
  196.       KS1=KL
  197.       KS2=KS1+ND-J+1
  198.       KS3=KS2+ND-J
  199.       DO 490 I=J,ND,3
  200.       DUM=B(I)*DB1 + B(I+1)*DB2 + B(I+2)*DB3
  201.       S(KS1)=S(KS1) + DUM
  202.       S(KS2)=S(KS2) + DUM
  203.       S(KS3)=S(KS3) + DUM
  204.       KS1=KS1+3
  205.       KS2=KS2+3
  206.   490 KS3=KS3+3
  207.   491 KL=KL+3*ND-3*J
  208. C
  209.   470 CONTINUE
  210. C
  211.       RETURN
  212. C
  213. C
  214.       END
  215. C *CDC* *DECK FQUADM
  216. C *UNI* )FOR,IS  N.FQUADM, R.FQUADM
  217.       SUBROUTINE FQUADM  (N,ND,NDM2,XM,CM,XX,NOD9)
  218. C
  219. C
  220. C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
  221. C .                                                                   .
  222. C .   P R O G R A M                                                   .
  223. C .                                                                   .
  224. C .      EVALUATES FLUID MASS MATRIX                                  .
  225. C .                                                                   .
  226. C .      CURVILINEAR HEXAHEDRON   8 TO 21 NODES                       .
  227. C .                                                                   .
  228. C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
  229. C
  230. C
  231. C
  232.       IMPLICIT REAL*8 (A-H,O-Z)
  233.       COMMON /EL/ IND,ICOUNT,NPAR(20),NUMEG,NEGL,NEGNL,IMASS,IDAMP,ISTAT
  234.      1            ,NDOFDM,KLIN,IEIG,IMASSN,IDAMPN
  235.       COMMON /THREED/ DE,IELD,IELX,IEL,NPT,IDW,NND9,ISOCOR
  236.       COMMON /GAUSS/ XG(4,4),WGT(4,4),EVAL2(9,2),EVAL3(27,3),E1,E2,E3
  237.       DIMENSION XM(1),CM(1),XX(3,1),D(63),NOD9(1)
  238.       DIMENSION H(21),P(3,21),XJ(3,3)
  239. C
  240. C
  241. C     INTEGRATE USING GAUSS QUADRATURE
  242. C
  243. C
  244.       IINTP=0
  245.       NINTM=3
  246.       NINTZM=3
  247.       IF (IMASS.EQ.1) GO TO 9
  248.       DO 8 I=1,NDM2
  249.     8 CM(I)=0.0
  250.       GO TO 10
  251.     9 DO 7 I=1,ND
  252.     7 XM(I)=0.
  253. C
  254.    10 DO 900 LX=1,NINTM
  255.       R=XG(LX,NINTM)
  256.       DO 900 LY=1,NINTM
  257.       S=XG(LY,NINTM)
  258.       DO 900 LZ=1,NINTZM
  259.       T=XG(LZ,NINTZM)
  260.       WT=WGT(LX,NINTM)*WGT(LY,NINTM)*WGT(LZ,NINTZM)
  261. C
  262. C
  263. C     FIND INTERPOLATION FUNCTIONS
  264. C     FIND JACOBIAN MATRIX AND ITS DETERMINANT
  265. C
  266. C
  267.       CALL FFUNCT (R,S,T,H,P,NOD9,XJ,DET,XX,IINTP)
  268. C
  269. C
  270. C     CONSISTENT MASS MATRIX
  271. C
  272. C
  273.       FAC=WT*DET*DE
  274.       IF (IMASS.LT.2) GO TO 320
  275.       DO 200 I=1,IEL
  276.       D(3*I - 2)=H(I)
  277.       D(3*I - 1)=H(I)
  278.   200 D(3*I)=H(I)
  279.       KL=1
  280.       DO 300 I=1,ND,3
  281.       DO 301 J=I,ND,3
  282.       CM(KL)=CM(KL) + D(I)*D(J)*FAC
  283.   301 KL=KL + 3
  284.   300 KL=KL + 2*(ND-I) - 1
  285.       GO TO 900
  286. C
  287. C
  288. C     LUMPED MASS VECTOR
  289. C
  290. C
  291.   320 DO 325 I=1,ND,3
  292.       FACM=FAC/IEL
  293.   325 XM(I)=XM(I) + FACM
  294. C
  295.   900 CONTINUE
  296. C
  297.       IF (IMASS.EQ.1) GO TO 335
  298.       KL=1
  299.       DO 450 I=1,ND,3
  300.       KS1=KL + ND - I + 1
  301.       KS2=KS1 + ND - I
  302.       DO 451 J=I,ND,3
  303.       CM(KS1)=CM(KL)
  304.       CM(KS2)=CM(KL)
  305.       KL=KL + 3
  306.       KS1=KS1 + 3
  307.   451 KS2=KS2 + 3
  308.   450 KL=KL + 2*(ND-I) - 1
  309.       RETURN
  310. C
  311.   335 DO 340 I=1,ND,3
  312.       XM(I+1)=XM(I)
  313.   340 XM(I+2)=XM(I)
  314.       RETURN
  315.       END
  316. C *CDC* *DECK FDERIQ
  317. C *UNI* )FOR,IS  N.FDERIQ, R.FDERIQ
  318.       SUBROUTINE FDERIQ  (NEL,XX,B,DET,R,S,T,NOD9)
  319. C
  320. C
  321. C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
  322. C .                                                                   .
  323. C .   P R O G R A M                                                   .
  324. C .                                                                   .
  325. C .      EVALUATES STRAIN-DISPLACEMENT MATRIX B AT POINT (R,S,T)      .
  326. C .                                                                   .
  327. C .      CURVILINEAR HEXAHEDRON   8 TO 21 NODES                       .
  328. C .                                                                   .
  329. C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
  330. C
  331. C
  332. C
  333.       IMPLICIT REAL*8 (A-H,O-Z)
  334.       COMMON /EL/ IND,ICOUNT,NPAR(20),NUMEG,NEGL,NEGNL,IMASS,IDAMP,ISTAT
  335.      1            ,NDOFDM,KLIN,IEIG,IMASSN,IDAMPN
  336.       COMMON /THREED/ DE,IELD,IELX,IEL,NPT,IDW,NND9,ISOCOR
  337.       DIMENSION XX(3,1),B(1),NOD9(1)
  338.       DIMENSION H(21),P(3,21),XJ(3,3),XJI(3,3)
  339. C
  340. C
  341. C     FIND INTERPOLATION FUNCTIONS AND THEIR DERIVATIVES
  342. C     EVALUATE JACOBIAN MATRIX AT POINT (R,S,T)
  343. C     COMPUTE DETERMINANT OF JACOBIAN MATRIX AT POINT (R,S,T)
  344. C
  345. C
  346.       IINTP=0
  347.       CALL FFUNCT (R,S,T,H,P,NOD9,XJ,DET,XX,IINTP)
  348. C
  349. C
  350. C     COMPUTE INVERSE OF JACOBIAN MATRIX
  351. C
  352. C
  353.       DUM=1.0/DET
  354.       XJI(1,1)=DUM*( XJ(2,2)*XJ(3,3) - XJ(2,3)*XJ(3,2))
  355.       XJI(2,1)=DUM*(-XJ(2,1)*XJ(3,3) + XJ(2,3)*XJ(3,1))
  356.       XJI(3,1)=DUM*( XJ(2,1)*XJ(3,2) - XJ(2,2)*XJ(3,1))
  357.       XJI(1,2)=DUM*(-XJ(1,2)*XJ(3,3) + XJ(1,3)*XJ(3,2))
  358.       XJI(2,2)=DUM*( XJ(1,1)*XJ(3,3) - XJ(1,3)*XJ(3,1))
  359.       XJI(3,2)=DUM*(-XJ(1,1)*XJ(3,2) + XJ(1,2)*XJ(3,1))
  360.       XJI(1,3)=DUM*( XJ(1,2)*XJ(2,3) - XJ(1,3)*XJ(2,2))
  361.       XJI(2,3)=DUM*(-XJ(1,1)*XJ(2,3) + XJ(1,3)*XJ(2,1))
  362.       XJI(3,3)=DUM*( XJ(1,1)*XJ(2,2) - XJ(1,2)*XJ(2,1))
  363. C
  364. C
  365. C     EVALUATE B MATRIX IN GLOBAL (X,Y,Z) COORDINATES
  366. C
  367. C
  368.       DO 130 K=1,IEL
  369.       K2=K*3
  370.       DO 125 I=1,3
  371.   125 B(K2+1-I)=0.0
  372.       DO 120 I=1,3
  373.       B(K2-2)=B(K2-2) + XJI(1,I)*P(I,K)
  374.       B(K2-1)=B(K2-1) + XJI(2,I)*P(I,K)
  375.   120 B(K2)=B(K2) + XJI(3,I)*P(I,K)
  376.   130 CONTINUE
  377. C
  378. C
  379.       RETURN
  380. C
  381.       END
  382. C *CDC* *DECK FFUNCT
  383. C *UNI* )FOR,IS  N.FFUNCT,  R.FFUNCT
  384.       SUBROUTINE FFUNCT (R,S,T,H,P,NOD9,XJ,DET,XX,IINTP)
  385. C
  386. C
  387. C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
  388. C .                                                                   .
  389. C .   P R O G R A M                                                   .
  390. C .                                                                   .
  391. C .      TO FIND INTERPOLATION FUNCTIONS ( H )                        .
  392. C .      AND DERIVATIVES ( P ) CORRESPONDING TO THE NODAL             .
  393. C .      POINTS OF A CURVILINEAR ISOPARAMETRIC HEXAHEDRON             .
  394. C .      OR SUBPARAMETRIC HEXAHEDRON (8 TO 21 NODES)                  .
  395. C .                                                                   .
  396. C .      TO FIND JACOBIAN ( XJ ) AND ITS DETERMINANT ( DET )          .
  397. C .                                                                   .
  398. C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
  399. C
  400. C
  401.       IMPLICIT REAL*8 (A-H,O-Z)
  402.       COMMON /VAR/   NG,MODEX,IUPDT,KSTEP,ITEMAX,IEQREF,ITE,KPRI,IREF,
  403.      1               IEQUIT,IPRI,KPLOTN,KPLOTE
  404.       COMMON /EL/ IND,ICOUNT,NPAR(20),NUMEG,NEGL,NEGNL,IMASS,IDAMP,
  405.      1            ISTAT,NDOF,KLIN,IEIG,IMASSN,IDAMPN
  406.       COMMON /THREED/ DE,IELD,IELX,IEL,NPT,IDW,NND9,ISOCOR
  407.       COMMON /MTMD3D/ D(6,6),STRESS(6),STRAIN(6),IPT,NEL,IPS
  408.       DIMENSION H(1),P(3,1),NOD9(1),IPERM(8),XJ(3,3),XX(3,1)
  409.       EQUIVALENCE (NPAR(8),IDEGEN)
  410. C
  411.       DATA IPERM / 2,3,4,1,6,7,8,5 /
  412. C
  413.       RP=1.0 + R
  414.       SP=1.0 + S
  415.       TP=1.0 + T
  416.       RM=1.0 - R
  417.       SM=1.0 - S
  418.       TM=1.0 - T
  419.       RR=1.0 - R*R
  420.       SS=1.0 - S*S
  421.       TT=1.0 - T*T
  422. C
  423. C
  424. C     INTERPOLATION FUNCTIONS AND THEIR DERIVATIVES
  425. C
  426. C
  427. C     8-NODE BRICK
  428. C
  429.       H(1)=0.125*RP*SP*TP
  430.       H(2)=0.125*RM*SP*TP
  431.       H(3)=0.125*RM*SM*TP
  432.       H(4)=0.125*RP*SM*TP
  433.       H(5)=0.125*RP*SP*TM
  434.       H(6)=0.125*RM*SP*TM
  435.       H(7)=0.125*RM*SM*TM
  436.       H(8)=0.125*RP*SM*TM
  437. C
  438.       P(1,1)= 0.125*SP*TP
  439.       P(1,2)=-P(1,1)
  440.       P(1,3)=-0.125*SM*TP
  441.       P(1,4)=-P(1,3)
  442.       P(1,5)= 0.125*SP*TM
  443.       P(1,6)=-P(1,5)
  444.       P(1,7)=-0.125*SM*TM
  445.       P(1,8)=-P(1,7)
  446. C
  447.       P(2,1)= 0.125*RP*TP
  448.       P(2,2)= 0.125*RM*TP
  449.       P(2,3)=-P(2,2)
  450.       P(2,4)=-P(2,1)
  451.       P(2,5)= 0.125*RP*TM
  452.       P(2,6)= 0.125*RM*TM
  453.       P(2,7)=-P(2,6)
  454.       P(2,8)=-P(2,5)
  455. C
  456.       P(3,1)= 0.125*RP*SP
  457.       P(3,2)= 0.125*RM*SP
  458.       P(3,3)= 0.125*RM*SM
  459.       P(3,4)= 0.125*RP*SM
  460.       P(3,5)=-P(3,1)
  461.       P(3,6)=-P(3,2)
  462.       P(3,7)=-P(3,3)
  463.       P(3,8)=-P(3,4)
  464. C
  465.       IF (IEL.EQ.8) GO TO 80
  466. C
  467. C
  468. C     ADD DEGREES OF FREEDOM IN EXCESS OF 8
  469. C
  470.       I=0
  471.     2 I=I + 1
  472.       IF (I.GT.NND9) GO TO 40
  473.       NN=NOD9(I) - 8
  474.       GO TO (9,10,11,12,13,14,15,16,17,18,19,20,21) ,NN
  475. C
  476.     9 H(9) =0.25*RR*SP*TP
  477.       P(1,9) =-0.50*R*SP*TP
  478.       P(2,9) = 0.25*RR*TP
  479.       P(3,9) = 0.25*RR*SP
  480.       GO TO 2
  481.    10 H(10)=0.25*RM*SS*TP
  482.       P(1,10)=-0.25*SS*TP
  483.       P(2,10)=-0.50*RM*S*TP
  484.       P(3,10)= 0.25*RM*SS
  485.       GO TO 2
  486.    11 H(11)=0.25*RR*SM*TP
  487.       P(1,11)=-0.50*R*SM*TP
  488.       P(2,11)=-0.25*RR*TP
  489.       P(3,11)= 0.25*RR*SM
  490.       GO TO 2
  491.    12 H(12)=0.25*RP*SS*TP
  492.       P(1,12)= 0.25*SS*TP
  493.       P(2,12)=-0.50*RP*S*TP
  494.       P(3,12)= 0.25*RP*SS
  495.       GO TO 2
  496.    13 H(13)=0.25*RR*SP*TM
  497.       P(1,13)=-0.50*R*SP*TM
  498.       P(2,13)= 0.25*RR*TM
  499.       P(3,13)=-0.25*RR*SP
  500.       GO TO 2
  501.    14 H(14)=0.25*RM*SS*TM
  502.       P(1,14)=-0.25*SS*TM
  503.       P(2,14)=-0.50*RM*S*TM
  504.       P(3,14)=-0.25*RM*SS
  505.       GO TO 2
  506.    15 H(15)=0.25*RR*SM*TM
  507.       P(1,15)=-0.50*R*SM*TM
  508.       P(2,15)=-0.25*RR*TM
  509.       P(3,15)=-0.25*RR*SM
  510.       GO TO 2
  511.    16 H(16)=0.25*RP*SS*TM
  512.       P(1,16)= 0.25*SS*TM
  513.       P(2,16)=-0.50*RP*S*TM
  514.       P(3,16)=-0.25*RP*SS
  515.       GO TO 2
  516.    17 H(17)=0.25*RP*SP*TT
  517.       P(1,17)= 0.25*SP*TT
  518.       P(2,17)= 0.25*RP*TT
  519.       P(3,17)=-0.50*RP*SP*T
  520.       GO TO 2
  521.    18 H(18)=0.25*RM*SP*TT
  522.       P(1,18)=-0.25*SP*TT
  523.       P(2,18)= 0.25*RM*TT
  524.       P(3,18)=-0.50*RM*SP*T
  525.       GO TO 2
  526.    19 H(19)=0.25*RM*SM*TT
  527.       P(1,19)=-0.25*SM*TT
  528.       P(2,19)=-0.25*RM*TT
  529.       P(3,19)=-0.50*RM*SM*T
  530.       GO TO 2
  531.    20 H(20)=0.25*RP*SM*TT
  532.       P(1,20)= 0.25*SM*TT
  533.       P(2,20)=-0.25*RP*TT
  534.       P(3,20)=-0.50*RP*SM*T
  535.       GO TO 2
  536.    21 H(21)=RR*SS*TT
  537.       P(1,21)=-2.0*R*SS*TT
  538.       P(2,21)=-2.0*S*RR*TT
  539.       P(3,21)=-2.0*T*RR*SS
  540.       GO TO 2
  541. C
  542. C     MODIFY FIRST 8 FUNCTIONS IF 9 OR MORE NODES IN ELEMENT
  543. C
  544.    40 IH=0
  545.    41 IH=IH + 1
  546.       IF (IH.GT.NND9) GO TO 50
  547.       II=IH + 7
  548.       IF (II.EQ.IELX) GO TO 81
  549.    42 IN=NOD9(IH)
  550.       IF (IN.GT.16) GO TO 46
  551.       I1=IN - 8
  552.       I2=IPERM(I1)
  553.       H(I1)=H(I1) - 0.5*H(IN)
  554.       H(I2)=H(I2) - 0.5*H(IN)
  555.       H(IH+8)=H(IN)
  556.       DO 45 J=1,3
  557.       P(J,I1)=P(J,I1) - 0.5*P(J,IN)
  558.       P(J,I2)=P(J,I2) - 0.5*P(J,IN)
  559.    45 P(J,IH+8)=P(J,IN)
  560.       GO TO 41
  561.    46 IF (IN.EQ.21) GO TO 30
  562.       I1=IN - 16
  563.       I2=I1 + 4
  564.       H(I1)=H(I1) - 0.5*H(IN)
  565.       H(I2)=H(I2) - 0.5*H(IN)
  566.       H(IH+8)=H(IN)
  567.       DO 47 J=1,3
  568.       P(J,I1)=P(J,I1) - 0.5*P(J,IN)
  569.       P(J,I2)=P(J,I2) - 0.5*P(J,IN)
  570.    47 P(J,IH+8)=P(J,IN)
  571.       GO TO 41
  572. C
  573. C     MODIFY FIRST 20 FUNCTIONS IF NODE 21 IS PRESENT
  574. C
  575.    30 IH=0
  576.    31 IH=IH + 1
  577.       IN=NOD9(IH)
  578.       IF (IN.EQ.21) GO TO 35
  579.       IF (IN.GT.16) GO TO 33
  580.       I1=IN - 8
  581.       I2=IPERM(I1)
  582.       H(I1)=H(I1) + 0.125*H(21)
  583.       H(I2)=H(I2) + 0.125*H(21)
  584.       DO 32 J=1,3
  585.       P(J,I1)=P(J,I1) + 0.125*P(J,21)
  586.    32 P(J,I2)=P(J,I2) + 0.125*P(J,21)
  587.       GO TO 31
  588.    33 I1=IN - 16
  589.       I2=I1 + 4
  590.       H(I1)=H(I1) + 0.125*H(21)
  591.       H(I2)=H(I2) + 0.125*H(21)
  592.       DO 34 J=1,3
  593.       P(J,I1)=P(J,I1) + 0.125*P(J,21)
  594.    34 P(J,I2)=P(J,I2) + 0.125*P(J,21)
  595.       GO TO 31
  596.    35 DO 36 I=1,8
  597.       H(I)=H(I) - 0.125*H(21)
  598.       DO 36 J=1,3
  599.    36 P(J,I)=P(J,I) - 0.125*P(J,21)
  600.       NN=NND9 + 7
  601.       IF (NN.EQ.8) GO TO 50
  602.       DO 38 I=9,NN
  603.       H(I)=H(I) - 0.25*H(21)
  604.       DO 38 J=1,3
  605.    38 P(J,I)=P(J,I) - 0.25*P(J,21)
  606.       H(NND9+8)=H(21)
  607.       DO 39 J=1,3
  608.    39 P(J,NND9+8)=P(J,21)
  609. C
  610. C     MODIFY APPROPRIATE INTERPOLATION FUNCTIONS AND THEIR DERIVATIVES
  611. C     FOR SPATIAL ISOTROPY FOR SPECIALLY DEGENERATED  20-NODE ELEMENTS
  612. C
  613.    50 IF (IDEGEN.LE.0) GO TO 80
  614.       GO TO (80,60,70),ISOCOR
  615. C
  616. C     CORRECTIONS FOR PRISMS
  617. C
  618.    60 RSF=RR*SS*0.0625
  619.       TPF=TP*0.125
  620.       TMF=TM*0.125
  621.       RSS=R*SS
  622.       RRS=RR*S
  623.       DHT=TP*RSF
  624.       DHB=TM*RSF
  625.       DHTR=-RSS*TPF
  626.       DHTS=-RRS*TPF
  627.       DHTT= RSF
  628.       DHBR=-RSS*TMF
  629.       DHBS=-RRS*TMF
  630.       DHBT=-RSF
  631. C
  632.       H( 2)=H( 2) + DHT
  633.       H( 3)=H( 3) + DHT
  634.       H( 6)=H( 6) + DHB
  635.       H( 7)=H( 7) + DHB
  636.       H(10)=H(10) - DHT - DHT
  637.       H(14)=H(14) - DHB - DHB
  638. C
  639.       P(1,2)=P(1,2) + DHTR
  640.       P(2,2)=P(2,2) + DHTS
  641.       P(3,2)=P(3,2) + DHTT
  642.       P(1,3)=P(1,3) + DHTR
  643.       P(2,3)=P(2,3) + DHTS
  644.       P(3,3)=P(3,3) + DHTT
  645.       P(1,6)=P(1,6) + DHBR
  646.       P(2,6)=P(2,6) + DHBS
  647.       P(3,6)=P(3,6) + DHBT
  648.       P(1,7)=P(1,7) + DHBR
  649.       P(2,7)=P(2,7) + DHBS
  650.       P(3,7)=P(3,7) + DHBT
  651.       P(1,10)=P(1,10) - DHTR - DHTR
  652.       P(2,10)=P(2,10) - DHTS - DHTS
  653.       P(3,10)=P(3,10) - DHTT - DHTT
  654.       P(1,14)=P(1,14) - DHBR - DHBR
  655.       P(2,14)=P(2,14) - DHBS - DHBS
  656.       P(3,14)=P(3,14) - DHBT - DHBT
  657. C
  658.       GO TO 80
  659. C
  660. C     CORRECTIONS FOR TETRAHEDRA
  661. C
  662.    70 RSF=RR*SS*0.0625
  663.       STF=SS*TT*0.0625
  664.       RTF=RR*TT*0.0625
  665.       RTT=R*TT*0.125
  666.       RRT=RR*T*0.125
  667.       DHB=RM*STF
  668.       DHC=SP*RTF
  669.       DHD=TM*RSF
  670.       DHE=SM*RTF
  671.       DHF=RR*STF*0.5
  672.       DHBR=-STF
  673.       DHCR=-SP*RTT
  674.       DHDR=-R*SS*TM*0.125
  675.       DHER=-SM*RTT
  676.       DHFR=-R*STF
  677.       DHBS=-RM*S*TT*0.125
  678.       DHCS= RTF
  679.       DHDS=-S*RR*TM*0.125
  680.       DHES=-RTF
  681.       DHFS=-S*RTF
  682.       DHBT=-RM*SS*T*0.125
  683.       DHCT=-SP*RRT
  684.       DHDT=-RSF
  685.       DHET=-SM*RRT
  686.       DHFT=-T*RSF
  687.       SBDF=DHB+DHD-DHF
  688.       SBDFR=DHBR+DHDR-DHFR
  689.       SBDFS=DHBS+DHDS-DHFS
  690.       SBDFT=DHBT+DHDT-DHFT
  691. C
  692.       H( 5)=H( 5) + DHC + DHE
  693.       H( 6)=H( 6) + DHC + SBDF
  694.       H( 7)=H( 7) + DHE + SBDF
  695.       H(13)=H(13) - DHC - DHC
  696.       H(14)=H(14) - SBDF - SBDF
  697.       H(15)=H(15) - DHE - DHE
  698. C
  699.       P(1,5)=P(1,5) + DHCR + DHER
  700.       P(2,5)=P(2,5) + DHCS + DHES
  701.       P(3,5)=P(3,5) + DHCT + DHET
  702.       P(1,6)=P(1,6) + DHCR + SBDFR
  703.       P(2,6)=P(2,6) + DHCS + SBDFS
  704.       P(3,6)=P(3,6) + DHCT + SBDFT
  705.       P(1,7)=P(1,7) + DHER + SBDFR
  706.       P(2,7)=P(2,7) + DHES + SBDFS
  707.       P(3,7)=P(3,7) + DHET + SBDFT
  708.       P(1,13)=P(1,13) - DHCR - DHCR
  709.       P(2,13)=P(2,13) - DHCS - DHCS
  710.       P(3,13)=P(3,13) - DHCT - DHCT
  711.       P(1,14)=P(1,14) - SBDFR - SBDFR
  712.       P(2,14)=P(2,14) - SBDFS - SBDFS
  713.       P(3,14)=P(3,14) - SBDFT - SBDFT
  714.       P(1,15)=P(1,15) - DHER - DHER
  715.       P(2,15)=P(2,15) - DHES - DHES
  716.       P(3,15)=P(3,15) - DHET - DHET
  717. C
  718. C
  719. C     EVALUATE JACOBIAN MATRIX AT POINT (R,S,T)
  720. C
  721. C
  722.    80 IF (IELX.LT.IELD) RETURN
  723.    81 IF (IINTP.GT.0) GO TO 110
  724.       DO 100 I=1,3
  725.       DO 100 J=1,3
  726.       DUM=0.0
  727.       DO 90 K=1,IELX
  728.    90 DUM=DUM + P(I,K)*XX(J,K)
  729.   100 XJ(I,J)=DUM
  730. C
  731. C
  732. C     COMPUTE DETERMINANT OF JACOBIAN MATRIX AT POINT (R,S,T)
  733. C
  734. C
  735.       DET = XJ(1,1)*XJ(2,2)*XJ(3,3)
  736.      1    + XJ(1,2)*XJ(2,3)*XJ(3,1)
  737.      2    + XJ(1,3)*XJ(2,1)*XJ(3,2)
  738.      3    - XJ(1,3)*XJ(2,2)*XJ(3,1)
  739.      4    - XJ(1,2)*XJ(2,1)*XJ(3,3)
  740.      5    - XJ(1,1)*XJ(2,3)*XJ(3,2)
  741.       IF (DET.GT.1.0D-08) GO TO 110
  742.       WRITE (6,2000) NG,NEL
  743.       STOP
  744.   110 IF (IELX.LT.IELD) GO TO 42
  745. C
  746. C
  747.       RETURN
  748. C
  749. C
  750.  2000 FORMAT (////14H *** ERROR ***/18H ELEMENT GROUP NO.,I5/
  751.      1        44H ZERO JACOBIAN DETERMINANT FOR 3/D ELEMENT (,I4,1H))
  752. C
  753. C
  754.       END
  755. C *CDC* *DECK STST3F
  756. C *UNI* )FOR,IS N.STST3F, R.STST3F
  757.       SUBROUTINE STST3F (DISD,PRESS,PROP)
  758. C
  759. C
  760. C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
  761. C .                                                                   .
  762. C .     S U B R O U T I N E                                           .
  763. C .                                                                   .
  764. C .        TO CALCULATE PRESSURES FOR ALL FLUID MODELS                .
  765. C .                                                                   .
  766. C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
  767. C
  768. C
  769.       IMPLICIT REAL*8 (A-H,O-Z)
  770.       COMMON /EL/ IND,ICOUNT,NPAR(20),NUMEG,NEGL,NEGNL,IMASS,IDAMP,ISTAT
  771.      1           ,NDOF,KLIN,IEIG,IMASSN,IDAMPN
  772.       COMMON /MTMD3D/ D(6,6),STRESS(6),STRAIN(6),IPT,NEL,IPS
  773. C
  774.       DIMENSION DISD(1),DN(6),PROP(1)
  775. C
  776.       EQUIVALENCE (NPAR(3),INDNL), (NPAR(15),MODEL)
  777. C
  778. C
  779. C     D E F I N I T I O N   O F   S T R A I N
  780. C
  781. C
  782. C     LINEAR STRAIN TERMS
  783. C
  784.       STRAIN(1)=DISD(1)
  785.       STRAIN(2)=DISD(2)
  786.       STRAIN(3)=DISD(3)
  787.       IF (INDNL.EQ.0) GO TO 80
  788. C
  789. C     NONLINEAR STRAIN TERMS
  790. C
  791.       DN(1)=0.5*(DISD(1)*DISD(1)+DISD(6)*DISD(6)+DISD(8)*DISD(8))
  792.       DN(2)=0.5*(DISD(4)*DISD(4)+DISD(2)*DISD(2)+DISD(9)*DISD(9))
  793.       DN(3)=0.5*(DISD(5)*DISD(5)+DISD(7)*DISD(7)+DISD(3)*DISD(3))
  794. C
  795. C     CALCULATE ALMANSI STRAINS (UPDATED LAGRANGIAN FORMULATION)
  796. C
  797. C
  798.       DO 44 I=1,3
  799.    44 STRAIN(I)=STRAIN(I)-DN(I)
  800. C
  801. C     C A L C U L A T E  P R E S S U R E S
  802. C
  803. C
  804.    80 GO TO (1,1,1,1,1,1), MODEL
  805. C
  806. C
  807. C.... MODEL = 1     C O N S T A N T  B U L K  M O D U L U S
  808. C
  809.     1 A1=PROP(1)
  810.       STRESS(1)=A1*(STRAIN(1) + STRAIN(2) + STRAIN(3))
  811.       PRESS=-STRESS(1)
  812.       RETURN
  813. C
  814. C
  815.       END
  816. C *CDC* *DECK OVL170
  817. C *CDC*      OVERLAY (ADINA,17,0)
  818. C *CDC* *DECK LOAD
  819. C *UNI* )FOR,IS  N.LOAD,  R.LOAD
  820. C *CDC*      PROGRAM LOAD
  821.       SUBROUTINE LOAD
  822. C
  823.       IMPLICIT REAL*8 (A-H,O-Z)
  824. C
  825. C     OVERLAY TO CALCULATE THE LOAD VECTORS FOR SOLUTION
  826. C
  827.       COMMON /ISUBST/ ISUB,NSUBST,NSUB,NTUSE,NEGLS,NEGNLS,NUMNPS,
  828.      1                NODCON,NODRET,IDOFS(6),NDOFS,NEQS,NWKS,MAXES,
  829.      2                MAS,NSTAPE,ILOA(13),KRSIZM,NEQC
  830.       COMMON /SOL/ NUMNP,NEQ,NWK,NWM,NWC,NUMEST,MIDEST,MAXEST,NSTE,MA
  831.       COMMON /TEMPRT/ TEMP1,TEMP2,ITEMPR,ITP96,N6A,N6B
  832.       COMMON /LOA/ NLOAD,NPR2,NPR3,NPBM,NP3DB,NPPL,NPSH,NODE3,IDGRAV,
  833.      1             NPDIS,NTEMP
  834.       COMMON /DIMETC/ N01,N02,N03,N04,N05,N06,N07,N08,N09
  835.       COMMON /TIMFN/ TEND,NTFN,NPTM
  836.       COMMON /DISCON/ NDISCE,NIDM
  837.       COMMON /CONST/ DT,DTA,A0,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11
  838.      1              ,A12,A13,A14,A15,A16,A17,A18,A19,A20,DTOD,IOPE
  839.       COMMON /VAR/ NG,MODEX,IUPDT,KSTEP,ITEMAX,IEQREF,ITE,KPRI,
  840.      1             IREF,IEQUIT,IPRI,KPLOTN,KPLOTE
  841.       COMMON /EL/ IND,ICOUNT,NPAR(20),NUMEG,NEGL,NEGNL,IMASS,IDAMP,ISTAT
  842.      1           ,NDOF,KLIN,IEIG,IMASSN,IDAMPN
  843.       COMMON /SKEW/ NSKEWS
  844.       COMMON /MDFRDM/ IDOF(6)
  845.       COMMON /DIM/ N0,N1,N2,N3,N4,N5,N6,N7,N8,N9,N10,N11,N12,N13,N14,N15
  846.       COMMON /PRCON/ IDATWR,IPRIC,NPB,IDC,IVC,IAC,IPC,IPNODE(3,15)
  847.       COMMON /MPRNT/ IOUTPT,ISTPRT
  848.       COMMON /DPR/ ITWO
  849.       COMMON /PRSHAP/ KSHAPE
  850.       COMMON A(1)
  851.       REAL A
  852.       DIMENSION IA(1)
  853.       EQUIVALENCE (A(1),IA(1))
  854.       DIMENSION XTYPE(6)
  855.       DATA XTYPE /8H  2-D   ,8H  3-D   ,8H  BEAM  ,8HISO/BEAM,8H PLATE
  856.      1 ,8H SHELL  /
  857. C
  858.       IF (ISUB.GT.0) GO TO 500
  859. C
  860.       IF (IDATWR.GT.1) GO TO 15
  861. C
  862.       NLDT=NLOAD+NPR2+NPR3+NPBM+NP3DB+NPPL+NPSH+IDGRAV+NPDIS+NTEMP
  863.       IF(NLDT.GT.0)GO TO 10
  864.       GO TO 15
  865.    10 WRITE (6,2050)
  866.    15 CONTINUE
  867. C
  868. C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
  869. C .                                                                   .
  870. C .-- N O T E S ---------                                             .
  871. C .                                                                   .
  872. C .   1. BLANK COMMON VARIABLE A IS ALWAYS DECLARED SINGLE PRECISION. .
  873. C .   2. WHEN NSTE.EQ.0, LOAD VECTORS ARE NOT WRITTEN ONTO TAPE.      .
  874. C .   3. WHEN MODEX.EQ.0, LOAD VECTORS ARE NOT CALCULATED             .
  875. C .      (REGARDLESS OF THE VALUE OF NSTE).                           .
  876. C .   4. EVEN WHEN MODEX.EQ.0, TEMPERATURE TAPE IS CREATED,           .
  877. C .      PROVIDED ITP96.EQ.2.                                         .
  878. C .                                                                   .
  879. C .                                                                   .
  880. C .-- S T O R A G E -----                                             .
  881. C .                                                                   .
  882. C .   ADDRESS      VARIABLE       LENGTH                              .
  883. C .                                                                   .
  884. C .      M1        ID             NDOF*NUMNP (NSTE.GT.0 ONLY)         .
  885. C .      M1A       NODSYS         NUMNP (IF NSKEWS.GT.0 ONLY)         .
  886. C .      M2        RG             NTFN*NSTE*ITWO                      .
  887. C .      M3        RGST           NTFN                                .
  888. C .      M4        R              (NUMNP OR NEQ)*ITWO                 .
  889. C .      M5        TIMES          NTFN*NPTM*ITWO                      .
  890. C .      M6        RV             NTFN*NPTM*ITWO                      .
  891. C .      M7        IPNT           NTFN                                .
  892. C .                                                                   .
  893. C .      M8        X              NUMNP*ITWO                          .
  894. C .      M9        Y              NUMNP*ITWO                          .
  895. C .      M10       Z              NUMNP*ITWO                          .
  896. C .                                                                   .
  897. C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
  898. C
  899.       TEND=(NSTE-1)*DT + DTA
  900.       M1=N2
  901.       M1A=M1
  902.       IF (NSTE.GT.0) M1A=M1 + NDOF*NUMNP
  903.       M2=M1A
  904.       IF (NSKEWS.NE.0) M2=M1A + NUMNP
  905.       M3=M2 + NTFN*NSTE*ITWO
  906.       M4=M3 + NTFN*ITWO
  907. C
  908.       MLONG=NEQ
  909.       IF (NTEMP.EQ.0) GO TO 20
  910.       IF (NUMNP.GT.NEQ) MLONG=NUMNP
  911.    20 IF (NTFN.GT.MLONG) MLONG=NTFN
  912.       M5=M4 + MLONG*ITWO
  913. C
  914.       M6=M5 + NTFN*NPTM*ITWO
  915.       M7=M6 + NTFN*NPTM*ITWO
  916.       M8=M7 + NTFN
  917.       M9=M8 + NUMNP*ITWO
  918.       M10=M9 + NUMNP*ITWO
  919.       M11=M10 + NUMNP*ITWO
  920.       NLDT=NPR2+NPR3+NPBM+NP3DB+NPPL+NPSH
  921.       IF(NLDT.EQ.0) M11=M8
  922. C
  923. C * * * * * * * * * * * * * * * * * * * * * * * * *
  924. C *   C O N C E N T R A T E D   L O A D I N G     *
  925. C * * * * * * * * * * * * * * * * * * * * * * * * *
  926. C
  927. C
  928. C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
  929. C .                                                                   .
  930. C .   STORAGE FOR CONCENTRATED LOADING                                .
  931. C .                                                                   .
  932. C .      M103      NODE           NLOAD                               .
  933. C .      M104      IDIRN          NLOAD                               .
  934. C .      M105      NCUR           NLOAD                               .
  935. C .      M106      FACTOR         NLOAD*ITWO                          .
  936. C .      M107      ARTIME         NLOAD*ITWO                          .
  937. C .      M108      KL             NLOAD                               .
  938. C .                                                                   .
  939. C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
  940. C
  941.       M103=M11
  942.       M104=M103 + NLOAD
  943.       M105=M104 + NLOAD
  944.       M106=M105 + NLOAD
  945.       M107=M106 + NLOAD*ITWO
  946.       M108=M107 + NLOAD*ITWO
  947.       M109=M108 + NLOAD
  948.       MFINAL=M109 - 1
  949. C
  950.       IF(ISTPRT.GT.0) WRITE(6,2000)
  951.       CALL SIZE (MFINAL)
  952. C
  953. C . . . . . . . . . . . . . . . . . . . . . . . . .
  954. C .      1.READ ID ARRAY INTO CORE                .
  955. C . . . . . . . . . . . . . . . . . . . . . . . . .
  956. C
  957.       REWIND 3
  958.       REWIND 12
  959.       IF (NSTE.EQ.0) GO TO 30
  960.       MEND=M1A - 1
  961.       REWIND 8
  962.       READ (8) (IA(I),I=M1,MEND)
  963. C
  964. C . . . . . . . . . . . . . . . . . . . . . . . . .
  965. C .      2.READ TIME FUNCTIONS                    .
  966. C . . . . . . . . . . . . . . . . . . . . . . . . .
  967. C
  968.    30 IF (NTFN.EQ.0) GO TO 40
  969.       CALL TFUNCT (A(M2),A(M3),A(M5),A(M6),A(M7),NTFN,NPTM)
  970. C
  971.    40 NT=3
  972.       NLDT=NPR2+NPR3+NPBM+NP3DB+NPPL+NPSH
  973.       IF(NLDT.NE.0)GO TO 42
  974.       IF (NSKEWS.EQ.0) GO TO 45
  975.       DO 41 I=1,3
  976.    41 READ (NT)
  977.       GO TO 43
  978. C
  979. C     READ XYZ COORDINATE VECTORS INTO CORE
  980. C
  981.    42 NN=M9 - 1
  982.       READ (NT) (A(I),I=M8,NN)
  983.       NN=M10 - 1
  984.       READ (NT) (A(I),I=M9,NN)
  985.       NN=M11 - 1
  986.       READ (NT) (A(I),I=M10,NN)
  987.    43 NN=M2 - 1
  988.       IF (NSKEWS.GT.0) READ (NT) (IA(I),I=M1A,NN)
  989.       REWIND NT
  990. C
  991.    45 NW=1
  992.       IF (NPR2.GT.0) NW=NW + 1
  993.       IF (NPR3.GT.0) NW=NW + 1
  994.       IF (NPBM.GT.0) NW=NW + 1
  995.       IF (NP3DB.GT.0) NW=NW + 1
  996.       IF (NPPL.GT.0) NW=NW + 1
  997.       IF (NPSH .GT.0) NW=NW + 1
  998.       IF ( IDGRAV.GT.0) NW=NW + 1
  999.       NWLOAD=3
  1000.       NRLOAD=12
  1001.       II=NW - (NW/2)*2
  1002.       IF (II.NE.0) GO TO 50
  1003.       NWLOAD=12
  1004.       NRLOAD=3
  1005. C
  1006. C . . . . . . . . . . . . . . . . . . . . . . . . .
  1007. C .      4.READ CONCENTRATED LOADS                .
  1008. C . . . . . . . . . . . . . . . . . . . . . . . . .
  1009. C
  1010.    50 CALL CLOADS (A(M1),A(M2),A(M3),A(M4),A(M103),A(M104),
  1011.      1             A(M105),A(M106),A(M107),A(M108),A(N01),A(N02),A(N03),
  1012.      2             IDOF,NTFN,NDOF,NEQ,NIDM,NWLOAD)
  1013. C
  1014.       NSAVE=NRLOAD
  1015.       NRLOAD=NWLOAD
  1016.       NWLOAD=NSAVE
  1017. C
  1018. C
  1019. C * * * * * * * * * * * * * * * * * * * * * * * * *
  1020. C *   R E A D   P R E S S U R E   L O A D I N G   *
  1021. C * * * * * * * * * * * * * * * * * * * * * * * * *
  1022. C
  1023. C
  1024.       IDUMMY=0
  1025.   100 IDUMMY=IDUMMY + 1
  1026.       GO TO (210,215,125,220,225,230,200), IDUMMY
  1027. C
  1028. C
  1029. C     CALL SUBROUTINE TO CALCULATE CONCENTRATED NODAL POINT
  1030. C     LOADING DUE TO 2/D PRESSURE LOADING
  1031. C
  1032.   210 IF (NPR2.EQ.0) GO TO 100
  1033.       NODE2=3
  1034.       NDFR2=6
  1035. C
  1036.       M101=M11
  1037.       M102=M101 + NDFR2*NPR2*ITWO
  1038.       M103=M102 + NDFR2*NPR2
  1039.       M104=M103 + NPR2*ITWO
  1040.       M105=M104 + NPR2
  1041.       M106=M105 + 2*NPR2*ITWO
  1042.       M107=M106 + 3*NPR2
  1043.       M108=M107 + NPR2*ITWO
  1044.       M109=M108 + NPR2
  1045.       M110=M109 + NPR2
  1046.       M111=M110 + NPR2
  1047.       MFINAL=M111-1
  1048. C
  1049.       IF (ISTPRT.GT.0) WRITE(6,2020) XTYPE(IDUMMY)
  1050.       CALL SIZE (MFINAL)
  1051. C
  1052.       CALL TODPRL (A(M1),A(M2),A(M3),A(M4),A(M8),A(M9),A(M10),
  1053.      1             A(M101),A(M102),A(M103),A(M104),A(M105),
  1054.      1             A(M106),A(M107),A(M108),A(M109),A(M110),A(N01),
  1055.      2             A(N02),A(N03),A(N06),A(M1A),NODE2,NDFR2,NDOF,NTFN,
  1056.      3             NEQ,NIDM,IDOF,NSKEWS,NRLOAD,NWLOAD,NUMNP)
  1057. C
  1058.       NSAVE=NRLOAD
  1059.       NRLOAD=NWLOAD
  1060.       NWLOAD=NSAVE
  1061.       GO TO 100
  1062. C
  1063. C     CALL SUBROUTINE TO CALCULATE CONCENTRATED NODAL POINT
  1064. C     FORCES DUE TO PRESSURE LOADING
  1065. C     A)          FOR 3-D ELEMENTS
  1066. C     B)          FOR ISO/BEAM
  1067. C     C)          FOR PLATE
  1068. C     D)          FOR SHELLS
  1069. C
  1070.   215 IF (NPR3.LE.0) GO TO 100
  1071.       NPR=NPR3
  1072.       NODEP=8
  1073.       NDFRP=24
  1074.   106 CONTINUE
  1075.       M101=M11
  1076.       M102=M101 + NDFRP*NPR*ITWO
  1077.       M103=M102 + NDFRP*NPR
  1078.       M104=M103 + NPR*ITWO
  1079.       M105=M104 + NPR
  1080.       M106=M105 + 4*NPR*ITWO
  1081.       M107=M106 + NODEP*NPR
  1082.       M108=M107 + NPR
  1083.       M109=M108 + NPR
  1084.       NFACE=0
  1085.       IF (NODEP.EQ.5) NFACE=1
  1086.       M110 = M109 + NFACE*NPR
  1087.       M111=M110 + KSHAPE*NPR
  1088.       MFINAL = M111 - 1
  1089. C
  1090.       IF (ISTPRT.GT.0) WRITE(6,2020) XTYPE(IDUMMY)
  1091.       CALL SIZE(MFINAL)
  1092. C
  1093.       CALL THDPRL(A(M1),A(M2),A(M3),A(M4),A(M8),A(M9),A(M10),
  1094.      1            A(M101),A(M102),A(M103),A(M104),A(M105),A(M106),
  1095.      2            A(M107),A(M108),A(M109),A(M110),
  1096.      3            A(N01),A(N02),A(N03),A(N06),A(M1A),
  1097.      4            NPR,NODEP,NDFRP,NDOF,NTFN,NEQ,NIDM,IDOF,NSKEWS,
  1098.      5            NRLOAD,NWLOAD,NUMNP)
  1099.       NSAVE=NRLOAD
  1100.       NRLOAD=NWLOAD
  1101.       NWLOAD=NSAVE
  1102.       GO TO 100
  1103. C
  1104. C
  1105.   220 IF (NP3DB.LE.0) GO TO 100
  1106.       NPR=NP3DB
  1107. C
  1108. C     NUMBER OF NODES FOR A 3-D BEAM=4
  1109. C     NODEP=5 TO ACCOMODATE FOR THE AUXILLIARY NODE
  1110. C
  1111. C     NFACE.EQ.1 FOR ISO/BEAM FOR STORING INFORMATION OF THE
  1112. C                FACE ON WHICH LOAD IS APPLIED
  1113. C
  1114.       NODEP=5
  1115.       NDFRP=12
  1116.       GO TO 106
  1117. C
  1118.   225 IF (NPPL.LE.0) GO TO 100
  1119.       NPR=NPPL
  1120.       NODEP=3
  1121.       NDFRP=9
  1122.       GO TO 106
  1123. C
  1124.   230 IF (NPSH.LE.0) GO TO 200
  1125.       NPR=NPSH
  1126.       NODEP=16
  1127.       NDFRP=48
  1128.       GO TO 106
  1129. C
  1130. C
  1131. C
  1132. C * * * * * * * * * * * * * * * * * * * * * * * * * *
  1133. C * B E A M  D I S T R I B U T E D  L O A D I N G   *
  1134. C * * * * * * * * * * * * * * * * * * * * * * * * * *
  1135. C
  1136.   125 IF (NPBM.EQ.0) GO TO 100
  1137.       M101=M11
  1138.       M102=M101 + 12*NPBM*ITWO
  1139.       M103=M102 + 12*NPBM
  1140.       M104=M103 + NPBM*ITWO
  1141.       M105=M104 + NPBM
  1142.       M106=M105 + 2*NPBM*ITWO
  1143.       M107=M106 + 3*NPBM
  1144.       M108=M107 + NPBM
  1145.       M109=M108 + NPBM
  1146.       M110=M109 + NPBM
  1147.       MFINAL=M110-1
  1148. C
  1149.       IF (ISTPRT.GT.0) WRITE(6,2020) XTYPE(IDUMMY)
  1150.       CALL SIZE (MFINAL)
  1151.       CALL BMLOAD (A(M1),A(M2),A(M3),A(M4),A(M8),A(M9),A(M10),
  1152.      1             A(M101),A(M102),A(M103),A(M104),A(M105),A(M106),
  1153.      2             A(M107),A(M108),A(N01),A(N02),A(N03),A(N06),
  1154.      3             A(M1A),A(M109),IDOF,NDOF,NTFN,NEQ,NIDM,
  1155.      4             NSKEWS,NRLOAD,NWLOAD,NUMNP)
  1156. C
  1157.       NSAVE=NRLOAD
  1158.       NRLOAD=NWLOAD
  1159.       NWLOAD=NSAVE
  1160.       GO TO 100
  1161. C
  1162. C * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  1163. C *   M A S S   P R O P O R T I O N A L   L O A D I N G   *
  1164. C * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  1165. C
  1166.   200 IF (IDGRAV.EQ.0) GO TO 250
  1167.       M101=M8
  1168.       M102=M8 + NEQ*ITWO
  1169.       CALL GRAVL (A(M1),A(M2),A(M4),A(M101),A(N06),A(M1A),
  1170.      1            NEQ,NDOF,NTFN,MODEX,NRLOAD,NWLOAD,NUMNP,IDOF)
  1171. C
  1172. C * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  1173. C *   P R E S C R I B E D   D I S P L A C E M E N T S   D A T A   *
  1174. C * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  1175. C
  1176.   250 IF (NPDIS.EQ.0) GO TO 290
  1177.       NTAPE=13
  1178.       M101=M8 + NPDIS
  1179.       M102=M101 + NPDIS
  1180.       M103=M102 + NPDIS
  1181.       M104=M103 + NPDIS*ITWO
  1182.       M105=M104 + NPDIS*ITWO
  1183.       M106=M105 + NPDIS
  1184.       MFINAL=M106 - 1
  1185. C
  1186.       IF(ISTPRT.GT.0) WRITE(6,2025)
  1187.       CALL SIZE (MFINAL)
  1188. C
  1189.       CALL PDISP (A(M1),A(M2),A(M3),A(M4),A(M8),A(M101),A(M102),
  1190.      1            A(M103),A(M104),A(M105),A(N04),NTFN,NDOF,NPDIS,NTAPE)
  1191. C
  1192. C * * * * * * * * * * * * * * * * * * * * * * * * *
  1193. C *   R E A D   T E M P E R A T U R E   D A T A   *
  1194. C *   A N D   C R E A T E   T A P E               *
  1195. C * * * * * * * * * * * * * * * * * * * * * * * * *
  1196. C
  1197.   290 IF (ITP96.NE.2) GO TO 300
  1198. C
  1199.       M101=M8
  1200.       M102=M101 + NTEMP
  1201.       M103=M102 + NTEMP
  1202.       M104=M103 + NTEMP*ITWO
  1203.       M105=M104 + NTEMP*ITWO
  1204.       M106=M105 + NTEMP
  1205.       MFINAL=M106-1
  1206. C
  1207.       IF(ISTPRT.GT.0) WRITE(6,2030)
  1208.       CALL SIZE (MFINAL)
  1209. C
  1210.       CALL TLOADS (A(M4),A(M5),A(M6),A(M7),A(M101),A(M102),A(M103),
  1211.      1             A(M104),A(M105),NPTM)
  1212. C
  1213. C
  1214.   300 GO TO 599
  1215. C
  1216. C
  1217. C     S U B S T R U C T U R E   L O A D   C A L C U L A T I O N
  1218. C
  1219. C
  1220.   500 CALL SLOAD
  1221. C
  1222. C
  1223.   599 CONTINUE
  1224. C
  1225. C
  1226.       RETURN
  1227.  2000 FORMAT (////44H **STORAGE CHECK FOR CONCENTRATED LOAD INPUT)
  1228.  2020 FORMAT(////,21H **STORAGE CHECK FOR ,A8,29H ELEMENT PRESSURE LOAD
  1229.      1INPUT  )
  1230.  2025 FORMAT (////40H **STORAGE CHECK FOR DISPLACEMENTS INPUT  )
  1231.  2030 FORMAT (////44H **STORAGE CHECK FOR NODAL TEMPERATURE INPUT)
  1232. C
  1233.  2050 FORMAT (1H1,37H A P P L I E D   L O A D S   D A T A  )
  1234. C
  1235.       END
  1236. C *CDC* *DECK SLOAD
  1237. C *UNI* )FOR,IS  N.SLOAD,  R.SLOAD
  1238.       SUBROUTINE SLOAD
  1239. C
  1240. C     PROGRAM TO CALCULATE SUBSTRUCTURE LOAD VECTORS
  1241. C
  1242.       IMPLICIT REAL*8 (A-H,O-Z)
  1243. C
  1244.       COMMON /ISUBST/ ISUB,NSUBST,NSUB,NTUSE,NEGLS,NEGNLS,NUMNPS,
  1245.      1                NODCON,NODRET,IDOFS(6),NDOFS,NEQS,NWKS,MAXES,
  1246.      2                MAS,NSTAPE,ILOA(13),KRSIZM,NEQC
  1247.       COMMON /SOL/ NUMNP,NEQ,NWK,NWM,NWC,NUMEST,MIDEST,MAXEST,NSTE,MA
  1248.       COMMON /LOA/ NLOAD,NPR2,NPR3,NPBM,NP3DB,NPPL,NPSH,NODE3,IDGRAV,
  1249.      1             NPDIS,NTEMP
  1250.       COMMON /DIM/ N0,N1,N2,N3,N4,N5,N6,N7,N8,N9,N10,N11,N12,N13,N14,N15
  1251.       COMMON /DIMETC/ N01,N02,N03,N04,N05,N06,N07,N08,N09
  1252.       COMMON /TIMFN/ TEND,NTFN,NPTM
  1253.       COMMON /SLOA/ N09C,ITMFN,ICOORD,NUSE
  1254.       COMMON /DISCON/ NDISCE,NIDM
  1255.       COMMON /SKEW/ NSKEWS
  1256.       COMMON /CONST/ DT,DTA,A0,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11
  1257.      1              ,A12,A13,A14,A15,A16,A17,A18,A19,A20,DTOD,IOPE
  1258.       COMMON /VAR/ NG,MODEX,IUPDT,KSTEP,ITEMAX,IEQREF,ITE,KPRI,
  1259.      1             IREF,IEQUIT,IPRI,KPLOTN,KPLOTE
  1260.       COMMON /EL/ IND,ICOUNT,NPAR(20),NUMEG,NEGL,NEGNL,IMASS,IDAMP,ISTAT
  1261.      1           ,NDOF,KLIN,IEIG,IMASSN,IDAMPN
  1262.       COMMON /PRCON/ IDATWR,IPRIC,NPB,IDC,IVC,IAC,IPC,IPNODE(3,15)
  1263.       COMMON /MPRNT/ IOUTPT,ISTPRT
  1264.       COMMON /DPR/ ITWO
  1265.       COMMON /PRSHAP/ KSHAPE
  1266.       COMMON A(1)
  1267.       REAL A
  1268.       DIMENSION IA(1)
  1269.       EQUIVALENCE (A(1),IA(1))
  1270.       DIMENSION XTYPE(6)
  1271.       DATA XTYPE /8H  2-D   ,8H  3-D   ,8H  BEAM  ,8HISO/BEAM,8H PLATE
  1272.      1 ,8H SHELL  /
  1273. C
  1274. C
  1275.       IF (IDATWR.GT.1) GO TO 15
  1276.       NLDT=NLOAD+NPR2+NPR3+NPBM+NP3DB+NPPL+NPSH
  1277.    10 WRITE (6,2050)
  1278.       WRITE (6,2100) NSUB,NUSE
  1279.       IF (NLDT.EQ.0) WRITE (6,2111)
  1280.    15 CONTINUE
  1281. C
  1282. C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
  1283. C .                                                                   .
  1284. C .-- S T O R A G E -----                                             .
  1285. C .                                                                   .
  1286. C .   ADDRESS      VARIABLE       LENGTH                              .
  1287. C .                                                                   .
  1288. C .      M1        RG             NTFN*NSTE*ITWO                      .
  1289. C .      M2        RGST           NTFN                                .
  1290. C .      M3        TIMES          NTFN*NPTM*ITWO                      .
  1291. C .      M4        RV             NTFN*NPTM*ITWO                      .
  1292. C .      M5        IPNT           NTFN                                .
  1293. C .                                                                   .
  1294. C .      M6        R              NUMNPS*ITWO                         .
  1295. C .      M7        ID             NDOFS*NUMNPS                        .
  1296. C .      M8        X              NUMNPS*ITWO                         .
  1297. C .      M9        Y              NUMNPS*ITWO                         .
  1298. C .      M10       Z              NUMNPS*ITWO                         .
  1299. C .                                                                   .
  1300. C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
  1301. C
  1302.       TEND=(NSTE-1)*DT + DTA
  1303. C
  1304. C . . . . . . . . . . . . . . . . . . . . . . . . .
  1305. C .        READ TIME FUNCTIONS                    .
  1306. C . . . . . . . . . . . . . . . . . . . . . . . . .
  1307. C
  1308.       M1=N09C
  1309.       M2=M1 + NTFN*NSTE*ITWO
  1310.       M3=M2 + NTFN*ITWO
  1311.       M4=M3 + NTFN*NPTM*ITWO
  1312.       M5=M4 + NTFN*NPTM*ITWO
  1313.       IF (ITMFN.GT.0) GO TO 100
  1314. C
  1315.       IF (NTFN.EQ.0) GO TO 100
  1316.       CALL TFUNCT (A(M1),A(M2),A(M3),A(M4),A(M5),NTFN,NPTM)
  1317.       ITMFN=1
  1318. C
  1319. C . . . . . . . . . . . . . . . . . . . . . . . . . . .
  1320. C .   READ ID ARRAY AND NODAL COORDINATES INTO CORE   .               .
  1321. C . . . . . . . . . . . . . . . . . . . . . . . . . . .
  1322. C
  1323.   100 M6=N2
  1324.       M7=M6 + NEQS*ITWO
  1325.       M7A=M7 + NDOFS*NUMNPS
  1326.       M8=M7A
  1327.       IF (NSKEWS.GT.0) M8=M7A + NUMNPS
  1328.       M9=M8 + NUMNPS*ITWO
  1329.       M10=M9 + NUMNPS*ITWO
  1330.       M11=M10 + NUMNPS*ITWO
  1331.       IF (ICOORD.EQ.0) GO TO 150
  1332.       DO 120 I=1,4
  1333.   120 BACKSPACE 15
  1334.   150 ICOORD=1
  1335. C
  1336.       NT=15
  1337.       MEND=M8 - 1
  1338.       READ (NT) (IA(I),I=M7,MEND)
  1339. C
  1340.       NN=M9 - 1
  1341.       READ (NT) (A(I),I=M8,NN)
  1342.       NN=M10 - 1
  1343.       READ (NT) (A(I),I=M9,NN)
  1344.       NN=M11 - 1
  1345.       READ (NT) (A(I),I=M10,NN)
  1346. C
  1347. C * * * * * * * * * * * * * * * * * * * * * * * * *
  1348. C *   C O N C E N T R A T E D   L O A D I N G     *
  1349. C * * * * * * * * * * * * * * * * * * * * * * * * *
  1350. C
  1351.       M103=M11
  1352.       M104=M103 + NLOAD
  1353.       M105=M104 + NLOAD
  1354.       M106=M105 + NLOAD
  1355.       M107=M106 + NLOAD*ITWO
  1356.       M108=M107 + NLOAD*ITWO
  1357.       M109=M108 + NLOAD
  1358.       MFINAL=M109 - 1
  1359. C
  1360.       IF(ISTPRT.GT.0) WRITE(6,2000)
  1361.       CALL SIZE (MFINAL)
  1362. C
  1363.       REWIND 3
  1364.       REWIND 12
  1365.       NW=1
  1366.       IF (NPR2.GT.0) NW=NW + 1
  1367.       IF (NPR3.GT.0) NW=NW + 1
  1368.       IF(NPBM.GT.0) NW=NW + 1
  1369.       IF(NP3DB.GT.0) NW=NW + 1
  1370.       IF(NPPL.GT.0) NW=NW + 1
  1371.       IF(NPSH.GT.0) NW=NW + 1
  1372.       NWLOAD=3
  1373.       NRLOAD=12
  1374.       II=NW - (NW/2)*2
  1375.       IF (II.NE.0) GO TO 50
  1376.       NWLOAD=12
  1377.       NRLOAD=3
  1378. C
  1379. C . . . . . . . . . . . . . . . . . . . . . . . . .
  1380. C .        READ CONCENTRATED LOADS                .
  1381. C . . . . . . . . . . . . . . . . . . . . . . . . .
  1382. C
  1383.    50 CALL CLOADS (A(M7),A(M1),A(M2),A(M6),A(M103),A(M104),
  1384.      1             A(M105),A(M106),A(M107),A(M108),A(N01),A(N02),A(N03),
  1385.      2             IDOFS,NTFN,NDOFS,NEQS,NIDM,NWLOAD)
  1386. C
  1387.       NSAVE=NRLOAD
  1388.       NRLOAD=NWLOAD
  1389.       NWLOAD=NSAVE
  1390. C
  1391. C
  1392. C * * * * * * * * * * * * * * * * * * * * * * * * *
  1393. C *   R E A D   P R E S S U R E   L O A D I N G   *
  1394. C * * * * * * * * * * * * * * * * * * * * * * * * *
  1395. C
  1396. C
  1397. C     CALL SUBROUTINE TO CALCULATE CONCENTRATED NODAL POINT
  1398. C     LOADING DUE TO 2/D PRESSURE LOADING
  1399. C
  1400.       IDUMMY=0
  1401.   300 IDUMMY=IDUMMY + 1
  1402.       GO TO (310,315,400,320,325,330,850), IDUMMY
  1403. C
  1404.   310 IF (NPR2.EQ.0) GO TO 300
  1405.       NODE2=3
  1406.       NDFR2=6
  1407. C
  1408.       M101=M11
  1409.       M102=M101 + NDFR2*NPR2*ITWO
  1410.       M103=M102 + NDFR2*NPR2
  1411.       M104=M103 + NPR2*ITWO
  1412.       M105=M104 + NPR2
  1413.       M106=M105 + 2*NPR2*ITWO
  1414.       M107=M106 + 3*NPR2
  1415.       M108=M107 + NPR2*ITWO
  1416.       M109=M108 + NPR2
  1417.       M110=M109 + NPR2
  1418.       M111=M110 + NPR2
  1419.       MFINAL=M111-1
  1420. C
  1421.       IF (ISTPRT.GT.0) WRITE(6,2020) XTYPE(IDUMMY)
  1422.       CALL SIZE (MFINAL)
  1423. C
  1424.       CALL TODPRL (A(M7),A(M1),A(M2),A(M6),A(M8),A(M9),A(M10),
  1425.      1             A(M101),A(M102),A(M103),A(M104),A(M105),
  1426.      1             A(M106),A(M107),A(M108),A(M109),A(M110),A(N01),
  1427.      2             A(N02),A(N03),A(N06),A(M7A),NODE2,NDFR2,NDOFS,NTFN,
  1428.      3             NEQS,NIDM,IDOFS,NSKEWS,NRLOAD,NWLOAD,NUMNPS)
  1429. C
  1430.       NSAVE=NRLOAD
  1431.       NRLOAD=NWLOAD
  1432.       NWLOAD=NSAVE
  1433.       GO TO 300
  1434. C
  1435. C     FORCES DUE TO PRESSURE LOADING
  1436. C     A)          3-D ELEMENTS
  1437. C     B)          ISO/BEAM ELEMENTS
  1438. C     C)          FOR PLATE
  1439. C     D)          FOR SHELLS
  1440. C
  1441.   315 IF (NPR3.LE.0) GO TO 300
  1442.       NPR=NPR3
  1443.       NODEP=8
  1444.       NDFRP=24
  1445.   106 CONTINUE
  1446.       M101=M11
  1447.       M102=M101 + NDFRP*NPR*ITWO
  1448.       M103=M102 + NDFRP*NPR
  1449.       M104=M103 + NPR*ITWO
  1450.       M105=M104 + NPR
  1451.       M106=M105 + 4*NPR*ITWO
  1452.       M107=M106 + NODEP*NPR
  1453.       M108=M107 + NPR
  1454.       M109=M108 + NPR
  1455.       NFACE=0
  1456.       IF (NODEP.EQ.5) NFACE=1
  1457.       M110 = M109 + NFACE*NPR
  1458.       M111=M110 + KSHAPE*NPR
  1459.       MFINAL=M111-1
  1460. C
  1461.       IF (ISTPRT.GT.0) WRITE(6,2020) XTYPE(IDUMMY)
  1462.       CALL SIZE(MFINAL)
  1463. C
  1464.       CALL THDPRL(A(M7),A(M1),A(M2),A(M6),A(M8),A(M9),A(M10),
  1465.      1            A(M101),A(M102),A(M103),A(M104),A(M105),A(M106),
  1466.      2            A(M107),A(M108),A(M109),A(M110),
  1467.      3            A(N01),A(N02),A(N03),A(N06),A(M7A),
  1468.      4            NPR,NODEP,NDFRP,NDOFS,NTFN,NEQS,NIDM,IDOFS,NSKEWS,
  1469.      5            NRLOAD,NWLOAD,NUMNPS)
  1470.       NSAVE=NRLOAD
  1471.       NRLOAD=NWLOAD
  1472.       NWLOAD=NSAVE
  1473.       GO TO 300
  1474. C
  1475.   320 IF (NP3DB.LE.0) GO TO 300
  1476.       NPR=NP3DB
  1477. C
  1478. C     NUMBER OF NODES FOR A 3-D BEAM=4
  1479. C     NODEP=5 TO ACCOMODATE FOR THE AUXILLIARY NODE
  1480. C
  1481.       NODEP=5
  1482.       NDFRP=12
  1483.       GO TO 106
  1484.   325 IF (NPPL.LE.0) GO TO 300
  1485.       NPR=NPPL
  1486.       NODEP=3
  1487.       NDFRP=9
  1488.       GO TO 106
  1489. C
  1490.   330 IF (NPSH.LE.0) RETURN
  1491.       NPR=NPSH
  1492.       NODEP=16
  1493.       NDFRP=48
  1494.       GO TO 106
  1495. C
  1496. C
  1497. C * * * * * * * * * * * * * * * * * * * * * * * * * *
  1498. C * B E A M  D I S T R I B U T E D  L O A D I N G  *
  1499. C * * * * * * * * * * * * * * * * * * * * * * * * * *
  1500. C
  1501.   400 IF (NPBM.EQ.0) GO TO 300
  1502.       M101=M11
  1503.       M102=M101 + 12*NPBM*ITWO
  1504.       M103=M102 + 12*NPBM
  1505.       M104=M103 + NPBM*ITWO
  1506.       M105=M104 + NPBM
  1507.       M106=M105 + 2*NPBM*ITWO
  1508.       M107=M106 + 3*NPBM
  1509.       M108=M107 + NPBM
  1510.       M109=M108 + NPBM
  1511.       M110=M109 + NPBM
  1512.       MFINAL=M110-1
  1513.       IF (ISTPRT.GT.0) WRITE(6,2020) XTYPE(IDUMMY)
  1514.       CALL SIZE (MFINAL)
  1515.       CALL BMLOAD (A(M7),A(M1),A(M2),A(M6),A(M8),A(M9),A(M10),
  1516.      1             A(M101),A(M102),A(M103),A(M104),A(M105),A(M106),
  1517.      2             A(M107),A(M108),A(N01),A(N02),A(N03),A(N06),
  1518.      3             A(M7A),A(M109),IDOFS,NDOFS,NTFN,NEQS,NIDM,
  1519.      4             NSKEWS,NRLOAD,NWLOAD,NUMNPS)
  1520.       NSAVE=NRLOAD
  1521.       NRLOAD=NWLOAD
  1522.       NWLOAD=NSAVE
  1523.       GO TO 300
  1524. C
  1525.   850 RETURN
  1526. C
  1527.  2000 FORMAT (////44H **STORAGE CHECK FOR CONCENTRATED LOAD INPUT)
  1528.  2020 FORMAT(////,21H **STORAGE CHECK FOR ,A8,29H ELEMENT PRESSURE LOAD
  1529.      1INPUT  )
  1530. C
  1531.  2050 FORMAT (1H1,62H S U B S T R U C T U R E   A P P L I E D   L O A D
  1532.      1S   D A T A    )
  1533.  2100 FORMAT (//22H SUBSTRUCTURE NUMBER =,I3,24H IDENTIFICATION SET NO =
  1534.      1  I3)
  1535.  2111 FORMAT (//40H NO LOADS APPLIED FOR THIS SUBSTRUCTURE  //)
  1536. C
  1537.       END
  1538. C *CDC* *DECK CLOADS
  1539. C *UNI* )FOR,IS N.CLOADS,R.CLOADS
  1540.       SUBROUTINE CLOADS (ID,RG,RGST,R,NOD,IDIRN,NCUR,FAC,ARTM,KL,
  1541.      1                   NID,IDI,BETA,IDOF,NTFND,NDOF,NEQ,NIDM,NWLOAD)
  1542. C
  1543. C     SUBROUTINE
  1544. C     3. TO READ CONCENTRATED NODAL LOADS
  1545. C     4. TO CALCULATE THE LOAD VECTORS CORRESPONDING
  1546. C        TO THE CONCENTRATED LOADS
  1547. C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
  1548. C
  1549. C
  1550. C     V A R I A B L E S :
  1551. C
  1552. C
  1553. C     ID      = ARRAY OF BOUNDARY CONDITION CODES
  1554. C     RG      = INTERPOLATED VALUES OF TIME FUNCTIONS
  1555. C     R       = LOAD VECTOR
  1556. C     TIMV,RV = ABSCISSA AND ORDINATES OF TIME FUNCTIONS
  1557. C     NOD     = NODAL POINTS TO WHICH LOADS ARE APPLIED
  1558. C     NCUR    = TIME FUNCTION NUMBERS OF LOADS
  1559. C     IDIRN   = DIRECTION CODES OF LOADS
  1560. C     FAC     = MULTIPLIER OF LOADS
  1561. C     ARTM    = ARRIVAL TIMES OF LOADS
  1562. C     KL      = INCREMENTS IN NODES FOR GENERATION
  1563. C
  1564. C
  1565. C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
  1566.       IMPLICIT REAL*8 (A-H,O-Z)
  1567.       COMMON /SOL/ NUMNP,NNN,NWK,NWM,NWC,NUMEST,MIDEST,MAXEST,NSTE,MA
  1568.       COMMON /CONST/ DT,DTA,A0,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11
  1569.      1              ,A12,A13,A14,A15,A16,A17,A18,A19,A20,DTOD,IOPE
  1570.       COMMON /VAR/ NG,MODEX,IUPDT,KSTEP,ITEMAX,IEQREF,ITE,KPRI,
  1571.      1             IREF,IEQUIT,IPRI,KPLOTN,KPLOTE
  1572.       COMMON /ADINAI/ OPVAR(7),TSTART,IRINT,ISTOTE
  1573.       COMMON /SKEW/ NSKEWS
  1574.       COMMON /LOA/ NLOAD,NPR2,NPR3,NPBM,NP3DB,NPPL,NPSH,NODE3,IDGRAV,
  1575.      1             NPDIS,NTEMP
  1576.       COMMON /TIMFN/ TEND,NTFN,NPTM
  1577.       COMMON /PRCON/ IDATWR,IPRIC,NPB,IDC,IVC,IAC,IPC,IPNODE(3,15)
  1578. C
  1579.       DIMENSION ID(NDOF,1),RG(NTFND,1),RGST(1),R(NEQ),NOD(1),IDIRN(1),
  1580.      1          NCUR(1),FAC(1),ARTM(1),KL(1),NID(1),IDI(NIDM,1),
  1581.      2          BETA(NIDM,1)
  1582.       INTEGER IDOF(6)
  1583. C
  1584.       IF (NLOAD.EQ.0) GO TO 120
  1585. C
  1586.       IF (IDATWR.GT.1) GO TO 110
  1587.       IF (NSKEWS.LE.0) WRITE (6,2000)
  1588.       IF (NSKEWS.GT.0) WRITE (6,2100)
  1589.   110 CONTINUE
  1590. C
  1591.       READ (5,1000) (NOD(I),IDIRN(I),NCUR(I),FAC(I),ARTM(I),KL(I),
  1592.      1             IDEBUG,I=1,NLOAD)
  1593.       ISTOP=0
  1594.       DO 125 I=1,NLOAD
  1595.       IF (NCUR(I).GE.1 .AND. NCUR(I).LE.NTFN) GO TO 125
  1596.       ISTOP=ISTOP + 1
  1597.       WRITE (6,3000) NOD(I),IDIRN(I),NCUR(I)
  1598.   125 CONTINUE
  1599.       IF (ISTOP.EQ.0) GO TO 130
  1600.       STOP
  1601.   130 KL(NLOAD)=0
  1602. C
  1603.       IF (IDATWR.GT.1) GO TO 120
  1604.       DO 140 I=1,NLOAD
  1605.   140 WRITE (6,2010) NOD(I),IDIRN(I),NCUR(I),FAC(I),ARTM(I),KL(I)
  1606. C
  1607.   120 IF (NSTE.EQ.0)     RETURN
  1608.       IF (MODEX.EQ.0)    RETURN
  1609. C
  1610.       DO 200 K=1,NSTE
  1611. C
  1612.       DO 210 I=1,NEQ
  1613.   210 R(I)=0.
  1614. C
  1615.       IF (NLOAD.EQ.0) GO TO 260
  1616. C
  1617.       DO 220 L=1,NLOAD
  1618.       LI=IDIRN(L)
  1619.       IF (IDOF(LI).EQ.1) GO TO 220
  1620.       LDOF=LI
  1621.       LN=NOD(L)
  1622.       ARTMT=ARTM(L)
  1623.       FACT=FAC(L)
  1624.       LC=NCUR(L)
  1625.       IF (KL(L).EQ.0) GO TO 222
  1626.       DARTM=(ARTM(L+1) - ARTM(L))/((NOD(L+1) - NOD(L))/KL(L))
  1627.       FINCR=(FAC(L+1) - FAC(L))/((NOD(L+1) - NOD(L))/KL(L))
  1628.   222 DO 230 I=1,LDOF
  1629.   230 IF (IDOF(I).EQ.1) LI=LI - 1
  1630.   224 NSTEA=ARTMT/DT
  1631.       NSTEF=K - NSTEA
  1632.       IF (NSTEF.LE.0) GO TO 226
  1633.       AFACT=NSTEA - ARTMT/DT + 1.
  1634. C
  1635.       II=ID(LI,LN)
  1636.       RGFR=RG(LC,NSTEF)
  1637.       IF (ARTMT.EQ.0.) GO TO 240
  1638. C
  1639.       RGFR=RGST(LC)*(1.0 - AFACT) + RGFR*AFACT
  1640.       IF (NSTEF.LE.1) GO TO 240
  1641.       RGFR=RG(LC,NSTEF-1)*(1.0 - AFACT) + RG(LC,NSTEF)*AFACT
  1642.   240 IF (II) 245,226,255
  1643. C
  1644. C     TRANSFER LOADS APPLIED AT CONSTRAINED DOF
  1645. C
  1646.   245 NCE=-II
  1647.       ND=NID(NCE)
  1648.       DO 250 I=1,ND
  1649.       II=IDI(I,NCE)
  1650.       FRAC=BETA(I,NCE)
  1651.   250 R(II)=R(II) + RGFR*FACT*FRAC
  1652.       GO TO 226
  1653. C
  1654.   255 R(II)=R(II) + RGFR*FACT
  1655. C
  1656.   226 IF (KL(L).EQ.0) GO TO 220
  1657.       LN=LN + KL(L)
  1658.       IF (LN.GE.NOD(L+1)) GO TO 220
  1659.       FACT=FACT + FINCR
  1660.       ARTMT=ARTMT + DARTM
  1661.       GO TO 224
  1662.   220 CONTINUE
  1663. C
  1664.   260 WRITE (NWLOAD) R
  1665.       IF (IDEBUG.EQ.5) WRITE (6,6000) (R(I),I=1,NEQ)
  1666.   200 CONTINUE
  1667. C
  1668.       RETURN
  1669.  1000 FORMAT (3I5,2F10.0,I5,5X,I5)
  1670.  2000 FORMAT (////46H C O N C E N T R A T E D   L O A D S   D A T A//4X,
  1671.      1        53H NODE   DIRECTION   LOAD CURVE   LOAD CURVE MULTIPL   ,
  1672.      2        50H   ARRIVAL TIME   NODE GENERATION                    )
  1673.  2100 FORMAT (////46H C O N C E N T R A T E D   L O A D S   D A T A///
  1674.      1        35H CONCENTRATED LOADS ARE ASSUMED    /
  1675.      2 56H TO BE GIVEN IN THE SKEW COORDINATE SYSTEM OF EACH NODE.///4X,
  1676.      3 53H NODE   DIRECTION   LOAD CURVE   LOAD CURVE MULTIPL  ,
  1677.      4 34H    ARRIVAL TIME   NODE GENERATION)
  1678.  2010 FORMAT (1H0,2X,I5,5X,I4,9X,I4,9X,E13.5,8X,E12.4,7X,I5)
  1679.  3000 FORMAT (///47H TIME FUNCTION NUMBER SPECIFIED IS OUT-OF-RANGE,/
  1680.      1        5H NOD=,I5,7H IDIRN=,I5,6H NCUR=,I5)
  1681.  6000 FORMAT (10F12.5/)
  1682.       END
  1683. C *CDC* *DECK TODPRL
  1684. C *UNI* )FOR,IS N.TODPRL,R.TODPRL
  1685.       SUBROUTINE TODPRL (ID,RG,RGST,R,X,Y,Z,PR,IDOFR,ARTM,NCUR,
  1686.      1             PRINT,NODPR,THICV,IELTYP,KL,IDIRN,NID,IDI,BETA,
  1687.      2             RSDCOS,NODSYS,NODE2,NDFR2,NDOF,NTFND,NEQ,NIDM,
  1688.      3             IDOF,NSKEWS,NRLOAD,NWLOAD,NUMNPP)
  1689. C
  1690. C     SUBROUTINE TO CALCULATE CONCENTRATED NODAL POINT LOADS
  1691. C     DUE TO PRESSURE ON 2/D ELEMENT FACE
  1692. C
  1693. C . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
  1694. C
  1695. C
  1696. C     V A R I A B L E S :
  1697. C
  1698. C
  1699. C     NODPR = NODES TO WHICH PRESSURE LOADING IS APPLIED
  1700. C     PRINT = PRESSURE INTENSITIES AT NODAL POINTS
  1701. C     PR    = WORK EQUIVALENT NODAL POINT PRESSURE LOADS
  1702. C     IDOFR = DEGREES OF FREEDOM INTO WHICH LOADS IN PR
  1703. C             HAVE TO BE ADDED
  1704. C     NPR2  = NUMBER OF PRESSURE LOAD SETS
  1705. C     NODE2 = NUMBER OF NODES PER PRESSURE SET (CURRENTLY 3)
  1706. C     NDFR2 = NODE2*2
  1707. C     RG    = INTERPOLATED VALUES OF TIME FUNCTIONS
  1708. C     ARTM  = ARRIVAL TIMES OF PRESSURE LOADS
  1709. C     NCUR  = TIME FUNCTIONS CORRESPONDING TO PRESSURE LOADS
  1710. C
  1711. C
  1712. C . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
  1713. C
  1714. C
  1715.       IMPLICIT REAL*8 (A-H,O-Z)
  1716.       COMMON /SOL/ NUMNP,NNN,NWK,NWM,NWC,NUMEST,MIDEST,MAXEST,NSTE,MA
  1717.       COMMON /VAR/ NG,MODEX,IUPDT,KSTEP,ITEMAX,IEQREF,ITE,KPRI,
  1718.      1             IREF,IEQUIT,IPRI,KPLOTN,KPLOTE
  1719.       COMMON /TIMFN/ TEND,NTFN,NPTM
  1720.       COMMON /LOA/ NLOAD,NPR2,NPR3,NPBM,NP3DB,NPPL,NPSH,NODE3,IDGRAV,
  1721.      1             NPDIS,NTEMP
  1722.       COMMON /PRCON/ IDATWR,IPRIC,NPB,IDC,IVC,IAC,IPC,IPNODE(3,15)
  1723.       COMMON /CONST/ DT,DTA,A0,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11
  1724.      1              ,A12,A13,A14,A15,A16,A17,A18,A19,A20,DTOD,IOPE
  1725.       DIMENSION ID(NDOF,1),RG(NTFND,1),NODPR(NODE2,1),PRINT(2,1),
  1726.      1          IDOFR(NDFR2,1),NCUR(1),R(NEQ),ARTM(1),X(1),Y(1),Z(1),
  1727.      2          PR(NDFR2,1),THICV(1),IELTYP(1),Y2(3),Z2(3),WGTL(3),
  1728.      3          XGL(3),VEC(6),RGST(1),PRINTM(2),NODPRM(4),KL(1)
  1729.       DIMENSION IDIRN(1),NID(1),IDI(NIDM,1),BETA(NIDM,1),RSDCOS(1),
  1730.      1          NODSYS(1),IDOF(6)
  1731. C
  1732. C
  1733.       DATA XGL/
  1734.      1 -.7745966692415D0, .0000000000000D0, .7745966692415D0/
  1735.       DATA WGTL/
  1736.      1  .5555555555556D0, .8888888888889D0, .5555555555556D0/
  1737. C
  1738. C
  1739.       IF (IDATWR.LE.1) WRITE(6,2000)
  1740. C
  1741. C
  1742. C     R E A D   A N D   G E N E R A T E    2 / D   P R E S S U R E
  1743. C     L O A D    I N F O R M A T I O N
  1744. C
  1745. C
  1746.       L=1
  1747.       K=1
  1748.    10 READ(5,1000) IELTYM,NCURM,IDIRNM,(PRINTM(I),I=1,2),
  1749.      1             THICVM,ARTMM,KLM,IDEBUG,
  1750.      1             (NODPRM(I),I=1,NODE2)
  1751. C
  1752.       IF (K.NE.L) GO TO 50
  1753. C
  1754. C     SAVE LOAD INFORMATION
  1755. C
  1756.    20 IF (IELTYM.EQ.1 .OR. THICVM.LT.1.0D-8) THICVM=1.0
  1757.       IELTYP(K)=IELTYM
  1758.       THICV(K)=THICVM
  1759.       NCUR(K)=NCURM
  1760.       DO 35 I=1,NODE2
  1761.    35 NODPR(I,K)=NODPRM(I)
  1762.       DO 36 I=1,2
  1763.    36 PRINT(I,K)=PRINTM(I)
  1764.       KL(K)=KLM
  1765.       ARTM(K)=ARTMM
  1766.       IDIRN(K)=IDIRNM
  1767. C
  1768.       IF (KLM.EQ.0) GO TO 90
  1769.       IF (L.EQ.NPR2) GO TO 99
  1770. C
  1771.       L=L + 1
  1772.       GO TO 10
  1773. C
  1774. C     GENERATE PRESSURE LOAD INFORMATION
  1775. C
  1776.    50 KK=K
  1777.       NGNOD=(NODPRM(1) - NODPR(1,KK))/KL(KK)
  1778.       DARTM=(ARTMM - ARTM(KK))/NGNOD
  1779.       DPR=(PRINTM(1) - PRINT(1,KK))/NGNOD
  1780.       DP1=PRINTM(1) - PRINT(1,KK)
  1781.       DP2=PRINTM(2) - PRINT(2,KK)
  1782.       DP=DP1 - DP2
  1783.       IF (DP.GT.0.0001) WRITE(6,3000)
  1784. C
  1785.       NJ=NGNOD - 1
  1786.       DO 52 J=1,NJ
  1787.       K=K + 1
  1788.       IELTYP(K)=IELTYP(KK)
  1789.       THICV(K)=THICV(KK)
  1790.       NCUR(K)=NCUR(KK)
  1791. C
  1792.       KL(K)=KL(KK)
  1793.       IDIRN(K)=IDIRN(KK)
  1794.       DO 53 I=1,NODE2
  1795.       NODPR(I,K)=NODPR(I,K-1) + KL(KK)
  1796.       IF (NODPR(I,KK).EQ.0) NODPR(I,K)=0
  1797.    53 CONTINUE
  1798.       DO 54 I=1,2
  1799.    54 PRINT(I,K)=PRINT(I,K-1) + DPR
  1800.       ARTM(K)=ARTM(K-1) + DARTM
  1801.    52 CONTINUE
  1802. C
  1803.       IF (K.LE.NPR2) GO TO 55
  1804.       WRITE(6,3010)
  1805.       STOP
  1806.    55 K=K + 1
  1807.       L=K
  1808.       IF (L.LE.NPR2) GO TO 20
  1809.       GO TO 99
  1810. C
  1811. C
  1812.    90 L=L + 1
  1813.       K=L
  1814.       IF (L.LE.NPR2) GO TO 10
  1815. C
  1816.    99 CONTINUE
  1817. C
  1818. C     WRITE 2/D PRESSURE LOAD INFORMATION
  1819. C
  1820.       DO 100 K=1,NPR2
  1821.       IF (IDATWR.LE.1)
  1822.      1WRITE (6,2005) IELTYP(K),NCUR(K),(NODPR(I,K),I=1,NODE2),
  1823.      2               (PRINT(I,K),I=1,2),THICV(K),ARTM(K),KL(K),IDIRN(K)
  1824. C
  1825. C     ERROR TESTS
  1826. C
  1827.       DO 110 I=1,NODE2
  1828.       IF (NODPR(I,K).LE.NUMNPP) GO TO 110
  1829.       WRITE(6,2010) K,NODPR(I,K)
  1830.       STOP
  1831.   110 CONTINUE
  1832. C
  1833.       IF (NCUR(K).GE.1 .AND. NCUR(K).LE.NTFN) GO TO 120
  1834.       WRITE(6,2020) K,NCUR(K)
  1835.       STOP
  1836. C
  1837.   120 IF (ARTM(K).GE.0. .AND. ARTM(K).LE.TEND) GO TO 100
  1838.       WRITE (6,2030) K
  1839. C
  1840.   100 CONTINUE
  1841.       IF (MODEX.EQ.0) RETURN
  1842.       IF (NSTE.EQ.0) RETURN
  1843. C
  1844. C     ESTABLISH THE DEGREES OF FREEDOM INTO WHICH
  1845. C     THE PRESSURE LOADS ACT
  1846. C
  1847.       DO 200 K=1,NPR2
  1848.       LL=0
  1849.       DO 200 I=1,NODE2
  1850.       II=NODPR(I,K)
  1851.       KK=1
  1852.       IF (IDOF(1).EQ.1) KK=0
  1853.       DO 200 L=2,3
  1854.       LL=LL + 1
  1855.       IDOFR(LL,K)=0
  1856.       IF (IDOF(L).EQ.1 .OR. II.EQ.0) GO TO 200
  1857.       KK=KK + 1
  1858.       IDOFR(LL,K)=ID(KK,II)
  1859.   200 CONTINUE
  1860. C
  1861. C     CALCULATE PRESSURE LOADS
  1862. C
  1863.       DO 390 K=1,NPR2
  1864.       NODE=0
  1865. C
  1866.       DO 392 I=1,NDFR2
  1867.   392 PR(I,K)=0.0
  1868.       DO 410 I=1,NODE2
  1869.       N=NODPR(I,K)
  1870.       IF (N.EQ.0) GO TO 410
  1871.       NODE=NODE + 1
  1872.       Y2(I)=Y(N)
  1873.       Z2(I)=Z(N)
  1874.   410 CONTINUE
  1875. C
  1876.       NV=2*NODE
  1877.       DO 420 J=1,3
  1878. C
  1879.       CALL PLVEC2 (XGL(J),VEC,Y2,Z2,THICV(K),PRINT(1,K),PRINT(2,K),
  1880.      1            IELTYP(K),IDIRN(K),NODE)
  1881. C
  1882.       DO 430 I=1,NV
  1883.   430 PR(I,K)=PR(I,K) + WGTL(J)*VEC(I)
  1884.   420 CONTINUE
  1885. C
  1886. C     ROTATE TO SKEW SYSTEM
  1887. C
  1888.       IF (NSKEWS.EQ.0) GO TO 390
  1889.       DO 600 I=1,NODE
  1890.       J=NODPR(I,K)
  1891.       NRST=NODSYS(J)
  1892.       IF (NRST.EQ.0) GO TO 600
  1893.       II=2*I - 1
  1894.       CALL DIRCOS (RSDCOS,PR(II,K),NRST,1,2,2)
  1895.   600 CONTINUE
  1896. C
  1897.   390 CONTINUE
  1898. C
  1899. C     ADD NODAL POINT FORCES TO LOAD VECTOR
  1900. C
  1901.       REWIND NRLOAD
  1902.       REWIND NWLOAD
  1903.       DO 530 L=1,NSTE
  1904.       READ (NRLOAD) R
  1905.       DO 540 K=1,NPR2
  1906.       NC=NCUR(K)
  1907.       NSTEA=ARTM(K)/DT
  1908.       NSTEF=L - NSTEA
  1909.       IF (NSTEF.LE.0) GO TO 540
  1910.       AFACT=NSTEA - ARTM(K)/DT + 1.
  1911.       DO 550 I=1,NDFR2
  1912.       II=IDOFR(I,K)
  1913.       RGFR=RG(NC,NSTEF)
  1914.       IF (ARTM(K).EQ.0.) GO TO 539
  1915.       RGFR=RGST(NC)*(1.0 - AFACT) + RGFR*AFACT
  1916.       IF (NSTEF.LE.1) GO TO 539
  1917.       RGFR=RG(NC,NSTEF-1)*(1.0 - AFACT) + RG(NC,NSTEF)*AFACT
  1918.   539 IF (II) 525,550,545
  1919. C
  1920. C     TRANSFER LOADS FROM CONSTRAINED DOF
  1921. C
  1922.   525 NCE=-II
  1923.       ND=NID(NCE)
  1924.       DO 535 J=1,ND
  1925.       II=IDI(J,NCE)
  1926.       FRAC=BETA(J,NCE)
  1927.   535 R(II)=R(II) + PR(I,K)*RGFR*FRAC
  1928.       GO TO 550
  1929. C
  1930.   545 R(II)=R(II) + PR(I,K)*RGFR
  1931. C
  1932.   550 CONTINUE
  1933.   540 CONTINUE
  1934.       WRITE (NWLOAD) R
  1935.       IF (IDEBUG.EQ.5) WRITE (6,6000) (R(I),I=1,NEQ)
  1936.   530 CONTINUE
  1937. C
  1938.       RETURN
  1939. C
  1940.  1000 FORMAT(3I5,4F10.0,2I5 / 3I5)
  1941.  2000 FORMAT (////,50H  T W O - D I M E N S I O N A L  P R E S S U R E
  1942.      1,       24HL O A D I N G  D A T A                    ///,
  1943.      2        4X,6HIELTYP,4X,4HNCUR,3X,6HNODPR1,3X,6HNODPR2,3X,6HNODPR3,
  1944.      3        7X,8HPRINT(1),7X,8HPRINT(2),8X,5HTHICV,10X,4HARTM,10X,
  1945.      4        2HKL,10X,5HIDIRN //)
  1946.  2005 FORMAT (2X,5I8,3X,4E15.5,5X,I5,7X,I5 /)
  1947.  2010 FORMAT (55H **ERROR,  NODAL POINT OF PRESSURE APPLICATION IS NOT I
  1948.      1 28HN RANGE OF NODAL POINTS USED/24H           PRESSURE SET
  1949.      2 7HNUMBER=,I5,24H     NODAL POINT NUMBER=,I5)
  1950.  2020 FORMAT (55H **ERROR,  TIME FUNCTION CURVE SPECIFIED FOR PRESSURE S
  1951.      1 21HET HAS NOT BEEN INPUT/24H           PRESSURE SET
  1952.      2 7HNUMBER=,I5,26H     TIME FUNCTION NUMBER=,I5)
  1953.  2030 FORMAT (41H **WARNING,  ARRIVAL TIME OF PRESSURE SET,I5,
  1954.      1 31H IS NOT WITHIN TIME OF SOLUTION)
  1955. C
  1956.  3000 FORMAT (78H **WARNING**  (PRINT(1)2 - PRINT(1)1) IS NOT EQUAL TO (
  1957.      1PRINT(2)2 - PRINT(2)1). /,14X,50HCHECK 2/D PRESSURE LOADING INPUT
  1958.      2DATA    (TODPRL)     )
  1959.  3010 FORMAT (82H **ERROR**  THE NUMBER OF 2/D PRESSURE LOADING SET INPU
  1960.      1T OR GENERATED EXCEED NPR2.  /,12X,19HSTOPPED IN (TODPRL)      )
  1961.  6000 FORMAT (10F12.5/)
  1962.       END
  1963. C *CDC* *DECK THDPRL
  1964. C *UNI* )FOR,IS N.THDPRL,R.THDPRL
  1965.       SUBROUTINE THDPRL(ID,RG,RGST,R,X,Y,Z,PR,IDOFR,ARTM,NCUR,
  1966.      1                   PRINT,NODPR,KL,IDIRN,IFACE,IPRCOR,NID,IDI,BETA,
  1967.      2                   RSDCOS,NODSYS,NPR,NDUMMY,NDFRP,NDOF,NTFND,NEQ,
  1968.      4                   NIDM,IDOF,NSKEWS,NRLOAD,NWLOAD,NUMNPP)
  1969. C
  1970. C     SUBROUTINE TO CALCULATE CONCENTRATED NODAL POINT LOADS
  1971. C     DUE TO PRESSURE ON 3/D ELEMENT FACE,ISO/BEAM ELEMENT,PLATE ELEMENT
  1972. C     AND SHELL ELEMENT
  1973. C
  1974. C . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
  1975. C
  1976. C
  1977. C     V A R I A B L E S :
  1978. C
  1979. C
  1980. C     NODPR = NODES TO WHICH PRESSURE LOADING IS APPLIED
  1981. C     PRINT = PRESSURE INTENSITIES AT NODAL POINTS
  1982. C     PR    = WORK EQUIVALENT NODAL POINT PRESSURE LOADS
  1983. C     IDOFR = DEGREES OF FREEDOM INTO WHICH LOADS IN PR
  1984. C             HAVE TO BE ADDED
  1985. C     NPR   = NUMBER OF PRESSURE LOAD SETS
  1986. C     NODEP = NUMBERS OF NODES PER PRESSURE SET
  1987. C     NDFRP = NODEP*3
  1988. C     RG    = INTERPOLATED VALUES OF TIME FUNCTIONS
  1989. C     ARTM  = ARRIVAL TIMES OF PRESSURE LOADS
  1990. C     NCUR  = TIME FUNCTIONS CORRESPONDING TO PRESSURE LOADS
  1991. C
  1992. C
  1993. C . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
  1994.       IMPLICIT REAL*8 (A-H,O-Z)
  1995.       COMMON /SOL/ NUMNP,NNN,NWK,NWM,NWC,NUMEST,MIDEST,MAXEST,NSTE,MA
  1996.       COMMON /VAR/ NG,MODEX,IUPDT,KSTEP,ITEMAX,IEQREF,ITE,KPRI,
  1997.      1             IREF,IEQUIT,IPRI,KPLOTN,KPLOTE
  1998.       COMMON /PRSHAP/ KSHAPE
  1999.       COMMON /TIMFN/ TEND,NTFN,NPTM
  2000.       COMMON /PRCON/ IDATWR,IPRIC,NPB,IDC,IVC,IAC,IPC,IPNODE(3,15)
  2001.       COMMON /CONST/ DT,DTA,A0,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11
  2002.      1              ,A12,A13,A14,A15,A16,A17,A18,A19,A20,DTOD,IOPE
  2003.       DIMENSION ID(NDOF,1),RG(NTFND,1),NODPR(NDUMMY,1),PRINT(4,1),
  2004.      1          IDOFR(NDFRP,1),NCUR(1),R(NEQ),ARTM(1),X(1),Y(1),Z(1),
  2005.      2          PR(NDFRP,1),IFACE(1),XX(3,16),IPRCOR(1),
  2006.      3          RGST(1),KL(1),IDIRN(1),NODPRM(16),PRINTM(4),NODES(16)
  2007.       DIMENSION NID(1),IDI(NIDM,1),BETA(NIDM,1),RSDCOS(1),NODSYS(1)
  2008.      1         ,IDOF(6)
  2009.       DIMENSION PLOAD(48)
  2010.       DIMENSION XTYPE(8),ANODPR(2)
  2011.       DATA XTYPE /8H PLATE  ,8HISO/BEAM,8H  3-D   ,8H SHELL  ,
  2012.      1 5H NPPL,5HNP3DB,5H NPR3,5H NPSH /
  2013.       DATA ANODPR /4HNODP,6H  KK  /
  2014. C
  2015. C
  2016. C
  2017. C     R E A D   A N D  G E N E R A T E  P R E S S U R E
  2018. C     L O A D    I N F O R M A T I O N
  2019. C
  2020. C
  2021.       L=1
  2022.       K=1
  2023.       NODEP=NDUMMY
  2024.       IF (NODEP.EQ.5) NODEP=4
  2025. C
  2026. C     IDUMMY=1 ,2 ,3 ,4 , FOR PLATE,ISO/BEAM,3/D ELEMENT,SHELL RESP.
  2027. C
  2028.       IDUMMY=1 + NODEP/4 - NODEP/16
  2029.       IF (IDUMMY.NE.2) GO TO 10
  2030.     8 READ(5,1050) NCURM,IDIRNM,(PRINTM(I),I=1,4),
  2031.      1             IFACEM,ARTMM,KLM,IDEBUG,
  2032.      1             NODAUX,(NODPRM(I),I=1,4)
  2033.       IF (K-L) 50,20,50
  2034.    10 READ(5,1000) NCURM,IDIRNM,(PRINTM(I),I=1,4),ARTMM,KLM,IDEBUG,
  2035.      1             (NODPRM(I),I=1,NODEP)
  2036. C
  2037.       IF (K.NE.L) GO TO 50
  2038. C
  2039. C     SAVE LOAD INFORMATION
  2040. C
  2041.    20 NCUR(K)=NCURM
  2042.       DO 35 I=1,NODEP
  2043.    35 NODPR(I,K)=NODPRM(I)
  2044.       IF (IDUMMY.NE.2) GO TO 37
  2045.       NODPR(5,K) = NODAUX
  2046.       IFACE(K) = IFACEM
  2047.    37 DO 36 I=1,4
  2048.    36 PRINT(I,K)=PRINTM(I)
  2049.       KL(K)=KLM
  2050.       IDIRN(K)=IDIRNM
  2051.       ARTM(K)=ARTMM
  2052. C
  2053. C     SET SPATIAL ISOTROPY CORRECTION PARAMETER
  2054. C
  2055.       IF (KSHAPE.EQ.0) GO TO 48
  2056.       ICOLPS=1
  2057.       IF (NODEP.NE.8 .AND. NODEP.NE.12) GO TO 46
  2058.       IF (NODPRM(1).NE.NODPRM(4) .OR. NODPRM(1).NE.NODPRM(8)) GO TO 46
  2059.       IF (NODEP-10) 44,44,45
  2060.    44 ICOLPS=2
  2061.       GO TO 46
  2062.    45 IF (NODPRM(1).EQ.NODPRM(12)) ICOLPS=3
  2063.    46 IPRCOR(K)=ICOLPS
  2064. C
  2065.    48 IF (KLM.EQ.0) GO TO 90
  2066.       IF (L.EQ.NPR) GO TO 99
  2067. C
  2068.       L=L + 1
  2069.       IF (IDUMMY-2) 10 ,8 ,10
  2070. C
  2071. C     GENERATE PRESSURE LOAD INFORMATION
  2072. C
  2073.    50 KK=K
  2074.       NGNOD=(NODPRM(1) - NODPR(1,KK))/KL(KK)
  2075.       DARTM=(ARTMM - ARTM(KK))/NGNOD
  2076.       DPR=(PRINTM(1) - PRINT(1,KK))/NGNOD
  2077.       NJ=NGNOD - 1
  2078.       DO 52 J=1,NJ
  2079.       K=K + 1
  2080.       NCUR(K)=NCUR(KK)
  2081.       KL(K)=KL(KK)
  2082.       IDIRN(K)=IDIRN(KK)
  2083.       IF (IDUMMY.NE.2) GO TO 51
  2084.       NODPR(5,K) = NODPR(5,KK)
  2085.       IFACE(K) = IFACE(KK)
  2086.    51 DO 53 I=1,NODEP
  2087.       NODPR(I,K)=NODPR(I,K-1) + KL(KK)
  2088.       IF (NODPR(I,KK).EQ.0) NODPR(I,K)=0
  2089.    53 CONTINUE
  2090.       DO 54 I=1,4
  2091.    54 PRINT(I,K)=PRINT(I,K-1) + DPR
  2092.       ARTM(K)=ARTM(K-1) + DARTM
  2093.    52 CONTINUE
  2094. C
  2095.       IF (K.LE.NPR) GO TO 55
  2096.       WRITE(6,3010) XTYPE(IDUMMY), XTYPE(IDUMMY+4)
  2097.       STOP
  2098.    55 K=K + 1
  2099.       L=K
  2100.       IF (L.LE.NPR) GO TO 20
  2101.       GO TO 99
  2102. C
  2103.    90 L=L + 1
  2104.       K=L
  2105.       IF (L.GT.NPR) GO TO 99
  2106.       IF (IDUMMY-2) 10,8,10
  2107. C
  2108.    99 CONTINUE
  2109. C
  2110. C     WRITE PRESSURE LOAD INFORMATION
  2111. C
  2112.       IF (IDATWR.GT.1) GO TO 130
  2113.       WRITE(6,2000) XTYPE(IDUMMY)
  2114.       IF (IDUMMY.EQ.1) WRITE(6,2105) (ANODPR(1),I,I=1,3)
  2115.       IF (IDUMMY.EQ.2) WRITE(6,2100) (ANODPR(1),I,I=1,4),ANODPR(2)
  2116.       IF (IDUMMY.LE.2) GO TO 130
  2117.       WRITE(6,2110) (ANODPR(1),I,I=1,4)
  2118.       WRITE(6,2120) (ANODPR(1),I,I=5,NODEP)
  2119.   130 CONTINUE
  2120. C
  2121.       DO 100 K=1,NPR
  2122.       IF(IDATWR.GT.1) GO TO 140
  2123. C
  2124.       IF (IDUMMY-2) 170,180,185
  2125.   170 WRITE(6,2135) (NODPR(I,K),I=1,3),NCUR(K),ARTM(K),
  2126.      1              (PRINT(I,K),I=1,3),KL(K),IDIRN(K)
  2127.       GO TO 140
  2128. C
  2129.   180 WRITE(6,2130) (NODPR(I,K),I=1,4),NODPR(5,K),NCUR(K),ARTM(K),
  2130.      1              (PRINT(I,K),I=1,4),IFACE(K),KL(K),IDIRN(K)
  2131.       GO TO 140
  2132. C
  2133.   185 WRITE(6,2140) (NODPR(I,K),I=1,4),NCUR(K),ARTM(K),
  2134.      1              (PRINT(I,K),I=1,4),KL(K),IDIRN(K)
  2135.       WRITE(6,2150) (NODPR(I,K),I=5,NODEP)
  2136. C
  2137.   140 CONTINUE
  2138. C
  2139. C     ERROR TESTS
  2140. C
  2141.       DO 110 I=1,NODEP
  2142.       IF (NODPR(I,K).LE.NUMNPP) GO TO 110
  2143.       WRITE(6,2010) K,NODPR(I,K)
  2144.       STOP
  2145.   110 CONTINUE
  2146. C
  2147.       IF (NCUR(K).GE.1 .AND. NCUR(K).LE.NTFN) GO TO 120
  2148.       WRITE(6,2020) K,NCUR(K)
  2149.       STOP
  2150. C
  2151.   120 IF (ARTM(K).GE.0. .AND. ARTM(K).LE.TEND) GO TO 100
  2152.       WRITE (6,2030) K
  2153. C
  2154.   100 CONTINUE
  2155.       IF (MODEX.EQ.0) RETURN
  2156.       IF (NSTE.EQ.0) RETURN
  2157. C
  2158. C     ESTABLISH THE DEGREES OF FREEDOM INTO WHICH
  2159. C     THE PRESSURE LOADS ACT
  2160. C
  2161.       DO 200 K=1,NPR
  2162.       DO 210 L=1,NDFRP
  2163.   210 IDOFR(L,K)=0
  2164.       LL=0
  2165.       DO 200 I=1,NODEP
  2166.       II=NODPR(I,K)
  2167.       KK=0
  2168.       DO 200 L=1,3
  2169.       LL=LL + 1
  2170.       IDOFR(LL,K)=0
  2171.       IF (II.EQ.0 .OR. IDOF(L).EQ.1) GO TO 200
  2172.       KK=KK + 1
  2173.       IDOFR(LL,K)=ID(KK,II)
  2174.   200 CONTINUE
  2175. C
  2176. C     CALCULATE PRESSURE LOADS
  2177. C
  2178.       DO 390 K=1,NPR
  2179.       DO 392 I=1,NDFRP
  2180.       PLOAD(I)=0.0
  2181.   392 PR(I,K)=0.
  2182.       DO 410 I=1,NODEP
  2183.       DO 402 J=1,3
  2184.   402 XX(J,I)=0.
  2185.       N=NODPR(I,K)
  2186.       NODES(I)=NODPR(I,K)
  2187.       IF (N.EQ.0) GO TO 410
  2188.       XX(1,I)=X(N)
  2189.       XX(2,I)=Y(N)
  2190.       XX(3,I)=Z(N)
  2191.   410 CONTINUE
  2192. C
  2193.       DO 403 I=1,4
  2194.   403 PRINTM(I)=PRINT(I,K)
  2195. C
  2196.       IF (IDUMMY - 2) 155,160,165
  2197.   155 CALL PLVECP (NODES,XX,PLOAD,PRINTM,IDIRN(K))
  2198.       GO TO 175
  2199. C
  2200.   160 NODAUX=NODPR(5,K)
  2201.       XX(1,5)=X(NODAUX)
  2202.       XX(2,5)=Y(NODAUX)
  2203.       XX(3,5)=Z(NODAUX)
  2204.       CALL PLISBM (NODES,XX,PLOAD,PRINTM,IDIRN(K),IFACE(K))
  2205.       GO TO 175
  2206. C
  2207.   165 CALL PLVEC3 (NODES,XX,PLOAD,PRINTM,IDIRN(K),NODEP,IPRCOR(K))
  2208.   175 CONTINUE
  2209.       DO 420 I=1,NDFRP
  2210.   420 PR(I,K)=PLOAD(I)
  2211. C
  2212. C     ROTATE TO SKEW SYSTEM
  2213. C
  2214.       IF (NSKEWS.EQ.0) GO TO 390
  2215.       DO 600 I=1,NODEP
  2216.       J=NODPR(I,K)
  2217.       NRST=0
  2218.       IF (J.GT.0) NRST=NODSYS(J)
  2219.       IF (NRST.EQ.0) GO TO 600
  2220.       II=3*(I-1) + 1
  2221.       CALL DIRCOS (RSDCOS,PR(II,K),NRST,1,3,2)
  2222.   600 CONTINUE
  2223. C
  2224.   390 CONTINUE
  2225. C
  2226. C     ADD NODAL POINT FORCES TO LOAD VECTOR
  2227. C
  2228.       REWIND NRLOAD
  2229.       REWIND NWLOAD
  2230.       DO 530 L=1,NSTE
  2231.       READ (NRLOAD) R
  2232.       DO 540 K=1,NPR
  2233.       NC=NCUR(K)
  2234.       NSTEA=ARTM(K)/DT
  2235.       NSTEF=L - NSTEA
  2236.       IF (NSTEF.LE.0) GO TO 540
  2237.       AFACT=NSTEA - ARTM(K)/DT + 1.
  2238.       DO 550 I=1,NDFRP
  2239.       II=IDOFR(I,K)
  2240.       RGFR=RG(NC,NSTEF)
  2241.       IF (ARTM(K).EQ.0.) GO TO 539
  2242.       RGFR=RGST(NC)*(1.0 - AFACT) + RGFR*AFACT
  2243.       IF (NSTEF.LE.1) GO TO 539
  2244.       RGFR=RG(NC,NSTEF-1)*(1.0 - AFACT) + RG(NC,NSTEF)*AFACT
  2245.   539 IF (II) 525,550,545
  2246. C
  2247. C     TRANSFER LOADS FROM CONSTRAINED DOF
  2248. C
  2249.   525 NCE=-II
  2250.       ND=NID(NCE)
  2251.       DO 535 J=1,ND
  2252.       II=IDI(J,NCE)
  2253.       FRAC=BETA(J,NCE)
  2254.   535 R(II)=R(II) + PR(I,K)*RGFR*FRAC
  2255.       GO TO 550
  2256. C
  2257.   545 R(II)=R(II) + PR(I,K)*RGFR
  2258. C
  2259.   550 CONTINUE
  2260.   540 CONTINUE
  2261.       WRITE (NWLOAD) R
  2262.       IF (IDEBUG.EQ.5) WRITE(6,6000) (R(I),I=1,NEQ)
  2263.   530 CONTINUE
  2264. C
  2265.       RETURN
  2266. C
  2267.  1000 FORMAT(2I5,5F10.0,2I5/16I5)
  2268.  1050 FORMAT(2I5,4F10.0,I5,F10.0,2I5/16I5)
  2269.  2000 FORMAT(////,2X,A8,1X,41H P R E S S U R E  L O A D I N G  D A T A )
  2270.  2100 FORMAT(//,1X,4(1X,A4,I2),2X,A6,4X,4HNCUR,5X,4HARTM,
  2271.      1       5X,8HPRINT(1),5X,8HPRINT(2),5X,8HPRINT(3),5X,8HPRINT(4),
  2272.      1       3X,5HIFACE,4X,2HKL,3X,5HIDIRN)
  2273.  2105 FORMAT(//,3X,3(2X,A4,I2),6X,4HNCUR,8X,4HARTM,10X,
  2274.      1       8HPRINT(1),6X,8HPRINT(2),6X,8HPRINT(3),
  2275.      2       7X,2HKL,4X,5HIDIRN )
  2276.  2110 FORMAT (//3X,4(1X,A4,I3),6X,4HNCUR,7X,4HARTM,8X,
  2277.      1       8HPRINT(1),6X,8HPRINT(2),6X,8HPRINT(3),6X,8HPRINT(4),
  2278.      2       7X,2HKL,4X,5HIDIRN)
  2279.  2120 FORMAT(3X,4(1X,A4,I3),/,3X,4(1X,A4,I3),/,3X,4(1X,A4,I3))
  2280.  2130 FORMAT(I5,3I7,I9,4X,I5,2X,E10.4,4(2X,E11.5),I4,2X,2I6)
  2281.  2135 FORMAT(1X,3I8,4X,I7,5X,E10.4,3X,3(3X,E11.5),I8,I6)
  2282.  2140 FORMAT(1X,4I8,4X,I7,5X,E10.4,1X,4(3X,E11.5),I8,I6)
  2283.  2150 FORMAT(3(1X,4I8,/))
  2284.  2010 FORMAT (55H **ERROR,  NODAL POINT OF PRESSURE APPLICATION IS NOT I
  2285.      1 28HN RANGE OF NODAL POINTS USED/24H           PRESSURE SET
  2286.      2 7HNUMBER=,I5,24H     NODAL POINT NUMBER=,I5)
  2287.  2020 FORMAT (55H **ERROR,  TIME FUNCTION CURVE SPECIFIED FOR PRESSURE S
  2288.      1 21HET HAS NOT BEEN INPUT/24H           PRESSURE SET
  2289.      2 7HNUMBER=,I5,26H     TIME FUNCTION NUMBER=,I5)
  2290.  2030 FORMAT (41H **WARNING,  ARRIVAL TIME OF PRESSURE SET,I5,
  2291.      1 31H IS NOT WITHIN TIME OF SOLUTION)
  2292. C
  2293.  3010 FORMAT(26H **ERROR**  THE NUMBER OF ,A8,1X,48H PRESSURE LOADING SE
  2294.      1T INPUT OR GENERATED EXCEED ,A5,/,12X,20H STOPPED IN (THDPRL)   )
  2295.  6000 FORMAT (10F12.5/)
  2296.       END
  2297. C *CDC* *DECK PLISBM
  2298. C *UNI* )FOR,IS N.PLISBM, R.PLISBM
  2299.       SUBROUTINE PLISBM(NODES,XX,PLOAD,PRINT,IDIRN,IFACE)
  2300.       IMPLICIT REAL*8 (A-H,O-Z)
  2301. C
  2302. C     SUBROUTINE TO CALCULATE EQUIVALENT NODAL FORCES DUE TO
  2303. C     PRESSURE LOADING ON AN ISO/BEAM ELEMENT
  2304. C
  2305.       COMMON /TIMFN/ TEND,NTFN,NPTM
  2306.       COMMON /GAUSS/ XG(4,4),WGT(4,4),EVAL2(9,2),EVAL3(27,3),E1,E2,E3
  2307.       DIMENSION NODES(16),XX(3,16),PLOAD(48)
  2308.       DIMENSION H(4),Q(4),PRINT(4),PRESS(4)
  2309.       DIMENSION D(9),CONST(5)
  2310.       DATA CONST / 0.2113249D0,0.7745967D0,0.2254033D0,0.7917045D0,
  2311.      1             0.0099716D0/
  2312. C
  2313. C     TO EVALUATE THE NUMBER OF NODES PRESENT
  2314. C
  2315.       NUM=0
  2316.       DO 120 I=1,4
  2317.       PRESS(I)=0.0
  2318.   120 IF (NODES(I).GT.0) NUM=NUM+1
  2319. C
  2320. C     INTERPOLATION OF PRESSURE
  2321. C
  2322. C     PRESS(4) CONTAINS LINEARLY INTERPOLATED VALUES OF PRESSURE
  2323. C     AT THE INTEGRATION POINTS
  2324. C     CONST(5) CONTAINS MULTIPLIERS USED ON THE NODAL VALUES OF PRESSURE
  2325. C     FOR OBTAINING MAGNITUDE OF INTERPOLATED PRESSURE
  2326. C
  2327.       IF (NUM.NE.2) GO TO 130
  2328.       P21=CONST(1)*(PRINT(2)-PRINT(1))
  2329.       PRESS(1)=PRINT(1) + P21
  2330.       PRESS(2)=PRINT(2) - P21
  2331. C
  2332.   130 IF (NUM.NE.3) GO TO 140
  2333.       PRESS(1)=CONST(2)*PRINT(1) + CONST(3)*PRINT(3)
  2334.       PRESS(2)=PRINT(3)
  2335.       PRESS(3)=CONST(2)*PRINT(2) + CONST(3)*PRINT(3)
  2336. C
  2337.   140 IF (NUM.LT.4) GO TO 145
  2338.       P24=PRINT(2)-PRINT(4)
  2339.       P13=PRINT(1)-PRINT(3)
  2340.       PRESS(1)=PRINT(3) + CONST(4)*P13
  2341.       PRESS(2)=PRINT(3) + CONST(5)*P13
  2342.       PRESS(3)=PRINT(4) + CONST(5)*P24
  2343.       PRESS(4)=PRINT(4) + CONST(4)*P24
  2344.   145 CONTINUE
  2345. C
  2346. C     LINE INTEGRATION LOOP
  2347. C
  2348.       DO 150 LR=1,NUM
  2349.       R=XG(LR,NUM)
  2350. C
  2351. C     EVALUATE THE INTERPOLATION FUNCTIONS AND DERIVATIVES
  2352. C
  2353.       RR  =1.0-R*R
  2354.       H(1)=0.50*(1.0-R)
  2355.       H(2)=0.50*(1.0+R)
  2356.       Q(1)=-0.50
  2357.       Q(2)= 0.50
  2358. C
  2359.       DO 20 I=3,4
  2360.       H(I)=0.0
  2361.    20 Q(I)=0.0
  2362. C
  2363. C     QUADRATIC AND CUBIC NODES
  2364. C
  2365.       IF (NODES(4).LE.0) GO TO 25
  2366.       H(3)=(0.5625-1.6875*R)*RR
  2367.       H(4)=(0.5625+1.6875*R)*RR
  2368.       Q(3)= 5.0625*R*R - 1.125*R - 1.6875
  2369.       Q(4)=-5.0625*R*R - 1.125*R + 1.6875
  2370.       H(1)=H(1) - (2.0*H(3) + H(4))/3.0
  2371.       H(2)=H(2) - (2.0*H(4) + H(3))/3.0
  2372.       Q(1)=Q(1) - (2.0*Q(3) + Q(4))/3.0
  2373.       Q(2)=Q(2) - (2.0*Q(4) + Q(3))/3.0
  2374.       GO TO 35
  2375. C
  2376.    25 IF (NODES(3).LE.0) GO TO 35
  2377.       H(3)=RR
  2378.       Q(3)=-2.0*R
  2379.       H(1)=H(1) - H(3)/2.0
  2380.       H(2)=H(2) - H(3)/2.0
  2381.       Q(1)=Q(1) - Q(3)/2.0
  2382.       Q(2)=Q(2) - Q(3)/2.0
  2383. C
  2384.    35 D(1)=XX(1,5)
  2385.       D(2)=XX(2,5)
  2386.       D(3)=XX(3,5)
  2387.       DO 30 I=4,9
  2388.    30 D(I)=0.0
  2389.       XTB=0.0
  2390.       XTA=0.0
  2391.       XNN=0.0
  2392. C
  2393. C
  2394. C     TO COMPUTE THE JACOBIAN AND THE VECTORS IN THE DIRECTIONS OF
  2395. C     R,S AND T AXES AS NEEDED.
  2396. C     D(1),D(2),D(3) CONTAIN COMPONANTS OF A VECTOR IN R-S PLANE
  2397. C     D(4),D(5),D(6) CONTAIN COMPONANTS OF A VECTOR ALONG R AXIS
  2398. C     D(7),D(8),D(9) CONTAIN
  2399. C                           COMPONANTS OF S AXIS, IF IFACE .EQ. 1
  2400. C                           COMPONANTS OF T AXIS, IF IFACE .EQ. 2
  2401. C
  2402. C     LAGRANGE IDENTITY IS USED IN CALCULATION OF VECTOR ALONG S AXIS
  2403. C
  2404.       DO 50 I=1,3
  2405.       DO 40 J=1,4
  2406.       IF (NODES(J).LE.0) GO TO 40
  2407.       D(I)  =D(I)   - H(J)*XX(I,J)
  2408.       D(I+3)=D(I+3) + Q(J)*XX(I,J)
  2409.    40 CONTINUE
  2410.       XTB = D(I+3)*D(I+3) + XTB
  2411.       XTA=  D(I)*D(I+3) + XTA
  2412.    50 CONTINUE
  2413.       XTT = DSQRT(XTB)
  2414.       IF (XTT .GT. 1.0D-06) GO TO 60
  2415. C
  2416.       WRITE (6,2000) R,XTT
  2417.       STOP
  2418. C
  2419. C
  2420. C      LOAD APPLIED IN THE R-S PLANE
  2421. C
  2422.    60 IF (IFACE.EQ.2) GO TO 64
  2423.       DO 68 I=1,3
  2424.       J=I+6
  2425.       D(J) = XTB*D(I) - XTA*D(I+3)
  2426.       XNN = XNN + D(J)*D(J)
  2427.    68 CONTINUE
  2428.       XNN=DSQRT(XNN)
  2429.       GO TO 70
  2430. C
  2431. C     LOAD APPLIED IN THE R-T PLANE
  2432. C
  2433.    64 D(7) = D(5)*D(3) - D(6)*D(2)
  2434.       D(8) = D(6)*D(1) - D(3)*D(4)
  2435.       D(9) = D(4)*D(2) - D(5)*D(1)
  2436.       XNN = D(7)*D(7) + D(8)*D(8) + D(9)*D(9)
  2437.       XNN = DSQRT(XNN)
  2438. C
  2439. C     CALCULATION OF PRESSURE LOADS
  2440. C
  2441.    70 FACTOR=WGT(LR,NUM)*XTT*PRESS(LR)
  2442.       DO 100 K=1,4
  2443.       IF (NODES(K).EQ.0) GO TO 100
  2444.       XL=FACTOR*H(K)
  2445.       I1=1
  2446.       I2=3
  2447.       IF (IDIRN.EQ.0) GO TO 80
  2448.       I1=IDIRN
  2449.       I2=I1
  2450.    80 DO 90 I=I1,I2
  2451.       J=3*(K-1)+I
  2452.    90 PLOAD(J)=PLOAD(J) - XL*D(I+6)/XNN
  2453.   100 CONTINUE
  2454.   150 CONTINUE
  2455. C
  2456.  2000 FORMAT(//,23H**ERROR** ZERO JACOBIAN,/17X,9HJACOBIAN=,E12.4,
  2457.      1/12X,14HCO-ORDINATE R=,F7.5)
  2458.       RETURN
  2459.       END
  2460. C *CDC* *DECK BMLOAD
  2461. C *UNI* (FOR.IS N.BMLOAD,R.BMLOAD
  2462.       SUBROUTINE BMLOAD (ID,RG,RGST,R,X,Y,Z,BMLD,IDOFR,ARTM,NCUR,
  2463.      1                   FAC,ND,KL,IDIRN,NID,IDI,BETA,RSDCOS,NODSYS,
  2464.      2                   IFACE,IDOF,NDOF,NTFND,NEQ,NIDM,NSKEWS,NRLOAD,
  2465.      3                   NWLOAD,NUMNPP)
  2466. C
  2467. C      SUBROUTINE TO CALCULATE CONCENTRATED NODAL POINT LOADS
  2468. C      DUE TO A DISTRIBUTED LOAD ON A BEAM FACE
  2469. C
  2470. C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
  2471. C
  2472. C
  2473. C     VARIABLES
  2474. C     NPBM  = NUMBER OF BEAM DISTRIBUTED LOADS
  2475. C     ND    = NODES IN BEAM ELEMENT
  2476. C             1 ORIGIN OF R AXIS
  2477. C             2 IN DIRECTION OF R AXIS
  2478. C             3 NODE IN R - S PLANE
  2479. C     IDOFR = THE EQUATION NUMBERS FOR THE BEAM DOF
  2480. C     IFACE = FACE TO WHICH LOADING IS APPLIED
  2481. C             1 S FACE
  2482. C             2 T FACE
  2483. C     FAC   = LOADING FACTORS AT NODES 1 AND 2
  2484. C     TEMP  = NODAL LOAD VECTOR IN ELEMENT COORDINATES
  2485. C     BMLD  = GLOBAL NODAL LOAD VECTORS FOR EACH ELEMENT
  2486. C     RG    = VALUE OF TIME FUNCTION AT EACH STEP
  2487. C     RGST  = VALUE OF TIME FUNCTION AT T=0.
  2488. C     ARTM  = ARRIVAL TIME OF DISTRIBUTED LOADS
  2489. C     NCUR  = TIME FUNCTIONS CORRESPONDING TO DISTRIBUTED LOAD
  2490. C
  2491. C
  2492. C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
  2493. C
  2494. C
  2495.       IMPLICIT REAL*8 (A-H,O-Z)
  2496.       COMMON /SOL/ NUMNP,NNN,NWK,NWM,NWC,NUMEST,MIDEST,MAXEST,NSTE,MA
  2497.       COMMON /VAR/ NG,MODEX,IUPDT,KSTEP,ITEMAX,IEQREF,ITE,KPRI,
  2498.      1             IREF,IEQUIT,IPRI,KPLOTN,KPLOTE
  2499.       COMMON /TIMFN/ TEND,NTFN,NPTM
  2500.       COMMON /LOA/ NLOAD,NPR2,NPR3,NPBM,NP3DB,NPPL,NPSH,NODE3,IDGRAV,
  2501.      1             NPDIS,NTEMP
  2502.       COMMON /PRCON/ IDATWR,IPRIC,NPB,IDC,IVC,IAC,IPC,IPNODE(3,15)
  2503.       COMMON /CONST/ DT,DTA,A0,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11
  2504.      1              ,A12,A13,A14,A15,A16,A17,A18,A19,A20,DTOD,IOPE
  2505.       DIMENSION IDIRN(1),NID(1),IDI(NIDM,1),NODSYS(1),IDOF(1),NCUR(1),
  2506.      1          IDOFR(12,1),ID(NDOF,1),ND(3,1),IFACE(1),KL(1),ARTM(1),
  2507.      2          FAC(2,1),X(1),Y(1),Z(1),BMLD(12,1),BETA(NIDM,1),
  2508.      3          RG(NTFND,1),RGST(1),R(NEQ)
  2509.       DIMENSION TEMP(12),DCOS(3,3)
  2510. C
  2511.       IF(IDATWR.LE.1)WRITE(6,2000)
  2512. C
  2513.       L=1
  2514.       K=1
  2515. C
  2516. C
  2517. C     READ AND GENERATE BEAM DISTRIBUTED LOAD INFORMATION
  2518. C
  2519. C
  2520.    10 CONTINUE
  2521.       READ (5,1000) NCURM,IDIRNM,FAC1M,FAC2M,IFACEM,ARTMM,KLM,IDEBUG,
  2522.      1              ND1M,ND2M,ND3M
  2523.       IF (K.NE. L) GO TO 50
  2524. C
  2525. C     SAVE LOAD INFORMATION
  2526. C
  2527.    20 CONTINUE
  2528.       NCUR(K)=NCURM
  2529.       ND(1,K)=ND1M
  2530.       ND(2,K)=ND2M
  2531.       ND(3,K)=ND3M
  2532.       IFACE(K)=IFACEM
  2533.       FAC(1,K)=FAC1M
  2534.       FAC(2,K)=FAC2M
  2535.       ARTM(K)=ARTMM
  2536.       IDIRN(K)=IDIRNM
  2537.       KL(K)=KLM
  2538.       IF(KLM.EQ.0)GO TO 90
  2539.       IF(L.EQ.NPBM)GO TO 100
  2540.       L=L + 1
  2541.       GO TO 10
  2542. C
  2543. C     GENERATE DISTRIBUTED LOAD INFORMATION
  2544. C
  2545.    50 CONTINUE
  2546.       KK=K
  2547.       NGNOD=(ND1M-ND(1,KK))/KL(KK)
  2548.       DFC1=(FAC1M-FAC(1,KK))/NGNOD
  2549.       DFC2=(FAC2M-FAC(2,KK))/NGNOD
  2550.       DF=DFC1-DFC2
  2551.       IF(DABS(DF).GT.1.D-4)WRITE(6,3000)
  2552.       DARTM=(ARTMM-ARTM(KK))/NGNOD
  2553.       NJ=NGNOD-1
  2554.       IF(NJ.EQ.0)GO TO 70
  2555.       DO 60 J=1,NJ
  2556.       K=K+1
  2557.       NCUR(K)=NCUR(KK)
  2558.       ND(1,K)=ND(1,K-1)+KL(KK)
  2559.       ND(2,K)=ND(2,K-1)+KL(KK)
  2560.       ND(3,K)=ND(3,KK)
  2561.       IFACE(K)=IFACE(KK)
  2562.       FAC(1,K)=FAC(1,K-1)+DFC1
  2563.       FAC(2,K)=FAC(2,K-1)+DFC2
  2564.       ARTM(K)=ARTM(K-1)+DARTM
  2565.       KL(K)=KL(KK)
  2566.       IDIRN(K)=IDIRN(KK)
  2567.    60 CONTINUE
  2568.       IF(K.LE.NPBM)GO TO 70
  2569.       WRITE(6,3000)
  2570.       STOP
  2571.    70 CONTINUE
  2572.       K=K+1
  2573.       L=K
  2574.       IF(L.LE.NPBM)GO TO 20
  2575.       GO TO 100
  2576.    90 CONTINUE
  2577.       L=L+1
  2578.       K=L
  2579.       IF(L.LE.NPBM)GO TO 10
  2580.   100 CONTINUE
  2581. C
  2582. C     WRITE BEAM DISTRIBUTED LOAD INFORMATION
  2583. C
  2584.       DO 110 I=1,NPBM
  2585.       IF(IDATWR.LE.1)
  2586.      1WRITE(6,2005)NCUR(I),ND(1,I),ND(2,I),ND(3,I),IFACE(I),FAC(1,I),
  2587.      2             FAC(2,I),ARTM(I),KL(I),IDIRN(I)
  2588. C
  2589. C     ERROR TESTS
  2590. C
  2591.       IF(ND(1,I).LE.NUMNPP .AND. ND(1,I).GT.0)GO TO 120
  2592.       WRITE(6,2010)I,ND(1,I)
  2593.       STOP
  2594.   120 CONTINUE
  2595.       IF(ND(2,I).LE.NUMNPP .AND. ND(2,I).GT.0)GO TO 130
  2596.       WRITE(6,2010)I,ND(2,I)
  2597.       STOP
  2598.   130 CONTINUE
  2599.       IF(ND(3,I).LE.NUMNPP .AND. ND(3,I).GT.0)GO TO 140
  2600.       WRITE(6,2010)I,ND(3,I)
  2601.       STOP
  2602.   140 CONTINUE
  2603.       IF(NCUR(I).GE.1 .AND. NCUR(I).LE.NTFN)GO TO 150
  2604.       WRITE(6,2015)I,NCUR(I)
  2605.       STOP
  2606.   150 CONTINUE
  2607.       IF(IFACE(I).GT.0 .AND. IFACE(I).LT.3)GO TO 160
  2608.       WRITE(6,2020)I,IFACE(I)
  2609.       STOP
  2610.   160 CONTINUE
  2611.       IF(ARTM(I).GE.0. .AND. ARTM(I).LE.TEND)GO TO 170
  2612.       WRITE(6,2025)I,ARTM(I)
  2613.   170 CONTINUE
  2614.   110 CONTINUE
  2615.       IF(MODEX.EQ.0)RETURN
  2616.       IF(NSTE.EQ.0)RETURN
  2617. C
  2618. C     ESTABLISH THE DEGREES OF FREEDOM INTO WHICH DISTRIBUTED LOAD ACTS
  2619. C
  2620.       DO 225 I=1,NPBM
  2621.       DO 230 J=1,2
  2622.       K=ND(J,I)
  2623.       LL=0
  2624.       DO 240 L=1,6
  2625.       LLL=(J-1)*6+L
  2626.       IDOFR(LLL,I)=0
  2627.       IF(IDOF(L).EQ.1)GO TO 240
  2628.       LL=LL+1
  2629.       IDOFR(LLL,I)=ID(LL,K)
  2630.   240 CONTINUE
  2631.   230 CONTINUE
  2632.   225 CONTINUE
  2633.       DO 180 I=1,NPBM
  2634. C
  2635. C     FIND COORDINATES OF END LOADS
  2636. C
  2637.       NTEMP=ND(1,I)
  2638.       X1=X(NTEMP)
  2639.       Y1=Y(NTEMP)
  2640.       Z1=Z(NTEMP)
  2641.       NTEMP=ND(2,I)
  2642.       X2=X(NTEMP)
  2643.       Y2=Y(NTEMP)
  2644.       Z2=Z(NTEMP)
  2645.       NTEMP=ND(3,I)
  2646.       X3=X(NTEMP)
  2647.       Y3=Y(NTEMP)
  2648.       Z3=Z(NTEMP)
  2649. C
  2650. C     CALCULATE DIRECTION COSINES FROM ELEMENT TO GLOBAL SYSTEM
  2651. C
  2652.       CALL DRCOS(X1,Y1,Z1,X2,Y2,Z2,X3,Y3,Z3,DCOS,IERR)
  2653.       IF(IERR.EQ.0)GO TO 190
  2654.       WRITE(6,2030)I,IERR
  2655.       STOP
  2656.   190 CONTINUE
  2657.       RL=DSQRT((X1-X2)*(X1-X2)+(Y1-Y2)*(Y1-Y2)+(Z1-Z2)*(Z1-Z2))
  2658. C
  2659. C     ASSEMBLE CANONICAL LOAD IN ELEMENT SYSTEM
  2660. C
  2661.       IF(IFACE(I).EQ.2)GO TO 200
  2662.       TEMP(1)=0.
  2663.       TEMP(2)=-(7.*FAC(1,I)+3.*FAC(2,I))*RL/20.
  2664.       TEMP(3)=0.
  2665.       TEMP(4)=0.
  2666.       TEMP(5)=0.
  2667.       TEMP(6)=-(3.*FAC(1,I)+2.*FAC(2,I))*RL*RL/60.
  2668.       TEMP(7)=0.
  2669.       TEMP(8)=-(3.*FAC(1,I)+7.*FAC(2,I))*RL/20.
  2670.       TEMP(9)=0.
  2671.       TEMP(10)=0.
  2672.       TEMP(11)=0.
  2673.       TEMP(12)=(2.*FAC(1,I)+3.*FAC(2,I))*RL*RL/60.
  2674.       GO TO 210
  2675.   200 CONTINUE
  2676.       TEMP(1)=0.
  2677.       TEMP(2)=0.
  2678.       TEMP(3)=-(7.*FAC(1,I)+3.*FAC(2,I))*RL/20.
  2679.       TEMP(4)=0.
  2680.       TEMP(5)=(3.*FAC(1,I)+2.*FAC(2,I))*RL*RL/60.
  2681.       TEMP(6)=0.
  2682.       TEMP(7)=0.
  2683.       TEMP(8)=0.
  2684.       TEMP(9)=-(3.*FAC(1,I)+7.*FAC(2,I))*RL/20.
  2685.       TEMP(10)=0.
  2686.       TEMP(11)=-(2.*FAC(1,I)+3.*FAC(2,I))*RL*RL/60.
  2687.       TEMP(12)=0.
  2688.   210 CONTINUE
  2689. C
  2690. C     ROTATE TO GLOBAL SYSTEM
  2691. C
  2692.       CALL ROTATE(BMLD(1,I),TEMP,DCOS)
  2693.       IF(NSKEWS.EQ.0)GO TO 250
  2694. C
  2695. C     ROTATE TO SKEW COORDINATE SYSTEMS
  2696. C
  2697.       M=1
  2698.       DO 220 K=1,2
  2699.       J=ND(K,I)
  2700.       NRST=NODSYS(J)
  2701.       IF(NRST.EQ.0)GO TO 220
  2702.       DO 260 L=1,2
  2703.       CALL DIRCOS(RSDCOS,BMLD(M,I),NRST,1,3,2)
  2704.       M=M+3
  2705.   260 CONTINUE
  2706.   220 CONTINUE
  2707.   250 CONTINUE
  2708.   180 CONTINUE
  2709. C
  2710. C     ADD NODAL POINT FORCES TO LOAD VECTOR
  2711. C
  2712.       REWIND NRLOAD
  2713.       REWIND NWLOAD
  2714.       DO 300 I=1,NSTE
  2715.       READ(NRLOAD)R
  2716.       DO 320 J=1,NPBM
  2717.       NC=NCUR(J)
  2718.       NSTEA=ARTM(J)/DT
  2719.       NSTEF=I-NSTEA
  2720.       IF(NSTEF.LE.0)GO TO 320
  2721.       AFACT=DBLE(FLOAT(NSTEA))-ARTM(J)/DT+1.
  2722.       RGFR=RG(NC,NSTEF)
  2723.       IF(ARTM(J).EQ.0.)GO TO 330
  2724. C
  2725. C     IF ARTM LANDS BETWEEN TIME STEPS, INTERPOLATE TO FIND TIME FUNCT.
  2726. C
  2727.       RGFR=RGST(NC)*(1.-AFACT)+RGFR*AFACT
  2728.       IF(NSTEF.LE.1)GO TO 330
  2729.       RGFR=RG(NC,NSTEF-1)*(1.-AFACT)+RG(NC,NSTEF)*AFACT
  2730.   330 CONTINUE
  2731.       DO 350 K=1,2
  2732.       NDE=ND(K,J)
  2733.       NK=(K-1)*6
  2734.       DO 360 N=1,6
  2735.       NNK=NK+N
  2736.       II=IDOFR(NNK,J)
  2737.       IF(II)370,360,390
  2738. C
  2739. C     TRANSFER LOAD FROM CONSTRAINED DOF
  2740. C
  2741.   370 CONTINUE
  2742.       NCE=-II
  2743.       NDT=NID(NCE)
  2744.       DO 380 M=1,NDT
  2745.       II=IDI(M,NCE)
  2746.       FRAC=BETA(M,NCE)
  2747.       R(II)=R(II)+BMLD(NNK,J)*FRAC*RGFR
  2748.   380 CONTINUE
  2749.       GO TO 360
  2750.   390 CONTINUE
  2751.       R(II)=R(II)+BMLD(NNK,J)*RGFR
  2752.   360 CONTINUE
  2753.   350 CONTINUE
  2754.   320 CONTINUE
  2755.       WRITE(NWLOAD)R
  2756.       IF(IDEBUG.EQ.5)WRITE(6,6000)(R(J),J=1,NEQ)
  2757.   300 CONTINUE
  2758.       RETURN
  2759.  1000 FORMAT(2I5,2F10.0,I5,F10.0,2I5/3I5)
  2760.  2000 FORMAT (////,1X,31HB E A M  D I S T R I B U T E D
  2761.      1        23H L O A D I N G  D A T A      ///,
  2762.      2        9X,4HNCUR,5X,5HND(1),5X,5HND(2),5X,5HND(3),
  2763.      3        5X,5HIFACE,4X,6HFAC(1),10X,6HFAC(2),12X,4HARTM,
  2764.      4        13X,2HKL,5X,5HIDIRN,//)
  2765.  2005 FORMAT (1X,5I10,3E16.8,2I10)
  2766.  2010 FORMAT (1X,48H**ERROR, NODAL POINT FOR DISTRIBUTED LOAD IS NOT
  2767.      1        30H IN RANGE OF NODAL POINTS USED,/,
  2768.      2        14H LOAD SET NO.=,I5,2X,10H NODE NO.=,I5)
  2769.  2015 FORMAT (1X,51H**ERROR, TIME FUNCTION CURVE SPECIFIED FOR LOADING ,
  2770.      1        25HSET HAS NOT BEEN INPUTTED,/,14H LOAD SET NO.=,
  2771.      2        I5,2X,18HTIME FUNCTION NO.=,I5)
  2772.  2020 FORMAT (1X,38H**ERROR, ILLEGAL FACE NUMBER SPECIFIED,/,
  2773.      1        14H LOAD SET NO.=,I5,2X,9HFACE NO.=,I5)
  2774.  2025 FORMAT (1X,35H**WARNING, ARRIVAL TIME OF LOAD SET,I5,
  2775.      1        2X,30HIS NOT WITHIN TIME OF SOLUTION,2X,
  2776.      2        14H ARRIVAL TIME=,E13.5)
  2777.  2030 FORMAT (1X,40H**ERROR IN CALCULATING DIRECTION COSINES,/,
  2778.      1        42H IERR=1: ZERO LENGTH BETWEEN NODES 1 AND 2,/,
  2779.      2        42H IERR=2: ZERO LENGTH BETWEEN NODES 1 AND 3,/,
  2780.      3        38H IERR=3: NODES 1, 2 AND 3 ARE COLINEAR,/,
  2781.      4        30H IERR=4: CROSS PRODUCT FAILURE,/,14H LOAD SET NO.=,
  2782.      5        I5,2X,5HIERR=,I5)
  2783.  3000 FORMAT (1X,49H**WARNING, INCREMENTING OF FAC(1) IS NOT EQUAL TO,
  2784.      1        41H INCREMENTING OF FAC(2), CHECK INPUT DATA)
  2785.  6000 FORMAT (10E13.5)
  2786.       END
  2787. C *CDC* *DECK DRCS1
  2788. C *UNI* )FOR.IS N.DRCOS,R.DRCOS
  2789.       SUBROUTINE DRCOS(X1,Y1,Z1,X2,Y2,Z2,X3,Y3,Z3,DCOS,IERR)
  2790. C
  2791. C     SUBROUTINE TO CALCULATE DIRECTION COSINES BETWEEN ELEMENT AND
  2792. C     AND GLOBAL COORDINATE SYSTEM
  2793. C
  2794.       IMPLICIT REAL*8 (A-H,O-Z)
  2795.       DIMENSION DCOS(3,1)
  2796. C
  2797.       IERR=0
  2798.       DX=X2-X1
  2799.       DY=Y2-Y1
  2800.       DZ=Z2-Z1
  2801.       RL=DSQRT(DX*DX+DY*DY+DZ*DZ)
  2802.       IF(RL.GT.1.D-8)GO TO 10
  2803.       IERR=1
  2804.       RETURN
  2805.    10 CONTINUE
  2806. C
  2807. C     ESTABLISH R DIRECTION COSINES
  2808. C
  2809.       DCOS(1,1)=DX/RL
  2810.       DCOS(2,1)=DY/RL
  2811.       DCOS(3,1)=DZ/RL
  2812.       DX=X3-X1
  2813.       DY=Y3-Y1
  2814.       DZ=Z3-Z1
  2815.       RL=DSQRT(DX*DX+DY*DY+DZ*DZ)
  2816.       IF(RL.GT.1.D-8)GO TO 20
  2817.       IERR=2
  2818.       RETURN
  2819.    20 CONTINUE
  2820.       DCX=DCOS(2,1)*DZ-DY*DCOS(3,1)
  2821.       DCY=DCOS(3,1)*DX-DZ*DCOS(1,1)
  2822.       DCZ=DCOS(1,1)*DY-DX*DCOS(2,1)
  2823.       RL=DSQRT(DCX*DCX+DCY*DCY+DCZ*DCZ)
  2824.       IF(RL.GT.1.D-8)GO TO 30
  2825.       IERR=3
  2826.       RETURN
  2827.    30 CONTINUE
  2828. C
  2829. C     ESTABLISH T DIRECTION COSINES
  2830. C
  2831.       DCOS(1,3)=DCX/RL
  2832.       DCOS(2,3)=DCY/RL
  2833.       DCOS(3,3)=DCZ/RL
  2834.       DCX=DCOS(2,3)*DCOS(3,1)-DCOS(2,1)*DCOS(3,3)
  2835.       DCY=DCOS(3,3)*DCOS(1,1)-DCOS(1,3)*DCOS(3,1)
  2836.       DCZ=DCOS(1,3)*DCOS(2,1)-DCOS(1,1)*DCOS(2,3)
  2837.       RL=DSQRT(DCX*DCX+DCY*DCY+DCZ*DCZ)
  2838.       IF(RL.GT.1.D-8)GO TO 40
  2839.       IERR=4
  2840.       RETURN
  2841.    40 CONTINUE
  2842. C
  2843. C     ESTABLISH S DIRECTION COSINES
  2844. C
  2845.       DCOS(1,2)=DCX/RL
  2846.       DCOS(2,2)=DCY/RL
  2847.       DCOS(3,2)=DCZ/RL
  2848.       RETURN
  2849.       END
  2850. C *UNI* )FOR.IS N.ROTATE,R.ROTATE
  2851. C *CDC* *DECK ROTATE
  2852.       SUBROUTINE ROTATE(BLD,TEMP,DCOS)
  2853.       IMPLICIT REAL*8 (A-H,O-Z)
  2854.       DIMENSION BLD(1),TEMP(1),DCOS(3,1)
  2855.       DO 5 I=1,12
  2856.       BLD(I)=0.
  2857.     5 CONTINUE
  2858.       DO 10 I=1,4
  2859.       JJ=(I-1)*3
  2860.       KK=(I-1)*3
  2861.       DO 20 J=1,3
  2862.       JJJ=JJ+J
  2863.       DO 30 K=1,3
  2864.       KKK=KK+K
  2865.       BLD(JJJ)=BLD(JJJ)+DCOS(J,K)*TEMP(KKK)
  2866.    30 CONTINUE
  2867.    20 CONTINUE
  2868.    10 CONTINUE
  2869.       RETURN
  2870.       END
  2871. C *CDC* *DECK PDISP
  2872. C *UNI* )FOR,IS N.PDISP, R.PDISP
  2873.       SUBROUTINE PDISP (ID,RG,RGST,R,NOD,IDIRN,NCUR,FAC,ARTM,KL,
  2874.      1                  NODE,NTFND,NDOF,NPDIS,NTAPE)
  2875. C
  2876. C     SUBROUTINE
  2877. C     1. TO READ PRESCRIBED DISPLACEMENTS DATA
  2878. C     2. TO CALCULATE THE DISPLACEMENT VECTORS CORRESPONDING TO THESE
  2879. C
  2880. C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
  2881. C .                                                                   .
  2882. C .   V A R I A B L E S :                                             .
  2883. C .                                                                   .
  2884. C .   ID      = ARRAY OF BOUNDARY CONDITION CODES                     .
  2885. C .   RG      = INTERPOLATED VALUES OF TIME FUNCTIONS                 .
  2886. C .   R       = DISP VECTOR                                           .
  2887. C .   TIMV,RV = ABSCISSA AND ORDINATES OF TIME FUNCTIONS              .
  2888. C .   NOD     = NODAL POINTS TO WHICH DISPS ARE APPLIED               .
  2889. C .   NCUR    = TIME FUNCTION NUMBERS OF DISPS                        .
  2890. C .   IDIRN   = DIRECTION CODES OF DISPS                              .
  2891. C .   FAC     = MULTIPLIER OF DISPS                                   .
  2892. C .   ARTM    = ARRIVAL TIMES OF DISPS                                .
  2893. C .   KL      = INCREMENTS IN NODES FOR GENERATION                    .
  2894. C .                                                                   .
  2895. C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
  2896. C
  2897.       IMPLICIT REAL*8 (A-H,O-Z)
  2898. C
  2899.       COMMON /SOL/ NUMNP,NEQ,NWK,NWM,NWC,NUMEST,MIDEST,MAXEST,NSTE,MA
  2900.       COMMON /CONST/ DT,DTA,A0,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11
  2901.      1              ,A12,A13,A14,A15,A16,A17,A18,A19,A20,DTOD,IOPE
  2902.       COMMON /VAR/ NG,MODEX,IUPDT,KSTEP,ITEMAX,IEQREF,ITE,KPRI,
  2903.      1             IREF,IEQUIT,IPRI,KPLOTN,KPLOTE
  2904.       COMMON /ADINAI/ OPVAR(7),TSTART,IRINT,ISTOTE
  2905.       COMMON /SKEW/ NSKEWS
  2906.       COMMON /MDFRDM/ IDOF(6)
  2907.       COMMON /LOA/ NLOAD,NPR2,NPR3,NPBM,NP3DB,NPPL,NPSH,NODE3,IDGRAV,
  2908.      1             NPCIS,NTEMP
  2909.       COMMON /TIMFN/ TEND,NTFN,NPTM
  2910.       COMMON /PRCON/ IDATWR,IPRIC,NPB,IDC,IVC,IAC,IPC,IPNODE(3,15)
  2911. C
  2912.       DIMENSION ID(NDOF,1),RG(NTFND,1),R(NPDIS),NOD(1),IDIRN(1),
  2913.      1          NCUR(1),FAC(1),ARTM(1),KL(1),RGST(1),NODE(1)
  2914. C
  2915.       IF (IDATWR.GT.1) GO TO 5
  2916.       IF (NSKEWS.LE.0) WRITE (6,2000)
  2917.       IF (NSKEWS.GT.0) WRITE (6,2100)
  2918. C
  2919.     5 L=1
  2920.       K=1
  2921. C
  2922.    10 READ (5,1000) NODM,IDIRNM,NCURM,FACM,ARTMM,KLM,IDEBUG
  2923.       IF (K.NE.L) GO TO 50
  2924. C
  2925. C     SAVE DISP INFORMATION
  2926. C
  2927.    20 NOD(K)=NODM
  2928.       IDIRN(K)=IDIRNM
  2929.       NCUR(K)=NCURM
  2930.       FAC(K)=FACM
  2931.       ARTM(K)=ARTMM
  2932.       KL(K)=KLM
  2933. C
  2934.       IF (KLM.EQ.0) GO TO 90
  2935.       IF (L.EQ.NPDIS) GO TO 99
  2936. C
  2937.       L=L + 1
  2938.       GO TO 10
  2939. C
  2940. C     GENERATE PRESCRIBED DISPLACEMENT INFORMATION
  2941. C
  2942.    50 KK=K
  2943.       NGNOD=(NODM - NOD(KK))/KL(KK)
  2944.       DFAC=(FACM - FAC(KK))/NGNOD
  2945.       DARTM=(ARTMM - ARTM(KK))/NGNOD
  2946. C
  2947.       NJ=NGNOD - 1
  2948.       IF (NJ.LE.0) GO TO 55
  2949.       DO 52 J=1,NJ
  2950.       K=K + 1
  2951. C
  2952.       NOD(K)=NOD(K - 1) + KL(KK)
  2953.       IDIRN(K)=IDIRN(KK)
  2954.       NCUR(K)=NCUR(KK)
  2955.       FAC(K)=FAC(K-1) + DFAC
  2956.       ARTM(K)=ARTM(K-1) + DARTM
  2957.       KL(K)=KL(KK)
  2958.       IF (K.LE.NPDIS) GO TO 52
  2959.       WRITE(6,3010)
  2960.       STOP
  2961.    52 CONTINUE
  2962. C
  2963.    55 K=K + 1
  2964.       L=K
  2965.       IF (L.LE.NPDIS) GO TO 20
  2966.       GO TO 99
  2967. C
  2968.    90 L=L + 1
  2969.       K=L
  2970.       IF (L.LE.NPDIS) GO TO 10
  2971. C
  2972.    99 CONTINUE
  2973. C
  2974. C     WRITE PRESCRIBED DISP INFORMATION
  2975. C
  2976.       DO 100 I=1,NPDIS
  2977.       IF (IDATWR.GT.1) GO TO 110
  2978.       WRITE (6,2010) NOD(I),IDIRN(I),NCUR(I),FAC(I),ARTM(I),KL(I)
  2979. C
  2980. C     ERROR TESTS
  2981. C
  2982.   110 IF (NOD(I).LE.NUMNP) GO TO 120
  2983.       WRITE(6,3020) I,NOD(I)
  2984.       STOP
  2985. C
  2986.   120 IF (NCUR(I).GE.1 .AND. NCUR(I).LE.NTFN) GO TO 130
  2987.       WRITE(6,3030) K,NCUR(K)
  2988.       STOP
  2989. C
  2990.   130 IF (ARTM(I).GE.0. .AND. ARTM(I).LE.TEND) GO TO 100
  2991.       WRITE (6,3040) I
  2992. C
  2993.   100 CONTINUE
  2994. C
  2995.       IF (NSTE.EQ.0)     RETURN
  2996.       IF (MODEX.EQ.0)    RETURN
  2997. C
  2998. C
  2999.       DO 160 L=1,NPDIS
  3000.       LI=IDIRN(L)
  3001.       LN=NOD(L)
  3002.       IF (IDOF(LI).EQ.1) GO TO 155
  3003.       LDOF=LI
  3004.       DO 150 I=1,LDOF
  3005.   150 IF (IDOF(I).EQ.1) LI = LI - 1
  3006.       II=ID(LI,LN)
  3007.       IF (II.GT.0) GO TO 160
  3008.   155 WRITE (6,3050) I,LN,LI
  3009.       STOP
  3010.   160 NOD(L)=II
  3011. C
  3012. C     ARRANGE PRESCRIBED DISPLACEMENTS IN ASCENDING ORDER
  3013. C
  3014.   170 IF (NPDIS.LT.2) GO TO 185
  3015.       IS=0
  3016.       DO 180 L=2,NPDIS
  3017.       IF (NOD(L).GE.NOD(L - 1)) GO TO 180
  3018.       IS=IS + 1
  3019.       NSAV=NOD(L)
  3020.       NOD(L)=NOD(L - 1)
  3021.       NOD(L - 1)=NSAV
  3022.       NSAV=NCUR(L)
  3023.       NCUR(L)=NCUR(L - 1)
  3024.       NCUR(L - 1)=NSAV
  3025.       RSAV=FAC(L)
  3026.       FAC(L)=FAC(L - 1)
  3027.       FAC(L - 1)=RSAV
  3028.       RSAV=ARTM(L)
  3029.       ARTM(L)=ARTM(L - 1)
  3030.       ARTM(L - 1)=RSAV
  3031.   180 CONTINUE
  3032.       IF (IS.GT.0) GO TO 170
  3033. C
  3034.   185 DO 190 I=1,NPDIS
  3035.   190 NODE(I)=NOD(I)
  3036. C
  3037.       IF (IDEBUG.EQ.5) WRITE (6,5500) (NODE(I),I=1,NPDIS)
  3038. C
  3039.       REWIND NTAPE
  3040.       DO 200 K=1,NSTE
  3041. C
  3042.       DO 210 I=1,NPDIS
  3043.   210 R(I)=0.
  3044. C
  3045.       DO 220 L=1,NPDIS
  3046.       ARTMT=ARTM(L)
  3047.       FACT=FAC(L)
  3048.       LC=NCUR(L)
  3049.       NSTEA=ARTMT/DT
  3050.       NSTEF=K - NSTEA
  3051.       IF (NSTEF.LE.0) GO TO 220
  3052.       AFACT=NSTEA - ARTMT/DT + 1.
  3053. C
  3054.       II=NOD(L)
  3055.       RGFR=RG(LC,NSTEF)
  3056.       IF (ARTMT.EQ.0.) GO TO 240
  3057. C
  3058.       RGFR=RGST(LC)*(1.0 - AFACT) + RGFR*AFACT
  3059.       IF (NSTEF.LE.1) GO TO 240
  3060.       RGFR=RG(LC,NSTEF-1)*(1.0 - AFACT) + RG(LC,NSTEF)*AFACT
  3061.   240 R(L)=R(L) + RGFR*FACT
  3062.   220 CONTINUE
  3063. C
  3064.       WRITE (NTAPE)R
  3065.       IF (IDEBUG.EQ.5) WRITE (6,6000) R
  3066.   200 CONTINUE
  3067. C
  3068.       RETURN
  3069.  1000 FORMAT (3I5,2F10.0,I5,5X,I5)
  3070.  2000 FORMAT (////51H P R E S C R I B E D   D I S P L A C E M E N T   D
  3071.      1 5HA T A //4X,
  3072.      1        53H NODE   DIRECTION   DISP CURVE   DISP CURVE MULTIPL   ,
  3073.      2        50H   ARRIVAL TIME   NODE GENERATION                    )
  3074.  2100 FORMAT (////51H P R E S C R I B E D   D I S P L A C E M E N T   D
  3075.      1 5HA T A //4X,
  3076.      1        38H PRESCRIBED DISPLLACEMENTS ARA ASSUMED    /
  3077.      2 56H TO BE GIVEN IN THE SKEW COORDINATE SYSTEM OF EACH NODE.///4X,
  3078.      3 53H NODE   DIRECTION   DISP CURVE   DISP CURVE MULTIPL  ,
  3079.      4 34H    ARRIVAL TIME   NODE GENERATION)
  3080.  2010 FORMAT (1H0,2X,I5,5X,I4,9X,I4,9X,E13.5,8X,E12.4,7X,I5)
  3081.  3010 FORMAT (83H **ERROR**  THE NUMBER OF PRESCRIBED DISPLACEMENTS INPU
  3082.      1T OR GENERATED EXCEED NPDIS. /,12X,19HSTOPPED IN (PDISP )      )
  3083.  3020 FORMAT (55H **ERROR,  NODAL POINT OF PRESCRIBED DISPLACEMENT IS NO
  3084.      1 35HT IN THE RANGE OF NODAL POINTS USED/14H DISPLACEMENT
  3085.      2 7HNUMBER=,I5,24H     NODAL POINT NUMBER=,I5  )
  3086.  3030 FORMAT (55H **ERROR,  TIME FUNCTION CURVE SPECIFIED FOR DISPLACEME
  3087.      1 21HNT HAS NOT BEEN INPUT/14H DISPLACEMENT
  3088.      2 7HNUMBER=,I5,26H     TIME FUNCTION NUMBER=,I5  )
  3089.  3040 FORMAT (44H **WARNING,  ARRIVAL TIME OF DISPLACEMENT NO ,I5,
  3090.      1 31H IS NOT WITHIN TIME OF SOLUTION  )
  3091.  3050 FORMAT (//53H **ERROR**,  DISPLACEMENTS CAN BE PRESCRIBED ONLY AT
  3092.      1 26HACTIVE DEGREES OF FREEDOM. /31H CHECK INPUT OR GENERATED PRESC
  3093.      2 21HRIBED DISPLCEMENT NO=,I5,/23H CORRESPONDING TO NODE=,I5,
  3094.      3 29H MASTER DEGREE OF FREEDOM NO=,I5  )
  3095. C
  3096.  5500 FORMAT (//48H EQUATION NUMBERS OF PRESCRIBED DISP. DOF ARE - ,
  3097.      1          (/,10(I5,7X))  )
  3098.  6000 FORMAT (10F12.5/)
  3099. C
  3100.       END
  3101. C *CDC* *DECK TFUNCT
  3102. C *UNI* )FOR,IS N.TFUNCT,R.TFUNCT
  3103.       SUBROUTINE TFUNCT (RG,RGST,TIMV,RV,IPNT,NTFN,NPTM)
  3104. C
  3105. C     SUBROUTINE TO CALCULATE TIME FUNCTION VALUES AT ALL TIME POINTS
  3106. C     THE TIME FUNCTION VALUES ARE STORED IN RG
  3107. C
  3108.       IMPLICIT REAL*8 (A-H,O-Z)
  3109.       COMMON /SOL/ NUMNP,NEQ,NWK,NWM,NWC,NUMEST,MIDEST,MAXEST,NSTE,MA
  3110.       COMMON /ISUBST/ ISUB,NSUBST,NSUB,NTUSE,NEGLS,NEGNLS,NUMNPS,
  3111.      1                NODCON,NODRET,IDOFS(6),NDOFS,NEQS,NWKS,MAXES,
  3112.      2                MAS,NSTAPE,ILOA(13),KRSIZM,NEQC
  3113. C
  3114.       DIMENSION RG(NTFN,1),TIMV(NPTM,1),RV(NPTM,1),IPNT(1),RGST(1)
  3115. C
  3116.       NT=13
  3117.       IF (NSUBST.GT.0) NT=15
  3118.       REWIND NT
  3119.       DO 100 L=1,NTFN
  3120.       READ  (NT) RGST(L),(RG(L,K),K=1,NSTE),NPTS,
  3121.      1           (RV(J,L),TIMV(J,L),J=1,NPTS)
  3122.       IPNT(L)=NPTS
  3123.   100 CONTINUE
  3124. C
  3125.       RETURN
  3126. C
  3127.       END
  3128. C *CDC* *DECK GRAVL
  3129. C *UNI* )FOR,IS N.GRAVL,R.GRAVL
  3130.       SUBROUTINE GRAVL (ID,RG,R,RMASS,RSDCOS,NODSYS,
  3131.      1                  NEQ,NDOF,NTFN,MODEX,NRLOAD,NWLOAD,NUMNP,IDOF)
  3132. C
  3133. C     SUBROUTINE TO CALCULATE GRAVITY LOADING FOR FIRST NSTEG STEPS
  3134. C
  3135.       IMPLICIT REAL*8 (A-H,O-Z)
  3136.       COMMON /SKEW/ NSKEWS
  3137.       COMMON /PRCON/ IDATWR,IPRIC,NPB,IDC,IVC,IAC,IPC,IPNODE(3,15)
  3138.       COMMON /SOL/ NUMNPP,NNN,NWK,NWM,NWC,NUMEST,MIDEST,MAXEST,NSTE,MA
  3139. C
  3140.       DIMENSION ID(NDOF,1),RMASS(1),R(NEQ),RG(NTFN,1),FDIRGR(3)
  3141.       DIMENSION LMNODE(3),FRST(3),NODSYS(1),RSDCOS(9,1),IDOF(6)
  3142. C
  3143.       READ (5,1000) NCUR,FDIRGR,ACCGRA
  3144.       IF (IDATWR.LE.1) WRITE (6,2000) NCUR,FDIRGR,ACCGRA
  3145.       IF (NCUR.GE.1 .AND. NCUR.LE.NTFN) GO TO 5
  3146.       WRITE (6,3000) NCUR,NTFN
  3147.       STOP
  3148. C
  3149.     5 IF (NSTE.EQ.0) RETURN
  3150.       IF (MODEX.EQ.0) RETURN
  3151. C
  3152. C
  3153.       DO 10 I=1,3
  3154.    10 FDIRGR(I)=ACCGRA*FDIRGR(I)
  3155. C
  3156. C     READ LUMPED MASS INTO CORE
  3157. C
  3158.       BACKSPACE 11
  3159.       BACKSPACE 11
  3160.       READ (11) R
  3161. C
  3162. C
  3163.    25 DO 100 N=1,NUMNP
  3164. C
  3165.       DO 30 K=1,3
  3166.       LMNODE(K)=0
  3167.    30 CONTINUE
  3168. C
  3169.       J=0
  3170.       DO 60 I=1,NDOF
  3171.    50 J=J+1
  3172.       IF (IDOF(J).EQ.1) GO TO 50
  3173.       L=ID(I,N)
  3174.       IF (L.LE.0) GO TO 60
  3175.       IF (J.LE.3) GO TO 55
  3176.       RMASS(L)=0.
  3177.       GO TO 60
  3178. C
  3179. C     NODE N, DIRECTION J  HAS EQUATION NUMBER  L
  3180. C
  3181.    55 LMNODE(J)=L
  3182.       RMASS(L)=FDIRGR(J)*R(L)
  3183.    60 CONTINUE
  3184. C
  3185.       IF (NSKEWS.EQ.0) GO TO 100
  3186.       NRST=NODSYS(N)
  3187.       IF (NRST.EQ.0) GO TO 100
  3188.       K=0
  3189.       DO 70 I=1,3
  3190.       FRST(I)=0.
  3191.       DO 70 J=1,3
  3192.       K=K+1
  3193.       FRST(I)=FRST(I) + RSDCOS(K,NRST)*FDIRGR(J)
  3194.    70 CONTINUE
  3195.       DO 80 J=1,3
  3196.       L=LMNODE(J)
  3197.       IF (L.EQ.0) GO TO 80
  3198.       RMASS(L)=FRST(J)*R(L)
  3199.    80 CONTINUE
  3200. C
  3201.   100 CONTINUE
  3202. C
  3203.       REWIND NRLOAD
  3204.       REWIND NWLOAD
  3205.       DO 340 L=1,NSTE
  3206.       FACT=RG(NCUR,L)
  3207.       READ (NRLOAD) R
  3208.       DO 350 I=1,NEQ
  3209.   350 R(I)=R(I) + FACT*RMASS(I)
  3210. C
  3211.       WRITE (NWLOAD) R
  3212. C
  3213.   340 CONTINUE
  3214. C
  3215.       RETURN
  3216.  1000 FORMAT (I5,4F10.0)
  3217.  2000 FORMAT (////62H  M A S S   P R O P O R T I O N A L   L O A D I N G
  3218.      1   D A T A   //4X,
  3219.      2  44H NUMBER OF TIME FUNCTION FOR THIS LOADING  =,I5/4X,
  3220.      3  44H FRACTION OF LOADING INTO X DIRECTION      =,E12.4/4X,
  3221.      4  44H FRACTION OF LOADING INTO Y DIRECTION      =,E12.4/4X,
  3222.      5  44H FRACTION OF LOADING INTO Z DIRECTION      =,E12.4/4X,
  3223.      6  44H ACCELERATION CONSTANT                     =,E12.4/)
  3224. C
  3225.  3000 FORMAT (///19H *** ERROR IN INPUT, /5X,
  3226.      1           30HLOAD CURVE NUMBER OUT OF RANGE  /5X,
  3227.      2            5HNCUR=,I5,5X,5HNTFN=,I5  //)
  3228. C
  3229.       END
  3230. C *CDC* *DECK PLVEC2
  3231. C *UNI* )FOR,IS N.PLVEC2,R.PLVEC2
  3232.       SUBROUTINE PLVEC2 (R,VEC,Y,Z,THICK,PI,PJ,IELTYP,IDIRN,NODES)
  3233. C
  3234. C
  3235. C
  3236. C
  3237. C
  3238.       IMPLICIT REAL*8 (A-H,O-Z)
  3239.       DIMENSION VEC(1),H(3),G(2),HR(3),Y(3),Z(3)
  3240. C
  3241. C     PRESSURE INTERPOLATION FUNCTIONS (LINEAR AT MOST)
  3242. C
  3243.       G(1) = 0.5*(1.0+R)
  3244.       G(2) = 0.5*(1.0-R)
  3245. C
  3246. C
  3247.       IF(NODES.GT.2) GO TO 10
  3248. C
  3249. C     TWO NODE EDGE
  3250. C
  3251.       H(1) = G(1)
  3252.       H(2) = G(2)
  3253. C
  3254.       HR(1) = 0.5
  3255.       HR(2) =-0.5
  3256. C
  3257.       GO TO 20
  3258. C
  3259. C     THREE-NODE EDGE
  3260. C
  3261.    10 H(1) = 0.5*R*(1.0+R)
  3262.       H(2) =-0.5*R*(1.0-R)
  3263.       H(3) = 1.0-R*R
  3264. C
  3265.       HR(1)= 0.5+R
  3266.       HR(2) =-0.5+R
  3267.       HR(3)=-2.0*R
  3268. C
  3269. C     DIFFERENTIAL MULTIPLIER
  3270. C
  3271. C          1. PLANE SOLID
  3272. C
  3273.    20 X1 = THICK
  3274. C
  3275.       IF (IELTYP.GT.0) GO TO 40
  3276. C
  3277. C          2. AXISYMMETRIC SOLID
  3278. C
  3279.       X1 = 0.0
  3280.       DO 30 K=1,NODES
  3281.    30 X1 = X1 + Y(K)*H(K)
  3282. C
  3283. C     GLOBAL DERIVATIVES AT STATION *R*
  3284. C
  3285.    40 YR = 0.0
  3286.       ZR = 0.0
  3287. C
  3288.       DO 50 K=1,NODES
  3289.       YR = YR + HR(K)*Y(K)
  3290.    50 ZR = ZR + HR(K)*Z(K)
  3291. C
  3292. C     PRESSURE AT STATION *R*
  3293. C
  3294.       PRESS = G(1)*PI + G(2)*PJ
  3295.       X1    =  X1*PRESS
  3296. C
  3297.       G(1) = X1*ZR
  3298.       G(2) =-X1*YR
  3299. C
  3300. C     NODE FORCE CONTRIBUTION
  3301. C
  3302.       DO 60 K=1,NODES
  3303.       VEC(2*K-1) = G(1)* H(K)
  3304.       VEC(2*K  ) = G(2)* H(K)
  3305.       IF (IDIRN.EQ.2) VEC(2*K  ) = 0.
  3306.    60 IF (IDIRN.EQ.3) VEC(2*K-1) = 0.
  3307. C
  3308.       RETURN
  3309. C
  3310.       END
  3311. C *CDC* *DECK PLVEC3
  3312. C *UNI* )FOR,IS N.PLVEC3,R.PLVEC3
  3313.       SUBROUTINE PLVEC3 (NODES,XX,PLOAD,PRINT,IDIRN,NODEP,ICOR)
  3314. C
  3315. C     SUBROUTINE TO CALCULATE CONCENTRATED NODAL FORCES DUE TO
  3316. C     PRESSURE ON 3-D ELEMENT FACE AND SHELL ELEMENT
  3317. C
  3318.       IMPLICIT REAL*8 (A-H,O-Z)
  3319.       COMMON /TIMFN/ TEND,NTFN,NPTM
  3320.       COMMON /GAUSS/ XG(4,4),WGT(4,4),EVAL2(9,2),EVAL3(27,3),E1,E2,E3
  3321. C
  3322.       DIMENSION NODES(16),XX(3,16),PLOAD(48)
  3323.       DIMENSION H(16),Q(2,16),XJ(2,3),A(3),PRINT(4)
  3324.       DIMENSION NDNUM(16),ICOEF(7),COEF(4)
  3325. C
  3326.       DATA NDNUM /5,12,6,11, 6,9,7,12, 7,10,8,9, 8,11,5,10/,
  3327.      1     ICOEF /2,1,2,4,2,1,2/,
  3328.      2     COEF /-.6666666666667D0,-.6666666666667D0,-.3333333333333D0,
  3329.      3           -.3333333333333D0/
  3330. C
  3331. C     SURFACE INTEGRATION LOOP
  3332. C
  3333.       LRU=3
  3334.       IF (NODEP.EQ.16) LRU=4
  3335. C
  3336.       DO 300 LR=1,LRU
  3337.       R=XG(LR,LRU)
  3338. C
  3339.       DO 300 LS=1,LRU
  3340.       S=XG(LS,LRU)
  3341. C
  3342.       WT=WGT(LR,LRU)*WGT(LS,LRU)
  3343. C
  3344. C     EVALUATE THE INTERPOLATION FUNCTIONS AND DERIVATIVES
  3345. C
  3346.       RM     = 1.0 - R
  3347.       SM     = 1.0 - S
  3348.       RP     = 1.0 + R
  3349.       SP     = 1.0 + S
  3350.       RR     = 1.0 - R*R
  3351.       SS     = 1.0 - S*S
  3352.       RP3    = 0.5625 + 1.6875*R
  3353.       SP3    = 0.5625 + 1.6875*S
  3354.       RM3    = 0.5625 - 1.6875*R
  3355.       SM3    = 0.5625 - 1.6875*S
  3356. C
  3357. C          1. CORNER NODES
  3358. C
  3359.       H(1)    = 0.25*RP*SP
  3360.       H(2)    = 0.25*RM*SP
  3361.       H(3)    = 0.25*RM*SM
  3362.       H(4)    = 0.25*RP*SM
  3363. C
  3364.       Q(1,1) = 0.25*    SP
  3365.       Q(1,2) =-0.25*    SP
  3366.       Q(1,3) =-0.25*    SM
  3367.       Q(1,4) = 0.25*    SM
  3368. C
  3369.       Q(2,1) = 0.25* RP
  3370.       Q(2,2) = 0.25* RM
  3371.       Q(2,3) =-0.25* RM
  3372.       Q(2,4) =-0.25* RP
  3373. C
  3374. C     LINEAR INTERPOLATION OF PRESSURE AT STATION *(R,S)*
  3375. C
  3376.       PRESS=0.
  3377.       DO 5 I=1,4
  3378.     5 PRESS=PRESS + PRINT(I)*H(I)
  3379. C
  3380. C
  3381.       DO 10 K=5,NODEP
  3382.       H(  K)  = 0.0
  3383.       Q(1,K)  = 0.0
  3384.    10 Q(2,K)  = 0.0
  3385. C
  3386. C          2. SIDE NODES
  3387. C
  3388.       IF(NODES(5).EQ.0) GO TO 16
  3389.       H(  5)  = 0.50* RR* SP
  3390.       Q(1,5)  =-      R * SP
  3391.       Q(2,5)  = 0.50* RR
  3392. C
  3393.    16 IF(NODES(6).EQ.0) GO TO 17
  3394.       H(  6)  = 0.50* RM* SS
  3395.       Q(1,6)  =-0.50*    SS
  3396.       Q(2,6)  =-     RM*S
  3397. C
  3398.    17 IF(NODES(7).EQ.0) GO TO 18
  3399.       H(  7)  = 0.50* RR* SM
  3400.       Q(1,7)  =-      R * SM
  3401.       Q(2,7)  =-0.50* RR
  3402. C
  3403.    18 IF(NODES(8).EQ.0) GO TO 20
  3404.       H(  8)  = 0.50* RP* SS
  3405.       Q(1,8)  = 0.50*     SS
  3406.       Q(2,8)  =-      RP* S
  3407. C
  3408. C            A. MODIFY CORNER NODE FUNCTIONS WITH SIDE NODE CORRECTIONS
  3409. C
  3410. C
  3411.    20 DO 30 I=1,4
  3412. C
  3413.       J        =I+4
  3414.       K        =I+3
  3415.       IF(I.EQ.1)
  3416.      *K       = 8
  3417. C
  3418.       H(  I) = H(  I) - 0.5* (H(  J) + H(  K))
  3419.       DO 25 L=1,2
  3420.    25 Q(L,I) = Q(L,I) - 0.5* (Q(L,J) + Q(L,K))
  3421.    30 CONTINUE
  3422. C
  3423.       IF (NODEP.GT.8) GO TO 38
  3424.       IF (ICOR.NE.2) GO TO 40
  3425. C
  3426. C     CORRECT THE INTERPOLATION FUNCTIONS AND THEIR DERIVATIVES
  3427. C     OF DEGENERATED 8-NODE SURFACE  FOR SPATIAL ISOTROPY
  3428. C
  3429.       DH2D=RR*SS
  3430.       H(2)=H(2) + 0.125*DH2D
  3431.       Q(1,2)=Q(1,2) - 0.25*R*SS
  3432.       Q(2,2)=Q(2,2) - 0.25*S*RR
  3433.       H(3)=H(3) + 0.125*DH2D
  3434.       Q(1,3)=Q(1,3) - 0.25*R*SS
  3435.       Q(2,3)=Q(2,3) - 0.25*S*RR
  3436.       H(6)=H(6) - 0.25*DH2D
  3437.       Q(1,6)=Q(1,6) + 0.5*R*SS
  3438.       Q(2,6)=Q(2,6) + 0.5*S*RR
  3439. C
  3440.       GO TO 40
  3441. C
  3442. C     ADDITIONAL INTERPOLATIONS FOR SHELL LOADING
  3443. C
  3444.    38 IF (NODES(9).EQ.0) GO TO 31
  3445.       H(9)  =RM3*H(5)
  3446.       Q(1,9)=RM3*Q(1,5) - 3.0*H(5)
  3447.       Q(2,9)=RM3*Q(2,5)
  3448. C
  3449.    31 IF (NODES(10).EQ.0) GO TO 32
  3450.       H(10)  =SM3*H(6)
  3451.       Q(1,10)=SM3*Q(1,6)
  3452.       Q(2,10)=SM3*Q(2,6) - 3.0*H(6)
  3453. C
  3454.    32 IF (NODES(11).EQ.0) GO TO 33
  3455.       H(11)  =RP3*H(7)
  3456.       Q(1,11)=RP3*Q(1,7) + 3.0*H(7)
  3457.       Q(2,11)=RP3*Q(2,7)
  3458. C
  3459.    33 IF (NODES(12).EQ.0) GO TO 34
  3460.       H(12)  =SP3*H(8)
  3461.       Q(1,12)=SP3*Q(1,8)
  3462.       Q(2,12)=SP3*Q(2,8) + 3.0*H(8)
  3463. C
  3464.    34 CONTINUE
  3465. C
  3466. C     MODIFICATION OF LINEAR AND QUADRATIC INTERPOLATION FUNCTIONS
  3467. C     DUE TO THE PRESENCE OF CUBIC SIDE NODES
  3468. C
  3469.       DO 35 I=9,12
  3470.       IF (NODES(I).EQ.0) GO TO 35
  3471.       II=I - 8
  3472.       JJ=II + 1
  3473.       IF (I.EQ.12) JJ=1
  3474.       KK=I - 4
  3475.       H(II)=H(II) - 0.25*H(KK) + H(I)/3.
  3476.       H(JJ)=H(JJ) + 0.125*H(KK) - H(I)/3.
  3477.       H(KK)=1.125*H(KK) - H(I)
  3478.       DO 37 L=1,2
  3479.       Q(L,II)=Q(L,II) - 0.25*Q(L,KK) + Q(L,I)/3.
  3480.       Q(L,JJ)=Q(L,JJ) + 0.125*Q(L,KK) - Q(L,I)/3.
  3481.    37 Q(L,KK)=1.125*Q(L,KK) - Q(L,I)
  3482.    35 CONTINUE
  3483. C
  3484.       IF (NODEP.GT.12) GO TO 39
  3485.       IF (ICOR.NE.3) GO TO 40
  3486. C
  3487. C     CORRECT THE INTERPOLATION FUNCTIONS AND THEIR DERIVATIVES
  3488. C     OF DEGENERATED 12-NODE SURFACE  FOR SPATIAL ISOTROPY
  3489. C
  3490.       RS1=3.*(-R+S-R*S)
  3491.       RS2=3.*(-R-S+R*S)
  3492.       RS3=3.*RM*SP
  3493.       RSA1=RS1-1.
  3494.       RSA5=RS1-5.
  3495.       RSB1=RS2-1.
  3496.       RSB5=RS2-5.
  3497.       RMF=0.0078125*RM
  3498.       SMF=0.0078125*SM
  3499.       SPF=0.0078125*SP
  3500.       RMM=9.*RM*RMF
  3501.       RMSS=9.*SS*RMF
  3502.       RMMS=RM*RMSS
  3503.       RSAF=RSA1*RSA5 + RS3*(RSA1+RSA5)
  3504.       RSBF=RSB1*RSB5 + 3.*RM*SM*(RSB1+RSB5)
  3505. C
  3506.       H(2)=RMF*SP*RSA1*RSA5
  3507.       Q(1,2)=-SPF*RSAF
  3508.       Q(2,2)= RMF*RSAF
  3509. C
  3510.       H(3)=RMF*SM*RSB1*RSB5
  3511.       Q(1,3)=-SMF*RSBF
  3512.       Q(2,3)=-RMF*RSBF
  3513. C
  3514.       H(6)=RSA1*RMMS
  3515.       Q(1,6)=-RMMS*(RS3+RSA1+RSA1)
  3516.       Q(2,6)= RMM*(RS3*SM - 2.*S*RSA1)
  3517. C
  3518.       H(10)=-RSA5*RMMS
  3519.       Q(1,10)= RMMS*(RS3 + RSA5 + RSA5)
  3520.       Q(2,10)=-RMM*(RS3*SM - 2.*S*RSA5)
  3521. C
  3522.       GO TO 40
  3523. C
  3524. C     FOR THE CASE OF ONE INTERNAL NODE ONLY
  3525. C
  3526.    39 IF (NODES(14).GT.0) GO TO 36
  3527.       IF (NODES(13).EQ.0) GO TO 40
  3528.       H(13)  =    RR*SS
  3529.       Q(1,13)=-2.0*R*SS
  3530.       Q(2,13)=-2.0*S*RR
  3531. C
  3532. C     MODIFICATION OF INTERPOLATION FUNCTIONS DUE TO THE INTERNAL NODE
  3533. C
  3534.       DO 41 I=1,4
  3535.       H(I)  =H(I)   + 0.25*H(13)
  3536.       H(I+4)=H(I+4) - 0.5*H(13)
  3537.       DO 41 J=1,2
  3538.       Q(J,I)  =Q(J,I)   + 0.25*Q(J,13)
  3539.       Q(J,I+4)=Q(J,I+4) - 0.5*Q(J,13)
  3540.    41 CONTINUE
  3541.       GO TO 40
  3542. C
  3543. C     FOR THE CASE OF CUBIC INTERNAL NODES
  3544. C
  3545.    36 RPF=-(2.0*R*RP3 - 1.6875*RR)*SS
  3546.       RMF=-(2.0*R*RM3 + 1.6875*RR)*SS
  3547.       SPF=-(2.0*S*SP3 - 1.6875*SS)*RR
  3548.       SMF=-(2.0*S*SM3 + 1.6875*SS)*RR
  3549. C
  3550.       H(13)  =RR*SS*RP3*SP3
  3551.       Q(1,13)=RPF*SP3
  3552.       Q(2,13)=RP3*SPF
  3553. C
  3554.       H(14)  =RR*SS*RM3*SP3
  3555.       Q(1,14)=RMF*SP3
  3556.       Q(2,14)=RM3*SPF
  3557. C
  3558.       H(15)  =RR*SS*RM3*SM3
  3559.       Q(1,15)=RMF*SM3
  3560.       Q(2,15)=RM3*SMF
  3561. C
  3562.       H(16)  =RR*SS*RP3*SM3
  3563.       Q(1,16)=RPF*SM3
  3564.       Q(2,16)=RP3*SMF
  3565. C
  3566. C     MODIFICATION OF INTERPOLATIONS DUE TO CUBIC INTERNAL NODES
  3567. C
  3568.       DO 42 IH=13,16
  3569.       IJ=4*(IH-13)
  3570.       IK=16-IH
  3571.       DO 42 K=1,4
  3572.       I1=NDNUM(IJ+K)
  3573.       CF=ICOEF(IK+K)/9.0
  3574.       H(K) =H(K)  +   CF*H(IH)
  3575.       H(I1)=H(I1) + COEF(K)*H(IH)
  3576.       DO 42 J=1,2
  3577.       Q(J,K)  =Q(J,K)  +   CF*Q(J,IH)
  3578.       Q(J,I1)=Q(J,I1) + COEF(K)*Q(J,IH)
  3579.    42 CONTINUE
  3580. C
  3581. C     COMPUTE (R,S) DERIVATIVES WITH RESPECT TO (X,Y,Z) COORDINATES
  3582. C
  3583.    40 DO 50 I=1,2
  3584.       DO 50 J=1,3
  3585.       X=0.0
  3586. C
  3587.       DO 55 K=1,NODEP
  3588.    55 X      = X + Q(I,K)* XX(J,K)
  3589.       XJ(I,J)= X
  3590.    50 CONTINUE
  3591. C
  3592. C     COMPUTE THE DIRECTION COSINES OF THE SURFACE NORMAL VECTOR
  3593. C     AT POINT (R,S) IN THE ELEMENT FACE
  3594. C
  3595.       A(1)    = XJ(1,2) * XJ(2,3) - XJ(1,3) * XJ(2,2)
  3596.       A(2)    = XJ(1,3) * XJ(2,1) - XJ(1,1) * XJ(2,3)
  3597.       A(3)    = XJ(1,1) * XJ(2,2) - XJ(1,2) * XJ(2,1)
  3598.       X       = 0.0
  3599.       DO 60 K=1,3
  3600.    60 X       = X + A(K)*A(K)
  3601.       X       = DSQRT(X)
  3602. C
  3603.       IF(X.GT.1.0D-6) GO TO 70
  3604. C
  3605.       WRITE (6,2000) R,S
  3606.       STOP
  3607. C
  3608.    70 X      = 1.0/X
  3609.       DO 80 K=1,3
  3610.    80 A(K)   = A(K)* X
  3611. C
  3612. C     COMPUTE THE AREA DIFFERENTIAL
  3613. C
  3614.       A1     = 0.0
  3615.       A2     = 0.0
  3616.       A3     = 0.0
  3617.       DO 90 K=1,3
  3618.       A1     = A1 + XJ(1,K)* XJ(1,K)
  3619.       A2     = A2 + XJ(1,K)* XJ(2,K)
  3620.       A3     = A3 + XJ(2,K)* XJ(2,K)
  3621.    90 CONTINUE
  3622.       X      = DSQRT(A1*A3 - A2*A2)
  3623. C
  3624.       FACTOR = WT* X* PRESS
  3625. C
  3626. C     ASSEMBLE THE NODE FORCE CONTRIBUTION
  3627. C
  3628.       DO 100 K=1,NODEP
  3629. C
  3630.       IF(NODES(K).EQ.0) GO TO 100
  3631. C
  3632.       X      = FACTOR* H(K)
  3633.       I1=1
  3634.       I2=3
  3635.       IF (IDIRN.EQ.0) GO TO 93
  3636.       I1=IDIRN
  3637.       I2=I1
  3638.    93 DO 95 I=I1,I2
  3639.       J=3*(K-1)+I
  3640.    95 PLOAD(J)=PLOAD(J)-A(I)*X
  3641. C
  3642.   100 CONTINUE
  3643.   300 CONTINUE
  3644. C
  3645.       RETURN
  3646.  2000 FORMAT (48H0***ERROR   UNDEFINED ELEMENT FACE NORMAL VECTOR, /
  3647.      1        12X,3HR =, F10.4 /
  3648.      2        12X,3HS =, F10.4 )
  3649.       END
  3650. C *CDC* *DECK PLVECP
  3651. C *UNI* )FOR,IS N.PLVECP,R.PLVECP
  3652.       SUBROUTINE PLVECP (NODES,XX,PLOAD,PRINT,IDIRN)
  3653.       IMPLICIT REAL*8 (A-H,O-Z)
  3654. C
  3655. C     SUBROUTINE TO CALCULATE EQUIVALENT NODAL FORCES DUE TO
  3656. C     PRESSURE LOADING ON A PLATE ELEMENT.
  3657. C
  3658. C
  3659. C     WHEN VALUES OF PRESSURE AT ALL THREE NODES ARE EQUAL, THIS
  3660. C     CALCULATION IS EQUIVALENT TO LUMPING OF FORCES.
  3661. C
  3662.       DIMENSION NODES(16),XX(3,16),PLOAD(48)
  3663.       DIMENSION PRINT(4)
  3664.       DIMENSION D(6), DN(3)
  3665. C
  3666. C     TO ESTABLISH A NORMAL VECTOR TO THE PLANE OF THE PLATE ELEMENT
  3667. C
  3668. C     MATRIX DN CONTAINS COMPONENTS OF THE NORMAL VECTOR
  3669. C     XMAG= (2)X(AREA OF THE PLATE ELEMENT)
  3670. C
  3671.       D(1)=XX(1,2) - XX(1,1)
  3672.       D(2)=XX(2,2) - XX(2,1)
  3673.       D(3)=XX(3,2) - XX(3,1)
  3674.       D(4)=XX(1,3) - XX(1,1)
  3675.       D(5)=XX(2,3) - XX(2,1)
  3676.       D(6)=XX(3,3) - XX(3,1)
  3677.       DN(1) = D(2)*D(6) - D(3)*D(5)
  3678.       DN(2) = D(3)*D(4) - D(1)*D(6)
  3679.       DN(3) = D(1)*D(5) - D(2)*D(4)
  3680.       XMAG = DN(1)*DN(1) + DN(2)*DN(2) + DN(3)*DN(3)
  3681.       XMAG = DSQRT(XMAG)
  3682.       DO 100 I=1,3
  3683.   100 DN(I) = DN(I)/XMAG
  3684. C
  3685. C     CALCULATION OF PRESSURE LOAD
  3686. C
  3687.       XMA=XMAG/24.0
  3688.       I1=1
  3689.       I2=3
  3690.       IF (IDIRN.EQ.0) GO TO 110
  3691.       I1=IDIRN
  3692.       I2=I1
  3693.   110 CONTINUE
  3694.       PTOTAL=PRINT(1) + PRINT(2) + PRINT(3)
  3695.       DO 120 J=1,3
  3696.       DO 120 I=I1,I2
  3697.       PLOAD(3*(J-1)+I) = -(PTOTAL+PRINT(J))*XMA*DN(I)
  3698.   120 CONTINUE
  3699. C
  3700.       RETURN
  3701. C
  3702.       END
  3703. C *CDC* *DECK TLOADS
  3704. C *UNI* )FOR,IS N.TLOADS,R.TLOADS
  3705.       SUBROUTINE TLOADS (R,TIMES,RV,IPNT,NODE,NCUR,FACTOR,
  3706.      1                   ARTIME,KL,NPTMA)
  3707. C
  3708. C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
  3709. C .   PROGRAM                                                         .
  3710. C .      . TO GENERATE NODAL TEMPERATURE TAPE FROM INPUT DATA CARDS   .
  3711. C .                                                                   .
  3712. C .   THIS SUBROUTINE IS CALLED ONLY IF                               .
  3713. C .   ITP96.EQ.2 - GENERATE NODAL TEMPERATURES FROM INPUT CARDS       .
  3714. C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
  3715. C
  3716.       IMPLICIT REAL*8 (A-H,O-Z)
  3717. C
  3718.       COMMON /SOL/ NUMNP,NEQ,NWK,NWM,NWC,NUMEST,MIDEST,MAXEST,NSTE,MA
  3719.       COMMON /LOA/ NLOAD,NPR2,NPR3,NPBM,NP3DB,NPPL,NPSH,NODE3,IDGRAV,
  3720.      1             NPDIS,NTEMP
  3721.       COMMON /TIMFN/ TEND,NTFN,NPTM
  3722.       COMMON /CONST/ DT,DTA,ACOEF(21),DTOD,IOPE
  3723.       COMMON /PRCON/ IDATWR,IPRIC,NPB,IDC,IVC,IAC,IPC,IPNODE(3,15)
  3724.       COMMON /ADINAI/ OPVAR(7),TSTART,IRINT,ISTOTE
  3725.       COMMON /TEMPRT/ TEMP1,TEMP2,ITEMPR,ITP96,N6A,N6B
  3726. C
  3727.       DIMENSION R(1),TIMES(NPTMA,1),RV(NPTMA,1),IPNT(1),
  3728.      1          NODE(1),NCUR(1),FACTOR(1),ARTIME(1),KL(1)
  3729. C
  3730.       DATA ITT /56/
  3731. C
  3732. C     POSITION TEMPERATURE TAPE
  3733. C
  3734.       READ (ITT) TIMIN,(R(K),K=1,NUMNP)
  3735. C
  3736.       IF (NTEMP.GT.0) GO TO 200
  3737. C
  3738. C     WHEN NTEMP.EQ.0 (AND ITP96.EQ.2),
  3739. C     GENERATE TAPE WITH TEMP=0. AT ALL NODES
  3740. C
  3741.       IF (NSTE.EQ.0) RETURN
  3742.       DO 310 I=1,NUMNP
  3743.   310 R(I)=0.
  3744.       DO 325 J=1,NSTE
  3745.       TIME=TSTART + DT*DBLE(FLOAT(J))
  3746.       WRITE (ITT) TIME,(R(K),K=1,NUMNP)
  3747.   325 CONTINUE
  3748. C
  3749.       REWIND 56
  3750. C
  3751.       RETURN
  3752. C
  3753. C . . . . . . . . . . . . . . . . . . . . . . . . .
  3754. C .   READ INPUT DATA AND CHECK FOR ERRORS        .
  3755. C . . . . . . . . . . . . . . . . . . . . . . . . .
  3756. C
  3757.   200 IF (IDATWR.LE.1) WRITE (6,2000)
  3758. C
  3759.       ISTOP=0
  3760.       DO 250 K=1,NTEMP
  3761. C
  3762.       READ (5,1000) NODE(K),NCUR(K),FACTOR(K),ARTIME(K),KL(K),IBUG
  3763. C
  3764.       IF (NODE(K).GT.0 .AND. NODE(K).LE.NUMNP) GO TO 210
  3765.       ISTOP=ISTOP+1
  3766.       WRITE (6,2100) K,NODE(K),NUMNP
  3767.   210 IF (NCUR(K).GE.0 .AND. NCUR(K).LE.NTFN) GO TO 240
  3768.       ISTOP=ISTOP+1
  3769.       WRITE (6,2110) K,NODE(K),NCUR(K),NTFN
  3770. C
  3771.   240 IF (K.EQ.NTEMP) KL(K)=0
  3772.       IF (IDATWR.GT.1) GO TO 250
  3773. C
  3774.       WRITE (6,2010) NODE(K),NCUR(K),FACTOR(K),ARTIME(K),KL(K)
  3775. C
  3776.   250 CONTINUE
  3777. C
  3778.       IF (ISTOP.EQ.0) GO TO 260
  3779.       WRITE (6,2500)
  3780.       STOP
  3781. C
  3782.   260 DO 275 K=1,NTEMP
  3783. C
  3784.       IF (KL(K).EQ.0) GO TO 275
  3785.       NODIF=NODE(K+1)-NODE(K)
  3786.       IDIFF=NODIF/KL(K)
  3787.       IF (NODIF.EQ.(IDIFF*KL(K))) GO TO 275
  3788. C
  3789.       ISTOP=ISTOP+1
  3790.       WRITE (6,2120) K,NODE(K),NODE(K+1),KL(K)
  3791. C
  3792.   275 CONTINUE
  3793. C
  3794.       IF (ISTOP.EQ.0) GO TO 10
  3795.       WRITE (6,2500)
  3796.       STOP
  3797. C
  3798. C . . . . . . . . . . . . . . . . . . . . . . . . .
  3799. C .   GENERATE TAPE (ITT) USING TIME FUNCTIONS    .
  3800. C . . . . . . . . . . . . . . . . . . . . . . . . .
  3801. C
  3802.    10 IF (NSTE.EQ.0) RETURN
  3803.       IF (IBUG.EQ.0) GO TO 15
  3804.       WRITE (6,2600)
  3805. C
  3806.    15 TIME=TSTART
  3807. C
  3808.       DO 100 I=1,NSTE
  3809.       TIME=TIME + DT
  3810. C
  3811. C     INITIALIZE R VECTOR
  3812. C
  3813.       DO 20 J=1,NUMNP
  3814.    20 R(J)=0.
  3815. C
  3816.       DO 60 K=1,NTEMP
  3817. C
  3818.       LN=NODE(K)
  3819.       LC=NCUR(K)
  3820.       NPTS=IPNT(LC)
  3821.       FACT=FACTOR(K)
  3822.       ARTM=ARTIME(K)
  3823.       KGEN=KL(K)
  3824. C
  3825. C     FOR GENERATION, CALCULATE
  3826. C     INCREMENTAL VALUES DFACT AND DARTM
  3827. C
  3828.       IF (KGEN.EQ.0) GO TO 25
  3829.       IDIFF=(NODE(K+1)-NODE(K)) / KGEN
  3830.       DIFF=DBLE(FLOAT(IDIFF))
  3831.       DARTM=(ARTIME(K+1)-ARTIME(K))/DIFF
  3832.       DFACT=(FACTOR(K+1)-FACTOR(K))/DIFF
  3833. C
  3834.    25 TIM=TIME-ARTM
  3835. C
  3836. C     LC=0 IMPLIES STEP FUNCTION AT TIME=ARTM
  3837. C
  3838.       IF (TIM.LT.0.) GO TO 50
  3839.       IF (LC.GT.0) GO TO 30
  3840.       R(LN)=R(LN)+FACT
  3841.       GO TO 50
  3842. C
  3843. C     CALCULATE VALUE OF FUNCTION AT TIM
  3844. C
  3845.    30 IF (TIM.GE.TIMES(1,LC)) GO TO 35
  3846.       WRITE (6,2200) I,LN,LC,NPTS,TIME,ARTM,TIMES(1,LC),TIM
  3847.       STOP
  3848. C
  3849.    35 DO 40 J=2,NPTS
  3850.       IF (TIM.GT.TIMES(J,LC)+DT*1.D-5) GO TO 40
  3851.       JJ=J
  3852.       JI=JJ-1
  3853.       GO TO 42
  3854.    40 CONTINUE
  3855.       WRITE (6,2210) I,LN,LC,NPTS,TIME,ARTM,TIMES(NPTS,LC),TIM
  3856.       STOP
  3857. C
  3858.    42 SLOPE=(RV(JJ,LC)-RV(JI,LC)) / (TIMES(JJ,LC)-TIMES(JI,LC))
  3859.       VALUE=RV(JI,LC) + SLOPE * (TIM-TIMES(JI,LC))
  3860.       R(LN)=R(LN) + FACT*VALUE
  3861. C
  3862.    50 IF (KGEN.EQ.0) GO TO 60
  3863. C
  3864. C     G E N E R A T I O N -
  3865. C     LINEAR INCREMENT OF FACT AND ARTM IN NODE NUMBERS
  3866. C
  3867.       LN=LN+KGEN
  3868.       IF (LN.GE.NODE(K+1)) GO TO 60
  3869.       FACT=FACT + DFACT
  3870.       ARTM=ARTM + DARTM
  3871.       GO TO 25
  3872. C
  3873.    60 CONTINUE
  3874. C
  3875.       WRITE (ITT) TIME,(R(LL),LL=1,NUMNP)
  3876. C
  3877.       IF (IBUG.EQ.0) GO TO 100
  3878.       WRITE (6,2610) I,TIME
  3879.       WRITE (6,2620) (LL,R(LL),LL=1,NUMNP)
  3880. C
  3881.   100 CONTINUE
  3882. C
  3883. C
  3884.       REWIND ITT
  3885. C
  3886.       RETURN
  3887. C
  3888.  1000 FORMAT (2I5,2F10.0,2I5)
  3889.  2000 FORMAT (////44H N O D A L   T E M P E R A T U R E   D A T A//
  3890.      1        12X,4HTIME,9X,13HTIME FUNCTION,26X,4HNODE/
  3891.      1        5H NODE, 5X,8HFUNCTION,10X,10HMULTIPLIER,5X,
  3892.      2        12HARRIVAL TIME,6X,10HGENERATION/)
  3893.  2010 FORMAT (I5,I10,3X,E20.6,E17.6,6X,I6)
  3894.  2100 FORMAT (///28H *** I N P U T   E R R O R -//
  3895.      1        30H DETECTED BY SUBROUTINE TLOADS/
  3896.      2        38H WHILE READING NODAL TEMPERATURE CARDS//
  3897.      3        5X,14H CARD NUMBER =,I5/
  3898.      3        5X,14H NODE NUMBER =,I5/
  3899.      3        5X,34H NUMBER OF NODES ... (NUMNP) ... =,I5//
  3900.      4        40H NODE NUMBER MUST BE GT.0 AND LE.NUMNP .)
  3901.  2110 FORMAT (///28H *** I N P U T   E R R O R -//
  3902.      1        30H DETECTED BY SUBROUTINE TLOADS/
  3903.      2        38H WHILE READING NODAL TEMPERATURE CARDS//
  3904.      3        5X,14H CARD NUMBER =,I5/
  3905.      3        5X,14H NODE NUMBER =,I5/
  3906.      3        5X,14H CURVE NUMBER=,I5/
  3907.      3        5X,34H NUMBER OF CURVES ... (NTFN) ... =,I5//
  3908.      4        41H CURVE NUMBER MUST BE GE.0 AND LE.NTFN . )
  3909.  2120 FORMAT (///28H *** I N P U T   E R R O R -//
  3910.      1        30H DETECTED BY SUBROUTINE TLOADS/
  3911.      2        38H WHILE READING NODAL TEMPERATURE CARDS//
  3912.      3        5X,20H CARD NUMBER     K =,I5/
  3913.      4        5X,20H NODE (K)          =,I5/
  3914.      5        5X,20H NODE (K+1)        =,I5/
  3915.      6        5X,20H KL (K)            =,I5//
  3916.      7        21H FOR NODE GENERATION,/
  3917.      8        49H (NODE(K+1)-NODE(K)) MUST BE DIVISIBLE BY KL(K) .)
  3918.  2200 FORMAT (///28H *** I N P U T   E R R O R -//
  3919.      1        30H DETECTED BY SUBROUTINE TLOADS/
  3920.      2        51H WHILE GENERATING NODAL TEMPERATURES FOR TIMESTEP =I5//
  3921.      4        5X,16H NODE NUMBER   =,I5/
  3922.      5        5X,16H CURVE NUMBER  =,I5/
  3923.      5        5X,28H NUMBER OF POINTS IN CURVE =,I5/
  3924.      3        5X,16H SOLUTION TIME =,E14.6/
  3925.      3        5X,16H ARRIVAL  TIME =,E14.6//
  3926.      7        28H FIRST TIME VALUE IN CURVE =,E14.6/
  3927.      8        50H MUST BE LE. TIME FOR ENTERING CURVE (TIME-ARTM) =,
  3928.      9        E14.6//12H *** S T O P)
  3929.  2210 FORMAT (///28H *** I N P U T   E R R O R -//
  3930.      1        30H DETECTED BY SUBROUTINE TLOADS/
  3931.      2        51H WHILE GENERATING NODAL TEMPERATURES FOR TIMESTEP =I5//
  3932.      3        5X,16H NODE NUMBER   =,I5/
  3933.      5        5X,16H CURVE NUMBER  =,I5/
  3934.      6        5X,28H NUMBER OF POINTS IN CURVE =,I5/
  3935.      7        5X,16H SOLUTION TIME =,E14.6/
  3936.      8        5X,16H ARRIVAL  TIME =,E14.6//
  3937.      9        28H LAST  TIME VALUE IN CURVE =,E14.6/
  3938.      1        50H MUST BE GE. TIME FOR ENTERING CURVE (TIME-ARTM) =,
  3939.      9        E14.6//12H *** S T O P)
  3940.  2500 FORMAT (///12H *** S T O P)
  3941.  2600 FORMAT (1H1,29HG E N E R A T E D   N O D A L,
  3942.      1        26H   T E M P E R A T U R E S)
  3943.  2610 FORMAT (///14H STEP NUMBER =,I5/14H TIME        =,E12.6///
  3944.      1        5H NODE,5X,11HTEMPERATURE,3(9X,5H NODE,5X,11HTEMPERATURE)
  3945.      2        /)
  3946.  2620 FORMAT (I5,E16.6,8X,I5,E17.6,8X,I5,E17.6,8X,I5,E17.6)
  3947. C
  3948.       END
  3949. C *CDC* *DECK OVL200
  3950. C *CDC*      OVERLAY (ADINA,20,0)
  3951. C *CDC* *DECK FREQS
  3952. C *UNI* )FOR,IS  N.FREQS,  R.FREQS
  3953. C *CDC*      PROGRAM FREQS
  3954.       SUBROUTINE FREQS
  3955. C
  3956. C
  3957. C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
  3958. C .                                                                   .
  3959. C .   P R O G R A M                                                   .
  3960. C .      TO FIND THE LOWEST FREQUENCIES AND ASSOCIATED                .
  3961. C .      MODE SHAPES OF LINEARIZED STRUCTURE                          .
  3962. C .                                                                   .
  3963. C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
  3964. C
  3965. C
  3966.       IMPLICIT REAL*8 (A-H,O-Z)
  3967.       COMMON /SOL/ NUMNP,NEQ,NWK,NWM,NWC,NUMEST,MIDEST,MAXEST,NSTE,MA
  3968.       COMMON /DIM/ N0,N1,N2,N3,N4,N5,N6,N7,N8,N9,N10,N11,N12,N13,N14,N15
  3969.       COMMON /DIMETC/ N01,N02,N03,N04,N05,N06,N07,N08,N09
  3970.       COMMON /TEMPRT/ TEMP1,TEMP2,ITEMPR,ITP96,N6A,N6B
  3971.       COMMON /DISCON/ NDISCE,NIDM
  3972.       COMMON /CONST/ DT,DTA,CONS(21),DTOD,IOPE
  3973.       COMMON /MSUPER/ IMODES,NMODES,IMDAMP
  3974.       COMMON /VAR/ NG,MODEX,IUPDT,KSTEP,ITEMAX,IEQREF,ITE,KPRI,
  3975.      1             IREF,IEQUIT,IPRI,KPLOTN,KPLOTE
  3976.       COMMON /EIGIF/ COFQ,RBMSH,IESTYP,NFREQ,NMODE,IFPR,IRBM
  3977.       COMMON /TAPEIG/ SCALE,NSTIF,NT,NMASS,NRED,NSHIFT,NOVER
  3978.       COMMON /DPR/ ITWO
  3979.       REAL A
  3980.       COMMON A(1)
  3981. C
  3982.       IF (IESTYP.EQ.0)
  3983. C *CDC*     1   CALL OVERLAY (5HADINA,20B,1B,6HRECALL)
  3984.      1    CALL MSECNT
  3985.       IF (IESTYP.EQ.1)
  3986. C *CDC*     1   CALL OVERLAY (5HADINA,20B,2B,6HRECALL)
  3987.      1    CALL MSUBSP
  3988. C
  3989. C     RESET NUMBER OF MODES USED IN MODE SUPERPOSITION IF NECESSARY
  3990. C
  3991.       IF (IMODES.EQ.0) GO TO 100
  3992.       IF (NMODES.LE.NFREQ) GO TO 100
  3993.       WRITE (6,2000)
  3994.       NMODES=NFREQ
  3995. C
  3996. C     INITIAL CONDITIONS ARE TAKEN BACK INTO CORE
  3997. C
  3998.   100 IF (MODEX.EQ.0) GO TO 599
  3999.       IF (IMODES.GT.0) GO TO 599
  4000.       NN=N2 + NEQ*ITWO - 1
  4001.       READ (8) (A(I),I=N2,NN)
  4002.       NN=N7 + NEQ*ITWO - 1
  4003.       READ (8) (A(I),I=N7,NN)
  4004.       NN=N8 + NEQ*ITWO - 1
  4005.       READ (8) (A(I),I=N8,NN)
  4006.       IF (NDISCE.GT.0)
  4007.      1  CALL CONDIS (A(N01),A(N02),A(N03),A(N2),A(N7),A(N8),NIDM,1)
  4008.       IF (ITEMPR.LE.1) GO TO 599
  4009.       BACKSPACE 56
  4010.       NN=N6B - 1
  4011.       READ (56) (A(I),I=N6A,NN)
  4012. C
  4013.   599 CONTINUE
  4014. C
  4015.       RETURN
  4016. C
  4017.  2000 FORMAT (1H1,//47H ***NOTE*** WE RESET THE NUMBER OF MODES USED   /
  4018.      1              47H IN THE MODE SUPERPOSITION (NMODES) TO THE      /
  4019.      2              37H NUMBER OF MODES ACTUALLY CALCULATED  )
  4020.       END
  4021. C *CDC* *DECK PNORM
  4022. C *UNI* )FOR,IS  N.PNORM,  R.PNORM
  4023.       SUBROUTINE PNORM (MAXA,NCOLBV,S,B,XM,IRBM,RBMSH,NEQ,ISTOH,
  4024.      1                  NBLOCK,NSTIF,NMASS,IMASS,ANORM,NFREQ)
  4025. C
  4026. C     FINDS A NORM OF THE MATRIX S
  4027. C
  4028.       IMPLICIT REAL*8 (A-H,O-Z)
  4029.       DIMENSION S(ISTOH),B(ISTOH),XM(1)
  4030.       INTEGER MAXA(1),NCOLBV(1)
  4031. C
  4032.       NEQL=1
  4033.       NEQR=0
  4034.       MLA=0
  4035.       SUM=0.
  4036.       SHIFT=0.
  4037.       NT=9
  4038.       REWIND NT
  4039.       REWIND NSTIF
  4040.       REWIND NMASS
  4041.       NMDOF=0
  4042.       IF (IMASS.EQ.2) GO TO 16
  4043.       READ (NMASS) (XM(I),I=1,NEQ)
  4044.       DO 8 I=1,NEQ
  4045.     8 IF (XM(I).GT.0.) NMDOF=NMDOF+1
  4046. C
  4047.    16 DO 20 NJ=1,NBLOCK
  4048.       NEQR=NEQR + NCOLBV(NJ)
  4049.       READ (NSTIF) S
  4050.       IF (IMASS.EQ.2) READ (NMASS) B
  4051.       IF (IRBM.GT.0) WRITE (NT) S
  4052. C
  4053.       DO 10 I=NEQL,NEQR
  4054.       II=MAXA(I) - MLA
  4055.       AA=S(II)
  4056.       IF (IMASS.EQ.1) GO TO 18
  4057.       IF (B(II).GT.0.) NMDOF=NMDOF+1
  4058.    18 IF (AA.GT.0.) GO TO 10
  4059.       WRITE (6,1000) I,AA
  4060.       STOP
  4061.    10 SUM=SUM + AA
  4062. C
  4063.       IF (RBMSH.LT.0. .OR. IRBM.EQ.0) GO TO 19
  4064. C
  4065.       IF (IMASS.EQ.2) GO TO 15
  4066.       DO 12 I=NEQL,NEQR
  4067.       II=MAXA(I) - MLA
  4068.       DUM=XM(I)/S(II)
  4069.       IF (DUM.GT.SHIFT) SHIFT=DUM
  4070.    12 CONTINUE
  4071.       GO TO 19
  4072. C
  4073.    15 DO 17 I=NEQL,NEQR
  4074.       II=MAXA(I) - MLA
  4075.       DUM=B(II)/S(II)
  4076.       IF (DUM.GT.SHIFT) SHIFT=DUM
  4077.    17 CONTINUE
  4078. C
  4079.    19 NEQL=NEQL + NCOLBV(NJ)
  4080.    20 MLA=MAXA(NEQL) - 1
  4081. C
  4082.       ANORM=(SUM/NEQ)*.000000001D0
  4083. C
  4084.       IF (NMDOF.GE.NFREQ) GO TO 21
  4085.       WRITE (6,3020) NMDOF,NFREQ
  4086.       STOP
  4087. C
  4088.    21 IF (IRBM.EQ.0) RETURN
  4089. C
  4090. C     APPLY SHIFT IF RIGID BODY MODES ARE PRESENT
  4091. C
  4092.       IF (RBMSH) 30,25,22
  4093.    22 WRITE (6,3000)
  4094.       STOP
  4095.    25 RBMSH=-0.001/SHIFT
  4096.       WRITE (6,2000) RBMSH
  4097.    30 NEQL=1
  4098.       NEQR=0
  4099.       MLA=0
  4100.       REWIND NT
  4101.       REWIND NSTIF
  4102.       REWIND NMASS
  4103. C
  4104.       DO 120 NJ=1,NBLOCK
  4105.       NEQR=NEQR + NCOLBV(NJ)
  4106.       READ (NT) S
  4107.       IF (IMASS.EQ.2) GO TO 104
  4108. C
  4109.       DO 106 I=NEQL,NEQR
  4110.       II=MAXA(I) - MLA
  4111.   106 S(II)=S(II) - RBMSH*XM(I)
  4112.       GO TO 102
  4113. C
  4114.   104 READ (NMASS) B
  4115.       DO 108 I=1,ISTOH
  4116.   108 S(I)=S(I) - RBMSH*B(I)
  4117. C
  4118.   102 WRITE (NSTIF) S
  4119.       NEQL=NEQL + NCOLBV(NJ)
  4120.   120 MLA=MAXA(NEQL) - 1
  4121. C
  4122.       RETURN
  4123. C
  4124.  1000 FORMAT (43H ***ERROR   NEG OR ZERO DIAGONAL ELEMENT A(,I4,4H) =  ,
  4125.      1        E11.4,21HBEFORE DECOMPOSITION   )
  4126.  2000 FORMAT (//32H RIGID BODY MODE SHIFT APPLIED =,E15.5)
  4127.  3000 FORMAT (//46H *** ERROR IN FREQUENCY CONTROL CARD INPUT ***,/,
  4128.      1       54H THE VALUE FOR RIGID BODY SHIFT INPUT MUST BE NEGATIVE )
  4129.  3020 FORMAT (//30H *** STOP ***   ERROR IN INPUT  /
  4130.      1          42H NUMBER OF MASS DEGREES OF FREEDOM IS LESS   ,
  4131.      2          42H THAN NUMBER OF FREQUENCIES REQUESTED.     //
  4132.      2          24H NUMBER OF MASS D.O.F. =,I5/
  4133.      3          34H NUMBER OF FREQUENCIES REQUESTED =,I5//)
  4134. C
  4135.       END
  4136. C *CDC* *DECK BANDET
  4137. C *UNI* )FOR,IS  N.BANDET, R.BANDET
  4138.       SUBROUTINE BANDET (A,B,XM,V,D,MAXA,NCOLBV,ICOPL,NEQ,ISTOH,NBLOCK,
  4139.      1 RA,NSCH,IMASS,FDET,IDET,KKK)
  4140. C
  4141.       IMPLICIT REAL*8 (A-H,O-Z)
  4142.       COMMON /TAPEIG/ SCALE,NSTIF,NT,NMASS,NRED,NSHIFT,NOVER
  4143.       COMMON /RANDI/ N0A,N1D,IELCPL
  4144.       COMMON /RQSHF/ IRQS
  4145.       COMMON /EIGIF/ COFQ,RBMSH,IESTYP,NFREQ,NMODE,IFPR,IRBM
  4146.       COMMON /RHSV/ NVEC
  4147. C
  4148.       DIMENSION A(ISTOH),B(ISTOH),V(NEQ,1),D(1),XM(1)
  4149.       INTEGER MAXA(1),NCOLBV(1),ICOPL(1)
  4150. C
  4151.       NR=NEQ-1
  4152.       KHBB=0
  4153.       IF (IESTYP.EQ.0) NVEC=1
  4154.       IF (KKK-2) 10,690,780
  4155. C
  4156.    10 TOL=10.**10
  4157.       RTOL=0.00001
  4158.       NTF=3
  4159.       IS=1
  4160.       BSCALE=2.**(-80)
  4161.       USCALE=2.**(80)
  4162.       NSCH=0
  4163.       FDET=1.
  4164.       IDET=0
  4165.    50 NEQL=1
  4166.       NEQR=0
  4167.       MLA=0
  4168. C
  4169.       REWIND NSTIF
  4170.       REWIND NMASS
  4171. C
  4172. C - - FACTORIZE  MATRIX  ( A - RA*B )  ( LOOP OVER ALL BLOCKS ) - -
  4173. C
  4174.       DO 600 NJ=1,NBLOCK
  4175. C
  4176.       READ (NSTIF) A
  4177.       NCOLB=NCOLBV(NJ)
  4178. C
  4179.       IF (RA.EQ.0.) GO TO 60
  4180.       IF (IMASS.EQ.1) GO TO 52
  4181.       READ (NMASS) B
  4182.       DO 54 I=1,ISTOH
  4183.    54 A(I)=A(I) - RA*B(I)
  4184.       GO TO 60
  4185.    52 NEQR=NEQR + NCOLB
  4186.       DO 80 I=NEQL,NEQR
  4187.       II=MAXA(I) - MLA
  4188.    80 A(II)=A(II) - RA*XM(I)
  4189. C
  4190.    60 MM=MAXA(KHBB+1) - 1
  4191.       IF (NJ.EQ.ICOPL(NJ)) GO TO 300
  4192. C
  4193.       IK=ICOPL(NJ) - 1
  4194.       IM=0
  4195.       IF (IK) 300,140,100
  4196.   100 DO 120 K=1,IK
  4197.   120 IM=IM + NCOLBV(K)
  4198.   140 KHB=KHBB - IM
  4199.       IK=IK + 1
  4200.       NJ1=NJ - 1
  4201. C
  4202. C     REDUCE BLOCK BY THE PRECEEDING COUPLING BLOCKS
  4203. C
  4204.       DO 160 NK=IK,NJ1
  4205. C
  4206. C
  4207. C        * * * * *        R A N D O M  A C C E S S        * * *
  4208. C
  4209.       NREC10=NK
  4210.       CALL READMS (NRED,B,ISTOH,NREC10)
  4211. C
  4212. C        * * * * *        R A N D O M  A C C E S S        * * *
  4213. C
  4214.       KHB=KHB - NCOLBV(NK)
  4215.       MC=MAXA(IM+1) - 1
  4216. C
  4217.       DO 200 N=1,NCOLB
  4218.       KN=MAXA(KHBB+N) - MM
  4219.       KL=KN + 1
  4220.       KU=MAXA(KHBB+N+1) - 1 - MM
  4221.       KH=KU - KL - N + 1
  4222.       KC=KH - KHB
  4223.       IF (KC.LE.0) GO TO 200
  4224.       IC=0
  4225.       KCL=NCOLBV(NK) - KC + 1
  4226.       IF (KCL.GT.0) GO TO 210
  4227.       IC=1 - KCL
  4228.       KCL=1
  4229.   210 KCR=NCOLBV(NK)
  4230.       KLT=KU - IC
  4231. C
  4232.       DO 220 K=KCL,KCR
  4233. C
  4234.       IC=IC + 1
  4235.       KLT=KLT - 1
  4236.       KI=MAXA(K+IM) - MC
  4237.       ND=MAXA(K+IM+1) - KI - MC - 1
  4238.       IF(ND) 220,220,230
  4239.   230 KK=MIN0(IC,ND)
  4240.       C=0.
  4241.       DO 240 L=1,KK
  4242.   240 C=C + B(KI+L)*A(KLT+L)
  4243.       A(KLT)=A(KLT) - C
  4244.   220 CONTINUE
  4245.   200 CONTINUE
  4246. C
  4247.       IM=IM + NCOLBV(NK)
  4248. C
  4249.   160 CONTINUE
  4250. C
  4251. C     REDUCE BLOCK BY ITSELF
  4252. C
  4253.   300 DO 400 N=1,NCOLB
  4254.       KN=MAXA(KHBB+N) - MM
  4255.       KL=KN + 1
  4256.       KU=MAXA(KHBB+N+1) - 1 - MM
  4257.       KDIF=KU - KL
  4258.       KH=MIN0(KDIF,N-1)
  4259.       KS=N + KHBB
  4260.       IF (KH) 420,440,460
  4261.   460 K=N - KH
  4262.       KLT=KL + KH
  4263.       IC=0
  4264.       IF ((N-1).LT.KDIF) IC=KDIF - N + 1
  4265. C
  4266.       DO 480 J=1,KH
  4267.       IC=IC + 1
  4268.       KLT=KLT - 1
  4269.       KI=MAXA(KHBB+K) - MM
  4270.       ND=MAXA(KHBB+K+1) - KI - MM - 1
  4271.       IF (ND) 480,480,500
  4272.   500 KK=MIN0(IC,ND)
  4273.       C=0.
  4274.       DO 520 L=1,KK
  4275.   520 C=C + A(KI+L)*A(KLT+L)
  4276.       A(KLT)=A(KLT) - C
  4277.   480 K=K + 1
  4278. C
  4279.   440 K=KS
  4280.       E=0.
  4281.       DO 540 KK=KL,KU
  4282.       K=K - 1
  4283.       C=A(KK)/D(K)
  4284.       IF(DABS(C).LT.TOL) GO TO 530
  4285.       WRITE (6,2010) N,C
  4286.       GO TO 550
  4287.   530 E=E + C*A(KK)
  4288.   540 A(KK)=C
  4289.       A(KN)=A(KN) - E
  4290. C
  4291.   420 D(KS)=A(KN)
  4292.       IF (D(KS)) 400,545,400
  4293.   545 IF (RA.EQ.0.) GO TO 555
  4294.   550 IS=IS + 1
  4295.       IF (IS.LE.NTF) GO TO 560
  4296.   555 WRITE (6,2000) NTF,RA
  4297.       STOP
  4298.   560 RA=RA*(1. - RTOL)
  4299.       RTOL=RTOL*10.
  4300.       KHBB=0
  4301.       GO TO 50
  4302. C
  4303.   400 CONTINUE
  4304. C
  4305. C
  4306. C        * * * * *        R A N D O M  A C C E S S        * * *
  4307. C
  4308.       IF (IRQS.LT.0) IRQS=0
  4309.       NREC10=NJ + IRQS
  4310.       CALL WRITMS (NRED,A,ISTOH,NREC10,-1)
  4311. C
  4312. C        * * * * *        R A N D O M  A C C E S S        * * *
  4313. C
  4314.       KHBB=KHBB + NCOLB
  4315.       NEQL=NEQL + NCOLB
  4316.       MLA=MAXA(NEQL) - 1
  4317.   600 CONTINUE
  4318. C
  4319.       IF (D(NEQ).NE.0.) GO TO 650
  4320.       AA=DABS(D(1))
  4321.       DO 630 I=2,NEQ
  4322.   630 AA=AA + DABS(D(I))
  4323.       D(NEQ)=-(AA/NR)*0.00000000000001D0
  4324. C
  4325.   650 DO 660 I=1,NEQ
  4326.       IF (D(I).LT.0.) NSCH=NSCH + 1
  4327.   660 CONTINUE
  4328.       IF (IESTYP.EQ.1) RETURN
  4329. C
  4330.       DO 670 I=1,NEQ
  4331.       FDET=FDET*D(I)
  4332.       IF (FDET.LT.USCALE .AND. FDET.GE.BSCALE) GO TO 670
  4333.       CALL RSCALE (FDET,IDET)
  4334.   670 CONTINUE
  4335. C
  4336.       RETURN
  4337. C
  4338. C - - FIND EIGENVECTORS ( LOOP OVER ALL BLOCKS ) - -
  4339. C
  4340.   690 DO 700 NJ=1,NBLOCK
  4341.       IF (NBLOCK.EQ.1 .AND. IRQS.GE.0) GO TO 710
  4342. C
  4343. C        * * * * *        R A N D O M  A C C E S S        * * *
  4344. C
  4345.       NREC10=NJ
  4346.       IF (IRQS.GT.0) NREC10=NREC10 + IRQS
  4347.       CALL READMS (NRED,A,ISTOH,NREC10)
  4348. C
  4349. C        * * * * *        R A N D O M  A C C E S S        * * *
  4350. C
  4351.   710 NCOLB=NCOLBV(NJ)
  4352.       MM=MAXA(KHBB+1) - 1
  4353.       IF (IRQS.GE.0) GO TO 716
  4354. C
  4355.       DO 714 N=1,NCOLB
  4356.       KS=N + KHBB
  4357.       KL=MAXA(KS) - MM
  4358.   714 D(KS)=A(KL)
  4359.       IF (NJ.EQ.NBLOCK) IRQS=0
  4360. C
  4361.   716 DO 720 N=1,NCOLB
  4362.       KL=MAXA(N+KHBB) - MM + 1
  4363.       KU=MAXA(N+KHBB+1) - MM - 1
  4364.       IF (KU-KL) 720,730,730
  4365.   730 KS=N + KHBB
  4366.       DO 750 NV=1,NVEC
  4367.       K=KS
  4368.       C=0.
  4369.       DO 740 KK=KL,KU
  4370.       K=K - 1
  4371.   740 C=C + A(KK)*V(K,NV)
  4372.   750 V(KS,NV)=V(KS,NV) - C
  4373.   720 CONTINUE
  4374.       KHBB=KHBB + NCOLB
  4375.   700 CONTINUE
  4376. C
  4377. C     BACKSUBSTITUTE
  4378. C
  4379.   780 DO 790 N=1,NEQ
  4380.       DO 790 NV=1,NVEC
  4381.   790 V(N,NV)=V(N,NV)/D(N)
  4382.   795 NBL=NBLOCK
  4383.       DO 800 NJ=1,NBLOCK
  4384.       IF (NBLOCK.EQ.1) GO TO 820
  4385. C
  4386. C        * * * * *        R A N D O M  A C C E S S        * * *
  4387. C
  4388.       NJB1=NBLOCK - NJ + 1 + IRQS
  4389.       CALL READMS (NRED,A,ISTOH,NJB1)
  4390. C
  4391. C        * * * * *        R A N D O M  A C C E S S        * * *
  4392. C
  4393.       NCOLB=NCOLBV(NBL)
  4394.   820 KHBB=KHBB - NCOLB
  4395.       MM=MAXA(KHBB+1) - 1
  4396.       N=NCOLB
  4397.       DO 860 L=1,NCOLB
  4398.       KL=MAXA(N+KHBB) - MM + 1
  4399.       KU=MAXA(N+KHBB+1) - MM - 1
  4400.       IF (KU-KL) 861,890,890
  4401.   890 KS=KHBB + N
  4402.       DO 900 NV=1,NVEC
  4403.       K=KS
  4404.       DO 900 KK=KL,KU
  4405.       K=K - 1
  4406.   900 V(K,NV)=V(K,NV) - A(KK)*V(KS,NV)
  4407.   861 N=N-1
  4408.   860 CONTINUE
  4409.       NBL=NBL - 1
  4410.   800 CONTINUE
  4411. C
  4412.       RETURN
  4413.  2000 FORMAT (37H0***ERROR   SOLUTION STOP IN *BANDET*, / 12X,
  4414.      1        1H(,I3,37H) TRIANGULAR FACTORIZATIONS ATTEMPTED, / 12X,
  4415.      2        16HCURRENT SHIFT = ,E20.14 / 1X)
  4416.  2010 FORMAT (//47H STOP - STURM SEQUENCE CHECK FAILED BECAUSE OF
  4417.      135HMULTIPLIER GROWTH FOR COLUMN NUMBER,I4,//12H MULTIPLIER=,E20.8)
  4418.       END
  4419. C *CDC* *DECK MLTPLY
  4420. C *UNI* )FOR,IS  N.MLTPLY, R.MLTPLY
  4421.       SUBROUTINE MLTPLY(A,B,C,MAXA,NEQ,NCOLBV,ISTOH,NBLOCK,NTAPE)
  4422. C
  4423. C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
  4424. C .                                                                   .
  4425. C .   P R O G R A M                                                   .
  4426. C .      . TO CALCULATE   A = A + B*C  , WHERE B  IS STORED IN       .
  4427. C .        COMPACTED FORM  ,  A  AND  C  ARE VECTORS                  .
  4428. C .                                                                   .
  4429. C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
  4430. C
  4431.       IMPLICIT REAL*8 (A-H,O-Z)
  4432.       COMMON /EIGIF/ COFQ,RBMSH,IESTYP,NFREQ,NMODE,IFPR,IRBM
  4433.       DIMENSION A(1),B(ISTOH),C(1)
  4434.       INTEGER MAXA(1),NCOLBV(1)
  4435. C
  4436.       REWIND NTAPE
  4437.       IREAD=0
  4438.       IF (IESTYP.EQ.1 .AND. NBLOCK.EQ.1) IREAD=1
  4439.       IF (NEQ.GT.1) GO TO 10
  4440. C
  4441.       IF (IREAD.EQ.0) READ (NTAPE) B
  4442.       A(1)=A(1) + B(1)*C(1)
  4443.       RETURN
  4444. C
  4445.    10 DO 99 I=1,NEQ
  4446.    99 A(I)=0.
  4447.       NEQL=1
  4448.       NEQR=0
  4449.       MLA=0
  4450.       DO 40 L=1,NBLOCK
  4451.       IF (IREAD.EQ.0) READ (NTAPE) B
  4452.       NEQR=NEQR+NCOLBV(L)
  4453.       DO 100 I=NEQL,NEQR
  4454.       KL=MAXA(I) - MLA
  4455.       KU=MAXA(I+1) - 1 - MLA
  4456.       II=I + 1
  4457.       CC=C(I)
  4458.       DO 100 KK=KL,KU
  4459.       II=II - 1
  4460.   100 A(II)=A(II) + B(KK)*CC
  4461.       DO 200 I=NEQL,NEQR
  4462.       KL=MAXA(I) + 1 - MLA
  4463.       KU=MAXA(I+1) - 1 - MLA
  4464.       IF(KU-KL) 200,210,210
  4465.   210 II=I
  4466.       AA=0.
  4467.       DO 220 KK=KL,KU
  4468.       II=II - 1
  4469.   220 AA=AA + B(KK)*C(II)
  4470.       A(I)=A(I) + AA
  4471.   200 CONTINUE
  4472. C
  4473.       NEQL=NEQL + NCOLBV(L)
  4474.       MLA=MAXA(NEQL) - 1
  4475.    40 CONTINUE
  4476. C
  4477.       RETURN
  4478.       END
  4479. C *CDC* *DECK RSCALE
  4480. C *UNI* )FOR,IS  N.RSCALE, R.RSCALE
  4481.       SUBROUTINE RSCALE (FNUM,IEXP)
  4482.       IMPLICIT REAL*8 (A-H,O-Z)
  4483.       BSCALE=2.**(-80)
  4484.       USCALE=2.**80
  4485.       IPOWER=80
  4486.    10 IF (DABS(FNUM).LT.USCALE) GO TO 20
  4487.       FNUM=FNUM*BSCALE
  4488.       IEXP=IEXP + IPOWER
  4489.       GO TO 10
  4490.    20 IF (DABS(FNUM).GE.BSCALE) GO TO 30
  4491.       FNUM=FNUM*USCALE
  4492.       IEXP=IEXP-IPOWER
  4493.       GO TO 10
  4494.    30 CONTINUE
  4495.       RETURN
  4496.       END
  4497. C *CDC* *DECK WRFREQ
  4498. C *UNI* )FOR,IS  N.WRFREQ, R.WRFREQ
  4499.       SUBROUTINE WRFREQ (AA,NFREQ,RBMSH)
  4500. C
  4501. C     SUBROUTINE TO READ AND WRITE FREQUENCIES
  4502. C
  4503.       IMPLICIT REAL*8 (A-H,O-Z)
  4504.       DIMENSION AA(1)
  4505.       COMMON /TAPEIG/ SCALE,NSTIF,NT,NMASS,NRED,NSHIFT,NOVER
  4506. C
  4507.       BACKSPACE NT
  4508.       READ(NT) (AA(I),I=1,NFREQ)
  4509.       IF (RBMSH.EQ.0.) GO TO 100
  4510.       DO 200 I=1,NFREQ
  4511.       AA(I)=AA(I) + RBMSH
  4512.   200 IF (AA(I).LE.0.) AA(I)=1.D-10
  4513.   100 DO 300 I=1,NFREQ
  4514.   300 AA(I)=DSQRT(AA(I))
  4515. C
  4516.       WRITE(6,2010)
  4517.       PI=4.*DATAN(1.D0)
  4518.       DO 500 I=1,NFREQ
  4519.       ACIRC=AA(I)/(2.*PI)
  4520.       APERD=1./ACIRC
  4521.   500 WRITE(6,2000) I,AA(I),ACIRC,APERD
  4522. C
  4523.       RETURN
  4524.  2000 FORMAT (9X,I5,24X,E11.4,15X,E11.4,15X,E11.4)
  4525.  2010 FORMAT (1H1,// 24H   F R E Q U E N C I E S   //  2X,
  4526.      121H    FREQUENCY NUMBER   ,10X,20H FREQUENCY (RAD/SEC) ,4X,
  4527.      224H  FREQUENCY (CYCLES/SEC),8X,16HPERIOD (SECONDS)  / )
  4528.       END
  4529. C *CDC* *DECK WRMOD
  4530. C *UNI* )FOR,IS  N.WRMOD,  R.WRMOD
  4531.       SUBROUTINE WRMOD (FRQ,PHI,ID,NUMNP,NDOF,NEQ,NFREQ,NMODE)
  4532. C
  4533.       IMPLICIT REAL*8 (A-H,O-Z)
  4534.       COMMON /TAPEIG/ SCALE,NSTIF,NT,NMASS,NRED,NSHIFT,NOVER
  4535.       COMMON /MDFRDM/ IDOF(6)
  4536.       COMMON /PORT/ INPORT,JNPORT,NPUTSV,LUNODE,LU1,LU2,LU3,JDC,JVC,JAC
  4537.       COMMON /DIMETC/ N01,N02,N03,N04,N05,N06,N07,N08,N09
  4538.       COMMON /DISCON/ NDISCE,NIDM
  4539.       REAL A
  4540.       COMMON A(1)
  4541. C
  4542.       DIMENSION FRQ(1),PHI(1),ID(NDOF,1)
  4543.       DIMENSION D(6)
  4544.       DATA RECLB1/8HFREQENCY/,RECLB2/8HEIGNVCTR/
  4545. C
  4546. C     PRINT EIGENVECTOR FOR EACH MODE
  4547. C
  4548. C
  4549. C***  DATA PORTHOLE (START)
  4550. C
  4551.       RECLAB=RECLB1
  4552.       IF (JNPORT.NE.0)
  4553.      1 WRITE(LUNODE) RECLAB,NFREQ,NMODE,NEQ,(FRQ(I),I=1,NFREQ)
  4554.       RECLAB=RECLB2
  4555. C
  4556. C***  DATA PORTHOLE (END)
  4557. C
  4558.       REWIND NT
  4559.       DO 200 IM=1,NFREQ
  4560.       READ(NT) (PHI(I),I=1,NEQ)
  4561. C
  4562.       IF (NDISCE.GT.0)
  4563.      1  CALL CONDIS (A(N01),A(N02),A(N03),PHI,PHI,PHI,NIDM,0)
  4564.       NEQT = NEQ + NDISCE
  4565. C
  4566. C***  DATA PORTHOLE (START)
  4567. C
  4568.       IF (JNPORT.NE.0)
  4569.      1 WRITE (LUNODE) RECLAB,(PHI(I),I=1,NEQT)
  4570. C
  4571. C***  DATA PORTHOLE (END)
  4572. C
  4573.       IF (IM.GT.NMODE) GO TO 200
  4574.       WRITE (6,2000) IM,FRQ(IM)
  4575. C
  4576.       DO 100 II=1,NUMNP
  4577.       DO 110 I=1,6
  4578.   110 D(I)=0.
  4579.       IL=1
  4580.       DO 120 I=1,6
  4581.       IF (IDOF(I) .EQ. 1) GO TO 120
  4582.       KK=ID(IL,II)
  4583.       IF (KK) 130,150,140
  4584.   130 KK=NEQ - KK
  4585.   140 D(I)=PHI(KK)
  4586.   150 IL=IL + 1
  4587.   120 CONTINUE
  4588.   100 WRITE(6,2010) II,D
  4589.   200 CONTINUE
  4590.       RETURN
  4591. C
  4592.  2000 FORMAT (///29H   M O D E  S H A P E  N O .  I3,
  4593.      1       55X,14H( FREQUENCY =  ,E11.4, 2H ) //
  4594.      2       9H    NODE 12X 14HX-DISPLACEMENT 4X 14HY-DISPLACEMENT 4X
  4595.      3       14HZ-DISPLACEMENT 8X 10HX-ROTATION 8X 10HY-ROTATION
  4596.      4       8X 10HZ-ROTATION  /)
  4597.  2010 FORMAT (2X,I5,8X,6E18.6)
  4598. C
  4599.       END
  4600. C *CDC* *DECK OVL201
  4601. C *CDC*      OVERLAY (ADINA,20,1)
  4602. C *CDC* *DECK MSECNT
  4603. C *CDC*      PROGRAM MSECNT
  4604. C *UNI* )FOR,IS N.MSECNT, R.MSECNT
  4605.       SUBROUTINE MSECNT
  4606. C
  4607. C
  4608. C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
  4609. C .                                                                   .
  4610. C .   P R O G R A M                                                   .
  4611. C .      TO FIND THE LOWEST FREQUENCIES AND ASSOCIATED                .
  4612. C .      MODE SHAPES OF LINEARIZED STRUCTURE                          .
  4613. C .                                                                   .
  4614. C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
  4615. C
  4616. C
  4617.       IMPLICIT REAL*8 (A-H,O-Z)
  4618.       COMMON /VAR/ NG,MODEX,IUPDT,KSTEP,ITEMAX,IEQREF,ITE,KPRI,
  4619.      1             IREF,IEQUIT,IPRI,KPLOTN,KPLOTE
  4620.       COMMON /EL/ IND,ICOUNT,NPAR(20),NUMEG,NEGL,NEGNL,IMASS,IDAMP,ISTAT
  4621.      1           ,NDOF,KLIN,IEIG,IMASSN,IDAMPN
  4622.       COMMON /DIM/ N0,N1,N2,N3,N4,N5,N6,N7,N8,N9,N10,N11,N12,N13,N14,N15
  4623.       COMMON /PRCON/ IDATWR,IPRIC,NPB,IDC,IVC,IAC,IPC,IPNODE(3,15)
  4624.       COMMON /SOL/ NUMNP,NEQ,NWK,NWM,NWC,NUMEST,MIDEST,MAXEST,NSTE,MA
  4625.       COMMON /JUNK/ IHED(18),MTOT,LPROG
  4626.       COMMON /TAPEIG/ SCALE,NSTIF,NT,NMASS,NRED,NSHIFT,NOVER
  4627.       COMMON /DPR/ ITWO
  4628.       COMMON /EIGIF/ COFQ,RBMSH,IESTYP,NFREQ,NMODE,IFPR,IRBM
  4629.       COMMON/FREQIF/ ISTOH,N1A,N1B,N1C
  4630.       COMMON/ADDB/NEQL,NEQR,MLA,NBLOCK
  4631.       COMMON /DISCON/ NDISCE,NIDM
  4632.       COMMON /MPRNT/ IOUTPT,ISTPRT
  4633.       COMMON /ITELM/ NITEM,NITEMM
  4634.       COMMON A(1)
  4635.       REAL A
  4636. C
  4637. C
  4638.       NC=NFREQ + 3
  4639.       M3=N2 + ISTOH*ITWO
  4640.       M4=M3 + ISTOH*ITWO
  4641.       IF (IMASS.EQ.1 .AND. NBLOCK.EQ.1) M4=M3
  4642. C
  4643.       READ (5,1000) NITEMM
  4644.       IF (NITEMM.EQ.0) NITEMM=60
  4645.       NITEM=2*NITEMM/3
  4646.       IF (IDATWR.LE.1) WRITE (6,2000) NITEMM
  4647.       IF (MODEX.EQ.0) GO TO 300
  4648.       NSTIF=4
  4649.       IF (KLIN.GT.0) NSTIF=12
  4650.       NRED=10
  4651.       NMASS=11
  4652.       NT=9
  4653. C
  4654. C     FIND PSEUDONORM OF STIFFNESS MATRIX AND APPLY SHIFT, IF SPECIFIED
  4655. C
  4656.       CALL PNORM (A(N1),A(N1A),A(N2),A(M3),A(M4),IRBM,RBMSH,NEQ,ISTOH,
  4657.      1            NBLOCK,NSTIF,NMASS,IMASS,ANORM,NFREQ)
  4658. C
  4659. C     CALCULATE NEW ARRAY ADDRESSES
  4660. C
  4661.       COFQ2=COFQ*COFQ - RBMSH
  4662.   300 M5=M4 + NEQ*ITWO
  4663.       IF (IMASS.EQ.2) M5=M4
  4664.       M6=M5 + NEQ*ITWO
  4665.       M7=M6 + NEQ*ITWO
  4666.       M8=M7 + NEQ*ITWO
  4667.       M9=M8 + 6*NEQ*ITWO
  4668.       M10=M9 + NC*ITWO
  4669.       M11=M10 + NC*ITWO
  4670.       M12=M11 + NC*ITWO
  4671.       M13=M12 + NC*ITWO
  4672.       M14=M13 + NC + 1
  4673.       IF(ISTPRT.GT.0) WRITE(6,2010)
  4674.       CALL SIZE (M14)
  4675.       IF (MODEX.EQ.0) GO TO 599
  4676. C
  4677.       CALL SECANT (A(N1),A(N1A),A(N1B),A(N2),A(M3),A(M4),A(M5),A(M6),
  4678.      1 A(M7),A(M8),A(M9),A(M10),A(M11),A(M12),A(M13),NEQ,ISTOH,NFREQ,NC,
  4679.      2 NBLOCK,IMASS,IFPR,ANORM,COFQ2)
  4680. C
  4681. C     PRINT THE FREQUENCIES AND MODE SHAPES
  4682. C
  4683.       CALL WRFREQ (A(N2),NFREQ,RBMSH)
  4684. C
  4685.       M3=N2 + NFREQ*ITWO
  4686.       M4=M3 + (NEQ + NDISCE)*ITWO
  4687.       M5=M4 + NDOF*NUMNP
  4688.       NN=M5 - 1
  4689.       REWIND 8
  4690.       READ(8) (A(I),I=M4,NN)
  4691. C
  4692.       CALL WRMOD (A(N2),A(M3),A(M4),NUMNP,NDOF,NEQ,NFREQ,NMODE)
  4693. C
  4694. C
  4695.   599 CONTINUE
  4696.       RETURN
  4697. C
  4698.  1000 FORMAT (I5,E10.4,3I5,F10.0)
  4699.  2000 FORMAT (1H1,53HD E T E R M I N A N T   S E A R C H   S O L U T I O
  4700.      1 N   ///,40H MAX NUMBER OF ITERATIONS ALLOWED                   ,/
  4701.      255H       FOR EACH EIGENPAIR . . . . . . . . . .(NITEMM) =,I5//)
  4702.  2010 FORMAT (//50H0**STORAGE CHECK FOR FREQUENCIES CALCULATION        )
  4703. C
  4704.       END
  4705. C *CDC* *DECK SECANT
  4706. C *UNI* )FOR,IS  N.SECANT, R.SECANT
  4707.       SUBROUTINE SECANT (MAXA,NCOLBV,ICOPL,A,B,XM,D,V,W,WW,ROOT,TIM,
  4708.      1                   ERRVR,ERRVL,NITE,N,ISTOH,NROOT,NC,NBLOCK,
  4709.      2                   IMASS,IFPR,ANORM,COFQ)
  4710. C
  4711. C     PROGRAM TO CALCULATE SMALLEST EIGENVALUES AND CORRESPONDING
  4712. C     EIGENVECTORS OF THE PROBLEM
  4713. C                           A* V = LAMBDA* B* V
  4714. C
  4715. C
  4716.       IMPLICIT REAL*8 (A-H,O-Z)
  4717.       DIMENSION A(ISTOH),B(ISTOH),XM(1),V(1),D(1),W(1),WW(N,1),ROOT(1)
  4718.      1 ,TIM(1),ERRVL(1),ERRVR(1)
  4719.       INTEGER NITE(1),MAXA(1),NCOLBV(1),ICOPL(1)
  4720.       COMMON /TAPEIG/ SCALE,NSTIF,NT,NMASS,NRED,NSHIFT,NOVER
  4721.       COMMON/SHIFT/RR,RA,RB,RC,FDETR,FDETA,FDETB,FDETC,FFR,FFA,FFB,FFC,
  4722.      1 IDETR,IDETA,IDETB,IDETC,IFR,IFA,IFB,IFC
  4723.       COMMON /RQSHF/ IRQS
  4724.       COMMON /ITELM/ NITEM,NITEMM
  4725. C
  4726. C     FOLLOWING TOLERANCES ARE SET FOR 13 (OR MORE) DIGIT ARITHMETIC
  4727.       ACTOL=0.0001
  4728.       RCBTOL=0.00001
  4729.       RITOL=0.000001
  4730.       RQTOL=0.000000000001D0
  4731. C
  4732. C     THE FOLLOWING ARE ITERATION NUMBER TOLERANCES
  4733. C
  4734.       NTF=5
  4735.       IITEM=10
  4736.       NVM=6
  4737.       ETA=2.0
  4738.       NOV=0
  4739.       IRQS=0
  4740.       IK=2
  4741.       JR=1
  4742.       NSK=0
  4743.       REWIND NT
  4744.       REWIND NSTIF
  4745.       REWIND NMASS
  4746. C
  4747. C     FIND LOCATIONS FOR NEGATIVE ELEMENTS IN STARTING
  4748. C     ITERATION VECTORS
  4749. C
  4750.       NC1=NC + 1
  4751.       IF (IMASS.EQ.2) GO TO 8
  4752.       READ (NMASS) (XM(I),I=1,N)
  4753.     8 NEQL=1
  4754.       NEQR=0
  4755.       MLA=0
  4756.       NZM=0
  4757.       DO 6 NJ=1,NBLOCK
  4758.       NCOLB=NCOLBV(NJ)
  4759.       NEQR=NEQR + NCOLB
  4760.       READ (NSTIF) A
  4761.       IF (IMASS.EQ.2) READ (NMASS) B
  4762.       DO 1 I=NEQL,NEQR
  4763.       II=MAXA(I) - MLA
  4764.       AA=A(II)
  4765.       IF (AA.GT.0.) GO TO 4
  4766.       WRITE (6,1000) I,AA
  4767.       STOP
  4768.     4 IF (IMASS.EQ.2) GO TO 9
  4769.       V(I)=XM(I)/AA
  4770.       IF (XM(I) .EQ. 0.) NZM=NZM + 1
  4771.       GO TO 1
  4772.     9 V(I)=B(II)/AA
  4773.     1 CONTINUE
  4774.       IF (NJ.EQ.NBLOCK) GO TO 6
  4775.       NEQL=NEQL + NCOLB
  4776.       MLA=MAXA(NEQL) - 1
  4777.     6 CONTINUE
  4778. C
  4779.       NNZM=N - NZM
  4780.       IF (NROOT .LE. NNZM) GO TO 40
  4781.       WRITE (6,1200) NROOT,NNZM
  4782.       STOP
  4783. C
  4784.    40 DO 2 J=3,NC1
  4785.       IMAX=0
  4786.       RMAX=0.
  4787.       DO 3 I=1,N
  4788.       IF (V(I).LT.RMAX) GO TO 3
  4789.       RMAX=V(I)
  4790.       IMAX=I
  4791.     3 CONTINUE
  4792.       NITE(J)=IMAX
  4793.     2 V(IMAX)=0.
  4794. C
  4795. C     CHECK FOR SINGLE DEGREE-OF-FREEDOM SYSTEM
  4796. C
  4797.       IF (N.GT.1) GO TO 5
  4798.       IF (IMASS.EQ.1) B(1)=XM(1)
  4799.       IF (B(1).GT.0) GO TO 7
  4800.       WRITE (6,1180)
  4801.       STOP
  4802.     7 ROOT(1)=A(1)/B(1)
  4803.       NSCH=1
  4804.       A(1)=1./DSQRT(B(1))
  4805.       WRITE(NT) A(1)
  4806.       ERRVL(1)=0.
  4807.       GO TO 950
  4808. C
  4809.     5 CALL SECOND(TIM1)
  4810.       RA=0.0
  4811.       RR=0.0
  4812.       CALL BANDET(A,B,XM,V,D,MAXA,NCOLBV,ICOPL,N,ISTOH,NBLOCK,RA,NSCH,
  4813.      1            IMASS,FDETA,IDETA,1)
  4814.       FFA=FDETA
  4815.       IFA=IDETA
  4816.       FFR=FFA
  4817.       IFR=IFA
  4818.       FDETR=FDETA
  4819.       IDETR=IDETA
  4820. C
  4821. C   CHECK FOR ZERO EIGENVALUE(S)
  4822. C
  4823.       N1=MAXA(N) - MLA
  4824.       IF(A(N1).GT.ANORM) GO TO 10
  4825.       WRITE (6,1009)
  4826.       STOP
  4827. C
  4828. C   FIND LOWER BOUND ON SMALLEST EIGENVALUE
  4829. C
  4830.    10 IF (IFPR.EQ.1)
  4831.      * WRITE(6,1010)
  4832.       IF (IMASS-1) 99,99,95
  4833.    95 DO 98 I=1,N
  4834.    98 V(I)=1.
  4835.       CALL MLTPLY (W,B,V,MAXA,N,NCOLBV,ISTOH,NBLOCK,NMASS)
  4836.       GO TO 101
  4837.    99 DO 100 I=1,N
  4838.   100 W(I)=XM(I)
  4839.   101 RT=0.0
  4840.       IITE=0
  4841.   110 IITE=IITE+1
  4842.       DO 120 I=1,N
  4843.   120 V(I)=W(I)
  4844.       CALL BANDET(A,B,XM,V,D,MAXA,NCOLBV,ICOPL,N,ISTOH,NBLOCK,RA,NSCH,
  4845.      1            IMASS,FDETA,IDETA,2)
  4846.       RQT=0.0
  4847.       DO 130 I=1,N
  4848.   130 RQT=RQT+W(I)*V(I)
  4849.       IF (IMASS-1) 179,179,178
  4850.   178 CALL MLTPLY (W,B,V,MAXA,N,NCOLBV,ISTOH,NBLOCK,NMASS)
  4851.       GO TO 181
  4852.   179 DO 180 I=1,N
  4853.   180 W(I)=XM(I)*V(I)
  4854.   181 RQB=0.0
  4855.       DO 140 I=1,N
  4856.   140 RQB=RQB+W(I)*V(I)
  4857.       RQ=RQT/RQB
  4858.       IF (IFPR.EQ.1)
  4859.      * WRITE (6,1004) RQ
  4860.       BS=DSQRT(RQB)
  4861.       TOL=DABS(RQ-RT)/RQ
  4862.       RT=RQ
  4863.       IF (TOL.LT.RCBTOL) GO TO 150
  4864.       DO 160 I=1,N
  4865.   160 W(I)=W(I)/BS
  4866.       IF (IITE.LT.IITEM) GO TO 110
  4867. C
  4868.   150 TEMP=100.*TOL
  4869.       IF(TEMP.GT.0.1) TEMP=0.1
  4870.       RB=RQ*(1.0-TEMP)
  4871.       IS=0
  4872.   230 CALL BANDET(A,B,XM,V,D,MAXA,NCOLBV,ICOPL,N,ISTOH,NBLOCK,RB,NSCH,
  4873.      1            IMASS,FDETB,IDETB,1)
  4874.       IF (IFPR.EQ.1)
  4875.      * WRITE (6,1020) RB,NSCH
  4876.       FFB=FDETB
  4877.       IFB=IDETB
  4878.       IF (NSCH.EQ.0) GO TO 300
  4879.       IS=IS+1
  4880.       IF (IS.LE.NTF) GO TO 240
  4881.       WRITE (6,1030) NTF
  4882.       STOP
  4883.   240 RB=RB/IK
  4884.       IK=IK*2
  4885.       GO TO 230
  4886. C
  4887. C
  4888. C     I T E R A T I O N  F O R  I N D I V I D U A L  E I G E N P A I R S
  4889. C
  4890. C
  4891.   300 IF (IFPR.EQ.1)
  4892.      * WRITE (6,1040)
  4893.       NITE(JR)=-1
  4894.       IF (IFPR.EQ.1)
  4895.      * WRITE (6,1050) JR,NITE(JR),RA,FDETA,FFA,ETA,IDETA,IFA
  4896.       NITE(JR)=0
  4897.       IF (IFPR.EQ.1)
  4898.      * WRITE (6,1050) JR,NITE(JR),RB,FDETB,FFB,ETA,IDETB,IFB
  4899. C
  4900. C   WE STOP WHEN WE HAVE THE REQUIRED NUMBER OF ROOTS SMALLER THAN RC AN
  4901. C   NOV=0
  4902. C
  4903.   310 IF (NSCH.GE.NROOT) GO TO 900
  4904.       IF (RB.GT.COFQ) GO TO 900
  4905. C
  4906.       I=IFA-IFB
  4907.       FFA=FFA*2.0**I
  4908.       IFA=IFB
  4909.       DIF=FFB-FFA
  4910.       IF (DIF.NE.0.0) GO TO 320
  4911.       WRITE (6,1060)
  4912.       GO TO 900
  4913.   320 DEL=FFB*(RB-RA)/DIF
  4914.       RC=RB-ETA*DEL
  4915.       IF(RC.GT.0.) GO TO 325
  4916.       WRITE(6,1065) RC
  4917.       STOP
  4918.   325 TOL=RCBTOL*RC
  4919.       IF (DABS(RC-RB).GT.TOL) GO TO 330
  4920.       IF (IFPR.EQ.1)
  4921.      * WRITE (6,1070)
  4922.       ROOT(JR)=RB
  4923.       GO TO 400
  4924. C
  4925.   330 CALL BANDET(A,B,XM,V,D,MAXA,NCOLBV,ICOPL,N,ISTOH,NBLOCK,RC,NSCH,
  4926.      1            IMASS,FDETC,IDETC,1)
  4927.       FFC=FDETC
  4928.       IFC=IDETC
  4929.       NITE(JR)=NITE(JR)+1
  4930.       IF (JR.EQ.1) GO TO 340
  4931.       JJ=JR-1
  4932.       DO 350 K=1,JJ
  4933.       FFC=FFC/(RC-ROOT(K))
  4934.   350 CALL RSCALE (FFC,IFC)
  4935.   340 IF (IFPR.EQ.1)
  4936.      * WRITE (6,1050) JR,NITE(JR),RC,FDETC,FFC,ETA,IDETC,IFC
  4937. C
  4938. C   IF WE HAVE MORE SIGNCHANGES THAN EIGENVALUES SMALLER THAN RC WE
  4939. C   START INVERSE ITERATION
  4940. C
  4941.       NES=0
  4942.       IF (JR.EQ.1) GO TO 380
  4943.       DO 360 I=1,JJ
  4944.   360 IF (ROOT(I).LT.RC) NES=NES+1
  4945.   380 NOV=NSCH-NES
  4946.       IF (NOV.EQ.0) GO TO 370
  4947.       IF (IFPR.EQ.1)
  4948.      * WRITE (6,1080) NOV
  4949.       ROOT(JR)=RC
  4950.       IF (NOV.GT.1) NSK=1
  4951. C
  4952.       GO TO 400
  4953.   370 RR=RA
  4954.       FFR=FFA
  4955.       IFR=IFA
  4956.       FDETR=FDETA
  4957.       IDETR=IDETA
  4958.       RA=RB
  4959.       FFA=FFB
  4960.       IFA=IFB
  4961.       FDETA=FDETB
  4962.       IDETA=IDETB
  4963.       RB=RC
  4964.       FFB=FFC
  4965.       IFB=IFC
  4966.       FDETB=FDETC
  4967.       IDETB=IDETC
  4968. C
  4969. C     WE RESET ETA IF WE CAN ACCELERATE THE SECANT ITERATION STILL MORE
  4970. C
  4971.       TOL=RB*ACTOL
  4972.       IF (DABS(RA-RB).LT.TOL) ETA=ETA*2
  4973.       IF (NITE(JR).LE.NITEM) GO TO 310
  4974.       WRITE (6,1015) JR,NITE(JR)
  4975.       GO TO 900
  4976. C
  4977. C   CHECK FOR STORAGE
  4978. C
  4979.   400 IF (JR.LE.NC) GO TO 405
  4980.       WRITE (6,1090)
  4981.       GO TO 900
  4982. C
  4983. C     INITIALIZE STARTING INVERSE ITERATION VECTOR
  4984. C
  4985.   405 NOR=JR-1
  4986.       IF (NOR.GT.NVM) NOR=NVM
  4987.       CALL SECOND (TIM3)
  4988.       IF (IFPR.EQ.1)
  4989.      * WRITE (6,1100) NOR
  4990.       IF (JR.EQ.1) GO TO 435
  4991.       DO 420 I=1,N
  4992.   420 V(I)=1.0
  4993.       I=NITE(JR+1)
  4994.       V(I)=-1.0
  4995.   410 IF (IMASS-1) 429,429,428
  4996.   428 CALL MLTPLY (W,B,V,MAXA,N,NCOLBV,ISTOH,NBLOCK,NMASS)
  4997.       GO TO 431
  4998.   429 DO 430 I=1,N
  4999.   430 W(I)=XM(I)*V(I)
  5000.   431 RQB=0.
  5001.       DO 432 I=1,N
  5002.   432 RQB=RQB + W(I)*V(I)
  5003.       RT=0.
  5004.   435 IS=0
  5005.       GO TO 510
  5006. C
  5007. C     INVERSE ITERATION
  5008. C
  5009.   440 NITE(JR)=NITE(JR)+1
  5010.       DO 450 I=1,N
  5011.   450 V(I)=W(I)
  5012.       CALL BANDET(A,B,XM,V,D,MAXA,NCOLBV,ICOPL,N,ISTOH,NBLOCK,RC,NSCH,
  5013.      1            IMASS,FDETC,IDETC,2)
  5014.       IF (IS.EQ.1) GO TO 460
  5015.       RQT=0.0
  5016.       DO 470 I=1,N
  5017.   470 RQT=RQT+W(I)*V(I)
  5018.       IF (IMASS-1) 474,474,473
  5019.   473 CALL MLTPLY (W,B,V,MAXA,N,NCOLBV,ISTOH,NBLOCK,NMASS)
  5020.       GO TO 476
  5021.   474 DO 475 I=1,N
  5022.   475 W(I)=XM(I)*V(I)
  5023.   476 RQB=0.0
  5024.       DO 480 I=1,N
  5025.   480 RQB=RQB+W(I)*V(I)
  5026.       RQ=RQT/RQB
  5027.       RT=ROOT(JR)+RQ
  5028.       IF (IFPR.EQ.1)
  5029.      * WRITE (6,1110) JR,NITE(JR),RT,RQ
  5030.       TOL=RT*RQTOL
  5031.       EIGDIF=DABS(RT - RTA)
  5032.       IF (EIGDIF.GT.TOL) GO TO 510
  5033.       IS=1
  5034.       GO TO 440
  5035. C
  5036.   510 RTA=RT
  5037.       AL2=0.
  5038.       IF (NOR.EQ.0) GO TO 545
  5039.       DO 520 K=1,NOR
  5040.       AL=0.0
  5041.       DO 530 I=1,N
  5042.   530 AL=AL + WW(I,K)*V(I)
  5043.       AL2=AL2 + AL*AL
  5044.       DO 540 I=1,N
  5045.   540 W(I)=W(I)-AL*WW(I,K)
  5046.   520 CONTINUE
  5047.   545 BS=DSQRT(RQB)
  5048.       DO 490 I=1,N
  5049.   490 W(I)=W(I)/BS
  5050. C
  5051. C     PERFORM RAYLEIGH QUOTIENT SHIFT IF CONVERGENCE IS SLOW
  5052. C
  5053.       IF (NITE(JR).LE.NITEM) GO TO 440
  5054.       IF (NITE(JR).GT.(NITEM+1)) GO TO 552
  5055.       TOL=RT*RITOL
  5056.       IF (EIGDIF.LT.TOL) GO TO 554
  5057.       WRITE (6,1015) JR,NITEM
  5058.       GO TO 900
  5059.   554 IF (IFPR.EQ.1)
  5060.      *WRITE (6,1014) JR
  5061.       IRQS=NBLOCK
  5062. C
  5063.       CALL BANDET(A,B,XM,V,D,MAXA,NCOLBV,ICOPL,N,ISTOH,NBLOCK,RT,NSCHT,
  5064.      1            IMASS,FDETT,IDETT,1)
  5065.       ROOT(JR)=RT
  5066.   552 IF (NITE(JR).LE.NITEMM) GO TO 440
  5067.       WRITE (6,1015) JR,NITE(JR)
  5068.       GO TO 900
  5069. C
  5070.   460 RQT=0.0
  5071.       ERRT=RQB
  5072.       DO 570 I=1,N
  5073.   570 RQT=RQT+V(I)*W(I)
  5074.       IF (IMASS-1) 559,559,564
  5075.   564 CALL MLTPLY (W,B,V,MAXA,N,NCOLBV,ISTOH,NBLOCK,NMASS)
  5076.       GO TO 561
  5077.   559 DO 560 I=1,N
  5078.   560 W(I)=XM(I)*V(I)
  5079.   561 RQB=0.0
  5080.       DO 580 I=1,N
  5081.   580 RQB=RQB+V(I)*W(I)
  5082. C
  5083. C     OBTAIN ERROR BOUNDS -
  5084. C     THE BOUNDS DEPEND ON THE DISTANCE FROM THE ROOT AND CAN BE LARGE
  5085. C
  5086.       RQ=RQT/RQB
  5087.       ROOT(JR)=ROOT(JR)+RQ
  5088.       ERR=DSQRT(ERRT/RQB)
  5089.       ERRVL(JR)=ROOT(JR)-ERR
  5090.       ERRVR(JR)=ROOT(JR)+ERR
  5091. C
  5092.       BS=DSQRT(RQB)
  5093.       DO 590 I=1,N
  5094.       W(I)=W(I)/BS
  5095.   590 V(I)=V(I)/BS
  5096.       WRITE (NT) (V(I),I=1,N)
  5097.       JJ=JR
  5098.       IF (JJ.LE.NVM) GO TO 610
  5099.       DO 600 K=1,N
  5100.       DO 600 L=2,NVM
  5101.   600 WW(K,L-1)=WW(K,L)
  5102.       JJ=NVM
  5103.   610 DO 620 K=1,N
  5104.   620 WW(K,JJ)=W(K)
  5105. C
  5106.       CALL SECOND (TIM2)
  5107.       TIM3=TIM2-TIM3
  5108.       IF (IFPR.EQ.1)
  5109.      * WRITE (6,1120) TIM3
  5110.       TIM(JR)=TIM2-TIM1
  5111.       TIM1=TIM2
  5112. C
  5113. C     IF RAYLEIGH QUOTIENT SHIFT HAS BEEN PERFORMED RESET IRQS TO A
  5114. C     NEGATIVE NUMBER
  5115. C
  5116.       IF (IRQS.GT.0) IRQS=-IRQS
  5117. C
  5118. C
  5119. C     DECIDE STRATEGY FOR ITERATION TOWARDS NEXT ROOT
  5120. C
  5121.       CALL STRAT (A,B,XM,V,D,MAXA,NCOLBV,ICOPL,ROOT,NITE,N,ISTOH,
  5122.      1            NBLOCK,JR,NOV,NSK,NSCH,ETA,IMASS)
  5123. C
  5124. C
  5125.       IF(NOV.GT.0) GO TO 400
  5126.       GO TO 300
  5127. C
  5128.   900 NROOT=JR-1
  5129.       IF (NROOT.GT.0) GO TO 902
  5130.       WRITE (6,1180)
  5131.       STOP
  5132.   902 IF (IFPR.EQ.0) GO TO 905
  5133.       WRITE (6,1140)
  5134.       WRITE (6,1006) (NITE(J),J=1,NROOT)
  5135.       WRITE (6,1150)
  5136.       WRITE (6,1008) (TIM(J),J=1,NROOT)
  5137.       WRITE (6,1160)
  5138.       WRITE (6,1004) (ERRVL(J),J=1,NROOT)
  5139.       WRITE (6,1004) (ERRVR(J),J=1,NROOT)
  5140. C
  5141. C     CALCULATE PHYSICAL ERROR NORMS
  5142. C
  5143.   905 REWIND NT
  5144.       DO 904 L=1,NROOT
  5145.       RT=ROOT(L)
  5146.       READ (NT) (V(I),I=1,N)
  5147.       CALL MLTPLY (W,A,V,MAXA,N,NCOLBV,ISTOH,NBLOCK,NSTIF)
  5148.       VNORM=0.0
  5149.       DO 911 I=1,N
  5150.   911 VNORM=VNORM + W(I)*W(I)
  5151.       IF (IMASS-1) 907,907,903
  5152.   903 CALL MLTPLY (WW,B,V,MAXA,N,NCOLBV,ISTOH,NBLOCK,NMASS)
  5153.       DO 906 I=1,N
  5154.   906 W(I)=W(I) - RT*WW(I,1)
  5155.       GO TO 908
  5156.   907 DO 909 I=1,N
  5157.   909 W(I)=W(I) - RT*XM(I)*V(I)
  5158.   908 WNORM=0.0
  5159.       DO 910 I=1,N
  5160.   910 WNORM=WNORM + W(I)*W(I)
  5161.       VNORM=DSQRT(VNORM)
  5162.       WNORM=DSQRT(WNORM)
  5163.       ERRVL(L)=WNORM/VNORM
  5164.   904 CONTINUE
  5165. C
  5166.   950 WRITE (6,1170)
  5167.       NROOT=NSCH
  5168.       WRITE (6,1004) (ROOT(J),J=1,NROOT)
  5169.       WRITE (6,1190)
  5170.       WRITE (6,1004) (ERRVL(J),J=1,NROOT)
  5171. C
  5172.       WRITE (NT) (ROOT(I),I=1,NROOT)
  5173. C
  5174.       RETURN
  5175. C
  5176.  1000 FORMAT (43H ***ERROR   NEG OR ZERO DIAGONAL ELEMENT A(,I4,4H) =  ,
  5177.      1        E11.4,21HBEFORE DECOMPOSITION   )
  5178.  1004 FORMAT (1H0,6E20.12)
  5179.  1006 FORMAT (1H0,6I20)
  5180.  1008 FORMAT (1H0,6F20.2)
  5181.  1009 FORMAT (44H0***ERROR   SOLUTION TERMINATED IN *SECANT*  , /
  5182.      1        12X,25HRIGID BODY MODE(S) FOUND., / 1X)
  5183.  1010 FORMAT (51H1INVERSE ITERATION GIVES FOLLOWING APPROXIMATION TO,
  5184.      1        18H LOWEST EIGENVALUE, 1X)
  5185.  1014 FORMAT (///48H RAYLEIGH QUOTIENT SHIFT IS CARRIED OUT FOR ROOT,I3)
  5186.  1015 FORMAT (42H0***ERROR   PRE-MATURE EXIT FROM *SECANT*  , / 12X,
  5187.      1        37HITERATION ABANDONED FOR ROOT NUMBER =, I4 / 12X,
  5188.      2        37HNUMBER OF ITERATIONS PERFORMED      =, I4 / 1X)
  5189.  1020 FORMAT (5H0RB = E20.12,7H NSCH = I4)
  5190.  1030 FORMAT (38H0***ERROR   SOLUTION STOP IN *SECANT* , / 12X, 1H(,
  5191.      1        I3,48H) FACTORIZATIONS PERFORMED IN AN ATTEMPT TO FIND,
  5192.      2        32H LOWER BOUND ON FIRST EIGENVALUE, / 12X,
  5193.      3        16HCHECK THE MODEL., / 1X)
  5194.  1040 FORMAT (1H1,4X,4HROOT,4X,4HNITE,18X,2HRC,15X,12HDET (A-RC*B),15X,
  5195.      12HFF,13X,3HETA,3X,4HIDET,4X,2HIF)
  5196.  1050 FORMAT (1H0,4X,I4,4X,I4,8X,3E22.14,F7.2,2I6)
  5197.  1060 FORMAT (42H0THE DEFLATED POLYNOMIAL HAS NO MORE ROOTS  )
  5198.  1065 FORMAT (36H0***ERROR  SOLUTION STOP IN *SECANT* ,/ 10X,
  5199.      1        40HCALCULATED SHIFT IS NON-POSITIVE. SHIFT=, E20.11)
  5200.  1070 FORMAT (29H0(RC-RB) IS SMALLER THAN TOL )
  5201.  1080 FORMAT (16H0WE JUMPED OVER I4,16H UNKNOWN ROOT(S)  )
  5202.  1090 FORMAT (42H0***ERROR   PRE-MATURE EXIT FROM *SECANT*  ,
  5203.      1        34H CAUSED BY EITHER OF THE FOLLOWING, / 12X,
  5204.      2        22H(1) BAD MODEL DATA, OR, / 12X,
  5205.      3        52H(2) ROOT CLUSTER (I.E., NEAR EQUAL OR REPEATED EIGEN,
  5206.      4        36HVALUES) ENCOUNTERED AT CURRENT SHIFT, / 16X,
  5207.      5        25HCAUSING STORAGE OVER-FLOW, 1X)
  5208.  1100 FORMAT (1H0,34X,4HROOT,18X,2HRQ,18X,4HNOR=,I2)
  5209.  1110 FORMAT (1H0,4X,I4,4X,I4,8X,2E22.14)
  5210.  1120 FORMAT (20H0TIME FOR INV ITERN F5.2)
  5211.  1140 FORMAT (42H0NO OF ITERATIONS FOR EACH EIGENVALUE ARE   /)
  5212.  1150 FORMAT (30H0TIME USED FOR EACH EIGENVALUE /)
  5213.  1160 FORMAT (46H0FOLLOWING ARE ERROR BOUNDS ON THE EIGENVALUES /
  5214.      1        51H (THE BOUNDS DEPEND ON THE SHIFTING IN THE SOLUTION,
  5215.      2        28H AND CAN THEREFORE BE LARGE) )
  5216.  1170 FORMAT (1H1,22H E I G E N V A L U E S     )
  5217.  1180 FORMAT (38H0***ERROR   SOLUTION STOP IN "SECANT"   , / 12X,
  5218.      1        23HNO EIGENVALUES COMPUTED, / 1X)
  5219.  1190 FORMAT (///  40H THE FOLLOWING ARE PHYSICAL ERROR BOUNDS,
  5220.      1             20H ON THE EIGENVALUES )
  5221.  1200 FORMAT (///45H *** STOP, REQUESTED NUMBER OF ROOTS, NROOT =,I5,
  5222.      1 63H IS LARGER THAN THE NUMBER OF NON-ZERO MASS DEGREES OF FREEDOM
  5223.      2=,I5)
  5224.       END
  5225. C *CDC* *DECK STRAT
  5226. C *UNI* )FOR,IS  N.STRAT, R.STRAT
  5227.       SUBROUTINE STRAT (A,B,XM,V,D,MAXA,NCOLBV,ICOPL,ROOT,NITE,N,ISTOH,
  5228.      1                  NBLOCK,JR,NOV,NSK,NSCH,ETA,IMASS)
  5229.       IMPLICIT REAL*8 (A-H,O-Z)
  5230.       COMMON/SHIFT/RR,RA,RB,RC,FDETR,FDETA,FDETB,FDETC,FFR,FFA,FFB,FFC,
  5231.      1 IDETR,IDETA,IDETB,IDETC,IFR,IFA,IFB,IFC
  5232.       COMMON /RQSHF/ IRQS
  5233.       DIMENSION A(1),B(1),V(1),D(1),XM(1),ROOT(1)
  5234.       INTEGER MAXA(1),NCOLBV(1),ICOPL(1),NITE(1)
  5235. C
  5236. C   CASE1 NO ROOT JUMPING HAS OCCURED. THE CALCULATED ROOT HAS BEEN
  5237. C   APPROACHED FROM BELOW
  5238. C
  5239.       RTOL=0.0000000001D0
  5240.       TOL=RTOL*ROOT(JR)
  5241.       IF (NOV.GT.0) GO TO 700
  5242.       IF (DABS(ROOT(JR)-RB).GT.TOL) GO TO 710
  5243.       IF (RA.GT.0.0) GO TO 720
  5244.       RA=RB/2.
  5245.       CALL BANDET(A,B,XM,V,D,MAXA,NCOLBV,ICOPL,N,ISTOH,NBLOCK,RA,NSCH,
  5246.      1            IMASS,FDETA,IDETA,1)
  5247.       FFA=FDETA
  5248.       IFA=IDETA
  5249.   720 RB=RA
  5250.       FFB=FFA
  5251.       IFB=IFA
  5252.       FDETB=FDETA
  5253.       IDETB=IDETA
  5254.       RA=RR
  5255.       FFA=FFR
  5256.       IFA=IFR
  5257.       FDETA=FDETR
  5258.       IDETA=IDETR
  5259.       GO TO 710
  5260. C
  5261. C   CASE2 ROOT JUMPING HAS OCCURED. THE CALCULATED ROOT IS SMALLER THAN
  5262. C   THE CURRENT SHIFT AND IS A SIMPLE ROOT
  5263. C
  5264.   700 IF (ROOT(JR).GT.RC) NSK=1
  5265.       IF (NSK.EQ.1) GO TO 730
  5266.       IF (DABS(RC-ROOT(JR)).LT.TOL) GO TO 740
  5267.       IF (DABS(ROOT(JR)-RB).LT.TOL) GO TO 750
  5268.       RA=RB
  5269.       FFA=FFB
  5270.       IFA=IFB
  5271.       FDETA=FDETB
  5272.       IDETA=IDETB
  5273.   750 RB=RC
  5274.       FFB=FFC
  5275.       IFB=IFC
  5276.       FDETB=FDETC
  5277.       IDETB=IDETC
  5278.       GO TO 710
  5279.   740 IF (DABS(ROOT(JR)-RB).GT.TOL) GO TO 710
  5280.       IF (RA.GT.0.0) GO TO 760
  5281.       RA=RB/2.
  5282.       CALL BANDET(A,B,XM,V,D,MAXA,NCOLBV,ICOPL,N,ISTOH,NBLOCK,RA,NSCH,
  5283.      1            IMASS,FDETA,IDETA,1)
  5284.       FFA=FDETA
  5285.       IFA=IDETA
  5286.   760 RB=RA
  5287.       FFB=FFA
  5288.       IFB=IFA
  5289.       FDETB=FDETA
  5290.       IDETB=IDETA
  5291.       RA=RR
  5292.       FFA=FFR
  5293.       IFA=IFR
  5294.       FDETA=FDETR
  5295.       IDETA=IDETR
  5296.   710 FFA=FFA/(RA-ROOT(JR))
  5297.       CALL RSCALE (FFA,IFA)
  5298.       FFB=FFB/(RB-ROOT(JR))
  5299.       CALL RSCALE (FFB,IFB)
  5300.       JR = JR + 1
  5301.       NOV=0
  5302.       ETA=2.0
  5303.       RETURN
  5304. C
  5305. C   CASE3 ROOT JUMPING HAS OCCURED. THE CALCULATED ROOT IS A MULTIPLE
  5306. C   ROOT AND/OR IS LARGER THAN THE CURRENT SHIFT
  5307. C
  5308.   730 IF (RA.GT.0.0) GO TO 780
  5309.       RA=RB/2.
  5310.       CALL BANDET(A,B,XM,V,D,MAXA,NCOLBV,ICOPL,N,ISTOH,NBLOCK,RA,NSCH,
  5311.      1            IMASS,FDETA,IDETA,1)
  5312.       FFA=FDETA
  5313.       IFA=IDETA
  5314.   780 IF (DABS(ROOT(JR)-RB).GT.TOL) GO TO 770
  5315.       RB=RA
  5316.       FFB=FFA
  5317.       IFB=IFA
  5318.       FDETB=FDETA
  5319.       IDETB=IDETA
  5320.       RA=RR
  5321.       FFA=FFR
  5322.       IFA=IFR
  5323.       FDETA=FDETR
  5324.       IDETA=IDETR
  5325.   770 FFA=FFA/(RA-ROOT(JR))
  5326.       CALL RSCALE (FFA,IFA)
  5327.       FFB=FFB/(RB-ROOT(JR))
  5328.       CALL RSCALE (FFB,IFB)
  5329.       FFR=FFR/(RR-ROOT(JR))
  5330.       CALL RSCALE (FFR,IFR)
  5331.       IF (ROOT(JR).LE.RC) NOV=NOV-1
  5332.       JR=JR+1
  5333.       NITE(JR)=0
  5334.       ROOT(JR)=RC
  5335.       IF (NOV.GT.0) RETURN
  5336.       NSK=0
  5337.       ETA=2.0
  5338.       RETURN
  5339.       END
  5340. C *CDC* *DECK OVL202
  5341. C *CDC*       OVERLAY (ADINA,20,2)
  5342. C *CDC* *DECK MSUBSP
  5343. C *CDC*       PROGRAM MSUBSP
  5344. C *UNI )FOR,IS N.MSUBSP, R.MSUBSP
  5345.       SUBROUTINE MSUBSP
  5346. C
  5347. C     MAIN PROGRAM TO READ IN CONTROL PARAMETERS AND ALLOCATE STORAGE
  5348. C
  5349.       IMPLICIT REAL*8 (A-H,O-Z)
  5350.       COMMON /VAR/ NG,MODEX,IUPDT,KSTEP,ITEMAX,IEQREF,ITE,KPRI,
  5351.      1             IREF,IEQUIT,IPRI,KPLOTN,KPLOTE
  5352.       COMMON /EL/ IND,ICOUNT,NPAR(20),NUMEG,NEGL,NEGNL,IMASS,IDAMP,ISTAT
  5353.      1            ,NDOF,KLIN,IEIG,IMASSN,IDAMPN
  5354.       COMMON /DIM/ N0,N1,N2,N3,N4,N5,N6,N7,N8,N9,N10,N11,N12,N13,N14,N15
  5355.       COMMON /DIMSSP/ M3,M4,M5,M6,M7,M8,M9
  5356.       COMMON /SOL/ NUMNP,NEQ,NWK,NWM,NWC,NUMEST,MIDEST,MAXEST,NSTE,MA
  5357.       COMMON /PRCON/ IDATWR,IPRIC,NPB,IDC,IVC,IAC,IPC,IPNODE(3,15)
  5358.       COMMON /JUNK/ IHED(18),MTOT,LPROG
  5359.       COMMON /TAPEIG/ SCALE,NSTIF,NT,NMASS,NRED,NSHIFT,NOVER
  5360.       COMMON /DPR/ ITWO
  5361.       COMMON /EIGIF/ COFQ,RBMSH,IESTYP,NFREQ,NMODE,IFPR,IRBM
  5362.       COMMON /FREQIF/ ISTOH,N1A,N1B,N1C
  5363.       COMMON /ADDB/ NEQL,NEQR,MLA,NBLOCK
  5364.       COMMON /RANDI/ N0A,N1D,IELCPL
  5365.       COMMON /DISCON/ NDISCE,NIDM
  5366.       COMMON /TOLS/ RTOL,ALPHA,CTOL,ANORM,RCTOL
  5367.       COMMON /SCRAP/ SHIFT,RLQ1,NLQ,NITE,NSTEP,JR,ICONV,NCEV,NP,NQ,IFSS
  5368.       COMMON /FAST/ SHIFT1,SHIFT2,IOVER,IRPC,NSTV,IINTER,JROLD,NSCH1,
  5369.      1              IACCN,NJUNK,ISVTYP
  5370.       COMMON /ITELMT/ NSMAX,NITEM,NITEMM,NOVM
  5371.       COMMON /TAPES/ IIN,IOUT
  5372.       COMMON A(1)
  5373.       REAL A
  5374.       DIMENSION IA(1)
  5375.       EQUIVALENCE (IA(1),A(1))
  5376. C
  5377.       IIN=5
  5378.       IOUT=6
  5379.       NWM=NWK
  5380.       IF (IMASS.EQ.1) NWM=NEQ
  5381. C
  5382.       NSTIF=4
  5383.       IF (KLIN.GT.0) NSTIF=12
  5384.       NT=9
  5385.       NRED=10
  5386.       NMASS=11
  5387.       NSHIFT=18
  5388.       NOVER=19
  5389. C
  5390. C     INPUT FREQUENCY CONTROL DATA
  5391. C
  5392.       READ (5,1000) NITEM,IFSS,IACCN,RTOL,ISVTYP,NSTV,
  5393.      1              IINTER,SHIFT1,SHIFT2,NREAD
  5394.       IF (NREAD.GT.0) GO TO 30
  5395. C
  5396.       M3=N2 + ISTOH*ITWO
  5397.       M4=M3
  5398.       IF (IMASS.EQ.2 .OR. NBLOCK.GT.1) M4=M3 + ISTOH*ITWO
  5399.       M5=M4
  5400.       IF (IMASS.EQ.1) M5=M4 + NEQ*ITWO
  5401.       GO TO 40
  5402. C
  5403. C     IF NREAD.GT.0, STIFFNESS, MASS MATRICES ARE READ FROM TAPE NREAD
  5404. C
  5405.    30 REWIND NSTIF
  5406.       REWIND NMASS
  5407.       REWIND NREAD
  5408.       READ (NREAD) NEQ,NWK,NWM
  5409.       NEQ1=NEQ + 1
  5410.       NBLOCK=1
  5411.       ISTOH=NWK
  5412.       N1A=N1 + NEQ1
  5413.       N1B=N1A + 1
  5414.       N1C=N1B + 1
  5415.       N1D=N1C
  5416.       N2=N1D + 2*NBLOCK + 1
  5417.       M2=N2
  5418. C
  5419.       IA(N1A)=NEQ
  5420.       IA(N1B)=1
  5421.       NBLOC1=2*NBLOCK + 1
  5422.       IA(N1D)=0
  5423.       IA(N1D + 1)=0
  5424.       IA(N1D + 2)=0
  5425. C
  5426. C     * * * * *    R A N D O M   A C C E S S   * * * * *
  5427. C
  5428. C     CALL STINDX (10,IA(N1D),NBLOC1,0)
  5429. C *IBM*     DEACTIVATE ABOVE CARD FOR IBM MACHINE
  5430. C
  5431. C     * * * * *    R A N D O M   A C C E S S   * * * * *
  5432. C
  5433.       M3=M2 + NWK*ITWO
  5434.       M4=M3
  5435.       IF (IMASS.EQ.2) M4=M3 + NWM*ITWO
  5436.       M5=M4
  5437.       IF (IMASS.EQ.1) M5=M4 + NWM*ITWO
  5438. C
  5439.       NN=N1A - 1
  5440.       READ (NREAD) (IA(I),I=N1,NN)
  5441.       NN=M3 - 1
  5442.       READ (NREAD) (A(I),I=M2,NN)
  5443.       WRITE (NSTIF) (A(I),I=M2,NN)
  5444.       NN=M5 - 1
  5445.       READ (NREAD) (A(I),I=M3,NN)
  5446.       WRITE (NMASS) (A(I),I=M3,NN)
  5447. C
  5448.    40 IF (IDATWR.LE.1)
  5449.      1WRITE (IOUT,2000) IHED,NEQ,NWK,NWM
  5450.       IF (MODEX.EQ.0) GO TO 45
  5451. C
  5452. C     FIND PSEUDONORM OF STIFFNESS MATRIX AND APPLY SHIFT, IF NECESSARY
  5453. C
  5454.       CALL PNORM (A(N1),A(N1A),A(N2),A(M3),A(M4),IRBM,RBMSH,NEQ,ISTOH,
  5455.      1            NBLOCK,NSTIF,NMASS,IMASS,ANORM,NFREQ)
  5456. C
  5457.    45 NP=MIN0(2*NFREQ,NFREQ + 8)
  5458.       IF (NQ.LT.NP) IACCN=1
  5459.       IF (NQ.GT.NEQ) NQ=NEQ
  5460.       IF (RTOL.EQ.0.) RTOL=1.D-6
  5461.       ALPHA=1.
  5462.       IOVER=1
  5463.       IRPC=0
  5464.       IF (IACCN.EQ.1) IRPC=1
  5465.       CTOL=0.33
  5466.       NSMAX=24
  5467.       IF (NITEM.EQ.0) NITEM=24
  5468.       NITEMM=NITEM
  5469.       COFQ2=COFQ*COFQ - RBMSH
  5470.       IF (SHIFT2.EQ.0.0) SHIFT2=COFQ
  5471.       SHIFT1=SHIFT1*SHIFT1
  5472.       IF (SHIFT1.GT.0.0) SHIFT1=SHIFT1 - RBMSH
  5473.       SHIFT2=SHIFT2*SHIFT2 - RBMSH
  5474.       NCM=NQ
  5475.       IF (NQ.LT.NP) NCM=MIN0(NFREQ + NQ/2 + 1,NFREQ + 8)
  5476.       IF (IINTER.GT.0) NCM=NQ + 50
  5477.       IF (NCM.GT.NEQ) NCM=NEQ
  5478.       NC=NQ
  5479.       IF (IDATWR.LE.1)
  5480.      1  WRITE (6,2100) NITEM,IFSS,IACCN,RTOL,ISVTYP,NSTV
  5481.       IF (IINTER.EQ.1) WRITE (6,2200) IINTER,SHIFT1,SHIFT2
  5482.       IF (RTOL.GT.1.D-6) WRITE (6,3000) RTOL
  5483. C
  5484. C     SET UP STORAGE LOCATIONS FOR THIS CASE
  5485. C
  5486.    70 NNC=NC*(NC + 1)/2
  5487.       M6=M5 + NNC*ITWO
  5488.       M7=M6 + NNC*ITWO
  5489.       M8=M7 + NC*NC*ITWO
  5490.       M9=M8 + NC*ITWO
  5491.       M10=M9 + NC*ITWO
  5492.       M11=M10 + NEQ*ITWO
  5493.       M12=M11 + NEQ*ITWO
  5494.       M13=M12 + NCM
  5495.       M14=M13 + NC*ITWO
  5496.       M15=M14 + NC*ITWO
  5497.       M16=M15 + NC*ITWO
  5498.       M17=M16 + NEQ*NC*ITWO
  5499.       M18=M17 + NCM*ITWO
  5500.       M19=M18 + NEQ*ITWO
  5501.       M20=M19 + NC
  5502.       CALL SIZE (M20)
  5503. C
  5504.       IF (MODEX.EQ.0) GO TO 599
  5505. C
  5506.   100 CALL SSPACE (A(N1),A(N1A),A(N1B),A(N2),A(M3),A(M4),A(M5),A(M6),
  5507.      1             A(M7),A(M8),A(M9),A(M10),A(M11),A(M12),A(M13),A(M14),
  5508.      2             A(M15),A(M16),A(M17),A(M18),A(M10),A(M11),A(M18),
  5509.      3             A(M19),NEQ,NCM,ISTOH,NBLOCK)
  5510. C
  5511. C     PRINT THE FREQUENCIES AND MODE SHAPES
  5512. C
  5513.       CALL WRFREQ (A(N2),NFREQ,RBMSH)
  5514. C
  5515.       IF (NREAD.GT.0) MODEX=0
  5516.       IF (NREAD.GT.0) GO TO 599
  5517.       M3=N2 + NFREQ*ITWO
  5518.       M4=M3 + (NEQ + NDISCE)*ITWO
  5519.       M5=M4 + NDOF*NUMNP
  5520.       NN=M5 - 1
  5521.       REWIND 8
  5522.       READ(8) (A(I),I=M4,NN)
  5523. C
  5524.       CALL WRMOD (A(N2),A(M3),A(M4),NUMNP,NDOF,NEQ,NFREQ,NMODE)
  5525. C
  5526.   599 CONTINUE
  5527. C
  5528.       RETURN
  5529. C
  5530.  1000 FORMAT (3I5,F10.0,3I5,2F10.0,I3,I2,I5,F10.0)
  5531.  2000 FORMAT (1H1,10X,35HS U B S P A C E   I T E R A T I O N,//1X,18A4//
  5532.      155H NUMBER OF EQUATIONS . . . . . . . . . . . . . .(NEQ) =,I8/1X,
  5533.      254HNUMBER OF ELEMENTS IN STIFFNESS MATRIX . . . . (NWA) =,I8/1X,
  5534.      354HNUMBER OF ELEMENTS IN MASS MATRIX . . . . . . .(NWB) =,I8//)
  5535.  2100 FORMAT (//32H FREQUENCY SOLUTION CONTROL DATA,//5X,
  5536.      155HMAX NUMBER OF SUBSPACE ITERATIONS ALLOWED . . (NITEM) =,I5 /5X,
  5537.      255H   EQ.0, SET TO 24                                        //5X,
  5538.      355HSTURM SEQUENCE CHECK CONTROL PARAMETER . . . . (IFSS) =,I5 /5X,
  5539.      455H   EQ.0, CHECK NOT PERFORMED                               /5X,
  5540.      555H   EQ.1, CHECK PERFORMED                                  //5X,
  5541.      655HFLAG FOR APPLYING ACCELERATION PROCEDURES . . (IACCN) =,I5/ 5X,
  5542.      755H   EQ.0, NO ACCELERATION                                   /5X,
  5543.      855H   EQ.1, SELF-ADAPTIVE SHIFTING AND OVERRELAXATION         /5X,
  5544.      955H         PROCEDURES WILL BE APPLIED, IF NECESSARY         //5X,
  5545.      A55HCONVERGENCE TOLERANCE ON EIGENVALUES . . . . . (RTOL) =,E15.5,
  5546.      B/5X,30H   EQ.0., SET TO 1.D-6                                //5X,
  5547.      155HFLAG TO GENERATE STARTING ITERATION VECTORS. (ISVTYP) =,I5 /5X,
  5548.      255H   EQ.0, CONVENTIONAL STARTING VECTORS GENERATED           /5X,
  5549.      355H   EQ.1, VECTORS GENERATED USING LANCZOS METHOD          //5X,
  5550.      C55HNUMBER OF USER PROVIDED STARTING VECTORS . . . (NSTV) =,I5 /5X,
  5551.      D55H   GT.0, NSTV STARTING VECTORS ARE READ FROM TAPE18           )
  5552.  2200 FORMAT (/5X,
  5553.      155HFLAG FOR INTERMEDIATE EIGENPAIRS CALCULATION (IINTER) =,I5 /5X,
  5554.      255H   EQ.0, NFREQ LOWEST EIGENVALUES ARE CALCULATED           /5X,
  5555.      355H   EQ.1, CALCULATE ALL EIGENPAIRS BETWEEN SHIFTS 1,2      //5X,
  5556.      455HLOWER LIMIT ON EIGENVALUES TO BE CALCULATED  (SHIFT1) =,E15.5//
  5557.      55X55HUPPER LIMIT ON EIGENVALUES TO BE CALCULATED  (SHIFT2) =E15.5/
  5558.      68X55HNOTE - SHIFT1 AND SHIFT2 ARE NOW IN (RAD/SEC)**2 AND    /
  5559.      78X40HADJUSTED FOR THE RIGID BODY MODE SHIFT   )
  5560. C
  5561.  3000 FORMAT (///,12H *** WARNING,/,
  5562.      1            27H SPECIFIED VALUE FOR RTOL =,E15.5,/,
  5563.      2            42H RECOMMENDED VALUE FOR RTOL = .LE. 1.D-06  //)
  5564.       END
  5565. C *CDC* *DECK SSPACE
  5566. C *UNI* )FOR,IS N.SSPACE, R.SSPACE
  5567.       SUBROUTINE SSPACE (MAXA,NCOLBV,ICOPL,A,B,XM,AR,BR,VEC,EIGV,D,
  5568.      1                   TT,W,NLOC,RTOLV,EVC1,EVC2,R,FREQ,WW,BUP,BLO,
  5569.      2                   BUPC,NSIT,NN,NCM,ISTOH,NBLOCK)
  5570. C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
  5571. C .                                                                   .
  5572. C .   P R O G R A M                                                   .
  5573. C .        TO SOLVE FOR THE SMALLEST EIGENVALUES AND CORRESPONDING    .
  5574. C .        EIGENVECTORS IN THE GENERALIZED EIGENPROBLEM USING THE     .
  5575. C .        SUBSPACE ITERATION METHOD                                  .
  5576. C .                                                                   .
  5577. C .  - - INPUT VARIABLES - -                                          .
  5578. C .        MAXA(NNM) = VECTOR CONTAINING ADDRESSES OF DIAGONAL        .
  5579. C .                    ELEMENTS OF STIFFNESS MATRIX A                 .
  5580. C .        NCOLBV    = NUMBER OF COLUMNS PER BLOCK VECTOR             .
  5581. C .        ICOPL     = LEAST NUMBERED COUPLING BLOCK                  .
  5582. C .        A(NWK)    = STIFFNESS MATRIX IN COMPACTED FORM             .
  5583. C .        B(NWK)    = CONSISTENT MASS MATRIX IN COMPACTED FORM       .
  5584. C .        XM(NN)    = LUMPED MASS MATRIX                             .
  5585. C .        AR(NNC)   = WORKING MATRIX STORING PROJECTION OF K         .
  5586. C .        BR(NNC)   = WORKING MATRIX STORING PROJECTION OF M         .
  5587. C .        VEC(NC*NC)= WORKING ARRAY                                  .
  5588. C .        EIGV(NC)  = WORKING VECTOR                                 .
  5589. C .        D(NC)     = WORKING VECTOR                                 .
  5590. C .        TT(NN)    = WORKING VECTOR                                 .
  5591. C .        W(NN)     = D VECTOR OF LDLT FACTORS                       .
  5592. C .        NLOC(NCM) = VECTOR STORING DEGREES OF FREEDOM EXCITED IN   .
  5593. C .                    STARTING SUBSPACE                              .
  5594. C .        RTOLV(NC) = WORKING VECTOR                                 .
  5595. C .        EVC1(NC)  = WORKING VECTOR                                 .
  5596. C .        EVC2(NC)  = WORKING VECTOR                                 .
  5597. C .        R(NN,NC)  = EIGENVECTORS ON SOLUTION EXIT                  .
  5598. C .        FREQ(NCM) = FINAL EIGENVALUES                              .
  5599. C .        WW(NN)    = WORKING VECTOR                                 .
  5600. C .        BUP(NC)   = WORKING VECTOR                                 .
  5601. C .        BLO(NC)   = WORKING VECTOR                                 .
  5602. C .        BUPC(NC)  = WORKING VECTOR                                 .
  5603. C .        NSIT(NC)  = WORKING VECTOR                                 .
  5604. C .        NN        = ORDER OF STIFFNESS AND MASS MATRICES           .
  5605. C .        NWK       = NUMBER OF ELEMENTS BELOW SKYLINE OF            .
  5606. C .                    STIFFNESS MATRIX                               .
  5607. C .        NWM       = NUMBER OF ELEMENTS BELOW SKYLINE OF            .
  5608. C .                    MASS MATRIX                                    .
  5609. C .                      I. E. NWM=NWK FOR CONSISTENT MASS MATRIX     .
  5610. C .                            NWM=NN  FOR LUMPED MASS MATRIX         .
  5611. C .        NROOT     = NUMBER OF REQUIRED EIGENVALUES AND EIGENVECTORS.
  5612. C .        NQ        = NUMBER OF ITERATION VECTORS USED               .
  5613. C .        NCM       = MIN(NFREQ + NQ/2,NFREQ + 8)     (BUT NCM       .
  5614. C .                    CANNOT BE LARGER THAN THE NUMBER OF MASS       .
  5615. C .                    DEGREES OF FREEDOM)                            .
  5616. C .        IFSS      = FLAG FOR STURM SEQUENCE CHECK                  .
  5617. C .                      EQ.0  NO CHECK                               .
  5618. C .                      EQ.1  CHECK                                  .
  5619. C .        IFPR      = FLAG FOR PRINTING DURING ITERATION             .
  5620. C .                      EQ.0  NO PRINTING                            .
  5621. C .                      EQ.1  PRINT                                  .
  5622. C .                                                                   .
  5623. C .  - - OUTPUT - -                                                   .
  5624. C .        FREQ(NROOT) = EIGENVALUES                                  .
  5625. C .        R(NN,NROOT) = EIGENVECTORS                                 .
  5626. C .                                                                   .
  5627. C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
  5628. C     IMPLICIT REAL*8 (A-H,O-Z)
  5629. C     ABS(X)=DABS(X)
  5630. C     SQRT(X)=DSQRT(X)
  5631. C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
  5632. C .        THIS PROGRAM IS USED IN SINGLE PRECISION ARITHMETIC ON     .
  5633. C .        CDC EQUIPMENT AND DOUBLE PRECISION ARITHMETIC ON IBM       .
  5634. C .        OR UNIVAC MACHINES .ACTIVATE,DEACTIVATE OR ADJUST ABOVE    .
  5635. C .        CARDS FOR SINGLE OR DOUBLE PRECISION ARITHMETIC            .
  5636. C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
  5637. C
  5638.       IMPLICIT REAL*8 (A-H,O-Z)
  5639.       COMMON /SOL/ NUMNP,NEQ,NWK,NWM,NWC,NUMEST,MIDEST,MAXEST,NSTE,MAL
  5640.       COMMON /EL/ IXY,ICOUNT,NPAR(20),NUMEG,NEGL,NEGNL,IMASS,IDAMP,ISTAT
  5641.      1           ,NDOF,KLIN,IEIG,IMASSN,IDAMPN
  5642.       COMMON /TAPEIG/ SCALE,NSTIF,NT,NMASS,NRED,NSHIFT,NOVER
  5643.       COMMON /TAPES/ IIN,IOUT
  5644.       COMMON /FAST/ SHIFT1,SHIFT2,IOVER,IRPC,NSTV,IINTER,JROLD,NSCH1,
  5645.      1              IACCN,NJUNK,ISVTYP
  5646.       COMMON /SCRAP/ SHIFT,RLQ1,NLQ,NITE,NSTEP,JR,ICONV,NCEV,NP,NQ,IFSS
  5647.       COMMON /TOLS/ RTOL,ALPHA,CTOL,ANORM,RCTOL
  5648.       COMMON /EIGIF/ COFQ,RBMSH,IESTYP,NFREQ,NMODE,IFPR,IRBM
  5649.       COMMON /ITELMT/ NSMAX,NITEM,NITEMM,NOVM
  5650.       COMMON /RQSHF/ IRQS
  5651.       COMMON /RHSV/ NVEC
  5652. C
  5653.       DIMENSION A(ISTOH),B(ISTOH),XM(1),AR(1),BR(1),VEC(1),EIGV(1),D(1),
  5654.      1          TT(1),W(1),RTOLV(1),EVC1(1),EVC2(1),R(NN,1),FREQ(1),
  5655.      2          WW(1),BUP(1),BLO(1),BUPC(1),TIM(10)
  5656.       INTEGER MAXA(1),NCOLBV(1),ICOPL(1),NLOC(1),NSIT(1)
  5657. C
  5658.       EQUIVALENCE (NROOT,NFREQ)
  5659. C
  5660. C     SET TOLERANCE FOR JACOBI ITERATION
  5661. C
  5662.       TOLJ=0.000000000001D0
  5663. C
  5664. C     INITIALIZATION
  5665. C
  5666.       ICONV=0
  5667.       IRQS=0
  5668.       NVEC=1
  5669.       NCEV=0
  5670.       JR=0
  5671.       JROLD=0
  5672.       RCTOL=0.0000000001D0
  5673.       IF (RTOL.LT.RCTOL) RCTOL=RTOL
  5674.       SHIFT=SHIFT1
  5675.       NC=NQ
  5676.       NNC=NC*(NC + 1)/2
  5677.       N1=NC + 1
  5678.       NC1=NC - 1
  5679.       DO 10 I=1,NC
  5680.       NSIT(I)=0
  5681.       EVC2(I)=0.
  5682.    10 D(I)=0.
  5683.       DO 15 I=1,10
  5684.    15 TIM(I)=0.
  5685. C
  5686. C     ESTABLISH STARTING ITERATION VECTORS
  5687. C
  5688.       REWIND NT
  5689.       REWIND NSTIF
  5690.       REWIND NMASS
  5691.       IF (IMASS.EQ.2 .AND. NBLOCK.EQ.1) READ (NMASS) B
  5692.       CALL SECOND (TIM1)
  5693. C
  5694.       ND=NN/NCM
  5695.       J=NN
  5696.       NEQL=1
  5697.       NEQR=0
  5698.       MLA=0
  5699.       DO 40 NJ=1,NBLOCK
  5700.       NCOLB=NCOLBV(NJ)
  5701.       NEQR=NEQR + NCOLB
  5702.       IF (NBLOCK.GT.1) READ (NSTIF) A
  5703. C
  5704.       IF (IMASS.EQ.2) GO TO 25
  5705.       DO 20 I=NEQL,NEQR
  5706.       II=MAXA(I) - MLA
  5707.       R(I,1)=XM(I)
  5708.       W(I)=XM(I)/A(II)
  5709.       IF (XM(I).EQ.0.) J=J - 1
  5710.    20 CONTINUE
  5711.       GO TO 35
  5712.    25 IF (NBLOCK.GT.1) READ (NMASS) B
  5713.       DO 30 I=NEQL,NEQR
  5714.       II=MAXA(I) - MLA
  5715.       W(I)=B(II)/A(II)
  5716.       R(I,1)=B(II)
  5717.    30 CONTINUE
  5718. C
  5719.    35 NEQL=NEQL + NCOLB
  5720.       MLA=MAXA(NEQL) - 1
  5721.    40 CONTINUE
  5722.       IF (NCM.LE.J .AND. NROOT.LE.J) GO TO 50
  5723.       WRITE (IOUT,2007) NCM,J
  5724.       STOP
  5725. C
  5726. C     CHECK FOR SINGLE DEGREE-OF-FREEDOM SYSTEM
  5727. C
  5728.    50 IF (NN.GT.1) GO TO 65
  5729.       IF (IMASS.EQ.1) B(1)=XM(1)
  5730.       IF (B(1).GT.0.) GO TO 62
  5731.       WRITE (IOUT,2008)
  5732.       STOP
  5733.    62 EIGV(1)=A(1)/B(1)
  5734.       JR=1
  5735.       NSCH=1
  5736.       A(1)=1./DSQRT(B(1))
  5737.       WRITE(NT) A(1)
  5738.       NEI=NSCH
  5739.       GO TO 1150
  5740. C
  5741.    65 IF (NCM.EQ.1) GO TO 95
  5742.       IF (NC.EQ.1) GO TO 69
  5743.       DO 68 J=2,NC
  5744.       DO 68 I=1,NN
  5745.    68 R(I,J)=0.
  5746.    69 L=NN - ND
  5747.       DO 90 J=2,NCM
  5748.       RT=0.
  5749.       DO 70 I=1,L
  5750.       IF (W(I).LT.RT) GO TO 70
  5751.       RT=W(I)
  5752.       IJ=I
  5753.    70 CONTINUE
  5754.       DO 80 I=L,NN
  5755.       IF (W(I).LE.RT) GO TO 80
  5756.       RT=W(I)
  5757.       IJ=I
  5758.    80 CONTINUE
  5759.       NLOC(J)=IJ
  5760.       W(IJ)=0.
  5761.       L=L-ND
  5762.       IF (J.LT.NC) R(IJ,J)=1.
  5763.    90 CONTINUE
  5764. C
  5765.       IF (IFPR.EQ.0) GO TO 93
  5766.       WRITE (IOUT,2009)
  5767.       WRITE (IOUT,2001) (NLOC(J),J=2,NCM)
  5768.    93 IF (NC.EQ.1) GO TO 95
  5769. C
  5770. C     A RANDOM VECTOR IS TAKEN AS THE LAST ITERATION VECTOR
  5771. C
  5772. C     RANDOM NUMBER XX(N+1)=FRACTIONAL PART OF (PI + XX(N))**5
  5773. C
  5774.       PI=3.141592654
  5775.       XX=0.5
  5776.       DO 92 K=1,NN
  5777.       XX=(PI + XX)**5
  5778.       IX=IDINT(XX)
  5779.       XX=XX - DBLE(FLOAT(IX))
  5780.    92 R(K,NC)=XX
  5781. C
  5782. C     READ NSTV STARTING VECTORS FROM TAPE18, IF PROVIDED
  5783. C
  5784.    95 IF (NSTV.LE.0) GO TO 120
  5785.       NV=NSTV
  5786.       IF (NV.GT.NC) NV=NC
  5787.       REWIND NSHIFT
  5788.       DO 110 J=1,NV
  5789.       READ (NSHIFT) (TT(I),I=1,NN)
  5790.       IF (IMASS.EQ.1) GO TO 100
  5791.       CALL MLTPLY (R(1,J),B,TT,MAXA,NN,NCOLBV,ISTOH,NBLOCK,NMASS)
  5792.       GO TO 110
  5793.   100 DO 105 I=1,NN
  5794.   105 R(I,J)=XM(I)*TT(I)
  5795.   110 CONTINUE
  5796. C
  5797.   120 CALL SECOND (TIM2)
  5798.       TIM(1)=TIM2 - TIM1
  5799. C
  5800. C     FACTORIZE MATRIX A INTO (L)*(D)*(L(T))
  5801. C
  5802.       CALL BANDET(A,B,XM,TT,W,MAXA,NCOLBV,ICOPL,NN,ISTOH,NBLOCK,SHIFT,
  5803.      1            NSCH,IMASS,FDETA,IDETA,1)
  5804. C
  5805.       CALL SECOND (TIM3)
  5806.       TIM(2)=TIM3 - TIM2
  5807.       NSCH1=NSCH
  5808.       IF (IFPR.NE.0 .AND. IINTER.GT.0)
  5809.      * WRITE (IOUT,2060) NSCH1
  5810. C
  5811. C     GENERATE STARTING VECTORS USING TRUNCATED LANCZOS ALGORITHM
  5812. C
  5813.       IF (ISVTYP.EQ.0) GO TO 130
  5814.       IF (NSTV.GE.NC1 .OR. NC.LE.2) GO TO 130
  5815.       M1=NSTV + 1
  5816.       DO 125 K=1,NN
  5817.   125 R(K,M1)=1.
  5818.       CALL STARTV (A,B,XM,TT,W,WW,R,MAXA,NCOLBV,ICOPL,NLOC,EVC1,
  5819.      1             M1,NC1,NN,ISTOH,NBLOCK,1)
  5820.       CALL SECOND (TIM4)
  5821.       TIM(1)=TIM(1) + TIM4 - TIM3
  5822.       TIM3=TIM4
  5823. C
  5824. C     FOR OUT-OF-CORE SOLUTION WRITE STARTING VECTORS ONTO TAPE NT
  5825. C
  5826.   130 IF (NBLOCK.EQ.1) GO TO 140
  5827.       REWIND NOVER
  5828.       DO 135 J=1,NC
  5829.   135 WRITE (NOVER) (R(K,J),K=1,NN)
  5830.       REWIND NOVER
  5831.   140 DO 150 J=1,NC
  5832.   150 NLOC(J)=0
  5833. C
  5834. C - - - S T A R T   O F   I T E R A T I O N   L O O P
  5835. C
  5836.       NSTEP=4
  5837.       NITE=0
  5838.       NLQ=0
  5839.       RLQ1=0.
  5840.   200 NITE=NITE + 1
  5841.       IF (IFPR.EQ.0) GO TO 202
  5842.       WRITE (IOUT,2010) NITE
  5843. C
  5844. C     P R O J E C T I O N   O F   A  M A T R I X
  5845. C
  5846.   202 CALL SECOND (TIM4)
  5847.       IF (IRPC.EQ.0) JR=0
  5848.       JJ=JR + 1
  5849.       IF (NBLOCK.EQ.1) GO TO 220
  5850. C
  5851. C     FOR OUT-OF-CORE SOLUTION BACKSUBSTITUTE ALL VECTORS SIMULTANEOUSLY
  5852. C
  5853.       NVEC=NC - JR
  5854. C
  5855.       CALL BANDET (A,B,XM,R(1,JJ),W,MAXA,NCOLBV,ICOPL,NN,ISTOH,NBLOCK,
  5856.      1             SHIFT,NSCH,IMASS,FDETA,IDETA,2)
  5857. C
  5858.       NVEC=1
  5859. C
  5860.   220 DO 255 J=JJ,NC
  5861.       IF (NBLOCK.EQ.1) GO TO 225
  5862.       READ (NOVER) (TT(K),K=1,NN)
  5863.       GO TO 230
  5864.   225 DO 228 K=1,NN
  5865.   228 TT(K)=R(K,J)
  5866. C
  5867.       CALL BANDET (A,B,XM,R(1,J),W,MAXA,NCOLBV,ICOPL,NN,ISTOH,NBLOCK,
  5868.      1             SHIFT,NSCH,IMASS,FDETA,IDETA,2)
  5869. C
  5870.   230 IJ=J
  5871.       DO 250 I=1,J
  5872.       ART=0.
  5873.       IF (I - JR) 238,238,242
  5874.   238 DO 240 K=1,NN
  5875.   240 ART=ART + R(K,J)*R(K,I)
  5876.       ART=ART*(EIGV(I) - SHIFT)
  5877.       GO TO 248
  5878.   242 DO 246 K=1,NN
  5879.   246 ART=ART + R(K,I)*TT(K)
  5880.   248 AR(IJ)=ART
  5881.   250 IJ=IJ + NC - I
  5882.   255 CONTINUE
  5883. C
  5884. C     P R O J E C T I O N   O F   B  M A T R I X
  5885. C
  5886.       JJ=JR + 1
  5887.       DO 310 J=JJ,NC
  5888.       IF (IMASS - 1) 275,275,272
  5889.   272 CALL MLTPLY (TT,B,R(1,J),MAXA,NN,NCOLBV,ISTOH,NBLOCK,NMASS)
  5890.       GO TO 278
  5891.   275 DO 276 K=1,NN
  5892.   276 TT(K)=XM(K)*R(K,J)
  5893. C
  5894.   278 IJ=J
  5895.       DO 290 I=1,J
  5896.       BRT=0.
  5897.       IF (ICONV.GT.0) GO TO 279
  5898.   277 IF (I - J ) 283,279,279
  5899.   279 DO 280 K=1,NN
  5900.   280 BRT=BRT + R(K,I)*TT(K)
  5901.       GO TO 287
  5902.   283 DO 285 K=1,NN
  5903.   285 BRT=BRT + R(K,J)*R(K,I)
  5904.   287 BR(IJ)=BRT
  5905.   290 IJ=IJ + NC - I
  5906.       IF (ICONV.GT.0) GO TO 310
  5907.       DO 300 K=1,NN
  5908.   300 R(K,J)=TT(K)
  5909.   310 CONTINUE
  5910.       CALL SECOND (TIM5)
  5911.       TIM(3)=TIM(3) + TIM5 - TIM4
  5912. C
  5913. C     SOLVE FOR EIGENSYSTEM OF SUBSPACE OPERATORS
  5914. C
  5915.       IF (IFPR.NE.2) GO TO 430
  5916.       KKK=1
  5917.   400 WRITE (IOUT,2020)
  5918.       II=1
  5919.       DO 410 I=1,NC
  5920.       ITEMP=II+NC-I
  5921.       WRITE(IOUT,2005) (AR(J),J=II,ITEMP)
  5922.   410 II=II + N1 - I
  5923.       WRITE (IOUT,2030)
  5924.       II=1
  5925.       DO 420 I=1,NC
  5926.       ITEMP=II+NC-I
  5927.       WRITE(IOUT,2005) (BR(J),J=II,ITEMP)
  5928.   420 II=II + N1 - I
  5929.       IF (KKK - 1) 430,430,440
  5930. C
  5931.   430 CALL JACOBI (AR,BR,VEC,EIGV,TT,NC,NNC,TOLJ,SHIFT,NSMAX,IFPR)
  5932.       CALL SECOND (TIM6)
  5933.       TIM(4)=TIM(4) + TIM6-TIM5
  5934. C
  5935.       IF (IFPR.NE.2) GO TO 440
  5936.       WRITE (IOUT,2040)
  5937.       KKK=2
  5938.       GO TO 400
  5939. C
  5940. C     ARRANGE EIGENVALUES IN ASCENDING ORDER
  5941. C
  5942.   440 DO 445 I=1,NC
  5943.   445 EIGV(I)=EIGV(I) + SHIFT
  5944.       IF (NC.EQ.1) GO TO 465
  5945. C
  5946.   448 IS=0
  5947.       DO 460 I=1,NC1
  5948.       IF (EIGV(I + 1).GE.EIGV(I)) GO TO 460
  5949.       IS=IS+1
  5950.       EIGVT=EIGV(I + 1)
  5951.       EIGV(I + 1)=EIGV(I)
  5952.       EIGV(I)=EIGVT
  5953.       NCI=NC*I
  5954.       NCI1=NC*(I - 1)
  5955.       DO 450 K=1,NC
  5956.       RT=VEC(NCI + K)
  5957.       VEC(NCI + K)=VEC(NCI1 + K)
  5958.       VEC(NCI1 + K)=RT
  5959.   450 CONTINUE
  5960.   460 CONTINUE
  5961.       IF (IS.GT.0) GO TO 448
  5962.   465 IF (IFPR.EQ.0) GO TO 470
  5963.       WRITE (IOUT,2035)
  5964.       WRITE (IOUT,2006) (EIGV(I),I=1,NC)
  5965. C
  5966. C     CHECK TO SEE WHETHER ANY NEW ROOTS HAVE SUDDENLY APPEARED, IN THAT
  5967. C     CASE DECREASE JR. OTHERWISE CALCULATE HOW MANY MORE HAVE CONVERGED
  5968. C     ALSO MAKE SURE THAT CLUSTERED ROOTS ARE FROZEN TOGETHER
  5969. C
  5970.   470 JRN=0
  5971.       IF (NITE.EQ.1 .OR. IACCN.EQ.0 .OR. ICONV.GT.0) GO TO 490
  5972.       IF (NC.EQ.1 .OR. EIGV(1).LT.SHIFT1) GO TO 490
  5973.       DO 480 I=1,NC1
  5974.       DUM=DABS(EIGV(I) - D(I))/EIGV(I)
  5975.       IF (DUM.GT.RCTOL) GO TO 490
  5976.       IF (1.01*EIGV(I).LT.0.99*EIGV(I + 1)) JRN=I
  5977.   480 CONTINUE
  5978.   490 IF (JRN.LT.JR) JR=JRN
  5979.       IF (JRN.LE.JR) GO TO 500
  5980.       JJ=JR + 1
  5981.       DO 495 I=JJ,JRN
  5982.   495 NLOC(NCEV + I)=NITE - NSIT(I)
  5983. C
  5984. C     CALCULATE B TIMES APPROXIMATE EIGENVECTORS (ICONV.EQ.0)
  5985. C        OR     FINAL EIGENVECTOR APPROXIMATIONS (ICONV.GT.0)
  5986. C
  5987.   500 JJ=JR + 1
  5988.       DO 540 I=1,NN
  5989.       DO 510 J=1,NC
  5990.   510 TT(J)=R(I,J)
  5991.       DO 530 K=JJ,NC
  5992.       KK=NC*(K-1)
  5993.       RT=0.
  5994.       DO 520 L=1,NC
  5995.   520 RT=RT + TT(L)*VEC(KK+L)
  5996.   530 R(I,K)=RT
  5997.   540 CONTINUE
  5998.       IF (IFPR.NE.2) GO TO 542
  5999.       WRITE (IOUT,2045)
  6000.       DO 541 I=1,NC
  6001.       K1=I
  6002.       K2=NC*(NC - 1) + I
  6003.       WRITE (IOUT,2005) (VEC(J),J=K1,K2,NC)
  6004.   541 CONTINUE
  6005. C
  6006. C     UPDATE  JR, THE NUMBER OF CONVERGED ROOTS
  6007. C
  6008.   542 IF (ICONV.GT.0) GO TO 558
  6009.       JR=JRN
  6010. C
  6011.   558 CALL SECOND (TIM7)
  6012.       TIM(5)=TIM(5) + TIM7-TIM6
  6013.       IF (ICONV.GT.0) GO TO 1000
  6014. C
  6015. C     CHECK FOR CONVERGENCE OF EIGENVALUES,EIGENVECTORS
  6016. C
  6017.       DO 560 I=1,NC
  6018.       DIF=DABS(EIGV(I)-D(I))
  6019.   560 RTOLV(I)=DIF/EIGV(I)
  6020.       IF (IFPR.EQ.0) GO TO 570
  6021.       WRITE (IOUT,2050)
  6022.       WRITE (IOUT,2250) (RTOLV(I),I=1,NC)
  6023. C
  6024. C     ACCELERATE CONVERGENCE, IF NECESSARY AND IS POSSIBLE
  6025. C
  6026.   570 CALL SECOND (TIM8)
  6027.       NJUNK=0
  6028.       DO 590 J=1,NC
  6029.       IF (EIGV(J).GT.SHIFT1) GO TO 600
  6030.       NJUNK=J
  6031.   590 CONTINUE
  6032.   600 NJ=NJUNK + 1
  6033.       NR=NC - NJUNK
  6034. C
  6035.       CALL RAPID (EIGV(NJ),D(NJ),TT,W,EVC1(NJ),EVC2(NJ),RTOLV(NJ),
  6036.      1            R(1,NJ),R,FREQ,WW,XM,NLOC,NSIT(NJ),NN,NR)
  6037. C
  6038.       CALL SECOND (TIM9)
  6039.       TIM(6)=TIM(6) + TIM9-TIM8
  6040. C
  6041.   910 DO 920 I=1,NC
  6042.       EVC1(I)=EVC2(I)
  6043.       EVC2(I)=D(I)
  6044.   920 D(I)=EIGV(I)
  6045.       IF (JR.EQ.0) GO TO 960
  6046.       IF (ICONV.GT.0) GO TO 960
  6047. C
  6048. C     PRESET PROJECTION MATRICES CORRESPONDING TO CONVERGED EIGENVECTORS
  6049. C
  6050.       II=1
  6051.       DO 940 I=1,JR
  6052.       IJ=II
  6053.       AR(IJ)=EIGV(I) - SHIFT
  6054.       BR(IJ)=1.
  6055.       IJ=IJ + 1
  6056.       IF (I.EQ.JR) GO TO 940
  6057.       JJ=I + 1
  6058.       DO 930 J=JJ,JR
  6059.       AR(IJ)=0.
  6060.       BR(IJ)=0.
  6061.   930 IJ=IJ + 1
  6062.   940 II=II + N1 - I
  6063. C
  6064.   960 GO TO 200
  6065. C
  6066. C - - - E N D   O F   I T E R A T I O N   L O O P
  6067. C
  6068.  1000 CALL SECOND (TIM10)
  6069.       JR=NROOT
  6070.       J=0
  6071.       DO 1010 I=1,NC
  6072.       IF (EIGV(I).LT.SHIFT1) GO TO 1010
  6073.       J=J + 1
  6074.       FREQ(NCEV + J)=EIGV(I)
  6075.  1010 CONTINUE
  6076. C
  6077.       IF (NROOT.EQ.0) GO TO 1160
  6078.       REWIND NT
  6079.       IF (NCEV.EQ.0) GO TO 1030
  6080.       DO 1020 L=1,NCEV
  6081.  1020 READ (NT)
  6082.  1030 NR=NROOT - NCEV
  6083.       IF (NR.EQ.0) GO TO 1080
  6084. C
  6085.       J=0
  6086.       DO 1070 L=1,NC
  6087.       IF (EIGV(L).LT.SHIFT1) GO TO 1070
  6088.       J=J + 1
  6089.       IF (J.GT.NR) GO TO 1080
  6090.       IF (IMASS - 1) 1050,1050,1040
  6091.  1040 CALL MLTPLY ( W,B,R(1,L),MAXA,NN,NCOLBV,ISTOH,NBLOCK,NMASS)
  6092.       GO TO 1060
  6093.  1050 DO 1055 I=1,NN
  6094.  1055 W(I)=XM(I)*R(I,L)
  6095.  1060 WRITE (NT) (R(I,L),I=1,NN),(W(I),I=1,NN)
  6096.  1070 CONTINUE
  6097.  1080 REWIND NT
  6098. C
  6099. C     CALCULATE AND PRINT ERROR NORMS
  6100. C
  6101.       REWIND NSTIF
  6102.       IF (NBLOCK.EQ.1) READ (NSTIF) A
  6103.       DO 1140 L=1,NROOT
  6104.       RT=FREQ(L)
  6105.       READ (NT) (WW(I),I=1,NN),(R(I,1),I=1,NN)
  6106.       CALL MLTPLY (TT,A,WW,MAXA,NN,NCOLBV,ISTOH,NBLOCK,NSTIF)
  6107.       VNORM=0.
  6108.       DO 1100 I=1,NN
  6109.  1100 VNORM=VNORM + TT(I)*TT(I)
  6110.       WNORM=0.
  6111.       DO 1120 I=1,NN
  6112.       TT(I)=TT(I) - RT*R(I,1)
  6113.  1120 WNORM=WNORM + TT(I)*TT(I)
  6114.       VNORM=DSQRT(VNORM)
  6115.       WNORM=DSQRT(WNORM)
  6116.       W(L)=WNORM/VNORM
  6117.  1140 CONTINUE
  6118. C
  6119.       WRITE (NT) (FREQ(I),I=1,NROOT)
  6120. C
  6121.       WRITE (IOUT,2100)
  6122.       WRITE (IOUT,2006) (FREQ(I),I=1,NROOT)
  6123.       WRITE (IOUT,2110) (NLOC(I),I=1,NROOT)
  6124.       WRITE(IOUT,2115)
  6125.       WRITE (IOUT,2006) (W(I),I=1,NROOT)
  6126.       IF (IFSS.EQ.0) GO TO 1160
  6127. C
  6128. C     APPLY STURM SEQUENCE CHECK
  6129. C
  6130.       NEI=NROOT
  6131.       NJUNK=0
  6132.       DO 1142 L=1,NC
  6133.       IF (EIGV(L).GT.SHIFT1) GO TO 1145
  6134.       NJUNK=L
  6135.  1142 CONTINUE
  6136.  1145 NJ=NJUNK + 1
  6137.       NCM=NCEV + NC - NJUNK
  6138.       CALL SCHECK (FREQ,RTOLV(NJ),BUP,BLO,BUPC,NLOC,NCM,NEI,RTOL,SHIFT)
  6139. C
  6140.       WRITE (IOUT,2120) SHIFT
  6141. C
  6142. C     SHIFT MATRIX A AND FACTORIZE SHIFTED MATRIX
  6143. C
  6144.       CALL BANDET(A,B,XM,TT,W,MAXA,NCOLBV,ICOPL,NN,ISTOH,NBLOCK,SHIFT,
  6145.      1            NSCH,IMASS,FDETA,IDETA,1)
  6146. C
  6147.       NSCH=NSCH - NSCH1
  6148.  1150 WRITE (IOUT,2130) NSCH,SHIFT1,SHIFT,NEI
  6149.       IF (NSCH.EQ.NEI) GO TO 1160
  6150.       WRITE (IOUT,2132)
  6151.       IF (NSCH.GT.NEI) WRITE (IOUT,2140)
  6152.       STOP
  6153.  1160 CALL SECOND (TIM11)
  6154.       TIM(7)=TIM(7) + TIM11-TIM10
  6155.       TIM(10)=TIM11 - TIM1
  6156.       IF (IFPR.GT.0)
  6157.      1  WRITE (IOUT,2200) NITE,(TIM(I),I=1,7),TIM(10)
  6158. C
  6159.       RETURN
  6160. C
  6161.  2001 FORMAT (1H0,10I10)
  6162.  2005 FORMAT (12E11.4)
  6163.  2006 FORMAT (6E22.14)
  6164.  2007 FORMAT (///45H *** STOP, REQUESTED NUMBER OF ROOTS, NFREQ =,I5,
  6165.      1 63H IS LARGER THAN THE NUMBER OF NON-ZERO MASS DEGREES OF FREEDOM
  6166.      2=,I5)
  6167.  2008 FORMAT (38H0***ERROR   SOLUTION STOP IN "SSPACE"   , / 12X,
  6168.      1        23HNO EIGENVALUES COMPUTED, / 1X)
  6169.  2009 FORMAT ( ///,62H DEGREES OF FREEDOM EXCITED BY UNIT STARTING ITERA
  6170.      1TION VECTORS)
  6171.  2010 FORMAT (1H1,32HI T E R A T I O N   N U M B E R ,I4//)
  6172.  2020 FORMAT (28H0PROJECTION OF A (MATRIX AR) )
  6173.  2035 FORMAT (30H0EIGENVALUES OF AR-LAMBDA*BR  )
  6174.  2030 FORMAT (28H0PROJECTION OF B (MATRIX BR) )
  6175.  2040 FORMAT (40H0AR AND BR AFTER JACOBI DIAGONALIZATION  )
  6176.  2045 FORMAT (29H0Q MATRIX                       /)
  6177.  2050 FORMAT (43H0RELATIVE TOLERANCE REACHED ON EIGENVALUES  )
  6178.  2060 FORMAT (//,37H NUMBER OF EIGENVALUES BELOW SHIFT1 =,I5)
  6179.  2100 FORMAT (1H1,31H THE CALCULATED EIGENVALUES ARE )
  6180.  2110 FORMAT (///59H NUMBER OF SUBSPACE ITERATIONS PERFORMED FOR EACH EI
  6181.      1GENPAIR/,(1H0,20I5))
  6182.  2115 FORMAT (//1X,36HPRINT ERROR NORMS ON THE EIGENVALUES  )
  6183.  2120 FORMAT  (///,23H CHECK APPLIED AT SHIFT   E22.14)
  6184.  2130 FORMAT (/40H BASED ON STURM SEQUENCE CHECK THERE ARE,I4,
  6185.      1         29H EIGENVALUES BETWEEN SHIFT1 =,E15.5,12H AND SHIFT =,
  6186.      2         E15.5,//46H NUMBER OF EIGENVALUES CALCULATED BY THE PROGR
  6187.      3         21HAM IN THIS INTERVAL =,I4 //)
  6188.  2132 FORMAT (//50H *** REQUESTED FREQUENCIES NOT OBTAINED ***        /
  6189.      1          50H *** STOP OF SOLUTION ***                          //
  6190.      2          50H FAILURE OF SOLUTION ALGORITHM CAN BE DUE TO USE   /
  6191.      3          47H OF BAD MODEL OR INAPPROPRIATE USE OF SOLUTION
  6192.      4          15H PARAMETERS       //)
  6193.  2140 FORMAT (95H TO CALCULATE THE MISSING EIGENVALUES REPEAT THE SOLUTI
  6194.      1ON USING LARGER NUMBER OF TRIAL VECTORS.,/19H ALSO DECREASE RTOL )
  6195.  2200 FORMAT (1H1,///23H EIGENSOLUTION TIME LOG ,///1X,
  6196.      A51HNUMBER OF SUBSPACE ITERATIONS PERFORMED           =,I5,/1X,
  6197.      151HTIME FOR CALCULATION OF STARTING SUBSPACE         =,F9.3,/1X,
  6198.      251HTIME FOR LDLT FACTORIZATION OF STIFFNESS MATRIX   =,F9.3,/1X,
  6199.      351HTIME FOR CALCULATION OF PROJECTIONS OF A AND B    =,F9.3,/1X,
  6200.      451HTIME FOR SOLVING EIGENSYSTEM OF SUBSPACE OPERATORS=,F9.3,/1X
  6201.      551HTIME FOR SORTING EIGENVALUES, NORMALISING VECTORS =,F9.3,/1X,
  6202.      651HTIME FOR CALCULATING AND APPLYING SHIFTS          =,F9.3,/1X
  6203.      751HTIME FOR ERROR NORMS AND STURM SEQUENCE CHECK     =,F9.3,//1X,
  6204.      851HTIME FOR EIGENSOLUTION                            =,F9.3,//)
  6205.  2250 FORMAT (6E15.5/)
  6206. C
  6207.       END
  6208. C *CDC* *DECK STARTV
  6209. C *UNI* )FOR,IS N.STARTV, R.STARTV
  6210.       SUBROUTINE STARTV (A,B,XM,TT,W,WW,R,MAXA,NCOLBV,ICOPL,NLOC,D,
  6211.      1                   M1,M2,NN,ISTOH,NBLOCK,KKK)
  6212. C
  6213. C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
  6214. C .                                                                   .
  6215. C .   PROGRAM TO GENERATE STARTING VECTORS FOR SUBSPACE ITERATION     .
  6216. C .   USING TRUNCATED LANCZOS ALGORITHM                               .
  6217. C .                                                                   .
  6218. C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
  6219. C
  6220.       IMPLICIT REAL*8 (A-H,O-Z)
  6221. C
  6222.       COMMON /SOL/ NUMNP,NEQ,NWK,NWM,NWC,NUMEST,MIDEST,MAXEST,NSTE,MAL
  6223.       COMMON /EL/ IXY,ICOUNT,NPAR(20),NUMEG,NEGL,NEGNL,IMASS,IDAMP,ISTAT
  6224.      1           ,NDOF,KLIN,IEIG,IMASSN,IDAMPN
  6225.       COMMON /TAPEIG/ SCALE,NSTIF,NT,NMASS,NRED,NSHIFT,NOVER
  6226.       COMMON /TAPES/ IIN,IOUT
  6227.       COMMON /FAST/ SHIFT1,SHIFT2,IOVER,IRPC,NSTV,IINTER,JROLD,NSCH1,
  6228.      1              IACCN,NJUNK,ISVTYP
  6229.       COMMON /SCRAP/ SHIFT,RLQ1,NLQ,NITE,NSTEP,JR,ICONV,NCEV,NP,NQ,IFSS
  6230.       COMMON /EIGIF/ COFQ,RBMSH,IESTYP,NFREQ,NMODE,IFPR,IRBM
  6231.       COMMON /RQSHF/ IRQS
  6232.       COMMON /RHSV/ NVEC
  6233. C
  6234.       DIMENSION A(ISTOH),B(ISTOH),XM(1),TT(1),W(1),WW(1),R(NN,1),D(1)
  6235.       INTEGER MAXA(1),NCOLBV(1),ICOPL(1),NLOC(1)
  6236. C
  6237.       REWIND NSHIFT
  6238.       NJ=1
  6239.       BETOL=0.0001
  6240.       RQTOL=0.0000001D0
  6241.       GSTOL=0.001
  6242.       IF (IFPR.NE.0) WRITE (IOUT,2000)
  6243. C
  6244. C     ORTHOGONALISE STARTING VECTOR TO CONVERGED VECTORS ON TAPE NT
  6245. C
  6246.    10 IF (NCEV.EQ.0) GO TO 60
  6247.       REWIND NT
  6248.       DO 40 I=1,NCEV
  6249.       READ (NT) (TT(K),K=1,NN),(WW(K),K=1,NN)
  6250.       AL=0.
  6251.       DO 20 K=1,NN
  6252.    20 AL=AL + R(K,M1)*WW(K)
  6253.       DO 30 K=1,NN
  6254.    30 R(K,M1)=R(K,M1) - AL*TT(K)
  6255.    40 CONTINUE
  6256. C
  6257.    60 IF (IMASS.EQ.1) GO TO 65
  6258.       CALL MLTPLY (TT,B,R(1,M1),MAXA,NN,NCOLBV,ISTOH,NBLOCK,NMASS)
  6259.       GO TO 75
  6260.    65 DO 70 K=1,NN
  6261.    70 TT(K)=XM(K)*R(K,M1)
  6262. C
  6263. C     ORTHOGONALISE STARTING VECTOR TO THE VECTORS IN-CORE CURRENTLY
  6264. C
  6265.    75 IF (M1.EQ.1) GO TO 110
  6266.       IF (KKK.EQ.1) REWIND NSHIFT
  6267.       MM=M1 - 1
  6268.       DO 90 I=1,MM
  6269.       AL=0.
  6270.       DO 80 K=1,NN
  6271.    80 AL=AL + R(K,M1)*R(K,I)
  6272.       DO 85 K=1,NN
  6273.    85 TT(K)=TT(K) - AL*R(K,I)
  6274.       IF (KKK.GT.1) GO TO 90
  6275.       READ (NSHIFT) (WW(K),K=1,NN)
  6276.       DO 88 K=1,NN
  6277.    88 R(K,M1)=R(K,M1) - AL*WW(K)
  6278.    90 CONTINUE
  6279.       IF (KKK.EQ.1) GO TO 110
  6280. C
  6281.       DO 92 K=1,NN
  6282.    92 R(K,M1)=TT(K)
  6283.       CALL BANDET (A,B,XM,TT,W,MAXA,NCOLBV,ICOPL,NN,ISTOH,NBLOCK,
  6284.      1             SHIFT,NSCH,IMASS,FDETA,IDETA,2)
  6285.       ALFA=0.
  6286.       DO 100 K=1,NN
  6287.   100 ALFA=ALFA + TT(K)*R(K,M1)
  6288. C
  6289.       IF (IMASS.EQ.1) GO TO 105
  6290.       CALL MLTPLY (R(1,M1),B,TT,MAXA,NN,NCOLBV,ISTOH,NBLOCK,NMASS)
  6291.       GO TO 130
  6292.   105 DO 108 K=1,NN
  6293.   108 R(K,M1)=XM(K)*TT(K)
  6294.       GO TO 130
  6295. C
  6296.   110 DO 120 K=1,NN
  6297.       DUM=TT(K)
  6298.       TT(K)=R(K,M1)
  6299.   120 R(K,M1)=DUM
  6300.       ALFA=0.
  6301. C
  6302.   130 BETA=0.
  6303.       DO 135 K=1,NN
  6304.   135 BETA=BETA + TT(K)*R(K,M1)
  6305.       D(NJ)=ALFA/BETA
  6306.       BETA=DSQRT(BETA)
  6307.       GAMA=BETA
  6308.       DO 140 K=1,NN
  6309.       TT(K)=TT(K)/BETA
  6310.   140 R(K,M1)=R(K,M1)/BETA
  6311.       IF (IFPR.NE.0) WRITE (IOUT,2020) M1,ALFA,BETA,GAMA,D(NJ)
  6312. C
  6313.       WRITE (NSHIFT) (TT(K),K=1,NN)
  6314.       IF (M1.EQ.M2) GO TO 500
  6315.       BETA=0.
  6316.       DO 210 K=1,NN
  6317.   210 WW(K)=0.
  6318.       MM=M1 + 1
  6319. C
  6320.       DO 400 J=MM,M2
  6321.       J1=J - 1
  6322. C
  6323. C     INVERSE ITERATION
  6324. C
  6325.       DO 220 K=1,NN
  6326.   220 R(K,J)=R(K,J1)
  6327.       CALL BANDET (A,B,XM,R(1,J),W,MAXA,NCOLBV,ICOPL,NN,ISTOH,NBLOCK,
  6328.      1             SHIFT,NSCH,IMASS,FDETA,IDETA,2)
  6329. C
  6330. C     COMPUTE AND CHECK THE RAYLEIGH QUOTIENT
  6331. C
  6332.       ALFA=0.
  6333.       DO 230 K=1,NN
  6334.   230 ALFA=ALFA + R(K,J)*R(K,J1)
  6335.       RQT=ALFA
  6336.       DO 240 K=1,NN
  6337.   240 R(K,J)=R(K,J) - ALFA*TT(K) - BETA*WW(K)
  6338.       DO 250 K=1,NN
  6339.   250 WW(K)=TT(K)
  6340. C
  6341. C     NORMALISE THE NEW VECTOR
  6342. C
  6343.       RQB=ALFA*ALFA + BETA*BETA
  6344.       IF (IMASS.EQ.1) GO TO 265
  6345.       CALL MLTPLY (TT,B,R(1,J),MAXA,NN,NCOLBV,ISTOH,NBLOCK,NMASS)
  6346.       GO TO 275
  6347.   265 DO 270 K=1,NN
  6348.   270 TT(K)=XM(K)*R(K,J)
  6349.   275 BETA=0.
  6350.       DO 280 K=1,NN
  6351.   280 BETA=BETA + R(K,J)*TT(K)
  6352.       RQB=RQB + BETA
  6353.       RQ=RQT/RQB
  6354.       BETA=DSQRT(BETA)
  6355.       GAMA=DSQRT(RQB)
  6356.       DO 285 K=1,NN
  6357.   285 R(K,J)=R(K,J)/BETA
  6358.       IF (IFPR.NE.0) WRITE (IOUT,2020) J,ALFA,BETA,GAMA,RQ
  6359. C
  6360. C     CHECK FOR THE LINEAR INDEPENDENCE OF THE LANCZOS VECTORS
  6361. C
  6362.       DO 290 I=1,NJ
  6363.       IF (DABS(D(NJ) - RQ).LE.DABS(RQ)*RQTOL) GO TO 295
  6364.   290 CONTINUE
  6365.       IF (BETA/GAMA.GT.BETOL) GO TO 300
  6366.   295 DO 298 K=1,NN
  6367.   298 R(K,J)=0.
  6368.       IJ=NLOC(NCEV + J)
  6369.       R(IJ,J)=1.
  6370.       M1=J
  6371.       NJ=NJ + 1
  6372.       GO TO 10
  6373. C
  6374. C     MASS ORTHOGONALISE THE NEW VECTOR TO PREVIOUSLY OBTAINED VECTORS
  6375. C
  6376.   300 REWIND NSHIFT
  6377.       IFLAG=0
  6378.       DO 330 I=1,NJ
  6379.       READ (NSHIFT) (TT(K),K=1,NN)
  6380.       IF (IFLAG.GT.0) GO TO 330
  6381.       AL=0.
  6382.       DO 310 K=1,NN
  6383.   310 AL=AL + R(K,J)*R(K,I)
  6384.       IF (DABS(AL).GT.GSTOL) IFLAG=1
  6385.       DO 320 K=1,NN
  6386.   320 R(K,J)=R(K,J) - AL*TT(K)
  6387.   330 CONTINUE
  6388.       IF (IFLAG.GT.0) GO TO 295
  6389. C
  6390.       DO 340 K=1,NN
  6391.   340 TT(K)=R(K,J)
  6392.       IF (IMASS.EQ.1) GO TO 350
  6393.       CALL MLTPLY (R(1,J),B,TT,MAXA,NN,NCOLBV,ISTOH,NBLOCK,NMASS)
  6394.       GO TO 370
  6395.   350 DO 360 K=1,NN
  6396.   360 R(K,J)=XM(K)*TT(K)
  6397. C
  6398.   370 AL=0.
  6399.       DO 380 K=1,NN
  6400.   380 AL=AL + TT(K)*R(K,J)
  6401.       AL=DSQRT(AL)
  6402.       DO 390 K=1,NN
  6403.       TT(K)=TT(K)/AL
  6404.   390 R(K,J)=R(K,J)/AL
  6405. C
  6406.       NJ=NJ + 1
  6407.       D(NJ)=RQ
  6408.       WRITE (NSHIFT) (TT(K),K=1,NN)
  6409.   400 CONTINUE
  6410. C
  6411. C     ORTHOGONALISE THE RANDOM STARTING VECTOR TO THE OTHERS
  6412. C
  6413.   500 IF (KKK.GT.1 .OR. IINTER.EQ.0) GO TO 600
  6414.       REWIND NSHIFT
  6415.       DO 530 J=1,M2
  6416.       AL=0.
  6417.       DO 510 K=1,NN
  6418.   510 AL=AL + R(K,NQ)*R(K,J)
  6419.       READ (NSHIFT) (TT(K),K=1,NN )
  6420.       DO 520 K=1,NN
  6421.   520 R(K,NQ)=R(K,NQ) - AL*TT(K)
  6422.   530 CONTINUE
  6423. C
  6424.   600 RETURN
  6425. C
  6426.  2000 FORMAT (///,49H STARTING VECTORS ARE GENERATED BY LANCZOS METHOD /
  6427.      1     /,7H VECTOR,59H     ALFA           BETA           GAMA
  6428.      1  RAYL. QUO.     /)
  6429.  2020 FORMAT (I7,4E15.5)
  6430.  2050 FORMAT (21H GRAM-SCHMIDT FACTORS,(/8E15.5))
  6431. C
  6432.       END
  6433. C *CDC* *DECK RAPID
  6434. C *UNI* )FOR,IS N.RAPID, R.RAPID
  6435.       SUBROUTINE RAPID (EIGV,D,TT,W,EVC1,EVC2,RTOLV,R,RR,FREQ,WW,XM,
  6436.      1                  NLOC,NSIT,NN,NQ)
  6437. C
  6438. C     PROGRAM TO STUDY THE CONVERGENCE OF SUBSPACE ITERATIONS AND
  6439. C     INVESTIGATE THE POSSIBILITIES OF ACCELERATING IT
  6440. C
  6441.       IMPLICIT REAL*8 (A-H,O-Z)
  6442.       COMMON /SOL/ NUMNP,NEQ,NWK,NWM,NWC,NUMEST,MIDEST,MAXEST,NSTE,MAL
  6443.       COMMON /EIGIF/ COFQ,RBMSH,IESTYP,NFREQ,NMODE,IFPR,IRBM
  6444.       COMMON /SCRAP/ SHIFT,RLQ1,NLQ,NITE,NSTEP,JR,ICONV,NCEV,NP,NQA,IFSS
  6445.       COMMON /EL/ IND,ICOUNT,NPAR(20),NUMEG,NEGL,NEGNL,IMASS,IDAMP,ISTAT
  6446.      1            ,NDOF,KLIN,IEIG,IMASSN,IDAMPN
  6447.       COMMON /DIM/ N0,N1,N2,N3,N4,N5,N6,N7,N8,N9,N10,N11,N12,N13,N14,N15
  6448.       COMMON /FREQIF/ ISTOH,N1A,N1B,N1C
  6449.       COMMON /ADDB/ NEQL,NEQR,MLA,NBLOCK
  6450.       COMMON /ITELMT/ NSMAX,NITEM,NITEMM,NOVM
  6451.       COMMON /FAST/ SHIFT1,SHIFT2,IOVER,IRPC,NSTV,IINTER,JROLD,NSCH1,
  6452.      1              IACCN,NJUNK,ISVTYP
  6453.       COMMON /DIMSSP/ M3,M4,M5,M6,M7,M8,M9
  6454.       COMMON /TAPES/ IIN,IOUT
  6455.       COMMON /TAPEIG/ SCALE,NSTIF,NT,NMASS,NRED,NSHIFT,NOVER
  6456.       COMMON /TOLS/ RTOL,ALPHA,CTOL,ANORM,RCTOL
  6457. C
  6458.       REAL A
  6459.       COMMON A(1)
  6460.       INTEGER IA(1)
  6461.       EQUIVALENCE (A(1),IA(1))
  6462. C
  6463.       DIMENSION EIGV(1),D(1),TT(1),W(1),EVC1(1),EVC2(1),RTOLV(1),R(NN,1)
  6464.      1         ,RR(NN,1),FREQ(1),WW(1),XM(1),NLOC(1),NSIT(1)
  6465.       DATA NFAC/0/, NGS/0/
  6466. C
  6467.       RMUS=SHIFT
  6468.       SHIFTO=SHIFT
  6469.       RITOL=RTOL
  6470.       IF (IINTER.GT.0) RITOL=RCTOL
  6471.       NP=NFREQ - NCEV
  6472.       IF (NQ.LT.NP) RITOL=RCTOL
  6473.       IVSHF=0
  6474. C
  6475.       NEIG=0
  6476.       DO 580 I=1,NQ
  6477.       IF (RTOLV(I).GT.RITOL) GO TO 590
  6478.       NEIG=I
  6479.       IF (NLOC(NCEV + I).GT.0) GO TO 580
  6480.       NLOC(I + NCEV)=NITE - NSIT(I)
  6481.   580 CONTINUE
  6482. C
  6483.   590 IF (NEIG.EQ.0) GO TO 600
  6484.       IF (EIGV(NEIG).GE.SHIFT2) GO TO 595
  6485.       IF (IINTER.GT.0) GO TO 600
  6486.       IF (NCEV + NEIG.LT.NFREQ) GO TO 600
  6487.   595 NFREQ=NCEV + NEIG
  6488.       ICONV=1
  6489.       JR=0
  6490.       IF (IFPR.NE.0) WRITE (IOUT,2060) RTOL,NITE,NFAC,NGS
  6491.       GO TO 910
  6492. C
  6493.   600 IF (NITE.LT.NITEMM) GO TO 700
  6494.       WRITE (IOUT,2070)
  6495.       ICONV=2
  6496.       IFSS=0
  6497.       NFREQ=NCEV + NEIG
  6498.       JR=0
  6499.       GO TO 910
  6500. C
  6501. C     CALCULATE RATE OF CONVERGENCE
  6502. C
  6503.   700 NC=NFREQ - NCEV
  6504.       IF (NC.GT.NQ .OR. IINTER.GT.0) NC=NQ
  6505.       IF (NC.GT.0) GO TO 705
  6506.       WRITE (IOUT,3010)
  6507.       STOP
  6508.   705 IF (IACCN.EQ.0) GO TO 1200
  6509.       IF (RITOL.EQ.RCTOL) GO TO 720
  6510.       NEIG=0
  6511.       DO 710 I=1,NQ
  6512.       IF (RTOLV(I).GT.RCTOL) GO TO 720
  6513.       NEIG=I
  6514.   710 CONTINUE
  6515.   720 IF (NEIG.LT.NQ) GO TO 730
  6516.       IVSHF=1
  6517.       GO TO 910
  6518. C
  6519.   730 IF (NITE.LE.NSTEP - 2) GO TO 910
  6520.       DO 740 I=1,NC
  6521.       TEMP=D(I) - EVC2(I)
  6522.       EVC2(I)=0.
  6523.       IF (DABS(TEMP).GT.D(I)*1.D-10) EVC2(I)=(EIGV(I) - D(I))/TEMP
  6524.   740 CONTINUE
  6525.       IF (IFPR.GT.1)
  6526.      1 WRITE (IOUT,2300) (EVC2(I),I=1,NC)
  6527.       IF (NITE.EQ.NSTEP - 1) GO TO 910
  6528.       IF (IFPR.GT.1)
  6529.      1 WRITE (IOUT,2350) (EVC1(I),I=1,NC)
  6530. C
  6531. C     ESTABLISH LAMBDA (Q + 1) FROM FAIRLY CONVERGED ROOTS
  6532. C
  6533.       DO 750 I=1,NC
  6534.       TT(I)=EIGV(NQ)*2.**30
  6535.       IF (RTOLV(I).GT.1.D-3 .OR. RTOLV(I).LT.RCTOL) GO TO 750
  6536.       IF (EVC2(I).GT.0.99 .OR. EVC2(I).LT.1.D-5) GO TO 750
  6537.       TEMP=EVC2(I) - EVC1(I)
  6538.       TEMP=DABS(TEMP/EVC2(I))
  6539.       IF (TEMP.GT.CTOL) GO TO 750
  6540.       TT(I)=(EIGV(I) - RMUS)/DSQRT(EVC2(I)) + RMUS
  6541.       IF (TT(I).LT.RMUS) GO TO 750
  6542.       IF (RTOLV(I).GT.RCTOL) NLOC(NCEV + I)=-1
  6543.   750 CONTINUE
  6544.       IF (IFPR.GT.1)
  6545.      1 WRITE (IOUT,2400) (TT(I),I=1,NC)
  6546. C
  6547.       MLQ=0
  6548.       TLQ=0.
  6549.       DO 760 I=1,NC
  6550.       IF (TT(I).GE.EIGV(NQ)*2.**30) GO TO 760
  6551.       IF (TT(I).LT.RMUS) GO TO 760
  6552.       MLQ=MLQ + 1
  6553.       TLQ=TLQ + TT(I)
  6554.   760 CONTINUE
  6555. C
  6556.       IF (MLQ.NE.0)
  6557.      1 RLQ1=(NLQ*RLQ1 + TLQ)/(NLQ + MLQ)
  6558.       NLQ=MLQ + NLQ
  6559.       IF (IFPR.NE.0)
  6560.      1 WRITE (IOUT,2500) RLQ1,NLQ
  6561.       IF (RLQ1.GT.0.) GO TO 762
  6562.       IF (NITE.EQ.NITEMM - 1 .AND. NEIG.GT.0) IVSHF=1
  6563.       GO TO 910
  6564. C
  6565. C     ESTABLISH SHIFT  FROM THE SET OF VECTORS CONVERGED TO RTOL SO FAR
  6566. C
  6567.   762 J=1
  6568.       DO 763 I=1,NC
  6569.       IF (EIGV(I).GT.RMUS) GO TO 765
  6570.       J=J + 1
  6571.   763 CONTINUE
  6572. C
  6573.   765 IF (J.GT.NC) J=NC
  6574.       NR=J
  6575.       DO 770 I=J,NC
  6576.       IF (RTOLV(I).GT.RCTOL) GO TO 773
  6577.       NR=NR + 1
  6578.   770 CONTINUE
  6579. C
  6580.   773 IF (NR.GT.NC) NR=NC
  6581.       K=NR
  6582.       BAND=EIGV(1) + (RLQ1 - EIGV(1))/3
  6583. C
  6584.   775 NR=NR - 1
  6585.       IF (NR.LE.J) GO TO 778
  6586.       SHIFT=0.5*(EIGV(NR) + EIGV(NR - 1))
  6587.       IF (SHIFT.LT.1.01*EIGV(NR - 1)) GO TO 775
  6588.       IF (SHIFT.GT.0.99*EIGV(NR)) GO TO 775
  6589.       IF (SHIFT.GT.BAND) GO TO 775
  6590.       J=NR
  6591.       GO TO 790
  6592. C
  6593. C     SPECIAL CASE - (1) SHIFT TO THE LEFT OF THE FIRST EIGENVALUE
  6594. C
  6595.   778 IF (J.GT.1) GO TO 788
  6596.       IF (NCEV.GT.0) GO TO 780
  6597.       SHIFT=0.5*EIGV(1)
  6598.       IF (SHIFT.LE.RMUS) GO TO 910
  6599.       J=1
  6600.       GO TO 790
  6601. C
  6602. C     SPECIAL CASE - (2) SHIFT BETWEEN EIGENVALUES IN BACK-UP STORE
  6603. C
  6604.   780 NR=NCEV + 2
  6605.       FREQ(NCEV + 1)=EIGV(1)
  6606.       IF (RTOLV(1).GT.RCTOL) NR=NR - 1
  6607.   785 NR=NR - 1
  6608.       IF (NR.LT.1) GO TO 910
  6609.       SHIFT=0.5*FREQ(NR)
  6610.       IF (NR.GT.1) SHIFT=SHIFT + 0.5*FREQ(NR - 1)
  6611.       IF (SHIFT.LE.RMUS) GO TO 910
  6612.       IF (SHIFT.LT.1.01*FREQ(NR - 1)) GO TO 785
  6613.       IF (SHIFT.GT.0.99*FREQ(NR)) GO TO 785
  6614.       J=NR - NCEV
  6615.       GO TO 790
  6616. C
  6617. C     IF THE MAXIMUM POSSIBLE SHIFT WITHIN THE CURRENT BASIS HAS BEEN
  6618. C     REACHED, CONSIDER EXPANSION OF THE BASIS FOR ACCELERATION
  6619. C
  6620.   788 TEMP=0.5*(EIGV(K) + EIGV(K - 1))
  6621.       IF (TEMP.GT.BAND) IVSHF=1
  6622.       GO TO 910
  6623. C
  6624. C     CHECK HOW MANY MORE ITERATIONS WOULD BE REQUIRED WITH THIS SHIFT
  6625. C
  6626.   790 SI=0.
  6627.       II=NC
  6628.       DO 800 I=K,NC
  6629.       IF (EIGV(I).GE.RLQ1) GO TO 800
  6630.       IF (RTOLV(I).LE.RITOL .OR. RTOLV(I).GT.0.01) GO TO 800
  6631.       TOLI=RITOL/RTOLV(I)
  6632.       DI=((EIGV(I) - RMUS)/(RLQ1 - RMUS))**2
  6633.       ST=DLOG10(TOLI)/DLOG10(DI)
  6634.       DP=((EIGV(I) - SHIFT)/(RLQ1 - SHIFT))**2
  6635.       STP=DLOG10(TOLI)/DLOG10(DP)
  6636.       SII=ST - STP
  6637.       IF (SII.LE.SI) GO TO 800
  6638.       SI=SII
  6639.       II=I
  6640.   800 CONTINUE
  6641.       I=II
  6642.       TOLI=RITOL/RTOLV(I)
  6643.       DI=((EIGV(I) - RMUS)/(RLQ1 - RMUS))**2
  6644.       ST=DLOG10(TOLI)/DLOG10(DI)
  6645.       DP=((EIGV(I) - SHIFT)/(RLQ1 - SHIFT))**2
  6646.       STP=DLOG10(TOLI)/DLOG10(DP)
  6647. C
  6648. C     CHECK TO SEE WHETHER IT IS WORTH SHIFTING
  6649. C
  6650.       IF (SI.GT.3.) GO TO 820
  6651.       NOFAC=0
  6652.       NOSI=0
  6653.       IF (K.LE.1) GO TO 850
  6654.       TEMP=0.5*(EIGV(K) + EIGV(K - 1))
  6655.       IF (TEMP.LT.BAND) GO TO 850
  6656.       IVSHF=1
  6657.       GO TO 910
  6658. C
  6659.   820 MA=NWK/NN + 1
  6660.       NOFAC=(MA*MA + 3*MA)/2
  6661.       IF (IMASS.EQ.2) NOFAC=NOFAC + MA
  6662.       NP=NQ - JR
  6663.       NOSI=(2*MA*NP + 2*NP*NP + 3*NP + 2*NP*JR + 2*NQ*NCEV)*SI
  6664.       IF (IMASS.EQ.2) NOSI=NOSI + 2*MA*NP*SI
  6665.       NOSI=NOSI + 18*NP*NP*NP*SI/NN
  6666.       IF (NOFAC.GE.ALPHA*NOSI) GO TO 850
  6667. C
  6668. C      SHIFT IS GOOD. PRINT ALL INFORMATION. SHIFT K MATRIX.
  6669. C
  6670.       IF (IFPR.NE.0) WRITE (IOUT,2600)
  6671.       NSTEP=4 + NITE
  6672.       RMUS=SHIFT
  6673.       NFAC=NFAC + 1
  6674. C
  6675.       CALL BANDET (A(N2),A(M3),A(M4),TT,W,A(N1),A(N1A),A(N1B),NN,
  6676.      1             ISTOH,NBLOCK,SHIFT,NSCH,IMASS,FDETA,IDETA,1)
  6677. C
  6678. C     PERFORM STURM SEQUENCE CHECK AT THE CURRENT SHIFT.
  6679. C
  6680.       IF (IFPR.NE.0) WRITE (IOUT,2650) NSCH
  6681.       IF (NSCH.EQ.NSCH1 + NCEV + J - 1) GO TO 855
  6682.       WRITE (IOUT,2680)
  6683.       IFSS=0
  6684.       GO TO 595
  6685. C
  6686.   850 IF (IFPR.NE.0) WRITE (IOUT,2690)
  6687.   855 IF (IFPR.EQ.0) GO TO 910
  6688.       J=J + NCEV + NSCH1
  6689.       I=I + NCEV + NSCH1
  6690.       WRITE (IOUT,2700) J,I,SHIFT
  6691.       WRITE (IOUT,2800) TOLI,DI,DP,ST,STP,NOFAC,NOSI
  6692. C
  6693.   910 SHIFT=RMUS
  6694.       IF (IACCN.EQ.0) GO TO 1200
  6695. C
  6696. C     REORTHOGONALISE W.R.T. CONVERGED VECTORS IN THE CRITICAL BAND
  6697. C
  6698.       IF (NCEV.EQ.0) GO TO 985
  6699.       REWIND NT
  6700.       BAND=DABS(EIGV(NQ) - SHIFT)
  6701.       JJ=JR + 1
  6702.       NORTHO=0
  6703.       DO 980 J=1,NCEV
  6704.       IF (NJUNK.GT.0) GO TO 930
  6705.       RT=DABS(FREQ(J) - SHIFT)
  6706.       IF (RT.LE.BAND) GO TO 930
  6707.       READ (NT)
  6708.       GO TO 980
  6709. C
  6710.   930 READ (NT) (TT(I),I=1,NN),(WW(I),I=1,NN)
  6711.       NORTHO=NORTHO + 1
  6712.       DO 970 K=JJ,NQA
  6713.       AL=0.
  6714.       DO 940 I=1,NN
  6715.   940 AL=AL + TT(I)*RR(I,K)
  6716.       DO 950 I=1,NN
  6717.   950 RR(I,K)=RR(I,K) - AL*WW(I)
  6718.   970 CONTINUE
  6719.   980 CONTINUE
  6720.       IF (IFPR.NE.0) WRITE (IOUT,2850) NORTHO
  6721.       NGS=NGS + NORTHO
  6722. C
  6723. C     OVERRELAX ITERATION VECTOR IF LINEAR CONVERGENCE HAS BEEN OBTAINED
  6724. C
  6725.   985 IF (IOVER.NE.1) GO TO 1000
  6726.       IF (NITE.GT.NSTEP-4 .AND. NITE.LE.NSTEP-1) GO TO 1000
  6727.       REWIND NOVER
  6728.       IF (NJUNK.EQ.0) GO TO 987
  6729.       DO 986 J=1,NJUNK
  6730.   986 READ (NOVER)
  6731. C
  6732.   987 JJ=JROLD + 1
  6733.       DO 995 J=JJ,NC
  6734.       IF (NLOC(NCEV + J).EQ.-1) GO TO 988
  6735.       READ (NOVER)
  6736.       GO TO 995
  6737. C
  6738.   988 NLOC(NCEV + J)=0
  6739.       READ (NOVER) (TT(K),K=1,NN)
  6740.       RC=(EIGV(J) - SHIFTO)/(RLQ1 - SHIFTO)
  6741.       RA=1./(1. - RC)
  6742.       DO 990 K=1,NN
  6743.   990 R(K,J)=TT(K) + (R(K,J) - TT(K))*RA
  6744.       K=J + NJUNK
  6745.       IF (IFPR.NE.0) WRITE (IOUT,2820) K
  6746.   995 CONTINUE
  6747. C
  6748. C     IF ALLOWED, THROW SOME VECTORS FROM THE CURRENT BASIS OUT
  6749. C
  6750.  1000 IF (IVSHF.EQ.0) GO TO 1200
  6751.       K=NEIG
  6752.       IF (JR.GT.0) K=JR
  6753.       IF (IINTER.GT.0) GO TO 1015
  6754. C
  6755.       NP=NFREQ - NCEV
  6756.       NC=MIN0(2*NP,NP + 8)
  6757.       IF (NQ.LT.NC) GO TO 1010
  6758.       GO TO 1200
  6759. C
  6760.  1010 NC=NQ/2
  6761.       IF (NQ.GT.16) NC=NQ - 8
  6762.       IF (NP.LT.NC + K) K=NP - NC
  6763.       IF (NCEV+K+NQ.GT.NN) K=NN - (NCEV + NQ)
  6764.  1015 IF (K.EQ.0) GO TO 1200
  6765.       NLQ=0
  6766.       RLQ1=0.
  6767.       NSTEP=NITE + 4
  6768.       NITEMM=NITE + NITEM
  6769.       IF (NCEV.EQ.0) REWIND NT
  6770.       DO 1050 J=1,K
  6771.       FREQ(NCEV + J)=EIGV(J)
  6772.       DO 1030 I=1,NN
  6773.  1030 TT(I)=(EIGV(J) - SHIFT)*R(I,J)
  6774. C
  6775.       CALL BANDET (A(N2),A(M3),A(M4),TT,W,A(N1),A(N1A),A(N1B),NN,
  6776.      1             ISTOH,NBLOCK,SHIFT,NSCH,IMASS,FDETA,IDETA,2)
  6777. C
  6778.       IF (IMASS.EQ.1) GO TO 1035
  6779.       CALL MLTPLY (R(1,J),A(M3),TT,A(N1),NN,A(N1A),ISTOH,NBLOCK,NMASS)
  6780.       GO TO 1040
  6781.  1035 DO 1038 I=1,NN
  6782.  1038 R(I,J)=XM(I)*TT(I)
  6783.  1040 AL=0.
  6784.       DO 1042 I=1,NN
  6785.  1042 AL=AL + TT(I)*R(I,J)
  6786.       AL=DSQRT(AL)
  6787.       DO 1045 I=1,NN
  6788.       TT(I)=TT(I)/AL
  6789.  1045 R(I,J)=R(I,J)/AL
  6790.       WRITE (NT) (TT(I),I=1,NN),(R(I,J),I=1,NN)
  6791.  1050 CONTINUE
  6792. C
  6793. C     SHIFT EIGENPAIRS IN THE CURRENT BASIS
  6794. C
  6795.       IF (IFPR.NE.0) WRITE (IOUT,2900) NCEV,NP,K
  6796.       NCEV=NCEV + K
  6797.       IF (IINTER.EQ.0) GO TO 1060
  6798.       IF (NCEV.LE.50) GO TO 1052
  6799.       WRITE (IOUT,3000)
  6800.       IVSHF=0
  6801.       NCEV=NCEV - K
  6802.       GO TO 595
  6803. C
  6804. C     SPECIAL CASE - INTERMEDIATE EIGENVALUES SOLUTION ONLY
  6805. C
  6806.  1052 IF (NJUNK.EQ.0) GO TO 1060
  6807.       NR=NCEV + 1
  6808.  1055 NR=NR - 1
  6809.       IF (NR.LT.2) GO TO 1060
  6810.       RMUS=0.5*(FREQ(NR) + FREQ(NR - 1))
  6811.       IF (RMUS.LE.SHIFT) GO TO 1060
  6812.       IF (RMUS.LT.1.01*FREQ(NR - 1)) GO TO 1055
  6813.       IF (RMUS.GT.0.99*FREQ(NR)) GO TO 1055
  6814.       NFAC=NFAC + 1
  6815.       SHIFT=RMUS
  6816.       IF (IFPR.NE.0) WRITE (IOUT,2920) SHIFT
  6817. C
  6818.       CALL BANDET (A(N2),A(M3),A(M4),TT,W,A(N1),A(N1A),A(N1B),NN,
  6819.      1             ISTOH,NBLOCK,SHIFT,NSCH,IMASS,FDETA,IDETA,1)
  6820. C
  6821.       IF (IFPR.NE.0) WRITE (IOUT,2650) NSCH
  6822.       IF (NSCH.EQ.NSCH1 + NR - 1) GO TO 1060
  6823.       WRITE (IOUT,2680)
  6824.       IVSHF=0
  6825.       NCEV=NCEV - K
  6826.       IFSS=0
  6827.       GO TO 595
  6828. C
  6829.  1060 NP=NQ - K
  6830.       IF (NP.EQ.0) GO TO 1090
  6831.       JR=JR - K
  6832.       IF (JR.LT.0) JR=0
  6833.       DO 1080 N=1,NP
  6834.       J=N + K
  6835.       EIGV(N)=EIGV(J)
  6836.       NSIT(N)=NSIT(J)
  6837.       DO 1070 I=1,NN
  6838.  1070 R(I,N)=R(I,J)
  6839.  1080 CONTINUE
  6840. C
  6841. C     ESTABLISH NEW STARTING VECTORS AND ORTHOGONALISE THEM
  6842. C
  6843.  1090 NP=NP + 1
  6844.       DO 1092 J=NP,NQ
  6845.       EIGV(J)=0.
  6846.       NSIT(J)=NITE
  6847.  1092 CONTINUE
  6848. C
  6849.       DO 1097 J=NP,NQ
  6850.       IF (NCEV + J.GT.NSTV) GO TO 1098
  6851.       READ (NSHIFT) (TT(I),I=1,NN)
  6852.       NLOC(NCEV + J)=0
  6853.       IF (IMASS.EQ.1) GO TO 1093
  6854.       CALL MLTPLY (R(1,J),A(M3),TT,A(N1),NN,A(N1A),ISTOH,NBLOCK,NMASS)
  6855.       GO TO 1097
  6856.  1093 DO 1095 I=1,NN
  6857.  1095 R(I,J)=XM(I)*TT(I)
  6858.  1097 CONTINUE
  6859.       GO TO 1115
  6860. C
  6861.  1098 K=J
  6862.       DO 1105 J=K,NQ
  6863.       DO 1100 I=1,NN
  6864.  1100 R(I,J)=0.
  6865.       IJ=NLOC(NCEV + NJUNK + J)
  6866.       R(IJ,J)=1.
  6867.       IF (ISVTYP.GT.0) GO TO 1107
  6868.  1105 CONTINUE
  6869.       GO TO 1109
  6870. C
  6871.  1107 M1=NJUNK + J
  6872.       CALL STARTV (A(N2),A(M3),A(M4),TT,W,WW,RR,A(N1),A(N1A),A(N1B),
  6873.      1             NLOC,D,M1,NQA,NN,ISTOH,NBLOCK,2)
  6874. C
  6875.  1109 DO 1110 J=K,NQ
  6876.  1110 NLOC(NCEV + J)=0
  6877. C
  6878.  1115 REWIND NT
  6879.       DO 1150 J=1,NCEV
  6880.       READ (NT) (TT(I),I=1,NN),(WW(I),I=1,NN)
  6881.       DO 1140 K=NP,NQ
  6882.       AL=0.
  6883.       DO 1120 I=1,NN
  6884.  1120 AL=AL + TT(I)*R(I,K)
  6885.       DO 1130 I=1,NN
  6886.  1130 R(I,K)=R(I,K) - AL*WW(I)
  6887.  1140 CONTINUE
  6888.  1150 CONTINUE
  6889. C
  6890. C     WRITE TRIAL VECTORS ONTO TAPE NT FOR FUTURE OVERRELAXATION
  6891. C
  6892.  1200 IF (NBLOCK.EQ.1 .AND. (IACCN.EQ.0.OR.NITE.LT.NSTEP-1)) GO TO 1300
  6893.       JROLD=JR
  6894.       REWIND NOVER
  6895.       IF (NJUNK.EQ.0) GO TO 1204
  6896.       DO 1202 J=1,NJUNK
  6897.  1202 WRITE (NOVER) (RR(K,J),K=1,NN)
  6898.  1204 JJ=JR + 1
  6899.       DO 1205 J=JJ,NQ
  6900.  1205 WRITE (NOVER) (R(K,J),K=1,NN)
  6901.       IF (NBLOCK.EQ.1) GO TO 1300
  6902. C
  6903. C     FOR OUT-OF-CORE SOLUTION POSITION TAPE NT
  6904. C
  6905.       REWIND NOVER
  6906. C
  6907.  1300 RETURN
  6908. C
  6909. C
  6910.  2060 FORMAT (///,30H CONVERGENCE REACHED FOR RTOL  E10.4,2X,
  6911.      1        14H  AT ITERATION,I4 /,
  6912.      2        37H NUMBER OF FACTORIZATIONS PERFORMED =,I5/,
  6913.      3        44H NUMBER OF GRAM-SCHMIDT ORTHOGONALIZATIONS =,I6//)
  6914.  2070 FORMAT (1H1,51H*** NO CONVERGENCE IN MAXIMUM NUMBER OF ITERATIONS
  6915.      1             9HPERMITTED/35H WE ACCEPT CURRENT ITERATION VALUES/
  6916.      2            42H THE STURM SEQUENCE CHECK IS NOT PERFORMED  )
  6917.  2300 FORMAT (///44H RATE OF CONVERGENCE ESTIMATES,RI(I + 1) ARE,/(6E15.
  6918.      1             5/))
  6919.  2350 FORMAT (///44H RATE OF CONVERGENCE ESTIMATES,RI(I    ) ARE,/(6E15.
  6920.      1             5/))
  6921.  2400 FORMAT (///31H ESTIMATES OF LAMBDA(Q + 1) ARE,/,(6E15.5/))
  6922.  2500 FORMAT (///36H AVERAGE ESTIMATE OF LAMDA(Q+1) IS =,E20.10,    /
  6923.      1            9H BASED ON,I5,10H ESTIMATES   )
  6924.  2600 FORMAT (//51H NOFAC IS LESS THAN ALPHA*NOSI AND SHIFT IS APPLIED/)
  6925.  2650 FORMAT (//46H STURM SEQUENCE CHECK PERFORMED AT THIS SHIFT. /
  6926.      1          60H ESTIMATED NUMBER OF EIGENVALUES TO THE LEFT OF THIS
  6927.      2SHIFT =,I5/)
  6928.  2680 FORMAT (14H CHECK FAILED. /
  6929.      1        81H ESTIMATED NUMBER OF EIGENVALUES IS MORE THAN THE NUMBE
  6930.      2R OF COMPUTED EIGENVALUES. /55H REPEAT SOLUTION WITH A LARGER NUMB
  6931.      3ER OF TRIAL VECTORS.   /35H ALSO USE A SMALLER VALUE FOR RTOL //)
  6932.  2690 FORMAT (//52H SHIFT CALCULATED DOES NOT SATISFY SHIFTING CRITERIA)
  6933.  2700 FORMAT (//,31H SHIFT ESTIMATED TO THE LEFT OF,I3,15HTH EIGENVALUE
  6934.      1,10H BASED ON ,I3,18HTH EIGENVALUE IS =,E15.5/)
  6935.  2800 FORMAT (///11X,4HTOLI,14X,1HD,13X,2HDP,14X,1HT,13X,2HTP,4X,5HNOFAC
  6936.      1       ,5X,4HNOSI//,5E15.5,2I9)
  6937.  2820 FORMAT (42H OVER-RELAXATION IS PERFORMED FOR VECTOR =,I4)
  6938.  2850 FORMAT (//53H GRAM-SCHMIDT ORTHOGONALISATION OF CURRENT TRIAL VECT
  6939.      1 36HORS IS PERFORMED W.R.T. THE PREVIOUS,I4,13H EIGENVECTORS  )
  6940.  2900 FORMAT (//35H EIGENVECTORS ARE TAKEN OUT        , /
  6941.      1          45H NUMBER OF EIGENVECTORS ALREADY REMOVED     =,I5,/,
  6942.      2          44H NUMBER OF EIGENPAIRS YET TO BE CALCULATED =,I5/,
  6943.      3          49H NUMBER OF EIGENVECTORS CURRENTLY BEING REMOVED =,I5)
  6944.  2920 FORMAT (//,81H IN ORDER TO MOVE THE POLE OF ATTRACTION TO THE RIGH
  6945.      1T, A SHIFT  IS ALSO PERFORMED /,16H SHIFT APPLIED =,E15.5)
  6946. C
  6947.  3000 FORMAT (1H1,///,14H *** ERROR ***,/,
  6948.      1        55H STORAGE OVERFLOW OCCURED.  IN A GIVEN INTERVAL ONLY A
  6949.      2        47H MAXIMUM OF FIFTY EIGENVALUES CAN BE CALCULATED  )
  6950.  3010 FORMAT (1H1,//45H *** STOP ***, ERROR OCCURED IN EIGENSOLUTION,/,
  6951.      159H INCREASE NUMBER OF VECTORS USED (NQ) IN SUBSPACE ITERATION  )
  6952. C
  6953.       END
  6954. C *CDC* *DECK SCHECK
  6955. C *UNI* )FOR,IS N.SCHECK, R.SCHECK
  6956.       SUBROUTINE SCHECK (EIGV,RTOLV,BUP,BLO,BUPC,NEIV,NC,NEI,RTOL,SHIFT)
  6957. C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
  6958. C .                                                                   .
  6959. C .   P R O G R A M                                                   .
  6960. C .        TO EVALUATE SHIFT FOR STURM SEQUENCE CHECK                 .
  6961. C .                                                                   .
  6962. C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
  6963. C
  6964.       IMPLICIT REAL*8 (A-H,O-Z)
  6965.       COMMON /TAPES/ IIN,IOUT
  6966.       COMMON /SCRAP/ RMUSS,RLQ1,NLQ,NITE,NSTEP,JR,ICONV,NCEV,NP,NQ,IFSS
  6967. C
  6968.       DIMENSION EIGV(1),RTOLV(1),BUP(1),BLO(1),BUPC(1),NEIV(1)
  6969. C
  6970.       FTOL=0.001
  6971. C
  6972.       DO 100 I=1,NC
  6973.       BUP(I)=EIGV(I)*(1. + FTOL)
  6974.   100 BLO(I)=EIGV(I)*(1. - FTOL)
  6975. C
  6976.       NROOT=NCEV
  6977.       II=NC - NCEV - 1
  6978.       DO 120 I=1,II
  6979.       IF (RTOLV(I).GT.RTOL) GO TO 130
  6980.       IF (BUP(I).LE.BLO(I + 1)) NROOT=NCEV + I
  6981.   120 CONTINUE
  6982.       IF (RTOLV(NC - NCEV).LE.RTOL) NROOT=NC
  6983.   130 IF (NROOT.GE.1) GO TO 200
  6984.       WRITE (IOUT,1010)
  6985.       STOP
  6986. C
  6987. C      FIND UPPER BOUNDS ON EIGENVALUE CLUSTERS
  6988. C
  6989.  200  DO 240 I=1,NROOT
  6990.  240  NEIV(I)=1
  6991.       IF (NROOT.NE.1) GO TO 260
  6992.       BUPC(1)=BUP(1)
  6993.       LM=1
  6994.       L=1
  6995.       I=2
  6996.       IF (NC.EQ.1) GO TO 300
  6997.       GO TO 295
  6998.  260  L=1
  6999.       I=2
  7000.  270  IF (BUP(I-1).LE.BLO(I)) GO TO 280
  7001.       NEIV(L)=NEIV(L)+1
  7002.       I=I+1
  7003.       IF (I.LE.NROOT) GO TO 270
  7004.  280  BUPC(L)=BUP(I-1)
  7005.       IF (I.GT.NROOT) GO TO 290
  7006.       L=L+1
  7007.       I=I + 1
  7008.       IF (I.LE.NROOT) GO TO 270
  7009.       BUPC(L)=BUP(I-1)
  7010.  290  LM=L
  7011.       IF (NROOT.EQ.NC) GO TO 300
  7012.  295  IF (BUP(I-1).LE.BLO(I)) GO TO 300
  7013.       IF (I.GT.NCEV .AND. RTOLV(I - NCEV).GT.RTOL) GO TO 300
  7014.       BUPC(L)=BUP(I)
  7015.       NEIV(L)=NEIV(L)+1
  7016.       NROOT=NROOT+1
  7017.       IF (NROOT.EQ.NC) GO TO 300
  7018.       I=I+1
  7019.       GO TO 295
  7020. C
  7021. C      FIND SHIFT
  7022. C
  7023.   300 WRITE (IOUT,1020)
  7024.       WRITE (IOUT,1005) (BUPC(I),I=1,LM)
  7025.       WRITE (IOUT,1030)
  7026.       WRITE (IOUT,1006) (NEIV(I),I=1,LM)
  7027.       LL=LM-1
  7028.       IF (LM.EQ.1) GO TO 310
  7029.  330  DO 320 I=1,LL
  7030.  320  NEIV(L)=NEIV(L)+NEIV(I)
  7031.       L=L-1
  7032.       LL=LL-1
  7033.       IF (L.NE.1) GO TO 330
  7034.  310  WRITE (IOUT,1040)
  7035.       WRITE (IOUT,1006) (NEIV(I),I=1,LM)
  7036.       L=0
  7037.       DO 340 I=1,LM
  7038.       L=L+1
  7039.       IF (NEIV(I).GE.NROOT) GO TO 350
  7040.  340  CONTINUE
  7041.  350  SHIFT=BUPC(L)
  7042.       NEI=NEIV(L)
  7043. C
  7044.       RETURN
  7045. C
  7046.  1005 FORMAT (1H0,6E22.14)
  7047.  1006 FORMAT (1H0,6I22)
  7048.  1010 FORMAT (37H0***ERROR   SOLUTION STOP IN *SCHECK*, / 12X,
  7049.      1        21HNO EIGENVALUES FOUND., / 1X)
  7050.  1020 FORMAT (///,37H UPPER BOUNDS ON EIGENVALUE CLUSTERS  )
  7051.  1030 FORMAT (34H0NO OF EIGENVALUES IN EACH CLUSTER  )
  7052.  1040 FORMAT (42H0NO OF EIGENVALUES LESS THAN UPPER BOUNDS  )
  7053.       END
  7054. C *CDC* *DECK JACOBI
  7055. C *UNI* )FOR,IS N.JACOBI, R.JACOBI
  7056.       SUBROUTINE JACOBI (A,B,X,EIGV,D,N,NWA,RTOL,SHIFT,NSMAX,IFPR)
  7057. C .....................................................................
  7058. C .                                                                   .
  7059. C .   P R O G R A M                                                   .
  7060. C .        TO SOLVE THE GENERALIZED EIGENPROBLEM USING THE            .
  7061. C .        GENERALIZED JACOBI ITERATION                               .
  7062. C .                                                                   .
  7063. C . - - INPUT VARIABLES - -                                           .
  7064. C .        A(NWA)    = STIFFNESS MATRIX (ASSUMED POSITIVE DEFINITE)   .
  7065. C .              (UPPER TRIANGULAR PART STORED ROWWISE FROM DIAGONAL) .
  7066. C .        B(NWA)    = MASS MATRIX (ASSUMED POSITIVE DEFINITE)        .
  7067. C .              (UPPER TRIANGULAR PART STORED ROWWISE FROM DIAGONAL) .
  7068. C .        X(N,N)    = MATRIX STORING EIGENVECTORS ON SOLUTION EXIT   .
  7069. C .        EIGV(N)   = VECTOR STORING EIGENVALUES ON SOLUTION EXIT    .
  7070. C .        D(N)      = WORKING VECTOR                                 .
  7071. C .        N         = ORDER OF MATRICES A AND B                      .
  7072. C .        RTOL      = CONVERGENCE TOLERANCE (USUALLY SET TO 10.**-12).
  7073. C .        NSMAX     = MAXIMUM NUMBER OF SWEEPS ALLOWED               .
  7074. C .                                  (USUALLY SET TO 15)              .
  7075. C .        IFPR      = FLAG FOR PRINTING DURING ITERATION             .
  7076. C .            EQ.0    NO PRINTING                                    .
  7077. C .            EQ.1    INTERMEDIATE RESULTS ARE PRINTED               .
  7078. C .        IOUT      = OUTPUT DEVICE NUMBER                           .
  7079. C .                                                                   .
  7080. C . - - OUTPUT - -                                                    .
  7081. C .        A(NWA)    = DIAGONALIZED STIFFNESS MATRIX                  .
  7082. C .        B(NWA)    = DIGONALIZED MASS MATRIX                        .
  7083. C .        X(N,N)    = EIGENVECTORS STORED COLUMNWISE                 .
  7084. C .        EIGV(N)   = EIGENVALUES                                    .
  7085. C .                                                                   .
  7086. C .....................................................................
  7087. C .   ABS(X)=DABS(X)                                                  .
  7088. C .   SQRT(X)=DSQRT(X)                                                .
  7089. C .        THIS PROGRAM IS USED IN SINGLE PRECISION ARITHMETIC ON     .
  7090. C .        CDC EQUIPMENT AND DOUBLE PRECISION ARITHMETIC ON IBM       .
  7091. C .        OR UNIVAC MACHINES .ACTIVATE,DEACTIVATE OR ADJUST ABOVE    .
  7092. C .        CARDS FOR SINGLE OR DOUBLE PRECISION ARITHMETIC            .
  7093. C .....................................................................
  7094. C
  7095.       IMPLICIT REAL*8 (A-H,O-Z)
  7096.       COMMON /TAPES/ IIN,IOUT
  7097.       DIMENSION A(NWA),B(NWA),X(N,N),EIGV(N),D(N)
  7098. C
  7099. C     INITIALIZE EIGENVALUE AND EIGENVECTOR MATRICES
  7100. C
  7101.       N1=N + 1
  7102.       II=1
  7103.       DO 10 I=1,N
  7104.       IF (B(II).LT.0.) GO TO 3
  7105.       IF (A(II).GT.0.) GO TO 4
  7106.       IF (SHIFT.GT.0.) GO TO 4
  7107.     3 WRITE(IOUT,2020) II,A(II),B(II)
  7108.       STOP
  7109.     4 D(I)=A(II)/B(II)
  7110.       EIGV(I)=D(I)
  7111.    10 II=II + N1 - I
  7112.       DO 30 I=1,N
  7113.       DO 20 J=1,N
  7114.    20 X(I,J)=0.
  7115.    30 X(I,I)=1.
  7116.       IF (N.EQ.1) GO TO 255
  7117. C
  7118. C     INITIALIZE SWEEP COUNTER AND BEGIN ITERATION
  7119. C
  7120.       NSWEEP=0
  7121.       NR=N-1
  7122.    40 NSWEEP=NSWEEP+1
  7123.       IF(IFPR.EQ.2) WRITE(IOUT,2000)NSWEEP
  7124. C
  7125. C     CHECK IF PRESENT OFF-DIAGONAL ELEMENT IS LARGE ENOUGH TO REQUIRE Z
  7126. C
  7127.       EPS=(.01**NSWEEP)**2
  7128.       DO 210 J=1,NR
  7129.       JP1=J+1
  7130.       JM1=J-1
  7131.       LJK=JM1*N - JM1*J/2
  7132.       JJ=LJK + J
  7133.       DO 210 K=JP1,N
  7134.       KP1=K+1
  7135.       KM1=K-1
  7136.       JK=LJK + K
  7137.       KK=KM1*N - KM1*K/2 + K
  7138.       EPTOLA=(A(JK)*A(JK))
  7139.       EPTLA1=DABS(A(JJ)*A(KK)*EPS)
  7140.       EPTOLB=(B(JK)*B(JK))
  7141.       EPTLB1=(B(JJ)*B(KK)*EPS)
  7142.       IF((EPTOLA.LT.EPTLA1) .AND. (EPTOLB.LT.EPTLB1)) GO TO 210
  7143. C
  7144. C     IF ZEROING IS REQUIRED, CALCULATE THE ROTATION MATRIX ELEMENTS CA
  7145. C
  7146.       AKK=A(KK)*B(JK)-B(KK)*A(JK)
  7147.       AJJ=A(JJ)*B(JK)-B(JJ)*A(JK)
  7148.       AB=A(JJ)*B(KK)-A(KK)*B(JJ)
  7149.       CHECK=(AB*AB+4.*AKK*AJJ)/4.
  7150.       IF(CHECK)50,60,60
  7151.    50 WRITE (IOUT,2020) JJ,A(JJ),B(JJ),KK,A(KK),B(KK),JK,A(JK),B(JK)
  7152.       STOP
  7153.    60 SQCH=DSQRT(CHECK)
  7154.       D1=AB/2.+SQCH
  7155.       D2=AB/2.-SQCH
  7156.       DEN=D1
  7157.       IF(DABS(D2).GT.DABS(D1))DEN=D2
  7158.       IF(DEN)80,70,80
  7159.    70 CA=0.
  7160.       CG=-A(JK)/A(KK)
  7161.       GO TO 90
  7162.    80 CA=AKK/DEN
  7163.       CG=-AJJ/DEN
  7164. C
  7165. C     PERFORM THE GENERALIZED ROTATION TO ZERO THE PRESENT OFF-DIAGONAL
  7166. C
  7167.    90 IF(N-2)100,190,100
  7168.   100 IF(JM1-1)130,110,110
  7169.   110 DO 120 I=1,JM1
  7170.       IM1=I - 1
  7171.       IJ=IM1*N - IM1*I/2 + J
  7172.       IK=IM1*N - IM1*I/2 + K
  7173.       AJ=A(IJ)
  7174.       BJ=B(IJ)
  7175.       AK=A(IK)
  7176.       BK=B(IK)
  7177.       A(IJ)=AJ+CG*AK
  7178.       B(IJ)=BJ+CG*BK
  7179.       A(IK)=AK+CA*AJ
  7180.   120 B(IK)=BK+CA*BJ
  7181.   130 IF(KP1-N)140,140,160
  7182.   140 LJI=JM1*N - JM1*J/2
  7183.       LKI=KM1*N - KM1*K/2
  7184.       DO 150 I=KP1,N
  7185.       JI=LJI + I
  7186.       KI=LKI + I
  7187.       AJ=A(JI)
  7188.       BJ=B(JI)
  7189.       AK=A(KI)
  7190.       BK=B(KI)
  7191.       A(JI)=AJ+CG*AK
  7192.       B(JI)=BJ+CG*BK
  7193.       A(KI)=AK+CA*AJ
  7194.   150 B(KI)=BK+CA*BJ
  7195.   160 IF(JP1-KM1)170,170,190
  7196.   170 LJI=JM1*N - JM1*J/2
  7197.       DO 180 I=JP1,KM1
  7198.       JI=LJI + I
  7199.       IM1=I - 1
  7200.       IK=IM1*N - IM1*I/2 + K
  7201.       AJ=A(JI)
  7202.       BJ=B(JI)
  7203.       AK=A(IK)
  7204.       BK=B(IK)
  7205.       A(JI)=AJ+CG*AK
  7206.       B(JI)=BJ+CG*BK
  7207.       A(IK)=AK+CA*AJ
  7208.   180 B(IK)=BK+CA*BJ
  7209.   190 AK=A(KK)
  7210.       BK=B(KK)
  7211.       A(KK)=AK+2.*CA*A(JK)+CA*CA*A(JJ)
  7212.       B(KK)=BK+2.*CA*B(JK)+CA*CA*B(JJ)
  7213.       A(JJ)=A(JJ)+2.*CG*A(JK)+CG*CG*AK
  7214.       B(JJ)=B(JJ)+2.*CG*B(JK)+CG*CG*BK
  7215.       A(JK)=0.
  7216.       B(JK)=0.
  7217. C
  7218. C     UPDATE THE EIGENVECTOR MATRIX AFTER EACH ROTATION
  7219. C
  7220.       DO 200 I=1,N
  7221.       XJ=X(I,J)
  7222.       XK=X(I,K)
  7223.       X(I,J)=XJ+CG*XK
  7224.   200 X(I,K)=XK+CA*XJ
  7225.   210 CONTINUE
  7226. C
  7227. C     UPDATE THE EIGENVALUES AFTER EACH SWEEP
  7228. C
  7229.       II=1
  7230.       DO 220 I=1,N
  7231.       IF (B(II).LT.0.) GO TO 212
  7232.       IF (A(II).GT.0.) GO TO 215
  7233.       IF (SHIFT.GT.0.) GO TO 215
  7234.   212 WRITE(IOUT,2020) II,A(II),B(II)
  7235.       STOP
  7236.   215 EIGV(I)=A(II)/B(II)
  7237.   220 II=II + N1 - I
  7238.       IF(IFPR.LT.2)GO TO 230
  7239.       WRITE(IOUT,2030)
  7240.       WRITE(IOUT,2010) (EIGV(I),I=1,N)
  7241. C
  7242. C     CHECK FOR CONVERGENCE
  7243. C
  7244.   230 DO 240 I=1,N
  7245.       TOL=RTOL*DABS(D(I))
  7246.       DIF=DABS(EIGV(I)-D(I))
  7247.       IF(DIF.GT.TOL)GO TO 280
  7248.   240 CONTINUE
  7249. C
  7250. C     CHECK ALL OFF-DIAGONAL ELEMENTS TO SEE IF ANOTHER SWEEP IS REQUIRE
  7251. C
  7252.       EPS=RTOL**2
  7253.       DO 250 J=1,NR
  7254.       JM1=J-1
  7255.       JP1=J+1
  7256.       LJK=JM1*N - JM1*J/2
  7257.       JJ=LJK + J
  7258.       DO 250 K=JP1,N
  7259.       KM1=K-1
  7260.       JK=LJK + K
  7261.       KK=KM1*N - KM1*K/2 + K
  7262.       EPSA=(A(JK)*A(JK))
  7263.       EPSB=(B(JK)*B(JK))
  7264.       EPSA1=DABS(A(JJ)*A(KK)*EPS)
  7265.       EPSB1=(B(JJ)*B(KK)*EPS)
  7266.       IF((EPSA.LT.EPSA1) .AND. (EPSB.LT.EPSB1)) GO TO 250
  7267.       GO TO 280
  7268.   250 CONTINUE
  7269. C
  7270. C     FILL OUT BOTTOM TRIANGLE OF RESULTANT MATRICES AND SCALE EIGENVECT
  7271. C
  7272.   255 II=1
  7273.       DO 275 I=1,N
  7274.       BB=DSQRT(B(II))
  7275.       DO 270 K=1,N
  7276.   270 X(K,I)=X(K,I)/BB
  7277.   275 II=II + N1 - I
  7278.       IF (IFPR.GT.0) WRITE (IOUT,2040) NSWEEP
  7279.       RETURN
  7280. C
  7281. C     UPDATE  D  MATRIX AND START NEW SWEEP, IF ALLOWED
  7282. C
  7283.   280 DO 290 I=1,N
  7284.   290 D(I)=EIGV(I)
  7285.       IF(NSWEEP.LT.NSMAX)GO TO 40
  7286.       WRITE (IOUT,2050)
  7287.       STOP
  7288. C
  7289.  2010 FORMAT(1H0,6E20.12)
  7290.  2000 FORMAT(27H0SWEEP NUMBER IN *JACOBI* = ,I4)
  7291.  2020 FORMAT (38H0*** ERROR  SOLUTION STOP IN JACOBI    /
  7292.      1        31H MATRICES NOT POSITIVE DEFINITE /
  7293.      2 (4H II=,I4,6HA(II)=,E20.12,6HB(II)=,E20.12))
  7294.  2030 FORMAT(36H0CURRENT EIGENVALUES IN *JACOBI* ARE,/)
  7295.  2040 FORMAT (//,33H NUMBER OF SWEEPS IN JACOBI ARE =,I4//)
  7296.  2050 FORMAT (1H1,12H ** STOP ** /,
  7297.      1            39H NO CONVERGENCE IN *JACOBI ITERATIONS*  /,
  7298.      2            26H EIGEN SOLUTION ABANDONED )
  7299.       END
  7300. C *CDC* *DECK OVL210
  7301. C *CDC*       OVERLAY (ADINA,21,0)
  7302. C *CDC* *DECK MODSUP
  7303. C *UNI* )FOR,IS N.MODSUP, R.MODSUP
  7304. C *CDC*       PROGRAM MODSUP
  7305.       SUBROUTINE MODSUP
  7306. C
  7307. C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
  7308. C .                                                                   .
  7309. C .      PROGRAM                                                      .
  7310. C .      . TO PERFORM MODE SUPERPOSITION ANALYSIS                     .
  7311. C .                                                                   .
  7312. C .      IND=3 - CALCULATE PHIT*K*PHI FOR LINEAR PORTION OF STIFFNESS .
  7313. C .              CALCULATE INITIAL CONDITIONS ON MODAL COORDINATES    .
  7314. C .              CALCULATE PARAMETERS FOR TIME INTEGRATION            .
  7315. C .                                                                   .
  7316. C .      IND=4 - PROJECT NODAL LOADS,  SOLVE MODAL EQUATIONS,         .
  7317. C .              COMPUTE NODAL INCREMENTAL DISPLACEMENTS              .
  7318. C .                                                                   .
  7319. C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
  7320. C
  7321. C
  7322.       IMPLICIT REAL*8 (A-H,O-Z)
  7323. C
  7324.       COMMON /SOL/ NUMNP,NEQ,NWK,NWM,NWC,NUMEST,MIDEST,MAXEST,NSTE,MA
  7325.       COMMON /ISUBST/ ISUB,NSUBST,NSUB,NTUSE,NEGLS,NEGNLS,NUMNPS,
  7326.      1                NODCON,NODRET,IDOFS(6),NDOFS,NEQS,NWKS,MAXES,
  7327.      2                MAS,NSTAPE,ILOA(13),KRSIZM,NEQC
  7328.       COMMON /EL/ IND,ICOUNT,NPAR(20),NUMEG,NEGL,NEGNL,IMASS,IDAMP,ISTAT
  7329.      1           ,NDOF,KLIN,IEIG,IMASSN,IDAMPN
  7330.       COMMON /VAR/ NG,MODEX,IUPDT,KSTEP,ITEMAX,IEQREF,ITE,KPRI,
  7331.      1             IREF,IEQUIT,IPRI,KPLOTN,KPLOTE
  7332.       COMMON /CONST/ DT,DTA,CONS(21),DTOD,IOPE
  7333.       COMMON /MSUPER/ IMODES,NMODES,IMDAMP
  7334.       COMMON /ADINAI/ OPVAR(7),TSTART,IRINT,ISTOTE
  7335.       COMMON /MSUPCF/ B0,B1,B2,B3,B4,B5,B6,B7,B8,B9,B10
  7336.       COMMON /DISCON/ NDISCE,NIDM
  7337. C
  7338.       COMMON /DPR/ ITWO
  7339.       COMMON /DIM/ N0,N1,N2,N3,N4,N5,N6,N7,N8,N9,N10,N11,N12,N13,N14,N15
  7340.       COMMON /DIMN/ N3A,N4A,N4B
  7341.       COMMON /DIMETC/ N01,N02,N03,N04,N05,N06,N07,N08,N09
  7342.       COMMON /FREQIF/ ISTOH,N1A,N1B,N1C
  7343.       COMMON /ADDB/ NEQL,NEQR,MLA,NBLOCK
  7344.       COMMON /TEMPRT/ TEMP1,TEMP2,ITEMPR,ITP96,N6A,N6B
  7345. C
  7346.       COMMON A(1)
  7347.       REAL A
  7348. C
  7349. C
  7350.       MM=0
  7351.       IF (KLIN.GT.0 .AND. (NSUBST.GT.0 .OR. NEGL.GT.0))
  7352.      1             MM=NMODES*(NMODES + 1)*ITWO/2
  7353.       IF (IND.GE.4) GO TO 100
  7354.       IF (KLIN.EQ.0) GO TO 100
  7355.       IF (NSUBST.EQ.0 .AND. NEGL.EQ.0) GO TO 100
  7356. C
  7357. C     CALCULATE PROJECTION OF LINEAR PORTION OF STIFFNESS MATRIX
  7358. C     FOR LATER CALCULATION OF RHS LOADS IN NONLINEAR ANALYSIS
  7359. C
  7360.       M3=N2 + NEQ*ITWO
  7361.       M4=M3 + NEQ*ITWO
  7362.       M5=N5
  7363.       M6=M5 + MM - 1
  7364.       CALL SIZE (M6)
  7365. C
  7366.       CALL MODLOD (A(N1),A(N1A),A(N2),A(M3),A(M4),A(M5),ISTOH,NEQ)
  7367. C
  7368. C
  7369. C
  7370. C     AFTER MODLOD THE STIFFNESS PROJECTION BEGINS AT LOCATION M5,
  7371. C     (ALSO EQUAL TO N5).
  7372. C     IN MODRES THIS STIFFNESS PROJECTION IS SHIFTED TO LOCATION N1
  7373. C     AND REMAINS THERE DURING THE REST OF THE SOLUTION.
  7374. C
  7375. C
  7376. C     SETUP STORAGE FOR MODAL VARIABLES
  7377. C
  7378.   100 M1=N1 + MM
  7379.       M2=M1 + NMODES*ITWO
  7380.       M3=M2 + NMODES*ITWO
  7381.       M4=M3 + NMODES*ITWO
  7382.       M5=M4 + NMODES*ITWO
  7383.       M6=M5 + NMODES*ITWO
  7384.       M7=M6 + NMODES*ITWO
  7385.       M8=M7 + NMODES*ITWO
  7386.       M9=M8 + NMODES*ITWO
  7387.       IF (IND.GE.4) GO TO 200
  7388. C
  7389. C     CALCULATE INITIAL CONDITIONS AND TIME INTEGRATION PARAMETERS
  7390. C
  7391.       CALL MODRES (A(M1),A(M2),A(M3),A(M4),A(M5),A(M6),A(M7),
  7392.      1             A(N2),A(N7),A(N8),A(N6A),A(N3),A(N4),DT,NEQ)
  7393. C
  7394.       GO TO 599
  7395. C
  7396. C     COMPUTE INCREMENTAL DISPLACEMENTS DURING TIME INTEGRATION
  7397. C
  7398.   200 MADR=N3
  7399.       IF (ICOUNT.EQ.3) MADR=N5
  7400. C
  7401.       CALL DISRES (A(N1),A(M1),A(M2),A(M3),A(M4),A(M5),A(M6),A(M7),A(M8)
  7402.      1             ,A(MADR),A(N4),A(N4B),NEQ)
  7403. C
  7404.   599 CONTINUE
  7405. C
  7406.       RETURN
  7407. C
  7408.       END
  7409. C *CDC* *DECK MODLOD
  7410. C *UNI* )FOR,IS N.MODLOD, R.MODLOD
  7411.       SUBROUTINE MODLOD (MAXA,NCOLBV,FI,FK,AA,FTKF,ISTOH,NEQ)
  7412. C
  7413.       IMPLICIT REAL*8 (A-H,O-Z)
  7414. C
  7415.       COMMON /ADDB/ NEQL,NEQR,MLA,NBLOCK
  7416.       COMMON /MSUPER/ IMODES,NMODES,IMDAMP
  7417. C
  7418.       DIMENSION FI(NEQ),FK(NEQ),AA(ISTOH),FTKF(1)
  7419.       INTEGER MAXA(1),NCOLBV(1)
  7420. C
  7421.       NT=9
  7422.       MDIM=NMODES*(NMODES + 1)/2
  7423.       DO 10 K=1,MDIM
  7424.    10 FTKF(K)=0.
  7425. C
  7426.       IJ=0
  7427.       REWIND NT
  7428.       READ (NT) FI
  7429. C
  7430. C     COMPUTE PROJECTION OF LINEAR PORTION OF STIFFNESS MATRIX
  7431. C
  7432.       DO 500 I=1,NMODES
  7433. C
  7434. C     COMPUTE MATRIX VECTOR PRODUCT FK=FK - K*FI
  7435. C
  7436.       DO 100 K=1,NEQ
  7437.   100 FK(K)=0.
  7438.       REWIND 4
  7439.       CALL MULT (FK,AA,FI,MAXA,NCOLBV,NEQ,ISTOH,NBLOCK,4)
  7440. C
  7441. C     MULTIPLY FJ VECTOR BY FK VECTOR TO GET THE MATRIX FTKF
  7442. C
  7443.       DO 400 J=I,NMODES
  7444.       TEMP=0.
  7445.       DO 200 K=1,NEQ
  7446.   200 TEMP=TEMP + FI(K)*FK(K)
  7447.       IJ=IJ + 1
  7448.       FTKF(IJ)=-TEMP
  7449.       IF (J.EQ.NMODES) GO TO 400
  7450.       READ (NT) FI
  7451.   400 CONTINUE
  7452. C
  7453. C     POSITION TAPE NT AND READ FI VECTOR
  7454. C
  7455.       IF (I.GE.NMODES - 1) GO TO 500
  7456.       IF (I.GT.NMODES/2) GO TO 450
  7457.       REWIND NT
  7458.       DO 420 J=1,I
  7459.   420 READ (NT)
  7460.       GO TO 480
  7461.   450 II=NMODES - I
  7462.       DO 460 J=1,II
  7463.   460 BACKSPACE NT
  7464.   480 READ (NT) FI
  7465. C
  7466.   500 CONTINUE
  7467. C
  7468.       RETURN
  7469.       END
  7470. C *CDC* *DECK MODRES
  7471. C *UNI* )FOR,IS N.MODRES, R.MODRES
  7472.       SUBROUTINE MODRES (P,X,XD,XDD,EIGV,XSI,BETA,DISP,VEL,ACC,TEMPV1,
  7473.      1                   TT,PHI,DT,NEQ)
  7474. C
  7475.       IMPLICIT REAL*8 (A-H,O-Z)
  7476. C
  7477.       COMMON /SOL/ NUMNP,NNN,NWK,NWM,NWC,NUMEST,MIDEST,MAXEST,NSTE,MA
  7478.       COMMON /EL/ IND,ICOUNT,NPAR(20),NUMEG,NEGL,NEGNL,IMASS,IDAMP,ISTAT
  7479.      1           ,NDOF,KLIN,IEIG,IMASSN,IDAMPN
  7480.       COMMON /ISUBST/ ISUB,NSUBST,NSUB,NTUSE,NEGLS,NEGNLS,NUMNPS,
  7481.      1                NODCON,NODRET,IDOFS(6),NDOFS,NEQS,NWKS,MAXES,
  7482.      2                MAS,NSTAPE,ILOA(13),KRSIZM,NEQC
  7483.       COMMON /DPR/ ITWO
  7484.       COMMON /DIMETC/ N01,N02,N03,N04,N05,N06,N07,N08,N09
  7485.       COMMON /DIM/ N0,N1,N2,N3,N4,N5,N6,N7,N8,N9,N10,N11,N12,N13,N14,N15
  7486.       COMMON /TEMPRT/ TEMP1,TEMP2,ITEMPR,ITP96,N6A,N6B
  7487.       COMMON /ADDB/ NEQL,NEQR,MLA,NBLOCK
  7488.       COMMON /MSUPCF/ B0,B1,B2,B3,B4,B5,B6,B7,B8,B9,B10
  7489.       COMMON /FREQIF/ ISTOH,N1A,N1B,N1C
  7490.       COMMON /EIGIF/ COFQ,RBMSH,IESTYP,NFREQ,NMODE,IFPR,IRBM
  7491.       COMMON /MSUPER/ IMODES,NMODES,IMDAMP
  7492.       COMMON /ADINAI/ OPVAR(7),TSTART,IRINT,ISTOTE
  7493.       COMMON /DISCON/ NDISCE,NIDM
  7494. C
  7495.       COMMON A(1)
  7496.       REAL A
  7497. C
  7498.       DIMENSION P(1),X(1),XD(1),XDD(1),EIGV(1),XSI(1),BETA(1),
  7499.      1          DISP(NEQ),VEL(NEQ),ACC(NEQ),TEMPV1(1),PHI(NEQ,1),TT(NEQ)
  7500. C
  7501. C     TEMPORARILY READ INITIAL CONDITIONS INTO DUMMY LOCATIONS
  7502. C     INITIAL DISP INTO VEL, VEL INTO ACC AND ACC INTO TT VECTORS
  7503. C
  7504.       REWIND 8
  7505.       READ (8)
  7506.       READ (8) VEL
  7507.       READ (8) ACC
  7508.       READ (8) TT
  7509. C
  7510. C     MULTIPLY INITIAL CONDITIONS BY MASS MATRIX
  7511. C     AFTER THE MULTIPLICATION - MASS*INITIAL DISP IS STORED IN DISP,
  7512. C     MASS*VELOCITY IN VEL,  MASS*ACCELERATION IN ACC VECTORS
  7513. C
  7514.       IF (IMASS - 1) 20,20,10
  7515. C
  7516. C     CONSISTENT MASS CASE
  7517. C
  7518.    10 DO 11 K=1,NEQ
  7519.    11 DISP(K)=0.
  7520.       REWIND 11
  7521.       CALL MULT (DISP,PHI,VEL,A(N1),A(N1A),NEQ,ISTOH,NBLOCK,11)
  7522.       DO 12 K=1,NEQ
  7523.    12 VEL(K)=0.
  7524.       REWIND 11
  7525.       CALL MULT (VEL,PHI,ACC,A(N1),A(N1A),NEQ,ISTOH,NBLOCK,11)
  7526.       DO 13 K=1,NEQ
  7527.    13 ACC(K)=0.
  7528.       REWIND 11
  7529.       CALL MULT (ACC,PHI,TT,A(N1),A(N1A),NEQ,ISTOH,NBLOCK,11)
  7530.       GO TO 40
  7531. C
  7532. C     LUMPED MASS CASE
  7533. C
  7534.    20 REWIND 11
  7535.       READ (11) (PHI(K,1),K=1,NEQ)
  7536.       DO 30 K=1,NEQ
  7537.       DISP(K)=-PHI(K,1)*VEL(K)
  7538.       VEL(K)=-PHI(K,1)*ACC(K)
  7539.       ACC(K)=-PHI(K,1)*TT(K)
  7540.    30 CONTINUE
  7541. C
  7542. C     SHIFT STIFFNESS PROJECTION TO N1
  7543. C
  7544.    40 IF (KLIN.EQ.0) GO TO 45
  7545.       IF (NSUBST.EQ.0 .AND. NEGL.EQ.0) GO TO 45
  7546.       MM=NMODES*(NMODES + 1)*ITWO/2
  7547.       DO 15 I=1,MM
  7548.    15 A(N1+I-1)=A(N5+I-1)
  7549. C
  7550. C     CALCULATE INITIAL CONDITIONS IN MODAL COORDINATES
  7551. C
  7552.    45 NT=9
  7553.       REWIND NT
  7554.       REWIND 7
  7555.       READ (7) (XSI(I),I=1,NMODES)
  7556.       REWIND 7
  7557.       NN=ISTOH
  7558.       IF (NBLOCK.GT.1) NN=NN + ISTOH
  7559.       NVEC=NN/NEQ
  7560.       NX=NMODES/NVEC
  7561.       IF (NX*NVEC .LT. NMODES) NX=NX + 1
  7562.       NN=1
  7563.       DO 100 I=1,NX
  7564.       MM=NN + NVEC - 1
  7565.       IF (MM.GT.NMODES) MM=NMODES
  7566.       JJ=MM - NN + 1
  7567. C
  7568.       DO 50 J=1,JJ
  7569.    50 READ (NT) (PHI(K,J),K=1,NEQ)
  7570.       WRITE (7) ((PHI(K,J),K=1,NEQ),J=1,JJ)
  7571. C
  7572.       DO 70 J=1,JJ
  7573.       KK=NN + J - 1
  7574.       D1=0.
  7575.       D2=0.
  7576.       D3=0.
  7577.       DO 60 K=1,NEQ
  7578.       D1=D1 + PHI(K,J)*DISP(K)
  7579.       D2=D2 + PHI(K,J)*VEL(K)
  7580.       D3=D3 + PHI(K,J)*ACC(K)
  7581.    60 CONTINUE
  7582.       X(KK)=-D1
  7583.       XD(KK)=-D2
  7584.       XDD(KK)=-D3
  7585.    70 CONTINUE
  7586. C
  7587.       NN=NN + NVEC
  7588.   100 CONTINUE
  7589.       IF (NMODES.EQ.NFREQ) GO TO 101
  7590.       II=NFREQ - NMODES
  7591.       DO 102 I=1,II
  7592.   102 READ (NT)
  7593. C
  7594. C     READ INITIAL CONDITIONS BACK INTO CORE
  7595. C
  7596.   101 REWIND 8
  7597.       READ (8)
  7598.       READ (8) DISP
  7599.       READ (8) VEL
  7600.       READ (8) ACC
  7601.       IF (NDISCE.GT.0)
  7602.      1   CALL CONDIS (A(N01),A(N02),A(N03),DISP,VEL,ACC,NIDM,1)
  7603.       IF (ITEMPR.LE.1) GO TO 105
  7604.       BACKSPACE 56
  7605.       NUMP1=NUMNP + 1
  7606.       READ (56) (TEMPV1(I),I=1,NUMP1)
  7607.   105 CONTINUE
  7608. C
  7609. C     CALCULATE TIME INTEGRATION PARAMETERS - USING NEWMARK SCHEME
  7610. C
  7611.   140 READ (NT) (EIGV(I),I=1,NMODES)
  7612.       DO 150 I=1,NMODES
  7613.   150 XSI(I)=2*XSI(I)*DSQRT(EIGV(I))
  7614. C
  7615. C
  7616.   170 DELT=OPVAR(1)
  7617.       ALFA=OPVAR(2)
  7618.       DEAL=DELT/ALFA
  7619.       B0=1./(ALFA*DT*DT)
  7620.       B1=DEAL/DT
  7621.       B2=1./(ALFA*DT)
  7622.       B3=0.5/ALFA - 1.
  7623.       B4=DEAL - 1.
  7624.       B5=DT*(0.5*DEAL - 1.)
  7625.       B6=DT*(1. - DELT)
  7626.       B7=DELT*DT
  7627. C
  7628.       DO 190 I=1,NMODES
  7629.       BETA(I)=B0 + B1*XSI(I) + EIGV(I)
  7630.   190 BETA(I)=1./BETA(I)
  7631. C
  7632.       RETURN
  7633. C
  7634.       END
  7635. C *CDC* *DECK DISRES
  7636. C *UNI* )FOR,IS N.DISRES, R.DISRES
  7637.       SUBROUTINE DISRES (AA,P,X,XD,XDD,EIGV,XSI,BETA,XI,R,PHI,RE,NEQ)
  7638. C
  7639.       IMPLICIT REAL*8 (A-H,O-Z)
  7640. C
  7641. C
  7642.       COMMON /MSUPER/ IMODES,NMODES,IMDAMP
  7643.       COMMON /MSUPCF/ B0,B1,B2,B3,B4,B5,B6,B7,B8,B9,B10
  7644.       COMMON /FREQIF/ ISTOH,N1A,N1B,N1C
  7645.       COMMON /ADDB/ NEQL,NEQR,MLA,NBLOCK
  7646.       COMMON /EL/ IND,ICOUNT,NPAR(20),NUMEG,NEGL,NEGNL,IMASS,IDAMP,ISTAT
  7647.      1           ,NDOF,KLIN,IEIG,IMASSN,IDAMPN
  7648.       COMMON /VAR/ NG,MODEX,IUPDT,KSTEP,ITEMAX,IEQREF,ITE,KPRI,
  7649.      1             IREF,IEQUIT,IPRI,KPLOTN,KPLOTE
  7650.       COMMON /ISUBST/ ISUB,NSUBST,NSUB,NTUSE,NEGLS,NEGNLS,NUMNPS,
  7651.      1                NODCON,NODRET,IDOFS(6),NDOFS,NEQS,NWKS,MAXES,
  7652.      1                MAS,NSTAPE,ILOA(13),KRSIZM,NEQC
  7653.       COMMON /ADINAI/ OPVAR(7),TSTART,IRINT,ISTOTE
  7654.       COMMON /ENERGY/ PE,PEOLD,PEINIT
  7655. C
  7656.       DIMENSION AA(1),P(1),X(1),XD(1),XDD(1),EIGV(1),XSI(1),BETA(1),
  7657.      1          XI(1),R(1),RE(1),PHI(NEQ,1)
  7658. C
  7659.       NT=7
  7660.       DO 10 K=1,NEQ
  7661.       RE(K)=R(K)
  7662.    10 R(K)=0.
  7663.       IF (ICOUNT.EQ.3) GO TO 40
  7664.       IF (KSTEP.EQ.1) GO TO 20
  7665. C
  7666. C     UPDATE PREVIOUS TIME MODAL DISPLACEMENT PARAMETERS
  7667. C
  7668.       DO 15 I=1,NMODES
  7669.       VEL=XD(I)
  7670.       ACC=XDD(I)
  7671.       XDD(I)=B0*XI(I) - B2*VEL - B3*ACC
  7672.       XD(I)=VEL + B6*ACC + B7*XDD(I)
  7673.       X(I)=X(I) + XI(I)
  7674.    15 CONTINUE
  7675. C
  7676. C     INITIALIZE INCREMENTAL DISPLACEMENTS AT THE BEGINNING OF THIS STEP
  7677. C
  7678.    20 DO 25 I=1,NMODES
  7679.       P(I)=0.
  7680.    25 XI(I)=0.
  7681.       GO TO 50
  7682. C
  7683. C     IN EQUILIBRIUM ITERATION ADD INCREMENTAL DISPLACEMENT EFFECT
  7684. C
  7685.    40 DO 45 I=1,NMODES
  7686.    45 P(I)=-B0*XI(I) - B1*XSI(I)*XI(I)
  7687. C
  7688. C     MASS EFFECT
  7689. C
  7690.    50 DO 55 I=1,NMODES
  7691.    55 P(I)=P(I) + B2*XD(I) + B3*XDD(I)
  7692. C
  7693. C     MODAL DAMPING EFFECT
  7694. C
  7695.       IF (IMDAMP.EQ.0) GO TO 70
  7696.       DO 60 I=1,NMODES
  7697.    60 P(I)=P(I) + XSI(I)*(B4*XD(I) + B5*XDD(I))
  7698. C
  7699. C     STIFFNESS EFFECT
  7700. C
  7701.    70 IF (KLIN.GT.0) GO TO 90
  7702. C
  7703. C     LINEAR ANALYSIS
  7704. C
  7705.       DO 80 I=1,NMODES
  7706.    80 P(I)=P(I) - EIGV(I)*X(I)
  7707.       GO TO 150
  7708. C
  7709. C     EFFECT OF LINEAR ELEMENTS IN NONLINEAR ANALYSIS
  7710. C
  7711.    90 IF (NEGL.EQ.0 .AND. NSUBST.EQ.0) GO TO 150
  7712.       IJ=0
  7713.       DO 120 I=1,NMODES
  7714.       XDUM=X(I) + XI(I)
  7715.       DO 120 J=I,NMODES
  7716.       IJ=IJ + 1
  7717.       P(I)=P(I) - AA(IJ)*(X(J) + XI(J))
  7718.       IF (I - J) 110,120,110
  7719.   110 P(J)=P(J) - AA(IJ)*XDUM
  7720.   120 CONTINUE
  7721. C
  7722. C     IF ALL EIGENVECTORS CAN BE KEPT IN CORE, READ THEM ONLY ONCE
  7723. C
  7724.   150 NN=ISTOH
  7725.       IF (NBLOCK.GT.1) NN=2*ISTOH
  7726.       NVEC=NN/NEQ
  7727.       NX=NMODES/NVEC
  7728.       IF (NX*NVEC .LT. NMODES) NX=NX + 1
  7729.       REWIND NT
  7730.       IF (NX.GT.1) GO TO 170
  7731.       IF (KSTEP.GT.1 .OR. ICOUNT.EQ.3) GO TO 170
  7732.       READ (NT) ((PHI(K,J),K=1,NEQ),J=1,NMODES)
  7733. C
  7734. C     NVEC IS THE NUMBER OF EIGENVECTORS THAT CAN BE TAKEN INTO CORE
  7735. C
  7736.   170 NN=1
  7737.       DO 300 I=1,NX
  7738.       MM=NN + NVEC - 1
  7739.       IF (MM.GT.NMODES) MM=NMODES
  7740.       JJ=MM - NN + 1
  7741.       IF (NX.EQ.1) GO TO 180
  7742.       READ (NT) ((PHI(K,J),K=1,NEQ),J=1,JJ)
  7743. C
  7744.   180 DO 250 J=1,JJ
  7745.       KK=NN + J - 1
  7746. C
  7747. C     PROJECT EXTERNAL LOADS. NOTE THAT IN NONLINEAR ANALYSIS RE VECTOR
  7748. C     HAS NONLINEAR CONTRIBUTION ALSO IN IT.
  7749. C
  7750.       DUM=P(KK)
  7751.       DO 200 K=1,NEQ
  7752.   200 P(KK)=P(KK) + PHI(K,J)*RE(K)
  7753. C
  7754.       XII=BETA(KK)*P(KK)
  7755.       IF (KLIN.EQ.0) P(KK)=P(KK) - DUM
  7756. C
  7757.       DO 220 K=1,NEQ
  7758.   220 R(K)=R(K) + PHI(K,J)*XII
  7759. C
  7760.       XI(KK)=XI(KK) + XII
  7761.   250 CONTINUE
  7762. C
  7763.   300 NN=NN + NVEC
  7764. C
  7765.       PEOLD=0.0
  7766.       DO 350 I=1,NMODES
  7767.   350 PEOLD=PEOLD + P(I)*XI(I)
  7768. C
  7769.       IF (ICOUNT.EQ.3) RETURN
  7770.       PEINIT=PEOLD
  7771. C
  7772.       IF (KLIN.EQ.0) WRITE (6,2000) KSTEP
  7773.       IF (KLIN.GT.0) WRITE (6,2010) KSTEP
  7774.       WRITE (6,2020)
  7775.       WRITE (6,2050) (I,P(I),I=1,NMODES)
  7776. C
  7777.       RETURN
  7778. C
  7779. C
  7780.  2000 FORMAT (///52H PROJECTIONS OF EXTERNAL LOADS ON TO THE MODAL BASIS
  7781.      114H FOR STEP NO =,I5 /)
  7782.  2010 FORMAT (///65H PROJECTIONS OF INCREMENTAL EFFECTIVE LOADS ON TO TH
  7783.      1E MODAL BASIS,14H FOR STEP NO =,I5 /)
  7784.  2020 FORMAT (5(6X,4HMODE,7X,6HFACTOR,2X)/)
  7785.  2050 FORMAT (5(4X,I5,1X,E15.5)/)
  7786.       END
  7787. C *CDC* *DECK MODUM1
  7788. C *UNI* )FOR,IS N.MODUM1, R.MODUM1
  7789.       SUBROUTINE MODUM1
  7790. C
  7791.       IMPLICIT REAL*8 (A-H,O-Z)
  7792. C
  7793.       RETURN
  7794.       END
  7795. C *CDC* *DECK MODUM2
  7796. C *UNI* )FOR,IS N.MODUM2, R.MODUM2
  7797.       SUBROUTINE MODUM2
  7798. C
  7799.       IMPLICIT REAL*8 (A-H,O-Z)
  7800. C
  7801.       RETURN
  7802.       END
  7803.