On Tue, 27 Oct 2015, Cody Permann wrote:

> So it looks like nearly all of the time for this problem is spent in
> System::project_vector() as you already guessed. The most expensive
> call being in "OldSolutionValue".

Looks like the problem was that I put the "project" back into
"project_vector".  Doing real projections from mesh to mesh currently
requires an inverse_map on every quadrature point, which is *way* more
expensive than just copying DoFs from node to node.

In the long term we need to come up with some code for translating
quadrature points between child and parent elements without the
inverse_map(xyz) hack.  That'll make error estimators much faster too,
not just general projections.

For the short term I added back a Node-specific code path to let
OldSolutionValue just copy DoF coefficients where it can, plus a
LAGRANGE-specific code path to do interpolation instead of projection
on edges, and that makes 3d_penetration_locator 10x faster for me.

I'm still on the fence about whether to rename GeneralProjector to
GeneralExceptTheLagrangeAndHermiteSpecialCasesProjector.  At least
it's still the same projector code for all the different kinds of
projections.

https://github.com/roystgnr/libmesh/tree/reoptimize_projections

If you want to play with it right away; I'll make a PR for it as soon
as we merge #695.
---
Roy

------------------------------------------------------------------------------
_______________________________________________
Libmesh-devel mailing list
Libmesh-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/libmesh-devel

Reply via email to