#include <math.h>
#include "moldyn.h"
-#include "posic.h"
/* potential */
#include "potentials/harmonic_oscillator.h"
#define INJ_OFFSET (ALBE_LC_SI/8.0)
#define RELAX_S 20
-#define LCNTX 5
-#define LCNTY 5
-#define LCNTZ 5
-#define PRERUN 10
-#define POSTRUN 2000
+#define LCNTX 9
+#define LCNTY 9
+#define LCNTZ 9
+#define PRERUN 40
+#define POSTRUN 3000
#define R_TITLE "Silicon self-interstitial"
#define LOG_E 10
char **argv; /* args */
} t_hp;
-int hook(void *moldyn,void *hook_params) {
+int hook_del_atom(void *moldyn,void *hook_params) {
+
+ t_moldyn *md;
+ t_hp *hp;
+
+ md=moldyn;
+ hp=hook_params;
+
+ set_pt_scale(md,0,0,T_SCALE_BERENDSEN,100.0);
+ del_atom(md,2);
+
+ return 0;
+}
+
+int hook_add_atom(void *moldyn,void *hook_params) {
t_moldyn *md;
t_3dvec r,v,dist;
for(j=0;j<NR_ATOMS;j++) {
run=1;
while(run) {
+ // tetrahedral
+ /*
+ r.x=0.0;
+ r.y=0.0;
+ r.z=0.0;
+ */
+ // hexagonal
+ //
+ r.x=-1.0/8.0*ALBE_LC_SI;
+ r.y=-1.0/8.0*ALBE_LC_SI;
+ r.z=1.0/8.0*ALBE_LC_SI;
+ //
+ // 110 dumbbell
+ /*
+ r.x=(-0.5+0.25+0.125)*ALBE_LC_SI;
+ r.y=(-0.5+0.25+0.125)*ALBE_LC_SI;
+ r.z=(-0.5+0.25)*ALBE_LC_SI;
+ md->atom[4372].r.x=(-0.5+0.125+0.125)*ALBE_LC_SI;
+ md->atom[4372].r.y=(-0.5+0.125+0.125)*ALBE_LC_SI;
+ */
+ // random
+ /*
r.x=(rand_get_double(&(md->random))-0.5)*INJ_LENX;
- r.x+=INJ_OFFSET;
r.y=(rand_get_double(&(md->random))-0.5)*INJ_LENY;
- r.y+=INJ_OFFSET;
r.z=(rand_get_double(&(md->random))-0.5)*INJ_LENZ;
+ */
+ // offset
+ r.x+=INJ_OFFSET;
+ r.y+=INJ_OFFSET;
r.z+=INJ_OFFSET;
/* assume valid coordinates */
run=0;
d=v3_absolute_square(&dist);
/* reject coordinates */
if(d<R_C) {
+ //printf("atom %d - %f\n",i,d);
run=1;
break;
}
#else
add_atom(md,SI,M_SI,0,
#endif
- ATOM_ATTR_1BP|ATOM_ATTR_2BP|ATOM_ATTR_3BP|ATOM_ATTR_HB,
+ ATOM_ATTR_1BP|ATOM_ATTR_2BP|ATOM_ATTR_3BP|ATOM_ATTR_HB|ATOM_ATTR_VB,
&r,&v);
}
hp->a_count+=NR_ATOMS;
set_potential_params(&md,&tp);
#endif
- /* cutoff radius */
+ /* cutoff radius & bondlen */
#ifdef ALBE
set_cutoff(&md,ALBE_S_SI);
+ set_bondlen(&md,ALBE_S_SI,ALBE_S_C,ALBE_S_SIC);
//set_cutoff(&md,ALBE_S_C);
#else
set_cutoff(&md,TM_S_SI);
+ set_bondlen(&md,TM_S_SI,TM_S_C,-1.0);
//set_cutoff(&md,TM_S_C);
#endif
set_pbc(&md,TRUE,TRUE,TRUE);
/* create the lattice / place atoms */
+ //
#ifdef ALBE
create_lattice(&md,DIAMOND,ALBE_LC_SI,SI,M_SI,
//create_lattice(&md,DIAMOND,ALBE_LC_C,C,M_C,
// ATOM_ATTR_2BP|ATOM_ATTR_HB,
0,LCNTX,LCNTY,LCNTZ,NULL);
// 1,LCNTX,LCNTY,LCNTZ,NULL);
+ //
/* create zinkblende structure */
/*
memset(&hookparam,0,sizeof(t_hp));
hookparam.argc=argc;
hookparam.argv=argv;
- moldyn_set_schedule_hook(&md,&hook,&hookparam);
+ moldyn_set_schedule_hook(&md,&hook_add_atom,&hookparam);
+ //moldyn_set_schedule_hook(&md,&hook_del_atom,&hookparam);
+ //moldyn_add_schedule(&md,POSTRUN,1.0);
/* activate logging */
moldyn_set_log_dir(&md,argv[1]);