四辺形要素

2021年6月20日

はじめに

FEniCS で四辺形要素を用いる。

環境

  • FEniCS 2019.2.0
  • Ubuntu 20.04 LTS

問題

1 m x 1 m の領域を考え、左端を 300 K、右端を 500 K とした場合の温度分布を求める。

コード

quad.py

from dolfin import *

nx = ny = 8
mesh = UnitSquareMesh.create(nx, ny, CellType.Type.quadrilateral)
V = FunctionSpace(mesh, "P", 1)

def bcf_left(x, on_boundary):
    return on_boundary and near(x[0], 0.)

def bcf_right(x, on_boundary):
    return on_boundary and near(x[0], 1.)

bc_left = DirichletBC(V, Constant(300.), bcf_left)
bc_right = DirichletBC(V, Constant(500.), bcf_right)
bc = [bc_left, bc_right]

u = TrialFunction(V)
v = TestFunction(V)
f = Constant(0.)

a = dot(grad(u), grad(v))*dx
L = f*v*dx

T = Function(V, name="T")
solve(a == L, T, bc)

vtkfile = File("result.pvd")
vtkfile << T

実行

$ python3 quad.py

コードの解説

nx = ny = 8
mesh = UnitSquareMesh.create(nx, ny, CellType.Type.quadrilateral)
V = FunctionSpace(mesh, "P", 1)

UnitSquareMesh で create を呼び、要素タイプとして CellType.Type.quadrilateral を指定している。