static PyObject * py_set_phonons_grid_points(PyObject *self, PyObject *args) { PyArrayObject* frequencies; PyArrayObject* eigenvectors; PyArrayObject* phonon_done_py; PyArrayObject* grid_points_py; PyArrayObject* grid_address_py; PyArrayObject* mesh_py; PyArrayObject* shortest_vectors_fc2; PyArrayObject* multiplicity_fc2; PyArrayObject* fc2_py; PyArrayObject* atomic_masses_fc2; PyArrayObject* p2s_map_fc2; PyArrayObject* s2p_map_fc2; PyArrayObject* reciprocal_lattice; PyArrayObject* born_effective_charge; PyArrayObject* q_direction; PyArrayObject* dielectric_constant; double nac_factor, unit_conversion_factor; char uplo; if (!PyArg_ParseTuple(args, "OOOOOOOOOOOOdOOOOdc", &frequencies, &eigenvectors, &phonon_done_py, &grid_points_py, &grid_address_py, &mesh_py, &fc2_py, &shortest_vectors_fc2, &multiplicity_fc2, &atomic_masses_fc2, &p2s_map_fc2, &s2p_map_fc2, &unit_conversion_factor, &born_effective_charge, &dielectric_constant, &reciprocal_lattice, &q_direction, &nac_factor, &uplo)) { return NULL; } double* born; double* dielectric; double *q_dir; Darray* freqs = convert_to_darray(frequencies); /* npy_cdouble and lapack_complex_double may not be compatible. */ /* So eigenvectors should not be used in Python side */ Carray* eigvecs = convert_to_carray(eigenvectors); char* phonon_done = (char*)phonon_done_py->data; Iarray* grid_points = convert_to_iarray(grid_points_py); const int* grid_address = (int*)grid_address_py->data; const int* mesh = (int*)mesh_py->data; Darray* fc2 = convert_to_darray(fc2_py); Darray* svecs_fc2 = convert_to_darray(shortest_vectors_fc2); Iarray* multi_fc2 = convert_to_iarray(multiplicity_fc2); const double* masses_fc2 = (double*)atomic_masses_fc2->data; const int* p2s_fc2 = (int*)p2s_map_fc2->data; const int* s2p_fc2 = (int*)s2p_map_fc2->data; const double* rec_lat = (double*)reciprocal_lattice->data; if ((PyObject*)born_effective_charge == Py_None) { born = NULL; } else { born = (double*)born_effective_charge->data; } if ((PyObject*)dielectric_constant == Py_None) { dielectric = NULL; } else { dielectric = (double*)dielectric_constant->data; } if ((PyObject*)q_direction == Py_None) { q_dir = NULL; } else { q_dir = (double*)q_direction->data; } set_phonons_for_frequency_shift(freqs, eigvecs, phonon_done, grid_points, grid_address, mesh, fc2, svecs_fc2, multi_fc2, masses_fc2, p2s_fc2, s2p_fc2, unit_conversion_factor, born, dielectric, rec_lat, q_dir, nac_factor, uplo); free(freqs); free(eigvecs); free(grid_points); free(fc2); free(svecs_fc2); free(multi_fc2); Py_RETURN_NONE; }
static PyObject * py_get_interaction(PyObject *self, PyObject *args) { PyArrayObject* fc3_normal_squared_py; PyArrayObject* frequencies; PyArrayObject* eigenvectors; PyArrayObject* grid_point_triplets; PyArrayObject* grid_address_py; PyArrayObject* mesh_py; PyArrayObject* shortest_vectors; PyArrayObject* multiplicity; PyArrayObject* fc3_py; PyArrayObject* atomic_masses; PyArrayObject* p2s_map; PyArrayObject* s2p_map; PyArrayObject* band_indicies_py; double cutoff_frequency; int symmetrize_fc3_q; if (!PyArg_ParseTuple(args, "OOOOOOOOOOOOOid", &fc3_normal_squared_py, &frequencies, &eigenvectors, &grid_point_triplets, &grid_address_py, &mesh_py, &fc3_py, &shortest_vectors, &multiplicity, &atomic_masses, &p2s_map, &s2p_map, &band_indicies_py, &symmetrize_fc3_q, &cutoff_frequency)) { return NULL; } Darray* fc3_normal_squared = convert_to_darray(fc3_normal_squared_py); Darray* freqs = convert_to_darray(frequencies); /* npy_cdouble and lapack_complex_double may not be compatible. */ /* So eigenvectors should not be used in Python side */ Carray* eigvecs = convert_to_carray(eigenvectors); Iarray* triplets = convert_to_iarray(grid_point_triplets); const int* grid_address = (int*)grid_address_py->data; const int* mesh = (int*)mesh_py->data; Darray* fc3 = convert_to_darray(fc3_py); Darray* svecs = convert_to_darray(shortest_vectors); Iarray* multi = convert_to_iarray(multiplicity); const double* masses = (double*)atomic_masses->data; const int* p2s = (int*)p2s_map->data; const int* s2p = (int*)s2p_map->data; const int* band_indicies = (int*)band_indicies_py->data; get_interaction(fc3_normal_squared, freqs, eigvecs, triplets, grid_address, mesh, fc3, svecs, multi, masses, p2s, s2p, band_indicies, symmetrize_fc3_q, cutoff_frequency); free(fc3_normal_squared); free(freqs); free(eigvecs); free(triplets); free(fc3); free(svecs); free(multi); Py_RETURN_NONE; }