module coeficientes ! objetivo: calcular os coeficientes das equações discretizadas use dados implicit none contains !------------------------------------------------- subroutine calcula_T_contornos real*8 :: x, y, pi ! auxiliares ! contorno esquerdo i = 1 do j = 1, ny np = (j-1)*nx + i T(np) = 0.0d0 end do ! contorno direito i = nx do j = 1, ny np = (j-1)*nx + i y = (j-1)*dy if ( problema == 1 ) then T(np) = y else T(np) = 0.0d0 end if end do ! contorno inferior j = 1 do i = 2, nx-1 np = (j-1)*nx + i T(np) = 0.0d0 end do ! contorno superior j = ny do i = 2, nx-1 np = (j-1)*nx + i x = (i-1)*dx if ( problema == 1 ) then T(np) = x else pi = dacos(-1.0d0) T(np) = dsin(pi*x) end if end do end subroutine calcula_T_contornos !------------------------------------------------- subroutine calcula_coeficientes_contornos real*8 :: x, y, pi ! auxiliares ! contorno esquerdo i = 1 do j = 1, ny np = (j-1)*nx + i a(np,1) = 0.0d0 a(np,2) = 0.0d0 a(np,3) = 1.0d0 a(np,4) = 0.0d0 a(np,5) = 0.0d0 b(np) = 0.0d0 end do ! contorno direito i = nx do j = 1, ny np = (j-1)*nx + i y = (j-1)*dy a(np,1) = 0.0d0 a(np,2) = 0.0d0 a(np,3) = 1.0d0 a(np,4) = 0.0d0 a(np,5) = 0.0d0 if ( problema == 1 ) then b(np) = y else b(np) = 0.0d0 end if end do ! contorno inferior j = 1 do i = 2, nx-1 np = (j-1)*nx + i a(np,1) = 0.0d0 a(np,2) = 0.0d0 a(np,3) = 1.0d0 a(np,4) = 0.0d0 a(np,5) = 0.0d0 b(np) = 0.0d0 end do ! contorno superior j = ny do i = 2, nx-1 np = (j-1)*nx + i x = (i-1)*dx a(np,1) = 0.0d0 a(np,2) = 0.0d0 a(np,3) = 1.0d0 a(np,4) = 0.0d0 a(np,5) = 0.0d0 if ( problema == 1 ) then b(np) = x else pi = dacos(-1.0d0) b(np) = dsin(pi*x) end if end do end subroutine calcula_coeficientes_contornos !------------------------------------------------- subroutine calcula_coeficientes ! call calcula_coeficientes_contornos ! pontos internos as = 1.0d0/(dy**2) aw = 1.0d0/(dx**2) ap = 2 * ( as + aw ) ae = aw an = as ! do i = 2, nx-1 ! do j = 2, ny-1 ! np = (j-1)*nx + i ! a(np,1) = -1.0d0/(dy**2) ! a(np,2) = -1.0d0/(dx**2) ! a(np,3) = 2.0d0/(dx**2) + 2.0d0/(dy**2) ! a(np,4) = -1.0d0/(dx**2) ! a(np,5) = -1.0d0/(dy**2) ! b(np) = 0.0d0 ! end do ! end do ! i = nx ! do j = 2, ny-1 ! np = (j-1)*nx + i ! a(np,1) = -1.0d0/(dy**2) ! a(np,2) = -2.0d0/(dx**2) ! a(np,3) = 2.0d0/(dx**2) + 2.0d0/(dy**2) ! a(np,4) = 0.0d0 ! a(np,5) = -1.0d0/(dy**2) ! b(np) = 0.0d0 ! end do end subroutine calcula_coeficientes !------------------------------------------------- subroutine inicializa_analitico real*8 :: x, y, pi ! auxiliares pi = dacos(-1.0d0) do i = 1, nx do j = 1, ny np = (j-1)*nx + i x = (i-1)*dx y = (j-1)*dy if ( problema == 1 ) then t(np) = x*y else t(np) = dsin(pi*x) * dsinh(pi*y) / dsinh(pi) end if end do end do end subroutine inicializa_analitico !------------------------------------------------- end module coeficientes