mirror of https://github.com/phonopy/phono3py.git
Add test_gridsys_get_thm_relative_grid_address
This commit is contained in:
parent
626910a210
commit
bad5862efa
|
@ -107,12 +107,17 @@ double gridsys_get_thm_integration_weight(const double omega,
|
|||
return thm_get_integration_weight(omega, tetrahedra_omegas, function);
|
||||
}
|
||||
|
||||
void gridsys_get_thm_all_relative_grid_address(
|
||||
long relative_grid_address[4][24][4][3]) {
|
||||
thm_get_all_relative_grid_address(relative_grid_address);
|
||||
}
|
||||
|
||||
/* Get one dataset of relative grid address used for tetrahedron */
|
||||
/* method. rec_lattice is used to choose the one. */
|
||||
/* rec_lattice : microzone basis vectors in column vectors */
|
||||
void gridsys_get_thm_relative_grid_address(
|
||||
long gridsys_get_thm_relative_grid_address(
|
||||
long relative_grid_addresses[24][4][3], const double rec_lattice[3][3]) {
|
||||
thm_get_relative_grid_address(relative_grid_addresses, rec_lattice);
|
||||
return thm_get_relative_grid_address(relative_grid_addresses, rec_lattice);
|
||||
}
|
||||
|
||||
/* The rotations are those after proper transformation in GRGrid. */
|
||||
|
|
50
c/gridsys.h
50
c/gridsys.h
|
@ -39,12 +39,58 @@
|
|||
extern "C" {
|
||||
#endif
|
||||
|
||||
/* Generalized regular (GR) grid
|
||||
|
||||
Integer grid matrix M_g is unimodular transformed to integer diagnonal matrix D
|
||||
by D = P M_g Q, which can be achieved by Smith normal form like transformation.
|
||||
P and Q used are integer unimodular matrices with determinant=1.
|
||||
|
||||
S in PS is doubled shift with respect to microzone basis vectors, i.e.,
|
||||
half-grid shift along an axis corresponds to 1.
|
||||
|
||||
*/
|
||||
|
||||
/**
|
||||
* @brief Return all GR-grid addresses with respect to n_1, n_2, n_3
|
||||
*
|
||||
* @param gr_grid_addresses all GR-grid addresses
|
||||
* @param D_diag Numbers of divisions along a, b, c directions of GR-grid
|
||||
* @return void
|
||||
*/
|
||||
void gridsys_get_all_grid_addresses(long (*gr_grid_addresses)[3],
|
||||
const long D_diag[3]);
|
||||
|
||||
/**
|
||||
* @brief Return double grid address in GR-grid
|
||||
*
|
||||
* @param address_double double grid address, i.e., possibly with shift in
|
||||
* GR-grid
|
||||
* @param address single grid address in GR-grid
|
||||
* @param PS shift in GR-grid
|
||||
* @return void
|
||||
*/
|
||||
void gridsys_get_double_grid_address(long address_double[3],
|
||||
const long address[3], const long PS[3]);
|
||||
|
||||
/**
|
||||
* @brief Return single grid address in GR-grid with given grid point index.
|
||||
*
|
||||
* @param address Single grid address in GR-grid
|
||||
* @param grid_index Grid point index in GR-grid
|
||||
* @param D_diag Numbers of divisions along a, b, c directions of GR-grid
|
||||
* @return void
|
||||
*/
|
||||
void gridsys_get_grid_address_from_index(long address[3], const long grid_index,
|
||||
const long D_diag[3]);
|
||||
|
||||
/**
|
||||
* @brief
|
||||
*
|
||||
* @param address_double
|
||||
* @param D_diag
|
||||
* @param PS
|
||||
* @return long
|
||||
*/
|
||||
long gridsys_get_double_grid_index(const long address_double[3],
|
||||
const long D_diag[3], const long PS[3]);
|
||||
long gridsys_get_grid_index_from_address(const long address[3],
|
||||
|
@ -64,7 +110,9 @@ long gridsys_transform_rotations(long (*transformed_rots)[3][3],
|
|||
double gridsys_get_thm_integration_weight(const double omega,
|
||||
const double tetrahedra_omegas[24][4],
|
||||
const char function);
|
||||
void gridsys_get_thm_relative_grid_address(
|
||||
void gridsys_get_thm_all_relative_grid_address(
|
||||
long relative_grid_address[4][24][4][3]);
|
||||
long gridsys_get_thm_relative_grid_address(
|
||||
long relative_grid_addresses[24][4][3], const double rec_lattice[3][3]);
|
||||
void gridsys_get_ir_grid_map(long *ir_grid_map, const long (*rotations)[3][3],
|
||||
const long num_rot, const long D_diag[3],
|
||||
|
|
|
@ -718,7 +718,7 @@ static double _I_32(const double omega, const double vertices_omegas[4]);
|
|||
static double _I_33(const double omega, const double vertices_omegas[4]);
|
||||
static double _I_4(void);
|
||||
|
||||
void thm_get_relative_grid_address(long relative_grid_address[24][4][3],
|
||||
long thm_get_relative_grid_address(long relative_grid_address[24][4][3],
|
||||
const double rec_lattice[3][3]) {
|
||||
long i, j, k, main_diag_index;
|
||||
|
||||
|
@ -732,6 +732,7 @@ void thm_get_relative_grid_address(long relative_grid_address[24][4][3],
|
|||
}
|
||||
}
|
||||
}
|
||||
return main_diag_index;
|
||||
}
|
||||
|
||||
void thm_get_all_relative_grid_address(
|
||||
|
|
|
@ -37,7 +37,7 @@
|
|||
|
||||
#include <stddef.h>
|
||||
|
||||
void thm_get_relative_grid_address(long relative_grid_address[24][4][3],
|
||||
long thm_get_relative_grid_address(long relative_grid_address[24][4][3],
|
||||
const double rec_lattice[3][3]);
|
||||
void thm_get_all_relative_grid_address(long relative_grid_address[4][24][4][3]);
|
||||
double thm_get_integration_weight(const double omega,
|
||||
|
|
|
@ -485,111 +485,31 @@ TEST(test_gridsys, test_gridsys_get_thm_integration_weight) {
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief gridsys_get_thm_relative_grid_address
|
||||
* Return relative grid addresses for linear tetrahedron method.
|
||||
*/
|
||||
TEST(test_gridsys, test_gridsys_get_thm_relative_grid_address) {
|
||||
const long ref_rel_grid_addresses = {
|
||||
{
|
||||
{{0, 0, 0}, {1, 0, 0}, {1, 1, 0}, {1, 1, 1}},
|
||||
{{0, 0, 0}, {1, 0, 0}, {1, 0, 1}, {1, 1, 1}},
|
||||
{{0, 0, 0}, {0, 1, 0}, {1, 1, 0}, {1, 1, 1}},
|
||||
{{0, 0, 0}, {0, 1, 0}, {0, 1, 1}, {1, 1, 1}},
|
||||
{{0, 0, 0}, {0, 0, 1}, {1, 0, 1}, {1, 1, 1}},
|
||||
{{0, 0, 0}, {0, 0, 1}, {0, 1, 1}, {1, 1, 1}},
|
||||
{{0, 0, 0}, {0, 1, 0}, {0, 1, 1}, {-1, 0, 0}},
|
||||
{{0, 0, 0}, {0, 0, 1}, {0, 1, 1}, {-1, 0, 0}},
|
||||
{{0, 0, 0}, {1, 0, 0}, {1, 0, 1}, {0, -1, 0}},
|
||||
{{0, 0, 0}, {0, 0, 1}, {1, 0, 1}, {0, -1, 0}},
|
||||
{{0, 0, 0}, {0, 0, 1}, {-1, -1, 0}, {0, -1, 0}},
|
||||
{{0, 0, 0}, {0, 0, 1}, {-1, -1, 0}, {-1, 0, 0}},
|
||||
{{0, 0, 0}, {1, 0, 0}, {1, 1, 0}, {0, 0, -1}},
|
||||
{{0, 0, 0}, {0, 1, 0}, {1, 1, 0}, {0, 0, -1}},
|
||||
{{0, 0, 0}, {0, 1, 0}, {-1, 0, -1}, {0, 0, -1}},
|
||||
{{0, 0, 0}, {0, 1, 0}, {-1, 0, -1}, {-1, 0, 0}},
|
||||
{{0, 0, 0}, {1, 0, 0}, {0, -1, -1}, {0, 0, -1}},
|
||||
{{0, 0, 0}, {1, 0, 0}, {0, -1, -1}, {0, -1, 0}},
|
||||
{{0, 0, 0}, {-1, -1, -1}, {0, -1, -1}, {0, 0, -1}},
|
||||
{{0, 0, 0}, {-1, -1, -1}, {0, -1, -1}, {0, -1, 0}},
|
||||
{{0, 0, 0}, {-1, -1, -1}, {-1, 0, -1}, {0, 0, -1}},
|
||||
{{0, 0, 0}, {-1, -1, -1}, {-1, 0, -1}, {-1, 0, 0}},
|
||||
{{0, 0, 0}, {-1, -1, -1}, {-1, -1, 0}, {0, -1, 0}},
|
||||
{{0, 0, 0}, {-1, -1, -1}, {-1, -1, 0}, {-1, 0, 0}},
|
||||
},
|
||||
{
|
||||
{{0, 0, 0}, {1, 0, 0}, {0, 1, 0}, {0, 1, 1}},
|
||||
{{0, 0, 0}, {1, 0, 0}, {0, 0, 1}, {0, 1, 1}},
|
||||
{{0, 0, 0}, {-1, 1, 0}, {-1, 1, 1}, {-1, 0, 0}},
|
||||
{{0, 0, 0}, {-1, 0, 1}, {-1, 1, 1}, {-1, 0, 0}},
|
||||
{{0, 0, 0}, {-1, 1, 0}, {0, 1, 0}, {-1, 1, 1}},
|
||||
{{0, 0, 0}, {0, 1, 0}, {-1, 1, 1}, {0, 1, 1}},
|
||||
{{0, 0, 0}, {-1, 0, 1}, {0, 0, 1}, {-1, 1, 1}},
|
||||
{{0, 0, 0}, {0, 0, 1}, {-1, 1, 1}, {0, 1, 1}},
|
||||
{{0, 0, 0}, {0, 0, 1}, {0, -1, 0}, {1, -1, 0}},
|
||||
{{0, 0, 0}, {1, 0, 0}, {0, 0, 1}, {1, -1, 0}},
|
||||
{{0, 0, 0}, {-1, 0, 1}, {0, -1, 0}, {-1, 0, 0}},
|
||||
{{0, 0, 0}, {-1, 0, 1}, {0, 0, 1}, {0, -1, 0}},
|
||||
{{0, 0, 0}, {0, 1, 0}, {0, 0, -1}, {1, 0, -1}},
|
||||
{{0, 0, 0}, {1, 0, 0}, {0, 1, 0}, {1, 0, -1}},
|
||||
{{0, 0, 0}, {-1, 1, 0}, {0, 0, -1}, {-1, 0, 0}},
|
||||
{{0, 0, 0}, {-1, 1, 0}, {0, 1, 0}, {0, 0, -1}},
|
||||
{{0, 0, 0}, {0, -1, -1}, {1, -1, -1}, {0, 0, -1}},
|
||||
{{0, 0, 0}, {0, -1, -1}, {1, -1, -1}, {0, -1, 0}},
|
||||
{{0, 0, 0}, {1, -1, -1}, {0, 0, -1}, {1, 0, -1}},
|
||||
{{0, 0, 0}, {1, 0, 0}, {1, -1, -1}, {1, 0, -1}},
|
||||
{{0, 0, 0}, {1, -1, -1}, {0, -1, 0}, {1, -1, 0}},
|
||||
{{0, 0, 0}, {1, 0, 0}, {1, -1, -1}, {1, -1, 0}},
|
||||
{{0, 0, 0}, {0, -1, -1}, {0, 0, -1}, {-1, 0, 0}},
|
||||
{{0, 0, 0}, {0, -1, -1}, {0, -1, 0}, {-1, 0, 0}},
|
||||
},
|
||||
{
|
||||
{{0, 0, 0}, {1, 0, 0}, {0, 1, 0}, {1, 0, 1}},
|
||||
{{0, 0, 0}, {0, 1, 0}, {0, 0, 1}, {1, 0, 1}},
|
||||
{{0, 0, 0}, {-1, 1, 0}, {0, 0, 1}, {-1, 0, 0}},
|
||||
{{0, 0, 0}, {-1, 1, 0}, {0, 1, 0}, {0, 0, 1}},
|
||||
{{0, 0, 0}, {1, -1, 1}, {0, -1, 0}, {1, -1, 0}},
|
||||
{{0, 0, 0}, {0, -1, 1}, {1, -1, 1}, {0, -1, 0}},
|
||||
{{0, 0, 0}, {1, 0, 0}, {1, -1, 1}, {1, -1, 0}},
|
||||
{{0, 0, 0}, {1, 0, 0}, {1, -1, 1}, {1, 0, 1}},
|
||||
{{0, 0, 0}, {0, -1, 1}, {1, -1, 1}, {0, 0, 1}},
|
||||
{{0, 0, 0}, {1, -1, 1}, {0, 0, 1}, {1, 0, 1}},
|
||||
{{0, 0, 0}, {0, -1, 1}, {0, -1, 0}, {-1, 0, 0}},
|
||||
{{0, 0, 0}, {0, -1, 1}, {0, 0, 1}, {-1, 0, 0}},
|
||||
{{0, 0, 0}, {1, 0, 0}, {0, 0, -1}, {0, 1, -1}},
|
||||
{{0, 0, 0}, {1, 0, 0}, {0, 1, 0}, {0, 1, -1}},
|
||||
{{0, 0, 0}, {-1, 0, -1}, {0, 0, -1}, {-1, 1, -1}},
|
||||
{{0, 0, 0}, {-1, 0, -1}, {-1, 1, -1}, {-1, 0, 0}},
|
||||
{{0, 0, 0}, {0, 0, -1}, {-1, 1, -1}, {0, 1, -1}},
|
||||
{{0, 0, 0}, {0, 1, 0}, {-1, 1, -1}, {0, 1, -1}},
|
||||
{{0, 0, 0}, {-1, 1, 0}, {-1, 1, -1}, {-1, 0, 0}},
|
||||
{{0, 0, 0}, {-1, 1, 0}, {0, 1, 0}, {-1, 1, -1}},
|
||||
{{0, 0, 0}, {0, 0, -1}, {0, -1, 0}, {1, -1, 0}},
|
||||
{{0, 0, 0}, {1, 0, 0}, {0, 0, -1}, {1, -1, 0}},
|
||||
{{0, 0, 0}, {-1, 0, -1}, {0, 0, -1}, {0, -1, 0}},
|
||||
{{0, 0, 0}, {-1, 0, -1}, {0, -1, 0}, {-1, 0, 0}},
|
||||
},
|
||||
{
|
||||
{{0, 0, 0}, {1, 0, 0}, {1, 1, 0}, {0, 0, 1}},
|
||||
{{0, 0, 0}, {0, 1, 0}, {1, 1, 0}, {0, 0, 1}},
|
||||
{{0, 0, 0}, {0, 1, 0}, {-1, 0, 1}, {-1, 0, 0}},
|
||||
{{0, 0, 0}, {0, 1, 0}, {-1, 0, 1}, {0, 0, 1}},
|
||||
{{0, 0, 0}, {1, 0, 0}, {0, -1, 1}, {0, -1, 0}},
|
||||
{{0, 0, 0}, {1, 0, 0}, {0, -1, 1}, {0, 0, 1}},
|
||||
{{0, 0, 0}, {-1, -1, 1}, {-1, -1, 0}, {0, -1, 0}},
|
||||
{{0, 0, 0}, {-1, -1, 1}, {-1, -1, 0}, {-1, 0, 0}},
|
||||
{{0, 0, 0}, {-1, -1, 1}, {0, -1, 1}, {0, -1, 0}},
|
||||
{{0, 0, 0}, {-1, -1, 1}, {-1, 0, 1}, {-1, 0, 0}},
|
||||
{{0, 0, 0}, {-1, -1, 1}, {0, -1, 1}, {0, 0, 1}},
|
||||
{{0, 0, 0}, {-1, -1, 1}, {-1, 0, 1}, {0, 0, 1}},
|
||||
{{0, 0, 0}, {0, 0, -1}, {1, 0, -1}, {1, 1, -1}},
|
||||
{{0, 0, 0}, {0, 0, -1}, {0, 1, -1}, {1, 1, -1}},
|
||||
{{0, 0, 0}, {1, 0, 0}, {1, 0, -1}, {1, 1, -1}},
|
||||
{{0, 0, 0}, {0, 1, 0}, {0, 1, -1}, {1, 1, -1}},
|
||||
{{0, 0, 0}, {1, 0, 0}, {1, 1, 0}, {1, 1, -1}},
|
||||
{{0, 0, 0}, {0, 1, 0}, {1, 1, 0}, {1, 1, -1}},
|
||||
{{0, 0, 0}, {0, 0, -1}, {0, 1, -1}, {-1, 0, 0}},
|
||||
{{0, 0, 0}, {0, 1, 0}, {0, 1, -1}, {-1, 0, 0}},
|
||||
{{0, 0, 0}, {0, 0, -1}, {1, 0, -1}, {0, -1, 0}},
|
||||
{{0, 0, 0}, {1, 0, 0}, {1, 0, -1}, {0, -1, 0}},
|
||||
{{0, 0, 0}, {0, 0, -1}, {-1, -1, 0}, {0, -1, 0}},
|
||||
{{0, 0, 0}, {0, 0, -1}, {-1, -1, 0}, {-1, 0, 0}},
|
||||
},
|
||||
};
|
||||
long all_rel_grid_address[4][24][4][3];
|
||||
long rel_grid_addresses[24][4][3];
|
||||
double rec_vectors[4][3][3] = {{{-1, 1, 1}, {1, -1, 1}, {1, 1, -1}},
|
||||
{{-1, -1, -1}, {1, 1, -1}, {1, -1, 1}},
|
||||
{{1, 1, -1}, {-1, -1, -1}, {-1, 1, 1}},
|
||||
{{1, -1, 1}, {-1, 1, 1}, {-1, -1, -1}}};
|
||||
long i, j, k, l, main_diagonal;
|
||||
|
||||
gridsys_get_thm_all_relative_grid_address(all_rel_grid_address);
|
||||
for (i = 0; i < 4; i++) {
|
||||
main_diagonal = gridsys_get_thm_relative_grid_address(
|
||||
rel_grid_addresses, rec_vectors[i]);
|
||||
ASSERT_EQ(i, main_diagonal);
|
||||
for (j = 0; j < 24; j++) {
|
||||
for (k = 0; k < 4; k++) {
|
||||
for (l = 0; l < 3; l++) {
|
||||
ASSERT_EQ(all_rel_grid_address[i][j][k][l],
|
||||
rel_grid_addresses[j][k][l]);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue