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; }
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; }
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; }
/* 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; }
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; }