Anders Logg wrote: > On Mon, Nov 03, 2008 at 11:22:26AM +0000, Garth N. Wells wrote: >> >> Anders Logg wrote: >>> On Sun, Nov 02, 2008 at 06:29:25PM +0000, Garth N. Wells wrote: >>>> Anders Logg wrote: >>>>> On Sun, Nov 02, 2008 at 05:52:21PM +0000, Garth N. Wells wrote: >>>>>> Do we want to insist that Dirichlet bc functions that do not appear >>>>>> inside a form are constructed with a FunctionSpace? DirichletBC is >>>>>> supplied with a FunctionSpace, so if the bc Function does not have a >>>>>> FunctionSpace, we could attach one automatically. >>>>>> >>>>>> Garth >>>>>> _______________________________________________ >>>>>> DOLFIN-dev mailing list >>>>>> [email protected] >>>>>> http://www.fenics.org/mailman/listinfo/dolfin-dev >>>>> I think this is already handled. Look in the Poisson demo. It uses a >>>>> Constant to set the BC and it does not have a FunctionSpace attached >>>>> to it. The DirichletBC class now uses its own FunctionSpace rather >>>>> than the one that the Function has (if any). There is a check (in >>>>> DirichletBC::check()) that checks that the FunctionSpace for the >>>>> Function is the same as the one in the DirichletBC. >>>>> >>>> It works for Constant, but not for Functions. I was getting an error >>>> when Function::interpolate is called. Function::interpolate leads to >>>> eval being called, in which case there is a test for the FunctionSpace >>>> which fails. Constant provides its own eval and therefore doesn't have a >>>> problem. >>>> >>>> For now, I've added a test in DirichletBC for the FunctionSpace. What we >>>> can add is an attach function if there is no FunctionSpace associated. >>>> >>>> Garth >>> In which demo does this show up? Is there a simple way I can comment >>> something out to reproduce the error so I understand what goes wrong? >>> >> Look at /demo/nls/nonlinearpoisson/cpp. >> >> If you change >> >> DirichletBoundaryCondition g(V, t); >> >> to >> >> DirichletBoundaryCondition g(t); >> >> it will break down. >> >> Garth > > ok I see the problem now. > > The problem is a user may choose to either overload a scalar eval > function or a tensor eval function and we need to decide which one > after the callback from ufc::function::evaluate(). If the > FunctionSpace is not known, we can't decide which one to pick. > > If we insist that one should be able to pass a Function without a > FunctionSpace to a DirichletBC, then we must remove the scalar eval > function. >
Fine with me. I think that it makes things simpler because the eval interface remains the same for all user-defined functions. Garth > > > ------------------------------------------------------------------------ > > _______________________________________________ > DOLFIN-dev mailing list > [email protected] > http://www.fenics.org/mailman/listinfo/dolfin-dev _______________________________________________ DOLFIN-dev mailing list [email protected] http://www.fenics.org/mailman/listinfo/dolfin-dev
