10 SUBROUTINE bicub_derivative ( ya, x1a, x2a, y1a, y2a, y12a, i_max, k_max )
16 REAL,
INTENT(IN) :: ya(r_grid,ndft)
17 REAL,
INTENT(IN) :: x1a(r_grid)
18 REAL,
INTENT(IN) :: x2a(ndft)
19 REAL,
INTENT(OUT) :: y1a(r_grid,ndft)
20 REAL,
INTENT(OUT) :: y2a(r_grid,ndft)
21 REAL,
INTENT(OUT) :: y12a(r_grid,ndft)
22 INTEGER,
INTENT(IN) :: i_max
23 INTEGER,
INTENT(IN) :: k_max
32 y1a(i,k) = (ya(i+1,k)-ya(i-1,k)) / (x1a(i+1)-x1a(i-1))
33 y2a(i,k) = (ya(i,k+1)-ya(i,k-1)) / (x2a(k+1)-x2a(k-1))
34 y12a(i,k)= (ya(i+1,k+1)-ya(i+1,k-1)-ya(i-1,k+1)+ya(i-1,k-1)) &
35 /((x1a(i+1)-x1a(i-1))*(x2a(k+1)-x2a(k-1)))
56 y1a(i,k) = (ya(i,k)-ya(i-1,k)) / (x1a(i)-x1a(i-1))
57 y2a(i,k) = (ya(i,k+1)-ya(i,k-1)) / (x2a(k+1)-x2a(k-1))
58 y12a(i,k)= (ya(i,k+1)-ya(i,k-1)-ya(i-1,k+1)+ya(i-1,k-1)) &
59 /((x1a(i)-x1a(i-1))*(x2a(k+1)-x2a(k-1)))
65 y1a(i,k) = (ya(i+1,k)-ya(i-1,k)) / (x1a(i+1)-x1a(i-1))
66 y2a(i,k) = (ya(i,k)-ya(i,k-1)) / (x2a(k)-x2a(k-1))
67 y12a(i,k)= (ya(i+1,k)-ya(i+1,k-1)-ya(i-1,k)+ya(i-1,k-1)) &
68 /((x1a(i+1)-x1a(i-1))*(x2a(k)-x2a(k-1)))
73 y1a(i,k) = (ya(i,k)-ya(i-1,k)) / (x1a(i)-x1a(i-1))
74 y2a(i,k) = (ya(i,k)-ya(i,k-1)) / (x2a(k)-x2a(k-1))
75 y12a(i,k)= (ya(i,k)-ya(i,k-1)-ya(i-1,k)+ya(i-1,k-1)) &
76 /((x1a(i)-x1a(i-1))*(x2a(k)-x2a(k-1)))
78 END SUBROUTINE bicub_derivative
85 SUBROUTINE bicub_c ( ya, x1a, x2a, y1a, y2a, y12a, c_bicub, i_max, k_max )
91 REAL,
INTENT(IN) :: ya(r_grid,ndft)
92 REAL,
INTENT(IN) :: x1a(r_grid)
93 REAL,
INTENT(IN) :: x2a(ndft)
94 REAL,
INTENT(IN) :: y1a(r_grid,ndft)
95 REAL,
INTENT(IN) :: y2a(r_grid,ndft)
96 REAL,
INTENT(IN) :: y12a(r_grid,ndft)
97 REAL,
INTENT(OUT) :: c_bicub(r_grid,ndft,4,4)
98 INTEGER,
INTENT(IN) :: i_max
99 INTEGER,
INTENT(IN) :: k_max
102 INTEGER :: i, k, m, n
103 REAL :: y(4),y1(4),y2(4),y12(4),x1l,x1u,x2l,x2u
134 CALL bcucof(y,y1,y2,y12,x1u-x1l,x2u-x2l,c)
137 c_bicub(i,k,m,n)=c(m,n)
144 END SUBROUTINE bicub_c
150 SUBROUTINE bcucof(y,y1,y2,y12,d1,d2,c)
155 REAL,
INTENT(IN) :: y(4)
156 REAL,
INTENT(IN) :: y1(4)
157 REAL,
INTENT(IN) :: y2(4)
158 REAL,
INTENT(IN) :: y12(4)
159 REAL,
INTENT(IN) :: d1
160 REAL,
INTENT(IN) :: d2
161 REAL,
INTENT(OUT) :: c(4,4)
165 REAL :: d1d2,xx,cl(16),wt(16,16),x(16)
167 DATA wt/1,0,-3,2,4*0,-3,0,9,-6,2,0,-6,4,8*0,3,0,-9,6,-2,0,6,-4,10* &
168 0,9,-6,2*0,-6,4,2*0,3,-2,6*0,-9,6,2*0,6,-4,4*0,1,0,-3,2,-2,0,6,-4, &
169 1,0,-3,2,8*0,-1,0,3,-2,1,0,-3,2,10*0,-3,2,2*0,3,-2,6*0,3,-2,2*0, &
170 -6,4,2*0,3,-2,0,1,-2,1,5*0,-3,6,-3,0,2,-4,2,9*0,3,-6,3,0,-2,4,-2, &
171 10*0,-3,3,2*0,2,-2,2*0,-1,1,6*0,3,-3,2*0,-2,2,5*0,1,-2,1,0,-2,4, &
172 -2,0,1,-2,1,9*0,-1,2,-1,0,1,-2,1,10*0,1,-1,2*0,-1,1,6*0,-1,1,2*0, &
181 x(i+12) = y12(i)*d1d2
186 xx = xx + wt(i,k) * x(k)
198 END SUBROUTINE bcucof
205 SUBROUTINE bi_cub_spline ( rho_rdf, xg, ya, x1a, x2a, y1a, y2a, y12a, &
206 c_bicub, rdf, dg_drho, dg_dr, i_max, ih, k )
212 REAL,
INTENT(IN OUT) :: rho_rdf
213 REAL,
INTENT(IN OUT) :: xg
214 REAL,
INTENT(IN) :: ya(r_grid,ndft)
215 REAL,
INTENT(IN) :: x1a(r_grid)
216 REAL,
INTENT(IN) :: x2a(ndft)
217 REAL,
INTENT(IN) :: y1a(r_grid,ndft)
218 REAL,
INTENT(IN) :: y2a(r_grid,ndft)
219 REAL,
INTENT(IN) :: y12a(r_grid,ndft)
220 REAL,
INTENT(IN) :: c_bicub(r_grid,ndft,4,4)
221 REAL,
INTENT(OUT) :: rdf
222 REAL,
INTENT(OUT) :: dg_drho
223 REAL,
INTENT(OUT) :: dg_dr
224 INTEGER,
INTENT(IN OUT) :: i_max
226 INTEGER,
INTENT(OUT) :: ih
227 INTEGER,
INTENT(IN) :: k
232 REAL :: y(4),y1(4),y2(4),y12(4),x1l,x1u,x2l,x2u
236 IF ( rho_rdf < x1a(1) )
THEN 242 IF ( x1a(ih) <= rho_rdf .AND. rho_rdf < x1a(ih+1) )
GO TO 10
244 IF ( x1a(ih-1) <= rho_rdf .AND. rho_rdf < x1a(ih) )
THEN 250 CALL hunt ( x1a, i_max, rho_rdf, ih )
253 IF ( x2a(k) /= xg )
THEN 270 y1(3) = y1a(ih+1,k+1)
275 y2(3) = y2a(ih+1,k+1)
279 y12(2) = y12a(ih+1,k)
280 y12(3) = y12a(ih+1,k+1)
281 y12(4) = y12a(ih,k+1)
290 c(m,n) = c_bicub( ih, k, m, n )
293 CALL bcuint ( x1l, x1u, x2l, x2u, rho_rdf, xg, c, rdf, dg_drho, dg_dr )
295 END SUBROUTINE bi_cub_spline
307 SUBROUTINE hunt ( xx, n, x, jlo )
312 INTEGER,
INTENT(IN) :: n
313 INTEGER,
INTENT(OUT) :: jlo
314 REAL,
INTENT(IN) :: xx(n)
318 INTEGER :: inc,jhi,jm
322 ascnd = xx(n) >= xx(1)
323 IF( jlo <= 0 .OR. jlo > n )
THEN 329 IF( x >= xx(jlo) .EQV. ascnd )
THEN 333 ELSE IF ( x >= xx(jhi) .EQV. ascnd )
THEN 343 ELSE IF ( x < xx(jlo) .EQV. ascnd )
THEN 349 3
IF (jhi-jlo == 1 )
THEN 350 IF ( x == xx(n)) jlo = n - 1
351 IF ( x == xx(1) ) jlo = 1
354 jm = ( jhi + jlo ) / 2
355 IF ( x >= xx(jm) .EQV. ascnd )
THEN 370 SUBROUTINE bcuint ( x1l, x1u, x2l, x2u, x1, x2, c, ansy, ansy1, ansy2 )
379 REAL,
INTENT(IN OUT) :: x1l
380 REAL,
INTENT(IN OUT) :: x1u
381 REAL,
INTENT(IN OUT) :: x2l
382 REAL,
INTENT(IN OUT) :: x2u
383 REAL,
INTENT(IN OUT) :: x1
384 REAL,
INTENT(IN OUT) :: x2
385 REAL,
INTENT(IN) :: c(4,4)
386 REAL,
INTENT(OUT) :: ansy
387 REAL,
INTENT(OUT) :: ansy1
388 REAL,
INTENT(OUT) :: ansy2
398 IF ( x1u == x1l .OR. x2u == x2l ) pause
'bad input in bcuint' 399 t = (x1-x1l) / (x1u-x1l)
400 u = (x2-x2l) / (x2u-x2l)
405 ansy = t *ansy + ( (c(i,4)*u + c(i,3))*u+c(i,2) )*u + c(i,1)
406 ansy2 = t *ansy2 + ( 3.*c(i,4)*u+2.*c(i,3) )*u + c(i,2)
407 ansy1 = u *ansy1 + ( 3.*c(4,i)*t+2.*c(3,i) )*t + c(2,i)
409 ansy1 = ansy1 / (x1u-x1l)
410 ansy2 = ansy2 / (x2u-x2l)
412 END SUBROUTINE bcuint
430 SUBROUTINE spline ( x, y, n, yp1, ypn, y2 )
435 INTEGER,
INTENT(IN) :: n
436 REAL,
INTENT(IN) :: x(n)
437 REAL,
INTENT(IN) :: y(n)
438 REAL,
INTENT(IN) :: yp1
439 REAL,
INTENT(IN) :: ypn
440 REAL,
INTENT(OUT) :: y2(n)
443 INTEGER,
PARAMETER :: nmax = 500
445 REAL :: p, qn,
sig, un, u(nmax)
448 IF ( yp1 > 0.99e30 )
THEN 453 u(1) = ( 3.0/(x(2)-x(1)) ) * ( (y(2)-y(1))/(x(2)-x(1))-yp1 )
456 IF ( (x(i+1)-x(i)) == 0.0 .OR. (x(i)-x(i-1)) == 0.0 .OR. (x(i+1)-x(i-1)) == 0.0 )
THEN 457 write (*,*)
'error in spline-interpolation' 460 sig = (x(i)-x(i-1)) / (x(i+1)-x(i-1))
461 p =
sig*y2(i-1) + 2.0
462 y2(i) = (
sig-1.0) / p
463 u(i) = ( 6.0 * ((y(i+1)-y(i))/(x(i+1)-x(i))-(y(i)-y(i-1))/(x(i)-x(i-1))) / (x(i+1)-x(i-1)) &
466 IF ( ypn > 0.99e30 )
THEN 471 un = (3.0/(x(n)-x(n-1))) * (ypn-(y(n)-y(n-1))/(x(n)-x(n-1)))
473 y2(n) = (un-qn*u(n-1)) / (qn*y2(n-1)+1.0)
475 y2(k) = y2(k) * y2(k+1) + u(k)
478 END SUBROUTINE spline
489 SUBROUTINE splint_integral ( xa, ya, y2a, n, xlo, xhi, integral )
494 INTEGER,
INTENT(IN) :: n
495 REAL,
INTENT(IN) :: xa(n)
496 REAL,
INTENT(IN) :: ya(n)
497 REAL,
INTENT(IN) :: y2a(n)
498 REAL,
INTENT(IN) :: xlo
499 REAL,
INTENT(IN) :: xhi
500 REAL,
INTENT(OUT) :: integral
503 INTEGER :: k, khi_l, klo_l, khi_h, klo_h
504 REAL :: xl, xh, h, int, x0, x1, y0, y1, y20, y21
510 1
IF ( khi_l-klo_l > 1 )
THEN 511 k = ( khi_l + klo_l ) / 2
512 IF ( xa(k) > xlo )
THEN 522 2
IF ( khi_h-klo_h > 1 )
THEN 523 k = ( khi_h + klo_h ) / 2
524 IF ( xa(k) > xhi )
THEN 538 IF ( khi_h > khi_l )
THEN 540 ELSE IF ( khi_h == khi_l )
THEN 543 WRITE (*,*)
'error in spline-integration' 547 h = xa(khi_l) - xa(klo_l)
548 IF ( h == 0.0 ) pause
'bad xa input in splint' 565 int = -1.0/h * ( xl*((x1-.5*xl)*y0 + (0.5*xl-x0)*y1) &
566 -y20/24.*(x1-xl)**4 + y20/6.*(0.5*xl*xl-x1*xl)*h*h &
567 +y21/24.*(xl-x0)**4 - y21/6.*(0.5*xl*xl-x0*xl)*h*h )
568 int = int + 1.0/h * ( xh*((x1-.5*xh)*y0 + (0.5*xh-x0)*y1) &
569 -y20/24.*(x1-xh)**4 + y20/6.*(0.5*xh*xh-x1*xh)*h*h &
570 +y21/24.*(xh-x0)**4 - y21/6.*(0.5*xh*xh-x0*xh)*h*h )
572 integral = integral + int
577 IF (khi_h /= (khi_l-1))
GO TO 3
579 END SUBROUTINE splint_integral
588 REAL FUNCTION praxis( t0, machep, h0, n, prin, x, f, fmin )
593 REAL,
INTENT(IN OUT) :: t0
594 REAL,
INTENT(IN) :: machep
595 REAL,
INTENT(IN) :: h0
597 INTEGER,
INTENT(IN OUT) :: prin
598 REAL,
INTENT(IN OUT) :: x(n)
600 REAL,
INTENT(IN OUT) :: fmin
657 INTEGER :: nl,nf,kl,kt,ktm,idim,i,j,k,k2,km1,klmk,ii,im1
658 REAL :: s,sl,dn,dmin,fx,f1,lds,ldt,t,h,sf,df,qf1,qd0, qd1,qa,qb,qc
659 REAL :: m2,m4,small,vsmall,large,vlarge,scbd,ldfac,t2, dni,value
666 REAL :: d(20),y(20),z(20),q0(20),q1(20),v(20,20)
667 COMMON /global/ fx,ldt,dmin,nf,nl /q/ v,q0,q1,qa,qb,qc,qd0,qd1,qf1
679 small = machep*machep
700 IF (illc) ldfac = 0.1
710 IF (h < 100*t) h = 100*t
725 IF (prin > 0)
CALL print(n,x,prin,fmin)
735 CALL min(n,1,2,d(1),s,
value,.false.,f,x,t,machep,h)
736 IF (s > 0.d0)
GO TO 50
740 50
IF (sf > 0.9d0*d(1).AND.0.9d0*sf < d(1))
GO TO 70
751 IF (kt > 0) illc=.true.
759 IF(.NOT.illc)
GO TO 95
761 s=(0.1d0*ldt+t2*(10**kt))*(random(n)-0.5d0)
776 CALL min(n,k2,2,d(k2),s,
value,.false.,f,x,t,machep,h)
780 97 s=d(k2)*((s+z(k2))**2)
785 IF (illc.OR.(df >= abs((100*machep)*fx)))
GO TO 110
792 110
IF (k == 2.AND.prin > 1)
CALL vcprnt(1,d,n)
800 CALL min(n,k2,2,d(k2),s,
value,.false.,f,x,t,machep,h)
813 IF (lds <= small)
GO TO 160
820 IF (klmk < 1)
GO TO 141
837 CALL min(n,k,4,d(k),lds,
value,.true.,f,x,t,machep,h)
838 IF (lds > 0.d0)
GO TO 160
844 IF (ldt < lds) ldt=lds
845 IF (prin > 0)
CALL print(n,x,prin,fmin)
855 IF (ldt > (0.5*t2)) kt=-1
857 IF (kt > ktm)
GO TO 400
863 CALL quad(n,f,x,t,machep,h)
867 IF (dn < d(i)) dn=d(i)
869 IF (prin > 3)
CALL maprnt(1,v,idim,n)
879 IF (scbd <= 1.d0)
GO TO 200
887 IF (z(i) < m4) z(i)=m4
893 IF (z(i) <= scbd)
GO TO 189
919 CALL minfit(idim,n,machep,vsmall,v,d)
923 IF (scbd <= 1.d0)
GO TO 250
945 IF (dni > large)
GO TO 265
946 IF (dni < small)
GO TO 260
956 CALL sort(idim,n,d,v)
958 IF (dmin < small) dmin=small
960 IF (m2*d(1) > dmin) illc=.true.
961 IF (prin > 1.AND.scbd > 1.d0)
CALL vcprnt(2,z,n)
962 IF (prin > 1)
CALL vcprnt(3,d,n)
963 IF (prin > 3)
CALL maprnt(2,v,idim,n)
970 400
IF (prin > 0)
CALL vcprnt(4,x,n)
980 SUBROUTINE minfit(m,n,machep,tol,ab,q)
984 INTEGER,
INTENT(IN OUT) :: m
985 INTEGER,
INTENT(IN) :: n
986 REAL,
INTENT(IN) :: machep
987 REAL,
INTENT(IN OUT) :: tol
988 REAL,
INTENT(IN OUT) :: ab(m,n)
989 REAL,
INTENT(OUT) :: q(n)
990 INTEGER :: i,j,k,l, kk,kt,l2,ll2,ii,lp1
994 REAL :: x,eps,e(20),g,s, f,h,y,c,z,temp
1002 IF (n == 1)
GO TO 200
1014 IF (s < tol)
GO TO 4
1017 IF (f >= 0.d0) g = -g
1024 f = f + ab(k,i)*ab(k,j)
1028 ab(k,j) = ab(k,j) + f*ab(k,i)
1035 s = s + ab(i,j)*ab(i,j)
1038 IF (s < tol)
GO TO 10
1039 IF (i == n)
GO TO 16
1042 IF (f >= 0.d0) g = -g
1044 IF (i == n)
GO TO 10
1052 s = s + ab(j,k)*ab(i,k)
1055 ab(j,k) = ab(j,k) + s*e(k)
1058 10 y = abs(q(i)) + abs(e(i))
1067 IF (g == 0.d0)
GO TO 23
1075 s = s + ab(i,k)*ab(k,j)
1078 ab(k,j) = ab(k,j) + s*ab(k,i)
1095 IF (kt <= 30)
GO TO 102
1098 1000
FORMAT (
' QR FAILED')
1102 IF (abs(e(l)) <= eps)
GO TO 120
1104 IF (abs(q(l-1)) <= eps)
EXIT 1112 IF (abs(f) <= eps)
GO TO 120
1115 IF (abs(f) < abs(g))
GO TO 113
1123 112 h = abs(f)*sqrt(1 + (g/f)**2)
1125 113 h = abs(g)*sqrt(1 + (f/g)**2)
1127 IF (h /= 0.d0)
GO TO 115
1135 IF (l == k)
GO TO 140
1141 f = ((y - z)*(y + z) + (g - h)*(g + h))/(2*h*y)
1142 g = sqrt(f*f + 1.0d0)
1144 IF (f >= 0.d0) temp = f + g
1145 f = ((x - z)*(x + z) + h*(y/temp - h))/x
1150 IF (lp1 > k)
GO TO 133
1156 IF (abs(f) < abs(h))
GO TO 123
1164 122 z = abs(f)*sqrt(1 + (h/f)**2)
1166 123 z = abs(h)*sqrt(1 + (f/h)**2)
1168 IF (z /= 0.d0)
GO TO 125
1180 ab(j,i-1) = x*c + z*s
1181 ab(j,i) = -x*s + z*c
1183 IF (abs(f) < abs(h))
GO TO 129
1191 128 z = abs(f)*sqrt(1 + (h/f)**2)
1193 129 z = abs(h)*sqrt(1 + (f/h)**2)
1195 IF (z /= 0.d0)
GO TO 131
1208 140
IF (z >= 0.d0) cycle
1218 END SUBROUTINE minfit
1227 SUBROUTINE min(n,j,nits,d2,x1,f1,fk,f,x,t,machep,h)
1231 INTEGER,
INTENT(IN) :: n
1234 REAL,
INTENT(IN OUT) :: d2
1235 REAL,
INTENT(IN OUT) :: x1
1236 REAL,
INTENT(IN OUT) :: f1
1239 REAL,
INTENT(IN OUT) :: x(n)
1240 REAL,
INTENT(IN) :: t
1241 REAL,
INTENT(IN) :: machep
1242 REAL,
INTENT(IN) :: h
1249 REAL :: small,sf1,sx1,s,temp, xm,x2,f2,d1
1254 REAL :: v(20,20),q0(20),q1(20),qa,qb,qc,qd0,qd1,qf1
1255 COMMON /global/ fx,ldt,dmin,nf,nl /q/ v,q0,q1,qa,qb,qc,qd0,qd1,qf1
1289 t2 = m4*sqrt(abs(fx)/temp + s*ldt) + m2*ldt
1291 IF (dz.AND.t2 > s) t2 = s
1292 t2 = dmax1(t2,small)
1293 t2 = dmin1(t2,.01d0*h)
1294 IF (.NOT.fk.OR.f1 > fm)
GO TO 2
1297 2
IF (fk.AND.abs(x1) >= t2)
GO TO 3
1299 IF (x1 < 0.d0) temp=-1.d0
1301 f1 = flin(n,j,x1,f,x,nf)
1302 3
IF (f1 > fm)
GO TO 4
1305 4
IF (.NOT.dz)
GO TO 6
1308 IF (f0 >= f1) x2 = 2.d0*x1
1309 f2 = flin(n,j,x2,f,x,nf)
1310 IF (f2 > fm)
GO TO 5
1313 5 d2 = (x2*(f1 - f0)-x1*(f2 - f0))/((x1*x2)*(x1 - x2))
1315 6 d1 = (f1 - f0)/x1 - x1*d2
1318 IF (d2 > small)
GO TO 7
1320 IF (d1 >= 0.d0) x2 = -x2
1322 7 x2 = (-.5d0*d1)/d2
1323 8
IF (abs(x2) <= h)
GO TO 11
1331 11 f2 = flin(n,j,x2,f,x,nf)
1332 IF (k >= nits.OR.f2 <= f0)
GO TO 12
1335 IF (f0 < f1.AND.(x1*x2) > 0.d0)
GO TO 4
1340 IF (f2 <= fm)
GO TO 13
1345 14
IF (abs(x2*(x2 - x1)) <= small)
GO TO 15
1346 d2 = (x2*(f1-f0) - x1*(fm-f0))/((x1*x2)*(x1 - x2))
1348 15
IF (k > 0) d2 = 0.d0
1349 16
IF (d2 <= small) d2 = small
1352 IF (sf1 >= fx)
GO TO 17
1356 17
IF (j == 0)
RETURN 1358 x(i) = x(i) + x1*v(i,j)
1368 SUBROUTINE vcprnt(option,v,n)
1372 REAL,
INTENT(IN OUT) :: v(n)
1377 SELECT CASE ( option )
1388 1
WRITE (6,101) (v(i),i=1,n)
1390 2
WRITE (6,102) (v(i),i=1,n)
1392 3
WRITE (6,103) (v(i),i=1,n)
1394 4
WRITE (6,104) (v(i),i=1,n)
1396 101
FORMAT (/
' THE SECOND DIFFERENCE ARRAY D(*) IS:'/ (e32.14,4e25.14))
1397 102
FORMAT (/
' THE SCALE FACTORS ARE:'/(e32.14,4e25.14))
1398 103
FORMAT (/
' THE APPROXIMATING QUADR. FORM HAS PRINCIPAL VALUES:'/ &
1400 104
FORMAT (/
' X IS:',e26.14/(e32.14))
1401 END SUBROUTINE vcprnt
1408 SUBROUTINE print(n,x,prin,fmin)
1412 REAL,
INTENT(IN OUT) :: x(n)
1413 INTEGER,
INTENT(IN OUT) :: prin
1414 REAL,
INTENT(IN OUT) :: fmin
1421 COMMON /global/ fx,ldt,dmin,nf,nl
1423 WRITE (6,101) nl,nf,fx
1425 IF (fx <= fmin)
GO TO 1
1427 WRITE (6,102) fmin,ln
1429 1
WRITE (6,103) fmin
1430 2
IF (n > 4.AND.prin <= 2)
RETURN 1431 WRITE (6,104) (x(i),i=1,n)
1433 101
FORMAT (/
' AFTER',i6, &
1434 ' LINEAR SEARCHES, THE FUNCTION HAS BEEN EVALUATED',i6, &
1435 ' TIMES. THE SMALLEST VALUE FOUND IS F(X) = ',e21.14)
1436 102
FORMAT (
' LOG (F(X)-',e21.14,
') = ',e21.14)
1437 103
FORMAT (
' LOG (F(X)-',e21.14,
') IS UNDEFINED.')
1438 104
FORMAT (
' X IS:',e26.14/(e32.14))
1439 END SUBROUTINE print
1446 SUBROUTINE maprnt(option,v,m,n)
1450 REAL,
INTENT(IN OUT) :: v(m,n)
1451 INTEGER,
INTENT(IN OUT) :: m
1452 INTEGER,
INTENT(IN) :: n
1461 SELECT CASE ( option )
1468 101
FORMAT (/
' THE NEW DIRECTIONS ARE:')
1471 102
FORMAT (
' AND THE PRINCIPAL AXES:')
1472 3
IF (n < upp) upp = n
1474 WRITE (6,104) (v(i,j),j=low,upp)
1482 104
FORMAT (e32.14,4e25.14)
1483 END SUBROUTINE maprnt
1490 REAL FUNCTION random(naught)
1493 INTEGER,
INTENT(IN OUT) :: naught
1495 REAL :: ran1,ran3(127),half
1496 INTEGER :: i,j,ran2,q,r
1499 SAVE init,ran2,ran1,ran3
1502 r = mod(naught,8190) + 1
1508 r = mod(1756*r,8191)
1510 ran1 = (ran1 + q)*(1.0d0/256)
1515 3
IF (ran2 == 1) ran2 = 128
1517 ran1 = ran1 + ran3(ran2)
1519 IF (ran1 >= 0.d0) half = -half
1522 random = ran1 + .5d0
1532 REAL FUNCTION flin (n,j,l,f,x,nf)
1535 INTEGER,
INTENT(IN) :: n
1536 INTEGER,
INTENT(IN OUT) :: j
1537 REAL,
INTENT(IN) :: l
1539 REAL,
INTENT(IN) :: x(n)
1540 INTEGER,
INTENT(OUT) :: nf
1550 REAL :: v(20,20),q0(20),q1(20),qa,qb,qc,qd0,qd1,qf1
1551 COMMON /q/ v,q0,q1,qa,qb,qc,qd0,qd1,qf1
1556 t(i) = x(i) + l*v(i,j)
1560 2 qa = (l*(l - qd1))/(qd0*(qd0 + qd1))
1561 qb = ((l + qd0)*(qd1 - l))/(qd0*qd1)
1562 qc = (l*(l + qd0))/(qd1*(qd0 + qd1))
1564 t(i) = (qa*q0(i) + qb*x(i)) + qc*q1(i)
1577 SUBROUTINE sort(m,n,d,v)
1580 INTEGER,
INTENT(IN OUT) :: m
1581 INTEGER,
INTENT(IN) :: n
1582 REAL,
INTENT(IN OUT) :: d(n)
1583 REAL,
INTENT(IN OUT) :: v(m,n)
1585 INTEGER :: i,j,k,nm1,ip1
1597 IF (d(j) <= s) cycle
1617 SUBROUTINE quad(n,f,x,t,machep,h)
1620 INTEGER,
INTENT(IN) :: n
1622 REAL,
INTENT(IN OUT) :: x(n)
1623 REAL,
INTENT(IN OUT) :: t
1625 REAL,
INTENT(IN OUT) :: h
1637 REAL :: v(20,20),q0(20),q1(20),qa,qb,qc,qd0,qd1,qf1
1638 COMMON /global/ fx,ldt,dmin,nf,nl /q/ v,q0,q1,qa,qb,qc,qd0,qd1,qf1
1649 qd1 = qd1 + (s-l)**2
1654 IF (qd0 <= 0.d0 .OR. qd1 <= 0.d0 .OR. nl < 3*n*n)
GO TO 2
1656 CALL min(n,0,2,s,l,
value,.true.,f,x,t,machep,h)
1657 qa = (l*(l-qd1))/(qd0*(qd0+qd1))
1658 qb = ((l+qd0)*(qd1-l))/(qd0*qd1)
1659 qc = (l*(l+qd0))/(qd1*(qd0+qd1))
1669 x(i) = (qa*s + qb*x(i)) + qc*q1(i)
double sig
correlated to variance of initial distribution
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW Module DFT_MODULE This module...