init_sites_kagome Subroutine

private subroutine init_sites_kagome(this)

Type Bound

kagome

Arguments

Type IntentOptional Attributes Name
class(kagome) :: this

Contents

Source Code


Source Code

    subroutine init_sites_kagome(this)
        ! the unit cell of the kagome i use is:
        ! ___
        ! \./  which is encoded as 1 - 4
        ! /_\                      2/- 5
        !    \                     3/  6
        !
        ! see below how this is implemented specifically!
        class(kagome) :: this
        integer, allocatable :: order(:)
        integer :: i
        character(*), parameter :: this_routine = "init_sites_kagome"

        allocate(order(this%get_nsites()), source = 0)

        if (t_input_order .and. this%t_bipartite_order) then
            order = orbital_order
        else
            order = [(i, i = 1, this%get_nsites())]
        end if


        ! and i think i will for the 6-site, 1x2 and 2x1 12 site and 2x2 24-site
        ! hard encode the neighbors and stuff because this seems to be a pain
        ! in the ass!

        if (this%is_periodic()) then
            if (this%length(1) == 1 .and. this%length(2) == 1) then
                ! the smallest cluster
                this%sites(order(1)) = site(order(1), 3, order([2, 4, 6]))
                this%sites(order(2)) = site(order(2), 4, order([1, 3, 4, 5]))
                this%sites(order(3)) = site(order(3), 3, order([2, 5, 6]))
                this%sites(order(4)) = site(order(4), 3, order([1, 2, 6]))
                this%sites(order(5)) = site(order(5), 3, order([2, 3, 6]))
                this%sites(order(6)) = site(order(6), 4, order([1, 3, 4, 5]))

            else if (this%length(1) == 1 .and. this%length(2) == 2) then
                ! the 1x2 cluster with 12-sites:
                this%sites(1) = site(1, 4, [2, 4, 10, 12])
                this%sites(2) = site(2, 4, [1, 3, 4, 5])
                this%sites(3) = site(3, 4, [2, 5, 11, 12])
                this%sites(4) = site(4, 4, [1, 2, 6, 7])
                this%sites(5) = site(5, 4, [2, 3, 6, 9])
                this%sites(6) = site(6, 4, [4, 5, 7, 9])
                this%sites(7) = site(7, 4, [4, 6, 8, 10])
                this%sites(8) = site(8, 4, [7, 9, 10, 11])
                this%sites(9) = site(9, 4, [5, 6, 8, 11])
                this%sites(10) = site(10, 4, [1, 7, 8, 12])
                this%sites(11) = site(11, 4, [3, 8, 9, 12])
                this%sites(12) = site(12, 4, [1, 3, 10, 11])

            else if (this%length(1) == 2 .and. this%length(2) == 1) then
                ! the 2x1 12-site cluster:
                this%sites(1) = site(1, 3, [2, 4, 12])
                this%sites(2) = site(2, 4, [1, 3, 4, 5])
                this%sites(3) = site(3, 3, [2, 5, 6])
                this%sites(4) = site(4, 3, [1, 2, 12])
                this%sites(5) = site(5, 3, [2, 3, 6])
                this%sites(6) = site(6, 4, [3, 5, 7, 10])
                this%sites(7) = site(7, 3, [6, 8, 10])
                this%sites(8) = site(8, 4, [7, 9, 10, 11])
                this%sites(9) = site(9, 3, [8, 11, 12])
                this%sites(10) = site(10, 3, [6, 7, 8])
                this%sites(11) = site(11, 3, [8, 9, 12])
                this%sites(12) = site(12, 4, [1, 4, 9, 11])

            else if (this%length(1) == 2 .and. this%length(2) == 2) then
                ! the 2x2 24-site cluster.. puh.. thats a lot to do..
                this%sites(1) = site(1, 4,   [2, 4, 10, 24])
                this%sites(2) = site(2, 4,   [1, 3,  4,  5])
                this%sites(3) = site(3, 4,   [2, 5, 11, 12])
                this%sites(4) = site(4, 4,   [1, 2,  7, 18])
                this%sites(5) = site(5, 4,   [2, 3,  6,  9])
                this%sites(6) = site(6, 4,   [5, 9, 16, 19])
                this%sites(7) = site(7, 4,   [4, 8, 10, 18])
                this%sites(8) = site(8, 4,   [7, 9, 10, 11])
                this%sites(9) = site(9, 4,   [5, 6,  8, 11])
                this%sites(10) = site(10, 4, [1,  7, 8, 24])
                this%sites(11) = site(11, 4, [3,  8, 9, 12])
                this%sites(12) = site(12, 4, [3, 11,13, 22])
                this%sites(13) = site(13, 4, [12,14,16, 22])
                this%sites(14) = site(14, 4, [13,15,16, 17])
                this%sites(15) = site(15, 4, [14,17,23, 24])
                this%sites(16) = site(16, 4, [6, 13,14, 19])
                this%sites(17) = site(17, 4, [14,15,18, 21])
                this%sites(18) = site(18, 4, [4, 7, 17, 21])
                this%sites(19) = site(19, 4, [6, 16,20, 22])
                this%sites(20) = site(20, 4, [19,21,22, 23])
                this%sites(21) = site(21, 4, [17,18,20, 23])
                this%sites(22) = site(22, 4, [12,13,19, 20])
                this%sites(23) = site(23, 4, [15,20,21, 24])
                this%sites(24) = site(24, 4, [1, 10,15, 23])

            else if (this%length(1) == 3 .and. this%length(2) == 2) then
                ! the 3x2x6 36-site cluster
                this%sites( 1) = site( 1, 4, [ 2, 4,16,36])
                this%sites( 2) = site( 2, 4, [ 1, 3, 4, 5])
                this%sites( 3) = site( 3, 4, [ 2, 5,17,18])
                this%sites( 4) = site( 4, 4, [ 1, 2, 7,24])
                this%sites( 5) = site( 5, 4, [ 2, 3, 6, 9])
                this%sites( 6) = site( 6, 4, [ 5, 9,22,25])
                this%sites( 7) = site( 7, 4, [ 4, 8,10,24])
                this%sites( 8) = site( 8, 4, [ 7, 9,10,11])
                this%sites( 9) = site( 9, 4, [ 5, 6, 8,11])
                this%sites(10) = site(10, 4, [ 7, 8,13,30])
                this%sites(11) = site(11, 4, [ 8, 9,12,15])
                this%sites(12) = site(12, 4, [11,15,28,31])
                this%sites(13) = site(13, 4, [10,14,16,36])
                this%sites(14) = site(14, 4, [13,15,16,17])
                this%sites(15) = site(15, 4, [11,12,14,17])
                this%sites(16) = site(16, 4, [ 1,13,14,36])
                this%sites(17) = site(17, 4, [ 3,14,15,18])
                this%sites(18) = site(18, 4, [ 3,17,19,34])
                this%sites(19) = site(19, 4, [18,20,22,34])
                this%sites(20) = site(20, 4, [19,21,22,23])
                this%sites(21) = site(21, 4, [20,23,35,36])
                this%sites(22) = site(22, 4, [ 6,19,20,25])
                this%sites(23) = site(23, 4, [20,21,24,27])
                this%sites(24) = site(24, 4, [ 4, 7,23,27])
                this%sites(25) = site(25, 4, [ 6,22,26,28])
                this%sites(26) = site(26, 4, [25,27,28,29])
                this%sites(27) = site(27, 4, [23,24,26,29])
                this%sites(28) = site(28, 4, [12,25,26,31])
                this%sites(29) = site(29, 4, [26,27,30,33])
                this%sites(30) = site(30, 4, [10,13,29,33])
                this%sites(31) = site(31, 4, [12,28,32,34])
                this%sites(32) = site(32, 4, [31,33,34,35])
                this%sites(33) = site(33, 4, [29,30,32,35])
                this%sites(34) = site(34, 4, [18,19,31,32])
                this%sites(35) = site(35, 4, [21,32,33,36])
                this%sites(36) = site(36, 4, [ 1,16,21,35])

            else if (this%length(1) == 4 .and. this%length(2) == 2) then
                ! the 4x2x6 48-site cluster
                this%sites( 1) = site( 1, 4, [ 2, 4,22,48])
                this%sites( 2) = site( 2, 4, [ 1, 3, 4, 5])
                this%sites( 3) = site( 3, 4, [ 2, 5,23,24])
                this%sites( 4) = site( 4, 4, [ 1, 2, 7,30])
                this%sites( 5) = site( 5, 4, [ 2, 3, 6, 9])
                this%sites( 6) = site( 6, 4, [ 5, 9,28,31])
                this%sites( 7) = site( 7, 4, [ 4, 8,10,30])
                this%sites( 8) = site( 8, 4, [ 7, 9,10,11])
                this%sites( 9) = site( 9, 4, [ 5, 6, 8,11])
                this%sites(10) = site(10, 4, [ 7, 8,13,36])
                this%sites(11) = site(11, 4, [ 8, 9,12,15])
                this%sites(12) = site(12, 4, [11,15,34,37])
                this%sites(13) = site(13, 4, [10,14,16,36])
                this%sites(14) = site(14, 4, [13,15,16,17])
                this%sites(15) = site(15, 4, [11,12,14,17])
                this%sites(16) = site(16, 4, [13,14,19,42])
                this%sites(17) = site(17, 4, [14,15,18,21])
                this%sites(18) = site(18, 4, [17,21,40,43])
                this%sites(19) = site(19, 4, [16,20,22,42])
                this%sites(20) = site(20, 4, [19,21,22,23])
                this%sites(21) = site(21, 4, [17,18,20,23])
                this%sites(22) = site(22, 4, [ 1,19,20,48])
                this%sites(23) = site(23, 4, [ 3,20,21,24])
                this%sites(24) = site(24, 4, [ 3,23,25,46])
                this%sites(25) = site(25, 4, [24,26,28,46])
                this%sites(26) = site(26, 4, [25,27,28,29])
                this%sites(27) = site(27, 4, [26,29,47,48])
                this%sites(28) = site(28, 4, [ 6,25,26,31])
                this%sites(29) = site(29, 4, [26,27,30,33])
                this%sites(30) = site(30, 4, [ 4, 7,29,33])
                this%sites(31) = site(31, 4, [ 6,28,32,34])
                this%sites(32) = site(32, 4, [31,33,34,35])
                this%sites(33) = site(33, 4, [29,30,32,35])
                this%sites(34) = site(34, 4, [12,31,32,37])
                this%sites(35) = site(35, 4, [32,33,36,39])
                this%sites(36) = site(36, 4, [10,13,35,39])
                this%sites(37) = site(37, 4, [12,34,38,40])
                this%sites(38) = site(38, 4, [37,39,40,41])
                this%sites(39) = site(39, 4, [35,36,38,41])
                this%sites(40) = site(40, 4, [18,37,38,43])
                this%sites(41) = site(41, 4, [38,39,42,45])
                this%sites(42) = site(42, 4, [16,19,41,45])
                this%sites(43) = site(43, 4, [18,40,44,46])
                this%sites(44) = site(44, 4, [43,45,46,47])
                this%sites(45) = site(45, 4, [41,42,44,47])
                this%sites(46) = site(46, 4, [24,25,43,44])
                this%sites(47) = site(47, 4, [27,44,45,48])
                this%sites(48) = site(48, 4, [ 1,22,27,47])

            else
                call stop_all(this_routine, &
                              "only 1x1,1x2,2x1, 2x2, 3x2 and 4x2 clusters implemented for kagome yet!")
            end if

        else
            call stop_all(this_routine, &
                          "closed boundary conditions not yet implemented for kagome lattice!")

        end if

    end subroutine init_sites_kagome