Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
documentation:language_reference:objects:responsefunction:functions:new [2024/12/30 09:46] – Maurits W. Haverkortdocumentation:language_reference:objects:responsefunction:functions:new [2026/11/13 07:53] (current) – Maurits W. Haverkort
Line 3: Line 3:
  
 ### ###
-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.+ 
 +ResponseFunction.New(Table) creates a new response function object according to the values in Table. Response functions can be of 5 different types (ListOfPoles, Tri, And, Nat, or DoubleTri) and single-valued or matrix-valued. Below 10 examples for creating each of these response functions by hand at some arbitrary values. 
 ### ###
  
 ### ###
 +
 The input table contains the elements 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+  * "type" a string equal to "ListOfPoles", "Tri", "And", "Nat", or "DoubleTri" defining the type used for the internal storage of a response function
   * "name" an arbitrary string used to recognise the response function   * "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$.   * "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.   * 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.
 +
 ### ###
  
Line 53: Line 57:
 a3 = 1 a3 = 1
 B1s = Matrix.New( {{1,1,3},{1,5,6},{3,6,9}} ) B1s = Matrix.New( {{1,1,3},{1,5,6},{3,6,9}} )
-B1 = B1s * B1s+B1 = B1s * B1s--the B matrices have to be hermitian to ensure H to be hermitian
 B2s = Matrix.New( {{2,0,3},{0,5,6},{3,6,9}} ) B2s = Matrix.New( {{2,0,3},{0,5,6},{3,6,9}} )
-B2 = B2s * B2s+B2 = B2s * B2s--the B matrices have to be hermitian to ensure H to be hermitian
 B3s = Matrix.New( {{3,0,3},{0,5,6},{3,6,9}} ) B3s = Matrix.New( {{3,0,3},{0,5,6},{3,6,9}} )
-B3 = B3s * B3s+B3 = B3s * B3s--the B matrices have to be hermitian to ensure H to be hermitian
 G = ResponseFunction.New( { {A0,a1,a2,a3}, {B1,B2,B3}, mu=0, type="ListOfPoles", name="ML"} ) G = ResponseFunction.New( { {A0,a1,a2,a3}, {B1,B2,B3}, mu=0, type="ListOfPoles", name="ML"} )
 print("The resposne function definition is") print("The resposne function definition is")
Line 329: Line 333:
 ==== Matrix valued functions ==== ==== Matrix valued functions ====
 <code Quanty Example.Quanty> <code Quanty Example.Quanty>
