示例#1
0
def irrep_index(s, S, J, Nmax, Nmin=0, indx=0):
    """
	constructs the simplectic irrep starting with lowest grade U(3) states s

	inputs: 
		s: Lowest grade U(3) irrep, U3 class
		S: Spin, integer or half integer
		J: angular momentum: integer or half integer
		Nmax: max number of excitations, integer
		Nmin: Starting excitation level, integer, optional with defaut Nmin=0
		index: Starting indexing number, option, default is indx=0
	output:
		irrep: Dictionary {N: (n,r,w,k,L)}
		index: Dictionary {(n,r,w,k,L):i}
			where n: Raising polynomial U3 content, class U3
				  w: U3 content of states in Sp irrep, class U3
				  r: Multiplicity index of w in sxn->w, integer>0
				  k: branching multiplicity SU(3)->SO(3), integer>0
				  L: Oribtal angular momentum, integer
	"""
    ###initializing dictionarys
    irrep = {}
    index = {}
    SO3branch = {}
    i = indx  # iterator for indexing the basis states
    ###intial calculations
    #generating raising polynomials
    polyset = u3boson.poly(Nmax)
    #generating Symplectic basis states and indexing states
    for N in range(Nmin, Nmax + 1, 2):
        nset = polyset[N]  #generating raising polynomails
        for n in nset:
            wset = u3.couple(s, n)
            for lm in wset:
                if lm not in SO3branch:
                    LKset = so3.branching_so3(
                        lm, S, J, Restrict=True)  #SO3branching_J(lm,mu,lset)
                    SO3branch[lm] = LKset
                #generatoring omega and rhomax
                else:
                    LKset = SO3branch[lm]
                ##########
                if LKset != {}:
                    w = U3State(s.N + N, lm)
                    rmax = wset[lm]
                    ##generating index for matrix states  starting with i=0
                    for r in range(1, rmax + 1):
                        for L in LKset:
                            for k in range(1, LKset[L] + 1):
                                psi = SpState(s, n, r, w, k, L)
                                ##generating nested dictionary irrep with the form {N:(n,rmax,w,k,L,M)}
                                if N in irrep:
                                    irrep[N].append(psi)
                                else:
                                    irrep[N] = [psi]
                                index[psi] = i
                                i = i + 1
    #print "dim", len(index)
    return irrep, index
示例#2
0
def Sp3RxU2ReducedIrrep(s, S, Nmax):
    """"
	Constructs a canonically sorted list of Sp(3,R)xSU(3) states up to Nmax
	  for given irrep s, sorts by w, n, r

	Args: 
		s: symplectic bandhead (U3State)
		S: spin (int)

	Returns:
		[state1,state2 etc]
	"""
    ## initializing list
    states = []
    ## generating dictionary of all possible raising polynomial labels
    ## dictionary of form {N:[n1,n2,..]}
    PolyDict = u3boson.poly(Nmax)
    ## iterating over N from 0 to Nmax
    for N in range(0, Nmax + 1, 2):
        ## initialize list
        wnset = {}
        ## selecting polynomial labels for each N
        polylist = PolyDict[N]
        ## order polynomial labels cannonically
        polylist_canonical = u3.canonical_sort(polylist)
        ## iterating over n in polylist
        for n in polylist_canonical:
            ## coupling raising polynomials to bandhead
            CoupledDict = u3.couple(s, n)
            ## iterating over generated list of (lbda,mu)
            #wlist_canonical=u3.canonical_sort(CoupledDict.keys())
            for lambdamu in CoupledDict:
                ## converting from SU(2) to U(3)
                w = U3State(s.N + N, lambdamu)
                ## number of times w occurs in kronecker product sxn
                rmax = CoupledDict[lambdamu]
                ## iterating over occurances of w
                if w not in wnset:
                    wnset[w] = []
                wnset[w].append((n, rmax))

        w_canonical = u3.canonical_sort(wnset.keys())
        for w in w_canonical:
            nrset = wnset[w]
            for n, rmax in nrset:
                for r in range(1, rmax + 1):
                    ## appending SpxU2 state to state list
                    state = SpU2StateRed(SpStateReduced(s, n, r, w), S)
                    states.append(state)
    return states
示例#3
0
def Sp_irrep_red(s, Nmax):
    """
	constructs a dictioanry of symplectic reduced states sorted according to excitation Nn
	currently just for s.three()>3 but will generalize soon 
	returns dictionary of the form {N:[state1, state2...]}
	"""
    StateDict = {}
    #checking that s is valid unitary U(3) label to serve as bandhead
    if Sp_bandhead_check(s):
        PolyDict = u3boson.poly(Nmax)
        for N in range(0, Nmax + 1, 2):
            polylist = PolyDict[N]
            states = []
            for n in polylist:
                CoupledDict = u3.couple(s, n)
                for lambdamu in CoupledDict:
                    w = U3State(s.N + N, lambdamu)
                    rmax = CoupledDict[lambdamu]
                    for r in range(1, rmax + 1):
                        states.append(SpStateReduced(s, n, r, w))
            StateDict[N] = states
    else:
        print "invalid bandhead"
    return StateDict
示例#4
0
#############################################################################
global Kdictionary
Kdictionary = {}
global Sdictionary
Sdictionary = {}
global SAdictionary
SAdictionary = {}
global S2dictionary
S2dictionary = {}
global Kdic
Kdic = {}
global KAdictionary
KAdictionary = {}
global Poly
Poly = u3boson.poly(20)
global Pdic
Pdic = {}


#############################################################################
def omega(n, w):
    """
  Calculates Omega(n,w)

  Args: 
    n is the symplectic multiplicity (class U3State)
    w is the symplectic weight (class U3State) 
  
  Returns:
    Omega (float). For example: