next up previous contents
Nächste Seite: Druck Aufwärts: Programcode Vorherige Seite: MC-Simulation   Inhalt

GB-Potential


double ugb (void)
{
 int i,j; 
 double v,rxi,ryi,rzi,uxi,uyi,uzi,v6,v12,rij,v2,vp;
 double rxij,ryij,rzij,uij,rui,ruj,rup,rum,hiu,hisu,sigu,epsu,epss; 
	v=0;
	for (i=1;i<=(n-1);i++) 
	{
  	   rxi=rx[i]; ryi=ry[i]; rzi=rz[i]; uxi=ux[i]; uyi=uy[i]; uzi=uz[i]; 
	   for (j=i+1;j<=n;j++)
	   {
	     rxij=rxi-rx[j]; 
	     if (rxij<=-l2) rxij+=l; 
	     if (rxij>=l2) rxij-=l; 
	     ryij=ryi-ry[j]; 
	     if (ryij<=-l2) ryij+=l; 
	     if (ryij>=l2) ryij-=l; 
	     rzij=rzi-rz[j]; 
	     if (rzij<=-l2) rzij+=l;
   	     if (rzij>=l2) rzij-=l; 
	     rij=sqrt(rxij*rxij+ryij*ryij+rzij*rzij);
   	     if (rij<rc) 
	     {
		if ((i<=n1) && (j<=n1)){hi=hi1;his=his1;}
		else 
		{ if ((i>n1) && (j>n1)) {hi=hi2;his=his2;}
     		  else {hi=hi12;his=his12;}
		} 
    		uij=uxi*ux[j]+uyi*uy[j]+uzi*uz[j];
    		rui=(rxij*uxi+ryij*uyi+rzij*uzi)/rij;
    		ruj=(rxij*ux[j]+ryij*uy[j]+rzij*uz[j])/rij;
    		rup=(rui+ruj)*(rui+ruj); rum=(rui-ruj)*(rui-ruj); 
		hiu=hi*uij; hisu=his*uij; 	
		sigu=1/sqrt(1-(hi/2)*(rup/(1+hiu)+rum/(1-hiu)));
    		epsu=1/sqrt(1-hi*hi*uij*uij);
    		epss=1-(his/2)*(rup/(1+hisu)+rum/(1-hisu)); 
    		v2=1/(rij-sigu+1); 
    		v2*=v2; v6=v2*v2*v2; v12=v6*v6;
		vp=epsu*epss*epss*(v12-v6);
		v+=vp;
	     }
	   }
	} 
	return(4*v); 
}



Renato Lukac
2000-01-02