<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="pt-BR">
	<id>http://fiscomp.if.ufrgs.br/index.php?action=history&amp;feed=atom&amp;title=C%C3%B3digo_3</id>
	<title>Código 3 - Histórico de revisão</title>
	<link rel="self" type="application/atom+xml" href="http://fiscomp.if.ufrgs.br/index.php?action=history&amp;feed=atom&amp;title=C%C3%B3digo_3"/>
	<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=C%C3%B3digo_3&amp;action=history"/>
	<updated>2026-04-20T18:45:18Z</updated>
	<subtitle>Histórico de revisões para esta página neste wiki</subtitle>
	<generator>MediaWiki 1.39.4</generator>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=C%C3%B3digo_3&amp;diff=9368&amp;oldid=prev</id>
		<title>Gustavobopsin: Criou página com '       MODULE globais            IMPLICIT NONE            INTEGER :: N,L         END MODULE         PROGRAM exemplo3_laplace        USE globais        IMPLICIT NONE        INT...'</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=C%C3%B3digo_3&amp;diff=9368&amp;oldid=prev"/>
		<updated>2023-02-06T02:40:14Z</updated>

		<summary type="html">&lt;p&gt;Criou página com &amp;#039;       MODULE globais            IMPLICIT NONE            INTEGER :: N,L         END MODULE         PROGRAM exemplo3_laplace        USE globais        IMPLICIT NONE        INT...&amp;#039;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Página nova&lt;/b&gt;&lt;/p&gt;&lt;div&gt;       MODULE globais&lt;br /&gt;
           IMPLICIT NONE&lt;br /&gt;
           INTEGER :: N,L &lt;br /&gt;
       END MODULE&lt;br /&gt;
&lt;br /&gt;
       PROGRAM exemplo3_laplace&lt;br /&gt;
       USE globais&lt;br /&gt;
       IMPLICIT NONE&lt;br /&gt;
       INTEGER :: i,j,k,c,t,edge&lt;br /&gt;
       REAL :: dV&lt;br /&gt;
       INTEGER,DIMENSION(:,:),ALLOCATABLE :: masc&lt;br /&gt;
       REAL,DIMENSION(:,:),ALLOCATABLE :: V,V1,E1,E2,x,y &lt;br /&gt;
       &lt;br /&gt;
       N = 10&lt;br /&gt;
       edge = 20*N&lt;br /&gt;
       L = edge + 1&lt;br /&gt;
       &lt;br /&gt;
       ALLOCATE(V(L,L),V1(L,L),E1(L,L),E2(L,L),x(L,L),y(L,L),masc(L,L)) &lt;br /&gt;
       &lt;br /&gt;
       DO i=1,L&lt;br /&gt;
           DO j=1,L&lt;br /&gt;
               x(j,i) = -1.0 + (i-1)*0.1/N&lt;br /&gt;
               y(j,i) = -1.0 + (j-1)*0.1/N&lt;br /&gt;
           END DO&lt;br /&gt;
       END DO&lt;br /&gt;
&lt;br /&gt;
!    Calcula utilizando o algoritmo de Jacobi &lt;br /&gt;
       CALL inicia_zeros(E1)&lt;br /&gt;
       CALL inicia_zeros(E2)&lt;br /&gt;
       CALL initialize_V(V,masc)&lt;br /&gt;
&lt;br /&gt;
       c = 0&lt;br /&gt;
       V1 = V&lt;br /&gt;
&lt;br /&gt;
       CALL laplace_jacobi(V,V1,masc,dV,c)&lt;br /&gt;
       CALL electric_field(V,E1,E2)&lt;br /&gt;
&lt;br /&gt;
       WRITE(*,*) 'Jacobi:',dV,c&lt;br /&gt;
&lt;br /&gt;
       CALL dados(x,y,V,E1,E2)&lt;br /&gt;
&lt;br /&gt;
!    Calcula utilizando o algoritmo de Gauss-Siedel&lt;br /&gt;
       CALL inicia_zeros(E1)&lt;br /&gt;
       CALL inicia_zeros(E2)&lt;br /&gt;
       CALL initialize_V(V,masc)&lt;br /&gt;
