~chaffra/+junk/trilinos

« back to all changes in this revision

Viewing changes to packages/fei/README_code_history

  • Committer: Bazaar Package Importer
  • Author(s): Christophe Prud'homme, Christophe Prud'homme, Johannes Ring
  • Date: 2009-12-13 12:53:22 UTC
  • mfrom: (5.1.2 sid)
  • Revision ID: james.westby@ubuntu.com-20091213125322-in0nrdjc55deqsw9
Tags: 10.0.3.dfsg-1
[Christophe Prud'homme]
* New upstream release

[Johannes Ring]
* debian/patches/libname.patch: Add prefix 'libtrilinos_' to all
  libraries. 
* debian/patches/soname.patch: Add soversion to libraries.
* debian/watch: Update download URL.
* debian/control:
  - Remove python-numeric from Build-Depends (virtual package).
  - Remove automake and autotools from Build-Depends and add cmake to
    reflect switch to CMake.
  - Add python-support to Build-Depends.
* debian/rules: 
  - Cleanup and updates for switch to CMake.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
 
 
2
FEI contains quite a lot of very old code. The project began in 1997, just
 
3
about the same time that C++ was standardized. At the time, C++ compilers
 
4
didn't uniformly support the standard.
 
5
 - At least one compiler (an early IBM/AIX compiler) didn't initially support
 
6
   namespaces.
 
7
 - A couple of compilers didn't initially support the bool type.
 
8
 - Some compilers provided <iostream.h> instead of <iostream>, etc.
 
9
 - Several compilers didn't have very good STL implementations.
 
10
 
 
11
Thus, if you examine the FEI code, you'll notice a number of things:
 
12
 
 
13
- Many classes are in a namespace, many are not. Basically, the original
 
14
  collection of FEI implementation classes were not put in a namespace. Some
 
15
  of them have been migrated into a namespace, and in recent years all new
 
16
  classes have been created in a namespace.
 
17
 
 
18
- Macros like FEI_COUT and FEI_ENDL are used instead of std::cout and std::endl.
 
19
  This is because cout and endl weren't always in the std namespace, so these
 
20
  macros are defined appropriately, depending on the C++ implementation being
 
21
  used. These macros are defined in base/fei_iostream.hpp.
 
22
 
 
23
- There are two primary namespaces: fei and snl_fei. Originally the intent was
 
24
  to put abstract interface classes in the fei namespace, and concrete
 
25
  implementation classes in the snl_fei namespace. (With the assumption that
 
26
  other non-SNL implementations of the abstract interfaces might exist.) But
 
27
  it turned out that our implementation was the only one, and all implementation
 
28
  classes are now being migrated into the fei namespace. The snl_fei namespace
 
29
  still exists, but as time goes by it will contain fewer and fewer classes.
 
30
  Certainly all classes that are intended to be part of the public interface
 
31
  (i.e., not just implementation details) should be in the fei namespace.
 
32
 
 
33
- In some cases (especially in test input files) you'll see references to the
 
34
  "old fei" and "new fei". Originally FEI was a single large interface that
 
35
  managed all aspects of linear system assembly and solution. This soon
 
36
  suffered from growing pains as more and more features and use-cases were
 
37
  added. A modular collection of interfaces was developed, each representing
 
38
  a logical entity such as a VectorSpace or MatrixGraph, etc. This
 
39
  collection of modular interfaces was referred to as the "new fei", while the
 
40
  original monolithic interface was referred to as the "old fei". The original
 
41
  "old fei" interface still exists, and is declared in base/FEI.hpp. There
 
42
  are two implementations of it, base/FEI_Implementation.{hpp,cpp} and
 
43
  base/fei_FEI_Impl.{hpp,cpp}. The latter implementation basically provides
 
44
  the old interface but uses the newer modular objects internally for the
 
45
  implementation.
 
46
  This is admittedly confusing. Most users (especially new users) should 
 
47
  simply look through the example programs in example/beam and example/poisson
 
48
  to learn how the "new fei" is used, and completely ignore the existence of
 
49
  the "old fei".
 
50