Table of Contents
New
ResponseFunction.New(Table) creates a new response function object according to the values in Table. Response functions can be of 4 different types (ListOfPoles, Tri, And, or Nat) and single-valued or matrix-valued. Below 8 examples for creating each of these response functions by hand at some arbitrary values.
The input table contains the elements
-
“type” a string equal to “ListOfPoles”, “Tri”, “And”, or “Nat” defining the type used for the internal storage of a response functoin
-
“name” an arbitrary string used to recognise the response function
-
“mu” a double giving the chemical potential. We highly recommend to shift the energy scale such that $\mu=0$. Documentation for the behaviour of several functions at finite chemical potential, $\mu$ is still missing. You can always shift the chemical potential to zero by shifting the onsite energy of all orbitals by $-\mu$.
-
Depending on the type lists of doubles, matrices, or complex matrices $A$ and $B$. Each section below starts by defining $G(\omega,\Gamma)$ in terms of $A$'s and $B$'s, the input below uses these variables. We use capital font for matrices and small font for numbers. Note that the matrices $A$ and $B$ must fulfil several conditions for the response function to be physical. Only physical response functions can be transformed between all types as unitary transformations.
ListOfPoles representation
Response functions stored as list of poles are defined via $$ G(\omega,\Gamma) = A_0 + \sum_{i=1}^{n} \frac{B_{i-1}}{\omega + \mathrm{i}\Gamma/2 - a_i} $$
Single valued functions
- Example.Quanty
a = {10, -1,-0.5, 0, 0.5, 1, 1.5} b = { 0.1, 0.1, 0.1, 0.1, 0.2, 0.3} G = ResponseFunction.New( {a,b,mu=0,type="ListOfPoles", name="A"} ) print("The resposne function definition is") print(G) omega = 1.1 Gamma = 0.001 print() print("Evaluated at omega =",omega," and Gamma =",Gamma," yields ",G(omega,Gamma))
Generates the output
The resposne function definition is { { 10 , -1 , -0.5 , 0 , 0.5 , 1 , 1.5 } , { 0.1 , 0.1 , 0.1 , 0.1 , 0.2 , 0.3 } , name = A , type = ListOfPoles , mu = 0 } Evaluated at omega = 1.1 and Gamma = 0.001 yields (11.617645834991 - 0.011148328755289 I)
Matrix valued functions
- Example.Quanty
A0 = Matrix.New( {{0,0,0},{0,0,0},{0,0,0}} ) a1 = -1 a2 = 1/2 a3 = 1 B1s = Matrix.New( {{1,1,3},{1,5,6},{3,6,9}} ) B1 = B1s * B1s B2s = Matrix.New( {{2,0,3},{0,5,6},{3,6,9}} ) B2 = B2s * B2s B3s = Matrix.New( {{3,0,3},{0,5,6},{3,6,9}} ) B3 = B3s * B3s G = ResponseFunction.New( { {A0,a1,a2,a3}, {B1,B2,B3}, mu=0, type="ListOfPoles", name="ML"} ) print("The resposne function definition is") print(G) omega = 1.1 Gamma = 0.001 print() print("Evaluated at omega =",omega," and Gamma =",Gamma," yields ") print(G(omega,Gamma))
Generates the output
{ { { { 0 , 0 , 0 } , { 0 , 0 , 0 } , { 0 , 0 , 0 } } , -1 , 0.5 , 1 } , { { { 11 , 24 , 36 } , { 24 , 62 , 87 } , { 36 , 87 , 126 } } , { { 13 , 18 , 33 } , { 18 , 61 , 84 } , { 33 , 84 , 126 } } , { { 18 , 18 , 36 } , { 18 , 61 , 84 } , { 36 , 84 , 126 } } } , type = ListOfPoles , name = ML , mu = 0 } Evaluated at omega = 1.1 and Gamma = 0.001 yields { { (206.90024667403 - 0.91928020904165 I) , (221.42405005987 - 0.9276985714825 I) , (432.13381820162 - 1.8498699350513 I) } , { (221.42405005987 - 0.9276985714825 I) , (741.17515429623 - 3.1416753933531 I) , (1021.4074723828 - 4.3264255332922 I) } , { (432.13381820162 - 1.8498699350513 I) , (1021.4074723828 - 4.3264255332922 I) , (1529.9683515529 - 6.4891280958856 I) } }
Tridiagonal representation
Response functions stored in tridiagonal format are defined via $$ G(\omega,\Gamma) = A_0 + B_0^* \frac{1}{\omega + \mathrm{i}\Gamma/2 - A_1 - B_{1}^{\phantom{\dagger}} \frac{1}{\omega + \mathrm{i}\Gamma/2 - A_2 - B_{2}^{\phantom{\dagger}} \frac{1}{\omega + \mathrm{i}\Gamma/2 - A_2 - B_{3}^{\phantom{\dagger}} \frac{...}{\omega + \mathrm{i}\Gamma/2 - A_{n-1} - B_{n-1}^{\phantom{\dagger}} \frac{1}{\omega + \mathrm{i}\Gamma/2 - A_n } B_{n-1}^{\dagger}} B_{3}^{\dagger} } B_{2}^{\dagger} } B_{1}^{\dagger} } B_0^T $$
Single valued functions
- Example.Quanty
a = {0, 1, 1, 1, 1, 1, 1} b = { 1, 0.5, 0.5, 0.5, 0.5, 0.5} G = ResponseFunction.New( {a,b,mu=0,type="Tri", name="GT"} ) print("The resposne function definition is") print(G) omega = 1.1 Gamma = 0.001 print() print("Evaluated at omega =",omega," and Gamma =",Gamma," yields ") print(G(omega,Gamma))
Generates the output
{ { 0 , 1 , 1 , 1 , 1 , 1 , 1 } , { 1 , 0.5 , 0.5 , 0.5 , 0.5 , 0.5 } , name = GT , type = Tri , mu = 0 } Evaluated at omega = 1.1 and Gamma = 0.001 yields (-1.4800882525182 - 0.010904814637879 I)
Matrix valued functions
- Example.Quanty
A0 = Matrix.New( {{0,0,0},{0,0,0},{0,0,0}} ) A1 = Matrix.New( {{1,2,3},{2,5,6},{3,6,9}} ) A2 = Matrix.New( {{2,2,3},{2,5,6},{3,6,9}} ) A3 = Matrix.New( {{3,2,3},{2,5,6},{3,6,9}} ) B0s = Matrix.New( {{1,0,0},{0,1,0},{0,0,1}} ) B0 = B0s * B0s B1s = Matrix.New( {{1,1,3},{1,5,6},{3,6,9}} ) B1 = B1s * B1s B2s = Matrix.New( {{2,0,3},{0,5,6},{3,6,9}} ) B2 = B2s * B2s B3s = Matrix.New( {{3,0,3},{0,5,6},{3,6,9}} ) B3 = B3s * B3s G = ResponseFunction.New( { {A0,A1,A2,A3}, {B0,B1,B2}, mu=0, type="Tri", name="MT"} ) print("The resposne function definition is") print(G) omega = 1.1 Gamma = 0.001 print() print("Evaluated at omega =",omega," and Gamma =",Gamma," yields ") print(G(omega,Gamma))
Generates the output
{ { { { 0 , 0 , 0 } , { 0 , 0 , 0 } , { 0 , 0 , 0 } } , { { 1 , 2 , 3 } , { 2 , 5 , 6 } , { 3 , 6 , 9 } } , { { 2 , 2 , 3 } , { 2 , 5 , 6 } , { 3 , 6 , 9 } } , { { 3 , 2 , 3 } , { 2 , 5 , 6 } , { 3 , 6 , 9 } } } , { { { 1 , 0 , 0 } , { 0 , 1 , 0 } , { 0 , 0 , 1 } } , { { 11 , 24 , 36 } , { 24 , 62 , 87 } , { 36 , 87 , 126 } } , { { 13 , 18 , 33 } , { 18 , 61 , 84 } , { 33 , 84 , 126 } } } , type = Tri , mu = 0 , BlockSize = { 3 , 3 , 3 , 3 } , name = MT } Evaluated at omega = 1.1 and Gamma = 0.001 yields { { (0.82041346528466 - 0.0005287731551253 I) , (-0.10773626514221 + 0.00047135055668369 I) , (-0.18782055050369 - 0.00021908813997981 I) } , { (-0.10773626514222 + 0.00047135055668371 I) , (0.9906660606812 - 0.0018715007457328 I) , (-0.67958409204703 + 0.0013049040629232 I) } , { (-0.18782055050369 - 0.00021908813997982 I) , (-0.67958409204703 + 0.0013049040629232 I) , (0.51775011277794 - 0.00095267059250443 I) } }
Anderson representation
Response functions stored in Anderson format are defined via $$ G(\omega,\Gamma) = A_0 + B_0^* \frac{1}{\omega + \mathrm{i}\Gamma/2 - A_1 - \sum_{i=2}^{n} B_{i-1}^{\phantom{\dagger}} \frac{1}{\omega + \mathrm{i}\Gamma/2 - A_{i} } B_{i-1}^{\dagger} } B_0^T $$
Single valued functions
- Example.Quanty
a = {0, 1, 1.5, 2, 2.5, 3, 3.5} b = { 1, 0.5, 0.5, 0.5, 0.5, 0.5} G = ResponseFunction.New( {a,b,mu=0,type="And", name="GA"} ) print("The resposne function definition is") print(G) omega = 1.1 Gamma = 0.001 print() print("Evaluated at omega =",omega," and Gamma =",Gamma," yields ") print(G(omega,Gamma))
Generates the output
The resposne function definition is { { 0 , 1 , 1.5 , 2 , 2.5 , 3 , 3.5 } , { 1 , 0.5 , 0.5 , 0.5 , 0.5 , 0.5 } , type = And , name = GA , mu = 0 } Evaluated at omega = 1.1 and Gamma = 0.001 yields (0.70566877797716 - 0.00077467678957667 I)
Matrix valued functions
- Example.Quanty
A0 = Matrix.New( {{0,0,0},{0,0,0},{0,0,0}} ) A1 = Matrix.New( {{1,2,3},{2,5,6},{3,6,9}} ) A2 = Matrix.New( {{2,2,3},{2,5,6},{3,6,9}} ) A3 = Matrix.New( {{3,2,3},{2,5,6},{3,6,9}} ) B0s = Matrix.New( {{1,0,0},{0,1,0},{0,0,1}} ) B0 = B0s * B0s B1s = Matrix.New( {{1,1,3},{1,5,6},{3,6,9}} ) B1 = B1s * B1s B2s = Matrix.New( {{2,0,3},{0,5,6},{3,6,9}} ) B2 = B2s * B2s B3s = Matrix.New( {{3,0,3},{0,5,6},{3,6,9}} ) B3 = B3s * B3s G = ResponseFunction.New( { {A0,A1,A2,A3}, {B0,B1,B2}, mu=0, type="And", name="MA"} ) print("The resposne function definition is") print(G) omega = 1.1 Gamma = 0.001 print() print("Evaluated at omega =",omega," and Gamma =",Gamma," yields ") print(G(omega,Gamma))
Generates the output
{ { { { 0 , 0 , 0 } , { 0 , 0 , 0 } , { 0 , 0 , 0 } } , { { 1 , 2 , 3 } , { 2 , 5 , 6 } , { 3 , 6 , 9 } } , { { 2 , 2 , 3 } , { 2 , 5 , 6 } , { 3 , 6 , 9 } } , { { 3 , 2 , 3 } , { 2 , 5 , 6 } , { 3 , 6 , 9 } } } , { { { 1 , 0 , 0 } , { 0 , 1 , 0 } , { 0 , 0 , 1 } } , { { 11 , 24 , 36 } , { 24 , 62 , 87 } , { 36 , 87 , 126 } } , { { 13 , 18 , 33 } , { 18 , 61 , 84 } , { 33 , 84 , 126 } } } , mu = 0 , name = MA , type = And } Evaluated at omega = 1.1 and Gamma = 0.001 yields { { (0.079202023515427 - 0.00018271816123949 I) , (0.019672301598063 - 0.00021050428128743 I) , (-0.033329362936266 + 0.00019529208541705 I) } , { (0.019672301598062 - 0.00021050428128743 I) , (-0.028178571653589 - 0.00029307470840254 I) , (0.014801870346139 + 0.00026254621032145 I) } , { (-0.033329362936266 + 0.00019529208541705 I) , (0.014801870346139 + 0.00026254621032145 I) , (-0.0017775335507766 - 0.00023672956892774 I) } }
Natural impurity orbital representation
Response functions stored in Natural impurity format are defined via $$ G(\omega,\Gamma) = A_0 + B_0^* \left( G_{val}(\omega,\Gamma) + G_{con}(\omega,\Gamma) \right) B_0^T$$, with $G_{val}(\omega,\Gamma)$ and $G_{con}(\omega,\Gamma)$ as response functions with poles either at positive energy ($G_{con}(\omega,\Gamma)$) or poles at negative energy ($G_{val}(\omega,\Gamma)$).
Single valued functions
- Example.Quanty
acon = {0, 1, 1, 1, 1, 1, 1} bcon = { sqrt(1/2), 0.5, 0.5, 0.5, 0.5, 0.5} Gcon = ResponseFunction.New( {acon,bcon,mu=0,type="Tri"} ) aval = {0, -1, -1, -2, -1, -1, -1} bval = { sqrt(1/2), 0.5, 0.5, 0.5, 0.5, 0.5} Gval = ResponseFunction.New( {aval,bval,mu=0,type="Tri"} ) a0=0 b0=1 G = ResponseFunction.New( {{a0,b0},val=Gval,con=Gcon,mu=0,type="Nat", name="GD"} ) print("The resposne function definition is") print(G) omega = 1.1 Gamma = 0.001 print() print("Evaluated at omega =",omega," and Gamma =",Gamma," yields ") print(G(omega,Gamma))
Generates the output
The resposne function definition is { { 0 , 1 } , type = NaturalImpurityOrbital , name = GD , mu = 0 , con = { { 0 , 1 , 1 , 1 , 1 , 1 , 1 } , { 0.70710678118655 , 0.5 , 0.5 , 0.5 , 0.5 , 0.5 } , mu = 0 , type = Tri , name = Matrix } , epsilon = 0 , val = { { 0 , -1 , -1 , -2 , -1 , -1 , -1 } , { 0.70710678118655 , 0.5 , 0.5 , 0.5 , 0.5 , 0.5 } , mu = 0 , type = Tri , name = Matrix } } Evaluated at omega = 1.1 and Gamma = 0.001 yields (-0.48700605787262 - 0.0055204934115643 I)