X-Git-Url: https://hackdaworld.org/gitweb/?p=physik%2Fposic.git;a=blobdiff_plain;f=moldyn.c;fp=moldyn.c;h=a6f5c4557efc68b4ff01e6996792b782b5d2bcea;hp=ccc0b56f99159f0bab42b18051116241355eb0f8;hb=ff44bcba9df0d021568abcb553d1d490c442f696;hpb=98c1ca4feaacee4f319a6c288aa2b0cef65033e4 diff --git a/moldyn.c b/moldyn.c index ccc0b56..a6f5c45 100644 --- a/moldyn.c +++ b/moldyn.c @@ -55,12 +55,10 @@ pthread_mutex_t *amutex; pthread_mutex_t emutex; #endif -#ifdef CRT /* fully constrained relaxation technique - global pointers */ -u8 crt; +u8 crtt; u8 *constraints; double *trafo_angle; -#endif /* * the moldyn functions @@ -85,14 +83,9 @@ int moldyn_init(t_moldyn *moldyn,int argc,char **argv) { pthread_mutex_init(&emutex,NULL); #endif -#ifdef CONSTRAINT_110_5832 - printf("\n\n\nWARNING! WARNING! WARNING!\n\n\n"); - printf("\n\n\n!! -- constraints enabled -- !!\n\n\n"); -#endif -#ifdef CONSTRAINT_11X_5832 - printf("\n\n\nWARNING! WARNING! WARNING!\n\n\n"); - printf("\n\n\n!! -- constraints enabled -- !!\n\n\n"); -#endif + if(crtt) + printf("USING CRT\n"); + return 0; } @@ -2267,6 +2260,43 @@ printf("sched:%d, steps:%d/%d, T:%4.1f/%4.1f P:%4.1f/%4.1f V:%6.1f (%d)\n", return 0; } +/* basis trafo */ + +#define FORWARD 0 +#define BACKWARD 1 + +int basis_trafo(t_3dvec *r,u8 dir,double z,double x) { + + t_3dvec tmp; + + if(dir==FORWARD) { + if(z!=0.0) { + v3_copy(&tmp,r); + r->x=cos(z)*tmp.x-sin(z)*tmp.y; + r->y=sin(z)*tmp.x+cos(z)*tmp.y; + } + if(x!=0.0) { + v3_copy(&tmp,r); + r->y=cos(x)*tmp.y-sin(x)*tmp.z; + r->z=sin(x)*tmp.y+cos(x)*tmp.z; + } + } + else { + if(x!=0.0) { + v3_copy(&tmp,r); + r->y=cos(-x)*tmp.y-sin(-x)*tmp.z; + r->z=sin(-x)*tmp.y+cos(-x)*tmp.z; + } + if(z!=0.0) { + v3_copy(&tmp,r); + r->x=cos(-z)*tmp.x-sin(-z)*tmp.y; + r->y=sin(-z)*tmp.x+cos(-z)*tmp.y; + } + } + + return 0; +} + /* velocity verlet */ int velocity_verlet(t_moldyn *moldyn) { @@ -2275,113 +2305,40 @@ int velocity_verlet(t_moldyn *moldyn) { double tau,tau_square,h; t_3dvec delta; t_atom *atom; -#ifdef CONSTRAINT_11X_5832 - double xt,yt,zt; - double xtt,ytt,ztt; -#endif atom=moldyn->atom; count=moldyn->count; tau=moldyn->tau; tau_square=moldyn->tau_square; -#ifdef CONSTRAINT_110_5832 - if(count==5833) { - atom[5832].f.x=0.5*(atom[5832].f.x-atom[5832].f.y); - atom[5832].f.y=-atom[5832].f.x; - } -#endif -#ifdef CONSTRAINT_11X_5832 - if(count==5833) { - // second trafo - xt=atom[5832].f.x; - yt=atom[5832].f.y*cos(-0.16935129)-atom[5832].f.z*sin(-0.16935129); - zt=atom[5832].f.y*sin(-0.16935129)+atom[5832].f.z*cos(-0.16935129); - // first trafo - xtt=xt*cos(M_PI/4.0)-yt*sin(M_PI/4.0); - ytt=xt*sin(M_PI/4.0)+yt*sin(M_PI/4.0); - ztt=zt; - // apply constraints - ytt=0.0; - // first trafo backwards - xt=xtt*cos(M_PI/4.0)+ytt*sin(M_PI/4.0); - yt=-xtt*sin(M_PI/4.0)+ytt*sin(M_PI/4.0); - zt=ztt; - // second trafo backwards - atom[5832].f.x=xt; - atom[5832].f.y=yt*cos(-0.16935129)+zt*sin(-0.16935129); - atom[5832].f.z=-yt*sin(-0.16935129)+zt*cos(-0.16935129); - } -#endif for(i=0;i