! From: "COMPUTATIONAL PHYSICS, 2nd Ed" ! by RH Landau, MJ Paez, and CC Bordeianu ! Copyright Wiley - VCH, 2007. ! Electronic Materials copyright: R Landau, Oregon State Univ, 2007; ! MJ Paez, Univ Antioquia, 2007; and CC Bordeianu, Univ Bucharest, 2007. ! Supported by the US National Science Foundation ! ! sqwell.f90: Solves the t-dependent Schroedinger equation for a ! Gaussian wavepacket in a infinite square well potential Program sqwell Implicit None Real*8 :: psr(751, 2), psi(751, 2), p2(751) Real*8 :: dx, k0, dt, x, pi Integer :: i, j, n, max Complex exc, zi Common /values/dx, dt open(9, FILE = 'sqwell.dat', Status = 'Unknown') max = 750 pi = 3.14159265358979323846 zi = CMPLX(0.0, 1.0) dx = 0.02 k0 = 17.0*pi dt = dx*dx ! clear the arrays Do i = 1, 751 Do j = 1, 2 psr(i, j) = 0.0 psi(i, j) = 0.0 p2(i) = 0.0 End Do End Do ! initial conditions x = 0.0 Do i = 1, max + 1 exc = exp(zi*k0*x) psr(i, 1) = real(exc*exp( - 0.5*(2.0*(x - 5.0))**2))! real part psi(i, 1) = aimag(exc*exp( - 0.5*(2.0*(x - 5.0))**2)) ! imag x = x + dx End Do ! propagate solution through time Do n = 1, 6000 Do i = 2, max! real part & prob psr(i, 2) = psr(i, 1) - dt*(psi(i+ 1, 1) + psi(i- 1, 1)& - 2.0*psi(i, 1))/(2.0*dx*dx) p2(i) = psr(i, 1)*psr(i, 2) + psi(i, 1)*psi(i, 1) End Do Do i = 2, max ! imaginary part psi(i, 2) = psi(i, 1) + dt*(psr(i+ 1, 2) + psr(i- 1, 2)& - 2.0*psr(i, 2))/(2.0*dx*dx) End Do ! selective printout If (Mod(n, 300) == 0) then Do i = 1, max + 1, 15 write(9, 11) p2(i) End Do write(9, *) ' ' Endif ! new soltn -> old Do i = 1, max + 1 psi(i, 1) = psi(i, 2) psr(i, 1) = psr(i, 2) End Do End Do 11 format (E12.6) close(9) Stop 'data saved in sqwell.dat' End