]> hackdaworld.org Git - physik/posic.git/commitdiff
safety ci
authorhackbard <hackbard>
Thu, 14 Dec 2006 13:52:42 +0000 (13:52 +0000)
committerhackbard <hackbard>
Thu, 14 Dec 2006 13:52:42 +0000 (13:52 +0000)
Makefile
moldyn.c
moldyn.h
ppm2avi
run
sic.c

index 02508833c42d527ef133a204d8c719a93ec5062d..42ff2bdb7e117b3f996bc8f0e33a754f875cf735 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -1,6 +1,9 @@
 CC=gcc-3.4
 #CC=gcc
-CFLAGS=-Wall# -O3 #-DSIMPLE_TESTING
+CFLAGS=-Wall
+CFLAGS+=-O3
+CFLAGS+=-g
+CFLAGS+=-ffloat-store
 LDFLAGS=-lm
 
 OBJS=visual/visual.o random/random.o
index 7a77898b958b9a06f326a6f31423a46cfcce02f9..c25fed3ae9d4c21587336bc2cf321d0bd96b5bbb 100644 (file)
--- a/moldyn.c
+++ b/moldyn.c
 
 int moldyn_init(t_moldyn *moldyn,int argc,char **argv) {
 
-       //int ret;
-
-       //ret=moldyn_parse_argv(moldyn,argc,argv);
-       //if(ret<0) return ret;
-
        memset(moldyn,0,sizeof(t_moldyn));
 
        rand_init(&(moldyn->random),NULL,1);
@@ -101,7 +96,7 @@ int set_dim(t_moldyn *moldyn,double x,double y,double z,u8 visualize) {
                moldyn->vis.dim.z=z;
        }
 
-       printf("[moldyn] dimensions in A and A^2 respectively:\n");
+       printf("[moldyn] dimensions in A and A^3 respectively:\n");
        printf("  x: %f\n",moldyn->dim.x);
        printf("  y: %f\n",moldyn->dim.y);
        printf("  z: %f\n",moldyn->dim.z);
@@ -230,6 +225,10 @@ int moldyn_log_shutdown(t_moldyn *moldyn) {
        return 0;
 }
 
+/*
+ * creating lattice functions
+ */
+
 int create_lattice(t_moldyn *moldyn,u8 type,double lc,int element,double mass,
                    u8 attr,u8 bnum,int a,int b,int c) {
 
@@ -288,6 +287,90 @@ int create_lattice(t_moldyn *moldyn,u8 type,double lc,int element,double mass,
        return ret;
 }
 
+/* fcc lattice init */
+int fcc_init(int a,int b,int c,double lc,t_atom *atom,t_3dvec *origin) {
+
+       int count;
+       int i,j;
+       t_3dvec o,r,n;
+       t_3dvec basis[3];
+       double help[3];
+       double x,y,z;
+
+       x=a*lc;
+       y=b*lc;
+       z=c*lc;
+
+       if(origin) v3_copy(&o,origin);
+       else v3_zero(&o);
+
+       /* construct the basis */
+       for(i=0;i<3;i++) {
+               for(j=0;j<3;j++) {
+                       if(i!=j) help[j]=0.5*lc;
+                       else help[j]=.0;
+               }
+               v3_set(&basis[i],help);
+       }
+
+       v3_zero(&r);
+       count=0;
+       
+       /* fill up the room */
+       r.x=o.x;
+       while(r.x<x) {
+               r.y=o.y;
+               while(r.y<y) {
+                       r.z=o.z;
+                       while(r.z<z) {
+                               v3_copy(&(atom[count].r),&r);
+                               atom[count].element=1;
+                               count+=1;
+                               for(i=0;i<3;i++) {
+                                       v3_add(&n,&r,&basis[i]);
+                                       if((n.x<x+o.x)&&
+                                          (n.y<y+o.y)&&
+                                          (n.z<z+o.z)) {
+                                               v3_copy(&(atom[count].r),&n);
+                                               count+=1;
+                                       }
+                               }
+                               r.z+=lc;        
+                       }
+                       r.y+=lc;
+               }
+               r.x+=lc;
+       }
+
+       /* coordinate transformation */
+       help[0]=x/2.0;
+       help[1]=y/2.0;
+       help[2]=z/2.0;
+       v3_set(&n,help);
+       for(i=0;i<count;i++)
+               v3_sub(&(atom[i].r),&(atom[i].r),&n);
+               
+       return count;
+}
+
+int diamond_init(int a,int b,int c,double lc,t_atom *atom,t_3dvec *origin) {
+
+       int count;
+       t_3dvec o;
+
+       count=fcc_init(a,b,c,lc,atom,origin);
+
+       o.x=0.25*lc;
+       o.y=0.25*lc;
+       o.z=0.25*lc;
+
+       if(origin) v3_add(&o,&o,origin);
+
+       count+=fcc_init(a,b,c,lc,&atom[count],&o);
+
+       return count;
+}
+
 int add_atom(t_moldyn *moldyn,int element,double mass,u8 bnum,u8 attr,
              t_3dvec *r,t_3dvec *v) {
 
@@ -571,24 +654,28 @@ int link_cell_init(t_moldyn *moldyn) {
 int link_cell_update(t_moldyn *moldyn) {
 
        int count,i,j,k;
-       int nx,ny,nz;
+       int nx,ny;
        t_atom *atom;
        t_linkcell *lc;
+       double x,y,z;
 
        atom=moldyn->atom;
        lc=&(moldyn->lc);
 
        nx=lc->nx;
        ny=lc->ny;
-       nz=lc->nz;
+
+       x=moldyn->dim.x/2;
+       y=moldyn->dim.y/2;
+       z=moldyn->dim.z/2;
 
        for(i=0;i<lc->cells;i++)
-               list_destroy_f(&(moldyn->lc.subcell[i]));
+               list_destroy_f(&(lc->subcell[i]));
        
        for(count=0;count<moldyn->count;count++) {
-               i=(atom[count].r.x+(moldyn->dim.x/2))/lc->x;
-               j=(atom[count].r.y+(moldyn->dim.y/2))/lc->y;
-               k=(atom[count].r.z+(moldyn->dim.z/2))/lc->z;
+               i=((atom[count].r.x+(moldyn->dim.x/2))/lc->x);
+               j=((atom[count].r.y+(moldyn->dim.y/2))/lc->y);
+               k=((atom[count].r.z+(moldyn->dim.z/2))/lc->z);
                list_add_immediate_f(&(moldyn->lc.subcell[i+j*nx+k*nx*ny]),
                                     &(atom[count]));
        }
@@ -777,11 +864,7 @@ int moldyn_integrate(t_moldyn *moldyn) {
                if(moldyn->pt_scale&(T_SCALE_BERENDSEN|T_SCALE_DIRECT))
                        scale_velocity(moldyn,FALSE);
                if(moldyn->pt_scale&(P_SCALE_BERENDSEN|P_SCALE_DIRECT))
-{
-printf("going to do p scale ...\n");
                        scale_volume(moldyn);
-printf("done\n");
-}
 
                /* check for log & visualization */
                if(e) {
@@ -860,16 +943,13 @@ int velocity_verlet(t_moldyn *moldyn) {
                v3_add(&(atom[i].r),&(atom[i].r),&delta);
                v3_scale(&delta,&(atom[i].f),0.5*tau_square/atom[i].mass);
                v3_add(&(atom[i].r),&(atom[i].r),&delta);
-//if(i==5) printf("v: %f %f %f\n",atom[i].r.x,(atom[i].r.x+moldyn->dim.x/2)/moldyn->lc.x,2*atom[i].r.x/moldyn->dim.x);
                check_per_bound(moldyn,&(atom[i].r));
-//if(i==5) printf("n: %f %f %f\n",atom[i].r.x,(atom[i].r.x+moldyn->dim.x/2)/moldyn->lc.x,2*atom[i].r.x/moldyn->dim.x);
 
                /* velocities */
                v3_scale(&delta,&(atom[i].f),0.5*tau/atom[i].mass);
                v3_add(&(atom[i].v),&(atom[i].v),&delta);
        }
 
-//moldyn_bc_check(moldyn);
        /* neighbour list update */
        link_cell_update(moldyn);
 
@@ -1027,7 +1107,7 @@ int potential_force_calc(t_moldyn *moldyn) {
  * periodic boundayr checking
  */
 
-int check_per_bound(t_moldyn *moldyn,t_3dvec *a) {
+inline int check_per_bound(t_moldyn *moldyn,t_3dvec *a) {
        
        double x,y,z;
        t_3dvec *dim;
@@ -1746,91 +1826,3 @@ x=dim->x/2;
 
        return 0;
 }
-
-/*
- * lattice creation functions
- */
-
-/* fcc lattice init */
-int fcc_init(int a,int b,int c,double lc,t_atom *atom,t_3dvec *origin) {
-
-       int count;
-       int i,j;
-       t_3dvec o,r,n;
-       t_3dvec basis[3];
-       double help[3];
-       double x,y,z;
-
-       x=a*lc;
-       y=b*lc;
-       z=c*lc;
-
-       if(origin) v3_copy(&o,origin);
-       else v3_zero(&o);
-
-       /* construct the basis */
-       for(i=0;i<3;i++) {
-               for(j=0;j<3;j++) {
-                       if(i!=j) help[j]=0.5*lc;
-                       else help[j]=.0;
-               }
-               v3_set(&basis[i],help);
-       }
-
-       v3_zero(&r);
-       count=0;
-       
-       /* fill up the room */
-       r.x=o.x;
-       while(r.x<x) {
-               r.y=o.y;
-               while(r.y<y) {
-                       r.z=o.z;
-                       while(r.z<z) {
-                               v3_copy(&(atom[count].r),&r);
-                               atom[count].element=1;
-                               count+=1;
-                               for(i=0;i<3;i++) {
-                                       v3_add(&n,&r,&basis[i]);
-                                       if((n.x<x+o.x)&&
-                                          (n.y<y+o.y)&&
-                                          (n.z<z+o.z)) {
-                                               v3_copy(&(atom[count].r),&n);
-                                               count+=1;
-                                       }
-                               }
-                               r.z+=lc;        
-                       }
-                       r.y+=lc;
-               }
-               r.x+=lc;
-       }
-
-       /* coordinate transformation */
-       help[0]=x/2.0;
-       help[1]=y/2.0;
-       help[2]=z/2.0;
-       v3_set(&n,help);
-       for(i=0;i<count;i++)
-               v3_sub(&(atom[i].r),&(atom[i].r),&n);
-               
-       return count;
-}
-
-int diamond_init(int a,int b,int c,double lc,t_atom *atom,t_3dvec *origin) {
-
-       int count;
-       t_3dvec o;
-
-       count=fcc_init(a,b,c,lc,atom,origin);
-
-       o.x=0.25*lc;
-       o.y=0.25*lc;
-       o.z=0.25*lc;
-
-       if(origin) v3_add(&o,&o,origin);
-
-       count+=fcc_init(a,b,c,lc,&atom[count],&o);
-
-       return count;
-}
index af54cef33f3985f22147752df79353844506be9a..c01bc9f6e5e81da8cca4ca56c8206ea21e4aed81 100644 (file)
--- a/moldyn.h
+++ b/moldyn.h
@@ -377,6 +377,8 @@ int moldyn_log_shutdown(t_moldyn *moldyn);
 
 int create_lattice(t_moldyn *moldyn,u8 type,double lc,int element,double mass,
                    u8 attr,u8 bnum,int a,int b,int c);
+int fcc_init(int a,int b,int c,double lc,t_atom *atom,t_3dvec *origin);
+int diamond_init(int a,int b,int c,double lc,t_atom *atom,t_3dvec *origin);
 int add_atom(t_moldyn *moldyn,int element,double mass,u8 bnum,u8 attr,
              t_3dvec *r,t_3dvec *v);
 int destroy_atoms(t_moldyn *moldyn);
@@ -404,6 +406,8 @@ int moldyn_integrate(t_moldyn *moldyn);
 int velocity_verlet(t_moldyn *moldyn);
 
 int potential_force_calc(t_moldyn *moldyn);
+inline int check_per_bound(t_moldyn *moldyn,t_3dvec *a)
+       __attribute__((always_inline));
 int check_per_bound(t_moldyn *moldyn,t_3dvec *a);
 int harmonic_oscillator(t_moldyn *moldyn,t_atom *ai,t_atom *aj,u8 bc);
 int lennard_jones(t_moldyn *moldyn,t_atom *ai,t_atom *aj,u8 bc);
@@ -415,7 +419,4 @@ int tersoff_mult_3bp(t_moldyn *moldyn,t_atom *ai,t_atom *aj,t_atom *ak,u8 bc);
 
 int moldyn_bc_check(t_moldyn *moldyn);
 
-int fcc_init(int a,int b,int c,double lc,t_atom *atom,t_3dvec *origin);
-int diamond_init(int a,int b,int c,double lc,t_atom *atom,t_3dvec *origin);
-
 #endif
diff --git a/ppm2avi b/ppm2avi
index 4a630a73fdb8b11fbe448374fa16bd88a9c79dc0..74e65cff1884100d57c516021624d4b00705fe65 100755 (executable)
--- a/ppm2avi
+++ b/ppm2avi
@@ -2,4 +2,4 @@ for i in $1/*.ppm; do
        convert $i $1/$(basename $i ppm)png
 done
 
-mencoder mf://$1/*.png -ovc copy -o video/md.avi
+mencoder mf://$1/*.png -ovc copy -o $1/md.avi
diff --git a/run b/run
index af5d425b9a19931c2f44bb0d011ee4269859e018..2110d438fbc821f5b98ab122062cac7d9dfacc2e 100755 (executable)
--- a/run
+++ b/run
@@ -1,6 +1,6 @@
 mkdir -p saves video
 ./clean $1
-./sic
+./sic $1
 if [ "$?" == "0" ]; then
        #./perms
        if [ "$1" ] ; then
diff --git a/sic.c b/sic.c
index 45e671fe9439796e9554c542137ffe4f8ce775b4..7ab3dc92d979eadfec8a148d4757fa21fe3a6ab8 100644 (file)
--- a/sic.c
+++ b/sic.c
 #include "posic.h"
 
 int main(int argc,char **argv) {
+
+       /* check argv */
+       if(argc!=2) {
+               printf("[sic] error: arg1 (vis/log/save location) ");
+               printf("must be given!\n");
+               return -1;
+       }
+
        /* main moldyn structure */
        t_moldyn md;
 
@@ -24,7 +32,7 @@ int main(int argc,char **argv) {
        double tau;
 
        /* testing location & velocity vector */
-       t_3dvec r,v;
+       //t_3dvec r,v;
 
        /* values */
        tau=1.0e-15;    /* delta t = 1 fs */
@@ -129,8 +137,8 @@ int main(int argc,char **argv) {
 
        /* set temperature */
        printf("[sic] setting temperature\n");
-       set_temperature(&md,273.0+1410.0);
-       //set_temperature(&md,273.0+450.0);
+       //set_temperature(&md,273.0+1410.0);
+       set_temperature(&md,273.0+450.0);
        //set_temperature(&md,273.0);
        //set_temperature(&md,1.0);
        //set_temperature(&md,0.0);
@@ -150,11 +158,11 @@ int main(int argc,char **argv) {
 
        /* create the simulation schedule */
        printf("[sic] adding schedule\n");
-       moldyn_add_schedule(&md,100001,1.0);
+       moldyn_add_schedule(&md,30001,1.0);
 
        /* activate logging */
        printf("[sic] activate logging\n");
-       moldyn_set_log_dir(&md,"saves/si_melting_point");
+       moldyn_set_log_dir(&md,argv[1]);
        moldyn_set_log(&md,LOG_TOTAL_ENERGY,200);
        moldyn_set_log(&md,VISUAL_STEP,200);