- for(i=0;i<moldyn->count;i++) {
- if(atom[i].r.x>=dim->x/2||-atom[i].r.x>dim->x/2) {
- printf("FATAL: atom %d: x: %.20f (%.20f)\n",
- i,atom[i].r.x,dim->x/2);
- printf("diagnostic:\n");
- printf("-----------\natom.r.x:\n");
- for(j=0;j<8;j++) {
- memcpy(&byte,(u8 *)(&(atom[i].r.x))+j,1);
- for(k=0;k<8;k++)
- printf("%d%c",
- ((byte)&(1<<k))?1:0,
- (k==7)?'\n':'|');
- }
- printf("---------------\nx=dim.x/2:\n");
- for(j=0;j<8;j++) {
- memcpy(&byte,(u8 *)(&x)+j,1);
- for(k=0;k<8;k++)
- printf("%d%c",
- ((byte)&(1<<k))?1:0,
- (k==7)?'\n':'|');
- }
- if(atom[i].r.x==x) printf("the same!\n");
- else printf("different!\n");
- }
- if(atom[i].r.y>=dim->y/2||-atom[i].r.y>dim->y/2)
- printf("FATAL: atom %d: y: %.20f (%.20f)\n",
- i,atom[i].r.y,dim->y/2);
- if(atom[i].r.z>=dim->z/2||-atom[i].r.z>dim->z/2)
- printf("FATAL: atom %d: z: %.20f (%.20f)\n",
- i,atom[i].r.z,dim->z/2);
+ help=(dim.x+dim.y);
+
+ sprintf(file,"%s/atomic_conf_%07.f.xyz",v->fb,moldyn->time);
+ vb.fd=open(file,O_WRONLY|O_CREAT|O_TRUNC,S_IRUSR|S_IWUSR);
+ if(vb.fd<0) {
+ perror("open visual save file fd");
+ return -1;
+ }
+
+ /* write the actual data file */
+
+ // povray header
+ dprintf(vb.fd,"# [P] %d %07.f <%f,%f,%f>\n",
+ moldyn->count,moldyn->time,help/40.0,help/40.0,-0.8*help);
+
+ // atomic configuration
+ for(i=0;i<moldyn->count;i++)
+ // atom type, positions, color and kinetic energy
+ dprintf(vb.fd,"%s %f %f %f %s %f\n",pse_name[atom[i].element],
+ atom[i].r.x,
+ atom[i].r.y,
+ atom[i].r.z,
+ pse_col[atom[i].element],
+ atom[i].ekin);
+
+ // bonds between atoms
+ process_2b_bonds(moldyn,&vb,visual_bonds_process);
+
+ // boundaries
+ if(dim.x) {
+ dprintf(vb.fd,"# [D] %f %f %f %f %f %f\n",
+ -dim.x/2,-dim.y/2,-dim.z/2,
+ dim.x/2,-dim.y/2,-dim.z/2);
+ dprintf(vb.fd,"# [D] %f %f %f %f %f %f\n",
+ -dim.x/2,-dim.y/2,-dim.z/2,
+ -dim.x/2,dim.y/2,-dim.z/2);
+ dprintf(vb.fd,"# [D] %f %f %f %f %f %f\n",
+ dim.x/2,dim.y/2,-dim.z/2,
+ dim.x/2,-dim.y/2,-dim.z/2);
+ dprintf(vb.fd,"# [D] %f %f %f %f %f %f\n",
+ -dim.x/2,dim.y/2,-dim.z/2,
+ dim.x/2,dim.y/2,-dim.z/2);
+
+ dprintf(vb.fd,"# [D] %f %f %f %f %f %f\n",
+ -dim.x/2,-dim.y/2,dim.z/2,
+ dim.x/2,-dim.y/2,dim.z/2);
+ dprintf(vb.fd,"# [D] %f %f %f %f %f %f\n",
+ -dim.x/2,-dim.y/2,dim.z/2,
+ -dim.x/2,dim.y/2,dim.z/2);
+ dprintf(vb.fd,"# [D] %f %f %f %f %f %f\n",
+ dim.x/2,dim.y/2,dim.z/2,
+ dim.x/2,-dim.y/2,dim.z/2);
+ dprintf(vb.fd,"# [D] %f %f %f %f %f %f\n",
+ -dim.x/2,dim.y/2,dim.z/2,
+ dim.x/2,dim.y/2,dim.z/2);
+
+ dprintf(vb.fd,"# [D] %f %f %f %f %f %f\n",
+ -dim.x/2,-dim.y/2,dim.z/2,
+ -dim.x/2,-dim.y/2,-dim.z/2);
+ dprintf(vb.fd,"# [D] %f %f %f %f %f %f\n",
+ -dim.x/2,dim.y/2,dim.z/2,
+ -dim.x/2,dim.y/2,-dim.z/2);
+ dprintf(vb.fd,"# [D] %f %f %f %f %f %f\n",
+ dim.x/2,-dim.y/2,dim.z/2,
+ dim.x/2,-dim.y/2,-dim.z/2);
+ dprintf(vb.fd,"# [D] %f %f %f %f %f %f\n",
+ dim.x/2,dim.y/2,dim.z/2,
+ dim.x/2,dim.y/2,-dim.z/2);