summaryrefslogtreecommitdiff
path: root/src/labat/laplac.f
diff options
context:
space:
mode:
Diffstat (limited to 'src/labat/laplac.f')
-rw-r--r--src/labat/laplac.f41
1 files changed, 41 insertions, 0 deletions
diff --git a/src/labat/laplac.f b/src/labat/laplac.f
new file mode 100644
index 0000000..9a7dfd9
--- /dev/null
+++ b/src/labat/laplac.f
@@ -0,0 +1,41 @@
1 subroutine laplac(r,gradup,graddn,i,imin,imax,done,
2 j lapl,laplup,lapldn)
3c calculates laplace(density), i.e. (del^2)(density)
4c spherical coordinates => (del^2)phi = 1/r^2*d/dr[r^2*d(phi)/dr]
5c input r : radial coordinate (array)
6c input gradup : grad(density), spin up (array)
7c input graddn : grad(density), spin down (array)
8c input i : counter, i.e. current position = r(i)
9c input imin : min value of i
10c input imax : max value of i
11c in/output done : true if r^2*grad(density) is splined
12c output lapl : laplace(density)
13c output laplup,lapldn : laplace(density), spin up and down
14 implicit logical (a-z)
15 logical done
16 double precision r,gradup,graddn,lapl,laplup,lapldn,lapl2,temp
17 double precision rj2,r2,deriv
18 integer i,imin,imax,j
19 common/ggalap/temp,lapl2
20 dimension r(561),gradup(561),graddn(561)
21 dimension lapl2(2,561),temp(2,561)
22 if (.not.done) then
23 do 10 j = imin,imax
24 rj2 = r(j)**2
25 temp(1,j) = rj2*gradup(j)
26 temp(2,j) = rj2*graddn(j)
27 10 continue
28 call spline(r,imin+1,imax,temp,lapl2)
29 done = .true.
30 endif
31 if (i.eq.imin) then
32 call laplac2(r,gradup,graddn,i+1,imin,imax,done,lapl,laplup,
33 j lapldn)
34 else
35 r2 = r(i)**2
36 laplup = (deriv(r,temp,lapl2,1,i,imin,imax))/r2
37 lapldn = (deriv(r,temp,lapl2,-1,i,imin,imax))/r2
38 lapl = laplup + lapldn
39 endif
40 return
41 end