added some helper tools for vasp usage
[physik/posic.git] / vasp_tools / create_lattice.c
diff --git a/vasp_tools/create_lattice.c b/vasp_tools/create_lattice.c
new file mode 100644 (file)
index 0000000..5f6cb8d
--- /dev/null
@@ -0,0 +1,111 @@
+/*
+ * create lattice (for usage in vasp POSCAR file)
+ *
+ * author: Frank Zirkelbach <frank.zirkelbach@physik.uni-augsburg.de>
+ *
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <math.h>
+#include "../math/math.h"
+
+#define FCC            0x01
+#define DIAMOND                0x02
+#define ZINCBLENDE     0x03
+
+int main(int argc,char **argv) {
+
+       int i,j,k,l,cnt;
+       t_3dvec basis[3];
+       t_3dvec offset;
+       t_3dvec r,n;
+       char type;
+       double zrot;
+
+       if(argc<5) {
+               printf("usage: %s type lx ly lz\n",argv[0]);
+               return -1;
+       }
+
+       type=argv[1][0];
+       type=DIAMOND;
+
+       zrot=0.0;
+       if(argc==6)
+               zrot=atof(argv[5]);
+
+       offset.x=0.25;
+       offset.y=0.25;
+       offset.z=0.25;
+
+       memset(basis,0,3*sizeof(t_3dvec));
+       basis[0].x=0.5;
+       basis[0].y=0.5;
+       basis[1].x=0.5;
+       basis[1].z=0.5;
+       basis[2].y=0.5;
+       basis[2].z=0.5;
+
+       cnt=0;
+       r.x=0.0;
+       for(i=0;i<atoi(argv[2]);i++) {
+               r.y=0.0;
+               for(j=0;j<atoi(argv[3]);j++) {
+                       r.z=0.0;
+                       for(k=0;k<atoi(argv[4]);k++) {
+
+       // first atom
+       printf(" %.2f %.2f %.2f T T T\n",r.x,r.y,r.z);
+       cnt+=1;
+       // face centered atoms
+       for(l=0;l<3;l++) {
+               v3_add(&n,&r,&(basis[l]));
+               printf(" %.2f %.2f %.2f T T T\n",n.x,n.y,n.z);
+               cnt+=1;
+       }
+
+                               r.z+=1.0;
+                       }
+                       r.y+=1.0;
+               }
+               r.x+=1.0;
+       }
+
+       // second fcc lattice
+       if(type==DIAMOND) {
+
+       r.x=0.0;
+       for(i=0;i<atoi(argv[2]);i++) {
+               r.y=0.0;
+               for(j=0;j<atoi(argv[3]);j++) {
+                       r.z=0.0;
+                       for(k=0;k<atoi(argv[4]);k++) {
+
+       // first atom
+       printf(" %.2f %.2f %.2f T T T\n",r.x+0.25,r.y+0.25,r.z+0.25);
+       cnt+=1;
+       // face centered atoms
+       for(l=0;l<3;l++) {
+               v3_add(&n,&r,&(basis[l]));
+               printf(" %.2f %.2f %.2f T T T\n",n.x+0.25,n.y+0.25,n.z+0.25);
+               cnt+=1;
+       }
+
+                               r.z+=1.0;
+                       }
+                       r.y+=1.0;
+               }
+               r.x+=1.0;
+       }
+
+       }
+
+
+       printf("\ntotal: %d ions\n\n",cnt);
+
+       return 0;
+
+}
+