Line data Source code
1 : MODULE m_findlim
2 : c......................................................findlim
3 : c finds turning point and practical "infinity"
4 : c
5 : CONTAINS
6 10 : SUBROUTINE findlim(
7 10 : > mrad,lll,ec,vv,rc,
8 : < nmatch,nzero)
9 :
10 : USE m_constants
11 :
12 : IMPLICIT NONE
13 : C ..
14 : C .. Scalar Arguments ..
15 : REAL, INTENT (IN) :: ec
16 : INTEGER, INTENT (IN) :: mrad,lll
17 : INTEGER, INTENT (OUT):: nmatch,nzero
18 : C ..
19 : C .. Array Arguments ..
20 : REAL , INTENT (IN) :: rc(mrad),vv(mrad)
21 : C ..
22 : C .. Local Scalars ..
23 : REAL unend
24 : INTEGER n,nn
25 : C ..
26 : C .. Intrinsic Functions ..
27 : INTRINSIC mod
28 : C ..
29 : C .. Data statements ..
30 : DATA unend/150.0/
31 : C ..
32 : C --------------------
33 : C---> FIND NZERO
34 : C --------------------
35 5616 : DO 10 n = 1, (mrad-1)
36 5616 : IF ((vv(n)-ec)*rc(n)**2.GT.unend) THEN
37 10 : IF (mod(n,2).EQ.0) THEN
38 2 : nzero = n + 1
39 : ELSE
40 8 : nzero = n
41 : END IF
42 : GO TO 20
43 : END IF
44 0 : 10 CONTINUE
45 0 : nzero = mrad - 1
46 : WRITE (oUnit,FMT=
47 : +'('' NRC='',I4,'' L='',I2,
48 0 : + '' NZERO SET TO (NRC-1) ='',I4)') mrad,lll,(mrad-1)
49 : 20 CONTINUE
50 : C --------------------
51 : C---> FIND NMATCH
52 : C --------------------
53 10 : n = nzero + 1
54 802 : DO nn = 1,nzero
55 802 : n = n - 1
56 : ! IF ( (vv(n) + lll/rc(n)**2 - ec) < 0.0 ) THEN
57 802 : IF ((vv(n)-ec).LT.0.0) THEN
58 10 : nmatch = n
59 10 : RETURN
60 : END IF
61 : ENDDO
62 : WRITE (oUnit,FMT=
63 : +'(//,'' STOP IN <<CORE>>'',/,
64 : + '' NRC='',I2,'' L='',I2,/,
65 0 : + '' NO MATCHING-RADIUS FOUND FOR EC='',F10.3)') mrad,lll,ec
66 :
67 :
68 :
69 : END SUBROUTINE findlim
70 : END MODULE m_findlim
|