void spg_get_neighboring_grid_points(int relative_grid_points[], const int grid_point, SPGCONST int relative_grid_address[][3], const int num_relative_grid_address, const int mesh[3], SPGCONST int bz_grid_address[][3], const int bz_map[]) { kpt_get_neighboring_grid_points(relative_grid_points, grid_point, relative_grid_address, num_relative_grid_address, mesh, bz_grid_address, bz_map); }
static PyObject * py_get_neighboring_gird_points(PyObject *self, PyObject *args) { PyArrayObject* relative_grid_points_py; PyArrayObject* grid_points_py; PyArrayObject* relative_grid_address_py; PyArrayObject* mesh_py; PyArrayObject* bz_grid_address_py; PyArrayObject* bz_map_py; if (!PyArg_ParseTuple(args, "OOOOOO", &relative_grid_points_py, &grid_points_py, &relative_grid_address_py, &mesh_py, &bz_grid_address_py, &bz_map_py)) { return NULL; } int* relative_grid_points = (int*)relative_grid_points_py->data; const int *grid_points = (int*)grid_points_py->data; const int num_grid_points = (int)grid_points_py->dimensions[0]; SPGCONST int (*relative_grid_address)[3] = (int(*)[3])relative_grid_address_py->data; const int num_relative_grid_address = relative_grid_address_py->dimensions[0]; const int *mesh = (int*)mesh_py->data; SPGCONST int (*bz_grid_address)[3] = (int(*)[3])bz_grid_address_py->data; const int *bz_map = (int*)bz_map_py->data; int i; #pragma omp parallel for for (i = 0; i < num_grid_points; i++) { kpt_get_neighboring_grid_points (relative_grid_points + i * num_relative_grid_address, grid_points[i], relative_grid_address, num_relative_grid_address, mesh, bz_grid_address, bz_map); } Py_RETURN_NONE; }
static void get_triplet_tetrahedra_vertices (int vertices[2][24][4], SPGCONST int relative_grid_address[2][24][4][3], const int mesh[3], const int triplet[3], SPGCONST int bz_grid_address[][3], const int bz_map[]) { int i, j; for (i = 0; i < 2; i++) { for (j = 0; j < 24; j++) { kpt_get_neighboring_grid_points(vertices[i][j], triplet[i + 1], relative_grid_address[i][j], 4, mesh, bz_grid_address, bz_map); } } }
static PyObject * py_set_integration_weights(PyObject *self, PyObject *args) { PyArrayObject* iw_py; PyArrayObject* frequency_points_py; PyArrayObject* relative_grid_address_py; PyArrayObject* mesh_py; PyArrayObject* grid_points_py; PyArrayObject* frequencies_py; PyArrayObject* bz_grid_address_py; PyArrayObject* bz_map_py; if (!PyArg_ParseTuple(args, "OOOOOOOO", &iw_py, &frequency_points_py, &relative_grid_address_py, &mesh_py, &grid_points_py, &frequencies_py, &bz_grid_address_py, &bz_map_py)) { return NULL; } double *iw = (double*)iw_py->data; const double *frequency_points = (double*)frequency_points_py->data; const int num_band0 = frequency_points_py->dimensions[0]; SPGCONST int (*relative_grid_address)[4][3] = (int(*)[4][3])relative_grid_address_py->data; const int *mesh = (int*)mesh_py->data; SPGCONST int *grid_points = (int*)grid_points_py->data; const int num_gp = (int)grid_points_py->dimensions[0]; SPGCONST int (*bz_grid_address)[3] = (int(*)[3])bz_grid_address_py->data; const int *bz_map = (int*)bz_map_py->data; const double *frequencies = (double*)frequencies_py->data; const int num_band = (int)frequencies_py->dimensions[1]; int i, j, k, bi; int vertices[24][4]; double freq_vertices[24][4]; #pragma omp parallel for private(j, k, bi, vertices, freq_vertices) for (i = 0; i < num_gp; i++) { for (j = 0; j < 24; j++) { kpt_get_neighboring_grid_points(vertices[j], grid_points[i], relative_grid_address[j], 4, mesh, bz_grid_address, bz_map); } for (bi = 0; bi < num_band; bi++) { for (j = 0; j < 24; j++) { for (k = 0; k < 4; k++) { freq_vertices[j][k] = frequencies[vertices[j][k] * num_band + bi]; } } for (j = 0; j < num_band0; j++) { iw[i * num_band0 * num_band + j * num_band + bi] = thm_get_integration_weight(frequency_points[j], freq_vertices, 'I'); } } } Py_RETURN_NONE; }