Esempio n. 1
0
Spacegroup spa_get_spacegroup( SPGCONST Cell * cell,
			       const double symprec )
{
  Cell *primitive;
  int *mapping_table;
  Spacegroup spacegroup;
  VecDBL *pure_trans;
  double tolerance;

  pure_trans = sym_get_pure_translation( cell, symprec );
  mapping_table = (int*) malloc( sizeof(int) * cell->size );
  primitive = prm_get_primitive( mapping_table, cell, pure_trans, symprec );
  free( mapping_table );
  mapping_table = NULL;
  /* In some case, tolerance (symprec) to find primitive lattice is reduced. */
  /* The reduced tolerance should be used to find symmetry operations. */
  tolerance = prm_get_tolerance();
  
  if ( primitive->size > -1 ) {
    spacegroup = get_spacegroup( primitive, tolerance );
  } else {
    spacegroup.number = 0;
    warning_print("spglib: Space group could not be found ");
    warning_print("(line %d, %s).\n", __LINE__, __FILE__);
  }
  cel_free_cell( primitive );

  return spacegroup;
}
Esempio n. 2
0
Spacegroup spa_get_spacegroup( SPGCONST Cell * cell,
			       const double symprec )
{
  Cell *primitive;
  int *mapping_table;
  Spacegroup spacegroup;
  VecDBL *pure_trans;

  pure_trans = sym_get_pure_translation( cell, symprec );
  mapping_table = (int*) malloc( sizeof(int) * cell->size );
  primitive = prm_get_primitive( mapping_table, cell, pure_trans, symprec );
  free( mapping_table );
  mapping_table = NULL;
  
  if ( primitive->size > 0 ) {
    spacegroup = get_spacegroup( primitive, symprec );
  } else {
    spacegroup.number = 0;
    warning_print("spglib: Space group could not be found ");
    warning_print("(line %d, %s).\n", __LINE__, __FILE__);
  }
  cel_free_cell( primitive );

  return spacegroup;
}
Esempio n. 3
0
Spacegroup spa_get_spacegroup_with_primitive(SPGCONST Cell * primitive,
        const double symprec)
{
    Spacegroup spacegroup;

    if (primitive->size > 0) {
        spacegroup = get_spacegroup(primitive, symprec);
    } else {
        spacegroup.number = 0;
        warning_print("spglib: Space group could not be found ");
        warning_print("(line %d, %s).\n", __LINE__, __FILE__);
    }
    return spacegroup;
}
Esempio n. 4
0
/* Return spacegroup.number = 0 if failed */
static Spacegroup search_spacegroup(SPGCONST Cell * primitive,
				    const int candidates[],
				    const int num_candidates,
				    const double symprec)
{
  int hall_number;
  double conv_lattice[3][3];
  double origin_shift[3];
  Spacegroup spacegroup;
  Symmetry *symmetry;
  PointSymmetry pointsym;

  debug_print("search_spacegroup (tolerance = %f):\n", symprec);

  symmetry = NULL;
  hall_number = 0;
  spacegroup.number = 0;

  if ((symmetry = sym_get_operation(primitive, symprec)) == NULL) {
    goto ret;
  }

  pointsym = ptg_get_pointsymmetry(symmetry->rot, symmetry->size);
  if (pointsym.size < symmetry->size) {
    warning_print("spglib: Point symmetry of primitive cell is broken. ");
    warning_print("(line %d, %s).\n", __LINE__, __FILE__);
    sym_free_symmetry(symmetry);
    symmetry = NULL;
    goto ret;
  }

  hall_number = iterative_search_hall_number(origin_shift,
					     conv_lattice,
					     candidates,
					     num_candidates,
					     primitive,
					     symmetry,
					     symprec);
  sym_free_symmetry(symmetry);
  symmetry = NULL;
  spacegroup = get_spacegroup(hall_number, origin_shift, conv_lattice);

 ret:
  return spacegroup;
}
Esempio n. 5
0
Spacegroup spa_get_spacegroup(SPGCONST Cell * cell,
                              const double symprec)
{
    double tolerance;
    Cell *primitive;
    Spacegroup spacegroup;

    primitive = prm_get_primitive(cell, symprec);
    tolerance = prm_get_current_tolerance();

    if (primitive->size > 0) {
        spacegroup = get_spacegroup(primitive, tolerance);
    } else {
        spacegroup.number = 0;
        warning_print("spglib: Space group could not be found ");
        warning_print("(line %d, %s).\n", __LINE__, __FILE__);
    }
    cel_free_cell(primitive);

    return spacegroup;
}