← Back to team overview

fenics team mailing list archive

components, a counter-example?

 

I'd like to raise the question as to what degree we can truly modularize all of our code into discrete pieces. I am going to use the multiadaptive ODE solver for the sake of discussion because:

1.) It's a really neat piece of work, one of the most interesting ideas in ODE I've seen, that other people should be aware of and use. 2.) It is currently neither parallel nor available as a standalone package.
3.) I like to pick on Anders :)

Suppose that we want to parallelize and distribute it to maximize its effect on the world and become "the standard". (As an aside, there are parallel time-stepping packages like Sundials that are seen as "standards" in certain senses. A parallel multi-adaptive solver that can also do DAE could be a worthy competitor) Obviously to do this, we will need some way of communicating components of vectors across processors. As usual, there are two main options here:

1.) we can roll our own using standard C arrays and low-level MPI calls :( I believe that Sundials has recreated things that look like PETSc internally to avoid doing very low-level stuff at every turn. 2.) we can use some well-developed, maintained package that does this for us, like PETSc.

Moreover, depending on how we implement algorithms inside the solver, we might use some linear and nonlinear solution technology, further increasing the reliance on PETSc inside.

So, it seems that if we want to leverage somebody else's parallelism, we have to buy into a particular package. Sure, somebody could always strip out PETSc and use Trilinos vectors, but that involves grubbies and is tough to automate without further grubbies.

Now, suppose that I want to take the new standard in parallel ODE/DAE and have Sundance use it. This seems rather clunky, as I'm forced to compile and link *two* linear algebra packages into my code -- Trilinos for Sundance and PETSc for the time-stepper. Even if I never see PETSc thanks to a well-designed interface, it can contribute significantly to the size of the executable and forces me to keep up installations of two big codes.

This seems clunky. Even though it's less modular, it would simplify my life as an end-user if the multiadaptive solver were presented in an integrated fashion as part of Trilinos. (Conjecture: Part of setting a standard in scientific computing is making end-users who don't necessarily share your software engineering philosophy or other kinds of philosophy happy.)

From Anders' standpoint, this is obviously suboptimal -- he would have to develop in Trilinos, release his code in Trilinos, etc and *not* as a stand-alone component. Further, if he wants all the PETSc universe to have his time-stepping technology, then he must develop two different versions of the code...

Software should be modularized as much as makes sense -- I don't think it can be absolutized. We should discuss this both in general as well in the particular case of helping Anders' very nice method become the standard for time-stepping.

This is also an illustration of how we can't just come up with a good idea and declare victory. Just having a stand-alone module doesn't make it a standard. You have to get people to use it and swear by it. (David Keyes' enthusiasm has contributed heavily to PETSc's success.) One approach to making this happen is to suffer some inconvenience (loss of identity?) and implement the ODE solver in a specific widely-used system like PETSc where people are more likely to use it with a minimal of install/configure/maintain effort on their part. Besides breadth of distribution, it allows more fair comparisons with current "standard" methods in terms of accuracy, cost, etc and can help justify using the method to people who don't care anything about Galerkin methods, just getting the solution. This can help make the technical case and hopefully not tell us things we don't want to hear. Are there other approaches that will maximize Anders' impact on scientific computing and generally guide the FEniCS project in software engineering?


Rob Kirby

"Mathematical software should be mathematical."






Follow ups