&lt;br /&gt;
       c = 0&lt;br /&gt;
&lt;br /&gt;
       CALL laplace_gauss_siedel(V,masc,dV,c)&lt;br /&gt;
       CALL electric_field(V,E1,E2)&lt;br /&gt;
&lt;br /&gt;
       WRITE(*,*) 'Gauss-Siedel:',dV,c&lt;br /&gt;
&lt;br /&gt;
       CALL dados(x,y,V,E1,E2)&lt;br /&gt;
         &lt;br /&gt;
       END PROGRAM&lt;br /&gt;
&lt;br /&gt;
       SUBROUTINE inicia_zeros(M)&lt;br /&gt;
!        Inicializa uma matriz em zeros&lt;br /&gt;
           USE globais&lt;br /&gt;
           IMPLICIT NONE&lt;br /&gt;
           INTEGER :: i,j&lt;br /&gt;
           REAL,DIMENSION(L,L) :: M&lt;br /&gt;
           DO i=1,L&lt;br /&gt;
               DO j=1,L&lt;br /&gt;
                   M(j,i) = 0.0&lt;br /&gt;
               END DO&lt;br /&gt;
           END DO&lt;br /&gt;
       END SUBROUTINE inicia_zeros&lt;br /&gt;
       &lt;br /&gt;
       SUBROUTINE initialize_V(V0,mascara)&lt;br /&gt;
!        Inicialização do potencial&lt;br /&gt;
           USE globais&lt;br /&gt;
           IMPLICIT NONE&lt;br /&gt;
           INTEGER :: i,j,m,o,p,q&lt;br /&gt;
           INTEGER,DIMENSION(L,L) :: mascara&lt;br /&gt;
           REAL,DIMENSION(L,L) :: V0&lt;br /&gt;
!        Inicializa a mascara em 0           &lt;br /&gt;
           DO m=1,L&lt;br /&gt;
               DO o=1,L&lt;br /&gt;
                   mascara(o,m) = 0&lt;br /&gt;
               END DO&lt;br /&gt;
           END DO&lt;br /&gt;
!        Escreve 1's e -1's onde o V=1.0 ou V=-1.0&lt;br /&gt;
           DO q=7*N+1,13*N+1&lt;br /&gt;
               mascara(q,71) = 1&lt;br /&gt;
               mascara(q,131) = -1&lt;br /&gt;
           END DO&lt;br /&gt;
!        Escreve o potencial&lt;br /&gt;
           DO i=1,L&lt;br /&gt;
               DO j=1,L&lt;br /&gt;
                   IF (mascara(j,i) == 1) THEN&lt;br /&gt;
                       V0(j,i) = 1.0 &lt;br /&gt;
                   ELSE IF (mascara(j,i) == -1) THEN&lt;br /&gt;
                       V0(j,i) = -1.0 &lt;br /&gt;
                   ELSE &lt;br /&gt;
                       V0(j,i) = 0.0&lt;br /&gt;
                   END IF &lt;br /&gt;
               END DO &lt;br /&gt;
           END DO &lt;br /&gt;
       END SUBROUTINE initialize_V&lt;br /&gt;
&lt;br /&gt;
       SUBROUTINE update_V_jacobi(Vn,Vn1,mascara,deltaV)&lt;br /&gt;
!        Calcula a atualização uma vez&lt;br /&gt;
           USE globais&lt;br /&gt;
           IMPLICIT NONE&lt;br /&gt;
           INTEGER :: i,j&lt;br /&gt;
           REAL :: deltaV&lt;br /&gt;
           INTEGER,DIMENSION(L,L) :: mascara &lt;br /&gt;
           REAL,DIMENSION(L,L) :: Vn,Vn1&lt;br /&gt;
           deltaV = 0.0 &lt;br /&gt;
           DO i=2,L-1&lt;br /&gt;
               DO j=2,L-1&lt;br /&gt;
                   IF (mascara(j,i) == 0) THEN&lt;br /&gt;
                       Vn1(j,i) = (Vn(j+1,i) + Vn(j-1,i) + Vn(j,i+1) + &amp;amp;&lt;br /&gt;
     Vn(j,i-1))/4.0&lt;br /&gt;
                       deltaV = deltaV + abs(Vn(j,i) - Vn1(j,i))&lt;br /&gt;
                   END IF&lt;br /&gt;
               END DO&lt;br /&gt;
           END DO&lt;br /&gt;
       END SUBROUTINE update_V_jacobi &lt;br /&gt;
