mirror of https://github.com/phonopy/phono3py.git
Improve tests of get_bz_triplets_at_q
This commit is contained in:
parent
6c6b37b1b3
commit
a7c408ce75
|
@ -205,7 +205,8 @@ long gridsys_get_triplets_at_q(long *map_triplets, long *map_q,
|
|||
rec_rotations, swappable);
|
||||
}
|
||||
|
||||
long gridsys_get_bz_triplets_at_q(long (*triplets)[3], const long grid_point,
|
||||
long gridsys_get_bz_triplets_at_q(long (*ir_triplets)[3],
|
||||
const long bz_grid_index,
|
||||
const long (*bz_grid_addresses)[3],
|
||||
const long *bz_map, const long *map_triplets,
|
||||
const long num_map_triplets,
|
||||
|
@ -231,8 +232,8 @@ long gridsys_get_bz_triplets_at_q(long (*triplets)[3], const long grid_point,
|
|||
}
|
||||
bzgrid->size = num_map_triplets;
|
||||
|
||||
num_ir =
|
||||
tpl_get_BZ_triplets_at_q(triplets, grid_point, bzgrid, map_triplets);
|
||||
num_ir = tpl_get_BZ_triplets_at_q(ir_triplets, bz_grid_index, bzgrid,
|
||||
map_triplets);
|
||||
free(bzgrid);
|
||||
bzgrid = NULL;
|
||||
|
||||
|
|
13
c/gridsys.h
13
c/gridsys.h
|
@ -225,10 +225,10 @@ long gridsys_rotate_bz_grid_index(const long bz_grid_index,
|
|||
* @brief Find independent q' of (q, q', q'') with given q.
|
||||
*
|
||||
* @param map_triplets Mapping table from all grid points to grid points of
|
||||
* independent q'
|
||||
* independent q' in GR-grid
|
||||
* @param map_q Mapping table from all grid points to grid point indices of
|
||||
* irreducible q-points under the stabilizer subgroup of q
|
||||
* @param grid_point Grid point of q
|
||||
* @param grid_index Grid point index of q in GR-grid
|
||||
* @param D_diag Diagonal elements of diagnoal matrix D of Smith normal form
|
||||
* @param is_time_reversal With (1) or without (0) time reversal symmetry
|
||||
* @param num_rot Number of rotation matrices
|
||||
|
@ -238,7 +238,7 @@ long gridsys_rotate_bz_grid_index(const long bz_grid_index,
|
|||
* @return long Number of unique element of map_triplets
|
||||
*/
|
||||
long gridsys_get_triplets_at_q(long *map_triplets, long *map_q,
|
||||
const long grid_point, const long D_diag[3],
|
||||
const long grid_index, const long D_diag[3],
|
||||
const long is_time_reversal, const long num_rot,
|
||||
const long (*rec_rotations)[3][3],
|
||||
const long swappable);
|
||||
|
@ -246,8 +246,8 @@ long gridsys_get_triplets_at_q(long *map_triplets, long *map_q,
|
|||
/**
|
||||
* @brief Search grid point triplets considering BZ surface.
|
||||
*
|
||||
* @param triplets Ir-triplets by grid point indices in bz_grid_addresses
|
||||
* @param grid_point Grid point of q
|
||||
* @param ir_triplets Ir-triplets by grid point indices in BZ-grid
|
||||
* @param bz_grid_index Grid point of q in BZ-grid
|
||||
* @param bz_grid_addresses Grid point addresses of shortest grid points
|
||||
* @param bz_map List of accumulated numbers of BZ grid points from the
|
||||
* first GR grid point to the last grid point. In type-II, [0, 1, 3, 4, ...]
|
||||
|
@ -261,7 +261,8 @@ long gridsys_get_triplets_at_q(long *map_triplets, long *map_q,
|
|||
* dense, recommended) of bz_map
|
||||
* @return long
|
||||
*/
|
||||
long gridsys_get_bz_triplets_at_q(long (*triplets)[3], const long grid_point,
|
||||
long gridsys_get_bz_triplets_at_q(long (*ir_triplets)[3],
|
||||
const long bz_grid_index,
|
||||
const long (*bz_grid_addresses)[3],
|
||||
const long *bz_map, const long *map_triplets,
|
||||
const long num_map_triplets,
|
||||
|
|
|
@ -311,19 +311,21 @@ contains
|
|||
integer(c_long) :: map_triplets(75), map_q(75)
|
||||
real(c_double) :: rec_lattice(3, 3)
|
||||
integer(c_long) :: grid_point, is_time_reversal, num_rot, num_gp, swappable
|
||||
integer :: i, j, k, num_triplets_1, num_triplets_2, bz_size
|
||||
integer :: i, j, k, num_triplets_1, num_triplets_2, bz_size, i_grgp
|
||||
integer(c_long) :: triplets(3, 75)
|
||||
integer(c_long) :: bz_grid_addresses(3, 108)
|
||||
integer(c_long) :: bz_map(75)
|
||||
integer(c_long) :: bzg2grg(108)
|
||||
|
||||
integer :: ref_num_triplets(4)
|
||||
integer(c_long) :: ref_triplets(3, 45, 4)
|
||||
integer(c_long) :: ref_ir_weights(45, 4)
|
||||
integer :: ref_num_triplets(4, 2)
|
||||
integer(c_long) :: ref_triplets(3, 45, 4, 2)
|
||||
integer(c_long) :: ref_ir_weights(45, 4, 2)
|
||||
integer :: shape_of_array(2)
|
||||
integer :: grgp(2)
|
||||
|
||||
ref_num_triplets(:) = [18, 24, 30, 45]
|
||||
ref_triplets(:, :, :) = &
|
||||
grgp(:) = [1, 7]
|
||||
ref_num_triplets(:, :) = reshape([18, 24, 30, 45, 24, 24, 45, 45], [4, 2])
|
||||
ref_triplets(:, :, :, :) = &
|
||||
reshape([ &
|
||||
1, 0, 4, 1, 1, 3, 1, 2, 2, 1, 5, 91, 1, 7, 90, &
|
||||
1, 10, 87, 1, 12, 85, 1, 13, 84, 1, 14, 83, 1, 18, 79, &
|
||||
|
@ -360,10 +362,47 @@ contains
|
|||
1, 36, 60, 1, 38, 59, 1, 39, 57, 1, 41, 56, 1, 42, 55, &
|
||||
1, 43, 54, 1, 44, 53, 1, 45, 52, 1, 46, 50, 1, 48, 49, &
|
||||
1, 62, 35, 1, 63, 34, 1, 64, 33, 1, 65, 32, 1, 66, 31, &
|
||||
1, 67, 29, 1, 69, 28, 1, 70, 26, 1, 72, 25, 1, 73, 24], &
|
||||
[3, 45, 4])
|
||||
1, 67, 29, 1, 69, 28, 1, 70, 26, 1, 72, 25, 1, 73, 24, &
|
||||
8, 0, 89, 8, 1, 88, 8, 2, 87, 8, 3, 86, 9, 4, 92, &
|
||||
8, 5, 84, 8, 6, 82, 8, 8, 81, 8, 10, 80, 8, 11, 85, &
|
||||
8, 12, 78, 8, 13, 76, 8, 14, 75, 8, 17, 79, 8, 19, 71, &
|
||||
8, 20, 69, 9, 22, 67, 8, 24, 65, 8, 27, 62, 8, 29, 66, &
|
||||
8, 31, 58, 8, 32, 57, 8, 40, 50, 8, 48, 48, 0, 0, 0, &
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, &
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, &
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, &
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, &
|
||||
8, 0, 89, 8, 1, 88, 8, 2, 87, 8, 3, 86, 9, 4, 92, &
|
||||
8, 5, 84, 8, 6, 82, 8, 8, 81, 8, 10, 80, 8, 11, 85, &
|
||||
8, 12, 78, 8, 13, 76, 8, 14, 75, 8, 17, 79, 8, 19, 71, &
|
||||
8, 20, 69, 9, 22, 67, 8, 24, 65, 8, 27, 62, 8, 29, 66, &
|
||||
8, 31, 58, 8, 32, 57, 8, 40, 50, 8, 48, 48, 0, 0, 0, &
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, &
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, &
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, &
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, &
|
||||
8, 0, 89, 8, 1, 88, 8, 2, 87, 8, 3, 86, 9, 4, 92, &
|
||||
8, 5, 84, 8, 6, 82, 8, 8, 81, 8, 10, 80, 8, 11, 85, &
|
||||
8, 12, 78, 8, 13, 76, 8, 14, 75, 8, 16, 74, 8, 17, 79, &
|
||||
8, 19, 71, 8, 20, 69, 9, 22, 67, 9, 23, 73, 8, 24, 65, &
|
||||
8, 25, 64, 8, 27, 62, 8, 29, 66, 8, 31, 58, 8, 32, 57, &
|
||||
8, 33, 56, 8, 34, 55, 8, 40, 50, 9, 41, 49, 9, 42, 54, &
|
||||
8, 43, 46, 8, 44, 45, 8, 48, 48, 8, 50, 40, 8, 51, 38, &
|
||||
9, 53, 36, 8, 58, 31, 9, 61, 35, 8, 62, 27, 8, 63, 26, &
|
||||
8, 71, 19, 9, 72, 18, 8, 79, 17, 8, 81, 8, 8, 89, 0, &
|
||||
8, 0, 89, 8, 1, 88, 8, 2, 87, 8, 3, 86, 9, 4, 92, &
|
||||
8, 5, 84, 8, 6, 82, 8, 8, 81, 8, 10, 80, 8, 11, 85, &
|
||||
8, 12, 78, 8, 13, 76, 8, 14, 75, 8, 16, 74, 8, 17, 79, &
|
||||
8, 19, 71, 8, 20, 69, 9, 22, 67, 9, 23, 73, 8, 24, 65, &
|
||||
8, 25, 64, 8, 27, 62, 8, 29, 66, 8, 31, 58, 8, 32, 57, &
|
||||
8, 33, 56, 8, 34, 55, 8, 40, 50, 9, 41, 49, 9, 42, 54, &
|
||||
8, 43, 46, 8, 44, 45, 8, 48, 48, 8, 50, 40, 8, 51, 38, &
|
||||
9, 53, 36, 8, 58, 31, 9, 61, 35, 8, 62, 27, 8, 63, 26, &
|
||||
8, 71, 19, 9, 72, 18, 8, 79, 17, 8, 81, 8, 8, 89, 0 &
|
||||
], &
|
||||
[3, 45, 4, 2])
|
||||
|
||||
ref_ir_weights(:, :) = &
|
||||
ref_ir_weights(:, :, :) = &
|
||||
reshape([ &
|
||||
2, 2, 1, 8, 4, 8, 4, 8, 8, 4, 4, 2, 4, 4, 2, 4, 2, 4, 0, 0, 0, 0, 0, &
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, &
|
||||
|
@ -372,10 +411,17 @@ contains
|
|||
1, 1, 1, 1, 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 2, 2, 2, 2, 2, 2, 2, 2, &
|
||||
2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, &
|
||||
1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, &
|
||||
1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2], &
|
||||
[45, 4])
|
||||
1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, &
|
||||
2, 4, 4, 4, 4, 4, 2, 2, 4, 4, 4, 4, 4, 2, 2, 4, 4, 2, 2, 4, 2, 4, &
|
||||
2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, &
|
||||
2, 4, 4, 4, 4, 4, 2, 2, 4, 4, 4, 4, 4, 2, 2, 4, 4, 2, 2, 4, 2, 4, &
|
||||
2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, &
|
||||
1, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 1, 1, 2, 2, 2, 2, 2, 1, 2, &
|
||||
1, 2, 2, 2, 1, 2, 2, 2, 2, 1, 1, 2, 2, 1, 2, 1, 2, 1, 2, 1, 1, 1, &
|
||||
1, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 1, 1, 2, 2, 2, 2, 2, 1, &
|
||||
2, 1, 2, 2, 2, 1, 2, 2, 2, 2, 1, 1, 2, 2, 1, 2, 1, 2, 1, 2, 1, 1, 1 &
|
||||
], [45, 4, 2])
|
||||
|
||||
grid_point = 1
|
||||
num_rot = 12
|
||||
num_gp = 75
|
||||
D_diag(:) = [1, 5, 15]
|
||||
|
@ -389,26 +435,29 @@ contains
|
|||
bz_grid_addresses, bz_map, bzg2grg, &
|
||||
D_diag, Q, PS, rec_lattice, int(2, c_long))
|
||||
call assert_int(bz_size, 93)
|
||||
i = 1
|
||||
do j = 0, 1
|
||||
swappable = 1 - j
|
||||
do k = 0, 1
|
||||
is_time_reversal = 1 - k
|
||||
num_triplets_1 = gridsys_get_triplets_at_q( &
|
||||
map_triplets, map_q, grid_point, D_diag, &
|
||||
is_time_reversal, num_rot, &
|
||||
wurtzite_tilde_rec_rotations_without_time_reversal, swappable)
|
||||
num_triplets_2 = gridsys_get_bz_triplets_at_q( &
|
||||
triplets, grid_point, bz_grid_addresses, bz_map, &
|
||||
map_triplets, num_gp, D_diag, Q, int(2, c_long))
|
||||
write (*, '("swappable:", i0, ", is_time_reversal:", i0)', advance='no') swappable, is_time_reversal
|
||||
call assert_int(num_triplets_1, num_triplets_2)
|
||||
call assert_int(num_triplets_1, ref_num_triplets(i))
|
||||
shape_of_array(:) = [3, num_triplets_2]
|
||||
call assert_2D_array_c_long( &
|
||||
triplets, ref_triplets(:, :, i), shape_of_array)
|
||||
write (*, '(" OK")')
|
||||
i = i + 1
|
||||
do i_grgp = 1, 2
|
||||
grid_point = grgp(i_grgp)
|
||||
i = 1
|
||||
do j = 0, 1
|
||||
swappable = 1 - j
|
||||
do k = 0, 1
|
||||
is_time_reversal = 1 - k
|
||||
num_triplets_1 = gridsys_get_triplets_at_q( &
|
||||
map_triplets, map_q, grid_point, D_diag, &
|
||||
is_time_reversal, num_rot, &
|
||||
wurtzite_tilde_rec_rotations_without_time_reversal, swappable)
|
||||
num_triplets_2 = gridsys_get_bz_triplets_at_q( &
|
||||
triplets, bz_map(grid_point + 1), bz_grid_addresses, bz_map, &
|
||||
map_triplets, num_gp, D_diag, Q, int(2, c_long))
|
||||
write (*, '("swappable:", i0, ", is_time_reversal:", i0)', advance='no') swappable, is_time_reversal
|
||||
call assert_int(num_triplets_1, num_triplets_2)
|
||||
call assert_int(num_triplets_1, ref_num_triplets(i, i_grgp))
|
||||
shape_of_array(:) = [3, num_triplets_2]
|
||||
call assert_2D_array_c_long( &
|
||||
triplets, ref_triplets(:, :, i, i_grgp), shape_of_array)
|
||||
write (*, '(" OK")')
|
||||
i = i + 1
|
||||
end do
|
||||
end do
|
||||
end do
|
||||
|
||||
|
|
|
@ -1031,97 +1031,202 @@ TEST(test_gridsys, test_gridsys_get_triplets_at_q_wurtzite_force_SNF) {
|
|||
* @details Four patterns, is_time_reversal x swappable, are tested.
|
||||
*/
|
||||
TEST(test_gridsys, test_gridsys_get_bz_triplets_at_q_wurtzite_force_SNF) {
|
||||
long ref_triplets[8][45][3] = {
|
||||
{{1, 0, 4}, {1, 1, 3}, {1, 2, 2}, {1, 5, 91}, {1, 7, 90},
|
||||
{1, 10, 87}, {1, 12, 85}, {1, 13, 84}, {1, 14, 83}, {1, 18, 79},
|
||||
{1, 19, 77}, {1, 23, 74}, {1, 31, 66}, {1, 32, 65}, {1, 33, 64},
|
||||
{1, 36, 60}, {1, 38, 59}, {1, 41, 56}, {0, 0, 0}, {0, 0, 0},
|
||||
{0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0},
|
||||
{0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0},
|
||||
{0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0},
|
||||
{0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0},
|
||||
{0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}},
|
||||
{{1, 0, 4}, {1, 1, 3}, {1, 2, 2}, {1, 5, 91}, {1, 7, 90},
|
||||
{1, 8, 88}, {1, 10, 87}, {1, 11, 86}, {1, 12, 85}, {1, 13, 84},
|
||||
{1, 14, 83}, {1, 15, 81}, {1, 17, 80}, {1, 18, 79}, {1, 19, 77},
|
||||
{1, 23, 74}, {1, 31, 66}, {1, 32, 65}, {1, 33, 64}, {1, 34, 63},
|
||||
{1, 35, 62}, {1, 36, 60}, {1, 38, 59}, {1, 41, 56}, {0, 0, 0},
|
||||
{0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0},
|
||||
{0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0},
|
||||
{0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0},
|
||||
{0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}},
|
||||
{{1, 0, 4}, {1, 1, 3}, {1, 2, 2}, {1, 3, 1}, {1, 4, 0},
|
||||
{1, 5, 91}, {1, 7, 90}, {1, 8, 88}, {1, 10, 87}, {1, 11, 86},
|
||||
{1, 12, 85}, {1, 13, 84}, {1, 14, 83}, {1, 15, 81}, {1, 17, 80},
|
||||
{1, 18, 79}, {1, 19, 77}, {1, 21, 76}, {1, 22, 75}, {1, 23, 74},
|
||||
{1, 31, 66}, {1, 32, 65}, {1, 33, 64}, {1, 34, 63}, {1, 35, 62},
|
||||
{1, 36, 60}, {1, 38, 59}, {1, 39, 57}, {1, 41, 56}, {1, 42, 55},
|
||||
{0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0},
|
||||
{0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0},
|
||||
{0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}},
|
||||
{{1, 0, 4}, {1, 1, 3}, {1, 2, 2}, {1, 3, 1}, {1, 4, 0},
|
||||
{1, 5, 91}, {1, 7, 90}, {1, 8, 88}, {1, 10, 87}, {1, 11, 86},
|
||||
{1, 12, 85}, {1, 13, 84}, {1, 14, 83}, {1, 15, 81}, {1, 17, 80},
|
||||
{1, 18, 79}, {1, 19, 77}, {1, 21, 76}, {1, 22, 75}, {1, 23, 74},
|
||||
{1, 31, 66}, {1, 32, 65}, {1, 33, 64}, {1, 34, 63}, {1, 35, 62},
|
||||
{1, 36, 60}, {1, 38, 59}, {1, 39, 57}, {1, 41, 56}, {1, 42, 55},
|
||||
{1, 43, 54}, {1, 44, 53}, {1, 45, 52}, {1, 46, 50}, {1, 48, 49},
|
||||
{1, 62, 35}, {1, 63, 34}, {1, 64, 33}, {1, 65, 32}, {1, 66, 31},
|
||||
{1, 67, 29}, {1, 69, 28}, {1, 70, 26}, {1, 72, 25}, {1, 73, 24}},
|
||||
{{1, 0, 4}, {1, 1, 3}, {1, 2, 2}, {1, 5, 30}, {1, 6, 28},
|
||||
{1, 10, 25}, {1, 11, 23}, {1, 13, 21}, {1, 16, 19}, {1, 31, 66},
|
||||
{1, 32, 65}, {1, 33, 64}, {1, 36, 92}, {1, 37, 90}, {1, 41, 87},
|
||||
{1, 42, 85}, {1, 44, 83}, {1, 47, 81}, {0, 0, 0}, {0, 0, 0},
|
||||
{0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0},
|
||||
{0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0},
|
||||
{0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0},
|
||||
{0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0},
|
||||
{0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}},
|
||||
{{1, 0, 4}, {1, 1, 3}, {1, 2, 2}, {1, 5, 30}, {1, 6, 28},
|
||||
{1, 10, 25}, {1, 11, 23}, {1, 13, 21}, {1, 16, 19}, {1, 31, 66},
|
||||
{1, 32, 65}, {1, 33, 64}, {1, 34, 63}, {1, 35, 62}, {1, 36, 92},
|
||||
{1, 37, 90}, {1, 39, 89}, {1, 40, 88}, {1, 41, 87}, {1, 42, 85},
|
||||
{1, 44, 83}, {1, 46, 82}, {1, 47, 81}, {1, 48, 80}, {0, 0, 0},
|
||||
{0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0},
|
||||
{0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0},
|
||||
{0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0},
|
||||
{0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}},
|
||||
{{1, 0, 4}, {1, 1, 3}, {1, 2, 2}, {1, 3, 1}, {1, 4, 0},
|
||||
{1, 5, 30}, {1, 6, 28}, {1, 8, 27}, {1, 9, 26}, {1, 10, 25},
|
||||
{1, 11, 23}, {1, 13, 21}, {1, 15, 20}, {1, 16, 19}, {1, 17, 18},
|
||||
{1, 31, 66}, {1, 32, 65}, {1, 33, 64}, {1, 34, 63}, {1, 35, 62},
|
||||
{1, 36, 92}, {1, 37, 90}, {1, 39, 89}, {1, 40, 88}, {1, 41, 87},
|
||||
{1, 42, 85}, {1, 44, 83}, {1, 46, 82}, {1, 47, 81}, {1, 48, 80},
|
||||
{0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0},
|
||||
{0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0},
|
||||
{0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}},
|
||||
{{1, 0, 4}, {1, 1, 3}, {1, 2, 2}, {1, 3, 1}, {1, 4, 0},
|
||||
{1, 5, 30}, {1, 6, 28}, {1, 8, 27}, {1, 9, 26}, {1, 10, 25},
|
||||
{1, 11, 23}, {1, 13, 21}, {1, 15, 20}, {1, 16, 19}, {1, 17, 18},
|
||||
{1, 31, 66}, {1, 32, 65}, {1, 33, 64}, {1, 34, 63}, {1, 35, 62},
|
||||
{1, 36, 92}, {1, 37, 90}, {1, 39, 89}, {1, 40, 88}, {1, 41, 87},
|
||||
{1, 42, 85}, {1, 44, 83}, {1, 46, 82}, {1, 47, 81}, {1, 48, 80},
|
||||
{1, 62, 35}, {1, 63, 34}, {1, 64, 33}, {1, 65, 32}, {1, 66, 31},
|
||||
{1, 67, 61}, {1, 68, 59}, {1, 70, 58}, {1, 71, 57}, {1, 72, 56},
|
||||
{1, 73, 54}, {1, 75, 52}, {1, 77, 51}, {1, 78, 50}, {1, 79, 49}}};
|
||||
long ref_ir_weights[8][45] = {
|
||||
{2, 2, 1, 8, 4, 8, 4, 8, 8, 4, 4, 2, 4, 4, 2, 4, 2, 4, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
|
||||
{2, 2, 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 2, 2, 2, 2, 2, 2, 4, 2,
|
||||
4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
|
||||
{1, 1, 1, 1, 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 2, 2, 2, 2, 2, 2, 2, 2,
|
||||
2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
|
||||
{1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1,
|
||||
1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2},
|
||||
{2, 2, 1, 4, 4, 2, 4, 2, 4, 4, 4, 2, 8, 8, 4, 8, 4, 8, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
|
||||
{2, 2, 1, 4, 4, 2, 4, 2, 4, 2, 2, 2, 2, 2, 4, 4, 4, 4, 4, 4, 4, 4, 4,
|
||||
4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
|
||||
{1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 4, 4,
|
||||
4, 4, 4, 4, 4, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
|
||||
{1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 2, 2, 2,
|
||||
2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2}};
|
||||
long ref_num_triplets[8] = {18, 24, 30, 45, 18, 24, 30, 45};
|
||||
long ref_triplets[2][8][45][3] = {
|
||||
{{{1, 0, 4}, {1, 1, 3}, {1, 2, 2}, {1, 5, 91}, {1, 7, 90},
|
||||
{1, 10, 87}, {1, 12, 85}, {1, 13, 84}, {1, 14, 83}, {1, 18, 79},
|
||||
{1, 19, 77}, {1, 23, 74}, {1, 31, 66}, {1, 32, 65}, {1, 33, 64},
|
||||
{1, 36, 60}, {1, 38, 59}, {1, 41, 56}, {0, 0, 0}, {0, 0, 0},
|
||||
{0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0},
|
||||
{0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0},
|
||||
{0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0},
|
||||
{0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0},
|
||||
{0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}},
|
||||
{{1, 0, 4}, {1, 1, 3}, {1, 2, 2}, {1, 5, 91}, {1, 7, 90},
|
||||
{1, 8, 88}, {1, 10, 87}, {1, 11, 86}, {1, 12, 85}, {1, 13, 84},
|
||||
{1, 14, 83}, {1, 15, 81}, {1, 17, 80}, {1, 18, 79}, {1, 19, 77},
|
||||
{1, 23, 74}, {1, 31, 66}, {1, 32, 65}, {1, 33, 64}, {1, 34, 63},
|
||||
{1, 35, 62}, {1, 36, 60}, {1, 38, 59}, {1, 41, 56}, {0, 0, 0},
|
||||
{0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0},
|
||||
{0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0},
|
||||
{0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0},
|
||||
{0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}},
|
||||
{{1, 0, 4}, {1, 1, 3}, {1, 2, 2}, {1, 3, 1}, {1, 4, 0},
|
||||
{1, 5, 91}, {1, 7, 90}, {1, 8, 88}, {1, 10, 87}, {1, 11, 86},
|
||||
{1, 12, 85}, {1, 13, 84}, {1, 14, 83}, {1, 15, 81}, {1, 17, 80},
|
||||
{1, 18, 79}, {1, 19, 77}, {1, 21, 76}, {1, 22, 75}, {1, 23, 74},
|
||||
{1, 31, 66}, {1, 32, 65}, {1, 33, 64}, {1, 34, 63}, {1, 35, 62},
|
||||
{1, 36, 60}, {1, 38, 59}, {1, 39, 57}, {1, 41, 56}, {1, 42, 55},
|
||||
{0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0},
|
||||
{0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0},
|
||||
{0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}},
|
||||
{{1, 0, 4}, {1, 1, 3}, {1, 2, 2}, {1, 3, 1}, {1, 4, 0},
|
||||
{1, 5, 91}, {1, 7, 90}, {1, 8, 88}, {1, 10, 87}, {1, 11, 86},
|
||||
{1, 12, 85}, {1, 13, 84}, {1, 14, 83}, {1, 15, 81}, {1, 17, 80},
|
||||
{1, 18, 79}, {1, 19, 77}, {1, 21, 76}, {1, 22, 75}, {1, 23, 74},
|
||||
{1, 31, 66}, {1, 32, 65}, {1, 33, 64}, {1, 34, 63}, {1, 35, 62},
|
||||
{1, 36, 60}, {1, 38, 59}, {1, 39, 57}, {1, 41, 56}, {1, 42, 55},
|
||||
{1, 43, 54}, {1, 44, 53}, {1, 45, 52}, {1, 46, 50}, {1, 48, 49},
|
||||
{1, 62, 35}, {1, 63, 34}, {1, 64, 33}, {1, 65, 32}, {1, 66, 31},
|
||||
{1, 67, 29}, {1, 69, 28}, {1, 70, 26}, {1, 72, 25}, {1, 73, 24}},
|
||||
{{1, 0, 4}, {1, 1, 3}, {1, 2, 2}, {1, 5, 30}, {1, 6, 28},
|
||||
{1, 10, 25}, {1, 11, 23}, {1, 13, 21}, {1, 16, 19}, {1, 31, 66},
|
||||
{1, 32, 65}, {1, 33, 64}, {1, 36, 92}, {1, 37, 90}, {1, 41, 87},
|
||||
{1, 42, 85}, {1, 44, 83}, {1, 47, 81}, {0, 0, 0}, {0, 0, 0},
|
||||
{0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0},
|
||||
{0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0},
|
||||
{0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0},
|
||||
{0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0},
|
||||
{0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}},
|
||||
{{1, 0, 4}, {1, 1, 3}, {1, 2, 2}, {1, 5, 30}, {1, 6, 28},
|
||||
{1, 10, 25}, {1, 11, 23}, {1, 13, 21}, {1, 16, 19}, {1, 31, 66},
|
||||
{1, 32, 65}, {1, 33, 64}, {1, 34, 63}, {1, 35, 62}, {1, 36, 92},
|
||||
{1, 37, 90}, {1, 39, 89}, {1, 40, 88}, {1, 41, 87}, {1, 42, 85},
|
||||
{1, 44, 83}, {1, 46, 82}, {1, 47, 81}, {1, 48, 80}, {0, 0, 0},
|
||||
{0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0},
|
||||
{0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0},
|
||||
{0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0},
|
||||
{0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}},
|
||||
{{1, 0, 4}, {1, 1, 3}, {1, 2, 2}, {1, 3, 1}, {1, 4, 0},
|
||||
{1, 5, 30}, {1, 6, 28}, {1, 8, 27}, {1, 9, 26}, {1, 10, 25},
|
||||
{1, 11, 23}, {1, 13, 21}, {1, 15, 20}, {1, 16, 19}, {1, 17, 18},
|
||||
{1, 31, 66}, {1, 32, 65}, {1, 33, 64}, {1, 34, 63}, {1, 35, 62},
|
||||
{1, 36, 92}, {1, 37, 90}, {1, 39, 89}, {1, 40, 88}, {1, 41, 87},
|
||||
{1, 42, 85}, {1, 44, 83}, {1, 46, 82}, {1, 47, 81}, {1, 48, 80},
|
||||
{0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0},
|
||||
{0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0},
|
||||
{0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}},
|
||||
{{1, 0, 4}, {1, 1, 3}, {1, 2, 2}, {1, 3, 1}, {1, 4, 0},
|
||||
{1, 5, 30}, {1, 6, 28}, {1, 8, 27}, {1, 9, 26}, {1, 10, 25},
|
||||
{1, 11, 23}, {1, 13, 21}, {1, 15, 20}, {1, 16, 19}, {1, 17, 18},
|
||||
{1, 31, 66}, {1, 32, 65}, {1, 33, 64}, {1, 34, 63}, {1, 35, 62},
|
||||
{1, 36, 92}, {1, 37, 90}, {1, 39, 89}, {1, 40, 88}, {1, 41, 87},
|
||||
{1, 42, 85}, {1, 44, 83}, {1, 46, 82}, {1, 47, 81}, {1, 48, 80},
|
||||
{1, 62, 35}, {1, 63, 34}, {1, 64, 33}, {1, 65, 32}, {1, 66, 31},
|
||||
{1, 67, 61}, {1, 68, 59}, {1, 70, 58}, {1, 71, 57}, {1, 72, 56},
|
||||
{1, 73, 54}, {1, 75, 52}, {1, 77, 51}, {1, 78, 50}, {1, 79, 49}}},
|
||||
{{
|
||||
{8, 0, 89}, {8, 1, 88}, {8, 2, 87}, {8, 3, 86}, {9, 4, 92},
|
||||
{8, 5, 84}, {8, 6, 82}, {8, 8, 81}, {8, 10, 80}, {8, 11, 85},
|
||||
{8, 12, 78}, {8, 13, 76}, {8, 14, 75}, {8, 17, 79}, {8, 19, 71},
|
||||
{8, 20, 69}, {9, 22, 67}, {8, 24, 65}, {8, 27, 62}, {8, 29, 66},
|
||||
{8, 31, 58}, {8, 32, 57}, {8, 40, 50}, {8, 48, 48}, {0, 0, 0},
|
||||
{0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0},
|
||||
{0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0},
|
||||
{0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0},
|
||||
{0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0},
|
||||
},
|
||||
{
|
||||
{8, 0, 89}, {8, 1, 88}, {8, 2, 87}, {8, 3, 86}, {9, 4, 92},
|
||||
{8, 5, 84}, {8, 6, 82}, {8, 8, 81}, {8, 10, 80}, {8, 11, 85},
|
||||
{8, 12, 78}, {8, 13, 76}, {8, 14, 75}, {8, 17, 79}, {8, 19, 71},
|
||||
{8, 20, 69}, {9, 22, 67}, {8, 24, 65}, {8, 27, 62}, {8, 29, 66},
|
||||
{8, 31, 58}, {8, 32, 57}, {8, 40, 50}, {8, 48, 48}, {0, 0, 0},
|
||||
{0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0},
|
||||
{0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0},
|
||||
{0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0},
|
||||
{0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0},
|
||||
},
|
||||
{
|
||||
{8, 0, 89}, {8, 1, 88}, {8, 2, 87}, {8, 3, 86}, {9, 4, 92},
|
||||
{8, 5, 84}, {8, 6, 82}, {8, 8, 81}, {8, 10, 80}, {8, 11, 85},
|
||||
{8, 12, 78}, {8, 13, 76}, {8, 14, 75}, {8, 16, 74}, {8, 17, 79},
|
||||
{8, 19, 71}, {8, 20, 69}, {9, 22, 67}, {9, 23, 73}, {8, 24, 65},
|
||||
{8, 25, 64}, {8, 27, 62}, {8, 29, 66}, {8, 31, 58}, {8, 32, 57},
|
||||
{8, 33, 56}, {8, 34, 55}, {8, 40, 50}, {9, 41, 49}, {9, 42, 54},
|
||||
{8, 43, 46}, {8, 44, 45}, {8, 48, 48}, {8, 50, 40}, {8, 51, 38},
|
||||
{9, 53, 36}, {8, 58, 31}, {9, 61, 35}, {8, 62, 27}, {8, 63, 26},
|
||||
{8, 71, 19}, {9, 72, 18}, {8, 79, 17}, {8, 81, 8}, {8, 89, 0},
|
||||
},
|
||||
{
|
||||
{8, 0, 89}, {8, 1, 88}, {8, 2, 87}, {8, 3, 86}, {9, 4, 92},
|
||||
{8, 5, 84}, {8, 6, 82}, {8, 8, 81}, {8, 10, 80}, {8, 11, 85},
|
||||
{8, 12, 78}, {8, 13, 76}, {8, 14, 75}, {8, 16, 74}, {8, 17, 79},
|
||||
{8, 19, 71}, {8, 20, 69}, {9, 22, 67}, {9, 23, 73}, {8, 24, 65},
|
||||
{8, 25, 64}, {8, 27, 62}, {8, 29, 66}, {8, 31, 58}, {8, 32, 57},
|
||||
{8, 33, 56}, {8, 34, 55}, {8, 40, 50}, {9, 41, 49}, {9, 42, 54},
|
||||
{8, 43, 46}, {8, 44, 45}, {8, 48, 48}, {8, 50, 40}, {8, 51, 38},
|
||||
{9, 53, 36}, {8, 58, 31}, {9, 61, 35}, {8, 62, 27}, {8, 63, 26},
|
||||
{8, 71, 19}, {9, 72, 18}, {8, 79, 17}, {8, 81, 8}, {8, 89, 0},
|
||||
},
|
||||
{
|
||||
{7, 0, 28}, {8, 1, 27}, {8, 2, 26}, {8, 5, 22}, {8, 6, 20},
|
||||
{7, 8, 19}, {7, 11, 16}, {7, 13, 15}, {7, 17, 17}, {7, 31, 90},
|
||||
{8, 32, 89}, {8, 33, 88}, {8, 36, 84}, {8, 37, 82}, {7, 39, 81},
|
||||
{7, 42, 78}, {7, 44, 77}, {7, 48, 79}, {0, 0, 0}, {0, 0, 0},
|
||||
{0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0},
|
||||
{0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0},
|
||||
{0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0},
|
||||
{0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0},
|
||||
{0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0},
|
||||
},
|
||||
{
|
||||
{7, 0, 28}, {8, 1, 27}, {8, 2, 26}, {8, 5, 22}, {8, 6, 20},
|
||||
{7, 8, 19}, {7, 11, 16}, {7, 13, 15}, {7, 17, 17}, {7, 31, 90},
|
||||
{8, 32, 89}, {8, 33, 88}, {8, 36, 84}, {8, 37, 82}, {7, 39, 81},
|
||||
{7, 42, 78}, {7, 44, 77}, {7, 48, 79}, {7, 49, 71}, {7, 50, 70},
|
||||
{8, 53, 67}, {7, 56, 65}, {8, 58, 63}, {7, 59, 62}, {0, 0, 0},
|
||||
{0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0},
|
||||
{0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0},
|
||||
{0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0},
|
||||
{0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0},
|
||||
},
|
||||
{
|
||||
{7, 0, 28}, {8, 1, 27}, {8, 2, 26}, {8, 5, 22}, {8, 6, 20},
|
||||
{7, 8, 19}, {7, 11, 16}, {7, 13, 15}, {7, 17, 17}, {7, 18, 9},
|
||||
{7, 19, 8}, {8, 22, 5}, {7, 25, 3}, {8, 27, 1}, {7, 28, 0},
|
||||
{7, 31, 90}, {8, 32, 89}, {8, 33, 88}, {8, 36, 84}, {8, 37, 82},
|
||||
{7, 39, 81}, {7, 42, 78}, {7, 44, 77}, {7, 48, 79}, {7, 49, 71},
|
||||
{7, 50, 70}, {8, 53, 67}, {7, 56, 65}, {8, 58, 63}, {7, 59, 62},
|
||||
{0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0},
|
||||
{0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0},
|
||||
{0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0},
|
||||
},
|
||||
{
|
||||
{7, 0, 28}, {8, 1, 27}, {8, 2, 26}, {8, 5, 22}, {8, 6, 20},
|
||||
{7, 8, 19}, {7, 11, 16}, {7, 13, 15}, {7, 17, 17}, {7, 18, 9},
|
||||
{7, 19, 8}, {8, 22, 5}, {7, 25, 3}, {8, 27, 1}, {7, 28, 0},
|
||||
{7, 31, 90}, {8, 32, 89}, {8, 33, 88}, {8, 36, 84}, {8, 37, 82},
|
||||
{7, 39, 81}, {7, 42, 78}, {7, 44, 77}, {7, 48, 79}, {7, 49, 71},
|
||||
{7, 50, 70}, {8, 53, 67}, {7, 56, 65}, {8, 58, 63}, {7, 59, 62},
|
||||
{7, 62, 59}, {8, 63, 58}, {8, 64, 57}, {8, 67, 53}, {8, 68, 51},
|
||||
{7, 70, 50}, {7, 73, 47}, {7, 75, 46}, {7, 79, 48}, {7, 80, 40},
|
||||
{7, 81, 39}, {8, 84, 36}, {7, 87, 34}, {8, 89, 32}, {7, 90, 31},
|
||||
}}};
|
||||
long ref_ir_weights[2][8][45] = {
|
||||
{{2, 2, 1, 8, 4, 8, 4, 8, 8, 4, 4, 2, 4, 4, 2, 4, 2, 4, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
|
||||
{2, 2, 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 2, 2, 2, 2, 2, 2, 4, 2,
|
||||
4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
|
||||
{1, 1, 1, 1, 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 2, 2, 2, 2, 2, 2, 2, 2,
|
||||
2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
|
||||
{1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1,
|
||||
1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2},
|
||||
{2, 2, 1, 4, 4, 2, 4, 2, 4, 4, 4, 2, 8, 8, 4, 8, 4, 8, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
|
||||
{2, 2, 1, 4, 4, 2, 4, 2, 4, 2, 2, 2, 2, 2, 4, 4, 4, 4, 4, 4, 4, 4, 4,
|
||||
4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
|
||||
{1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 4, 4,
|
||||
4, 4, 4, 4, 4, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
|
||||
{1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 2, 2, 2,
|
||||
2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2}},
|
||||
{{2, 4, 4, 4, 4, 4, 2, 2, 4, 4, 4, 4, 4, 2, 2, 4, 4, 2, 2, 4, 2, 4, 2,
|
||||
1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
|
||||
{2, 4, 4, 4, 4, 4, 2, 2, 4, 4, 4, 4, 4, 2, 2, 4, 4, 2, 2, 4, 2, 4, 2,
|
||||
1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
|
||||
{1, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 1, 1, 2, 2, 2, 2, 2, 1, 2,
|
||||
1, 2, 2, 2, 1, 2, 2, 2, 2, 1, 1, 2, 2, 1, 2, 1, 2, 1, 2, 1, 1, 1},
|
||||
{1, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 1, 1, 2, 2, 2, 2, 2, 1, 2,
|
||||
1, 2, 2, 2, 1, 2, 2, 2, 2, 1, 1, 2, 2, 1, 2, 1, 2, 1, 2, 1, 1, 1},
|
||||
{2, 4, 4, 4, 4, 2, 2, 2, 1, 4, 8, 8, 8, 8, 4, 4, 4, 2, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
|
||||
{2, 4, 4, 4, 4, 2, 2, 2, 1, 2, 4, 4, 4, 4, 2, 4, 4, 2, 4, 2, 4, 4, 4,
|
||||
2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
|
||||
{1, 2, 2, 2, 2, 1, 2, 2, 1, 2, 1, 2, 2, 2, 1, 2, 4, 4, 4, 4, 2, 4, 4,
|
||||
2, 4, 2, 4, 4, 4, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
|
||||
{1, 2, 2, 2, 2, 1, 2, 2, 1, 2, 1, 2, 2, 2, 1, 1, 2, 2, 2, 2, 1, 2, 2,
|
||||
1, 2, 1, 2, 2, 2, 1, 1, 2, 2, 2, 2, 1, 2, 2, 1, 2, 1, 2, 2, 2, 1}}};
|
||||
long ref_num_triplets[2][8] = {{18, 24, 30, 45, 18, 24, 30, 45},
|
||||
{24, 24, 45, 45, 18, 24, 30, 45}};
|
||||
|
||||
long D_diag[2][3] = {{1, 5, 15}, {5, 5, 3}};
|
||||
long PS[3] = {0, 0, 0};
|
||||
|
@ -1130,9 +1235,10 @@ TEST(test_gridsys, test_gridsys_get_bz_triplets_at_q_wurtzite_force_SNF) {
|
|||
double rec_lattice[3][3] = {{0.3214400514304082, 0.0, 0.0},
|
||||
{0.18558350022167336, 0.37116700044334666, 0.0},
|
||||
{0.0, 0.0, 0.20088388911209318}};
|
||||
long grid_point = 1;
|
||||
long map_triplets[75], map_q[75];
|
||||
long i, j, k, ll, count, num_triplets_1, num_triplets_2, bz_size;
|
||||
long map_triplets[75], map_q[75], weights[75], ir_weights[75];
|
||||
long i, j, k, ll, count, num_triplets_1, num_triplets_2, bz_size, i_grgp,
|
||||
grid_point, ir_count;
|
||||
long grgp[2] = {1, 7};
|
||||
long is_time_reversal[2] = {1, 0};
|
||||
long swappable[2] = {1, 0};
|
||||
long rec_rotations[2][12][3][3];
|
||||
|
@ -1159,38 +1265,63 @@ TEST(test_gridsys, test_gridsys_get_bz_triplets_at_q_wurtzite_force_SNF) {
|
|||
}
|
||||
}
|
||||
|
||||
count = 0;
|
||||
for (i = 0; i < 2; i++) { // force_SNF True or False
|
||||
bz_size =
|
||||
gridsys_get_bz_grid_addresses(bz_grid_addresses, bz_map, bzg2grg,
|
||||
D_diag[i], Q[i], PS, rec_lattice, 2);
|
||||
ASSERT_EQ(93, bz_size);
|
||||
// for (ll = 0; ll < 93; ll++) {
|
||||
// printf("[%ld, %ld, %ld]\n", bz_grid_addresses[ll][0],
|
||||
// bz_grid_addresses[ll][1], bz_grid_addresses[ll][2]);
|
||||
// }
|
||||
for (j = 0; j < 2; j++) { // swappable
|
||||
for (k = 0; k < 2; k++) { // is_time_reversal
|
||||
num_triplets_1 = gridsys_get_triplets_at_q(
|
||||
map_triplets, map_q, grid_point, D_diag[i],
|
||||
is_time_reversal[k], 12, rec_rotations[i], swappable[j]);
|
||||
num_triplets_2 = gridsys_get_bz_triplets_at_q(
|
||||
triplets, grid_point, bz_grid_addresses, bz_map,
|
||||
map_triplets, 75, D_diag[i], Q[i], 2);
|
||||
ASSERT_EQ(num_triplets_1, num_triplets_2);
|
||||
ASSERT_EQ(num_triplets_1, ref_num_triplets[count]);
|
||||
for (ll = 0; ll < num_triplets_2; ll++) {
|
||||
// printf("%ld %ld %ld %ld [%ld %ld %ld] [%ld %ld
|
||||
// %ld]\n", i,
|
||||
// j, k, ll, ref_triplets[count][ll][0],
|
||||
// ref_triplets[count][ll][1],
|
||||
// ref_triplets[count][ll][2], triplets[ll][0],
|
||||
// triplets[ll][1], triplets[ll][2]);
|
||||
ASSERT_EQ(ref_triplets[count][ll][0], triplets[ll][0]);
|
||||
ASSERT_EQ(ref_triplets[count][ll][1], triplets[ll][1]);
|
||||
ASSERT_EQ(ref_triplets[count][ll][2], triplets[ll][2]);
|
||||
for (i_grgp = 0; i_grgp < 2; i_grgp++) {
|
||||
count = 0;
|
||||
grid_point = grgp[i_grgp];
|
||||
for (i = 0; i < 2; i++) { // force_SNF True or False
|
||||
bz_size = gridsys_get_bz_grid_addresses(bz_grid_addresses, bz_map,
|
||||
bzg2grg, D_diag[i], Q[i],
|
||||
PS, rec_lattice, 2);
|
||||
ASSERT_EQ(93, bz_size);
|
||||
// for (ll = 0; ll < 93; ll++) {
|
||||
// printf("[%ld, %ld, %ld]\n", bz_grid_addresses[ll][0],
|
||||
// bz_grid_addresses[ll][1], bz_grid_addresses[ll][2]);
|
||||
// }
|
||||
for (j = 0; j < 2; j++) { // swappable
|
||||
for (k = 0; k < 2; k++) { // is_time_reversal
|
||||
num_triplets_1 = gridsys_get_triplets_at_q(
|
||||
map_triplets, map_q, grid_point, D_diag[i],
|
||||
is_time_reversal[k], 12, rec_rotations[i],
|
||||
swappable[j]);
|
||||
for (ll = 0; ll < 75; ll++) {
|
||||
weights[ll] = 0;
|
||||
ir_weights[ll] = 0;
|
||||
}
|
||||
for (ll = 0; ll < 75; ll++) {
|
||||
weights[map_triplets[ll]]++;
|
||||
}
|
||||
ir_count = 0;
|
||||
for (ll = 0; ll < 75; ll++) {
|
||||
if (weights[ll] > 0) {
|
||||
ir_weights[ir_count] = weights[ll];
|
||||
ir_count++;
|
||||
}
|
||||
}
|
||||
for (ll = 0; ll < num_triplets_1; ll++) {
|
||||
ASSERT_EQ(ref_ir_weights[i_grgp][count][ll],
|
||||
ir_weights[ll]);
|
||||
}
|
||||
num_triplets_2 = gridsys_get_bz_triplets_at_q(
|
||||
triplets, bz_map[grid_point], bz_grid_addresses, bz_map,
|
||||
map_triplets, 75, D_diag[i], Q[i], 2);
|
||||
ASSERT_EQ(num_triplets_1, num_triplets_2);
|
||||
ASSERT_EQ(num_triplets_1, ref_num_triplets[i_grgp][count]);
|
||||
for (ll = 0; ll < num_triplets_2; ll++) {
|
||||
// printf("%ld %ld %ld %ld [%ld %ld %ld] [%ld %ld
|
||||
// %ld]\n", i,
|
||||
// j, k, ll, ref_triplets[count][ll][0],
|
||||
// ref_triplets[count][ll][1],
|
||||
// ref_triplets[count][ll][2], triplets[ll][0],
|
||||
// triplets[ll][1], triplets[ll][2]);
|
||||
ASSERT_EQ(ref_triplets[i_grgp][count][ll][0],
|
||||
triplets[ll][0]);
|
||||
ASSERT_EQ(ref_triplets[i_grgp][count][ll][1],
|
||||
triplets[ll][1]);
|
||||
ASSERT_EQ(ref_triplets[i_grgp][count][ll][2],
|
||||
triplets[ll][2]);
|
||||
}
|
||||
count++;
|
||||
}
|
||||
count++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -94,12 +94,12 @@ class ReciprocalToNormal:
|
|||
sum_fc3 = 0j
|
||||
for i, j, k in list(np.ndindex((num_atom,) * 3)):
|
||||
sum_fc3_cart = 0
|
||||
for l, m, n in list(np.ndindex((3, 3, 3))):
|
||||
for ll, m, n in list(np.ndindex((3, 3, 3))):
|
||||
sum_fc3_cart += (
|
||||
e1[i * 3 + l, b1]
|
||||
e1[i * 3 + ll, b1]
|
||||
* e2[j * 3 + m, b2]
|
||||
* e3[k * 3 + n, b3]
|
||||
* self._fc3_reciprocal[i, j, k, l, m, n]
|
||||
* self._fc3_reciprocal[i, j, k, ll, m, n]
|
||||
)
|
||||
mass_sqrt = np.sqrt(np.prod(self._masses[[i, j, k]]))
|
||||
sum_fc3 += sum_fc3_cart / mass_sqrt
|
||||
|
|
|
@ -281,7 +281,7 @@ def _get_triplets_reciprocal_mesh_at_q(
|
|||
return map_triplets, map_q
|
||||
|
||||
|
||||
def _get_BZ_triplets_at_q(grid_point, bz_grid: BZGrid, map_triplets):
|
||||
def _get_BZ_triplets_at_q(bz_grid_index, bz_grid: BZGrid, map_triplets):
|
||||
"""Grid point triplets are searched considering BZ surface.
|
||||
|
||||
Looking for q+q'+q''=G with smallest |G|. In this condition,
|
||||
|
@ -294,8 +294,8 @@ def _get_BZ_triplets_at_q(grid_point, bz_grid: BZGrid, map_triplets):
|
|||
|
||||
Parameters
|
||||
----------
|
||||
grid_number : int
|
||||
Grid point of q0 as defined by bz_grid.
|
||||
bz_grid_index : int
|
||||
Grid point of q0 as defined in BZ-grid.
|
||||
bz_grid : BZGrid
|
||||
Data structure to represent BZ grid.
|
||||
map_triplets : ndarray or None
|
||||
|
@ -328,7 +328,7 @@ def _get_BZ_triplets_at_q(grid_point, bz_grid: BZGrid, map_triplets):
|
|||
triplets = -np.ones((len(ir_weights), 3), dtype="int_")
|
||||
num_ir_ret = phono3c.BZ_triplets_at_q(
|
||||
triplets,
|
||||
grid_point,
|
||||
bz_grid_index,
|
||||
bz_grid.addresses,
|
||||
bz_grid.gp_map,
|
||||
map_triplets,
|
||||
|
|
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue