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:standard_operators:atomic_coulomb_repulsion [2025/11/20 02:45] – external edit 127.0.0.1documentation:standard_operators:atomic_coulomb_repulsion [2026/11/12 23:07] (current) – Maurits W. Haverkort
Line 1: Line 1:
 {{indexmenu_n>999}} {{indexmenu_n>999}}
 ====== Atomic coulomb repulsion ====== ====== Atomic coulomb repulsion ======
-Note: parts of the functionality of this function will be available in the release of October 2019+
 ### ###
 NewOperator("AtomicU",indices,RadialWavefunctions1,RadialWavefunctions2,options) calculates the full Coulomb interaction operator between all given atomic orbitals. NewOperator("AtomicU",indices,RadialWavefunctions1,RadialWavefunctions2,options) calculates the full Coulomb interaction operator between all given atomic orbitals.
Line 14: Line 14:
               * "conserve" : if true only occupation conserving Slater integrals are calculated               * "conserve" : if true only occupation conserving Slater integrals are calculated
               * "1P-Operator" : only if "conserve" is true and additional arguments are given, transforms interaction to 1-particle operator (see example)               * "1P-Operator" : only if "conserve" is true and additional arguments are given, transforms interaction to 1-particle operator (see example)
 +
 +###
 +The radial wave-functions can be read from FPLO with //ReadFPLOBasisFunctions()//, or calculated with //[[documentation:language_reference:functions:calculateatomicbasisfunctions|CalculateAtomicBasisFunctions()]]//. For the functions of //CalculateAtomicBasisFunctions()// the Slater integrals are calculated exactly on the B-spline basis of the atom, without a radial grid (see the second example). All functions must then come from the same call.
 +###
  
 ===== Example ===== ===== Example =====
  
 ### ###
-The example below shows how to create the full Coulomb interaction between multiple atomic orbitals with relativistic wave-functions. It is recommended to use CreateAtomicIndicesList(orbitallabels,{{"Kappas",true}}) for index creation, since it automatically calculates the quantum numbers kappa and stores them in the field ind.kappas which needs to be set when calling NewOperator("AtomicU",...) with relativistic wave-functions.+The example below shows how to create the full Coulomb interaction between multiple atomic orbitals with relativistic wave-functions. It is recommended to use CreateAtomicIndicesList(orbitallabels,{ {"Kappas",true} }) for index creation, since it automatically calculates the quantum numbers kappa and stores them in the field ind.kappas which needs to be set when calling NewOperator("AtomicU",...) with relativistic wave-functions.
 ### ###
  
 ==== Input ==== ==== Input ====
 <code Quanty Example.Quanty> <code Quanty Example.Quanty>
-orbitallabels = {"1s1/2","2s1/2","2p1/2","2p3/2"} +-- the Coulomb interaction of the electrons of Ne on its own Dirac-Fock orbitals 
-ind, NF = CreateAtomicIndicesList(orbitallabels,{{"Kappas",true}}) +G, F, x, Atom = CalculateAtomicBasisFunctions(10) 
-G, F = ReadFPLOBasisFunctions(orbitallabels,"+fval.001.1", "+fval.001.2")+ind, NF = CreateAtomicIndicesList(Atom.Labels, {{"Kappas", true}})
  
-U = NewOperator("AtomicU",NF,ind,G,F) -- creates full Coulomb interaction+U = NewOperator("AU", NF, ind, G, F)
  
--- now occupation of the s-orbitals shall be conserved +psi = NewWavefunction(NF, 0, { {string.rep("1", NF), 1} }) 
- +print(string.format("<psi|U|psi> = %.8f Hartree, Edirect + Eexchange = %.8f Hartree", psi*U*psi, Atom.Edirect + Atom.Eexchange))
-function Take(list,n1,n2) +
-  local result={} +
-  if n2== nil then +
-    if n1 > 0 then +
-      for i = 1, n1 do +
-        result[i]=list[i] +
-      end +
-    else +
-      for i=1,-n1 do +
-        result[i]=list[#list+n1+i] +
-      end +
-    end +
-   else +
-     for i = n1, n2 do +
-       result[i+1-n1] = list[i] +
-     end +
-   end +
-  return result +
-end +
- +
-n0 = 3 +
-n1 = 4 +
- +
-indConserved = Take(ind,1,n0-1) +
-indConserved.kappas = Take(ind.kappas,1,n0-1) +
-GConserved = Take(G,1,n0-1) +
-FConserved = Take(F,1,n0-1) +
- +
-indNonCnsrvd = Take(ind,n0,n1) +
-indNonCnsrvd.kappas = Take(ind.kappas,n0,n1) +
-GNonCnsrvd = Take(G,n0,n1) +
-FNonCnsrvd = Take(F,n0,n1) +
- +
-U0 = NewOperator("AU",NF,indConserved,GConserved,FConserved,{{"conserve",true}}) -- Coulomb interaction between conserved orbitals only +
- +
-U1 = NewOperator("AU",NF,ind,G,F,indConserved.kappas,indNonCnsrvd.kappas,{{"conserve",true},{"1P-Operator",true}}) -- Coulomb interaction between conserved orbitals and others transformed to a one-particle operator given that the conserved orbitals are always completely filled. +
- +
-U2 = NewOperator("AU",NF,indNonCnsrvd,GNonCnsrvd,FNonCnsrvd) -- Coulomb interaction between non-conserved orbitals +
- +
-Uconserved = U0 + U1 + U2+
 </code> </code>
  
 +<file Quanty_Output Example.out>
 +<psi|U|psi> = 54.08660432 Hartree, Edirect + Eexchange = 54.08660432 Hartree
 +</file>
  
 ===== Table of contents ===== ===== Table of contents =====
 {{indexmenu>.#1|msort}} {{indexmenu>.#1|msort}}
 +
 +
  
Print/export