&lt;br /&gt;
       SUBROUTINE laplace_jacobi(Vm,Vm1,mascara,delta_v,cont)&lt;br /&gt;
!        Implementa o método de Jacobi&lt;br /&gt;
           USE globais&lt;br /&gt;
           IMPLICIT NONE&lt;br /&gt;
           INTEGER :: cont,x&lt;br /&gt;
           REAL :: delta_v,tol&lt;br /&gt;
           INTEGER,DIMENSION(L,L) :: mascara&lt;br /&gt;
           REAL,DIMENSION(L,L) :: Vm,Vm1&lt;br /&gt;
           tol = 1e-5*L*L &lt;br /&gt;
           delta_v = 41.0&lt;br /&gt;
           DO WHILE (delta_v .gt. tol)&lt;br /&gt;
               CALL update_V_jacobi(Vm,Vm1,mascara,delta_v)&lt;br /&gt;
               CALL update_V_jacobi(Vm1,Vm,mascara,delta_v)&lt;br /&gt;
               cont = cont+1&lt;br /&gt;
           END DO&lt;br /&gt;
       END SUBROUTINE laplace_jacobi&lt;br /&gt;
&lt;br /&gt;
       SUBROUTINE update_V_gauss_siedel(Vn,mascara,deltaV)&lt;br /&gt;
!        Calcula a atualização uma vez&lt;br /&gt;
           USE globais&lt;br /&gt;
           IMPLICIT NONE&lt;br /&gt;
           INTEGER :: i,j&lt;br /&gt;
           REAL :: deltaV,v1,v2&lt;br /&gt;
           INTEGER,DIMENSION(L,L) :: mascara&lt;br /&gt;
           REAL,DIMENSION(L,L) :: Vn&lt;br /&gt;
           deltaV = 0.0&lt;br /&gt;
           DO i=2,L-1&lt;br /&gt;
               DO j=2,L-1&lt;br /&gt;
                   IF (mascara(j,i) == 0) THEN&lt;br /&gt;
                       v1 = Vn(j,i)&lt;br /&gt;
                       Vn(j,i) = (Vn(j+1,i) + Vn(j-1,i) + Vn(j,i+1) +   &amp;amp;&lt;br /&gt;
     Vn(j,i-1))/4.0&lt;br /&gt;
                       v2 = Vn(j,i)&lt;br /&gt;
                       deltaV = deltaV + abs(v2 - v1)&lt;br /&gt;
                   END IF&lt;br /&gt;
               END DO&lt;br /&gt;
           END DO&lt;br /&gt;
       END SUBROUTINE update_V_gauss_siedel&lt;br /&gt;
&lt;br /&gt;
       SUBROUTINE laplace_gauss_siedel(Vm,mascara,delta_v,cont)&lt;br /&gt;
!        Implementa o método de Gauss_Siedel&lt;br /&gt;
           USE globais&lt;br /&gt;
           IMPLICIT NONE&lt;br /&gt;
           INTEGER :: cont&lt;br /&gt;
           REAL :: delta_v,tol&lt;br /&gt;
           INTEGER,DIMENSION(L,L) :: mascara&lt;br /&gt;
           REAL,DIMENSION(L,L) :: Vm&lt;br /&gt;
           tol = 1e-5*L*L&lt;br /&gt;
           delta_v = 10.0&lt;br /&gt;
           DO WHILE (delta_v .gt. tol)&lt;br /&gt;
               CALL update_V_gauss_siedel(Vm,mascara,delta_v)&lt;br /&gt;
               CALL update_V_gauss_siedel(Vm,mascara,delta_v)&lt;br /&gt;
               cont = cont+1&lt;br /&gt;
           END DO&lt;br /&gt;
       END SUBROUTINE laplace_gauss_siedel&lt;br /&gt;
