On Thu, 15 Jun 2017, Michael Povolotskyi wrote:
I'm fine with creating a child of FunctionBase.
Will it be enough to override only the component() method?
You'll have to override operator() with *something*, even if only
libmesh_error(), since IIRC it's pure virtual. If you do go the
libmesh_error() route your code should work fine for now, but be
forewarned that it may then break with some libMesh release in the
future.
---
Roy
On 6/15/2017 5:08 PM, Roy Stogner wrote:
>
> On Thu, 15 Jun 2017, Michael Povolotskyi wrote:
>
> > AnalyticFunction<> dirichlet_function_object(zero1);
>
> > void zero1(DenseVector<Number> & output,
> > const Point & p,
> > const Real)
> > {
> > output(0) = 0; output(1) = 0;
> > output(2) = 10; output(3) = 10;
> >
> > }
> >
> > Unfortunately, this does not work. Somehow argument output in the
> > function zero1 has 2 components. Most likely I'm doing something wrong.
>
> You're suffering from the interaction of a couple questionable design
> decisions, is all. Sorry!
>
> AnalyticFunction::component(i) only resizes output to be large enough
> to fill i, because it doesn't actually know how large an output vector
> your C function is ready to handle.
>
> The internal dirichlet boundary constraint code iterates one variable
> at a time, and uses component() to query values of just that variable,
> because it's complicated enough code even without trying to project
> multiple variables at once.
>
> > Could you, please, tell me how to achieve what I want
>
> Most easily? Just test output.size() and only fill indices below that
> size.
>
> Most efficiently? Subclass FunctionBase yourself and override
> component() too.
>
> > or point me to a similar example?
>
> I don't think there is one! introduction_ex4 and ex5 use
> AnalyticFunction with DirichletBoundary, but only for a single
> solution variable. All the multi-variable DirichletBoundary examples
> appear to be using subclassing.
> ---
> Roy
------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Libmesh-users mailing list
Libmesh-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/libmesh-users