X-Git-Url: https://www.hackdaworld.org/gitweb/?a=blobdiff_plain;f=sic.c;fp=sic.c;h=a7613e2c84e08ae0a1a0eba64eccc81513e29ff6;hb=6a467846e1bd9212bcfd4c5ac29f8954305aaff5;hp=e1103bd803dcb5676530411e05bc45a30376165c;hpb=422f72e6415c6275f359fd5e462fa232e7dc2e87;p=physik%2Fposic.git diff --git a/sic.c b/sic.c index e1103bd..a7613e2 100644 --- a/sic.c +++ b/sic.c @@ -40,7 +40,7 @@ int insert_atoms(t_moldyn *moldyn) { int i,j; u8 run; t_3dvec r,v,dist; - double d; + double d,dmin; t_atom *atom; @@ -83,6 +83,7 @@ int insert_atoms(t_moldyn *moldyn) { r.z+=INS_OFFSET; /* assume valid coordinates */ run=0; + dmin=10000000000.0; // for sure too high! for(i=0;icount;i++) { atom=&(moldyn->atom[i]); v3_sub(&dist,&(atom->r),&r); @@ -94,6 +95,8 @@ int insert_atoms(t_moldyn *moldyn) { run=1; break; } + if(dcount-1,r.x,r.y,r.z,dmin); } return 0; @@ -112,6 +117,7 @@ int sic_hook(void *moldyn,void *hook_params) { t_moldyn *md; int steps; double tau; + double dt; hp=hook_params; md=moldyn; @@ -129,12 +135,15 @@ int sic_hook(void *moldyn,void *hook_params) { /* act according to state */ switch(hp->state) { case STATE_INSERT: + /* assigne values */ + steps=INS_RELAX; + tau=INS_TAU; /* check temperature */ - if(md->t_avg-md->t_ref>INS_DELTA_TC) { - steps=INS_RELAX; - tau=INS_TAU; + dt=md->t_avg-md->t_ref; + if(dt<0) + dt=-dt; + if(dt>INS_DELTA_TC) break; - } /* insert atoms */ hp->insert_count+=1; printf(" ### insert atoms (%d/%d) ###\n", @@ -145,11 +154,15 @@ int sic_hook(void *moldyn,void *hook_params) { hp->state=STATE_POSTRUN; break; case STATE_POSTRUN: - /* settings */ - if(md->t-md->t_ref>POST_DELTA_TC) { - steps=POST_RELAX; - tau=POST_TAU; - } + /* assigne values */ + steps=POST_RELAX; + tau=POST_TAU; + /* check temperature */ + dt=md->t_avg-md->t_ref; + if(dt<0) + dt=-dt; + if(dt>INS_DELTA_TC) + break; /* decrease temperature */ hp->postrun_count+=1; printf(" ### postrun (%d/%d) ###\n", @@ -163,6 +176,9 @@ int sic_hook(void *moldyn,void *hook_params) { break; } + /* reset the average counters */ + average_reset(md); + /* add schedule */ moldyn_add_schedule(md,steps,tau);