Example #1
0
static PyObject * get_triplets_reciprocal_mesh_at_q(PyObject *self, PyObject *args)
{
  PyArrayObject* map_triplets;
  PyArrayObject* grid_address_py;
  PyArrayObject* map_q;
  int fixed_grid_number;
  PyArrayObject* mesh;
  int is_time_reversal;
  PyArrayObject* rotations;
  if (!PyArg_ParseTuple(args, "OOOiOiO",
			&map_triplets,
			&map_q,
			&grid_address_py,
			&fixed_grid_number,
			&mesh,
			&is_time_reversal,
			&rotations)) {
    return NULL;
  }

  int (*grid_address)[3] = (int(*)[3])grid_address_py->data;
  int *map_triplets_int = (int*)map_triplets->data;
  int *map_q_int = (int*)map_q->data;

  const int* mesh_int = (int*)mesh->data;
  SPGCONST int (*rot)[3][3] = (int(*)[3][3])rotations->data;
  const int num_rot = rotations->dimensions[0];
  const int num_ir = 
    spg_get_triplets_reciprocal_mesh_at_q(map_triplets_int,
					  map_q_int,
					  grid_address,
					  fixed_grid_number,
					  mesh_int,
					  is_time_reversal,
					  num_rot,
					  rot);

  return PyInt_FromLong((long) num_ir);
}
Example #2
0
static PyObject * get_triplets_reciprocal_mesh_at_q(PyObject *self, PyObject *args)
{
  PyArrayObject* weights;
  PyArrayObject* grid_points;
  PyArrayObject* third_q;
  int fixed_grid_number;
  PyArrayObject* mesh;
  int is_time_reversal;
  PyArrayObject* rotations;
  if (!PyArg_ParseTuple(args, "OOOiOiO",
			&weights,
			&grid_points,
			&third_q,
			&fixed_grid_number,
			&mesh,
			&is_time_reversal,
			&rotations)) {
    return NULL;
  }

  int i, j, k;

  const int num_grid = grid_points->dimensions[0];
  long *grid_points_long = (long*)grid_points->data;
  int grid_points_int[num_grid][3];
  long *weights_long = (long*)weights->data;
  int weights_int[num_grid];
  long *third_q_long = (long*)third_q->data;
  int third_q_int[num_grid];

  int mesh_int[3];
  const long* mesh_long = (long*)mesh->data;
  for (i = 0; i < 3; i++) {
    mesh_int[i] = (int) mesh_long[i];
  }  

  const long* rot_long = (long*)rotations->data;
  const int num_rot = rotations->dimensions[0];
  int rot[num_rot][3][3];
  for (i = 0; i < num_rot; i++) {
    for (j = 0; j < 3; j++) {
      for (k = 0; k < 3; k++) {
	rot[i][j][k] = (int) rot_long[ i*9 + j*3 + k ];
      }
    }
  }

  const int num_ir = 
    spg_get_triplets_reciprocal_mesh_at_q(weights_int,
					  grid_points_int,
					  third_q_int,
					  fixed_grid_number,
					  mesh_int,
					  is_time_reversal,
					  num_rot,
					  rot);

  for (i = 0; i < num_grid; i++) {
    weights_long[i] = (long) weights_int[i];
    third_q_long[i] = (long) third_q_int[i];
    for (j = 0; j < 3; j++) {
      grid_points_long[ i*3 + j ] = (long) grid_points_int[i][j];
    }
  }
  
  return PyInt_FromLong((long) num_ir);
}