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