Baixe o app para aproveitar ainda mais
Esta é uma pré-visualização de arquivo. Entre para ver o arquivo original
# -*- coding: utf-8 -*- """ Problema de 2a.-ordem unidimensional -(a * u,x),x - q = 0, x in ]0,1[ Condição de Dirichlet u(0) = 1 u(1) = 1 """ import numpy as np import matplotlib.pyplot as plt import math from dolfin import * # definição da malha para problema unidimensional mesh = IntervalMesh(2, 0, 1) # Definição do espaço de função na malha utilizando polinômios de Lagrange do 1o. grau V = FunctionSpace(mesh, "Lagrange", 2) # Condição de Dirichlet à esquerda def LeftDirichletBoundary( x, on_boundary): # Função que verifica se ponto x pertence ao LeftDirichletBoundary com tolerânica de +/- tol # retorna veradeiro ou falso tol = 1E-14 # tolerância necessária ao lidar com representação de número em ponto flutuante return on_boundary and abs(x[0]) < tol # Condição de Dirichlet à direita def RightDirichletBoundary( x, on_boundary): # Função que verifica se ponto x pertence ao LeftDirichletBoundary com tolerânica de +/- tol # retorna veradeiro ou falso tol = 1E-14 # tolerância necessária ao lidar com representação de número em ponto flutuante return on_boundary and abs(x[0] - 1) < tol # Definição do valor no contorno esquerdo u_L = Constant(1) # Definição do valor no contorno direito u_R = Constant(2) # Imposição das condições de contorno de Dirichlet à esquerda e à direita bcs = [DirichletBC(V, u_L, LeftDirichletBoundary), DirichletBC(V, u_R, RightDirichletBoundary)] # Definição da forma fraca u = TrialFunction(V) # função de aproximação v = TestFunction(V) # função peso q = Expression('10*sin(2*pi*x[0])',degree=12) # variável independente B = inner(grad(u), grad(v))*dx # Operador bilinear L = q*v*dx # operador linear # Resolve o problema u = Function(V) solve( B == L, u, bcs) # Plota a solução plot(u,label='plotagem não refinada') plt.title('Campo de temperatura') # Array com n pontos equiespaçados no domínio x = np.linspace( 0, 1, 50 ) # Array contendo os valores de u associado a x u_h = [u(y) for y in x] plt.plot(x,u_h,label='plotagem refinada') plt.legend()
Compartilhar