electromagnetismo i -...

8
Electromagnetismo I Semestre: 2015-2 Prof. Alejandro Reyes Coronado Ayud. Carlos Alberto Maciel Escudero Ayud. Christian Esparza L´ opez Soluci´ on al Proyecto 1 Soluci´ on por Carlos Maciel Escudero Soluci´on Proyecto 1 Genera un programa de c´ omputo que calcule num´ ericamente la soluci´ on a la ecuaci´on de Laplace en dos dimensiones para un conjunto discreto de puntos. Los puntos de la frontera exterior se encuentran a un potencial φ = 0, mientras que los puntos de la frontera interna est´ an a un potencial igual a φ = 100. Soluci´ on Para resolver el problema se program´o el M´ etodo de Relajaci´onel en Fortran 90. El m´ etodo establece que en el punto (x o ,y o ) el potencial φ (x o ,y o ) se encuentra determinado por el valor que toma ´ este ´ ultimo en sus vecinos sim´ etricos, como se muestra en la figura.

Upload: hoanghanh

Post on 28-Oct-2018

219 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Electromagnetismo I - sistemas.fciencias.unam.mxsistemas.fciencias.unam.mx/.../Proyecto_1_Resuelto.pdf · Electromagnetismo I Semestre: 2015-2 Prof. Alejandro Reyes Coronado Ayud

Electromagnetismo I

Semestre: 2015-2

Prof. Alejandro Reyes Coronado

Ayud. Carlos Alberto Maciel Escudero

Ayud. Christian Esparza Lopez

Solucion al Proyecto 1

Solucion por Carlos Maciel Escudero

Solucion Proyecto 1

Genera un programa de computo que calcule numericamente la solucion a la ecuacion deLaplace en dos dimensiones para un conjunto discreto de puntos. Los puntos de la fronteraexterior se encuentran a un potencial φ = 0, mientras que los puntos de la frontera internaestan a un potencial igual a φ = 100.

Solucion

Para resolver el problema se programo el Metodo de Relajacionel en Fortran 90. El metodoestablece que en el punto (xo, yo) el potencial φ (xo, yo) se encuentra determinado por el valorque toma este ultimo en sus vecinos simetricos, como se muestra en la figura.

Page 2: Electromagnetismo I - sistemas.fciencias.unam.mxsistemas.fciencias.unam.mx/.../Proyecto_1_Resuelto.pdf · Electromagnetismo I Semestre: 2015-2 Prof. Alejandro Reyes Coronado Ayud

La idea para demostrar lo anterior es expandir en Taylor cada uno de los potenciales vecinos:

φ (xo ± δ, yo) = φ (xo, yo)±∂φ

∂x

∣∣∣∣x=xo

δ +1

2

∂2φ

∂x2

∣∣∣∣x=xo

δ2 +O(δ3)

φ (xo, yo ± δ, zo) = φ (xo, yo)±∂φ

∂y

∣∣∣∣y=yo

δ +1

2

∂2φ

∂y2

∣∣∣∣y=yo

δ2 +O(δ3)

Entonces a segundo orden resulta que

φ (xo ± δ, yo) + φ (xo, yo ± δ) = 4φ (xo, yo) + ∇2φ∣∣(x=xo,y=yo)

δ2

Como el potencial electrostatico satisface la ecuacion de Laplace,

φ (xo, yo) =φ (xo + δ, yo) + φ (xo − δ, yo) + φ (xo, yo + δ) + φ (xo, yo − δ)

4

lo cual prueba el argumento anterior.

Una vez entendido la idea del metodo, podemos utilizar este resultado para resolver el pro-blema del proyecto. De forma que, el programa en Fortran 90 debe calcular el promedio delpotencial en cada punto conocidos los potencial vecinos. Con la intencion de resolver lo anterior,programe un algoritmo que genera una matriz donde se guardan los valores iniciales del po-tencial, estableciendo un valor aleatorio a aquellos puntos que no tienen asociado un potencial,es decir, los puntos que se encuentran fuera de los contornos de los cuadrados. Despues, esteinvoca una subrutina, denominada relajacion, que calcula una nueva matriz con el promediode los cuatro primeros vecinos y compara la matriz inicial con la nueva. Si la magnitud de ladiferencia de las matrices es mayor o igual a prec entonces vuelve a calcular una nueva matrizcon los promedios y la compara ahora con la matriz anterior; esto lo realiza hasta alcanzaruna matriz que practicamente no muestre cambio alguna con su predecesora. Finalmente, conla matriz de potencial electrico (digamos la certera), el programa invoca la subrutina campoque calcula el campo electrostatico a partir de derivar el potencial. Tanto el potencial como elcampo se guardan en archivos .dat respectivamente.

