Professional Documents
Culture Documents
Agosto 2011
INTRODUCCION En el presente escrito se mostrarn algunas propiedades de gases confinados en una caja bidimensional. Para ello se hicieron las siguientes consideraciones: 1. Las partculas del gas son adimensionales. 2. El nmero de partculas es reducido (de 10 a 40 partculas) 3. La interaccin entre las partculas es por medio del potencial de Lennard-Jones:
4. Todos los parmetros del potencial son igualados a uno. 5. Para integrar las ecuaciones de movimiento se emplea el algoritmo de Vernet. Lo que se verificar en el trabajo ser: 1. Analizar cualitativamente la dependencia del tiempo de relajacin de un sistema con respecto a su dimensin y condiciones iniciales. 2. Observar cualitativamente la evolucin del sistema. 3. Corroborar la validez de la ley cero de la termodinmica*
1. DEPENDENCIA DEL TIEMPO DE RELAJACION DE UN SISTEMA CON RESPECTO A LA DIMENSION DEL MISMO.
Grfica 1: der-izq se refiere a la diferencia entre la cantidad de partculas que se encuentran de un lado u otro de la caja, y en la grfica se evidencia su evolucin temporal.
A pesar de que se observa de no evidenciarse notablemente una diferencia entre el tiempo caracterstica de cada sistema, es notable como la pendiente es ms pronunciada a medida que aumenta la cantidad de partculas.
2. EVOLUCION DE SISTEMA Y DEPENDENCIA DEL TIEMPO DE RELAJACION CON LAS CONDICIONES INICIALES.
A continuacin se presentan una serie de grficas que corresponden a la evolucin de un sistema de 20 partculas con una distribucin aleatoria de velocidades.
40 20 0 -100 -50
-20 0 -40
50
100
-60 -80
-100
40 20
0
-100
-50
-20 0
50
100
60 40
20 0
-100
-50
50
100
-100
Grfico 4: Gas de 20 Partculas a t=2000. Ahora se procede a compararlo con un gas de 20 partculas pero con 19 partculas con el mismo momento lineal inicial y una partcula con un momento lineal distinto.
0
-100 -50 0 50 100
-50
-100 Grfico 5: Gas de 20 Partculas a t=0 con el mismo momento lineal inicial
-100
-50
-50
50
100
-100 Grfico 6: Gas de 20 Partculas a t=1000 con el mismo momento lineal inicial
0
-100 -50 0 50 100
-50
-100 Grfico 7: Gas de 20 Partculas a t=2000 con el mismo momento lineal inicial
Evidentemente, el tiempo de relajacin es mayor en el segundo caso pues an el sistema no alcanza el equilibrio en estas condiciones. Ahora, se efecta el mismo procedimiento pero esta vez para un sistema con 40 partculas.
60 40
20 0
-100
-50
50
100
80 60 40
20
0
-100 -50
-20 0 -40
-60 -80
50
100
60 40
20 0
-100
-50
50
100
Grfico 11: Gas de 40 Partculas a t=0 con el mismo momento lineal inicial
0 -100 -80 -60 -40 -20 -20 -40 -60 -80 -100 0 20 40 60 80 100
Grfico 12: Gas de 40 Partculas a t=1000 con el mismo momento lineal inicial
Grfico 13: Gas de 40 Partculas a t=2000 con el mismo momento lineal inicial.
En este caso el cambio en las condiciones iniciales no afecta mucho la evolucin del sistema. El ltimo caso no se muestra en este escrito, pues se el tiempo de corrida es sumamente alto y se debi hacer una correccin asociada a la interaccin entre las partculas.
#include <stdio.h> #include <math.h> #include <stdlib.h> #define N 40 // numero de particulas #define sigma 1 // longitud caracteristica del potencial #define epsilon 1 // energia caracteristica del potencial #define M 1 // masa de cada particula #define L 100 // longitud del sistema. N/L es la densidad double F_ijy(double x[N],double y[N],int i,int j); // fuerza entre dos particulas en y double F_ijx(double x[N],double y[N],int i,int j); // fuerza entre dos particulas en x double FTix(double x[N],double y[N],int i); // fuerza total sobre una particula en x double FTiy(double x[N],double y[N],int i); // fuerza total sobre una particula en y double Epot_ij(double x[N],double y[N],int i,int j); // energia potencial de dos particulas double Epot(double x[N],double y[N]); double Ecin(double vx[N],double vy[N]); void Actualizar(double h,double x[N],double y[N],double vx[N],double vy[N],double ax[N],double ay[N],double a2x[N],double a2y[N]); void condIniciales(double x[N],double vx[N],double y[N],double vy[N]); main(){ double x[N],y[N],vx[N],vy[N],ax[N],a2x[N],ay[N],a2y[N],h,K,U,E; int n,Pasos,i; FILE *fp1,*fp2,*fp3,*fp4,*fp5,*fp6,*fp7,*fp8,*fp9,*fp10; h=0.00207; fp1=fopen("molecular2D1.dat","w"); fp2=fopen("molecular2D2.dat","w"); fp3=fopen("molecular2D3.dat","w"); fp4=fopen("molecular2D4.dat","w"); fp5=fopen("molecular2D5.dat","w"); fp6=fopen("molecular2D6.dat","w"); fp7=fopen("molecular2D7.dat","w"); fp8=fopen("molecular2D8.dat","w"); fp9=fopen("molecular2D9.dat","w"); fp10=fopen("molecular2D10.dat","w"); condIniciales(x,vx,y,vy); Pasos=1000000; for(n=0;n<Pasos;++n){
Actualizar(h,x,y,vx,vy,ax,ay,a2x,a2y); if(n==0){ for(i=0;i<N;++i)fprintf(fp1,"%lf %lf\n",x[i],y[i]); } if(n==100000){ for(i=0;i<N;++i)fprintf(fp2,"%lf %lf\n",x[i],y[i]); } if(n==200000){ for(i=0;i<N;++i)fprintf(fp3,"%lf %lf\n",x[i],y[i]); } if(n==300000){ for(i=0;i<N;++i)fprintf(fp4,"%lf %lf\n",x[i],y[i]); } if(n==400000){ for(i=0;i<N;++i)fprintf(fp5,"%lf %lf\n",x[i],y[i]); } if(n==500000){ for(i=0;i<N;++i)fprintf(fp6,"%lf %lf\n",x[i],y[i]); } if(n==600000){ for(i=0;i<N;++i)fprintf(fp7,"%lf %lf\n",x[i],y[i]); } if(n==700000){ for(i=0;i<N;++i)fprintf(fp8,"%lf %lf\n",x[i],y[i]); } if(n==800000){ for(i=0;i<N;++i)fprintf(fp9,"%lf %lf\n",x[i],y[i]); } if(n==999000){ for(i=0;i<N;++i)fprintf(fp10,"%lf %lf\n",x[i],y[i]); } } } // Definicin de Funciones void condIniciales(double x[N],double vx[N],double y[N],double vy[N]){ int i; for(i=0;i<N;++i){ vx[i]=0.1*(2*(double)rand()/RAND_MAX-1); x[i]=L*((double)rand()/RAND_MAX); vy[i]=0.1*(2*(double)rand()/RAND_MAX-1); y[i]=L*(2*(double)rand()/RAND_MAX-1); } } void Actualizar(double h,double x[N],double y[N],double vx[N],double vy[N],double ax[N],double ay[N],double a2x[N],double a2y[N]){ int i; for(i=0;i<(N);++i) ax[i]=FTix(x,y,i)/M; // calculamos fuerza total/M for(i=0;i<(N);++i) x[i]+=vx[i]*h+0.5*ax[i]*h*h; // Verlet for(i=0;i<(N);++i) a2x[i]=FTix(x,y,i)/M; // aceleracion en n+1
for(i=0;i<(N);++i) vx[i]+=0.5*(ax[i]+a2x[i])*h; // Verlet for(i=0;i<(N);++i){ if(sqrt(x[i]*x[i])>=L){ x[i]=L;vx[i]=-vx[i]; } } for(i=0;i<(N);++i) ay[i]=FTiy(x,y,i)/M; // calculamos fuerza total/M for(i=0;i<(N);++i) y[i]+=vy[i]*h+0.5*ay[i]*h*h; // Verlet for(i=0;i<(N);++i) a2y[i]=FTiy(x,y,i)/M; // aceleracion en n+1 for(i=0;i<(N);++i) vy[i]+=0.5*(ay[i]+a2y[i])*h; // Verlet for(i=0;i<(N);++i){ if(sqrt(y[i]*y[i])>=L){ y[i]=L;vy[i]=-vy[i]; } } } double F_ijx(double x[N],double y[N],int i,int j){ // fuerza entre dos particulas en x double r=sqrt((x[i]-x[j])*(x[i]-x[j])+(y[i]-y[j])*(y[i]-y[j])); return((24*epsilon/r)*((2*pow(sigma/r,12)-pow(sigma/r,6))*(x[i]-x[j])/r));//(x[i]-x[j])/r es el coseno del angulo } double F_ijy(double x[N],double y[N],int i,int j){ // fuerza entre dos particulas en y double r=sqrt((x[i]-x[j])*(x[i]-x[j])+(y[i]-y[j])*(y[i]-y[j])); return((24*epsilon/r)*((2*pow(sigma/r,12)-pow(sigma/r,6))*(y[i]-y[j])/r));//(y[i]-y[j])/r es el seno del angulo } double FTix(double x[N],double y[N],int i){ // fuerza total sobre una particula en x int j; double f=0; for(j=0;j<N;++j) if(j!=i) f+=F_ijx(x,y,i,j); return(f); } double FTiy(double x[N],double y[N],int i){ // fuerza total sobre una particula en y int j; double f=0; for(j=0;j<N;++j) if(j!=i) f+=F_ijy(x,y,i,j); return(f); } double Epot_ij(double x[N],double y[N],int i,int j){ // energia potencial asociada a dos particulas double r=sqrt((x[i]-x[j])*(x[i]-x[j])+(y[i]-y[j])*(y[i]-y[j])); return(4*epsilon*(pow(sigma/r,12)-pow(sigma/r,6))); } double Epot(double x[N],double y[N]){ // energia potencial del sistema int i,j; double U=0; for(i=0;i<(N-1);++i) for(j=i+1;j<N;++j) U+=Epot_ij(x,y,i,j); return(U);
} double Ecin(double vx[N],double vy[N]){ // energia cintica del sistema int i; double K=0; for(i=1;i<(N-1);++i) K+=0.5*M*(vx[i]*vx[i]+vy[i]*vy[i]); return(K); } //+2*pow(sigma/sqrt((sqrt(x[i]*x[i])-L)*(sqrt(x[i]*x[i])-L)),12)