| 1 | C**********************************************************************
|
|---|
| 2 | C
|
|---|
| 3 | C ROUTINES FOR ESITMATING AND CALCULATING EIGENVALUES
|
|---|
| 4 | C USED IN NEKTON
|
|---|
| 5 | C
|
|---|
| 6 | C**********************************************************************
|
|---|
| 7 | C
|
|---|
| 8 | SUBROUTINE ESTEIG
|
|---|
| 9 | C--------------------------------------------------------------
|
|---|
| 10 | C
|
|---|
| 11 | C Estimate eigenvalues
|
|---|
| 12 | C
|
|---|
| 13 | C-------------------------------------------------------------
|
|---|
| 14 | INCLUDE 'SIZE'
|
|---|
| 15 | INCLUDE 'GEOM'
|
|---|
| 16 | INCLUDE 'INPUT'
|
|---|
| 17 | INCLUDE 'EIGEN'
|
|---|
| 18 | INCLUDE 'TSTEP'
|
|---|
| 19 | C
|
|---|
| 20 | NTOT1=lx1*ly1*lz1*NELFLD(IFIELD)
|
|---|
| 21 | XMIN = GLMIN(XM1,NTOT1)
|
|---|
| 22 | XMAX = GLMAX(XM1,NTOT1)
|
|---|
| 23 | YMIN = GLMIN(YM1,NTOT1)
|
|---|
| 24 | YMAX = GLMAX(YM1,NTOT1)
|
|---|
| 25 | IF (IF3D) THEN
|
|---|
| 26 | ZMIN = GLMIN(ZM1,NTOT1)
|
|---|
| 27 | ZMAX = GLMAX(ZM1,NTOT1)
|
|---|
| 28 | ELSE
|
|---|
| 29 | ZMIN = 0.0
|
|---|
| 30 | ZMAX = 0.0
|
|---|
| 31 | ENDIF
|
|---|
| 32 | C
|
|---|
| 33 | XX = XMAX - XMIN
|
|---|
| 34 | YY = YMAX - YMIN
|
|---|
| 35 | ZZ = ZMAX - ZMIN
|
|---|
| 36 | RXY = XX/YY
|
|---|
| 37 | RYX = YY/XX
|
|---|
| 38 | RMIN = RXY
|
|---|
| 39 | IF (RYX .LT. RMIN) RMIN = RYX
|
|---|
| 40 | IF (ldim .EQ. 3) THEN
|
|---|
| 41 | RXZ = XX/ZZ
|
|---|
| 42 | RZX = ZZ/XX
|
|---|
| 43 | RYZ = YY/ZZ
|
|---|
| 44 | RZY = ZZ/YY
|
|---|
| 45 | IF (RXZ .LT. RMIN) RMIN = RXZ
|
|---|
| 46 | IF (RZX .LT. RMIN) RMIN = RZX
|
|---|
| 47 | IF (RYZ .LT. RMIN) RMIN = RYZ
|
|---|
| 48 | IF (RZY .LT. RMIN) RMIN = RZY
|
|---|
| 49 | ENDIF
|
|---|
| 50 | C
|
|---|
| 51 | XX2 = 1./XX**2
|
|---|
| 52 | YY2 = 1./YY**2
|
|---|
| 53 | XYZMIN = XX2
|
|---|
| 54 | XYZMAX = XX2+YY2
|
|---|
| 55 | IF (YY2 .LT. XYZMIN) XYZMIN = YY2
|
|---|
| 56 | IF (ldim .EQ. 3) THEN
|
|---|
| 57 | ZZ2 = 1./ZZ**2
|
|---|
| 58 | XYZMAX = XYZMAX+ZZ2
|
|---|
| 59 | IF (ZZ2 .LT. XYZMIN) XYZMIN = ZZ2
|
|---|
| 60 | ENDIF
|
|---|
| 61 | C
|
|---|
| 62 | one = 1.
|
|---|
| 63 | PI = 4.*ATAN(one)
|
|---|
| 64 | RATIO = XYZMIN/XYZMAX
|
|---|
| 65 | EIGAE = PI*PI*XYZMIN
|
|---|
| 66 | EIGGE = EIGGA
|
|---|
| 67 | IF (ldim .EQ. 2) EIGAA = PI*PI*(XX2+YY2)/2.
|
|---|
| 68 | IF (ldim .EQ. 3) EIGAA = PI*PI*(XX2+YY2+ZZ2)/3.
|
|---|
| 69 | IF (IFAXIS) EIGAA = .25*PI*PI*YY2
|
|---|
| 70 | EIGAS = 0.25*RATIO
|
|---|
| 71 | EIGGS = 2.0
|
|---|
| 72 | C
|
|---|
| 73 | IF (NIO.EQ.0 .AND. ISTEP.LE.0) THEN
|
|---|
| 74 | WRITE (6,*) ' '
|
|---|
| 75 | WRITE (6,*) 'Estimated eigenvalues'
|
|---|
| 76 | WRITE (6,*) 'EIGAA = ',EIGAA
|
|---|
| 77 | WRITE (6,*) 'EIGGA = ',EIGGA
|
|---|
| 78 | IF (IFFLOW) THEN
|
|---|
| 79 | WRITE (6,*) 'EIGAE = ',EIGAE
|
|---|
| 80 | WRITE (6,*) 'EIGAS = ',EIGAS
|
|---|
| 81 | WRITE (6,*) 'EIGGE = ',EIGGE
|
|---|
| 82 | WRITE (6,*) 'EIGGS = ',EIGGS
|
|---|
| 83 | ENDIF
|
|---|
| 84 | WRITE (6,*) ' '
|
|---|
| 85 | ENDIF
|
|---|
| 86 | C
|
|---|
| 87 | RETURN
|
|---|
| 88 | END
|
|---|
| 89 | C
|
|---|
| 90 | SUBROUTINE EIGENV
|
|---|
| 91 | C-------------------------------------------------------------------------
|
|---|
| 92 | C
|
|---|
| 93 | C Compute the following eigenvalues:
|
|---|
| 94 | C EIGAA = minimum eigenvalue of the matrix A (=Laplacian)
|
|---|
| 95 | C EIGAE = minimum eigenvalue of the matrix E (=DB-1DT)
|
|---|
| 96 | C EIGAS = minimum eigenvalue of the matrix S (=DA-1DT)
|
|---|
| 97 | C EIGAST = minimum eigenvalue of the matrix St (=D(A+B/dt)-1DT
|
|---|
| 98 | C EIGGA = maximum eigenvalue of the matrix A
|
|---|
| 99 | C EIGGS = maximum eigenvalue of the matrix S
|
|---|
| 100 | C EIGGE = maximum eigenvalue of the matrix E
|
|---|
| 101 | C EIGGST = maximum eigenvalue of the matrix St
|
|---|
| 102 | C
|
|---|
| 103 | C Method : Power method/Inverse iteration & Rayleigh quotient wo shift
|
|---|
| 104 | C
|
|---|
| 105 | C-------------------------------------------------------------------------
|
|---|
| 106 | INCLUDE 'SIZE'
|
|---|
| 107 | INCLUDE 'EIGEN'
|
|---|
| 108 | INCLUDE 'INPUT'
|
|---|
| 109 | INCLUDE 'SOLN'
|
|---|
| 110 | INCLUDE 'TSTEP'
|
|---|
| 111 | C
|
|---|
| 112 | COMMON /SCRVH/ H1 (LX1,LY1,LZ1,LELT)
|
|---|
| 113 | $ , H2 (LX1,LY1,LZ1,LELT)
|
|---|
| 114 | COMMON /SCRHI/ H2INV (LX1,LY1,LZ1,LELV)
|
|---|
| 115 | C
|
|---|
| 116 | NTOT1 = lx1*ly1*lz1*NELV
|
|---|
| 117 | C
|
|---|
| 118 | IF (IFAA) THEN
|
|---|
| 119 | NTOT1 = lx1*ly1*lz1*NELV
|
|---|
| 120 | CALL RONE (H1,NTOT1)
|
|---|
| 121 | CALL RZERO (H2,NTOT1)
|
|---|
| 122 | CALL ALPHAM1 (EIGAA1,V1MASK,VMULT,H1,H2,1)
|
|---|
| 123 | CALL ALPHAM1 (EIGAA2,V2MASK,VMULT,H1,H2,2)
|
|---|
| 124 | EIGAA = MIN (EIGAA1,EIGAA2)
|
|---|
| 125 | IF (ldim.EQ.3) THEN
|
|---|
| 126 | CALL ALPHAM1 (EIGAA3,V3MASK,VMULT,H1,H2,3)
|
|---|
| 127 | EIGAA = MIN (EIGAA,EIGAA3)
|
|---|
| 128 | ENDIF
|
|---|
| 129 | IF (NIO.EQ.0 .AND. ISTEP.LE.0) WRITE (6,*) 'EIGAA = ',EIGAA
|
|---|
| 130 | ENDIF
|
|---|
| 131 | C
|
|---|
| 132 | IF (IFAS) THEN
|
|---|
| 133 | INLOC = 0
|
|---|
| 134 | CALL RONE (H1,NTOT1)
|
|---|
| 135 | CALL RZERO (H2,NTOT1)
|
|---|
| 136 | CALL RZERO (H2INV,NTOT1)
|
|---|
| 137 | CALL ALPHAM2 (EIGAS,H1,H2,H2INV,INLOC)
|
|---|
| 138 | IF (NIO.EQ.0 .AND. ISTEP.LE.0) WRITE (6,*) 'EIGAS = ',EIGAS
|
|---|
| 139 | ENDIF
|
|---|
| 140 | C
|
|---|
| 141 | IF (IFAE) THEN
|
|---|
| 142 | INLOC = 1
|
|---|
| 143 | CALL RZERO (H1,NTOT1)
|
|---|
| 144 | CALL RONE (H2,NTOT1)
|
|---|
| 145 | CALL RONE (H2INV,NTOT1)
|
|---|
| 146 | CALL ALPHAM2 (EIGAE,H1,H2,H2INV,INLOC)
|
|---|
| 147 | IF (NIO.EQ.0 .AND. ISTEP.LE.0) WRITE (6,*) 'EIGAE = ',EIGAE
|
|---|
| 148 | ENDIF
|
|---|
| 149 | C
|
|---|
| 150 | IF (IFAST) THEN
|
|---|
| 151 | INLOC = -1
|
|---|
| 152 | CALL SETHLM (H1,H2,INLOC)
|
|---|
| 153 | CALL INVERS2 (H2INV,H2,NTOT1)
|
|---|
| 154 | CALL ALPHAM2 (EIGAST,H1,H2,H2INV,INLOC)
|
|---|
| 155 | IF (NIO.EQ.0 .AND. ISTEP.LE.0) WRITE (6,*) 'EIGAST = ',EIGAST
|
|---|
| 156 | ENDIF
|
|---|
| 157 | C
|
|---|
| 158 | IF (IFGS) THEN
|
|---|
| 159 | INLOC = 0
|
|---|
| 160 | CALL RONE (H1,NTOT1)
|
|---|
| 161 | CALL RZERO (H2,NTOT1)
|
|---|
| 162 | CALL RZERO (H2INV,NTOT1)
|
|---|
| 163 | CALL GAMMAM2 (EIGGS,H1,H2,H2INV,INLOC)
|
|---|
| 164 | IF (NIO.EQ.0 .AND. ISTEP.LE.0) WRITE (6,*) 'EIGGS = ',EIGGS
|
|---|
| 165 | ENDIF
|
|---|
| 166 | C
|
|---|
| 167 | IF (IFGE) THEN
|
|---|
| 168 | INLOC = 1
|
|---|
| 169 | CALL RZERO (H1,NTOT1)
|
|---|
| 170 | CALL RONE (H2,NTOT1)
|
|---|
| 171 | CALL RONE (H2INV,NTOT1)
|
|---|
| 172 | CALL GAMMAM2 (EIGGE,H1,H2,H2INV,INLOC)
|
|---|
| 173 | IF (NIO.EQ.0 .AND. ISTEP.LE.0) WRITE (6,*) 'EIGGE = ',EIGGE
|
|---|
| 174 | ENDIF
|
|---|
| 175 | C
|
|---|
| 176 | IF (IFGST) THEN
|
|---|
| 177 | INLOC = -1
|
|---|
| 178 | CALL SETHLM (H1,H2,INLOC)
|
|---|
| 179 | CALL INVERS2 (H2INV,H2,NTOT1)
|
|---|
| 180 | CALL GAMMAM2 (EIGGST,H1,H2,H2INV,INLOC)
|
|---|
| 181 | IF (NIO.EQ.0 .AND. ISTEP.LE.0) WRITE (6,*) 'EIGGST = ',EIGGST
|
|---|
| 182 | ENDIF
|
|---|
| 183 | C
|
|---|
| 184 | IF (IFGA) THEN
|
|---|
| 185 | NTOT1 = lx1*ly1*lz1*NELV
|
|---|
| 186 | CALL RONE (H1,NTOT1)
|
|---|
| 187 | CALL RZERO (H2,NTOT1)
|
|---|
| 188 | IF (.NOT.IFSTRS) THEN
|
|---|
| 189 | CALL GAMMAM1 (EIGGA1,V1MASK,VMULT,H1,H2,1)
|
|---|
| 190 | CALL GAMMAM1 (EIGGA2,V2MASK,VMULT,H1,H2,2)
|
|---|
| 191 | EIGGA3 = 0.
|
|---|
| 192 | IF (ldim.EQ.3)
|
|---|
| 193 | $ CALL GAMMAM1 (EIGGA3,V3MASK,VMULT,H1,H2,3)
|
|---|
| 194 | EIGGA = MAX (EIGGA1,EIGGA2,EIGGA3)
|
|---|
| 195 | ELSE
|
|---|
| 196 | CALL GAMMASF (H1,H2)
|
|---|
| 197 | ENDIF
|
|---|
| 198 | ENDIF
|
|---|
| 199 | C
|
|---|
| 200 | RETURN
|
|---|
| 201 | END
|
|---|
| 202 | C
|
|---|
| 203 | SUBROUTINE ALPHAM1 (ALPHA,MASK,MULT,H1,H2,ISD)
|
|---|
| 204 | C---------------------------------------------------------------------------
|
|---|
| 205 | C
|
|---|
| 206 | C Compute minimum eigenvalue, ALPHA, of the discrete Helmholtz operator
|
|---|
| 207 | C
|
|---|
| 208 | C---------------------------------------------------------------------------
|
|---|
| 209 | INCLUDE 'SIZE'
|
|---|
| 210 | INCLUDE 'MASS'
|
|---|
| 211 | INCLUDE 'TSTEP'
|
|---|
| 212 | C
|
|---|
| 213 | REAL MASK (LX1,LY1,LZ1,1)
|
|---|
| 214 | REAL MULT (LX1,LY1,LZ1,1)
|
|---|
| 215 | REAL H1 (LX1,LY1,LZ1,1)
|
|---|
| 216 | REAL H2 (LX1,LY1,LZ1,1)
|
|---|
| 217 | COMMON /SCREV/ X1 (LX1,LY1,LZ1,LELT)
|
|---|
| 218 | $ , Y1 (LX1,LY1,LZ1,LELT)
|
|---|
| 219 | CHARACTER NAME*4
|
|---|
| 220 | C
|
|---|
| 221 | IF (IMESH.EQ.1) NEL = NELV
|
|---|
| 222 | IF (IMESH.EQ.2) NEL = NELT
|
|---|
| 223 | IF (ISD .EQ.1) NAME = 'EVVX'
|
|---|
| 224 | IF (ISD .EQ.2) NAME = 'EVVX'
|
|---|
| 225 | IF (ISD .EQ.3) NAME = 'EVVX'
|
|---|
| 226 | C
|
|---|
| 227 | NXYZ1 = lx1*ly1*lz1
|
|---|
| 228 | NTOT1 = NXYZ1*NEL
|
|---|
| 229 | EVNEW = 0.
|
|---|
| 230 | CALL STARTX1 (X1,Y1,MASK,MULT,NEL)
|
|---|
| 231 | C
|
|---|
| 232 | DO 1000 ITER=1,NMXE
|
|---|
| 233 | CALL AXHELM (Y1,X1,H1,H2,IMESH,ISD)
|
|---|
| 234 | CALL COL2 (Y1,MASK,NTOT1)
|
|---|
| 235 | CALL DSSUM (Y1,lx1,ly1,lz1)
|
|---|
| 236 | RQ = GLSC3 (X1,Y1,MULT,NTOT1)
|
|---|
| 237 | EVOLD = EVNEW
|
|---|
| 238 | EVNEW = RQ
|
|---|
| 239 | write (6,*) 'alphaa = ',rq
|
|---|
| 240 | CRIT = ABS((EVNEW-EVOLD)/EVNEW)
|
|---|
| 241 | IF (CRIT.LT.TOLEV) GOTO 2000
|
|---|
| 242 | CALL COL2 (X1,BM1,NTOT1)
|
|---|
| 243 | CALL HMHOLTZ ('NOMG',Y1,X1,H1,H2,MASK,MULT,
|
|---|
| 244 | $ IMESH,TOLHE,NMXE,ISD)
|
|---|
| 245 | CALL COL3 (X1,BM1,Y1,NTOT1)
|
|---|
| 246 | CALL DSSUM (X1,lx1,ly1,lz1)
|
|---|
| 247 | YY = GLSC3 (X1,Y1,MULT,NTOT1)
|
|---|
| 248 | YNORM = 1./SQRT(YY)
|
|---|
| 249 | CALL CMULT (Y1,YNORM,NTOT1)
|
|---|
| 250 | CALL COPY (X1,Y1,NTOT1)
|
|---|
| 251 | 1000 CONTINUE
|
|---|
| 252 | 2000 CONTINUE
|
|---|
| 253 | C
|
|---|
| 254 | ALPHA = RQ
|
|---|
| 255 | RETURN
|
|---|
| 256 | END
|
|---|
| 257 | C
|
|---|
| 258 | SUBROUTINE GAMMAM1 (GAMMA,MASK,MULT,H1,H2,ISD)
|
|---|
| 259 | C---------------------------------------------------------------------------
|
|---|
| 260 | C
|
|---|
| 261 | C Compute maximum eigenvalue of the discrete Helmholtz operator
|
|---|
| 262 | C
|
|---|
| 263 | C---------------------------------------------------------------------------
|
|---|
| 264 | INCLUDE 'SIZE'
|
|---|
| 265 | INCLUDE 'MASS'
|
|---|
| 266 | INCLUDE 'TSTEP'
|
|---|
| 267 | C
|
|---|
| 268 | REAL MASK (LX1,LY1,LZ1,1)
|
|---|
| 269 | REAL MULT (LX1,LY1,LZ1,1)
|
|---|
| 270 | REAL H1 (LX1,LY1,LZ1,1)
|
|---|
| 271 | REAL H2 (LX1,LY1,LZ1,1)
|
|---|
| 272 | COMMON /SCREV/ X1 (LX1,LY1,LZ1,LELT)
|
|---|
| 273 | $ , Y1 (LX1,LY1,LZ1,LELT)
|
|---|
| 274 | C
|
|---|
| 275 | IF (IMESH.EQ.1) NEL = NELV
|
|---|
| 276 | IF (IMESH.EQ.2) NEL = NELT
|
|---|
| 277 | NXYZ1 = lx1*ly1*lz1
|
|---|
| 278 | NTOT1 = NXYZ1*NEL
|
|---|
| 279 | EVNEW = 0.
|
|---|
| 280 | c pff (2/15/96)
|
|---|
| 281 | if (isd.eq.1) CALL STARTX1 (X1,Y1,MASK,MULT,NEL)
|
|---|
| 282 | C
|
|---|
| 283 | DO 1000 ITER=1,NMXE
|
|---|
| 284 | CALL AXHELM (Y1,X1,H1,H2,IMESH,ISD)
|
|---|
| 285 | CALL COL2 (Y1,MASK,NTOT1)
|
|---|
| 286 | CALL DSSUM (Y1,lx1,ly1,lz1)
|
|---|
| 287 | RQ = GLSC3 (X1,Y1,MULT,NTOT1)
|
|---|
| 288 | EVOLD = EVNEW
|
|---|
| 289 | EVNEW = RQ
|
|---|
| 290 | CRIT = ABS((EVNEW-EVOLD)/EVNEW)
|
|---|
| 291 | C
|
|---|
| 292 | C HMT removed
|
|---|
| 293 | C
|
|---|
| 294 | C if (nio.eq.0) then
|
|---|
| 295 | C write(6,*) iter,' eig_max A:',evnew,crit,tolev
|
|---|
| 296 | C endif
|
|---|
| 297 | IF (CRIT.LT.TOLEV) GOTO 2000
|
|---|
| 298 | CALL COL3 (X1,BINVM1,Y1,NTOT1)
|
|---|
| 299 | XX = GLSC3 (X1,Y1,MULT,NTOT1)
|
|---|
| 300 | XNORM = 1./SQRT(XX)
|
|---|
| 301 | CALL CMULT (X1,XNORM,NTOT1)
|
|---|
| 302 | 1000 CONTINUE
|
|---|
| 303 | 2000 CONTINUE
|
|---|
| 304 | C
|
|---|
| 305 | GAMMA = RQ
|
|---|
| 306 | RETURN
|
|---|
| 307 | END
|
|---|
| 308 | C
|
|---|
| 309 | SUBROUTINE ALPHAM2 (ALPHA,H1,H2,H2INV,INLOC)
|
|---|
| 310 | C----------------------------------------------------------------------
|
|---|
| 311 | C
|
|---|
| 312 | C Compute minimum eigenvalue, ALPHA, of one of the matrices
|
|---|
| 313 | C defined on the pressure mesh:
|
|---|
| 314 | C INLOC = 0 : DA-1DT
|
|---|
| 315 | C INLOC = 1 : DB-1DT
|
|---|
| 316 | C INLOC = -1 : D(A+B/DT)-1DT
|
|---|
| 317 | C
|
|---|
| 318 | C----------------------------------------------------------------------
|
|---|
| 319 | INCLUDE 'SIZE'
|
|---|
| 320 | INCLUDE 'MASS'
|
|---|
| 321 | INCLUDE 'TSTEP'
|
|---|
| 322 | C
|
|---|
| 323 | REAL H1 (LX1,LY1,LZ1,1)
|
|---|
| 324 | REAL H2 (LX1,LY1,LZ1,1)
|
|---|
| 325 | REAL H2INV(LX1,LY1,LZ1,1)
|
|---|
| 326 | COMMON /SCREV/ X2 (LX2,LY2,LZ2,LELV)
|
|---|
| 327 | $ , Y2 (LX2,LY2,LZ2,LELV)
|
|---|
| 328 | C
|
|---|
| 329 | NTOT2 = lx2*ly2*lz2*NELV
|
|---|
| 330 | EVNEW = 0.
|
|---|
| 331 | CALL STARTX2 (X2,Y2)
|
|---|
| 332 | C
|
|---|
| 333 | DO 1000 ITER=1,NMXE
|
|---|
| 334 | CALL CDABDTP (Y2,X2,H1,H2,H2INV,INLOC)
|
|---|
| 335 | RQ = GLSC2 (X2,Y2,NTOT2)
|
|---|
| 336 | EVOLD = EVNEW
|
|---|
| 337 | EVNEW = RQ
|
|---|
| 338 | c write (6,*) 'new eigenvalue ************* eigas = ',evnew
|
|---|
| 339 | CRIT = ABS((EVNEW-EVOLD)/EVNEW)
|
|---|
| 340 | IF (CRIT.LT.TOLEV) GOTO 2000
|
|---|
| 341 | CALL COL2 (X2,BM2,NTOT2)
|
|---|
| 342 | CALL UZAWA (X2,H1,H2,H2INV,INLOC,ICG)
|
|---|
| 343 | CALL COL3 (Y2,BM2,X2,NTOT2)
|
|---|
| 344 | XX = GLSC2 (X2,Y2,NTOT2)
|
|---|
| 345 | XNORM = 1./SQRT(XX)
|
|---|
| 346 | CALL CMULT (X2,XNORM,NTOT2)
|
|---|
| 347 | 1000 CONTINUE
|
|---|
| 348 | 2000 CONTINUE
|
|---|
| 349 | C
|
|---|
| 350 | ALPHA = RQ
|
|---|
| 351 | RETURN
|
|---|
| 352 | END
|
|---|
| 353 | C
|
|---|
| 354 | SUBROUTINE GAMMAM2 (GAMMA,H1,H2,H2INV,INLOC)
|
|---|
| 355 | C-------------------------------------------------------------------
|
|---|
| 356 | C
|
|---|
| 357 | C Compute maximum eigenvalue, GAMMA, of one of the matrices
|
|---|
| 358 | C defined on the pressure mesh:
|
|---|
| 359 | C INLOC = 0 : DA-1DT
|
|---|
| 360 | C INLOC = 1 : DB-1DT
|
|---|
| 361 | C INLOC = -1 : D(A+B/DT)-1DT
|
|---|
| 362 | C
|
|---|
| 363 | C-------------------------------------------------------------------
|
|---|
| 364 | INCLUDE 'SIZE'
|
|---|
| 365 | INCLUDE 'MASS'
|
|---|
| 366 | INCLUDE 'TSTEP'
|
|---|
| 367 | C
|
|---|
| 368 | REAL H1 (LX1,LY1,LZ1,1)
|
|---|
| 369 | REAL H2 (LX1,LY1,LZ1,1)
|
|---|
| 370 | REAL H2INV (LX1,LY1,LZ1,1)
|
|---|
| 371 | COMMON /SCREV/ X2 (LX2,LY2,LZ2,LELV)
|
|---|
| 372 | $ , Y2 (LX2,LY2,LZ2,LELV)
|
|---|
| 373 | C
|
|---|
| 374 | NTOT2 = lx2*ly2*lz2*NELV
|
|---|
| 375 | EVNEW = 0.
|
|---|
| 376 | CALL STARTX2 (X2,Y2)
|
|---|
| 377 | C
|
|---|
| 378 | DO 1000 ITER=1,NMXE
|
|---|
| 379 | CALL CDABDTP (Y2,X2,H1,H2,H2INV,INLOC)
|
|---|
| 380 | RQ = GLSC2 (X2,Y2,NTOT2)
|
|---|
| 381 | EVOLD = EVNEW
|
|---|
| 382 | EVNEW = RQ
|
|---|
| 383 | CRIT = ABS((EVNEW-EVOLD)/EVNEW)
|
|---|
| 384 | IF (CRIT.LT.TOLEV) GOTO 2000
|
|---|
| 385 | CALL INVCOL3 (X2,Y2,BM2,NTOT2)
|
|---|
| 386 | XX = GLSC2 (Y2,X2,NTOT2)
|
|---|
| 387 | XNORM = 1./SQRT(XX)
|
|---|
| 388 | CALL CMULT (X2,XNORM,NTOT2)
|
|---|
| 389 | 1000 CONTINUE
|
|---|
| 390 | 2000 CONTINUE
|
|---|
| 391 | C
|
|---|
| 392 | GAMMA = RQ
|
|---|
| 393 | RETURN
|
|---|
| 394 | END
|
|---|
| 395 | C
|
|---|
| 396 | c-----------------------------------------------------------------------
|
|---|
| 397 | SUBROUTINE STARTX1 (X1,Y1,MASK,MULT,NEL)
|
|---|
| 398 |
|
|---|
| 399 | c Compute startvector for finding an eigenvalue on mesh 1.
|
|---|
| 400 | c Normalization: XT*B*X = 1
|
|---|
| 401 |
|
|---|
| 402 | INCLUDE 'SIZE'
|
|---|
| 403 | INCLUDE 'MASS'
|
|---|
| 404 |
|
|---|
| 405 | REAL X1 (LX1,LY1,LZ1,1)
|
|---|
| 406 | REAL Y1 (LX1,LY1,LZ1,1)
|
|---|
| 407 | REAL MASK (LX1,LY1,LZ1,1)
|
|---|
| 408 | REAL MULT (LX1,LY1,LZ1,1)
|
|---|
| 409 |
|
|---|
| 410 | NTOT1 = lx1*ly1*lz1*NEL
|
|---|
| 411 | CALL COPY (X1,BM1,NTOT1)
|
|---|
| 412 |
|
|---|
| 413 |
|
|---|
| 414 | call rand_fld_h1(y1) ! pff 3/21/12
|
|---|
| 415 | small = 0.001*glamax(x1,ntot1)
|
|---|
| 416 | call add2s2(x1,y1,small,ntot1)
|
|---|
| 417 |
|
|---|
| 418 |
|
|---|
| 419 | CALL COL2 (X1,MASK,NTOT1)
|
|---|
| 420 | CALL COL3 (Y1,BM1,X1,NTOT1)
|
|---|
| 421 | CALL DSSUM (Y1,lx1,ly1,lz1)
|
|---|
| 422 | XX = GLSC3 (X1,Y1,MULT,NTOT1)
|
|---|
| 423 | XNORM = 1./SQRT(XX)
|
|---|
| 424 | CALL CMULT (X1,XNORM,NTOT1)
|
|---|
| 425 |
|
|---|
| 426 | RETURN
|
|---|
| 427 | END
|
|---|
| 428 | c-----------------------------------------------------------------------
|
|---|
| 429 | SUBROUTINE STARTX2 (X2,Y2)
|
|---|
| 430 | C------------------------------------------------------------------
|
|---|
| 431 | C
|
|---|
| 432 | C Compute startvector for finding an eigenvalue on mesh 2.
|
|---|
| 433 | C
|
|---|
| 434 | C------------------------------------------------------------------
|
|---|
| 435 | INCLUDE 'SIZE'
|
|---|
| 436 | INCLUDE 'MASS'
|
|---|
| 437 | C
|
|---|
| 438 | REAL X2 (LX2,LY2,LZ2,LELV)
|
|---|
| 439 | REAL Y2 (LX2,LY2,LZ2,LELV)
|
|---|
| 440 | C
|
|---|
| 441 | NXYZ2 = lx2*ly2*lz2
|
|---|
| 442 | NTOT2 = NXYZ2*NELV
|
|---|
| 443 | ICONST = 0
|
|---|
| 444 | IF ((ldim .EQ. 2).AND.(NXYZ2 .EQ. 4)) ICONST = 1
|
|---|
| 445 | IF ((ldim .EQ. 3).AND.(NXYZ2 .EQ. 8)) ICONST = 1
|
|---|
| 446 | C
|
|---|
| 447 | IF (ICONST .EQ. 1) THEN
|
|---|
| 448 | DO 1000 IEL=1,NELV
|
|---|
| 449 | DO 1000 K=1,lz2
|
|---|
| 450 | DO 1000 J=1,ly2
|
|---|
| 451 | DO 1000 I=1,lx2
|
|---|
| 452 | X2(I,J,K,IEL) = I*J*K
|
|---|
| 453 | 1000 CONTINUE
|
|---|
| 454 | ELSE
|
|---|
| 455 | CALL COPY (X2,BM2,NTOT2)
|
|---|
| 456 | ENDIF
|
|---|
| 457 | C
|
|---|
| 458 | call ortho (x2)
|
|---|
| 459 | CALL COL3 (Y2,BM2,X2,NTOT2)
|
|---|
| 460 | XX = GLSC2 (X2,Y2,NTOT2)
|
|---|
| 461 | XNORM = 1./SQRT(XX)
|
|---|
| 462 | CALL CMULT (X2,XNORM,NTOT2)
|
|---|
| 463 | C
|
|---|
| 464 | RETURN
|
|---|
| 465 | END
|
|---|