X-Git-Url: https://hackdaworld.org/gitweb/?a=blobdiff_plain;f=moldyn.c;h=faa6b7c3ea6354a7f1ab08a51cca462d567fd405;hb=2d562a1946322ae5b70bdce180321f32adbeab62;hp=db9185911137ca3862f77fb5135fa83c9ec029d4;hpb=150c5f804a5088a01ef2bb1e934b5e65d10ac23e;p=physik%2Fposic.git diff --git a/moldyn.c b/moldyn.c index db91859..faa6b7c 100644 --- a/moldyn.c +++ b/moldyn.c @@ -541,13 +541,13 @@ int scale_volume(t_moldyn *moldyn) { } /* just a guess so far ... */ - v=sqrt(virial.xx*virial.xx+virial.yy*virial.yy+virial.zz+virial.zz); + v=virial.xx+virial.yy+virial.zz; printf("%f\n",v); /* get pressure from virial */ - moldyn->p=moldyn->count*K_BOLTZMANN*moldyn->t-ONE_THIRD*v; + moldyn->p=moldyn->count*K_BOLTZMANN*moldyn->t+ONE_THIRD*v; moldyn->p/=moldyn->volume; -printf("%f\n",moldyn->p/(ATM)); +printf("%f | %f\n",moldyn->p/(ATM),moldyn->p_ref/ATM); /* scale factor */ if(moldyn->pt_scale&P_SCALE_BERENDSEN) @@ -1427,6 +1427,15 @@ int tersoff_mult_2bp(t_moldyn *moldyn,t_atom *ai,t_atom *aj,u8 bc) { /* add forces of 2bp (ij, ji) contribution * dVij = dVji and we sum up both: no 1/2) */ v3_add(&(ai->f),&(ai->f),&force); + + /* virial */ + ai->virial.xx-=force.x*dist_ij.x; + ai->virial.yy-=force.y*dist_ij.y; + ai->virial.zz-=force.z*dist_ij.z; + ai->virial.xy-=force.x*dist_ij.y; + ai->virial.xz-=force.x*dist_ij.z; + ai->virial.yz-=force.y*dist_ij.z; + #ifdef DEBUG if(ai==&(moldyn->atom[0])) { printf("dVij, dVji (2bp) contrib:\n"); @@ -1526,6 +1535,15 @@ int tersoff_mult_post_2bp(t_moldyn *moldyn,t_atom *ai,t_atom *aj,u8 bc) { /* add force */ v3_add(&(ai->f),&(ai->f),&force); + + /* virial */ + ai->virial.xx-=force.x*dist_ij->x; + ai->virial.yy-=force.y*dist_ij->y; + ai->virial.zz-=force.z*dist_ij->z; + ai->virial.xy-=force.x*dist_ij->y; + ai->virial.xz-=force.x*dist_ij->z; + ai->virial.yz-=force.y*dist_ij->z; + #ifdef DEBUG if(ai==&(moldyn->atom[0])) { printf("dVij (3bp) contrib:\n"); @@ -1562,6 +1580,15 @@ if(ai==&(moldyn->atom[0])) { /* add force */ v3_add(&(ai->f),&(ai->f),&force); + + /* virial - plus sign, as dist_ij = - dist_ji - (really??) */ + ai->virial.xx+=force.x*dist_ij->x; + ai->virial.yy+=force.y*dist_ij->y; + ai->virial.zz+=force.z*dist_ij->z; + ai->virial.xy+=force.x*dist_ij->y; + ai->virial.xz+=force.x*dist_ij->z; + ai->virial.yz+=force.y*dist_ij->z; + #ifdef DEBUG if(ai==&(moldyn->atom[0])) { printf("dVji (3bp) contrib:\n"); @@ -1830,6 +1857,15 @@ int tersoff_mult_3bp(t_moldyn *moldyn,t_atom *ai,t_atom *aj,t_atom *ak,u8 bc) { v3_scale(&temp2,&temp2,tmp*B*exp(-mu*d_jk)*f_c_jk*0.5); v3_add(&(ai->f),&(ai->f),&temp2); /* -1 skipped in f_a calc ^ */ /* scaled with 0.5 ^ */ + + /* virial */ + ai->virial.xx-=temp2.x*dist_jk.x; + ai->virial.yy-=temp2.y*dist_jk.y; + ai->virial.zz-=temp2.z*dist_jk.z; + ai->virial.xy-=temp2.x*dist_jk.y; + ai->virial.xz-=temp2.x*dist_jk.z; + ai->virial.yz-=temp2.y*dist_jk.z; + #ifdef DEBUG if(ai==&(moldyn->atom[0])) { printf("dVjk (3bp) contrib:\n");