#include <QdotInteraction.hpp>
Collaboration diagram for quantumdot::QdotInteraction:
Public Member Functions | |
| QdotInteraction () | |
| Default constructor. | |
| void | setRadialPotential (const RadialPotential &u) |
| Assign a RadialPotential object. (The default object is a Coulomb potential.). | |
| void | buildInteractionComBlocks () |
| Build Coulomb matrix blocks in COM frame. This can easily be modified to produce a different interaction. | |
| void | buildEffectiveInteractionComBlocks (int g) |
| Build *effective* Coulomb matrix blocks. | |
| void | setLambda (double ell) |
| Set the interaction strength. | |
| void | setR (int the_R) |
| Set the maximum shell number R. | |
| double | singleElement (int N1, int m1, int N2, int m2, int N1pr, int m1pr, int N2pr, int m2pr) |
| Compute the matrix element <a1 a2|U|b1 b2> of the interaction. Here, a1 = (N1, m1), a2 = (N2, m2), b1 = (N1pr, m2pr) and b2 = (N2pr, m2pr). | |
| double | singleElementAnalytic (int N1, int m1, int N2, int m2, int N4, int m4, int N3, int m3) |
| Analytic computation of LAB frame elements. Note: The order of arguments is not wrong! This is included only for completeness, and it is really slow and inaccurate for many shells. For many-particle problems (>3) it can be useful since we are then restricted to only a few shells. | |
| void | precomputeLabFrameMatrix () |
| Precopute lab frame version of the interaction. | |
Protected Member Functions | |
| void | buildTalmiBlocks () |
| Build the Talmi matrices up to 2*R shells. (We need 2*R blocks if we use direct product Hilbert space; only R otherwise. But this is insignificant in the greater scheme of things.). | |
| int | orbitalMap2 (int N, int m) |
| Map quantum number pair to orbital number. Used for precomputing lab frame interaction. Harmonic oscillator energy is given by E = N + 1, and the usual radial quantum number n is defined through N = 2*n + abs(m). | |
By default, the interaction matrix is given in COM coordinates, then transformed the lab frame on the fly using the Talmi matrices. This is the fastest option for 2 or 3-body problems.
The user may also precompute lab frame matrix elements. This is especially handy if many-body calculations (as opposed to 2 or 3-body) are performed. Then, precomputeLabFrameMatrix() should be called before use. This is really not useful for 2-body problems, since the number of matrix elements created will be much higher than the resulting Hamiltonian matrix in general! For 3-body problems this is not so asymptotically, but in practice it is.
Most likely, an instance of QdotInteraction will be fed to a QdotMatrixElements instance. The latter computes the matrix elements <(a sigma) (b tau) | V | (c sigma') (d tau')>, i.e., it adds spin degrees of freedom.
QdotInteraction has an instance of RadialPotential which defines the actual potential. By default, this is a Coulomb potential.
QdotInteraction also can compute the effective interaction in the lab frame.
Typical use:
QdotInteraction m; m.setR(5); m.setRadialPotential( u ); // assign a RadialPotential instance, if not Coulomb is wanted. m.buildInteractionBlocks(); // builds Coulomb interaction. if (i_want_to_precompute_in_lab_frame) m.precoputeLabFrameMatrix(); // Ready to use! Call singleElement(N1,m1,N2,m2,N3,m3,N4,m4) to calculate!
| void quantumdot::QdotInteraction::buildEffectiveInteractionComBlocks | ( | int | g | ) |
Build *effective* Coulomb matrix blocks.
| g | Use R*g shells for effective Coulomb blocks. |
| int quantumdot::QdotInteraction::orbitalMap2 | ( | int | N, | |
| int | m | |||
| ) | [inline, protected] |
Map quantum number pair to orbital number. Used for precomputing lab frame interaction. Harmonic oscillator energy is given by E = N + 1, and the usual radial quantum number n is defined through N = 2*n + abs(m).
| N | Shell number quantum number | |
| m | Angular momentum quantum number. |
| void quantumdot::QdotInteraction::setLambda | ( | double | ell | ) | [inline] |
Set the interaction strength.
| ell | The value for lambda. |
| void quantumdot::QdotInteraction::setR | ( | int | the_R | ) | [inline] |
Set the maximum shell number R.
| the_R | The value for R. |
Here is the call graph for this function:
| double quantumdot::QdotInteraction::singleElementAnalytic | ( | int | N1, | |
| int | m1, | |||
| int | N2, | |||
| int | m2, | |||
| int | N4, | |||
| int | m4, | |||
| int | N3, | |||
| int | m3 | |||
| ) |
Analytic computation of LAB frame elements. Note: The order of arguments is not wrong! This is included only for completeness, and it is really slow and inaccurate for many shells. For many-particle problems (>3) it can be useful since we are then restricted to only a few shells.
NOTE: In the code in QdotInteraction.cc, it would be better to take the log of f0, f1 etc and use exp(f0+....) instead of f0*f1... Should implement this; if I haven't done it when you read this, do so yourself. :-)
1.4.7