<?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</id>
	<title>Código - 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"/>
	<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=C%C3%B3digo&amp;action=history"/>
	<updated>2026-04-16T02:49:43Z</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&amp;diff=9339&amp;oldid=prev</id>
		<title>Gustavobopsin: Criou página com '       MODULE globais            IMPLICIT NONE            INTEGER :: N,L            REAL :: dx         END MODULE         PROGRAM exemplo1_poisson        USE globais        IM...'</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=C%C3%B3digo&amp;diff=9339&amp;oldid=prev"/>
		<updated>2023-02-06T02:19:59Z</updated>

		<summary type="html">&lt;p&gt;Criou página com &amp;#039;       MODULE globais            IMPLICIT NONE            INTEGER :: N,L            REAL :: dx         END MODULE         PROGRAM exemplo1_poisson        USE globais        IM...&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;
           REAL :: dx &lt;br /&gt;
       END MODULE&lt;br /&gt;
&lt;br /&gt;
       PROGRAM exemplo1_poisson&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;
       REAL,DIMENSION(:,:,:),ALLOCATABLE :: V,V1,E1,E2,E3,x,y,z,dens &lt;br /&gt;
       &lt;br /&gt;
       N = 1&lt;br /&gt;
       edge = 20*N&lt;br /&gt;
       L = edge + 1&lt;br /&gt;
       dx = 0.1&lt;br /&gt;
&lt;br /&gt;
       ALLOCATE(V(L,L,L),V1(L,L,L),E1(L,L,L),E2(L,L,L),E3(L,L,L),       &amp;amp;&lt;br /&gt;
     x(L,L,L),y(L,L,L),z(L,L,L),dens(L,L,L)) &lt;br /&gt;
       &lt;br /&gt;
       DO k=1,L&lt;br /&gt;
           DO i=1,L&lt;br /&gt;
               DO j=1,L&lt;br /&gt;
                   x(j,i,k) = -1.0 + (i-1)*dx/N&lt;br /&gt;
                   y(j,i,k) = -1.0 + (j-1)*dx/N&lt;br /&gt;
                   z(j,i,k) = -1.0 + (k-1)*dx/N&lt;br /&gt;
               END DO&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 inicia_zeros(E3)&lt;br /&gt;
       CALL initialize_V(V,dens)&lt;br /&gt;
&lt;br /&gt;
       c = 0&lt;br /&gt;
       V1 = V&lt;br /&gt;
&lt;br /&gt;
       CALL laplace_jacobi(V,V1,dens,dV,c)&lt;br /&gt;
       CALL electric_field(V,E1,E2,E3)&lt;br /&gt;
&lt;br /&gt;
       WRITE(*,*) 'Jacobi:',dV,c&lt;br /&gt;
&lt;br /&gt;
       CALL dados(x,y,z,V,E1,E2,E3)&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 inicia_zeros(E3)&lt;br /&gt;
       CALL initialize_V(V,dens)&lt;br /&gt;
&lt;br /&gt;
       c = 0&lt;br /&gt;
       &lt;br /&gt;
       CALL laplace_gauss_siedel(V,dens,dV,c)&lt;br /&gt;
       CALL electric_field(V,E1,E2,E3)&lt;br /&gt;
&lt;br /&gt;
       WRITE(*,*) 'Gauss-Siedel:',dV,c&lt;br /&gt;
&lt;br /&gt;
       CALL dados(x,y,z,V,E1,E2,E3)&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,k&lt;br /&gt;
           REAL,DIMENSION(L,L,L) :: M&lt;br /&gt;
           DO k=1,L&lt;br /&gt;
               DO i=1,L&lt;br /&gt;
                   DO j=1,L&lt;br /&gt;
                       M(j,i,k) = 0.0&lt;br /&gt;
                   END DO&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,rho)&lt;br /&gt;
!        Inicialização do potencial&lt;br /&gt;
           USE globais&lt;br /&gt;
           IMPLICIT NONE&lt;br /&gt;
           INTEGER :: i,j,k&lt;br /&gt;
           REAL,DIMENSION(L,L,L) :: V0,rho&lt;br /&gt;
