> On 21 Nov 2014, at 12:29, Chris Richardson <[email protected]> wrote: > > > > -------- Original Message -------- > Subject: Re: [FEniCS] eval in parallel > Date: 21/11/2014 12:27 > From: Chris Richardson <[email protected]> > To: "Garth N. Wells" <[email protected]> > > On 21/11/2014 11:57, Garth N. Wells wrote: >> On Fri, 21 Nov, 2014 at 11:52 AM, Mikael Mortensen >> <[email protected]> wrote: >>> On 20 Nov 2014, at 13:08, Jan Blechta <[email protected]> wrote: >>>> On Thu, 20 Nov 2014 11:33:26 +0100 >>>> Mikael Mortensen <[email protected]> wrote: >>>>> On 20 Nov 2014, at 10:54, Chris Richardson <[email protected]> >>>>> wrote: >>>>>> There has been some discussion on bitbucket about how to best >>>>>> support evaluation and interpolation in parallel. >>>>>> At present, user code like this: >>>>>> mesh = UnitSquareMesh(10, 10) >>>>>> Q = FunctionSpace(mesh, "CG", 1) >>>>>> F = Function(Q) >>>>>> F.interpolate(Expression("x[0]")) >>>>>> print F(0.2, 0.2) >>>>>> crashes in parallel. e.g. with mpirun -n 2 >>>>>> *** Error: Unable to evaluate function at point. >>>>>> *** Reason: The point is not inside the domain. Consider setting >>>>>> "allow_extrapolation" to allow extrapolation. *** Where: This >>>>>> error was encountered inside Function.cpp. >>>>>> Clearly "allow_extrapolation" is not needed, and this is actually >>>>>> confusing to users. >>>>> Agreed, allow_extrapolation is very confusing. It should not be >>>>> thrown as an option, at least not in parallel. >>>> Please, do not remove it. allow_extrapolation is useful for >>>> circumventing failing floating-point-based evaluation of >>>> Cell::inside(Point& p) for p interior point near facet of the cell. The >>>> problem is covered here >>>> https://bitbucket.org/fenics-project/dolfin/issue/296. >>> Floating point robustness should probably be handled inside the collision >>> routines and not by flags in Function::eval. Nevertheless, it is very >>> misleading to throw a suggestion to allow_extrapolation in parallel. I >>> think we should add something like >>> if (allow_extrapolation && MPI::size(_function_space->mesh()->mpi_comm()) >>> == 1) >>> or simply not allow setting allow_extrapolation to true in parallel. >>> Chris, I think I’m leaning towards a brand new global_eval rather than >>> modifying the existing eval. But I have no strong opinion on this. >> The business of 'extrapolation' does need fixing, see also >> https://bitbucket.org/fenics-project/dolfin/issue/198. >> I would also lean towards separate functions for collective vs local >> eval operations. We can mark clearly in the documentation which is >> collective. > > It would be good if a user can still use: > > val = F(x, y) > > to evaluate at a point, in python, in parallel. That can be fixed up behind > the scenes, of course. Should such a call return the correct answer on > all processes, or just on the processes holding the values? >
An issue is that this would be a collective operation. This could cause existing programs to deadlock in parallel. Garth > Chris > > -- > Chris Richardson > BP Institute > Madingley Road > Cambridge CB3 0EZ > _______________________________________________ > fenics mailing list > [email protected] > http://fenicsproject.org/mailman/listinfo/fenics _______________________________________________ fenics mailing list [email protected] http://fenicsproject.org/mailman/listinfo/fenics
