Starting from a sequence of eigenenergies and eigenfunctions of a quantum mechanical Hamiltonian, typically generated by qm_bound, this function calculates matrix elements of dipole moments and polarizabilities along x and/or y (if applicable) and optionally also matrix elements of the system-bath-coupling, populations and/or projections. Thus, qm_matrix serves as bridge between the PDE based functions qm_bound and qm_propa and the ODE based functions qm_abncd and qm_propa and qm_optimal. The calculation of the matrix elements relies on the same numerical quadrature also underlying the DVR methods used in qm_bound and qm_propa.
Energies: δij Ei = ⟨i|H|j⟩
Dipole moments: μx,ij = ⟨i|μx|j⟩, μy,ij = ⟨i|μy|j⟩
Polarizabilities: αxx,ij = ⟨i|αxx|j⟩, αyy,ij = ⟨i|αyy|j⟩
System-bath coupling: χij = ⟨i|χ|j⟩
Additional multiplicative operators: to be used as control targets
Populations of eigenstates: to be used as control targets
Projections onto eigenstates: to be used as control targets
The MATLAB function qm_matrix.m can be found here
Note that qm_matrix.m works only with objects of the main classes given in the following table:
class name | description |
---|---|
wave | wavefunctions, represented on grids |
parameter | description |
---|---|
cutoff | an optional parameter that serves to define a cut-off; matrix elements are set to zero if their absolute values are below the cut-off, which keeps the output files more compact. |
The name of directory where wavefunctions are read from, as well as the filename(s), are taken from the respective properties of object state (of class wave), i.e.,
state.save_dir state.save_file
For further information on how wavefunctions are saved and/or loaded, see also here.
You have to make sure that - while running bound state calculations with qm_bound, the sequence of wavefunctions is saved to unformatted Matlab data files which is achieved by the following code line
state.save_export = true;
Typically, the required wavefunctions have to be generated previously by running qm_bound where they have to be saved in unformatted Matlab data files, see also our detailed description.
The resulting matrix elements are stored in properties M_... in object state and are written to file wave_0.mat in the current working directory. They can be used in a subsequent calculation of A, B, N, C, D matrices by running qm_abncd where there is a choice for TDSE (class ket) or LvNE (class rho) setting. These A, B, N, C, D matrices can then be used e.g. in bilinear control simulations by running qm_propa and/or in optimal control simulations qm_optimal and/or in model order reduction.
The numerical integrations are done using FBR/DVR (quadrature) schemes, see also our discussions of grids. Note that the FBR/DVR representations are the only place where classes/objects are used in the present MATLAB version of WavePacket.
MATLAB class for Fast Fourier Transform scheme can be found here
MATLAB class for Gauss-Hermite scheme can be found here
MATLAB class for Gauss-Legendre scheme can be found here
Note that function qm_init should be run previously in order to initialize all variables in use. Of particular interest are the following structures:
Blog: 2019/02/version-530-released-30-may-2017
Wiki: Reference.Classes.wave
Wiki: Reference.Files.Main
Wiki: Reference.Programs.Main
Wiki: Reference.Programs.qm_abncd
Wiki: Reference.Programs.qm_bound
Wiki: Reference.Programs.qm_init
Wiki: Reference.Programs.qm_optimal
Wiki: Reference.Programs.qm_propa
Wiki: Reference.Variables.control
Wiki: Reference.Variables.hamilt
Wiki: Reference.Variables.time
Wiki: Users.Grids.Main
Wiki: Users.Matlab.Main
Wiki: Users.Saving.Main