Buscar

demo plot refinado

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()

Teste o Premium para desbloquear

Aproveite todos os benefícios por 3 dias sem pagar! 😉
Já tem cadastro?

Continue navegando