**ParSol** is a library for *semi-automatic* parallelisation of
data-parallel (especially linear algebra) algorithms. It is written
in C++, using such C++ features as OOP, template metaprogramming, operatror
overloading and others, so that the usage of the library is simple and
intuitive, and the library itself is easily expanded.

The library presents user with the set of linear algebra objects (multidimentional arrays, vectors, sparse and dense matrices, among others). The functionality of arrays and vectors is similar to those of such libraries as Blitz++, FreePOOMA, and Boost.MultiArray. Using the library, the programmer creates sequential version of the code (no MPI needed), and debugs it. Once done, the parallel version of the algorithm is created by substituting some header files (to switch from sequential to parallel version), some class names, and adding several lines of code (initialization, topology specification and data exchange). The parallel version should be recompiled using MPI implementation (at least MPI-1.1 support required).

The parallelization is done the same way as in HPF.
In fact, the library brings to C++ parallelization functionality similar
to the one HPF brings to Fortran. However, differently from HPF, ParSol
is a library, not a new compiler, with all the pros and cons. Also, in ParSol,
the programmer must explicitely specify the computational *stencil*
in order to ensure the optimal data exchange. From the one hand, this was
a necessity, because it is hard for the library to analyse arbitrary user
code. From the other hand, however, this allows for easy communication costs
fine-tuning - the area where HPF failed to meet the expectations.

Apart from parallelization, the library objects are fine-tuned for high performance. For example, ParSol arrays performs similar to native C/C++ arrays. Also, the library uses only standard C++ features and MPI-1.1 for parallel version, which makes it highly portable. A comprehensive test suite is also available as a part of library.

Among the similar scientific libraries that ParSol may be compared to, FreePOOMA and PETSc should be mentioned. Both are more mature projects that ParSol, and it's great if they provide all the necessary functionality.

**FreePOOMA** went a much longer way towards implementing Fortran
features in C++. And it works, but ... C++ is not a Fortran. What in Fortran
is buried in specification and works by default, in C++ should be explicitely
specified. For example, it is possible (and necessary in FreePOOMA, if you
want it to be parallelized) to write `A(I) = B(I+1) + C(I-1)`

in FreePooma, but code like that may require a bunch of FreePOOMA-specific
objects initializations before. Is it clearer and simpler than writing a simple
for-loop?

But the bigger problem of FreePOOMA is the absense of matrices, especially the sparse ones. This renders the library unusable for the large class of computational problems. In this case, ParSol library may be used.

**PETSc** does not have the matrix shortcomings of FreePOOMA. It
has various types of matrices and linear equation solvers. However, PETSc
primary interface if in C, and hence is functional and not as simple
as ParSol's or FreePOOMA. Another problem with PETSc is its usage of
global memory parallel programming model. This model allows for solution
of more general problems, but at the cost of worse performance. Also,
PETSc uses more explicit parallel programming, so if you need a clean
implementation of linear algebra problem, both sequential and parallel
(with high parallelization efficiency) at minimal cost, ParSol may
be the valuable alternative.

Here're the ParSol library related links:

- The latest library version may be found here.
- ParSol documentation may be browsed online here.
- The current maintainer of the library is Aleksandr Jakushev.
- The library is described in the Aleksandr Jakushev's doctoral thesis.

The ParSol library was used in several scientific projects, and therefore is mentioned is several publications. The list is provided here:

- R. Čiegis, A. Jakušev, V. Starikovičius. Parallel tool
for solution of multiphase flow problems.
*Lecture Notes in Computer Science*, 6^{-th}International Conference, PPAM-2005, Poznan, Poland, September 11–14, 2005. Revised Selected Papers, Vol. 3911, 2006, p. 312–319. ISSN 0302-9743. - R. Čiegis. Parallel LOD Scheme for 3D Parabolic Problem with
Nonlocal Boundary Condition.
*Lecture notes in computer science*, International conference EurPar2006. Dresden, Germany, September 1–5, 2006. Revised Papers. Springer. Vol. 4128, 2006, p. 679–688. - A. Jakušev, V. Starikovičius. Application of Parallel Arrays
for Parallelisation of Data Parallel Algorithms.
*Computer Aided Methods in Optimal Design and Operations*, Series on Computers and Operations research, Vol. 7, 2006, p. 109–118. ISBN 981-256-909-X. - V. Starikovičius, R. Čiegis, A. Jakušev. Analysis of
upwind and high-resolution schemes for solving convection dominated
problems in porous media.
*Mathematical modelling and analysis*, 11(4), 2006, p. 451–474. ISSN 1392-6292. Available online. - R. Čiegis, A. Jakušev, A. Krylovas and O. Suboč.
Parallel algorithms for solution of nonlinear diffusion problems in image
smoothing.
*Mathematical Modelling and Analysis*, 10(2), 2005, p. 155–172. ISSN 1392-6292. Available online. - Raim. Čiegis, Rem. Čiegis, A. Jakušev,
G. Šaltenienė. Parallel Variational Iterative Linear Solvers.
*Mathematical Modelling and Analysis*, 12(1), 2007, p. 1–16. ISSN 1392-6292. Available online. - A. Jakušev. Application of Template Metaprogramming Technologies
to Improve the Efficiency of Parallel Arrays.
*Mathematical Modelling and Analysis*, 12(1), 2007, p. 71–79. ISSN 1392-6292. Available online. - R. Čiegis. Parallel numerical algorithms for 3D parabolic problem
with nonlocal boundary condition.
*Informatica*, 17(3), 2006, p. 309–324. - R. Čiegis, A. Jakušev. Lygiagretieji algoritmai vaizdų
filtravime.
*Lietuvos matematikos rinkinys*, 45, spec. nr., 2005, p. 411–416. ISSN 0132-2818. (in Lithuanian) - A. Jakušev, V. Starikovičius and R. Čiegis. Application
of parallel arrays for semiautomatic parallelization of flow in porous
media problem solver.
*Proceedings of the 10*, Trakai, Lithuania, 2005, p. 171–177. ISSN 1392-6292.^{th}International Conference MMA2005 & CMAM2 - R. Čiegis, A. Jakušev and O. Suboč. Nonlinear diffusion
problems in image smoothing.
*Proceedings of the 10*, Trakai, Lithuania, 2005, p. 381–388. ISSN 1392-6292.^{th}International Conference MMA2005 & CMAM2 - A. Jakušev. Išraiškų šablonų naudojimas C++ masyvų efektyvumo
didinimui.
*9-osios Lietuvos jaunųjų mokslininkų konferencijos ``Lietuva be mokslo — Lietuva be ateities'' medžiaga*, 1278, 2006, p. 94–101. ISBN 9986-05-997-6. (in Lithuanian)