- /* switch off temp scaling in second hook */
- if(md->schedule.count==1)
- set_pt_scale(md,0,0,0,0);
-
- //set_temperature(md,md->t_ref-100.0);
+
+ /* last schedule add if there is enough carbon inside */
+ if(hp->a_count==(INJECT*NR_ATOMS)) {
+ hp->quit=1;
+ moldyn_add_schedule(md,POSTRUN,1.0);
+ return 0;
+ }
+
+ /* more relaxing time for too high temperatures */
+ if(md->t-md->t_ref>T_C) {
+ moldyn_add_schedule(md,10,1.0);
+ return 0;
+ }
+
+ /* inject carbon atoms */
+ printf("injecting another %d carbon atoms ...(-> %d / %d)\n",
+ NR_ATOMS,hp->a_count+NR_ATOMS,INJECT*NR_ATOMS);
+ for(j=0;j<NR_ATOMS;j++) {
+ run=1;
+ while(run) {
+ /*
+ r.x=(rand_get_double(&(md->random))-0.5)*md->dim.x*0.37;
+ r.y=(rand_get_double(&(md->random))-0.5)*md->dim.y*0.37;
+ r.z=(rand_get_double(&(md->random))-0.5)*md->dim.z*0.37;
+ r.x=(1.0*atoi(hp->argv[3])-4.5)/9.0*ALBE_LC_SI;
+ r.y=(1.0*atoi(hp->argv[4])-4.5)/9.0*ALBE_LC_SI;
+ r.z=(1.0*atoi(hp->argv[5])-4.5)/9.0*ALBE_LC_SI;
+ */
+ r.x=(rand_get_double(&(md->random))-0.5)*LC_SI;
+ r.y=(rand_get_double(&(md->random))-0.5)*LC_SI;
+ r.z=(rand_get_double(&(md->random))-0.5)*LC_SI;
+ /* assume valid coordinates */
+ run=0;
+ for(i=0;i<md->count;i++) {
+ atom=&(md->atom[i]);
+ v3_sub(&dist,&(atom->r),&r);
+ d=v3_absolute_square(&dist);
+ /* reject coordinates */
+ if(d<R_C) {
+ run=1;
+ break;
+ }
+ }
+ }
+ v.x=0; v.y=0; v.z=0;
+ add_atom(md,C,M_C,1,
+ ATOM_ATTR_1BP|ATOM_ATTR_2BP|ATOM_ATTR_3BP|ATOM_ATTR_HB,
+ &r,&v);
+ }
+ hp->a_count+=NR_ATOMS;
+
+ /* add schedule for simulating injected atoms ;) */
+ moldyn_add_schedule(md,10,1.0);