====== PartialOperator ====== ### PartialOperator(//op//,//indices//,//mode//) takes an operator and a list of indices and depending on //mode// removes or keeps specific terms. ### ### Mode //"include"// keeps all terms whereby at least one of the creation or annihilation operators acts on the orbitals included in the list //indices//. ### ### Mode //"exclude"// removes all terms whereby at least one of the creation or annihilation operators acts on the orbitals included in the list //indices//. ### ### Mode //"conserve"// removes all terms that do not keep the occupation conserved from the orbitals listed in the table //indices//. In this case the table //indices// is allowed to include tables. In the latter case the sum of the occupation all orbitals in the list needs to be conserved ### ===== Input ===== * //op// : An Operator. * //indices// : A list of indices. * //mode// : either "include", "exclude", or "conserve" ===== Output ===== * //partialOp// : The operator with a subset of terms of the original operator. ===== Example ===== ==== Input ==== NF = 3 NB = 0 opp1cr = NewOperator(NF,NB, {{ 0,1},{ 1,1},{ 2,1}}) opp1an = NewOperator(NF,NB, {{-0,1},{-1,1},{-2,1}}) opp2 = opp1cr * opp1an opp3 = opp1an * opp2 opp4 = opp1cr * opp3 opp = 1 + opp1cr + opp1an + opp2 + opp3 + opp4 -- The operatore contains strings of creation and annihilation operators of length 0 to 4 -- l=0 1 term -- l=1 6 terms (3 creation, 3 annihilation) -- l=2 9 terms (3 creation * 3 annihilation) -- l=3 9 terms (cr an an) note that an0 an1 = - an1 an0 -- l=4 9 terms -- the full operator is print("================ opp =============") print(opp) -- We only keep terms that at least act once on orbital 1 print("================ PartialOperator {1} include =============") print(PartialOperator(opp,{1},"include")) -- We only keep terms that at least act once on orbital 0 or at orbital 1 print("================ PartialOperator {0,2} include =============") print(PartialOperator(opp,{0,2},"include")) -- We remove all terms that act on orbital 1 print("================ PartialOperator {1} exclude =============") print(PartialOperator(opp,{1},"exclude")) -- We exclude all terms that act on orbital 0 and we exclude all terms that act on orbital 2 print("================ PartialOperator {0,2} exclude =============") print(PartialOperator(opp,{0,2},"exclude")) -- We only keep the terms that keep the occupation of orbital 1 conserved print("================ PartialOperator {1} conserve =============") print(PartialOperator(opp,{1},"conserve")) -- We only keep the terms that keep the occupation of orbital 0 conserved and that keep -- the occupation of orbital 2 conserved print("================ PartialOperator {0,2} conserve =============") print(PartialOperator(opp,{0,2},"conserve")) -- We only keep those terms that keep the sum of the occupation of orbital 0 and 2 conserved print("================ PartialOperator {{0,2}} conserve =============") print(PartialOperator(opp,{{0,2}},"conserve")) ==== Result ==== ================ opp ============= Operator: Operator QComplex = 0 (Real==0 or Complex==1 or Mixed==2) MaxLength = 4 (largest number of product of lader operators) NFermionic modes = 3 (Number of fermionic modes (site, spin, orbital, ...) in the one particle basis) NBosonic modes = 0 (Number of bosonic modes (phonon modes, ...) in the one particle basis) Operator of Length 0 QComplex = 0 (Real==0 or Complex==1) N = 1 (number of operators of length 0) | 1.00000000000000E+00 Operator of Length 1 QComplex = 0 (Real==0 or Complex==1) N = 6 (number of operators of length 1) C 0 | 1.00000000000000E+00 C 1 | 1.00000000000000E+00 C 2 | 1.00000000000000E+00 A 0 | 4.00000000000000E+00 A 1 | 4.00000000000000E+00 A 2 | 4.00000000000000E+00 Operator of Length 2 QComplex = 0 (Real==0 or Complex==1) N = 9 (number of operators of length 2) C 0 A 0 | 4.00000000000000E+00 C 1 A 0 | 4.00000000000000E+00 C 2 A 0 | 4.00000000000000E+00 C 0 A 1 | 4.00000000000000E+00 C 1 A 1 | 4.00000000000000E+00 C 2 A 1 | 4.00000000000000E+00 C 0 A 2 | 4.00000000000000E+00 C 1 A 2 | 4.00000000000000E+00 C 2 A 2 | 4.00000000000000E+00 Operator of Length 3 QComplex = 0 (Real==0 or Complex==1) N = 9 (number of operators of length 3) C 0 A 1 A 0 | 0.00000000000000E+00 C 0 A 2 A 0 | 0.00000000000000E+00 C 1 A 1 A 0 | 0.00000000000000E+00 C 1 A 2 A 0 | 0.00000000000000E+00 C 2 A 1 A 0 | 0.00000000000000E+00 C 2 A 2 A 0 | 0.00000000000000E+00 C 0 A 2 A 1 | 0.00000000000000E+00 C 1 A 2 A 1 | 0.00000000000000E+00 C 2 A 2 A 1 | 0.00000000000000E+00 Operator of Length 4 QComplex = 0 (Real==0 or Complex==1) N = 9 (number of operators of length 4) C 1 C 0 A 1 A 0 | 0.00000000000000E+00 C 2 C 0 A 1 A 0 | 0.00000000000000E+00 C 1 C 0 A 2 A 0 | 0.00000000000000E+00 C 2 C 0 A 2 A 0 | 0.00000000000000E+00 C 2 C 1 A 1 A 0 | 0.00000000000000E+00 C 2 C 1 A 2 A 0 | 0.00000000000000E+00 C 1 C 0 A 2 A 1 | 0.00000000000000E+00 C 2 C 0 A 2 A 1 | 0.00000000000000E+00 C 2 C 1 A 2 A 1 | 0.00000000000000E+00 ================ PartialOperator {1} include ============= Operator: QComplex = 0 (Real==0 or Complex==1 or Mixed==2) MaxLength = 4 (largest number of product of lader operators) NFermionic modes = 3 (Number of fermionic modes (site, spin, orbital, ...) in the one particle basis) NBosonic modes = 0 (Number of bosonic modes (phonon modes, ...) in the one particle basis) Operator of Length 1 QComplex = 0 (Real==0 or Complex==1) N = 2 (number of operators of length 1) C 1 | 1.00000000000000E+00 A 1 | 4.00000000000000E+00 Operator of Length 2 QComplex = 0 (Real==0 or Complex==1) N = 5 (number of operators of length 2) C 1 A 0 | 4.00000000000000E+00 C 0 A 1 | 4.00000000000000E+00 C 1 A 1 | 4.00000000000000E+00 C 2 A 1 | 4.00000000000000E+00 C 1 A 2 | 4.00000000000000E+00 Operator of Length 3 QComplex = 0 (Real==0 or Complex==1) N = 7 (number of operators of length 3) C 0 A 1 A 0 | 0.00000000000000E+00 C 1 A 1 A 0 | 0.00000000000000E+00 C 1 A 2 A 0 | 0.00000000000000E+00 C 2 A 1 A 0 | 0.00000000000000E+00 C 0 A 2 A 1 | 0.00000000000000E+00 C 1 A 2 A 1 | 0.00000000000000E+00 C 2 A 2 A 1 | 0.00000000000000E+00 Operator of Length 4 QComplex = 0 (Real==0 or Complex==1) N = 8 (number of operators of length 4) C 1 C 0 A 1 A 0 | 0.00000000000000E+00 C 2 C 0 A 1 A 0 | 0.00000000000000E+00 C 1 C 0 A 2 A 0 | 0.00000000000000E+00 C 2 C 1 A 1 A 0 | 0.00000000000000E+00 C 2 C 1 A 2 A 0 | 0.00000000000000E+00 C 1 C 0 A 2 A 1 | 0.00000000000000E+00 C 2 C 0 A 2 A 1 | 0.00000000000000E+00 C 2 C 1 A 2 A 1 | 0.00000000000000E+00 ================ PartialOperator {0,2} include ============= Operator: QComplex = 0 (Real==0 or Complex==1 or Mixed==2) MaxLength = 4 (largest number of product of lader operators) NFermionic modes = 3 (Number of fermionic modes (site, spin, orbital, ...) in the one particle basis) NBosonic modes = 0 (Number of bosonic modes (phonon modes, ...) in the one particle basis) Operator of Length 1 QComplex = 0 (Real==0 or Complex==1) N = 4 (number of operators of length 1) C 0 | 1.00000000000000E+00 C 2 | 1.00000000000000E+00 A 0 | 4.00000000000000E+00 A 2 | 4.00000000000000E+00 Operator of Length 2 QComplex = 0 (Real==0 or Complex==1) N = 8 (number of operators of length 2) C 0 A 0 | 4.00000000000000E+00 C 1 A 0 | 4.00000000000000E+00 C 2 A 0 | 4.00000000000000E+00 C 0 A 1 | 4.00000000000000E+00 C 2 A 1 | 4.00000000000000E+00 C 0 A 2 | 4.00000000000000E+00 C 1 A 2 | 4.00000000000000E+00 C 2 A 2 | 4.00000000000000E+00 Operator of Length 3 QComplex = 0 (Real==0 or Complex==1) N = 9 (number of operators of length 3) C 0 A 1 A 0 | 0.00000000000000E+00 C 0 A 2 A 0 | 0.00000000000000E+00 C 1 A 1 A 0 | 0.00000000000000E+00 C 1 A 2 A 0 | 0.00000000000000E+00 C 2 A 1 A 0 | 0.00000000000000E+00 C 2 A 2 A 0 | 0.00000000000000E+00 C 0 A 2 A 1 | 0.00000000000000E+00 C 1 A 2 A 1 | 0.00000000000000E+00 C 2 A 2 A 1 | 0.00000000000000E+00 Operator of Length 4 QComplex = 0 (Real==0 or Complex==1) N = 9 (number of operators of length 4) C 1 C 0 A 1 A 0 | 0.00000000000000E+00 C 2 C 0 A 1 A 0 | 0.00000000000000E+00 C 1 C 0 A 2 A 0 | 0.00000000000000E+00 C 2 C 0 A 2 A 0 | 0.00000000000000E+00 C 2 C 1 A 1 A 0 | 0.00000000000000E+00 C 2 C 1 A 2 A 0 | 0.00000000000000E+00 C 1 C 0 A 2 A 1 | 0.00000000000000E+00 C 2 C 0 A 2 A 1 | 0.00000000000000E+00 C 2 C 1 A 2 A 1 | 0.00000000000000E+00 ================ PartialOperator {1} exclude ============= Operator: QComplex = 0 (Real==0 or Complex==1 or Mixed==2) MaxLength = 4 (largest number of product of lader operators) NFermionic modes = 3 (Number of fermionic modes (site, spin, orbital, ...) in the one particle basis) NBosonic modes = 0 (Number of bosonic modes (phonon modes, ...) in the one particle basis) Operator of Length 0 QComplex = 0 (Real==0 or Complex==1) N = 1 (number of operators of length 0) | 1.00000000000000E+00 Operator of Length 1 QComplex = 0 (Real==0 or Complex==1) N = 4 (number of operators of length 1) C 0 | 1.00000000000000E+00 C 2 | 1.00000000000000E+00 A 0 | 4.00000000000000E+00 A 2 | 4.00000000000000E+00 Operator of Length 2 QComplex = 0 (Real==0 or Complex==1) N = 4 (number of operators of length 2) C 0 A 0 | 4.00000000000000E+00 C 2 A 0 | 4.00000000000000E+00 C 0 A 2 | 4.00000000000000E+00 C 2 A 2 | 4.00000000000000E+00 Operator of Length 3 QComplex = 0 (Real==0 or Complex==1) N = 2 (number of operators of length 3) C 0 A 2 A 0 | 0.00000000000000E+00 C 2 A 2 A 0 | 0.00000000000000E+00 Operator of Length 4 QComplex = 0 (Real==0 or Complex==1) N = 1 (number of operators of length 4) C 2 C 0 A 2 A 0 | 0.00000000000000E+00 ================ PartialOperator {0,2} exclude ============= Operator: QComplex = 0 (Real==0 or Complex==1 or Mixed==2) MaxLength = 4 (largest number of product of lader operators) NFermionic modes = 3 (Number of fermionic modes (site, spin, orbital, ...) in the one particle basis) NBosonic modes = 0 (Number of bosonic modes (phonon modes, ...) in the one particle basis) Operator of Length 0 QComplex = 0 (Real==0 or Complex==1) N = 1 (number of operators of length 0) | 1.00000000000000E+00 Operator of Length 1 QComplex = 0 (Real==0 or Complex==1) N = 2 (number of operators of length 1) C 1 | 1.00000000000000E+00 A 1 | 4.00000000000000E+00 Operator of Length 2 QComplex = 0 (Real==0 or Complex==1) N = 1 (number of operators of length 2) C 1 A 1 | 4.00000000000000E+00 ================ PartialOperator {1} conserve ============= Operator: QComplex = 0 (Real==0 or Complex==1 or Mixed==2) MaxLength = 4 (largest number of product of lader operators) NFermionic modes = 3 (Number of fermionic modes (site, spin, orbital, ...) in the one particle basis) NBosonic modes = 0 (Number of bosonic modes (phonon modes, ...) in the one particle basis) Operator of Length 0 QComplex = 0 (Real==0 or Complex==1) N = 1 (number of operators of length 0) | 1.00000000000000E+00 Operator of Length 1 QComplex = 0 (Real==0 or Complex==1) N = 4 (number of operators of length 1) C 0 | 1.00000000000000E+00 C 2 | 1.00000000000000E+00 A 0 | 4.00000000000000E+00 A 2 | 4.00000000000000E+00 Operator of Length 2 QComplex = 0 (Real==0 or Complex==1) N = 5 (number of operators of length 2) C 0 A 0 | 4.00000000000000E+00 C 2 A 0 | 4.00000000000000E+00 C 1 A 1 | 4.00000000000000E+00 C 0 A 2 | 4.00000000000000E+00 C 2 A 2 | 4.00000000000000E+00 Operator of Length 3 QComplex = 0 (Real==0 or Complex==1) N = 4 (number of operators of length 3) C 0 A 2 A 0 | 0.00000000000000E+00 C 1 A 1 A 0 | 0.00000000000000E+00 C 2 A 2 A 0 | 0.00000000000000E+00 C 1 A 2 A 1 | 0.00000000000000E+00 Operator of Length 4 QComplex = 0 (Real==0 or Complex==1) N = 5 (number of operators of length 4) C 1 C 0 A 1 A 0 | 0.00000000000000E+00 C 2 C 0 A 2 A 0 | 0.00000000000000E+00 C 2 C 1 A 1 A 0 | 0.00000000000000E+00 C 1 C 0 A 2 A 1 | 0.00000000000000E+00 C 2 C 1 A 2 A 1 | 0.00000000000000E+00 ================ PartialOperator {0,2} conserve ============= Operator: QComplex = 0 (Real==0 or Complex==1 or Mixed==2) MaxLength = 4 (largest number of product of lader operators) NFermionic modes = 3 (Number of fermionic modes (site, spin, orbital, ...) in the one particle basis) NBosonic modes = 0 (Number of bosonic modes (phonon modes, ...) in the one particle basis) Operator of Length 0 QComplex = 0 (Real==0 or Complex==1) N = 1 (number of operators of length 0) | 1.00000000000000E+00 Operator of Length 1 QComplex = 0 (Real==0 or Complex==1) N = 2 (number of operators of length 1) C 1 | 1.00000000000000E+00 A 1 | 4.00000000000000E+00 Operator of Length 2 QComplex = 0 (Real==0 or Complex==1) N = 3 (number of operators of length 2) C 0 A 0 | 4.00000000000000E+00 C 1 A 1 | 4.00000000000000E+00 C 2 A 2 | 4.00000000000000E+00 Operator of Length 3 QComplex = 0 (Real==0 or Complex==1) N = 2 (number of operators of length 3) C 0 A 1 A 0 | 0.00000000000000E+00 C 2 A 2 A 1 | 0.00000000000000E+00 Operator of Length 4 QComplex = 0 (Real==0 or Complex==1) N = 3 (number of operators of length 4) C 1 C 0 A 1 A 0 | 0.00000000000000E+00 C 2 C 0 A 2 A 0 | 0.00000000000000E+00 C 2 C 1 A 2 A 1 | 0.00000000000000E+00 ================ PartialOperator {{0,2}} conserve ============= Operator: QComplex = 0 (Real==0 or Complex==1 or Mixed==2) MaxLength = 4 (largest number of product of lader operators) NFermionic modes = 3 (Number of fermionic modes (site, spin, orbital, ...) in the one particle basis) NBosonic modes = 0 (Number of bosonic modes (phonon modes, ...) in the one particle basis) Operator of Length 0 QComplex = 0 (Real==0 or Complex==1) N = 1 (number of operators of length 0) | 1.00000000000000E+00 Operator of Length 1 QComplex = 0 (Real==0 or Complex==1) N = 2 (number of operators of length 1) C 1 | 1.00000000000000E+00 A 1 | 4.00000000000000E+00 Operator of Length 2 QComplex = 0 (Real==0 or Complex==1) N = 5 (number of operators of length 2) C 0 A 0 | 4.00000000000000E+00 C 2 A 0 | 4.00000000000000E+00 C 1 A 1 | 4.00000000000000E+00 C 0 A 2 | 4.00000000000000E+00 C 2 A 2 | 4.00000000000000E+00 Operator of Length 3 QComplex = 0 (Real==0 or Complex==1) N = 4 (number of operators of length 3) C 0 A 1 A 0 | 0.00000000000000E+00 C 2 A 1 A 0 | 0.00000000000000E+00 C 0 A 2 A 1 | 0.00000000000000E+00 C 2 A 2 A 1 | 0.00000000000000E+00 Operator of Length 4 QComplex = 0 (Real==0 or Complex==1) N = 5 (number of operators of length 4) C 1 C 0 A 1 A 0 | 0.00000000000000E+00 C 2 C 0 A 2 A 0 | 0.00000000000000E+00 C 2 C 1 A 1 A 0 | 0.00000000000000E+00 C 1 C 0 A 2 A 1 | 0.00000000000000E+00 C 2 C 1 A 2 A 1 | 0.00000000000000E+00 ===== Table of contents ===== {{indexmenu>.#1}}