CC=gcc-3.4
#CC=gcc
-CFLAGS=-Wall -O3 #-DSIMPLE_TESTING
+CFLAGS=-Wall# -O3 #-DSIMPLE_TESTING
LDFLAGS=-lm
-OBJS=init/init.o visual/visual.o random/random.o list/list.o
+OBJS=visual/visual.o random/random.o
OBJS+=moldyn.o
-all: sic
+all: clean sic
sic: $(OBJS)
+++ /dev/null
-/*
- * init.c - create initial conditions
- *
- * author: Frank Zirkelbach <frank.zirkelbach@physik.uni-augsburg.de>
- *
- */
-
-#include "../math/math.h"
-#include "../moldyn.h"
-
-/* 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;
-}
+++ /dev/null
-/*
- * init.h - create initial conditions
- *
- * author: Frank Zirkelbach <frank.zirkelbach@physik.uni-augsburg.de>
- *
- */
-
-#ifndef INIT_H
-#define INIT_H
-
-#include "../moldyn.h"
-
-/* datattypes */
-
-/* function prototypes */
-
-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
#include "moldyn.h"
-#include "math/math.h"
-#include "init/init.h"
-#include "random/random.h"
-#include "visual/visual.h"
-#include "list/list.h"
-
-
int moldyn_init(t_moldyn *moldyn,int argc,char **argv) {
//int ret;
t_linkcell *lc;
int i;
- int fd;
-
- fd=open("/dev/null",O_WRONLY);
lc=&(moldyn->lc);
printf("[moldyn] initializing linked cells (%d)\n",lc->cells);
for(i=0;i<lc->cells;i++)
- //list_init(&(lc->subcell[i]),1);
- list_init(&(lc->subcell[i]),fd);
+ list_init_f(&(lc->subcell[i]));
link_cell_update(moldyn);
nz=lc->nz;
for(i=0;i<lc->cells;i++)
- list_destroy(&(moldyn->lc.subcell[i]));
+ list_destroy_f(&(moldyn->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;
- list_add_immediate_ptr(&(moldyn->lc.subcell[i+j*nx+k*nx*ny]),
- &(atom[count]));
+ list_add_immediate_f(&(moldyn->lc.subcell[i+j*nx+k*nx*ny]),
+ &(atom[count]));
}
return 0;
lc=&(moldyn->lc);
for(i=0;i<lc->nx*lc->ny*lc->nz;i++)
- list_shutdown(&(moldyn->lc.subcell[i]));
+ list_destroy_f(&(moldyn->lc.subcell[i]));
+
+ free(lc->subcell);
return 0;
}
for(j=0;j<27;j++) {
this=&(neighbour_i[j]);
- list_reset(this);
+ list_reset_f(this);
if(this->start==NULL)
continue;
for(k=0;k<27;k++) {
that=&(neighbour_i2[k]);
- list_reset(that);
+ list_reset_f(that);
if(that->start==NULL)
continue;
ktom,
bc_ik|bc_ij);
- } while(list_next(that)!=\
+ } while(list_next_f(that)!=\
L_NO_NEXT_ELEMENT);
}
jtom,bc_ij);
}
- } while(list_next(this)!=L_NO_NEXT_ELEMENT);
+ } while(list_next_f(this)!=L_NO_NEXT_ELEMENT);
}
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;
+}
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
#include <math.h>
#include "moldyn.h"
-#include "math/math.h"
-#include "init/init.h"
-#include "visual/visual.h"
#include "posic.h"
/* activate logging */
printf("[sic] activate logging\n");
- moldyn_set_log_dir(&md,"saves/test");
+ moldyn_set_log_dir(&md,"saves/si_melting_point");
moldyn_set_log(&md,LOG_TOTAL_ENERGY,200);
moldyn_set_log(&md,VISUAL_STEP,200);