OSDN Git Service

Fixed conflict
[eos/hostdependX86LINUX64.git] / include / Crystal.h
1 #ifndef CRYSTAL_H
2 #define CRYSTAL_H
3
4 #include <stdio.h>
5
6 /* struct begin */
7
8 typedef enum CrystalSpaceGroup {
9         CrystalSpaceGroupP1=0,
10         CrystalSpaceGroupHelical=1
11 } CrystalSpaceGroup;
12
13 #ifdef __CRYSTALINIT__ 
14 char* CrystalSpaceGroupString[] = {
15         "P1",
16         "HelicalSymmmetry",
17         NULL    
18 };
19 #else
20 extern char* CrystalSpaceGroupString[];
21 #endif
22
23 typedef float CrystalParaTypeReal;
24 typedef int   CrystalParaTypeInteger;
25
26 typedef struct CrystalParaTypeRealCoord {
27         CrystalParaTypeReal x;
28         CrystalParaTypeReal y;
29         CrystalParaTypeReal z;
30 } CrystalParaTypeRealCoord;
31
32 typedef struct CrystalParaTypeIntegerCoord {
33         CrystalParaTypeInteger x;
34         CrystalParaTypeInteger y;
35         CrystalParaTypeInteger z;
36 } CrystalParaTypeIntegerCoord;
37
38 typedef struct CrystalParaTypeRealAxis {
39         CrystalParaTypeReal a;
40         CrystalParaTypeReal b;
41         CrystalParaTypeReal c;
42 } CrystalParaTypeRealAxis;
43
44 typedef struct CrystalParaTypeIntegerAxis {
45         CrystalParaTypeInteger a;
46         CrystalParaTypeInteger b;
47         CrystalParaTypeInteger c;
48 } CrystalParaTypeIntegerAxis;
49
50 typedef struct HelicalSymmetryInfo {
51         CrystalParaTypeInteger t;         /* Turn */
52         CrystalParaTypeInteger u;         /* Unit */ 
53         CrystalParaTypeInteger n;         /* n-strands */
54
55         /* 
56                 Don't change the below variables directly,
57                 bacause the variables can be calculated by the upper's.
58         */
59         CrystalParaTypeReal    dz;     /* dz     = TruePitch/unit */
60         CrystalParaTypeReal    dphi;   /* dphi   = 2*PI*turn/unit */
61 } HelicalSymmetryInfo;
62
63 typedef struct CrystalInfo {
64         CrystalParaTypeRealCoord    aAxis;    /* Unit Cell Vector : a-axis : Length = 1 */
65         CrystalParaTypeRealCoord    bAxis;    /* Unit Cell Vector : b-axis : Length = 1 */
66         CrystalParaTypeRealCoord    cAxis;    /* Unit Cell Vector : c-axis : Length = 1 */
67         CrystalParaTypeRealAxis     CellLength;    /* Unit Cell Size   a, b, c-axis [A] */
68         CrystalParaTypeRealCoord    Origin;        /* Unit Cell Origin [A] */
69         CrystalParaTypeIntegerAxis  N;             /* Number of Unit Cells a, b, c-axis */
70         CrystalParaTypeIntegerAxis  StartN;        /* Start  of Unit Cells a, b, c-axis */
71         CrystalSpaceGroup           SpaceGroup;
72         
73         /* Information for Special Symmetry */
74         HelicalSymmetryInfo HelixInfo;
75                 /* For HelicalSymmetry : 
76                         The filament axis (z-axis) is treated as the c-axis. 
77                         The azimuthal axis (phi-axis) is treated as the b-axis. 
78                         The radius axis (r-axis) is treated as the a-axis.
79                 */
80 } CrystalInfo;
81
82 /* struct end */
83
84 /* prototype begin */
85 extern void crystalInit(CrystalInfo* crystal);
86
87 extern void crystalSpaceGroupPrint(FILE* fpt, int mode);
88
89 extern void crystalInfoRead(FILE* fpt, CrystalInfo* linfo, int mode);
90 extern void crystalInfoWrite(FILE* fpt, CrystalInfo* linfo, int mode);
91 extern void crystalInfoFileFormat(FILE* fpt, int mode);
92
93 extern void crystalCellLengthSet(CrystalInfo* C, char axis, CrystalParaTypeReal length, int mode);
94 extern void crystalAxisSet(CrystalInfo* C, char axis, CrystalParaTypeReal x, CrystalParaTypeReal y, CrystalParaTypeReal z, int mode);
95 extern void crystalCellLengthSetUsingAxis(CrystalInfo* C, char axis, int mode);
96 extern void crystalAxisSetUsingCellLength(CrystalInfo* C, char axis, int mode);
97
98 /* prototype end */
99
100 #endif /* CRYSTAL_H */