added del_atom function
[physik/posic.git] / visual / visual.c
1 /*
2  * visual.c - visualization functions
3  *
4  * author: Frank Zirkelbach <frank.zirkelbach@physik.uni-augsburg.de>
5  *
6  */
7
8 #define _GNU_SOURCE
9 #include <stdio.h>
10 #include <sys/types.h>
11 #include <sys/stat.h>
12 #include <fcntl.h>
13 #include <unistd.h>
14 #include <string.h>
15
16 #include "visual.h"
17 #include "../moldyn.h"
18 #include "../math/math.h"
19
20 /* the pse, only needed here */
21 static char *pse_name[]={
22         "*",
23         "H",
24         "He",
25         "Li",
26         "Be",
27         "B",
28         "C",
29         "N",
30         "O",
31         "F",
32         "Ne",
33         "Na",
34         "Mg",
35         "Al",
36         "Si",
37         "P",
38         "S",
39         "Cl",
40         "Ar",
41 };
42
43 static char *pse_col[]={
44         "*",
45         "White",
46         "He",
47         "Li",
48         "Be",
49         "B",
50         "Gray",
51         "N",
52         "Blue",
53         "F",
54         "Ne",
55         "Na",
56         "Mg",
57         "Al",
58         "Yellow",
59         "P",
60         "S",
61         "Cl",
62         "Ar",
63 };
64
65 int visual_init(t_visual *v,char *filebase) {
66
67         char file[128+8];
68
69         strncpy(v->fb,filebase,128);
70         memset(file,0,128+8);
71         //sprintf(file,"%s/visualize.scr",v->fb); // obsolete!
72
73         /* obsolete!
74         v->fd=open(file,O_WRONLY|O_CREAT|O_EXCL,S_IRUSR|S_IWUSR);
75         if(v->fd<0) {
76                 perror("open visual fd");
77                 return -1;
78         }
79         dprintf(v->fd,"set write on\n");
80         */
81
82         return 0;
83 }
84
85 int visual_tini(t_visual *v) {
86
87         /* obsolete!
88         if(v->fd) {
89                 dprintf(v->fd,"quit\n");
90                 close(v->fd);
91         }
92         */
93
94         return 0;
95 }
96
97 int visual_atoms(t_visual *v,double time,t_atom *atom,int n) {
98
99         int i,fd;
100         char file[128+64];
101         t_3dvec dim;
102         double help;
103
104         dim.x=v->dim.x;
105         dim.y=v->dim.y;
106         dim.z=v->dim.z;
107
108         help=(dim.x+dim.y);
109
110         sprintf(file,"%s/atomic_conf_%07.f.xyz",v->fb,time);
111         fd=open(file,O_WRONLY|O_CREAT|O_TRUNC,S_IRUSR|S_IWUSR);
112         if(fd<0) {
113                 perror("open visual save file fd");
114                 return -1;
115         }
116
117         /* script file update */
118         /* obsolete!
119         dprintf(v->fd,"load xyz %s\n",file);
120         dprintf(v->fd,"spacefill 200\n");
121         dprintf(v->fd,"rotate x 100\n");
122         dprintf(v->fd,"rotate y 10\n");
123         dprintf(v->fd,"set ambient 20\n");
124         dprintf(v->fd,"set specular on\n");
125         dprintf(v->fd,"set boundbox on\n");
126         //dprintf(v->fd,"label\n");
127         sprintf(file,"%s/visualize_%07.f.ppm",v->fb,time);
128         dprintf(v->fd,"write ppm %s\n",file);
129         dprintf(v->fd,"zap\n");
130         */
131
132         /* write the actual data file */
133         //dprintf(fd,"%d\n",(dim.x==0)?n:n+8);
134         dprintf(fd,"# [P] %d %07.f <%f,%f,%f>\n",
135                 n,time,help/40.0,help/40.0,-0.8*help);
136         for(i=0;i<n;i++)
137                 dprintf(fd,"%s %f %f %f %s %f\n",pse_name[atom[i].element],
138                                                  atom[i].r.x,
139                                                  atom[i].r.y,
140                                                  atom[i].r.z,
141                                                  pse_col[atom[i].element],
142                                                  atom[i].ekin);
143         if(dim.x) {
144                 dprintf(fd,"# [D] %f %f %f %f %f %f\n",
145                         -dim.x/2,-dim.y/2,-dim.z/2,
146                         dim.x/2,-dim.y/2,-dim.z/2);
147                 dprintf(fd,"# [D] %f %f %f %f %f %f\n",
148                         -dim.x/2,-dim.y/2,-dim.z/2,
149                         -dim.x/2,dim.y/2,-dim.z/2);
150                 dprintf(fd,"# [D] %f %f %f %f %f %f\n",
151                         dim.x/2,dim.y/2,-dim.z/2,
152                         dim.x/2,-dim.y/2,-dim.z/2);
153                 dprintf(fd,"# [D] %f %f %f %f %f %f\n",
154                         -dim.x/2,dim.y/2,-dim.z/2,
155                         dim.x/2,dim.y/2,-dim.z/2);
156
157                 dprintf(fd,"# [D] %f %f %f %f %f %f\n",
158                         -dim.x/2,-dim.y/2,dim.z/2,
159                         dim.x/2,-dim.y/2,dim.z/2);
160                 dprintf(fd,"# [D] %f %f %f %f %f %f\n",
161                         -dim.x/2,-dim.y/2,dim.z/2,
162                         -dim.x/2,dim.y/2,dim.z/2);
163                 dprintf(fd,"# [D] %f %f %f %f %f %f\n",
164                         dim.x/2,dim.y/2,dim.z/2,
165                         dim.x/2,-dim.y/2,dim.z/2);
166                 dprintf(fd,"# [D] %f %f %f %f %f %f\n",
167                         -dim.x/2,dim.y/2,dim.z/2,
168                         dim.x/2,dim.y/2,dim.z/2);
169
170                 dprintf(fd,"# [D] %f %f %f %f %f %f\n",
171                         -dim.x/2,-dim.y/2,dim.z/2,
172                         -dim.x/2,-dim.y/2,-dim.z/2);
173                 dprintf(fd,"# [D] %f %f %f %f %f %f\n",
174                         -dim.x/2,dim.y/2,dim.z/2,
175                         -dim.x/2,dim.y/2,-dim.z/2);
176                 dprintf(fd,"# [D] %f %f %f %f %f %f\n",
177                         dim.x/2,-dim.y/2,dim.z/2,
178                         dim.x/2,-dim.y/2,-dim.z/2);
179                 dprintf(fd,"# [D] %f %f %f %f %f %f\n",
180                         dim.x/2,dim.y/2,dim.z/2,
181                         dim.x/2,dim.y/2,-dim.z/2);
182         }
183
184         close(fd);
185
186         return 0;
187 }
188