]>
Commit | Line | Data |
---|---|---|
ef94df36 | 1 | *CMZ : 23/08/93 13.30.11 by Jonathan Butterworth |
2 | *-- Author : | |
3 | SUBROUTINE MODCHL (N,NADIM,AHESS,ALPHA,Z,IFAIL) | |
4 | INTEGER N, NADIM, IFAIL | |
5 | DOUBLE PRECISION ALPHA | |
6 | DOUBLE PRECISION AHESS(NADIM,N), Z(N) | |
7 | INTEGER I, IB, IP1, J, K | |
8 | DOUBLE PRECISION A, BETA, DB, DI, GAMMA, P1, RMAX, T, W | |
9 | SAVE | |
10 | RMAX= 1.0D+37 | |
11 | IFAIL=0 | |
12 | A=ALPHA | |
13 | K=0 | |
14 | DO 50 I=1,N | |
15 | P1=Z(I) | |
16 | DI=AHESS(I,I) | |
17 | T=A*P1 | |
18 | DB=DI+T*P1 | |
19 | AHESS(I,I)=DB | |
20 | IF(DB.GE.1.0D+0) GOTO 10 | |
21 | IF(DB.GT.0.0D+0.AND.DI.LE.RMAX*DB) GOTO 10 | |
22 | IFAIL=1 | |
23 | RETURN | |
24 | 10 GAMMA=DI/DB | |
25 | BETA=T/DB | |
26 | A=A*GAMMA | |
27 | K=K+I | |
28 | J=K | |
29 | IF(I.EQ.N) GOTO 50 | |
30 | IP1=I+1 | |
31 | IF(GAMMA.GE.2.5D-1) GOTO 30 | |
32 | DO 20 IB=IP1,N | |
33 | T=AHESS(IB,I) | |
34 | AHESS(IB,I)=T*GAMMA+BETA*Z(IB) | |
35 | Z(IB)=Z(IB)-P1*T | |
36 | 20 CONTINUE | |
37 | GOTO 50 | |
38 | 30 DO 40 IB=IP1,N | |
39 | T=AHESS(IB,I) | |
40 | W=Z(IB)-P1*T | |
41 | Z(IB)=W | |
42 | AHESS(IB,I)=BETA*W+T | |
43 | 40 CONTINUE | |
44 | 50 CONTINUE | |
45 | RETURN | |
46 | END |