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
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:

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

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.