New changes from l2g

w
This commit is contained in:
2022-09-12 16:40:28 +00:00
parent 78eb7147d0
commit d713d4f61a
110 changed files with 87672 additions and 1098 deletions
+252 -252
View File
@@ -255,282 +255,282 @@
end
!&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
SUBROUTINE svbksb(u,w,v,m,n,mp,np,b,x)
SUBROUTINE svbksb(u,w,v,m,n,mp,np,b,x)
implicit none
INTEGER m,mp,n,np,NMAX
double precision b(mp),u(mp,np),v(np,np),w(np),x(np)
PARAMETER (NMAX=1500)
INTEGER i,j,jj
double precision s,tmp(NMAX)
do 12 j=1,n
INTEGER m,mp,n,np,NMAX
double precision b(mp),u(mp,np),v(np,np),w(np),x(np)
PARAMETER (NMAX=1500)
INTEGER i,j,jj
double precision s,tmp(NMAX)
do 12 j=1,n
s=0.0d0
if(w(j).ne.0.0d0)then
do 11 i=1,m
s=s+u(i,j)*b(i)
11 continue
s=s/w(j)
endif
tmp(j)=s
12 continue
do 14 j=1,n
if(w(j).ne.0.0d0)then
do 11 i=1,m
s=s+u(i,j)*b(i)
11 continue
s=s/w(j)
endif
tmp(j)=s
12 continue
do 14 j=1,n
s=0.0d0
do 13 jj=1,n
s=s+v(j,jj)*tmp(jj)
13 continue
x(j)=s
14 continue
return
END
C (C) Copr. 1986-92 Numerical Recipes Software v%1jw#<0(9p#3.
do 13 jj=1,n
s=s+v(j,jj)*tmp(jj)
13 continue
x(j)=s
14 continue
return
END
C (C) Copr. 1986-92 Numerical Recipes Software v%1jw#<0(9p#3.
SUBROUTINE svdcmp(a,m,n,mp,np,w,v,ierr)
SUBROUTINE svdcmp(a,m,n,mp,np,w,v,ierr)
implicit none
INTEGER m,mp,n,np,NMAX,ierr
double precision a(mp,np),v(np,np),w(np)
PARAMETER (NMAX=1500)
CU USES pythag
INTEGER i,its,j,jj,k,l,nm
double precision anorm,c,f,g,h,s,scale,x,y,z,
& rv1(NMAX),pythag
INTEGER m,mp,n,np,NMAX,ierr
double precision a(mp,np),v(np,np),w(np)
PARAMETER (NMAX=1500)
CU USES pythag
INTEGER i,its,j,jj,k,l,nm
double precision anorm,c,f,g,h,s,scaling,x,y,z,
& rv1(NMAX),pythag
g=0.0d0
scale=0.0d0
scaling=0.0d0
anorm=0.0d0
do 25 i=1,n
l=i+1
rv1(i)=scale*g
do 25 i=1,n
l=i+1
rv1(i)=scaling*g
g=0.0d0
s=0.0d0
scale=0.0d0
if(i.le.m)then
do 11 k=i,m
scale=scale+dabs(a(k,i))
11 continue
if(scale.ne.0.0d0)then
do 12 k=i,m
a(k,i)=a(k,i)/scale
s=s+a(k,i)*a(k,i)
12 continue
f=a(i,i)
g=-dsign(dsqrt(s),f)
h=f*g-s
a(i,i)=f-g
do 15 j=l,n
scaling=0.0d0
if(i.le.m)then
do 11 k=i,m
scaling=scaling+dabs(a(k,i))
11 continue
if(scaling.ne.0.0d0)then
do 12 k=i,m
a(k,i)=a(k,i)/scaling
s=s+a(k,i)*a(k,i)
12 continue
f=a(i,i)
g=-dsign(dsqrt(s),f)
h=f*g-s
a(i,i)=f-g
do 15 j=l,n
s=0.0d0
do 13 k=i,m
s=s+a(k,i)*a(k,j)
13 continue
f=s/h
do 14 k=i,m
a(k,j)=a(k,j)+f*a(k,i)
14 continue
15 continue
do 16 k=i,m
a(k,i)=scale*a(k,i)
16 continue
endif
endif
w(i)=scale*g
do 13 k=i,m
s=s+a(k,i)*a(k,j)
13 continue
f=s/h
do 14 k=i,m
a(k,j)=a(k,j)+f*a(k,i)
14 continue
15 continue
do 16 k=i,m
a(k,i)=scaling*a(k,i)
16 continue
endif
endif
w(i)=scaling*g
g=0.0d0
s=0.0d0
scale=0.0d0
if((i.le.m).and.(i.ne.n))then
do 17 k=l,n
scale=scale+dabs(a(i,k))
17 continue
if(scale.ne.0.0d0)then
do 18 k=l,n
a(i,k)=a(i,k)/scale
s=s+a(i,k)*a(i,k)
18 continue
f=a(i,l)
g=-dsign(dsqrt(s),f)
h=f*g-s
a(i,l)=f-g
do 19 k=l,n
rv1(k)=a(i,k)/h
19 continue
do 23 j=l,m
scaling=0.0d0
if((i.le.m).and.(i.ne.n))then
do 17 k=l,n
scaling=scaling+dabs(a(i,k))
17 continue
if(scaling.ne.0.0d0)then
do 18 k=l,n
a(i,k)=a(i,k)/scaling
s=s+a(i,k)*a(i,k)
18 continue
f=a(i,l)
g=-dsign(dsqrt(s),f)
h=f*g-s
a(i,l)=f-g
do 19 k=l,n
rv1(k)=a(i,k)/h
19 continue
do 23 j=l,m
s=0.0d0
do 21 k=l,n
s=s+a(j,k)*a(i,k)
21 continue
do 22 k=l,n
a(j,k)=a(j,k)+s*rv1(k)
22 continue
23 continue
do 24 k=l,n
a(i,k)=scale*a(i,k)
24 continue
endif
endif
anorm=dmax1(anorm,(dabs(w(i))+dabs(rv1(i))))
25 continue
do 32 i=n,1,-1
if(i.lt.n)then
if(g.ne.0.0d0)then
do 26 j=l,n
v(j,i)=(a(i,j)/a(i,l))/g
26 continue
do 29 j=l,n
do 21 k=l,n
s=s+a(j,k)*a(i,k)
21 continue
do 22 k=l,n
a(j,k)=a(j,k)+s*rv1(k)
22 continue
23 continue
do 24 k=l,n
a(i,k)=scaling*a(i,k)
24 continue
endif
endif
anorm=dmax1(anorm,(dabs(w(i))+dabs(rv1(i))))
25 continue
do 32 i=n,1,-1
if(i.lt.n)then
if(g.ne.0.0d0)then
do 26 j=l,n
v(j,i)=(a(i,j)/a(i,l))/g
26 continue
do 29 j=l,n
s=0.0d0
do 27 k=l,n
s=s+a(i,k)*v(k,j)
27 continue
do 28 k=l,n
v(k,j)=v(k,j)+s*v(k,i)
28 continue
29 continue
endif
do 31 j=l,n
do 27 k=l,n
s=s+a(i,k)*v(k,j)
27 continue
do 28 k=l,n
v(k,j)=v(k,j)+s*v(k,i)
28 continue
29 continue
endif
do 31 j=l,n
v(i,j)=0.0d0
v(j,i)=0.0d0
31 continue
endif
31 continue
endif
v(i,i)=1.0d0
g=rv1(i)
l=i
32 continue
do 39 i=min(m,n),1,-1
l=i+1
g=w(i)
do 33 j=l,n
g=rv1(i)
l=i
32 continue
do 39 i=min(m,n),1,-1
l=i+1
g=w(i)
do 33 j=l,n
a(i,j)=0.0d0
33 continue
if(g.ne.0.0d0)then
g=1.0d0/g
do 36 j=l,n
33 continue
if(g.ne.0.0d0)then
g=1.0d0/g
do 36 j=l,n
s=0.0d0
do 34 k=l,m
s=s+a(k,i)*a(k,j)
34 continue
f=(s/a(i,i))*g
do 35 k=i,m
a(k,j)=a(k,j)+f*a(k,i)
35 continue
36 continue
do 37 j=i,m
a(j,i)=a(j,i)*g
37 continue
else
do 38 j= i,m
do 34 k=l,m
s=s+a(k,i)*a(k,j)
34 continue
f=(s/a(i,i))*g
do 35 k=i,m
a(k,j)=a(k,j)+f*a(k,i)
35 continue
36 continue
do 37 j=i,m
a(j,i)=a(j,i)*g
37 continue
else
do 38 j= i,m
a(j,i)=0.0d0
38 continue
endif
38 continue
endif
a(i,i)=a(i,i)+1.0d0
39 continue
do 49 k=n,1,-1
do 48 its=1,30
do 41 l=k,1,-1
nm=l-1
if((dabs(rv1(l))+anorm).eq.anorm) goto 2
if((dabs(w(nm))+anorm).eq.anorm) goto 1
41 continue
39 continue
do 49 k=n,1,-1
do 48 its=1,30
do 41 l=k,1,-1
nm=l-1
if((dabs(rv1(l))+anorm).eq.anorm) goto 2
if((dabs(w(nm))+anorm).eq.anorm) goto 1
41 continue
1 c=0.0d0
s=1.0d0
do 43 i=l,k
f=s*rv1(i)
rv1(i)=c*rv1(i)
if((dabs(f)+anorm).eq.anorm) goto 2
g=w(i)
h=pythag(f,g)
w(i)=h
h=1.0d0/h
c= (g*h)
s=-(f*h)
do 42 j=1,m
y=a(j,nm)
z=a(j,i)
a(j,nm)=(y*c)+(z*s)
a(j,i)=-(y*s)+(z*c)
42 continue
43 continue
2 z=w(k)
if(l.eq.k)then
if(z.lt.0.0d0)then
w(k)=-z
do 44 j=1,n
v(j,k)=-v(j,k)
44 continue
endif
goto 3
endif
do 43 i=l,k
f=s*rv1(i)
rv1(i)=c*rv1(i)
if((dabs(f)+anorm).eq.anorm) goto 2
g=w(i)
h=pythag(f,g)
w(i)=h
h=1.0d0/h
c= (g*h)
s=-(f*h)
do 42 j=1,m
y=a(j,nm)
z=a(j,i)
a(j,nm)=(y*c)+(z*s)
a(j,i)=-(y*s)+(z*c)
42 continue
43 continue
2 z=w(k)
if(l.eq.k)then
if(z.lt.0.0d0)then
w(k)=-z
do 44 j=1,n
v(j,k)=-v(j,k)
44 continue
endif
goto 3
endif
if(its.eq.30)then
ierr=0
return
endif
x=w(l)
nm=k-1
y=w(nm)
g=rv1(nm)
h=rv1(k)
f=((y-z)*(y+z)+(g-h)*(g+h))/(2.0d0*h*y)
g=pythag(f,1.0d0)
f=((x-z)*(x+z)+h*((y/(f+dsign(g,f)))-h))/x
x=w(l)
nm=k-1
y=w(nm)
g=rv1(nm)
h=rv1(k)
f=((y-z)*(y+z)+(g-h)*(g+h))/(2.0d0*h*y)
g=pythag(f,1.0d0)
f=((x-z)*(x+z)+h*((y/(f+dsign(g,f)))-h))/x
c=1.0d0
s=1.0d0
do 47 j=l,nm
i=j+1
g=rv1(i)
y=w(i)
h=s*g
g=c*g
z=pythag(f,h)
rv1(j)=z
c=f/z
s=h/z
f= (x*c)+(g*s)
g=-(x*s)+(g*c)
h=y*s
y=y*c
do 45 jj=1,n
x=v(jj,j)
z=v(jj,i)
v(jj,j)= (x*c)+(z*s)
v(jj,i)=-(x*s)+(z*c)
45 continue
z=pythag(f,h)
w(j)=z
if(z.ne.0.0d0)then
z=1.0d0/z
c=f*z
s=h*z
endif
f= (c*g)+(s*y)
x=-(s*g)+(c*y)
do 46 jj=1,m
y=a(jj,j)
z=a(jj,i)
a(jj,j)= (y*c)+(z*s)
a(jj,i)=-(y*s)+(z*c)
46 continue
47 continue
do 47 j=l,nm
i=j+1
g=rv1(i)
y=w(i)
h=s*g
g=c*g
z=pythag(f,h)
rv1(j)=z
c=f/z
s=h/z
f= (x*c)+(g*s)
g=-(x*s)+(g*c)
h=y*s
y=y*c
do 45 jj=1,n
x=v(jj,j)
z=v(jj,i)
v(jj,j)= (x*c)+(z*s)
v(jj,i)=-(x*s)+(z*c)
45 continue
z=pythag(f,h)
w(j)=z
if(z.ne.0.0d0)then
z=1.0d0/z
c=f*z
s=h*z
endif
f= (c*g)+(s*y)
x=-(s*g)+(c*y)
do 46 jj=1,m
y=a(jj,j)
z=a(jj,i)
a(jj,j)= (y*c)+(z*s)
a(jj,i)=-(y*s)+(z*c)
46 continue
47 continue
rv1(l)=0.0d0
rv1(k)=f
w(k)=x
48 continue
3 continue
49 continue
return
END
C (C) Copr. 1986-92 Numerical Recipes Software v%1jw#<0(9p#3.
rv1(k)=f
w(k)=x
48 continue
3 continue
49 continue
return
END
C (C) Copr. 1986-92 Numerical Recipes Software v%1jw#<0(9p#3.
double precision FUNCTION pythag(a,b)
double precision FUNCTION pythag(a,b)
double precision a,b
double precision absa,absb
absa=dabs(a)
absb=dabs(b)
if(absa.gt.absb)then
pythag=absa*dsqrt(1.0d0+(absb/absa)**2)
else
if(absb.eq.0.0d0)then
double precision absa,absb
absa=dabs(a)
absb=dabs(b)
if(absa.gt.absb)then
pythag=absa*dsqrt(1.0d0+(absb/absa)**2)
else
if(absb.eq.0.0d0)then
pythag=0.0d0
else
pythag=absb*dsqrt(1.0d0+(absa/absb)**2)
endif
endif
return
END
C (C) Copr. 1986-92 Numerical Recipes Software v%1jw#<0(9p#3.
else
pythag=absb*dsqrt(1.0d0+(absa/absb)**2)
endif
endif
return
END
C (C) Copr. 1986-92 Numerical Recipes Software v%1jw#<0(9p#3.
subroutine xmprove(N,NP,a,b,x,mark)
@@ -687,7 +687,7 @@ CU USES lubksb
u(i,j)=a(i,j)
enddo
enddo
call svdcmp(u(1:n,1:n),n,n,np,np,w,v(1:n,1:n),ierr)
call svdcmp(u(1:n,1:n),n,n,np,np,w,v(1:n,1:n),ierr)
wmax=0.0d0
do j=1,n
if(w(j).gt.wmax)wmax=w(j)
@@ -696,7 +696,7 @@ CU USES lubksb
do j=1,n
if(w(j).lt.wmin)w(j)=0.0d0
enddo
call svbksb(u(1:n,1:n),w,v(1:n,1:n),n,n,np,np,b,x)
call svbksb(u(1:n,1:n),w,v(1:n,1:n),n,n,np,np,b,x)
return
end
@@ -708,20 +708,20 @@ CU USES lubksb
DOUBLE PRECISION a(np,np),c(n),d(n)
LOGICAL sing
INTEGER i,j,k
DOUBLE PRECISION scale,sigma,sum,tau
DOUBLE PRECISION scaling,sigma,sum,tau
sing=.false.
do 17 k=1,n-1
scale=0.0d0
scaling=0.0d0
do 11 i=k,n
scale=dmax1(scale,dabs(a(i,k)))
scaling=dmax1(scaling,dabs(a(i,k)))
11 continue
if(scale.eq.0.0d0)then
if(scaling.eq.0.0d0)then
sing=.true.
c(k)=0.0d0
d(k)=0.0d0
else
do 12 i=k,n
a(i,k)=a(i,k)/scale
a(i,k)=a(i,k)/scaling
12 continue
sum=0.0d0
do 13 i=k,n
@@ -730,7 +730,7 @@ CU USES lubksb
sigma=dsign(dsqrt(sum),a(k,k))
a(k,k)=a(k,k)+sigma
c(k)=sigma*a(k,k)
d(k)=-scale*sigma
d(k)=-scaling*sigma
do 16 j=k+1,n
sum=0.0d0
do 14 i=k,n
@@ -997,4 +997,4 @@ c
endif
goto 10
end
!&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
!&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&