&lt;br /&gt;
       SUBROUTINE electric_field(Vk,Ex,Ey)&lt;br /&gt;
!        Calcula o campo elétrico a partir do potencial   &lt;br /&gt;
           USE globais&lt;br /&gt;
           IMPLICIT NONE&lt;br /&gt;
           INTEGER :: i,j&lt;br /&gt;
           REAL,DIMENSION(L,L) :: Vk,Ex,Ey&lt;br /&gt;
!        Derivada para frente (bordas)         &lt;br /&gt;
           DO i=1,L-1&lt;br /&gt;
               Ex(1,i) = - (Vk(1,i+1) - Vk(1,i)) &lt;br /&gt;
               Ex(L,i) = - (Vk(L,i+1) - Vk(L,i))               &lt;br /&gt;
               Ey(i,1) = - (Vk(i+1,1) - Vk(i,1)) &lt;br /&gt;
               Ey(i,L) = - (Vk(i+1,L) - Vk(i,L)) &lt;br /&gt;
           END DO&lt;br /&gt;
!        Derivada para trás (bordas)&lt;br /&gt;
           Ex(1,L) = - (Vk(1,L) - Vk(1,L-1))&lt;br /&gt;
           Ex(L,L) = - (Vk(L,L) - Vk(L,L-1))&lt;br /&gt;
           Ey(L,1) = - (Vk(L,1) - Vk(L-1,1))&lt;br /&gt;
           Ey(L,L) = - (Vk(L,L) - Vk(L-1,L))&lt;br /&gt;
!        Derivada centrada&lt;br /&gt;
           DO i=2,L-1&lt;br /&gt;
               DO j=2,L-1 &lt;br /&gt;
                   Ex(j,i) = - (Vk(j,i+1) - Vk(j,i-1))/2.0 &lt;br /&gt;
                   Ey(j,i) = - (Vk(j+1,i) - Vk(j-1,i))/2.0 &lt;br /&gt;
               END DO&lt;br /&gt;
           END DO&lt;br /&gt;
       END SUBROUTINE electric_field&lt;br /&gt;
&lt;br /&gt;
       SUBROUTINE dados(x1,y1,Vk,Ex,Ey)&lt;br /&gt;
!        Imprime os dados em arquivos&lt;br /&gt;
           USE globais&lt;br /&gt;
           IMPLICIT NONE&lt;br /&gt;
           INTEGER :: i,j,k&lt;br /&gt;
           REAL,DIMENSION(L,L) :: Vk,Ex,Ey,x1,y1&lt;br /&gt;
           CHARACTER(28),DIMENSION(2) :: a&lt;br /&gt;
           CHARACTER(27),DIMENSION(2) :: b&lt;br /&gt;
           CHARACTER(32),DIMENSION(2) :: c&lt;br /&gt;
&lt;br /&gt;
           a(1) = 'potencial_laplace_jacob3.dat'&lt;br /&gt;
           a(2) = 'potencial_laplace_gauss3.dat'&lt;br /&gt;
           b(1) = 'electric_laplace_jacob3.dat'&lt;br /&gt;
           b(2) = 'electric_laplace_gauss3.dat'&lt;br /&gt;
           c(1) = 'equipotencial_laplace_jacob3.dat'&lt;br /&gt;
           c(2) = 'equipotencial_laplace_gauss3.dat'&lt;br /&gt;
&lt;br /&gt;
           DO k=1,2&lt;br /&gt;
           OPEN(10,FILE=a(k),STATUS='unknown',ACTION='write')&lt;br /&gt;
               DO i=1,L&lt;br /&gt;
                   DO j=1,L&lt;br /&gt;
                       WRITE(10,*) x1(j,i),y1(j,i),Vk(j,i)&lt;br /&gt;
                   END DO&lt;br /&gt;
                   WRITE(10,*) ''&lt;br /&gt;
               END DO&lt;br /&gt;
           CLOSE(10)&lt;br /&gt;
