Martin Sandve Alnæs wrote: > 2008/8/23 Garth N. Wells <[EMAIL PROTECTED]>: >> >> Martin Sandve Alnæs wrote: >>> 2008/8/23 Garth N. Wells <[EMAIL PROTECTED]>: >>>> Martin Sandve Alnæs wrote: >>>>> 2008/8/23 Garth N. Wells <[EMAIL PROTECTED]>: >>>>>> Martin Sandve Alnæs wrote: >>>>>>> Add an instantiation of Array<DirichletBC*> to the .i files beside >>>>>>> ArrayFunctionPtr. >>>>>> I added this. >>>>>> >>>>>>> An use cpp_DirichletBC. >>>>>> I tried this is demo/pde/sym-dirichlet-bc/python/demo.py, but I get >>>>>> >>>>>> Traceback (most recent call last): >>>>>> File "demo.py", line 55, in <module> >>>>>> bc = cpp_DirichletBC(u0, mesh, boundary) >>>>>> NameError: name 'cpp_DirichletBC' is not defined >>>>> from dolfin.dolfin import cpp_DirichletBC >>>>> >>>>> Note that cpp_DirichletBC won't hold on to python referenced objects, >>>>> so you need to keep some python references to your meshfunctions >>>>> and vectors etc. to avoid garbage collection. >>>>> >>>>>> As you say, this is a problem with this >>>>>>> "inheritance pattern". >>>>>>> >>>>>> Is there a way to 'up cast' Python objects. For example, DirichletBC is >>>>>> derived from cpp_DirichletBC, so can I get a cast a DirichletBC object >>>>>> to >>>>>> a >>>>>> cpp_DirichletBC object? >>>>>> >>>>>> Garth >>>>> The DirichletBC object is already a cpp_DirichletBC object, it obviously >>>>> works fine for single objects, so the problem is in the vector typemap. >>>>> Maybe you can create an empty ArrayDirichletBC() and add one item >>>>> at a time to it? >>>>> >>>>> a = ArrayDirichletBC() >>>>> for b in bcs: >>>>> a.push_back(b) >>>>> >>>> No luck. I've pushed some code, but it doesn't work. Try running >>>> >>>> demo/pde/sym-dirichlet-bc/python/demo.py >>>> >>>> Garth >>> I'll try it. But this should work, we do the exact same thing with >>> functions in assemble.py. >>> >>> _coefficients = ArrayFunctionPtr() >>> ... >>> for c in form_data.coefficients: >>> _coefficients.push_back(c.f) >>> >>> form_data is from ffc.jit, so c.f is a dolfin.Function, the kind that >>> inherits ffc.Function as well as cpp_Function. >>> >> I included Array.h in assemble.cpp and that did the trick (I've since moved >> the #include to Assemble.h). I have no idea why this makes it work. >> >> Garth > > Are you sure it wasn't the change I checked in? > SWIG doesn't look at the .cpp files. >
Yes. Have a go. Garth > I instantiated std::vector<...> in addition to the > dolfin::Array<...>line you added first. > Otherwise SWIG wouldn't know the details of the base class for dolfin::Array. > > -- > Martin _______________________________________________ DOLFIN-dev mailing list [email protected] http://www.fenics.org/mailman/listinfo/dolfin-dev
