Editing Fem-fenics
Jump to navigation
Jump to search
The edit can be undone. Please check the comparison below to verify that this is what you want to do, and then publish the changes below to finish undoing the edit.
Latest revision | Your text | ||
Line 1: | Line 1: | ||
Package for solving Partial Differential Equations based on Fenics. | Package for solving Partial Differential Equations based on Fenics. | ||
== Tutorials == | == Tutorials == | ||
=== Poisson Equation === | === Poisson Equation === | ||
Here is a first example for the solution of the Poisson equation. | Here is a first example for the solution of the Poisson equation. | ||
The equation being solved is | The equation being solved is | ||
<math>-\mathrm{div}\ ( \nabla u(x, y) ) ) = 1 \qquad \mbox{ in } \Omega</math> | <math> -\mathrm{div}\ ( \nabla u(x, y) ) ) = 1 \qquad \mbox{ in } \Omega</math> | ||
<math>u(x, y) = 0 \qquad \mbox{ on } \Gamma_D</math> | <math> u(x, y) = 0 \qquad \mbox{ on } \Gamma_D </math> | ||
<math>(\nabla u(x, y) ) \cdot \mathbf{n} = 0 \qquad \mbox{ on } \Gamma_N</math> | <math> ( \nabla u(x, y) ) \cdot \mathbf{n} = 0 \qquad \mbox{ on } \Gamma_N</math> | ||
A complete description of the problem is avilable on the [http://fenicsproject.org/documentation/dolfin/1.2.0/python/demo/pde/poisson/python/documentation.html Fenics website.] | A complete description of the problem is avilable on the [http://fenicsproject.org/documentation/dolfin/1.2.0/python/demo/pde/poisson/python/documentation.html Fenics website.] | ||
<div style="width: 100%;"> | <div style="width: 100%;"> | ||
<div style="float:left; width: 48%"> | <div style="float:left; width: 48%"> | ||
{{Code|Define Poisson problem with fem-fenics|<syntaxhighlight lang="octave" style="font-size:13px"> | {{Code|Define Poisson problem with fem-fenics|<syntaxhighlight lang="octave" style="font-size:13px"> | ||
pkg load fem-fenics msh | pkg load fem-fenics msh | ||
import_ufl_Problem ('Poisson') | |||
# Create mesh and define function space | # Create mesh and define function space | ||
Line 50: | Line 23: | ||
mesh = Mesh(msh2m_structured_mesh (x, y, 1, 1:4)); | mesh = Mesh(msh2m_structured_mesh (x, y, 1, 1:4)); | ||
# File Poisson.ufl | |||
# element = FiniteElement("Lagrange", triangle, 1) | |||
V = FunctionSpace('Poisson', mesh); | V = FunctionSpace('Poisson', mesh); | ||
Line 61: | Line 36: | ||
# Define variational problem | # Define variational problem | ||
# | # File Poisson.ufl | ||
# u = TrialFunction(element) | # u = TrialFunction(element) | ||
# v = TestFunction(element) | # v = TestFunction(element) | ||
Line 71: | Line 46: | ||
g = Expression ('g', @(x,y) sin (5.0 * x)); | g = Expression ('g', @(x,y) sin (5.0 * x)); | ||
# | # File Poisson.ufl | ||
# a = inner(grad(u), grad(v))*dx | # a = inner(grad(u), grad(v))*dx | ||
# L = f*v*dx + g*v*ds | # L = f*v*dx + g*v*ds | ||
a = BilinearForm ('Poisson' | a = BilinearForm ('Poisson', V); | ||
L = LinearForm ('Poisson', V, f, g); | L = LinearForm ('Poisson', V, f, g); | ||
Line 99: | Line 74: | ||
# Create mesh and define function space | |||
mesh = UnitSquareMesh(32, 32) | |||
V = FunctionSpace(mesh, "Lagrange", 1) | V = FunctionSpace(mesh, "Lagrange", 1) | ||
Line 154: | Line 120: | ||
# Plot solution | # Plot solution | ||
plot(u, interactive=True) | plot(u, interactive=True) | ||
</syntaxhighlight>}} | </syntaxhighlight>}} | ||
</div> | </div> | ||
Line 161: | Line 125: | ||
<div style="clear:both"></div> | <div style="clear:both"></div> | ||
=== Mixed Formulation for Poisson Equation === | |||
A complete description of the problem is avilable on the [http://fenicsproject.org/documentation/dolfin/1.2.0/python/demo/pde/mixed-poisson/python/documentation.html Fenics website.] | |||
A complete description of the problem is | |||
<div style="width: 100%;"> | <div style="width: 100%;"> | ||
<div style="float:left; width: 48%"> | <div style="float:left; width: 48%"> | ||
{{Code|Define MixedPoisson problem with fem-fenics|<syntaxhighlight lang="octave" style="font-size:13px"> | {{Code|Define MixedPoisson problem with fem-fenics|<syntaxhighlight lang="octave" style="font-size:13px"> | ||
pkg load fem-fenics msh | pkg load fem-fenics msh | ||
import_ufl_Problem ('MixedPoisson') | |||
# Create mesh | # Create mesh | ||
Line 198: | Line 139: | ||
mesh = Mesh(msh2m_structured_mesh (x, y, 1, 1:4)); | mesh = Mesh(msh2m_structured_mesh (x, y, 1, 1:4)); | ||
# ufl | # File MixedPoisson.ufl | ||
# BDM = FiniteElement("BDM", triangle, 1) | # BDM = FiniteElement("BDM", triangle, 1) | ||
# DG = FiniteElement("DG", triangle, 0) | # DG = FiniteElement("DG", triangle, 0) | ||
Line 205: | Line 146: | ||
# Define trial and test function | # Define trial and test function | ||
# ufl | # File MixedPoisson.ufl | ||
# (sigma, u) = TrialFunctions(W) | # (sigma, u) = TrialFunctions(W) | ||
# (tau, v) = TestFunctions(W) | # (tau, v) = TestFunctions(W) | ||
Line 214: | Line 155: | ||
# Define variational form | # Define variational form | ||
# ufl | # File MixedPoisson.ufl | ||
# a = (dot(sigma, tau) + div(tau)*u + div(sigma)*v)*dx | # a = (dot(sigma, tau) + div(tau)*u + div(sigma)*v)*dx | ||
# L = - f*v*dx | # L = - f*v*dx | ||
a = BilinearForm ('MixedPoisson' | a = BilinearForm ('MixedPoisson', V); | ||
L = LinearForm ('MixedPoisson', V, f); | L = LinearForm ('MixedPoisson', V, f); | ||
Line 260: | Line 201: | ||
{{Code|Define MixedPoisson problem with fenics python|<syntaxhighlight lang="python" style="font-size:13px"> | {{Code|Define MixedPoisson problem with fenics python|<syntaxhighlight lang="python" style="font-size:13px"> | ||
from dolfin import * | from dolfin import * | ||
# Create mesh | # Create mesh | ||
mesh = UnitSquareMesh(32, 32) | mesh = UnitSquareMesh(32, 32) | ||
Line 291: | Line 216: | ||
(sigma, u) = TrialFunctions(W) | (sigma, u) = TrialFunctions(W) | ||
(tau, v) = TestFunctions(W) | (tau, v) = TestFunctions(W) | ||
Line 337: | Line 263: | ||
interactive() | interactive() | ||
</syntaxhighlight>}} | </syntaxhighlight>}} | ||
</div> | </div> | ||
Line 344: | Line 269: | ||
=== Hyperelasticity === | === Hyperelasticity === | ||
This time we compare the code with the | This time we compare the code with the c++ version of DOLFIN. | ||
A complete description of the problem is avilable on the [http://fenicsproject.org/documentation/dolfin/1.2.0/cpp/demo/pde/hyperelasticity/cpp/documentation.html Fenics website.] | |||
A complete description of the problem is avilable on the [http://fenicsproject.org/documentation/dolfin/1.2.0/cpp/demo/pde/hyperelasticity/cpp/documentation.html Fenics website.] | |||
{{Code|HyperElasticity Problem: the ufl file|<syntaxhighlight lang="octave" style="font-size:13px"> | {{Code|HyperElasticity Problem: the ufl file|<syntaxhighlight lang="octave" style="font-size:13px"> | ||
# Function spaces | # Function spaces | ||
Line 393: | Line 309: | ||
J = derivative(F, u, du) | J = derivative(F, u, du) | ||
</syntaxhighlight>}} | </syntaxhighlight>}} | ||
Line 402: | Line 317: | ||
{{Code|Define HyperElasticity problem with fem-fenics|<syntaxhighlight lang="octave" style="font-size:13px"> | {{Code|Define HyperElasticity problem with fem-fenics|<syntaxhighlight lang="octave" style="font-size:13px"> | ||
pkg load fem-fenics msh | pkg load fem-fenics msh | ||
problem = 'HyperElasticity'; | |||
import_ufl_Problem (problem); | |||
Line 586: | Line 462: | ||
using namespace dolfin; | using namespace dolfin; | ||
// Sub domain for clamp at left end | // Sub domain for clamp at left end | ||
Line 734: | Line 571: | ||
// Solve nonlinear variational problem F(u; v) = 0 | // Solve nonlinear variational problem F(u; v) = 0 | ||
solve(F == 0, u, bcs, J); | solve(F == 0, u, bcs, J); | ||
Line 760: | Line 596: | ||
return 0; | return 0; | ||
} | } | ||
</syntaxhighlight>}} | </syntaxhighlight>}} | ||
</div> | </div> | ||
</div> | </div> | ||
<div style="clear:both"></div> | <div style="clear:both"></div> | ||
=== Incompressible Navier-Stokes equations === | === Incompressible Navier-Stokes equations === | ||
A complete description of the problem is avilable on the [http://fenicsproject.org/documentation/dolfin/1.2.0/python/demo/pde/navier-stokes/python/documentation.html Fenics website.] | |||
A complete description of the | |||
<div style="width: 100%;"> | <div style="width: 100%;"> | ||
Line 846: | Line 682: | ||
# eq = (1/k)*inner(u - u0, v)*dx + inner(grad(u0)*u0, v)*dx \ | # eq = (1/k)*inner(u - u0, v)*dx + inner(grad(u0)*u0, v)*dx \ | ||
# + nu*inner(grad(u), grad(v))*dx - inner(f, v)*dx | # + nu*inner(grad(u), grad(v))*dx - inner(f, v)*dx | ||
a1 = BilinearForm ('TentativeVelocity' | a1 = BilinearForm ('TentativeVelocity', V, k); | ||
Line 852: | Line 688: | ||
# a = inner(grad(p), grad(q))*dx | # a = inner(grad(p), grad(q))*dx | ||
# L = -(1/k)*div(u1)*q*dx | # L = -(1/k)*div(u1)*q*dx | ||
a2 = BilinearForm ('PressureUpdate' | a2 = BilinearForm ('PressureUpdate', Q); | ||
# Velocity update | # Velocity update | ||
# a = inner(u, v)*dx | # a = inner(u, v)*dx | ||
# L = inner(u1, v)*dx - k*inner(grad(p1), v)*dx | # L = inner(u1, v)*dx - k*inner(grad(p1), v)*dx | ||
a3 = BilinearForm ('VelocityUpdate' | a3 = BilinearForm ('VelocityUpdate', V); | ||
# Assemble matrices | # Assemble matrices | ||
Line 917: | Line 753: | ||
</div> | </div> | ||
<div style="float:right; width: 48%"> | <div style="float:right; width: 48%"> | ||
{{Code|Define NS problem with fenics python |<syntaxhighlight lang="python" style="font-size:13px"> | {{Code|Define NS problem with fenics python|<syntaxhighlight lang="python" style="font-size:13px"> | ||
from dolfin import * | from dolfin import * | ||
Line 1,059: | Line 895: | ||
# Hold plot | # Hold plot | ||
interactive() | interactive() | ||
</syntaxhighlight>}} | </syntaxhighlight>}} | ||
</div> | </div> | ||
Line 1,065: | Line 900: | ||
<div style="clear:both"></div> | <div style="clear:both"></div> | ||
[[Category: | [[Category:OctaveForge]] | ||
[[Category:Packages]] |