&lt;br /&gt;
           OPEN(20,FILE=b(k),STATUS='unknown',ACTION='write')&lt;br /&gt;
               DO i=1,L&lt;br /&gt;
                   DO j=1,L&lt;br /&gt;
                       WRITE(20,*) x1(j,i),y1(j,i),Ex(j,i),Ey(j,i)&lt;br /&gt;
                   END DO&lt;br /&gt;
                   WRITE(20,*) ''&lt;br /&gt;
               END DO&lt;br /&gt;
           CLOSE(20)&lt;br /&gt;
&lt;br /&gt;
           OPEN(30,FILE=c(k),STATUS='unknown',ACTION='write')&lt;br /&gt;
               DO i=1,L&lt;br /&gt;
                   DO j=1,L&lt;br /&gt;
                       IF ((Vk(j,i) .lt. 0.96) .and. (Vk(j,i) .gt. 0.94 &amp;amp;&lt;br /&gt;
     )) THEN&lt;br /&gt;
                           WRITE(30,*) x1(j,i),y1(j,i)&lt;br /&gt;
                       ELSE IF ((Vk(j,i) .lt. 0.76) .and. (Vk(j,i) .gt. &amp;amp;&lt;br /&gt;
     0.74 )) THEN&lt;br /&gt;
                           WRITE(30,*) x1(j,i),y1(j,i)&lt;br /&gt;
                       ELSE IF ((Vk(j,i) .lt. 0.56) .and. (Vk(j,i) .gt. &amp;amp;&lt;br /&gt;
     0.54 )) THEN&lt;br /&gt;
                           WRITE(30,*) x1(j,i),y1(j,i)&lt;br /&gt;
                       ELSE IF ((Vk(j,i) .lt. 0.36) .and. (Vk(j,i) .gt. &amp;amp;&lt;br /&gt;
     0.34 )) THEN&lt;br /&gt;
                           WRITE(30,*) x1(j,i),y1(j,i)&lt;br /&gt;
                       ELSE IF ((Vk(j,i) .lt. 0.16) .and. (Vk(j,i) .gt. &amp;amp;&lt;br /&gt;
     0.14 )) THEN&lt;br /&gt;
                           WRITE(30,*) x1(j,i),y1(j,i)&lt;br /&gt;
                       ELSE IF ((Vk(j,i) .gt. -0.96) .and. (Vk(j,i) .lt.&amp;amp;&lt;br /&gt;
     -0.94 )) THEN&lt;br /&gt;
                           WRITE(30,*) x1(j,i),y1(j,i)&lt;br /&gt;
                       ELSE IF ((Vk(j,i) .gt. -0.76) .and. (Vk(j,i) .lt.&amp;amp;&lt;br /&gt;
     -0.74 )) THEN&lt;br /&gt;
                           WRITE(30,*) x1(j,i),y1(j,i)&lt;br /&gt;
                       ELSE IF ((Vk(j,i) .gt. -0.56) .and. (Vk(j,i) .lt.&amp;amp;&lt;br /&gt;
     -0.54 )) THEN&lt;br /&gt;
                           WRITE(30,*) x1(j,i),y1(j,i)&lt;br /&gt;
                       ELSE IF ((Vk(j,i) .gt. -0.36) .and. (Vk(j,i) .lt.&amp;amp;&lt;br /&gt;
     -0.34 )) THEN&lt;br /&gt;
                           WRITE(30,*) x1(j,i),y1(j,i)&lt;br /&gt;
                       ELSE IF ((Vk(j,i) .gt. -0.16) .and. (Vk(j,i) .lt.&amp;amp;&lt;br /&gt;
     -0.14 )) THEN&lt;br /&gt;
                           WRITE(30,*) x1(j,i),y1(j,i)&lt;br /&gt;
                       END IF&lt;br /&gt;
                   END DO&lt;br /&gt;
               END DO&lt;br /&gt;
           CLOSE(30)&lt;br /&gt;
           END DO&lt;br /&gt;
       END SUBROUTINE dados&lt;/div&gt;</summary>
		<author><name>Gustavobopsin</name></author>
	</entry>
</feed>