Thank you Barry and Jed for the explanation!


On Sun, Sep 29, 2013 at 7:46 PM, Jed Brown <[email protected]> wrote:

> Matteo Parsani <[email protected]> writes:
> > 2 - why those routines *should not be used* when writing a fresh code or
> a
> > large re-factoring?
>
> Barry wrote a great rationale, but consider an example: almost all
> third-party linear algebra libraries (and some special features in
> PETSc) require scalar (non-blocked) matrix formats, but PETSc has good
> implementations of other operations like matrix multiplication and
> incomplete factorization using BAIJ format.  Thus with some solution
> methods, you want a BAIJ matrix and with other methods, you need an AIJ
> matrix.  If you try to build the backend data format directly, you'll
> either need multiple versions to specifically support each format or
> there will need to be a copy, which doubles the peak memory usage
> required for the matrix.  If you just use MatXAIJSetPreallocation and
> MatSetValuesBlocked, then you can choose the matrix format at run-time,
> in which case all solvers become available without the extra memory
> usage.
>
> There are many more examples.  It is bad software design for a component
> to depend on more than it must.  Depend on generic interfaces instead of
> internal formats.  It will make your software more powerful and more
> maintainable.
>



-- 
Matteo

Reply via email to