--- some example code+Zero = Matrix.New( {{0,0},{0,0}} ) 
 +acon = {Zero, Matrix.New( {{1,0.2},{0.2,1.5}} ), Matrix.New( {{2,0},{0,2}} )} 
 +bcon = {Matrix.New( {{0.6,0.1},{0.1,0.4}} ), Matrix.New( {{0.5,0},{0,0.5}} )} 
 +Gcon = ResponseFunction.New( {acon,bcon,mu=0,type="Tri"} ) 
 +aval = {Zero, Matrix.New( {{-1,0.3},{0.3,-1.2}} ), Matrix.New( {{-2,0},{0,-2}} )} 
 +bval = {Matrix.New( {{0.5,0},{0,0.7}} ), Matrix.New( {{0.4,0.1},{0.1,0.4}} )} 
 +Gval = ResponseFunction.New( {aval,bval,mu=0,type="Tri"} ) 
 +a0 = Zero 
 +b0 = Matrix.New( {{1,0},{0,1}} ) 
 +G = ResponseFunction.New( {{a0,b0},val=Gval,con=Gcon,mu=0,type="Nat", name="MN"} ) 
 +print("The response 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))
 </code> </code>
 +Generates the output
 +<file Quanty_Output>
 +The response function definition is
 +{ { { { 0 , 0 } , 
 +  { 0 , 0 } } , 
 +  { { 1 , 0 } , 
 +  { 0 , 1 } } } ,
 +  val = { { { { 0 , 0 } , 
 +  { 0 , 0 } } , 
 +  { { -1 , 0.3 } , 
 +  { 0.3 , -1.2 } } , 
 +  { { -2 , 0 } , 
 +  { 0 , -2 } } } , 
 +  { { { 0.5 , 0 } , 
 +  { 0 , 0.7 } } , 
 +  { { 0.4 , 0.1 } , 
 +  { 0.1 , 0.4 } } } ,
 +  BlockSize = { 2 , 2 , 2 } ,
 +  mu = 0 ,
 +  name =  ,
 +  type = Tri } ,
 +  mu = 0 ,
 +  name = MN ,
 +  epsilon = 2.2204460492503e-13 ,
 +  con = { { { { 0 , 0 } , 
 +  { 0 , 0 } } , 
 +  { { 1 , 0.2 } , 
 +  { 0.2 , 1.5 } } , 
 +  { { 2 , 0 } , 
 +  { 0 , 2 } } } , 
 +  { { { 0.6 , 0.1 } , 
 +  { 0.1 , 0.4 } } , 
 +  { { 0.5 , 0 } , 
 +  { 0 , 0.5 } } } ,
 +  BlockSize = { 2 , 2 , 2 } ,
 +  mu = 0 ,
 +  name =  ,
 +  type = Tri } ,
 +  type = NaturalImpurityOrbital }
  
 +Evaluated at omega = 1.1 and Gamma = 0.001 yields 
 +{ { (0.31338878914433 - 0.0024767552810116 I) , (-0.64505747360543 - 0.0020730553941133 I) } , 
 +  { (-0.64505747360543 - 0.0020730553941133 I) , (-0.64950023863436 - 0.00303795224319 I) } }
 +</file>
 +
 +===== Double tri-diagonal representation =====
 +
 +###
 +Response functions stored in double tri-diagonal format are defined via 
 +$$ G(\omega,\Gamma) = A_0 + B_0^* \frac{1}{\omega + \mathrm{i}\Gamma/2 - G_{val}(\omega,\Gamma) - G_{con}(\omega,\Gamma)} B_0^T $$, with $G_{val}(\omega,\Gamma)$ and $G_{con}(\omega,\Gamma)$ two response functions in tri-diagonal format, the chain of the poles at negative energy ($G_{val}(\omega,\Gamma)$) and the chain of the poles at positive energy ($G_{con}(\omega,\Gamma)$). Where the natural impurity orbital representation adds the two chains, here they enter the denominator: both chains couple to one orbital. A response function of another type is converted to this one with //[[documentation:language_reference:objects:responsefunction:functions:changetype|ResponseFunction.ChangeType(G, "DoubleTri")]]//.
 +###
 +
 +==== Single valued functions ====
 +<code Quanty 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="DoubleTri", name="GDT"} )
 +print("The response 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))
 +</code>
 Generates the output Generates the output
 <file Quanty_Output> <file Quanty_Output>
-text produced as output+The response function definition is 
 +{ { 0 , 1 } , 
 +  kBT = 0 , 
 +  mu = 0 , 
 +  name = GDT , 
 +  con = { { 0 , 1 , 1 , 1 , 1 , 1 , 1 } ,  
 +  { 0.70710678118655 , 0.5 , 0.5 , 0.5 , 0.5 , 0.5 } , 
 +  name =  , 
 +  type = Tri , 
 +  mu = 0 } , 
 +  val = { { 0 , -1 , -1 , -2 , -1 , -1 , -1 } ,  
 +  { 0.70710678118655 , 0.5 , 0.5 , 0.5 , 0.5 , 0.5 } , 
 +  name =  , 
 +  type = Tri , 
 +  mu = 0 } , 
 +  type = DoubleTri } 
 + 
 +Evaluated at omega = 1.1 and Gamma = 0.001 yields  
 +(0.63010824925044 - 0.0023903894659797 I) 
 +</file> 
 + 
 + 
 +==== Matrix valued functions ==== 
 +<code Quanty Example.Quanty> 
 +Zero = Matrix.New( {{0,0},{0,0}} ) 
 +acon = {Zero, Matrix.New( {{1,0.2},{0.2,1.5}} ), Matrix.New( {{2,0},{0,2}} )} 
 +bcon = {Matrix.New( {{0.6,0.1},{0.1,0.4}} ), Matrix.New( {{0.5,0},{0,0.5}} )} 
 +Gcon = ResponseFunction.New( {acon,bcon,mu=0,type="Tri"} ) 
 +aval = {Zero, Matrix.New( {{-1,0.3},{0.3,-1.2}} ), Matrix.New( {{-2,0},{0,-2}} )} 
 +bval = {Matrix.New( {{0.5,0},{0,0.7}} ), Matrix.New( {{0.4,0.1},{0.1,0.4}} )} 
 +Gval = ResponseFunction.New( {aval,bval,mu=0,type="Tri"} ) 
 +a0 = Zero 
 +b0 = Matrix.New( {{1,0},{0,1}} ) 
 +G = ResponseFunction.New( {{a0,b0},val=Gval,con=Gcon,mu=0,type="DoubleTri", name="MDT"} ) 
 +print("The response 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)) 
 +</code> 
 +Generates the output 
 +<file Quanty_Output> 
 +The response function definition is 
 +{ { { { 0 , 0 } ,  
 +  { 0 , 0 } } ,  
 +  { { 1 , 0 } ,  
 +  { 0 , 1 } } } , 
 +  val = { { { { 0 , 0 } ,  
 +  { 0 , 0 } } ,  
 +  { { -1 , 0.3 } ,  
 +  { 0.3 , -1.2 } } ,  
 +  { { -2 , 0 } ,  
 +  { 0 , -2 } } } ,  
 +  { { { 0.5 , 0 } ,  
 +  { 0 , 0.7 } } ,  
 +  { { 0.4 , 0.1 } ,  
 +  { 0.1 , 0.4 } } } , 
 +  mu = 0 , 
 +  name =  , 
 +  type = Tri , 
 +  BlockSize = { 2 , 2 , 2 } } , 
 +  con = { { { { 0 , 0 } ,  
 +  { 0 , 0 } } ,  
 +  { { 1 , 0.2 } ,  
 +  { 0.2 , 1.5 } } ,  
 +  { { 2 , 0 } ,  
 +  { 0 , 2 } } } ,  
 +  { { { 0.6 , 0.1 } ,  
 +  { 0.1 , 0.4 } } ,  
 +  { { 0.5 , 0 } ,  
 +  { 0 , 0.5 } } } , 
 +  mu = 0 , 
 +  name =  , 
 +  type = Tri , 
 +  BlockSize = { 2 , 2 , 2 } } , 
 +  mu = 0 , 
 +  name = MDT , 
 +  type = DoubleTri , 
 +  kBT = 0 } 
 + 
 +Evaluated at omega = 1.1 and Gamma = 0.001 yields  
 +{ { (1.8222256078917 - 0.0064053919125334 I) , (-0.67187644577143 + 0.0015612104628324 I) } ,  
 +  { (-0.67187644577143 + 0.0015612104628324 I) , (0.81931802332689 - 0.0014363767262552 I) } }
 </file> </file>
  
 ===== Table of contents ===== ===== Table of contents =====
 {{indexmenu>../#2|tsort}} {{indexmenu>../#2|tsort}}
 +
  
Print/export