!        Inicializa o potencial           &lt;br /&gt;
           DO k=1,L &lt;br /&gt;
               DO i=1,L&lt;br /&gt;
                   DO j=1,L&lt;br /&gt;
                       V0(j,i,k) = 0.0&lt;br /&gt;
                       rho(j,i,k) = 0.0&lt;br /&gt;
                   END DO&lt;br /&gt;
               END DO&lt;br /&gt;
           END DO&lt;br /&gt;
           rho(11,11,11) = 1.0/dx**3&lt;br /&gt;
           rho(11,11,10) = 1.0/dx**3&lt;br /&gt;
           rho(11,11,12) = 1.0/dx**3&lt;br /&gt;
           rho(11,10,11) = 1.0/dx**3&lt;br /&gt;
           rho(11,12,11) = 1.0/dx**3&lt;br /&gt;
           rho(10,11,11) = 1.0/dx**3&lt;br /&gt;
           rho(12,11,11) = 1.0/dx**3&lt;br /&gt;
      END SUBROUTINE initialize_V&lt;br /&gt;
&lt;br /&gt;
       SUBROUTINE update_V_jacobi(Vn,Vn1,rho,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,k&lt;br /&gt;
           REAL :: deltaV&lt;br /&gt;
           REAL,DIMENSION(L,L,L) :: Vn,Vn1,rho&lt;br /&gt;
           deltaV = 0.0&lt;br /&gt;
           DO k=2,L-1 &lt;br /&gt;
               DO i=2,L-1&lt;br /&gt;
                   DO j=2,L-1&lt;br /&gt;
                       Vn1(j,i,k) = (Vn(j+1,i,k) + Vn(j-1,i,k) +        &amp;amp;&lt;br /&gt;
     Vn(j,i+1,k) + Vn(j,i-1,k) + Vn(j,i,k+1) + Vn(j,i,k-1))/6.0         &amp;amp;&lt;br /&gt;
     + (rho(j,i,k)*dx**2)/6.0&lt;br /&gt;
                       deltaV = deltaV + abs(Vn(j,i,k) - Vn1(j,i,k))&lt;br /&gt;
                   END DO&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,rho,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&lt;br /&gt;
           REAL :: delta_v,tol&lt;br /&gt;
           REAL,DIMENSION(L,L,L) :: Vm,Vm1,rho&lt;br /&gt;
           tol = 1e-5*L*L*L &lt;br /&gt;
           delta_v = 100.0&lt;br /&gt;
           DO WHILE (delta_v .gt. tol)&lt;br /&gt;
               CALL update_V_jacobi(Vm,Vm1,rho,delta_v)&lt;br /&gt;
               CALL update_V_jacobi(Vm1,Vm,rho,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,rho,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,k&lt;br /&gt;
           REAL :: deltaV,v1,v2&lt;br /&gt;
           REAL,DIMENSION(L,L,L) :: Vn,rho&lt;br /&gt;
           deltaV = 0.0&lt;br /&gt;
           DO k=2,L-1&lt;br /&gt;
               DO i=2,L-1&lt;br /&gt;
                   DO j=2,L-1&lt;br /&gt;
                       v1 = Vn(j,i,k)&lt;br /&gt;
                       Vn(j,i,k) = (Vn(j+1,i,k) + Vn(j-1,i,k) +         &amp;amp;&lt;br /&gt;
     Vn(j,i+1,k) + Vn(j,i-1,k) + Vn(j,i,k+1) + Vn(j,i,k-1))/6.0         &amp;amp;&lt;br /&gt;
     + (rho(j,i,k)*dx**2)/6.0&lt;br /&gt;
                       v2 = Vn(j,i,k)&lt;br /&gt;
                       deltaV = deltaV + abs(v2 - v1)&lt;br /&gt;
                   END DO&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,rho,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;
           REAL,DIMENSION(L,L,L) :: Vm,rho&lt;br /&gt;
           tol = 1e-5*L*L*L &lt;br /&gt;
           delta_v = 100.0&lt;br /&gt;
           DO WHILE (delta_v .gt. tol)&lt;br /&gt;
               CALL update_V_gauss_siedel(Vm,rho,delta_v)&lt;br /&gt;
               CALL update_V_gauss_siedel(Vm,rho,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,Ez)&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,k&lt;br /&gt;
           REAL,DIMENSION(L,L,L) :: Vk,Ex,Ey,Ez&lt;br /&gt;
&lt;br /&gt;
!        Bordas k=1 e k=L&lt;br /&gt;
           DO k=1,L,L-1&lt;br /&gt;
               DO i=1,L&lt;br /&gt;
                   DO j=1,L&lt;br /&gt;
 !        Derivada para trás&lt;br /&gt;
                       IF (i == L) THEN&lt;br /&gt;
                           Ex(j,i,k) = - (Vk(j,i,k) - Vk(j,i-1,k))&lt;br /&gt;
                           Ey(j,i,k) = - (Vk(j,i,k) - Vk(j-1,i,k))&lt;br /&gt;
                           Ez(j,i,k) = - (Vk(j,i,k) - Vk(j,i,k-1))&lt;br /&gt;
!        Derivada para trás&lt;br /&gt;
                       ELSE IF (j == L) THEN&lt;br /&gt;
                           Ex(j,i,k) = - (Vk(j,i,k) - Vk(j,i-1,k))    &lt;br /&gt;
                           Ey(j,i,k) = - (Vk(j,i,k) - Vk(j-1,i,k))    &lt;br /&gt;
                           Ez(j,i,k) = - (Vk(j,i,k) - Vk(j,i,k-1))    &lt;br /&gt;
!        Derivada para trás&lt;br /&gt;
                       ELSE IF (k == L) THEN&lt;br /&gt;
                           Ex(j,i,k) = - (Vk(j,i,k) - Vk(j,i-1,k))    &lt;br /&gt;
                           Ey(j,i,k) = - (Vk(j,i,k) - Vk(j-1,i,k))    &lt;br /&gt;
                           Ez(j,i,k) = - (Vk(j,i,k) - Vk(j,i,k-1))    &lt;br /&gt;
!        Derivada para frente&lt;br /&gt;
                       ELSE&lt;br /&gt;
                           Ex(j,i,k) = - (Vk(j,i+1,k) - Vk(j,i,k))&lt;br /&gt;
                           Ey(j,i,k) = - (Vk(j+1,i,k) - Vk(j,i,k))&lt;br /&gt;
                           Ez(j,i,k) = - (Vk(j,i,k+1) - Vk(j,i,k))&lt;br /&gt;
                       END IF&lt;br /&gt;
                   END DO&lt;br /&gt;
               END DO&lt;br /&gt;
           END DO&lt;br /&gt;
!        Bordas j=1 e j=L&lt;br /&gt;
           DO j=1,L,L-1&lt;br /&gt;
               DO i=1,L&lt;br /&gt;
                   DO k=1,L&lt;br /&gt;
!        Derivada para trás&lt;br /&gt;
                       IF (i == L) THEN&lt;br /&gt;
                           Ex(j,i,k) = - (Vk(j,i,k) - Vk(j,i-1,k))&lt;br /&gt;
                           Ey(j,i,k) = - (Vk(j,i,k) - Vk(j-1,i,k))&lt;br /&gt;
                           Ez(j,i,k) = - (Vk(j,i,k) - Vk(j,i,k-1))&lt;br /&gt;
!        Derivada para trás&lt;br /&gt;
                       ELSE IF (j == L) THEN&lt;br /&gt;
                           Ex(j,i,k) = - (Vk(j,i,k) - Vk(j,i-1,k))    &lt;br /&gt;
                           Ey(j,i,k) = - (Vk(j,i,k) - Vk(j-1,i,k))    &lt;br /&gt;
                           Ez(j,i,k) = - (Vk(j,i,k) - Vk(j,i,k-1))    &lt;br /&gt;
!        Derivada para trás&lt;br /&gt;
                       ELSE IF (k == L) THEN&lt;br /&gt;
                           Ex(j,i,k) = - (Vk(j,i,k) - Vk(j,i-1,k))    &lt;br /&gt;
                           Ey(j,i,k) = - (Vk(j,i,k) - Vk(j-1,i,k))    &lt;br /&gt;
                           Ez(j,i,k) = - (Vk(j,i,k) - Vk(j,i,k-1))    &lt;br /&gt;
&lt;br /&gt;
!        Derivada para frente&lt;br /&gt;
                       ELSE&lt;br /&gt;
                           Ex(j,i,k) = - (Vk(j,i+1,k) - Vk(j,i,k))&lt;br /&gt;
                           Ey(j,i,k) = - (Vk(j+1,i,k) - Vk(j,i,k))&lt;br /&gt;
                           Ez(j,i,k) = - (Vk(j,i,k+1) - Vk(j,i,k))&lt;br /&gt;
                       END IF&lt;br /&gt;
                   END DO&lt;br /&gt;
               END DO&lt;br /&gt;
           END DO&lt;br /&gt;
!        Bordas i=1 e i=L&lt;br /&gt;
           DO i=1,L,L-1&lt;br /&gt;
               DO k=1,L&lt;br /&gt;
                   DO j=1,L&lt;br /&gt;
!        Derivada para trás&lt;br /&gt;
                       IF (i == L) THEN&lt;br /&gt;
                           Ex(j,i,k) = - (Vk(j,i,k) - Vk(j,i-1,k))&lt;br /&gt;
                           Ey(j,i,k) = - (Vk(j,i,k) - Vk(j-1,i,k))&lt;br /&gt;
                           Ez(j,i,k) = - (Vk(j,i,k) - Vk(j,i,k-1))&lt;br /&gt;
!        Derivada para trás&lt;br /&gt;
                       ELSE IF (j == L) THEN&lt;br /&gt;
                           Ex(j,i,k) = - (Vk(j,i,k) - Vk(j,i-1,k))    &lt;br /&gt;
                           Ey(j,i,k) = - (Vk(j,i,k) - Vk(j-1,i,k))    &lt;br /&gt;
                           Ez(j,i,k) = - (Vk(j,i,k) - Vk(j,i,k-1))    &lt;br /&gt;
!        Derivada para trás&lt;br /&gt;
                       ELSE IF (k == L) THEN&lt;br /&gt;
                           Ex(j,i,k) = - (Vk(j,i,k) - Vk(j,i-1,k))    &lt;br /&gt;
                           Ey(j,i,k) = - (Vk(j,i,k) - Vk(j-1,i,k))    &lt;br /&gt;
                           Ez(j,i,k) = - (Vk(j,i,k) - Vk(j,i,k-1))    &lt;br /&gt;
!        Derivada para frente&lt;br /&gt;
                       ELSE&lt;br /&gt;
                           Ex(j,i,k) = - (Vk(j,i+1,k) - Vk(j,i,k))&lt;br /&gt;
                           Ey(j,i,k) = - (Vk(j+1,i,k) - Vk(j,i,k))&lt;br /&gt;
                           Ez(j,i,k) = - (Vk(j,i,k+1) - Vk(j,i,k))&lt;br /&gt;
                       END IF&lt;br /&gt;
                   END DO&lt;br /&gt;
               END DO&lt;br /&gt;
           END DO&lt;br /&gt;
         &lt;br /&gt;
!        Derivada centrada &lt;br /&gt;
           DO k=2,L-1&lt;br /&gt;
               DO i=2,L-1&lt;br /&gt;
                   DO j=2,L-1 &lt;br /&gt;
                       Ex(j,i,k) = - (Vk(j,i+1,k) - Vk(j,i-1,k))/2.0 &lt;br /&gt;
                       Ey(j,i,k) = - (Vk(j+1,i,k) - Vk(j-1,i,k))/2.0 &lt;br /&gt;
                       Ez(j,i,k) = - (Vk(j,i,k+1) - Vk(j,i,k-1))/2.0 &lt;br /&gt;
                   END DO&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,z1,Vk,Ex,Ey,Ez)&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,m&lt;br /&gt;
           REAL,DIMENSION(L,L,L) :: Vk,Ex,Ey,Ez,x1,y1,z1&lt;br /&gt;
           CHARACTER(28),DIMENSION(2) :: a&lt;br /&gt;
           CHARACTER(27),DIMENSION(2) :: b&lt;br /&gt;
&lt;br /&gt;
           a(1) = 'potencial_poisson_jacob1.dat'&lt;br /&gt;
           a(2) = 'potencial_poisson_gauss1.dat'&lt;br /&gt;
           b(1) = 'electric_poisson_jacob1.dat'&lt;br /&gt;
           b(2) = 'electric_poisson_gauss1.dat'&lt;br /&gt;
&lt;br /&gt;
           DO m=1,2&lt;br /&gt;
           OPEN(10,FILE=a(m),STATUS='unknown',ACTION='write')&lt;br /&gt;
               DO i=1,L&lt;br /&gt;
                   DO j=1,L&lt;br /&gt;
                       DO k=1,L&lt;br /&gt;
                           WRITE(10,*) x1(j,i,k),y1(j,i,k),z1(j,i,k),Vk(j,i,k)&lt;br /&gt;
                       END DO&lt;br /&gt;
                       WRITE(10,*) ''&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(m),STATUS='unknown',ACTION='write')&lt;br /&gt;
               DO i=1,L&lt;br /&gt;
                   DO j=1,L&lt;br /&gt;
                       DO k=1,L&lt;br /&gt;
                           WRITE(20,*) x1(j,i,k),y1(j,i,k),z1(j,i,k),   &amp;amp;&lt;br /&gt;
     Ex(j,i,k),Ey(j,i,k),Ez(j,i,k)&lt;br /&gt;
                       END DO&lt;br /&gt;
                       WRITE(20,*) ''                   &lt;br /&gt;
                   END DO&lt;br /&gt;
                   WRITE(20,*) ''&lt;br /&gt;
               END DO&lt;br /&gt;
           CLOSE(20)&lt;br /&gt;
           END DO&lt;br /&gt;
       END SUBROUTINE dados&lt;/div&gt;</summary>
		<author><name>Gustavobopsin</name></author>
	</entry>
</feed>