Select Git revision
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
arithmetic.c 4.68 KiB
/* Copyright (C) 2016 Atsushi Togo */
/* All rights reserved. */
/* This file is part of spglib. */
/* Redistribution and use in source and binary forms, with or without */
/* modification, are permitted provided that the following conditions */
/* are met: */
/* * Redistributions of source code must retain the above copyright */
/* notice, this list of conditions and the following disclaimer. */
/* * Redistributions in binary form must reproduce the above copyright */
/* notice, this list of conditions and the following disclaimer in */
/* the documentation and/or other materials provided with the */
/* distribution. */
/* * Neither the name of the phonopy project nor the names of its */
/* contributors may be used to endorse or promote products derived */
/* from this software without specific prior written permission. */
/* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS */
/* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT */
/* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS */
/* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE */
/* COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, */
/* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, */
/* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; */
/* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER */
/* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT */
/* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN */
/* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE */
/* POSSIBILITY OF SUCH DAMAGE. */
#include <string.h>
#include <stdio.h>
#include "arithmetic.h"
#include "debug.h"
static int arithmetic_crystal_classes[231] = {
0,
1, 2, 3, 3, 4, 5, 5, 6, 6, 7,
7, 8, 7, 7, 8, 9, 9, 9, 9, 10,
10, 11, 12, 12, 13, 13, 13, 13, 13, 13,
13, 13, 13, 13, 14, 14, 14, 15, 15, 15,
15, 16, 16, 17, 17, 17, 18, 18, 18, 18,
18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
18, 18, 19, 19, 19, 19, 19, 19, 20, 20,
21, 21, 21, 21, 22, 22, 22, 22, 23, 23,
24, 25, 26, 26, 26, 26, 27, 27, 28, 28,
28, 28, 28, 28, 28, 28, 29, 29, 30, 30,
30, 30, 30, 30, 30, 30, 31, 31, 31, 31,
32, 32, 32, 32, 33, 33, 33, 33, 34, 34,
35, 35, 36, 36, 36, 36, 36, 36, 36, 36,
36, 36, 36, 36, 36, 36, 36, 36, 37, 37,
37, 37, 38, 38, 38, 39, 40, 41, 42, 43,
42, 43, 42, 43, 44, 45, 46, 45, 46, 47,
47, 48, 48, 49, 49, 50, 50, 51, 51, 51,
51, 51, 51, 52, 53, 53, 54, 54, 54, 54,
54, 54, 55, 55, 55, 55, 56, 56, 57, 57,
58, 58, 58, 58, 59, 60, 61, 59, 61, 62,
62, 63, 63, 64, 62, 64, 65, 65, 66, 66,
67, 65, 65, 67, 68, 69, 70, 68, 69, 70,
71, 71, 71, 71, 72, 72, 72, 72, 73, 73};
static const char arithmetic_crystal_class_symbols[74][7] = {
" ", /* 0 */
"1P ", /* 1 */
"-1P ", /* 2 */
"2P ", /* 3 */
"2C ", /* 4 */
"mP ", /* 5 */
"mC ", /* 6 */
"2/mP ", /* 7 */
"2/mC ", /* 8 */
"222P ", /* 9 */
"222C ", /* 10 */
"222F ", /* 11 */
"222I ", /* 12 */
"mm2P ", /* 13 */
"mm2C ", /* 14 */
"2mmC ", /* 15 */
"mm2F ", /* 16 */
"mm2I ", /* 17 */
"mmmP ", /* 18 */
"mmmC ", /* 19 */
"mmmF ", /* 20 */
"mmmI ", /* 21 */
"4P ", /* 22 */
"4I ", /* 23 */
"-4P ", /* 24 */
"-4I ", /* 25 */
"4/mP ", /* 26 */
"4/mI ", /* 27 */
"422P ", /* 28 */
"422I ", /* 29 */
"4mmP ", /* 30 */
"4mmI ", /* 31 */
"-42mP ", /* 32 */
"-4m2P ", /* 33 */
"-4m2I ", /* 34 */
"-42mI ", /* 35 */
"4/mmmP", /* 36 */
"4/mmmI", /* 37 */
"3P ", /* 38 */
"3R ", /* 39 */
"-3P ", /* 40 */
"-3R ", /* 41 */
"312P ", /* 42 */
"321P ", /* 43 */
"32R ", /* 44 */
"3m1P ", /* 45 */
"31mP ", /* 46 */
"3mR ", /* 47 */
"-31mP ", /* 48 */
"-3m1P ", /* 49 */
"-3mR ", /* 50 */
"6P ", /* 51 */
"-6P ", /* 52 */
"6/mP ", /* 53 */
"622P ", /* 54 */
"6mmP ", /* 55 */
"-62mP ", /* 56 */
"-6m2P ", /* 57 */
"6/mmm ", /* 58 */
"23P ", /* 59 */
"23F ", /* 60 */
"23I ", /* 61 */
"m-3P ", /* 62 */
"m-3F ", /* 63 */
"m-3I ", /* 64 */
"432P ", /* 65 */
"432F ", /* 66 */
"432I ", /* 67 */
"-43mP ", /* 68 */
"-43mF ", /* 69 */
"-43mI ", /* 70 */
"m-3mP ", /* 71 */
"m-3mF ", /* 72 */
"m-3mI " /* 73 */
};
int arth_get_symbol(char symbol[7], const int spgroup_number)
{
int i, arth_number;
if (spgroup_number < 1 || spgroup_number > 230) {
return 0;
}
arth_number = arithmetic_crystal_classes[spgroup_number];
strcpy(symbol, arithmetic_crystal_class_symbols[arth_number]);
for (i = 0; i < 6; i++) {
if (symbol[i] == ' ') {symbol[i] = '\0';}
}
return arth_number;
}