On Apr 30, 2010, at 1:14 PM, Roy Stogner wrote:

I went a little *too* OO with FEMSystem - in hindsight there should
have been a separate subclassable Physics object to attach which
included the residual evaluation functions, and requiring subclassing
of FEMSystem itself was more work and less flexible.

Yeah - but all we're talking about here is an abstract base class that consists of:

class ProblemInterface
  virtual void residual() = 0;
  virtual void jacobian() = 0;

It's not going to be a huge burden...

Yes - doing so with the existing functions would break backwards
compatibility for other NonlinearSystem users; doing so by adding new
functions would make the API redundant and confusing, especially if we
had to do so again later for whatever grander idea we settle on.

I'm not certain we need a grander idea.  After thinking about it more... I really think just adding an argument might be good enough.  It really should have been there since the beginning.

About backward compatibility: come on!  This is adding _one_ argument to _two_ functions.  Most codes will be able to fix this in 10 seconds!  We can change it and announce it on libmesh-users and it will be fine.  If users are upset about that small of a change... then they should be using a libMesh release instead of svn....

If you're up to being a guinea pig on the DiffSolver(ImplicitSystem)
combination then let me know and I'll do that now; if not then I'd
suggest a private fork until we've got time to put the "grander ideas"
in place.

Private forks are the path to the darkside.  All my users pull sources direct from sourceforge... I really don't want to change that.