| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| integer | :: | I | ||||
| integer | :: | J |
INTEGER FUNCTION NEWTMatInd(I, J) ! In: ! i,j: spin orbitals. ! Return the index of the <i|h|j> element in TMatSym2. ! See notes for TMatInd. Used post-freezing. IMPLICIT NONE INTEGER I, J, A, B, symI, symJ, Block, ind, K, L A = mod(I, 2) B = mod(J, 2) ! If TMatInd = -1, then the spin-orbitals have different spins, or are symmetry !disallowed therefore have a zero integral (apart from in UHF - might cause problem if we want this) IF (A /= B) THEN NEWTMatInd = -1 RETURN end if !To convert to spatial orbitals K = (I + 1) / 2 L = (J + 1) / 2 symI = SYMCLASSES2(K) symJ = SYMCLASSES2(L) IF (symI /= symJ) THEN NEWTMatInd = -1 RETURN ELSE IF (symI == 1) THEN Block = 0 ELSE Block = SYMLABELINTSCUM2(symI - 1) end if ! Convert K and L into their index within their symmetry class. K = StateSymMap(K) L = StateSymMap(L) IF (K >= L) THEN ind = (K * (K - 1)) / 2 + L ELSE ind = (L * (L - 1)) / 2 + K end if NEWTMatInd = Block + ind RETURN end if END FUNCTION NewTMatInd