Jalkiera edo sedimentazioa

prev.gif (1231 bytes)home.gif (1232 bytes)next.gif (1211 bytes)

Garraio fenomenoak

Difusioa
Difusioa
Nola neurtu difusio 
koefizientea
Difusioaren
simulazioa

Higidura browndarra
marca.gif (847 bytes)Jalkiera
Boltzmann-en
konstantea
Jalkiera

java.gif (886 bytes) Saiakuntza

Erreferentzia

Programazio kodea

 

Jalkiera

Jalkiera edo "sedimentazio" fenomenoak ere higidura browndarra du oinarri, baina kanpoko indar eremu baten eraginpean gertatzen da (grabitatea). Ikuspegi makroskopikotik, difusio fenomenoaren oso antzekoa da, baina Smoluchowski-ren ekuazio deiturikoak deskribatzen du:

Non n solutu-partikulen kontzentrazioa den, x, partikulen posizioa medio horretan eta t denbora. D difusio koefizientea da eta l arraste abiadura.

Honako eredu honetan suposatzen da partikula termikoak (medioa) eta partikula browndarrak (solutua) ontzi batean itxita daudela. Partikula termikoak ontzi osoan zehar sakabanatuta daude, uniformeki, eta abiadura jakin batez mugitzen ari dira norabide guztietan, denek abiadura bera dutela suposatuko dugu (batez bestekoa, tenperaturaren proportzionala). Beraz, partikula browndarrek jasaten dituzten indarrak bi motakoak izango dira, batetik, grabitatea eta, bestetik, partikula termikoen etengabeko talkak.

Ondorengo programak zenbait parametro aldatzeko aukera ematen du: partikula browndarren masa (partikula termikoen masa, unitatetzat hartuta), partikula termikoen abiadura (batezbestekoa) eta partikula browndarrek jasaten duten kanpo-indarrararen intentsitatea.

Hasieran partikula browndarrak nola kokatu ere aukera dezakegu: denak azpiko aldean, gaineko aldean, erdian edo ausaz sakabanatuta ontzian zehar.

Denbora "nahikoa" iragan ondoren, partikula browndarrak oreka egoera batera iristen dira, eta partikulon distribuzioak bi efektu kontrajarriak erakusten ditu: batetik, grabitateak ontziaren hondorantz bidaltzen ditu partikulok eta bestetik, difusioak ontzi osoan zehar sakabanatzen ditu.

Saiakuntza

Aukeran idatz daitezke:

  • Partikula browndarren masa, dagokion laukian idatziz.
  • Partikula termikoen abiadura, dagokion laukian idatziz (abiadura hori tenperaturaren menpekoa kontsidera daiteke).
  • Kanpo indarraren intentsitatea.
  • Partikula browndarren hasierako posizioa (goian, behean, erdian edo ausaz).

Partikula termikoen masa unitatetzat hartu da eta partikula browndarrak pausagunetik abiatzen dira.

Hasi botoian klik egin simulazioa abiatzeko. Alda itzazu aukerak eta beha itzazu aldaketen eraginak.
SEdimentacionApplet1 aparecerá en un explorador compatible con JDK 1.1

Erreferentzia

Minowa H., Toya D., Mishima N. Model expriment illustrating sedimentation by microcomputer. Eur. J. Phys. 3 (1982) pp. 239-244

 

Programazio kodea

import java.util.*;
public class Sistema {
	final int nParticulas=500;
//dimensiones de la región donde se mueven las partículas
	int ancho;
	int alto;
//masa de las partículas térmicas
	final double Mt=1.0;
//masa de las partículas brownianas
	double Mb;
//velocidad de las partículas térmicas
	double Vt;
//intervalo de tiempo
	final double dt=1.0;
//Fuerza externa
	double Fa;
//Posición de las partículas
	public double[] X, Y;
//Velocidades de las partículas
	double[] VX, VY;
//números al azar
	Random rnd=new Random();

public Sistema(double Vt, double Mb, double Fa, int eleccion, int ancho, int alto) {
	this.ancho=ancho;
	this.alto=alto;
	this.Vt=Vt;
	this.Mb=Mb;
	this.Fa=Fa;
//estado inicial
	X=new double[nParticulas];
	Y=new double[nParticulas];
	VX=new double[nParticulas];
	VY=new double[nParticulas];
	for(int i=0; i<nParticulas; i++){
		VY[i]=VY[i]=0;
	}
//estado inicial
	switch(eleccion){
		case 0: //arriba
			for(int i=0; i<nParticulas; i++){
				Y[i]=0;
			}
			break;
		case 1: //abajo
			for(int i=0; i<nParticulas; i++){
				Y[i]=alto;
			}
			break;
		case 2: //en medio
			for(int i=0; i<nParticulas; i++){
				Y[i]=alto/2;
			}
			break;
		case 3: //al azar
			for(int i=0; i<nParticulas; i++){
				Y[i]=(int)(alto*rnd.nextDouble());
			}
			break;
		default:
			break;
	}
//distribución al azar en el eje horizontal
	for(int i=0; i<nParticulas; i++){
		X[i]=(int)(ancho*rnd.nextDouble());
	}
}
public void evolucion(){
	double Ux, Uy, angulo;
	for(int i=0; i<nParticulas; i++){
		angulo=2*Math.PI*rnd.nextDouble();
		Ux=VX[i]-Vt*Math.sin(angulo);
		Uy=VY[i]-Vt*Math.cos(angulo);
		angulo=2*Math.PI*rnd.nextDouble();
		VY[i]+=(Mt/(Mt+Mb))*(Uy*(Math.cos(angulo)-1)-Ux*Math.sin(angulo))+Fa*dt;
		VX[i]+=(Mt/(Mt+Mb))*(Ux*(Math.cos(angulo)-1)+Uy*Math.sin(angulo));
		X[i]+=VX[i]*dt;
		Y[i]+=VY[i]*dt;
//condiciones de contorno
		if(X[i]<0){
			X[i]=-X[i];
			VX[i]=-VX[i];
		}
		if(X[i]>ancho){
			X[i]=2*ancho-X[i];
			VX[i]=-VX[i];
		}
		if(Y[i]<0){
			Y[i]=-Y[i];
			VY[i]=-VY[i];
		}
		if(Y[i]>alto){
			Y[i]=2*alto-Y[i];
			VY[i]=-VY[i];
		}
	}
}
}