On 06/22/2015 03:47 PM, Garth N. Wells wrote:
On 22 June 2015 at 14:37, Marco Morandini <[email protected]> wrote:
Right now PointSource::apply searches the first entity collision, every time
it is called.

This is unnecessary in many cases, and possibly wrong in others
(e.g. the nonlinear deformation of a structure, with applied non-follower,
but time-varying concentrated forces)

The overhead is so high that it almost doubles the runtime of a simple
time-marching code a student is developing right now
(to be fair: small deformations, constant mass a stiffness matrix
pre-assembled and factored).

I'd like to cache as much as possible,
and add some additional methods to

1) search again for the collision entity
2) change the source magnitude

However 1) could _silently_ break old codes.
Would this breaking be a show-stopper?

To avoid breaking old codes I could change
the definition of

void PointSource::apply(GenericVector& b)

into something like

void PointSource::apply(GenericVector& b, bool rebuild = true)

but I'd like to avoid hacks like this.

To achieve 2) I could

a) change the magnitude into a Constant
b) add a new method
c) change PointSource::apply(GenericVector& b) into
PointSource::apply(GenericVector& b, double magnitude)

The solution c) would have the "advantage" of explicitly breaking old codes,
thus implicitly warning the user for 1)


I think this is fine.

Besides, the mesh bounding_box_tree used to find the colliding mesh entity
is cached. I fear this could
be a source of "strange" results, because its use
is here completely transparent to the user,
who may be unaware of the need to update it.


I really don't like magical caching. How about having

    PointSource::apply(GenericVector& b, Cell& c, double magnitude);


What about

PointSource::apply(GenericVector& b, Cell& c, const Point& p, double magnitude);

?

Marco


The user is responsible for finding the cell, and thereby also
responsible for handling meshes that move, etc.

PointSource::apply(...) presently uses Mesh::bounding_box_tree(),
which I would like to get rid of from Mesh since mesh geometry is
mutable. If the search tools are not cached, the user takes
responsibility for managing the bounding boxes.

Garth

_______________________________________________
fenics mailing list
[email protected]
http://fenicsproject.org/mailman/listinfo/fenics

Reply via email to