dolfin team mailing list archive
-
dolfin team
-
Mailing list archive
-
Message #05631
Re: Applying boundary conditions using pydolfin
Quoting Marie Rognes <meg@xxxxxxxxxxx>:
> Hi,
>
> I seem to have a problem with "manually" applying boundary
> conditions to the system of linear equations. In particular,
> I get the following error
>
> Traceback (most recent call last):
> File "testbc.py", line 38, in ?
> bc.apply(A, b, a)
> File
You need to compile the form first:
(compiled_form, module, form_data) = jit(a)
bc.apply(A, b, compiled_form)
Have a look in src/pydolfin/assemble.py (LinearPDE)
> "/home/meg/src/dolfin/dolfin/local/lib/python2.4/site-packages/dolfin/dolfin.py",
> line 5742, in apply
> return _dolfin.DirichletBC_apply(*args)
> NotImplementedError: Wrong number of arguments for
> overloaded
> function 'DirichletBC_apply'.
> Possible C/C++ prototypes are:
> apply(dolfin::GenericMatrix &,dolfin::GenericVector
> &,dolfin::Form const &)
> apply(dolfin::GenericMatrix &,dolfin::GenericVector
> &,ufc::form
> const &)
> apply(dolfin::GenericMatrix &,dolfin::GenericVector
> &,dolfin::GenericVector const &,dolfin::Form const &)
> apply(dolfin::GenericMatrix &,dolfin::GenericVector
> &,dolfin::GenericVector const &,ufc::form const &)
>
> with the following code
>
> from dolfin import *
>
> class Zero(Function):
> def __init__(self, element, mesh):
> Function.__init__(self, element, mesh)
> def eval(self, values, x):
> values[0] = 0.0
>
> class DirichletBoundary(SubDomain):
> def inside(self, x, on_boundary):
> return bool(on_boundary)
>
> def Mass(element, f):
> v = TestFunction(element)
> u = TrialFunction(element)
> a = v*u*dx
> L = v*f*dx
> return [a, L]
>
> # The element space
> element = FiniteElement("Lagrange", "triangle", 1)
>
> # The mesh, boundary and boundary conditions
> mesh = UnitSquare(2,2)
> boundary = DirichletBoundary()
> zero = Zero(element, mesh)
> bc = DirichletBC(zero, mesh, boundary)
>
> # Construct and assemble the forms
> [a, L] = Mass(element, zero)
> A = assemble(a, mesh)
> b = assemble(L, mesh)
>
> # Try applying boundary conditions:
> bc.apply(A, b, a)
>
>
> Am I missing something obvious here?
>
>
> In addition, if I try just using
>
> zero = Function(mesh, 0.0)
The function 'f' has to be a FFC function when creating your form. So you have
to initialise it with an element.
Kristian
> in the above, I get the following error from ffc. However, I
> guess that I could just have a look at that when I find some
> time myself...
>
> Traceback (most recent call last):
> File "testbc.py", line 33, in ?
> [a, L] = Mass(element, zero)
> File "testbc.py", line 18, in Mass
> L = v*f*dx
> File
>
> "/home/meg/src/ffc/ffc_current/src/ffc/compiler/language/algebra.py",
> line 77, in __mul__
> return Form(self) * other
> File
>
> "/home/meg/src/ffc/ffc_current/src/ffc/compiler/language/algebra.py",
> line 631, in __mul__
> w.monomials = [p*other for p in self.monomials]
> File
>
> "/home/meg/src/ffc/ffc_current/src/ffc/compiler/language/algebra.py",
> line 446, in __mul__
> w1 = Monomial(other)
> File
>
> "/home/meg/src/ffc/ffc_current/src/ffc/compiler/language/algebra.py",
> line 405, in __init__
> self.coefficients = [Coefficient(other, index)]
> File
>
> "/home/meg/src/ffc/ffc_current/src/ffc/compiler/language/tokens.py",
> line 53, in __init__
> self.n0 = Index(function.n0)
> File
>
> "/home/meg/src/dolfin/dolfin/local/lib/python2.4/site-packages/dolfin/dolfin.py",
> line 2733, in <lambda>
> __getattr__ = lambda self, name: _swig_getattr(self,
> cpp_Function, name)
> File
>
> "/home/meg/src/dolfin/dolfin/local/lib/python2.4/site-packages/dolfin/dolfin.py",
> line 34, in _swig_getattr
> raise AttributeError,name
> AttributeError: n0
>
>
>
> Thanks!
>
> --
> Marie E. Rognes
> Ph.D Fellow,
> Centre of Mathematics for Applications,
> University of Oslo
> http://folk.uio.no/meg
>
>
> _______________________________________________
> DOLFIN-dev mailing list
> DOLFIN-dev@xxxxxxxxxx
> http://www.fenics.org/mailman/listinfo/dolfin-dev
>
Follow ups
References