diff options
| author | Henrik Rydberg <rydberg@euromail.se> | 2011-10-08 20:30:28 +0200 |
|---|---|---|
| committer | Henrik Rydberg <rydberg@euromail.se> | 2011-10-08 20:30:28 +0200 |
| commit | 5df79c53745fde5d6c3340a2979b1429cd5892c1 (patch) | |
| tree | 1a81af141708b826e9c61e8a04019994fcca8298 /src/labat/laplac.f | |
Initial import of htcd system 1.0
Signed-off-by: Henrik Rydberg <rydberg@euromail.se>
Diffstat (limited to 'src/labat/laplac.f')
| -rw-r--r-- | src/labat/laplac.f | 41 |
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) | ||
| 3 | c calculates laplace(density), i.e. (del^2)(density) | ||
| 4 | c spherical coordinates => (del^2)phi = 1/r^2*d/dr[r^2*d(phi)/dr] | ||
| 5 | c input r : radial coordinate (array) | ||
| 6 | c input gradup : grad(density), spin up (array) | ||
| 7 | c input graddn : grad(density), spin down (array) | ||
| 8 | c input i : counter, i.e. current position = r(i) | ||
| 9 | c input imin : min value of i | ||
| 10 | c input imax : max value of i | ||
| 11 | c in/output done : true if r^2*grad(density) is splined | ||
| 12 | c output lapl : laplace(density) | ||
| 13 | c 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 | ||