Observaciones:

1. Para calcular la norma de una matriz utilice el producto interior definido en el espacio deHilbert de las matrıces de n× n con coeficientes en los reales, dado por: 〈A,A〉 = tr (AtA). Elcual pueden verificar que es bilineal, definido positivamente y simetrico.2. La derivada numerica que utilice para calcular el campo electrico es una derivada de trespuntos, la cual necesita el punto anterior, el posterior y el punto en cuestion para calcularla derivada. Para mayor detalle de esto pueden revisar el libro: Richard Burden, ”Analisisnumerico”.3. Al ejecutar el programa les pedira en consola que indiquen el refinamiento, esto es para queindiquen que tan fina quieren hacer la malla, es decir, cuantos puntos quieren que tenga.

2

Page 3: Electromagnetismo I - sistemas.fciencias.unam.mxsistemas.fciencias.unam.mx/.../Proyecto_1_Resuelto.pdf · Electromagnetismo I Semestre: 2015-2 Prof. Alejandro Reyes Coronado Ayud

Codigo Fortran

!---------------------------------------------------------------------------!

!------------------------------------Main-----------------------------------!

!---------------------------------------------------------------------------!

!-------------------------Declaracion de la matriz--------------------------

program laplace

IMPLICIT NONE

real(16), allocatable :: V(:,:),Ex(:,:),Ey(:,:)

integer :: i,j,k,n,m

real(16) :: prec,Vo,inicial

open(1,file="potencial.dat",status="REPLACE")

open(2,file="campo.dat",status="REPLACE")

!-------------Llenado de la matriz y las condiciones iniciales---------------

write(*,*) ">>Indica el refinamiento:"

read*, n

inicial=30.

m=n/10

allocate (V(n,n),Ex(n,n),Ey(n,n))

do i=1,n

do j=1,n

if (i==4*m .AND. j>=4*m .AND. j<=7*m) then

V(i,j)=100.

else if (i==7*m .AND. j>=4*m .AND. j<=7*m) then

V(i,j)=100.

else if (j==4*m .AND. i>=4*m .AND. i<=7*m) then

V(i,j)=100.

else if (j==7*m .AND. i>=4*m .AND. i<=7*m) then

V(i,j)=100.

else if (i==1 .OR. i==10*m .OR. j==1 .OR. j==10*m) then

V(i,j)=0.

else

V(i,j)=inicial

end if

end do

end do

!---------Invoca la subrutina que calcula el metodo de relajacion------------

prec=1E-5

call relajacion(V,n,m,prec)

!----------Invoca la subrutina que calcula el campo electrico----------------

call campo(V,n,Ex,Ey)

3

Page 4: Electromagnetismo I - sistemas.fciencias.unam.mxsistemas.fciencias.unam.mx/.../Proyecto_1_Resuelto.pdf · Electromagnetismo I Semestre: 2015-2 Prof. Alejandro Reyes Coronado Ayud

!--------Escritura del potencial y el campo en un archivo .dat---------------

do i=1,n

do j=1,n

write(1,10) i,j,V(i,j)

end do

end do

10 format("",2I6.0,F20.12)

do i=1,n

do j=1,n

write(2,20) i,j,Ex(i,j)/10.,Ey(i,j)/10.

end do

end do

20 format("",2I6.0,2F20.12)

end program

!---------------------------------------------------------------------------!

!------------------Subrutina Metodo de Relajacion---------------------------!

!---------------------------------------------------------------------------!

subroutine relajacion(V,n,m,prec)

IMPLICIT NONE

integer, intent(in) :: n,m

real(16), dimension(n,n), intent(inout) :: V

real(16), intent(in) :: prec

integer :: i,j

real(16) :: dif

real(16), dimension(n,n) :: V_ant

dif=1.

do while (dif>=prec)

V_ant=V

do i=2,n-1

do j=2,n-1

if (i==4*m .AND. j>=4*m .AND. j<=7*m) then

V(i,j)=100.

else if (i==7*m .AND. j>=4*m .AND. j<=7*m) then

V(i,j)=100.

else if (j==4*m .AND. i>=4*m .AND. i<=7*m) then

V(i,j)=100.

else if (j==7*m .AND. i>=4*m .AND. i<=7*m) then

V(i,j)=100.

else if (i==1 .OR. i==10*m .OR. j==1 .OR. j==10*m) then

V(i,j)=0.

else

