DOUG 0.2

DOUG components

The idea of a component is to abstract operations and define an interface, so that the code can be used without knowing which implementation is underneath - polymorphism.

This allows for code reuse and is a part of Object Oriented Programming (OOP) principles. The Fortran 95 support for OOP is very poor, which caused to create artificial polymorhpism. See for example A Simplified Method for Implementing Run-Time Polymorphism in Fortran95 by Viktor K. Decyk and Charles D. Norton.

There are currently several components that define different parts of DOUG:

  1. Distribution - creates fine grid (mesh), reads in data and distributes original matrix and vector
  2. Partitioning - creates fine and coarse partitionings of the mesh
  3. Preconditioner - creates fine and coarse grid preconditioners using the partitionings, which comes in two subcomponents
    • FinePreconditioner - first level preconditioner: additive Schwarz with overlapping subdomains
    • CoarsePreconditioner - second level preconditioner: coarse space based preconditioner
Note:
Several other components may be created in the future, like Solver, or existing may be split, e.g. Distribution into DataInput and MeshRefinement

Every component has one or several implementations - modules, listed below. These implementations may just delegate interface subroutines to actual implementations.

Distribution component modules

The two primary modules are Distribution_mod and Distribution_base_mod.

Partitioning component modules

The primary module is Partitioning_mod, others are:

Note:
Currently, the implementation is not very flexible, e.g. METIS partitioning requires fine aggregates created by Partitioning_aggr_mod module, although partitioning from any module should be suitable.

Partitioning component modules

The primary modules are Preconditioner_mod and Preconditioner_base_mod

Note:
Again, implementation may use aggregates instead of partitions, although they are almost equivalent.

FinePreconditioner modules

Fine preconditioner uses coarse partitions as subdomains. Fine preconditioner modules are:

CoarsePreconditioner modules

Coarse preconditioner uses fine partitions as coarse space basis function support.