The provided Matlab codes allow to solve numerically the generalized time-dependent Schrödinger equation in unbounded domains. In case of variable coefficients becomes constant for large space variables, we can construct so-called discrete transparent boundary conditions (DTBC) and use them to restrict used numercal schemes to a finite mesh. Both theoretical analysis of stability and the accomplished computations confirm that considered numerical methods coupled to the discrete TBC are effective even in the case of highly oscillating solutions and discontinuous potentials.
The following numerical methods are effectively implemented and coupled with discrete or semi-discrete TBC:
- a two-level symmetric in time (i.e. the Crank-Nicolson) scheme
- global Richardson extrapolation in time (high-order scheme in time)
- broad family of finite difference schemes with three-point parameter dependent averaging in space, incl.
- no averaging
- higher order Numerov-like scheme
- scheme of the first order finite element method
- any order finite element in space numerical method (high-order scheme in space, only for 1D)
- splitting in potential (only for 2D)
For the detailed explanation, please refer to our publications.
- A Zlotnik, I Zlotnik Remarks on discrete and semi-discrete transparent boundary conditions for solving the time-dependent Schrödinger equation on the half-axis Russian Journal of Numerical Analysis and Mathematical Modelling 31 (1), 51-64 2016
- A Zlotnik, I Zlotnik The high order method with discrete TBCs for solving the Cauchy problem for the 1D Schrödinger equation Computational Methods in Applied Mathematics 15 (2), 233-245 2015
- A Zlotnik, B Ducomet, I Zlotnik, A Romanova Splitting in potential finite-difference schemes with discrete transparent boundary conditions for the time-dependent Schrödinger equation Numerical Mathematics and Advanced Applications-ENUMATH 2013, 203-211 2015
- B Ducomet, A Zlotnik, I Zlotnik The splitting in potential Crank-Nicolson scheme with discrete transparent boundary conditions for the Schrödinger equation on a semi-infinite strip ESAIM: Mathematical Modelling and Numerical Analysis 48 (6), 1681-1699 2014
- I Zlotnik Numerical methods for solving the generalized time-dependent Schrödinger equation in unbounded domains PhD Thesis, Moscow Power Eng. Inst. 2013
- A Zlotnik, I Zlotnik Finite element method with discrete transparent boundary conditions for the time-dependent 1D Schrödinger equation Kinetic and Related Models 5 (3), 639-667 2012
- I Zlotnik Family of finite-difference schemes with approximate transparent boundary conditions for the generalized nonstationary Schrödinger equation in a semi-infinite strip Computational Mathematics and Mathematical Physics 51 (3), 355-376 2011
- I Zlotnik Computer simulation of the tunnel effect Moscow Power Engin. Inst. Bulletin 6, 10-28 2010
- I Zlotnik On stability of a family of finite-difference schemes with approximate transparent boundary conditions for the time-dependent Schrödinger equation on the half-strip Moscow Power Engin. Inst. Bulletin, 127-144 2009
- B Ducomet, A Zlotnik, I Zlotnik On a family of finite–difference schemes with approximate transparent boundary conditions for a generalized 1D Schrödinger equation Kinetic and Related Models 2 (1), 151-179 2009
- Download dependencies from MATLAB Central (see below) and save them to the MATLAB path or to the project folder.
- Run the script "Install.m" to update Matlab path and disable few warning messages.
In order to run the code we will need to functions both available on MATLAB Central:
- sym2str by Martin Lawson https://www.mathworks.com/matlabcentral/fileexchange/19217-sym2str
- DataHash by Jan Simon https://www.mathworks.com/matlabcentral/fileexchange/31272-datahash
The first functon sym2str is widely used in the visualization functions to add values like
The second function DataHash is used to calculate MD5-hash value of the task parameter values while determining if the solution of that particular task has been already calculated and saved on the disk (if so it will be loaded from the disk and not to be calculated again). So far, if we do not need to save/load our solution to/from the hard drive we can omit the dependency of DataHash.
Note: We have been running our codes since Matlab R2007b. The latest version of the code is tested on Matlab R2017a. Please let us know if you run into any problem.
For more information, please see the published papers or contact the author.
The code is free for academic/research purpose. Use it at your own risk and we are not responsible for any loss resulting from this code. Feel free to submit pull request for bug fixes.
Ilya Zlotnik 2007 - 2014