Introduce bzgrid to most C-extensions

This commit is contained in:
Atsushi Togo 2021-03-08 16:52:51 +09:00
parent 7eb304f86f
commit 9411f45c45
16 changed files with 260 additions and 167 deletions

View File

@ -314,7 +314,7 @@ static PyObject * py_get_interaction(PyObject *self, PyObject *args)
PyArrayObject *py_frequencies; PyArrayObject *py_frequencies;
PyArrayObject *py_eigenvectors; PyArrayObject *py_eigenvectors;
PyArrayObject *py_triplets; PyArrayObject *py_triplets;
PyArrayObject *py_grid_address; PyArrayObject *py_bz_grid_addresses;
PyArrayObject *py_mesh; PyArrayObject *py_mesh;
PyArrayObject *py_shortest_vectors; PyArrayObject *py_shortest_vectors;
PyArrayObject *py_multiplicities; PyArrayObject *py_multiplicities;
@ -332,7 +332,7 @@ static PyObject * py_get_interaction(PyObject *self, PyObject *args)
long (*triplets)[3]; long (*triplets)[3];
long num_triplets; long num_triplets;
char* g_zero; char* g_zero;
long *grid_address; long (*bz_grid_addresses)[3];
long *mesh; long *mesh;
double *fc3; double *fc3;
double *svecs; double *svecs;
@ -351,7 +351,7 @@ static PyObject * py_get_interaction(PyObject *self, PyObject *args)
&py_frequencies, &py_frequencies,
&py_eigenvectors, &py_eigenvectors,
&py_triplets, &py_triplets,
&py_grid_address, &py_bz_grid_addresses,
&py_mesh, &py_mesh,
&py_fc3, &py_fc3,
&py_shortest_vectors, &py_shortest_vectors,
@ -374,7 +374,7 @@ static PyObject * py_get_interaction(PyObject *self, PyObject *args)
triplets = (long(*)[3])PyArray_DATA(py_triplets); triplets = (long(*)[3])PyArray_DATA(py_triplets);
num_triplets = (long)PyArray_DIMS(py_triplets)[0]; num_triplets = (long)PyArray_DIMS(py_triplets)[0];
g_zero = (char*)PyArray_DATA(py_g_zero); g_zero = (char*)PyArray_DATA(py_g_zero);
grid_address = (long*)PyArray_DATA(py_grid_address); bz_grid_addresses = (long(*)[3])PyArray_DATA(py_bz_grid_addresses);
mesh = (long*)PyArray_DATA(py_mesh); mesh = (long*)PyArray_DATA(py_mesh);
fc3 = (double*)PyArray_DATA(py_fc3); fc3 = (double*)PyArray_DATA(py_fc3);
if (PyArray_DIMS(py_fc3)[0] == PyArray_DIMS(py_fc3)[1]) { if (PyArray_DIMS(py_fc3)[0] == PyArray_DIMS(py_fc3)[1]) {
@ -398,7 +398,7 @@ static PyObject * py_get_interaction(PyObject *self, PyObject *args)
eigvecs, eigvecs,
triplets, triplets,
num_triplets, num_triplets,
grid_address, bz_grid_addresses,
mesh, mesh,
fc3, fc3,
is_compact_fc3, is_compact_fc3,
@ -428,7 +428,7 @@ static PyObject * py_get_pp_collision(PyObject *self, PyObject *args)
PyArrayObject *py_eigenvectors; PyArrayObject *py_eigenvectors;
PyArrayObject *py_triplets; PyArrayObject *py_triplets;
PyArrayObject *py_triplet_weights; PyArrayObject *py_triplet_weights;
PyArrayObject *py_grid_address; PyArrayObject *py_bz_grid_addresses;
PyArrayObject *py_bz_map; PyArrayObject *py_bz_map;
PyArrayObject *py_mesh; PyArrayObject *py_mesh;
PyArrayObject *py_fc3; PyArrayObject *py_fc3;
@ -442,6 +442,7 @@ static PyObject * py_get_pp_collision(PyObject *self, PyObject *args)
double cutoff_frequency; double cutoff_frequency;
long is_NU; long is_NU;
long symmetrize_fc3_q; long symmetrize_fc3_q;
long bz_grid_type;
double *gamma; double *gamma;
long (*relative_grid_address)[4][3]; long (*relative_grid_address)[4][3];
@ -450,7 +451,7 @@ static PyObject * py_get_pp_collision(PyObject *self, PyObject *args)
long (*triplets)[3]; long (*triplets)[3];
long num_triplets; long num_triplets;
long *triplet_weights; long *triplet_weights;
long *grid_address; long (*bz_grid_addresses)[3];
long *bz_map; long *bz_map;
long *mesh; long *mesh;
double *fc3; double *fc3;
@ -465,15 +466,16 @@ static PyObject * py_get_pp_collision(PyObject *self, PyObject *args)
long i; long i;
long is_compact_fc3; long is_compact_fc3;
if (!PyArg_ParseTuple(args, "OOOOOOOOOOOOOOOOOlld", if (!PyArg_ParseTuple(args, "OOOOOOOOlOOOOOOOOOlld",
&py_gamma, &py_gamma,
&py_relative_grid_address, &py_relative_grid_address,
&py_frequencies, &py_frequencies,
&py_eigenvectors, &py_eigenvectors,
&py_triplets, &py_triplets,
&py_triplet_weights, &py_triplet_weights,
&py_grid_address, &py_bz_grid_addresses,
&py_bz_map, &py_bz_map,
&bz_grid_type,
&py_mesh, &py_mesh,
&py_fc3, &py_fc3,
&py_shortest_vectors, &py_shortest_vectors,
@ -496,7 +498,7 @@ static PyObject * py_get_pp_collision(PyObject *self, PyObject *args)
triplets = (long(*)[3])PyArray_DATA(py_triplets); triplets = (long(*)[3])PyArray_DATA(py_triplets);
num_triplets = (long)PyArray_DIMS(py_triplets)[0]; num_triplets = (long)PyArray_DIMS(py_triplets)[0];
triplet_weights = (long*)PyArray_DATA(py_triplet_weights); triplet_weights = (long*)PyArray_DATA(py_triplet_weights);
grid_address = (long*)PyArray_DATA(py_grid_address); bz_grid_addresses = (long(*)[3])PyArray_DATA(py_bz_grid_addresses);
bz_map = (long*)PyArray_DATA(py_bz_map); bz_map = (long*)PyArray_DATA(py_bz_map);
mesh = (long*)PyArray_DATA(py_mesh); mesh = (long*)PyArray_DATA(py_mesh);
fc3 = (double*)PyArray_DATA(py_fc3); fc3 = (double*)PyArray_DATA(py_fc3);
@ -523,8 +525,9 @@ static PyObject * py_get_pp_collision(PyObject *self, PyObject *args)
triplets, triplets,
num_triplets, num_triplets,
triplet_weights, triplet_weights,
grid_address, bz_grid_addresses,
bz_map, bz_map,
bz_grid_type,
mesh, mesh,
fc3, fc3,
is_compact_fc3, is_compact_fc3,
@ -555,7 +558,7 @@ static PyObject * py_get_pp_collision_with_sigma(PyObject *self, PyObject *args)
PyArrayObject *py_eigenvectors; PyArrayObject *py_eigenvectors;
PyArrayObject *py_triplets; PyArrayObject *py_triplets;
PyArrayObject *py_triplet_weights; PyArrayObject *py_triplet_weights;
PyArrayObject *py_grid_address; PyArrayObject *py_bz_grid_addresses;
PyArrayObject *py_mesh; PyArrayObject *py_mesh;
PyArrayObject *py_fc3; PyArrayObject *py_fc3;
PyArrayObject *py_shortest_vectors; PyArrayObject *py_shortest_vectors;
@ -577,7 +580,7 @@ static PyObject * py_get_pp_collision_with_sigma(PyObject *self, PyObject *args)
long (*triplets)[3]; long (*triplets)[3];
long num_triplets; long num_triplets;
long *triplet_weights; long *triplet_weights;
long *grid_address; long (*bz_grid_addresses)[3];
long *mesh; long *mesh;
double *fc3; double *fc3;
double *svecs; double *svecs;
@ -599,7 +602,7 @@ static PyObject * py_get_pp_collision_with_sigma(PyObject *self, PyObject *args)
&py_eigenvectors, &py_eigenvectors,
&py_triplets, &py_triplets,
&py_triplet_weights, &py_triplet_weights,
&py_grid_address, &py_bz_grid_addresses,
&py_mesh, &py_mesh,
&py_fc3, &py_fc3,
&py_shortest_vectors, &py_shortest_vectors,
@ -621,7 +624,7 @@ static PyObject * py_get_pp_collision_with_sigma(PyObject *self, PyObject *args)
triplets = (long(*)[3])PyArray_DATA(py_triplets); triplets = (long(*)[3])PyArray_DATA(py_triplets);
num_triplets = (long)PyArray_DIMS(py_triplets)[0]; num_triplets = (long)PyArray_DIMS(py_triplets)[0];
triplet_weights = (long*)PyArray_DATA(py_triplet_weights); triplet_weights = (long*)PyArray_DATA(py_triplet_weights);
grid_address = (long*)PyArray_DATA(py_grid_address); bz_grid_addresses = (long(*)[3])PyArray_DATA(py_bz_grid_addresses);
mesh = (long*)PyArray_DATA(py_mesh); mesh = (long*)PyArray_DATA(py_mesh);
fc3 = (double*)PyArray_DATA(py_fc3); fc3 = (double*)PyArray_DATA(py_fc3);
if (PyArray_DIMS(py_fc3)[0] == PyArray_DIMS(py_fc3)[1]) { if (PyArray_DIMS(py_fc3)[0] == PyArray_DIMS(py_fc3)[1]) {
@ -648,7 +651,7 @@ static PyObject * py_get_pp_collision_with_sigma(PyObject *self, PyObject *args)
triplets, triplets,
num_triplets, num_triplets,
triplet_weights, triplet_weights,
grid_address, bz_grid_addresses,
mesh, mesh,
fc3, fc3,
is_compact_fc3, is_compact_fc3,
@ -744,7 +747,7 @@ py_get_detailed_imag_self_energy_with_g(PyObject *self, PyObject *args)
PyArrayObject *py_frequencies; PyArrayObject *py_frequencies;
PyArrayObject *py_triplets; PyArrayObject *py_triplets;
PyArrayObject *py_triplet_weights; PyArrayObject *py_triplet_weights;
PyArrayObject *py_grid_address; PyArrayObject *py_bz_grid_addresses;
PyArrayObject *py_g; PyArrayObject *py_g;
PyArrayObject *py_g_zero; PyArrayObject *py_g_zero;
double cutoff_frequency, temperature; double cutoff_frequency, temperature;
@ -758,7 +761,7 @@ py_get_detailed_imag_self_energy_with_g(PyObject *self, PyObject *args)
double *frequencies; double *frequencies;
long (*triplets)[3]; long (*triplets)[3];
long *triplet_weights; long *triplet_weights;
long *grid_address; long (*bz_grid_addresses)[3];
if (!PyArg_ParseTuple(args, "OOOOOOOOdOOd", if (!PyArg_ParseTuple(args, "OOOOOOOOdOOd",
&py_gamma_detail, &py_gamma_detail,
@ -767,7 +770,7 @@ py_get_detailed_imag_self_energy_with_g(PyObject *self, PyObject *args)
&py_fc3_normal_squared, &py_fc3_normal_squared,
&py_triplets, &py_triplets,
&py_triplet_weights, &py_triplet_weights,
&py_grid_address, &py_bz_grid_addresses,
&py_frequencies, &py_frequencies,
&temperature, &temperature,
&py_g, &py_g,
@ -785,7 +788,7 @@ py_get_detailed_imag_self_energy_with_g(PyObject *self, PyObject *args)
frequencies = (double*)PyArray_DATA(py_frequencies); frequencies = (double*)PyArray_DATA(py_frequencies);
triplets = (long(*)[3])PyArray_DATA(py_triplets); triplets = (long(*)[3])PyArray_DATA(py_triplets);
triplet_weights = (long*)PyArray_DATA(py_triplet_weights); triplet_weights = (long*)PyArray_DATA(py_triplet_weights);
grid_address = (long*)PyArray_DATA(py_grid_address); bz_grid_addresses = (long(*)[3])PyArray_DATA(py_bz_grid_addresses);
ph3py_get_detailed_imag_self_energy_at_bands_with_g(gamma_detail, ph3py_get_detailed_imag_self_energy_at_bands_with_g(gamma_detail,
gamma_N, gamma_N,
@ -794,7 +797,7 @@ py_get_detailed_imag_self_energy_with_g(PyObject *self, PyObject *args)
frequencies, frequencies,
triplets, triplets,
triplet_weights, triplet_weights,
grid_address, bz_grid_addresses,
g, g,
g_zero, g_zero,
temperature, temperature,
@ -1465,6 +1468,7 @@ static PyObject * py_get_neighboring_grid_points(PyObject *self, PyObject *args)
PyArrayObject *py_mesh; PyArrayObject *py_mesh;
PyArrayObject *py_bz_grid_address; PyArrayObject *py_bz_grid_address;
PyArrayObject *py_bz_map; PyArrayObject *py_bz_map;
long bz_grid_type;
long *relative_grid_points; long *relative_grid_points;
long *grid_points; long *grid_points;
@ -1474,13 +1478,14 @@ static PyObject * py_get_neighboring_grid_points(PyObject *self, PyObject *args)
long (*bz_grid_address)[3]; long (*bz_grid_address)[3];
long *bz_map; long *bz_map;
if (!PyArg_ParseTuple(args, "OOOOOO", if (!PyArg_ParseTuple(args, "OOOOOOl",
&py_relative_grid_points, &py_relative_grid_points,
&py_grid_points, &py_grid_points,
&py_relative_grid_address, &py_relative_grid_address,
&py_mesh, &py_mesh,
&py_bz_grid_address, &py_bz_grid_address,
&py_bz_map)) { &py_bz_map,
&bz_grid_type)) {
return NULL; return NULL;
} }
@ -1499,6 +1504,7 @@ static PyObject * py_get_neighboring_grid_points(PyObject *self, PyObject *args)
mesh, mesh,
bz_grid_address, bz_grid_address,
bz_map, bz_map,
bz_grid_type,
num_grid_points, num_grid_points,
num_relative_grid_address); num_relative_grid_address);
@ -1515,6 +1521,7 @@ static PyObject * py_set_integration_weights(PyObject *self, PyObject *args)
PyArrayObject *py_frequencies; PyArrayObject *py_frequencies;
PyArrayObject *py_bz_grid_address; PyArrayObject *py_bz_grid_address;
PyArrayObject *py_bz_map; PyArrayObject *py_bz_map;
long bz_grid_type;
double *iw; double *iw;
double *frequency_points; double *frequency_points;
@ -1526,7 +1533,7 @@ static PyObject * py_set_integration_weights(PyObject *self, PyObject *args)
long *bz_map; long *bz_map;
double *frequencies; double *frequencies;
if (!PyArg_ParseTuple(args, "OOOOOOOO", if (!PyArg_ParseTuple(args, "OOOOOOOOl",
&py_iw, &py_iw,
&py_frequency_points, &py_frequency_points,
&py_relative_grid_address, &py_relative_grid_address,
@ -1534,7 +1541,8 @@ static PyObject * py_set_integration_weights(PyObject *self, PyObject *args)
&py_grid_points, &py_grid_points,
&py_frequencies, &py_frequencies,
&py_bz_grid_address, &py_bz_grid_address,
&py_bz_map)) { &py_bz_map,
&bz_grid_type)) {
return NULL; return NULL;
} }
@ -1560,6 +1568,7 @@ static PyObject * py_set_integration_weights(PyObject *self, PyObject *args)
grid_points, grid_points,
bz_grid_address, bz_grid_address,
bz_map, bz_map,
bz_grid_type,
frequencies); frequencies);
Py_RETURN_NONE; Py_RETURN_NONE;
@ -1675,8 +1684,9 @@ py_set_triplets_integration_weights(PyObject *self, PyObject *args)
PyArrayObject *py_triplets; PyArrayObject *py_triplets;
PyArrayObject *py_frequencies1; PyArrayObject *py_frequencies1;
PyArrayObject *py_frequencies2; PyArrayObject *py_frequencies2;
PyArrayObject *py_bz_grid_address; PyArrayObject *py_bz_grid_addresses;
PyArrayObject *py_bz_map; PyArrayObject *py_bz_map;
long bz_grid_type;
long tp_type; long tp_type;
double *iw; double *iw;
@ -1685,12 +1695,12 @@ py_set_triplets_integration_weights(PyObject *self, PyObject *args)
long (*relative_grid_address)[4][3]; long (*relative_grid_address)[4][3];
long *mesh; long *mesh;
long (*triplets)[3]; long (*triplets)[3];
long (*bz_grid_address)[3]; long (*bz_grid_addresses)[3];
long *bz_map; long *bz_map;
double *frequencies1, *frequencies2; double *frequencies1, *frequencies2;
long num_band0, num_band1, num_band2, num_triplets; long num_band0, num_band1, num_band2, num_triplets;
if (!PyArg_ParseTuple(args, "OOOOOOOOOOl", if (!PyArg_ParseTuple(args, "OOOOOOOOOOll",
&py_iw, &py_iw,
&py_iw_zero, &py_iw_zero,
&py_frequency_points, &py_frequency_points,
@ -1699,8 +1709,9 @@ py_set_triplets_integration_weights(PyObject *self, PyObject *args)
&py_triplets, &py_triplets,
&py_frequencies1, &py_frequencies1,
&py_frequencies2, &py_frequencies2,
&py_bz_grid_address, &py_bz_grid_addresses,
&py_bz_map, &py_bz_map,
&bz_grid_type,
&tp_type)) { &tp_type)) {
return NULL; return NULL;
} }
@ -1713,7 +1724,7 @@ py_set_triplets_integration_weights(PyObject *self, PyObject *args)
mesh = (long*)PyArray_DATA(py_mesh); mesh = (long*)PyArray_DATA(py_mesh);
triplets = (long(*)[3])PyArray_DATA(py_triplets); triplets = (long(*)[3])PyArray_DATA(py_triplets);
num_triplets = (long)PyArray_DIMS(py_triplets)[0]; num_triplets = (long)PyArray_DIMS(py_triplets)[0];
bz_grid_address = (long(*)[3])PyArray_DATA(py_bz_grid_address); bz_grid_addresses = (long(*)[3])PyArray_DATA(py_bz_grid_addresses);
bz_map = (long*)PyArray_DATA(py_bz_map); bz_map = (long*)PyArray_DATA(py_bz_map);
frequencies1 = (double*)PyArray_DATA(py_frequencies1); frequencies1 = (double*)PyArray_DATA(py_frequencies1);
frequencies2 = (double*)PyArray_DATA(py_frequencies2); frequencies2 = (double*)PyArray_DATA(py_frequencies2);
@ -1728,8 +1739,9 @@ py_set_triplets_integration_weights(PyObject *self, PyObject *args)
mesh, mesh,
triplets, triplets,
num_triplets, num_triplets,
bz_grid_address, bz_grid_addresses,
bz_map, bz_map,
bz_grid_type,
frequencies1, frequencies1,
num_band1, num_band1,
frequencies2, frequencies2,

View File

@ -187,7 +187,7 @@ void ise_get_detailed_imag_self_energy_at_bands_with_g
const double *frequencies, const double *frequencies,
const long (*triplets)[3], const long (*triplets)[3],
const long *triplet_weights, const long *triplet_weights,
const long *grid_address, const long (*bz_grid_addresses)[3],
const double *g, const double *g,
const char *g_zero, const char *g_zero,
const double temperature, const double temperature,
@ -229,7 +229,7 @@ void ise_get_detailed_imag_self_energy_at_bands_with_g
is_N = (long*)malloc(sizeof(long) * num_triplets); is_N = (long*)malloc(sizeof(long) * num_triplets);
for (i = 0; i < num_triplets; i++) { for (i = 0; i < num_triplets; i++) {
is_N[i] = tpl_is_N(triplets[i], grid_address); is_N[i] = tpl_is_N(triplets[i], bz_grid_addresses);
} }
for (i = 0; i < num_band0; i++) { for (i = 0; i < num_band0; i++) {

View File

@ -57,7 +57,7 @@ void ise_get_detailed_imag_self_energy_at_bands_with_g
const double *frequencies, const double *frequencies,
const long (*triplets)[3], const long (*triplets)[3],
const long *triplet_weights, const long *triplet_weights,
const long *grid_address, const long (*bz_grid_addresses)[3],
const double *g, const double *g,
const char *g_zero, const char *g_zero,
const double temperature, const double temperature,

View File

@ -34,6 +34,7 @@
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
#include "bzgrid.h"
#include "phonoc_array.h" #include "phonoc_array.h"
#include "phonoc_const.h" #include "phonoc_const.h"
#include "interaction.h" #include "interaction.h"
@ -102,8 +103,7 @@ void itr_get_interaction(Darray *fc3_normal_squared,
const lapack_complex_double *eigenvectors, const lapack_complex_double *eigenvectors,
const long (*triplets)[3], const long (*triplets)[3],
const long num_triplets, const long num_triplets,
const long *grid_address, const ConstBZGrid *bzgrid,
const long *mesh,
const double *fc3, const double *fc3,
const long is_compact_fc3, const long is_compact_fc3,
const double *shortest_vectors, const double *shortest_vectors,
@ -150,8 +150,7 @@ void itr_get_interaction(Darray *fc3_normal_squared,
frequencies->data, frequencies->data,
eigenvectors, eigenvectors,
triplets[i], triplets[i],
grid_address, bzgrid,
mesh,
fc3, fc3,
is_compact_fc3, is_compact_fc3,
shortest_vectors, shortest_vectors,
@ -180,8 +179,7 @@ void itr_get_interaction_at_triplet(double *fc3_normal_squared,
const double *frequencies, const double *frequencies,
const lapack_complex_double *eigenvectors, const lapack_complex_double *eigenvectors,
const long triplet[3], const long triplet[3],
const long *grid_address, const ConstBZGrid *bzgrid,
const long *mesh,
const double *fc3, const double *fc3,
const long is_compact_fc3, const long is_compact_fc3,
const double *shortest_vectors, const double *shortest_vectors,
@ -204,7 +202,7 @@ void itr_get_interaction_at_triplet(double *fc3_normal_squared,
for (j = 0; j < 3; j++) { for (j = 0; j < 3; j++) {
for (k = 0; k < 3; k++) { for (k = 0; k < 3; k++) {
q[j * 3 + k] = ((double)grid_address[triplet[j] * 3 + k]) / mesh[k]; q[j * 3 + k] = ((double)bzgrid->addresses[triplet[j]][k]) / bzgrid->D_diag[k];
} }
} }

View File

@ -44,8 +44,7 @@ void itr_get_interaction(Darray *fc3_normal_squared,
const lapack_complex_double *eigenvectors, const lapack_complex_double *eigenvectors,
const long (*triplets)[3], const long (*triplets)[3],
const long num_triplets, const long num_triplets,
const long *grid_address, const ConstBZGrid *bzgrid,
const long *mesh,
const double *fc3, const double *fc3,
const long is_compact_fc3, const long is_compact_fc3,
const double *shortest_vectors, const double *shortest_vectors,
@ -65,8 +64,7 @@ void itr_get_interaction_at_triplet(double *fc3_normal_squared,
const double *frequencies, const double *frequencies,
const lapack_complex_double *eigenvectors, const lapack_complex_double *eigenvectors,
const long triplet[3], const long triplet[3],
const long *grid_address, const ConstBZGrid *bzgrid,
const long *mesh,
const double *fc3, const double *fc3,
const long is_compact_fc3, const long is_compact_fc3,
const double *shortest_vectors, const double *shortest_vectors,

View File

@ -53,13 +53,13 @@
#include <stdio.h> #include <stdio.h>
void ph3py_get_interaction(Darray *fc3_normal_squared, long ph3py_get_interaction(Darray *fc3_normal_squared,
const char *g_zero, const char *g_zero,
const Darray *frequencies, const Darray *frequencies,
const lapack_complex_double *eigenvectors, const lapack_complex_double *eigenvectors,
const long (*triplets)[3], const long (*triplets)[3],
const long num_triplets, const long num_triplets,
const long *grid_address, const long (*bz_grid_addresses)[3],
const long *mesh, const long *mesh,
const double *fc3, const double *fc3,
const long is_compact_fc3, const long is_compact_fc3,
@ -73,14 +73,27 @@ void ph3py_get_interaction(Darray *fc3_normal_squared,
const long symmetrize_fc3_q, const long symmetrize_fc3_q,
const double cutoff_frequency) const double cutoff_frequency)
{ {
ConstBZGrid *bzgrid;
long i;
if ((bzgrid = (ConstBZGrid*) malloc(sizeof(ConstBZGrid))) == NULL) {
warning_print("Memory could not be allocated.");
return 0;
}
bzgrid->addresses = bz_grid_addresses;
for (i = 0; i < 3; i++) {
bzgrid->D_diag[i] = mesh[i];
bzgrid->PS[i] = 0;
}
itr_get_interaction(fc3_normal_squared, itr_get_interaction(fc3_normal_squared,
g_zero, g_zero,
frequencies, frequencies,
eigenvectors, eigenvectors,
triplets, triplets,
num_triplets, num_triplets,
grid_address, bzgrid,
mesh,
fc3, fc3,
is_compact_fc3, is_compact_fc3,
shortest_vectors, shortest_vectors,
@ -92,18 +105,23 @@ void ph3py_get_interaction(Darray *fc3_normal_squared,
band_indices, band_indices,
symmetrize_fc3_q, symmetrize_fc3_q,
cutoff_frequency); cutoff_frequency);
free(bzgrid);
bzgrid = NULL;
return 1;
} }
void ph3py_get_pp_collision(double *imag_self_energy, long ph3py_get_pp_collision(double *imag_self_energy,
PHPYCONST long relative_grid_address[24][4][3], /* thm */ PHPYCONST long relative_grid_address[24][4][3], /* thm */
const double *frequencies, const double *frequencies,
const lapack_complex_double *eigenvectors, const lapack_complex_double *eigenvectors,
const long (*triplets)[3], const long (*triplets)[3],
const long num_triplets, const long num_triplets,
const long *triplet_weights, const long *triplet_weights,
const long *grid_address, /* thm */ const long (*bz_grid_addresses)[3], /* thm */
const long *bz_map, /* thm */ const long *bz_map, /* thm */
const long bz_grid_type,
const long *mesh, /* thm */ const long *mesh, /* thm */
const double *fc3, const double *fc3,
const long is_compact_fc3, const long is_compact_fc3,
@ -119,6 +137,22 @@ void ph3py_get_pp_collision(double *imag_self_energy,
const long symmetrize_fc3_q, const long symmetrize_fc3_q,
const double cutoff_frequency) const double cutoff_frequency)
{ {
ConstBZGrid *bzgrid;
long i;
if ((bzgrid = (ConstBZGrid*) malloc(sizeof(ConstBZGrid))) == NULL) {
warning_print("Memory could not be allocated.");
return 0;
}
bzgrid->addresses = bz_grid_addresses;
bzgrid->gp_map = bz_map;
bzgrid->type = bz_grid_type;
for (i = 0; i < 3; i++) {
bzgrid->D_diag[i] = mesh[i];
bzgrid->PS[i] = 0;
}
ppc_get_pp_collision(imag_self_energy, ppc_get_pp_collision(imag_self_energy,
relative_grid_address, relative_grid_address,
frequencies, frequencies,
@ -126,9 +160,7 @@ void ph3py_get_pp_collision(double *imag_self_energy,
triplets, triplets,
num_triplets, num_triplets,
triplet_weights, triplet_weights,
grid_address, bzgrid,
bz_map,
mesh,
fc3, fc3,
is_compact_fc3, is_compact_fc3,
shortest_vectors, shortest_vectors,
@ -142,10 +174,15 @@ void ph3py_get_pp_collision(double *imag_self_energy,
is_NU, is_NU,
symmetrize_fc3_q, symmetrize_fc3_q,
cutoff_frequency); cutoff_frequency);
free(bzgrid);
bzgrid = NULL;
return 1;
} }
void ph3py_get_pp_collision_with_sigma( long ph3py_get_pp_collision_with_sigma(
double *imag_self_energy, double *imag_self_energy,
const double sigma, const double sigma,
const double sigma_cutoff, const double sigma_cutoff,
@ -154,7 +191,7 @@ void ph3py_get_pp_collision_with_sigma(
const long (*triplets)[3], const long (*triplets)[3],
const long num_triplets, const long num_triplets,
const long *triplet_weights, const long *triplet_weights,
const long *grid_address, const long (*bz_grid_addresses)[3],
const long *mesh, const long *mesh,
const double *fc3, const double *fc3,
const long is_compact_fc3, const long is_compact_fc3,
@ -170,6 +207,20 @@ void ph3py_get_pp_collision_with_sigma(
const long symmetrize_fc3_q, const long symmetrize_fc3_q,
const double cutoff_frequency) const double cutoff_frequency)
{ {
ConstBZGrid *bzgrid;
long i;
if ((bzgrid = (ConstBZGrid*) malloc(sizeof(ConstBZGrid))) == NULL) {
warning_print("Memory could not be allocated.");
return 0;
}
bzgrid->addresses = bz_grid_addresses;
for (i = 0; i < 3; i++) {
bzgrid->D_diag[i] = mesh[i];
bzgrid->PS[i] = 0;
}
ppc_get_pp_collision_with_sigma(imag_self_energy, ppc_get_pp_collision_with_sigma(imag_self_energy,
sigma, sigma,
sigma_cutoff, sigma_cutoff,
@ -178,8 +229,7 @@ void ph3py_get_pp_collision_with_sigma(
triplets, triplets,
num_triplets, num_triplets,
triplet_weights, triplet_weights,
grid_address, bzgrid,
mesh,
fc3, fc3,
is_compact_fc3, is_compact_fc3,
shortest_vectors, shortest_vectors,
@ -193,6 +243,11 @@ void ph3py_get_pp_collision_with_sigma(
is_NU, is_NU,
symmetrize_fc3_q, symmetrize_fc3_q,
cutoff_frequency); cutoff_frequency);
free(bzgrid);
bzgrid = NULL;
return 1;
} }
@ -231,7 +286,7 @@ void ph3py_get_detailed_imag_self_energy_at_bands_with_g(
const double *frequencies, const double *frequencies,
const long (*triplets)[3], const long (*triplets)[3],
const long *triplet_weights, const long *triplet_weights,
const long *grid_address, const long (*bz_grid_addresses)[3],
const double *g, const double *g,
const char *g_zero, const char *g_zero,
const double temperature, const double temperature,
@ -244,7 +299,7 @@ void ph3py_get_detailed_imag_self_energy_at_bands_with_g(
frequencies, frequencies,
triplets, triplets,
triplet_weights, triplet_weights,
grid_address, bz_grid_addresses,
g, g,
g_zero, g_zero,
temperature, temperature,
@ -523,7 +578,7 @@ long ph3py_get_triplets_reciprocal_mesh_at_q(long *map_triplets,
long ph3py_get_BZ_triplets_at_q(long (*triplets)[3], long ph3py_get_BZ_triplets_at_q(long (*triplets)[3],
const long grid_point, const long grid_point,
const long (*bz_grid_address)[3], const long (*bz_grid_addresses)[3],
const long *bz_map, const long *bz_map,
const long *map_triplets, const long *map_triplets,
const long num_map_triplets, const long num_map_triplets,
@ -538,7 +593,7 @@ long ph3py_get_BZ_triplets_at_q(long (*triplets)[3],
return 0; return 0;
} }
bzgrid->addresses = bz_grid_address; bzgrid->addresses = bz_grid_addresses;
bzgrid->gp_map = bz_map; bzgrid->gp_map = bz_map;
bzgrid->type = type; bzgrid->type = type;
for (i = 0; i < 3; i++) { for (i = 0; i < 3; i++) {
@ -558,7 +613,7 @@ long ph3py_get_BZ_triplets_at_q(long (*triplets)[3],
} }
void ph3py_get_integration_weight(double *iw, long ph3py_get_integration_weight(double *iw,
char *iw_zero, char *iw_zero,
const double *frequency_points, const double *frequency_points,
const long num_band0, const long num_band0,
@ -566,8 +621,9 @@ void ph3py_get_integration_weight(double *iw,
const long mesh[3], const long mesh[3],
PHPYCONST long (*triplets)[3], PHPYCONST long (*triplets)[3],
const long num_triplets, const long num_triplets,
PHPYCONST long (*bz_grid_address)[3], PHPYCONST long (*bz_grid_addresses)[3],
const long *bz_map, const long *bz_map,
const long bz_grid_type,
const double *frequencies1, const double *frequencies1,
const long num_band1, const long num_band1,
const double *frequencies2, const double *frequencies2,
@ -576,16 +632,30 @@ void ph3py_get_integration_weight(double *iw,
const long openmp_per_triplets, const long openmp_per_triplets,
const long openmp_per_bands) const long openmp_per_bands)
{ {
ConstBZGrid *bzgrid;
long i;
if ((bzgrid = (ConstBZGrid*) malloc(sizeof(ConstBZGrid))) == NULL) {
warning_print("Memory could not be allocated.");
return 0;
}
bzgrid->addresses = bz_grid_addresses;
bzgrid->gp_map = bz_map;
bzgrid->type = bz_grid_type;
for (i = 0; i < 3; i++) {
bzgrid->D_diag[i] = mesh[i];
bzgrid->PS[i] = 0;
}
tpl_get_integration_weight(iw, tpl_get_integration_weight(iw,
iw_zero, iw_zero,
frequency_points, frequency_points,
num_band0, num_band0,
relative_grid_address, relative_grid_address,
mesh,
triplets, triplets,
num_triplets, num_triplets,
bz_grid_address, bzgrid,
bz_map,
frequencies1, frequencies1,
num_band1, num_band1,
frequencies2, frequencies2,
@ -593,6 +663,10 @@ void ph3py_get_integration_weight(double *iw,
tp_type, tp_type,
openmp_per_triplets, openmp_per_triplets,
openmp_per_bands); openmp_per_bands);
free(bzgrid);
bzgrid = NULL;
return 1;
} }
void ph3py_get_integration_weight_with_sigma(double *iw, void ph3py_get_integration_weight_with_sigma(double *iw,
@ -655,7 +729,7 @@ long ph3py_get_ir_reciprocal_mesh(long grid_address[][3],
return num_ir; return num_ir;
} }
long ph3py_get_bz_grid_address(long (*bz_grid_address)[3], long ph3py_get_bz_grid_address(long (*bz_grid_addresses)[3],
long *bz_map, long *bz_map,
PHPYCONST long grid_address[][3], PHPYCONST long grid_address[][3],
const long D_diag[3], const long D_diag[3],
@ -672,7 +746,7 @@ long ph3py_get_bz_grid_address(long (*bz_grid_address)[3],
return 0; return 0;
} }
bzgrid->addresses = bz_grid_address; bzgrid->addresses = bz_grid_addresses;
bzgrid->gp_map = bz_map; bzgrid->gp_map = bz_map;
bzgrid->type = type; bzgrid->type = type;
for (i = 0; i < 3; i++) { for (i = 0; i < 3; i++) {
@ -793,16 +867,31 @@ void ph3py_expand_collision_matrix(double *collision_matrix,
} }
void ph3py_get_neighboring_gird_points(long *relative_grid_points, long ph3py_get_neighboring_gird_points(long *relative_grid_points,
const long *grid_points, const long *grid_points,
PHPYCONST long (*relative_grid_address)[3], PHPYCONST long (*relative_grid_address)[3],
const long mesh[3], const long mesh[3],
PHPYCONST long (*bz_grid_address)[3], PHPYCONST long (*bz_grid_addresses)[3],
const long *bz_map, const long *bz_map,
const long bz_grid_type,
const long num_grid_points, const long num_grid_points,
const long num_relative_grid_address) const long num_relative_grid_address)
{ {
long i; long i;
ConstBZGrid *bzgrid;
if ((bzgrid = (ConstBZGrid*) malloc(sizeof(ConstBZGrid))) == NULL) {
warning_print("Memory could not be allocated.");
return 0;
}
bzgrid->addresses = bz_grid_addresses;
bzgrid->gp_map = bz_map;
bzgrid->type = bz_grid_type;
for (i = 0; i < 3; i++) {
bzgrid->D_diag[i] = mesh[i];
bzgrid->PS[i] = 0;
}
#pragma omp parallel for #pragma omp parallel for
for (i = 0; i < num_grid_points; i++) { for (i = 0; i < num_grid_points; i++) {
@ -811,14 +900,17 @@ void ph3py_get_neighboring_gird_points(long *relative_grid_points,
grid_points[i], grid_points[i],
relative_grid_address, relative_grid_address,
num_relative_grid_address, num_relative_grid_address,
mesh, bzgrid);
bz_grid_address,
bz_map);
} }
free(bzgrid);
bzgrid = NULL;
return 1;
} }
void ph3py_set_integration_weights(double *iw, long ph3py_set_integration_weights(double *iw,
const double *frequency_points, const double *frequency_points,
const long num_band0, const long num_band0,
const long num_band, const long num_band,
@ -826,13 +918,28 @@ void ph3py_set_integration_weights(double *iw,
PHPYCONST long (*relative_grid_address)[4][3], PHPYCONST long (*relative_grid_address)[4][3],
const long mesh[3], const long mesh[3],
const long *grid_points, const long *grid_points,
PHPYCONST long (*bz_grid_address)[3], PHPYCONST long (*bz_grid_addresses)[3],
const long *bz_map, const long *bz_map,
const long bz_grid_type,
const double *frequencies) const double *frequencies)
{ {
long i, j, k, bi; long i, j, k, bi;
long vertices[24][4]; long vertices[24][4];
double freq_vertices[24][4]; double freq_vertices[24][4];
ConstBZGrid *bzgrid;
if ((bzgrid = (ConstBZGrid*) malloc(sizeof(ConstBZGrid))) == NULL) {
warning_print("Memory could not be allocated.");
return 0;
}
bzgrid->addresses = bz_grid_addresses;
bzgrid->gp_map = bz_map;
bzgrid->type = bz_grid_type;
for (i = 0; i < 3; i++) {
bzgrid->D_diag[i] = mesh[i];
bzgrid->PS[i] = 0;
}
#pragma omp parallel for private(j, k, bi, vertices, freq_vertices) #pragma omp parallel for private(j, k, bi, vertices, freq_vertices)
for (i = 0; i < num_gp; i++) { for (i = 0; i < num_gp; i++) {
@ -841,9 +948,7 @@ void ph3py_set_integration_weights(double *iw,
grid_points[i], grid_points[i],
relative_grid_address[j], relative_grid_address[j],
4, 4,
mesh, bzgrid);
bz_grid_address,
bz_map);
} }
for (bi = 0; bi < num_band; bi++) { for (bi = 0; bi < num_band; bi++) {
for (j = 0; j < 24; j++) { for (j = 0; j < 24; j++) {
@ -857,4 +962,9 @@ void ph3py_set_integration_weights(double *iw,
} }
} }
} }
free(bzgrid);
bzgrid = NULL;
return 1;
} }

View File

@ -42,13 +42,13 @@
#include "lapack_wrapper.h" #include "lapack_wrapper.h"
#include "phonoc_array.h" #include "phonoc_array.h"
void ph3py_get_interaction(Darray *fc3_normal_squared, long ph3py_get_interaction(Darray *fc3_normal_squared,
const char *g_zero, const char *g_zero,
const Darray *frequencies, const Darray *frequencies,
const lapack_complex_double *eigenvectors, const lapack_complex_double *eigenvectors,
const long (*triplets)[3], const long (*triplets)[3],
const long num_triplets, const long num_triplets,
const long *grid_address, const long (*bz_grid_addresses)[3],
const long *mesh, const long *mesh,
const double *fc3, const double *fc3,
const long is_compact_fc3, const long is_compact_fc3,
@ -61,15 +61,16 @@ void ph3py_get_interaction(Darray *fc3_normal_squared,
const long *band_indices, const long *band_indices,
const long symmetrize_fc3_q, const long symmetrize_fc3_q,
const double cutoff_frequency); const double cutoff_frequency);
void ph3py_get_pp_collision(double *imag_self_energy, long ph3py_get_pp_collision(double *imag_self_energy,
PHPYCONST long relative_grid_address[24][4][3], /* thm */ PHPYCONST long relative_grid_address[24][4][3], /* thm */
const double *frequencies, const double *frequencies,
const lapack_complex_double *eigenvectors, const lapack_complex_double *eigenvectors,
const long (*triplets)[3], const long (*triplets)[3],
const long num_triplets, const long num_triplets,
const long *triplet_weights, const long *triplet_weights,
const long *grid_address, /* thm */ const long (*bz_grid_addresses)[3], /* thm */
const long *bz_map, /* thm */ const long *bz_map, /* thm */
const long bz_grid_type,
const long *mesh, /* thm */ const long *mesh, /* thm */
const double *fc3, const double *fc3,
const long is_compact_fc3, const long is_compact_fc3,
@ -84,7 +85,7 @@ void ph3py_get_pp_collision(double *imag_self_energy,
const long is_NU, const long is_NU,
const long symmetrize_fc3_q, const long symmetrize_fc3_q,
const double cutoff_frequency); const double cutoff_frequency);
void ph3py_get_pp_collision_with_sigma( long ph3py_get_pp_collision_with_sigma(
double *imag_self_energy, double *imag_self_energy,
const double sigma, const double sigma,
const double sigma_cutoff, const double sigma_cutoff,
@ -93,7 +94,7 @@ void ph3py_get_pp_collision_with_sigma(
const long (*triplets)[3], const long (*triplets)[3],
const long num_triplets, const long num_triplets,
const long *triplet_weights, const long *triplet_weights,
const long *grid_address, const long (*bz_grid_addresses)[3],
const long *mesh, const long *mesh,
const double *fc3, const double *fc3,
const long is_compact_fc3, const long is_compact_fc3,
@ -128,7 +129,7 @@ void ph3py_get_detailed_imag_self_energy_at_bands_with_g(
const double *frequencies, const double *frequencies,
const long (*triplets)[3], const long (*triplets)[3],
const long *triplet_weights, const long *triplet_weights,
const long *grid_address, const long (*bz_grid_addresses)[3],
const double *g, const double *g,
const char *g_zero, const char *g_zero,
const double temperature, const double temperature,
@ -248,13 +249,13 @@ long ph3py_get_triplets_reciprocal_mesh_at_q(long *map_triplets,
const long swappable); const long swappable);
long ph3py_get_BZ_triplets_at_q(long (*triplets)[3], long ph3py_get_BZ_triplets_at_q(long (*triplets)[3],
const long grid_point, const long grid_point,
const long (*bz_grid_address)[3], const long (*bz_grid_addresses)[3],
const long *bz_map, const long *bz_map,
const long *map_triplets, const long *map_triplets,
const long num_map_triplets, const long num_map_triplets,
const long mesh[3], const long mesh[3],
const long type); const long type);
void ph3py_get_integration_weight(double *iw, long ph3py_get_integration_weight(double *iw,
char *iw_zero, char *iw_zero,
const double *frequency_points, const double *frequency_points,
const long num_band0, const long num_band0,
@ -262,8 +263,9 @@ void ph3py_get_integration_weight(double *iw,
const long mesh[3], const long mesh[3],
PHPYCONST long (*triplets)[3], PHPYCONST long (*triplets)[3],
const long num_triplets, const long num_triplets,
PHPYCONST long (*bz_grid_address)[3], PHPYCONST long (*bz_grid_addresses)[3],
const long *bz_map, const long *bz_map,
const long bz_grid_type,
const double *frequencies1, const double *frequencies1,
const long num_band1, const long num_band1,
const double *frequencies2, const double *frequencies2,
@ -291,7 +293,7 @@ long ph3py_get_ir_reciprocal_mesh(long grid_address[][3],
const long is_time_reversal, const long is_time_reversal,
PHPYCONST long rotations_in[][3][3], PHPYCONST long rotations_in[][3][3],
const long num_rot); const long num_rot);
long ph3py_get_bz_grid_address(long (*bz_grid_address)[3], long ph3py_get_bz_grid_address(long (*bz_grid_addresses)[3],
long *bz_map, long *bz_map,
PHPYCONST long grid_address[][3], PHPYCONST long grid_address[][3],
const long D_diag[3], const long D_diag[3],
@ -313,15 +315,16 @@ void ph3py_expand_collision_matrix(double *collision_matrix,
const long num_sigma, const long num_sigma,
const long num_temp, const long num_temp,
const long num_band); const long num_band);
void ph3py_get_neighboring_gird_points(long *relative_grid_points, long ph3py_get_neighboring_gird_points(long *relative_grid_points,
const long *grid_points, const long *grid_points,
PHPYCONST long (*relative_grid_address)[3], PHPYCONST long (*relative_grid_address)[3],
const long mesh[3], const long mesh[3],
PHPYCONST long (*bz_grid_address)[3], PHPYCONST long (*bz_grid_addresses)[3],
const long *bz_map, const long *bz_map,
const long bz_grid_type,
const long num_grid_points, const long num_grid_points,
const long num_relative_grid_address); const long num_relative_grid_address);
void ph3py_set_integration_weights(double *iw, long ph3py_set_integration_weights(double *iw,
const double *frequency_points, const double *frequency_points,
const long num_band0, const long num_band0,
const long num_band, const long num_band,
@ -329,8 +332,9 @@ void ph3py_set_integration_weights(double *iw,
PHPYCONST long (*relative_grid_address)[4][3], PHPYCONST long (*relative_grid_address)[4][3],
const long mesh[3], const long mesh[3],
const long *grid_points, const long *grid_points,
PHPYCONST long (*bz_grid_address)[3], PHPYCONST long (*bz_grid_addresses)[3],
const long *bz_map, const long *bz_map,
const long bz_grid_type,
const double *frequencies); const double *frequencies);
#endif #endif

View File

@ -55,8 +55,7 @@ static void get_collision(double *ise,
const lapack_complex_double *eigenvectors, const lapack_complex_double *eigenvectors,
const long triplet[3], const long triplet[3],
const long triplet_weight, const long triplet_weight,
const long *grid_address, const ConstBZGrid *bzgrid,
const long *mesh,
const double *fc3, const double *fc3,
const long is_compact_fc3, const long is_compact_fc3,
const double *shortest_vectors, const double *shortest_vectors,
@ -71,7 +70,7 @@ static void get_collision(double *ise,
const long openmp_per_triplets); const long openmp_per_triplets);
static void finalize_ise(double *imag_self_energy, static void finalize_ise(double *imag_self_energy,
const double *ise, const double *ise,
const long *grid_address, const long (*bz_grid_address)[3],
const long (*triplets)[3], const long (*triplets)[3],
const long num_triplets, const long num_triplets,
const long num_temps, const long num_temps,
@ -85,9 +84,7 @@ void ppc_get_pp_collision(double *imag_self_energy,
const long (*triplets)[3], const long (*triplets)[3],
const long num_triplets, const long num_triplets,
const long *triplet_weights, const long *triplet_weights,
const long *grid_address, /* thm */ const ConstBZGrid *bzgrid,
const long *bz_map, /* thm */
const long *mesh, /* thm */
const double *fc3, const double *fc3,
const long is_compact_fc3, const long is_compact_fc3,
const double *shortest_vectors, const double *shortest_vectors,
@ -144,11 +141,9 @@ void ppc_get_pp_collision(double *imag_self_energy,
freqs_at_gp, /* used as f0 */ freqs_at_gp, /* used as f0 */
num_band0, num_band0,
tp_relative_grid_address, tp_relative_grid_address,
mesh,
triplets[i], triplets[i],
1, 1,
(long(*)[3])grid_address, bzgrid,
bz_map,
frequencies, /* used as f1 */ frequencies, /* used as f1 */
num_band, num_band,
frequencies, /* used as f2 */ frequencies, /* used as f2 */
@ -167,8 +162,7 @@ void ppc_get_pp_collision(double *imag_self_energy,
eigenvectors, eigenvectors,
triplets[i], triplets[i],
triplet_weights[i], triplet_weights[i],
grid_address, bzgrid,
mesh,
fc3, fc3,
is_compact_fc3, is_compact_fc3,
shortest_vectors, shortest_vectors,
@ -190,7 +184,7 @@ void ppc_get_pp_collision(double *imag_self_energy,
finalize_ise(imag_self_energy, finalize_ise(imag_self_energy,
ise, ise,
grid_address, bzgrid->addresses,
triplets, triplets,
num_triplets, num_triplets,
num_temps, num_temps,
@ -212,8 +206,7 @@ void ppc_get_pp_collision_with_sigma(
const long (*triplets)[3], const long (*triplets)[3],
const long num_triplets, const long num_triplets,
const long *triplet_weights, const long *triplet_weights,
const long *grid_address, const ConstBZGrid *bzgrid,
const long *mesh,
const double *fc3, const double *fc3,
const long is_compact_fc3, const long is_compact_fc3,
const double *shortest_vectors, const double *shortest_vectors,
@ -289,8 +282,7 @@ void ppc_get_pp_collision_with_sigma(
eigenvectors, eigenvectors,
triplets[i], triplets[i],
triplet_weights[i], triplet_weights[i],
grid_address, bzgrid,
mesh,
fc3, fc3,
is_compact_fc3, is_compact_fc3,
shortest_vectors, shortest_vectors,
@ -312,7 +304,7 @@ void ppc_get_pp_collision_with_sigma(
finalize_ise(imag_self_energy, finalize_ise(imag_self_energy,
ise, ise,
grid_address, bzgrid->addresses,
triplets, triplets,
num_triplets, num_triplets,
num_temps, num_temps,
@ -336,8 +328,7 @@ static void get_collision(double *ise,
const lapack_complex_double *eigenvectors, const lapack_complex_double *eigenvectors,
const long triplet[3], const long triplet[3],
const long triplet_weight, const long triplet_weight,
const long *grid_address, const ConstBZGrid *bzgrid,
const long *mesh,
const double *fc3, const double *fc3,
const long is_compact_fc3, const long is_compact_fc3,
const double *shortest_vectors, const double *shortest_vectors,
@ -381,8 +372,7 @@ static void get_collision(double *ise,
frequencies, frequencies,
eigenvectors, eigenvectors,
triplet, triplet,
grid_address, bzgrid,
mesh,
fc3, fc3,
is_compact_fc3, is_compact_fc3,
shortest_vectors, shortest_vectors,
@ -424,7 +414,7 @@ static void get_collision(double *ise,
static void finalize_ise(double *imag_self_energy, static void finalize_ise(double *imag_self_energy,
const double *ise, const double *ise,
const long *grid_address, const long (*bz_grid_addresses)[3],
const long (*triplets)[3], const long (*triplets)[3],
const long num_triplets, const long num_triplets,
const long num_temps, const long num_temps,
@ -439,7 +429,7 @@ static void finalize_ise(double *imag_self_energy,
imag_self_energy[i] = 0; imag_self_energy[i] = 0;
} }
for (i = 0; i < num_triplets; i++) { for (i = 0; i < num_triplets; i++) {
is_N = tpl_is_N(triplets[i], grid_address); is_N = tpl_is_N(triplets[i], bz_grid_addresses);
for (j = 0; j < num_temps; j++) { for (j = 0; j < num_temps; j++) {
for (k = 0; k < num_band0; k++) { for (k = 0; k < num_band0; k++) {
if (is_N) { if (is_N) {

View File

@ -37,18 +37,17 @@
#include "phonoc_array.h" #include "phonoc_array.h"
#include "phonoc_const.h" #include "phonoc_const.h"
#include "bzgrid.h"
#include "lapack_wrapper.h" #include "lapack_wrapper.h"
void ppc_get_pp_collision(double *imag_self_energy, void ppc_get_pp_collision(double *imag_self_energy,
PHPYCONST long relative_grid_address[24][4][3], PHPYCONST long relative_grid_address[24][4][3], /* thm */
const double *frequencies, const double *frequencies,
const lapack_complex_double *eigenvectors, const lapack_complex_double *eigenvectors,
const long (*triplets)[3], const long (*triplets)[3],
const long num_triplets, const long num_triplets,
const long *triplet_weights, const long *triplet_weights,
const long *grid_address, const ConstBZGrid *bzgrid,
const long *bz_map,
const long *mesh,
const double *fc3, const double *fc3,
const long is_compact_fc3, const long is_compact_fc3,
const double *shortest_vectors, const double *shortest_vectors,
@ -62,7 +61,6 @@ void ppc_get_pp_collision(double *imag_self_energy,
const long is_NU, const long is_NU,
const long symmetrize_fc3_q, const long symmetrize_fc3_q,
const double cutoff_frequency); const double cutoff_frequency);
void ppc_get_pp_collision_with_sigma( void ppc_get_pp_collision_with_sigma(
double *imag_self_energy, double *imag_self_energy,
const double sigma, const double sigma,
@ -72,8 +70,7 @@ void ppc_get_pp_collision_with_sigma(
const long (*triplets)[3], const long (*triplets)[3],
const long num_triplets, const long num_triplets,
const long *triplet_weights, const long *triplet_weights,
const long *grid_address, const ConstBZGrid *bzgrid,
const long *mesh,
const double *fc3, const double *fc3,
const long is_compact_fc3, const long is_compact_fc3,
const double *shortest_vectors, const double *shortest_vectors,

View File

@ -87,11 +87,9 @@ void tpl_get_integration_weight(double *iw,
const double *frequency_points, const double *frequency_points,
const long num_band0, const long num_band0,
LAGCONST long relative_grid_address[24][4][3], LAGCONST long relative_grid_address[24][4][3],
const long mesh[3],
LAGCONST long (*triplets)[3], LAGCONST long (*triplets)[3],
const long num_triplets, const long num_triplets,
LAGCONST long (*bz_grid_address)[3], const ConstBZGrid *bzgrid,
const long *bz_map,
const double *frequencies1, const double *frequencies1,
const long num_band1, const long num_band1,
const double *frequencies2, const double *frequencies2,
@ -115,11 +113,9 @@ void tpl_get_integration_weight(double *iw,
frequency_points, /* f0 */ frequency_points, /* f0 */
num_band0, num_band0,
tp_relative_grid_address, tp_relative_grid_address,
mesh,
triplets[i], triplets[i],
num_triplets, num_triplets,
bz_grid_address, bzgrid,
bz_map,
frequencies1, /* f1 */ frequencies1, /* f1 */
num_band1, num_band1,
frequencies2, /* f2 */ frequencies2, /* f2 */
@ -168,7 +164,7 @@ void tpl_get_integration_weight_with_sigma(double *iw,
} }
long tpl_is_N(const long triplet[3], const long *grid_address) long tpl_is_N(const long triplet[3], const long (*bz_grid_addresses)[3])
{ {
long i, j, sum_q, is_N; long i, j, sum_q, is_N;
@ -176,7 +172,7 @@ long tpl_is_N(const long triplet[3], const long *grid_address)
for (i = 0; i < 3; i++) { for (i = 0; i < 3; i++) {
sum_q = 0; sum_q = 0;
for (j = 0; j < 3; j++) { /* 1st, 2nd, 3rd triplet */ for (j = 0; j < 3; j++) { /* 1st, 2nd, 3rd triplet */
sum_q += grid_address[triplet[j] * 3 + i]; sum_q += bz_grid_addresses[triplet[j]][i];
} }
if (sum_q) { if (sum_q) {
is_N = 0; is_N = 0;

View File

@ -71,11 +71,9 @@ void tpl_get_integration_weight(double *iw,
const double *frequency_points, const double *frequency_points,
const long num_band0, const long num_band0,
LAGCONST long relative_grid_address[24][4][3], LAGCONST long relative_grid_address[24][4][3],
const long mesh[3],
LAGCONST long (*triplets)[3], LAGCONST long (*triplets)[3],
const long num_triplets, const long num_triplets,
LAGCONST long (*bz_grid_address)[3], const ConstBZGrid *bzgrid,
const long *bz_map,
const double *frequencies1, const double *frequencies1,
const long num_band1, const long num_band1,
const double *frequencies2, const double *frequencies2,
@ -95,7 +93,7 @@ void tpl_get_integration_weight_with_sigma(double *iw,
const long num_band, const long num_band,
const long tp_type); const long tp_type);
long tpl_is_N(const long triplet[3], const long *grid_address); long tpl_is_N(const long triplet[3], const long (*bz_grid_addresses)[3]);
void tpl_set_relative_grid_address( void tpl_set_relative_grid_address(
long tp_relative_grid_address[2][24][4][3], long tp_relative_grid_address[2][24][4][3],
LAGCONST long relative_grid_address[24][4][3], LAGCONST long relative_grid_address[24][4][3],

View File

@ -57,10 +57,8 @@ static long in_tetrahedra(const double f0, LAGCONST double freq_vertices[24][4])
static void get_triplet_tetrahedra_vertices( static void get_triplet_tetrahedra_vertices(
long vertices[2][24][4], long vertices[2][24][4],
LAGCONST long tp_relative_grid_address[2][24][4][3], LAGCONST long tp_relative_grid_address[2][24][4][3],
const long mesh[3],
const long triplet[3], const long triplet[3],
LAGCONST long (*bz_grid_address)[3], const ConstBZGrid *bzgrid);
const long *bz_map);
void void
tpi_get_integration_weight(double *iw, tpi_get_integration_weight(double *iw,
@ -68,11 +66,9 @@ tpi_get_integration_weight(double *iw,
const double *frequency_points, const double *frequency_points,
const long num_band0, const long num_band0,
LAGCONST long tp_relative_grid_address[2][24][4][3], LAGCONST long tp_relative_grid_address[2][24][4][3],
const long mesh[3],
const long triplets[3], const long triplets[3],
const long num_triplets, const long num_triplets,
LAGCONST long (*bz_grid_address)[3], const ConstBZGrid *bzgrid,
const long *bz_map,
const double *frequencies1, const double *frequencies1,
const long num_band1, const long num_band1,
const double *frequencies2, const double *frequencies2,
@ -87,10 +83,8 @@ tpi_get_integration_weight(double *iw,
get_triplet_tetrahedra_vertices(vertices, get_triplet_tetrahedra_vertices(vertices,
tp_relative_grid_address, tp_relative_grid_address,
mesh,
triplets, triplets,
bz_grid_address, bzgrid);
bz_map);
num_band_prod = num_triplets * num_band0 * num_band1 * num_band2; num_band_prod = num_triplets * num_band0 * num_band1 * num_band2;
@ -214,29 +208,28 @@ tpi_get_neighboring_grid_points(long neighboring_grid_points[],
const long grid_point, const long grid_point,
LAGCONST long relative_grid_address[][3], LAGCONST long relative_grid_address[][3],
const long num_relative_grid_address, const long num_relative_grid_address,
const long mesh[3], const ConstBZGrid *bzgrid)
LAGCONST long bz_grid_address[][3],
const long bz_map[])
{ {
long bzmesh[3], address_double[3], bz_address_double[3], PS[3]; long bzmesh[3], address_double[3], bz_address_double[3], PS[3];
long i, j, bz_gp, prod_bz_mesh; long i, j, bz_gp, prod_bz_mesh;
prod_bz_mesh = 1; prod_bz_mesh = 1;
for (i = 0; i < 3; i++) { for (i = 0; i < 3; i++) {
bzmesh[i] = mesh[i] * 2; bzmesh[i] = bzgrid->D_diag[i] * 2;
prod_bz_mesh *= bzmesh[i]; prod_bz_mesh *= bzmesh[i];
PS[i] = 0; PS[i] = 0;
} }
for (i = 0; i < num_relative_grid_address; i++) { for (i = 0; i < num_relative_grid_address; i++) {
for (j = 0; j < 3; j++) { for (j = 0; j < 3; j++) {
address_double[j] = (bz_grid_address[grid_point][j] + address_double[j] = (bzgrid->addresses[grid_point][j] +
relative_grid_address[i][j]) * 2; relative_grid_address[i][j]) * 2;
bz_address_double[j] = address_double[j]; bz_address_double[j] = address_double[j];
} }
bz_gp = bz_map[grg_get_double_grid_index(bz_address_double, bzmesh, PS)]; bz_gp = bzgrid->gp_map[
grg_get_double_grid_index(bz_address_double, bzmesh, PS)];
if (bz_gp == prod_bz_mesh) { if (bz_gp == prod_bz_mesh) {
neighboring_grid_points[i] = neighboring_grid_points[i] =
grg_get_double_grid_index(address_double, mesh, PS); grg_get_double_grid_index(address_double, bzgrid->D_diag, PS);
} else { } else {
neighboring_grid_points[i] = bz_gp; neighboring_grid_points[i] = bz_gp;
} }
@ -332,10 +325,8 @@ static long in_tetrahedra(const double f0, LAGCONST double freq_vertices[24][4])
static void get_triplet_tetrahedra_vertices( static void get_triplet_tetrahedra_vertices(
long vertices[2][24][4], long vertices[2][24][4],
LAGCONST long tp_relative_grid_address[2][24][4][3], LAGCONST long tp_relative_grid_address[2][24][4][3],
const long mesh[3],
const long triplet[3], const long triplet[3],
LAGCONST long (*bz_grid_address)[3], const ConstBZGrid *bzgrid)
const long *bz_map)
{ {
long i, j; long i, j;
@ -345,9 +336,7 @@ static void get_triplet_tetrahedra_vertices(
triplet[i + 1], triplet[i + 1],
tp_relative_grid_address[i][j], tp_relative_grid_address[i][j],
4, 4,
mesh, bzgrid);
bz_grid_address,
bz_map);
} }
} }
} }

View File

@ -43,11 +43,9 @@ tpi_get_integration_weight(double *iw,
const double *frequency_points, const double *frequency_points,
const long num_band0, const long num_band0,
LAGCONST long tp_relative_grid_address[2][24][4][3], LAGCONST long tp_relative_grid_address[2][24][4][3],
const long mesh[3],
const long triplets[3], const long triplets[3],
const long num_triplets, const long num_triplets,
LAGCONST long (*bz_grid_address)[3], const ConstBZGrid *bzgrid,
const long *bz_map,
const double *frequencies1, const double *frequencies1,
const long num_band1, const long num_band1,
const double *frequencies2, const double *frequencies2,
@ -71,8 +69,6 @@ tpi_get_neighboring_grid_points(long neighboring_grid_points[],
const long grid_point, const long grid_point,
LAGCONST long relative_grid_address[][3], LAGCONST long relative_grid_address[][3],
const long num_relative_grid_address, const long num_relative_grid_address,
const long mesh[3], const ConstBZGrid *bzgrid);
LAGCONST long bz_grid_address[][3],
const long bz_map[]);
#endif #endif

View File

@ -247,7 +247,8 @@ class Isotope(object):
unique_vertices, unique_vertices,
self._mesh, self._mesh,
self._bz_grid.addresses, self._bz_grid.addresses,
self._bz_grid.gp_map) self._bz_grid.gp_map,
self._bz_grid.is_dense_gp_map * 1 + 1)
unique_grid_points = np.array(np.unique(neighboring_grid_points), unique_grid_points = np.array(np.unique(neighboring_grid_points),
dtype='int_') dtype='int_')
self._run_phonon_solver_c(unique_grid_points) self._run_phonon_solver_c(unique_grid_points)
@ -262,7 +263,8 @@ class Isotope(object):
self._grid_points, self._grid_points,
self._frequencies, self._frequencies,
self._bz_grid.addresses, self._bz_grid.addresses,
self._bz_grid.gp_map) self._bz_grid.gp_map,
self._bz_grid.is_dense_gp_map * 1 + 1)
def _set_integration_weights_py(self, thm): def _set_integration_weights_py(self, thm):
for i, gp in enumerate(self._grid_points): for i, gp in enumerate(self._grid_points):

View File

@ -816,6 +816,7 @@ class Conductivity_RTA(Conductivity):
weights_at_q, weights_at_q,
self._bz_grid.addresses, self._bz_grid.addresses,
self._bz_grid.gp_map, self._bz_grid.gp_map,
self._bz_grid.is_dense_gp_map * 1 + 1,
self._mesh, self._mesh,
fc3, fc3,
svecs, svecs,

View File

@ -702,7 +702,8 @@ def _set_triplets_integration_weights_c(g,
np.array(j * unique_vertices, dtype='int_', order='C'), np.array(j * unique_vertices, dtype='int_', order='C'),
mesh, mesh,
pp.bz_grid.addresses, pp.bz_grid.addresses,
pp.bz_grid.gp_map) pp.bz_grid.gp_map,
pp.bz_grid.is_dense_gp_map * 1 + 1)
pp.run_phonon_solver( pp.run_phonon_solver(
np.array(np.unique(neighboring_grid_points), dtype='int_')) np.array(np.unique(neighboring_grid_points), dtype='int_'))
@ -718,6 +719,7 @@ def _set_triplets_integration_weights_c(g,
frequencies, # f2 frequencies, # f2
pp.bz_grid.addresses, pp.bz_grid.addresses,
pp.bz_grid.gp_map, pp.bz_grid.gp_map,
pp.bz_grid.is_dense_gp_map * 1 + 1,
g.shape[0]) g.shape[0])