Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Quito, Ecuador
dsantana2804 @gmail.com
31 de enero de 2017
1. Encontrar la solucin de la ecuacin de Poisson para una densidad de carga lineal distribuida
en un lazo ubicado en el centro de la regin circular.
La densidad de carga lineal que utilizaremos sera distribuida en una region rectangular.
Para resolver la ecuacin de Poisson numricamente se utiliza el Mtodo de Elementos Finitos que consiste
en dividir el dominio donde esta denida la ecuacin diferencial. Ademas se debe replantear el problema en
forma variacional. El dominio es dividido en un nmero elevado de subdominios denominados elementos
nitos. El conjunto de elementos nitos forma una particin del dominio y se le conoce como discretizacin.
Dentro de cada elemento se distinguen una serie de puntos representativos llamados nodos.
Despues de la discretizacion, se construye un espacio vectorial de dimensin nita, llamado espacio de ele-
mentos nitos, donde la solucin numrica aproximada obtenida por elementos nitos es una combinacin
lineal en dicho espacio.
Entonces del problema variacional que tenamos inicialmente al realizar la discretizacion nos conlleva a
un sistema de ecuaciones lineales, que se puede resolver en forma matricial por descomposicin LU.
El codigo en C++ implementado [1] en este trabajo utiliza este mtodo para la resolucin de la ecuacin
de Poisson. Los resultados se presentan a continuacin.
1
Figura 1: Grca de la solucin de la ecuacin de Poisson (potencial).
2
Simulaciones Monte Carlo
Considerar un sistema de 100 partculas en una caja tridimensional en contacto con un reservorio de calor a
temperatura T. La interaccion de las particulas se describe adecuadamente con el potencial de Lennard-Jones:
r 6
r 12
V (r) =
0
2
0
(2)
r r
1. Utilizar el algoritmo Monte Carlo Metropolis para calcular el valor medio de la energia
potencial del sistema para 10 valores diferentes de temperatura.
Mediante el algorimo Monte Carlo Metropoli nos permite hacer una seleccion inteligente al tomar el
promedio en el ensamble de la Energia Potencial, es decir, las energias que tendran un peso mayor en el
calculo del promedio termico son las conguraciones mas probables para un sistema, este peso viene dado
por el ensamble canonico en donde el sistema esta en equilibrio a una temperatura T. La energia de cada
copia del sistema esta asociada a una probabilidad que estara dada por
Epi
P (Epi ) = e kB T (3)
De esta manera, el mtodo Monte Carlo Metropoli nos permite hacer una mejor seleccion para obtener
el promedio trmico de una variable, al asociarla a la probabilidad de que cierta conguracin sea mas o
menos probable.
Se ha encontrado que el promedio de la Energa potencial < Ep > en el ensamble permanece constante
conforme aumenta la Temperatura, este resultado es consistente con la teora debido a que en la interaccin
de las partculas mediante el potencial de Lennard Jones solo se involucran distancias relativas entre los
tomos, en el presente trabajo se ha simulado tomos de Argn. Es decir, debido a que no hay dependencia
explicita de las velocidades de las partculas se esperara que la Temperatura no afecte al promedio trmico,
a diferencia de la Energa cintica que es proporcional a la Temperatura.
3
Referencias
[1]Bukardt, John. Florida State University , Department of Scientic Computing GNU LGPL license. (2012)
Disponible en https : //people.sc.f su.edu/ jburkardt/cpps rc/f em2dp oissonr ectangle/f em2dp oissonr ectangle.html
4
Anexos
Codigo utilizado problema 2
#include <iostream>
#include <fstream>
#include <cmath>
#include <time.h>
#include <cstdlib>
#include <vector>
double N=100002;
//caja
double sep = 0.7 ;
int ancho = 50;
int salto = 100;
double fce=0.0103125;//ev
double fct=0.46;//picosegundos
double fcpos=0.34;//nm
double temperatura=380;
double delta=0.05;
// ===========================
ofstream fs("gasPosicion.dat");
ofstream fs1("gasE7.dat");
ofstream fsp("parametros7.txt");
int main()
{
// srand(time(NULL));
vector<vector<double> > particula; //(x=0, y=1 , z=2,vx=3 ,vy=4 ,vz=5)
vector<vector<double> > particula0;
double Ep = 0;
double prob=1e-100;
double probA=1e-100;
double modulo;
double r=0;
double Em=0;
double Em2=0;
double desviacion=0;
5
particula.resize(n);
for (int i = 0; i < n; i++)
particula[i].resize(3);
// posicion inicial
//genero aleatorio
int aux;
fsp << "Separacion " << sep << endl;
for (int i = 0; i < n; i++) {
do {
aux = 0;
if (i > 0) {
for (int k = 0; k < i; k++) {
if (k != i) {
if (particula[i][0] == particula[k][0] && particula[i][1] ==
particula[k][1] && particula[i][2] == particula[k][2]) {
aux++;
}
}
}
}
} while (aux >= 1);
}
// itero
for (int k = 0; k < N; k++) {
Ep = 0;
Ep=Ep+Enp(particula, i);
// modulo = k % salto;
// if (modulo == 1) {
// fs << particula0[i][0] *fcpos<< " " << particula0[i][1] *fcpos
<< " " << particula0[i][2]*fcpos;
// fs << endl;
// }
}
// if (modulo == 1){
// fs << endl;
// fs << endl;
// }
6
//Calculo y escritura de la energia
//Seleccion montecarlo
probA=prob;
prob=exp(-Ep/(kb*temperatura));
r=prob/probA;
if(k==0)
r=2;
double randomico=aleatorio();
if(r>randomico)
{
particula0=particula;
totalE.push_back(Ep);
}
else
{
totalE.push_back(totalE[k-1]);
// cout<<"descartado "<<k<<endl;
// fsp <<"descartado "<<k<<endl;
particula=particula0;
Em=Em+(totalE[k]/N);
Em2=Em2+((totalE[k]*totalE[k])/N);
//fin escritura
}
fs.close();
desviacion=sqrt(Em2-Em*Em);
return 0;
}
vector<double> pared(vector<double> a)
{
if (a[0] <= 0)
a[0] = l1 + a[0];
if (a[1] <= 0)
7
a[1] = l2 + a[1];
if (a[2] <= 0)
a[2] = l3 + a[2];
return a;
}
return ePi;
}
return ale;
}
double aleatorio()
{
double estesi=(double) rand()/RAND_MAX;
return estesi ;