← Back to team overview

fenics team mailing list archive

[noreply@xxxxxxxxxxxxx: [Branch ~fenics-core/fenics-doc/main] Rev 11: Added Poisson.ufl and main.cpp file and create link for download.]

 

Any ideas on how to keep the code in the documentation and the actual
demos in sync? Should we have a script that copies all the source
files? Or should we do the opposite: extract the demos from the
documentation?

--
Anders
--- Begin Message ---
------------------------------------------------------------
revno: 11
committer: Kristian B. Ølgaard <k.b.oelgaard@xxxxxxxxx>
branch nick: fenics-doc
timestamp: Tue 2010-04-27 13:57:42 +0200
message:
  Added Poisson.ufl and main.cpp file and create link for download.
added:
  source/demos/cpp/pde/Poisson.ufl
  source/demos/cpp/pde/poisson_main.cpp
modified:
  source/demos/cpp/pde/cpp_poisson.rst


--
lp:fenics-doc
https://code.launchpad.net/~fenics-core/fenics-doc/main

You are subscribed to branch lp:fenics-doc.
To unsubscribe from this branch go to https://code.launchpad.net/~fenics-core/fenics-doc/main/+edit-subscription
=== added file 'source/demos/cpp/pde/Poisson.ufl'
--- source/demos/cpp/pde/Poisson.ufl	1970-01-01 00:00:00 +0000
+++ source/demos/cpp/pde/Poisson.ufl	2010-04-27 11:57:42 +0000
@@ -0,0 +1,20 @@
+# Copyright (C) 2005-2009 Anders Logg.
+# Licensed under the GNU LGPL Version 2.1.
+#
+# First added:  2005
+# Last changed: 2009-09-08
+#
+# The bilinear form a(v, u) and linear form L(v) for
+# Poisson's equation.
+#
+# Compile this form with FFC: ffc -l dolfin Poisson.ufl.
+
+element = FiniteElement("Lagrange", triangle, 1)
+
+v = TestFunction(element)
+u = TrialFunction(element)
+f = Coefficient(element)
+g = Coefficient(element)
+
+a = inner(grad(v), grad(u))*dx
+L = v*f*dx + v*g*ds

=== modified file 'source/demos/cpp/pde/cpp_poisson.rst'
--- source/demos/cpp/pde/cpp_poisson.rst	2010-04-27 11:12:29 +0000
+++ source/demos/cpp/pde/cpp_poisson.rst	2010-04-27 11:57:42 +0000
@@ -10,7 +10,7 @@
 
 This text is C++ specific
 
-Some UFL code in ``Poisson.h``
+Some UFL code in :download:`Poisson.ufl`.
 
 .. code-block:: python
 
@@ -71,3 +71,6 @@
     }
   };
 
+All this should be in the same :download:`main.cpp<poisson_main.cpp>` file.
+
+

=== added file 'source/demos/cpp/pde/poisson_main.cpp'
--- source/demos/cpp/pde/poisson_main.cpp	1970-01-01 00:00:00 +0000
+++ source/demos/cpp/pde/poisson_main.cpp	2010-04-27 11:57:42 +0000
@@ -0,0 +1,87 @@
+// Copyright (C) 2006-2009 Anders Logg.
+// Licensed under the GNU LGPL Version 2.1.
+//
+// First added:  2006-02-07
+// Last changed: 2010-04-05
+//
+// This demo program solves Poisson's equation
+//
+//     - div grad u(x, y) = f(x, y)
+//
+// on the unit square with source f given by
+//
+//     f(x, y) = 10*exp(-((x - 0.5)^2 + (y - 0.5)^2) / 0.02)
+//
+// and boundary conditions given by
+//
+//     u(x, y) = 0        for x = 0 or x = 1
+// du/dn(x, y) = -sin(5*x) for y = 0 or y = 1
+
+#include <dolfin.h>
+#include "Poisson.h"
+
+using namespace dolfin;
+
+// Source term (right-hand side)
+class Source : public Expression
+{
+  void eval(Array<double>& values, const Array<double>& x) const
+  {
+    double dx = x[0] - 0.5;
+    double dy = x[1] - 0.5;
+    values[0] = 10*exp(-(dx*dx + dy*dy) / 0.02);
+  }
+};
+
+// Boundary flux (Neumann boundary condition)
+class Flux : public Expression
+{
+  void eval(Array<double>& values, const Array<double>& x) const
+  {
+    values[0] = -sin(5*x[0]);
+  }
+};
+
+// Sub domain for Dirichlet boundary condition
+class DirichletBoundary : public SubDomain
+{
+  bool inside(const Array<double>& x, bool on_boundary) const
+  {
+    return x[0] < DOLFIN_EPS or x[0] > 1.0 - DOLFIN_EPS;
+  }
+};
+
+int main()
+{
+  // Create mesh and function space
+  UnitSquare mesh(32, 32);
+  Poisson::FunctionSpace V(mesh);
+
+  // Define boundary condition
+  Constant u0(0.0);
+  DirichletBoundary boundary;
+  DirichletBC bc(V, u0, boundary);
+
+  // Define variational problem
+  Poisson::BilinearForm a(V, V);
+  Poisson::LinearForm L(V);
+  Source f;
+  Flux g;
+  L.f = f;
+  L.g = g;
+
+  // Compute solution
+  VariationalProblem problem(a, L, bc);
+  problem.parameters["linear_solver"] = "iterative";
+  Function u(V);
+  problem.solve(u);
+
+  // Save solution in VTK format
+  File file("poisson.pvd");
+  file << u;
+
+  // Plot solution
+  plot(u);
+
+  return 0;
+}


--- End Message ---

Attachment: signature.asc
Description: Digital signature


Follow ups