V(i,j)=(V(i-1,j)+V(i+1,j)+V(i,j-1)+V(i,j+1))/4.

end if

4

Page 5: Electromagnetismo I - sistemas.fciencias.unam.mxsistemas.fciencias.unam.mx/.../Proyecto_1_Resuelto.pdf · Electromagnetismo I Semestre: 2015-2 Prof. Alejandro Reyes Coronado Ayud

end do

end do

call magnitud(V-V_ant,n,dif)

print*, dif

end do

end subroutine

!---------------------------------------------------------------------------!

!--------------Subrutina que calcula el campo electrico---------------------!

!---------------------------------------------------------------------------!

subroutine campo(V,n,Ex,Ey)

IMPLICIT NONE

integer, intent(in) :: n

real(16), dimension(n,n), intent(in) :: V

real(16), dimension(n,n), intent(out) :: Ex,Ey

integer :: i,j,h

h=1

do i=2,n-1

do j=2,n-1

Ex(i,j)=-(V(i+1,j)-V(i-1,j))/(2*h)

Ey(i,j)=-(V(i,j+1)-V(i,j-1))/(2*h)

end do

end do

end subroutine

!---------------------------------------------------------------------------!

!----------Subrutina que calcula la magnitud de una matriz------------------!

!---------------------------------------------------------------------------!

subroutine magnitud(A,dimA,dif)

IMPLICIT NONE

integer, intent(in) :: dimA

real(16), dimension(dimA,dimA), intent(in) :: A

real(16), intent(out) :: dif

real(16), dimension(dimA,dimA) :: B

integer :: i

dif=0.

B=matmul(transpose(A),A)

do i=1,dimA

dif=dif+B(i,i)

end do

end subroutine

Para graficar el potencial electrostatico, las curvas equipotenciales y los vectores de campoelectrico pueden utilizar gnuplot, a continuacion les dejo el codigo para graficar cada una.

5

Page 6: Electromagnetismo I - sistemas.fciencias.unam.mxsistemas.fciencias.unam.mx/.../Proyecto_1_Resuelto.pdf · Electromagnetismo I Semestre: 2015-2 Prof. Alejandro Reyes Coronado Ayud

Codigo Gnuplot

Potencial Electrostatico

splot "potencial.dat" using 1:2:3

set xlabel "X"

set ylabel "Y"

set zlabel "V(X,Y)"

set xrange [0:100]

set yrange [0:100]

set zrange [0:100]

set title "Potencial Electrostatico"

unset key

replot

set term png

set out "potencial.png"

replot

Curvas equipotenciales

plot "potencial.dat" using 1:2:3:4 with vector head

set xlabel "X"

set ylabel "Y"

set xrange [0:100]

set yrange [0:100]

set title "Curvas Equipotenciales"

unset surface

set contour base

unset key

replot

set term png

set out "equipotenciales.png"

replot

Vectores de Campo Electrostatico

plot "campo.dat" using 1:2:3:4 with vector head

set xlabel "X"

set ylabel "Y"

set xrange [0:100]

set yrange [0:100]

set title "Lıneas de Campo Electrico"

unset key

replot

set term png

set out "campo.png"

replot

6

Page 7: Electromagnetismo I - sistemas.fciencias.unam.mxsistemas.fciencias.unam.mx/.../Proyecto_1_Resuelto.pdf · Electromagnetismo I Semestre: 2015-2 Prof. Alejandro Reyes Coronado Ayud

Yo decidı utilizar Origin para graficar cada uno de los anteriores, a continuacion les muestromis resultados:

Para realizar esta grafica solo agreguen los datos del archivo potencial.dat, luego seleccionenla ultima columna, click derecho, Properties y en Plot Designation cambien a Z. Por ultimoseleccionen las tres columnas vayan a Plot, 3D XYZ, 3D Scatter.

7

Page 8: Electromagnetismo I - sistemas.fciencias.unam.mxsistemas.fciencias.unam.mx/.../Proyecto_1_Resuelto.pdf · Electromagnetismo I Semestre: 2015-2 Prof. Alejandro Reyes Coronado Ayud

Para graficar las curvas de nivel agreguen los datos del archivo potencial.dat, luego selec-cionen la ultima columna, click derecho, Properties y en Plot Designation cambien a Z. Porultimo seleccionen las tres columnas vayan a Plot, Contour, XYX Contour.

Para graficar el campo vectorial agreguen los datos del archivo campo.dat, luego seleccionenla penultima columna, click derecho, Properties y en Plot Designation cambien a X. Por ultimoseleccionen las cuatro columnas vayan a Plot, Specialized, Vector XYXY.

8