LICENSE
 README
 docs/psblas-3.1.pdf
 docs/psblas-3.2.pdf
 docs/src/Makefile
 docs/src/commrout.tex
 docs/src/datastruct.tex
 docs/src/error.tex
 docs/src/methods.tex
 docs/src/penv.tex
 docs/src/precs.tex
 docs/src/psbrout.tex
 docs/src/toolsrout.tex
 docs/src/userguide.tex
 docs/src/userhtml.tex
 docs/src/util.tex

Changed docs. Will have to document better the sparse matrix class.
psblas-3.2.0
Salvatore Filippone 11 years ago
parent 2084fbd91d
commit d805c2bee6

@ -1,5 +1,5 @@
Parallel Sparse BLAS version 3.1
(C) Copyright 2006, 2007, 2008, 2009, 2010, 2012, 2013
Parallel Sparse BLAS version 3.2
(C) Copyright 2006, 2007, 2008, 2009, 2010, 2012, 2013, 2014
Salvatore Filippone University of Rome Tor Vergata
Alfredo Buttari CNRS-IRIT, Toulouse

@ -1,4 +1,4 @@
This directory contains the PSBLAS library, version 3.1.
This directory contains the PSBLAS library, version 3.2.
This version requires a working Fortran 2003 compiler; we do not use
@ -36,7 +36,7 @@ Harwell-Boeing and MatrixMarket file formats.
DOCUMENTATION
See docs/psblas-3.1.pdf; an HTML version of the same document is
See docs/psblas-3.2.pdf; an HTML version of the same document is
available in docs/html.
Please consult the sample programs, especially
test/pargen/ppde[23]d.f90
@ -122,7 +122,7 @@ COMPILER NOTES.
This code is confirmed to work with the following compilers (or
later versions thereof):
NAGware 5.2;
GNU 4.6.1;
GNU 4.7.3;
Cray CCE 8.0.1;
They are all recognized by the configure script.
@ -137,8 +137,8 @@ Compiler Error) at build time. We do not yet know whether XLF 14
compiles correctly.
For the GNU compilers 4.6.x we are aware of a number of memory management
issues that might surface in your applications; all of them (that
we're aware of) are solved in version 4.7.2.
issues that might surface in your applications; most of them (that
we're aware of) are solved in version 4.7.2 or later.
The Intel compiler up to version 12.1 fails to compile, as of the last
version we got access to.
@ -172,7 +172,7 @@ interested in the package MLD2P4 from http://www.mld2p4.it
Contact: Salvatore Filippone salvatore.filippone@uniroma2.it
Credits for version 3.0:
Credits for version 3:
Salvatore Filippone
Alfredo Buttari

File diff suppressed because it is too large Load Diff

@ -138,7 +138,7 @@ PDF = $(join $(BASEFILE),.pdf)
PS = $(join $(BASEFILE),.ps)
GXS = $(join $(BASEFILE),.gxs)
GLX = $(join $(BASEFILE),.glx)
TARGETPDF= ../psblas-3.1.pdf
TARGETPDF= ../psblas-3.2.pdf
BASEHTML = $(patsubst %.tex,%,$(HTMLFILE))
HTML = $(join $(HTMLFILE),.html)
HTMLDIR = ../html

@ -8,8 +8,7 @@ The routines in this chapter implement various global communication operators
on vectors associated with a discretization mesh. For auxiliary communication
routines not tied to a discretization space see~\ref{sec:toolsrout}.
\clearpage\subsection*{psb\_halo --- Halo Data Communication}
\addcontentsline{toc}{subsection}{psb\_halo}
\clearpage\subroutine{psb\_halo}{Halo Data Communication}
These subroutines gathers the values of the halo
elements, and (optionally) scale the result:
@ -37,10 +36,10 @@ Long Precision Complex & psb\_halo \\
\caption{Data types\label{tab:f90halo}}
\end{table}
\begin{verbatim}
\begin{lstlisting}
call psb_halo(x, desc_a, info)
call psb_halo(x, desc_a, info, alpha, work, data)
\end{verbatim}
\end{lstlisting}
\begin{description}
\item[Type:] Synchronous.
@ -167,8 +166,7 @@ following:
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\clearpage\subsection*{psb\_ovrl --- Overlap Update}
\addcontentsline{toc}{subsection}{psb\_ovrl}
\clearpage\subroutine{psb\_ovrl}{Overlap Update}
These subroutines applies an overlap operator to the input vector:
@ -196,10 +194,10 @@ Long Precision Complex & psb\_ovrl \\
\caption{Data types\label{tab:f90ovrl}}
\end{table}
\begin{verbatim}
\begin{lstlisting}
call psb_ovrl(x, desc_a, info)
call psb_ovrl(x, desc_a, info, update=update_type, work=work)
\end{verbatim}
\end{lstlisting}
\begin{description}
\item[Type:] Synchronous.
@ -359,8 +357,7 @@ following (showing a transition among the two subdomains)
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\clearpage\subsection*{psb\_gather --- Gather Global Dense Matrix}
\addcontentsline{toc}{subsection}{psb\_gather}
\clearpage\subroutine{psb\_gather}{Gather Global Dense Matrix}
These subroutines collect the portions of global dense matrix
distributed over all process into one single array stored on one
@ -392,10 +389,10 @@ Long Precision Complex & psb\_gather \\
\caption{Data types\label{tab:gather}}
\end{table}
\begin{verbatim}
\begin{lstlisting}
call psb_gather(glob_x, loc_x, desc_a, info, root)
call psb_gather(glob_x, loc_x, desc_a, info, root)
\end{verbatim}
\end{lstlisting}
\begin{description}
\item[Type:] Synchronous.
@ -461,8 +458,7 @@ An integer value; 0 means no error has been detected.
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\clearpage\subsection*{psb\_scatter --- Scatter Global Dense Matrix}
\addcontentsline{toc}{subsection}{psb\_scatter}
\clearpage\subroutine{psb\_scatter}{Scatter Global Dense Matrix}
These subroutines scatters the portions of global dense matrix owned
by a process to all the processes in the processes grid.
@ -493,10 +489,10 @@ Long Precision Complex & psb\_scatter \\
\caption{Data types\label{tab:scatter}}
\end{table}
\begin{verbatim}
\begin{lstlisting}
call psb_scatter(glob_x, loc_x, desc_a, info, root)
call psb_scatter(glob_x, loc_x, desc_a, info, root)
\end{verbatim}
\end{lstlisting}
\begin{description}
\item[Type:] Synchronous.

@ -143,7 +143,7 @@ as follows:
% \begin{Sbox}
\begin{center}
\begin{minipage}[tl]{0.9\textwidth}
\begin{verbatim}
\begin{lstlisting}
type psb_desc_type
class(psb_indx_map), allocatable :: indxmap
integer, allocatable :: halo_index(:)
@ -153,7 +153,7 @@ type psb_desc_type
integer, allocatable :: ovr_mst_idx(:)
integer, allocatable :: bnd_elem(:)
end type psb_desc_type
\end{verbatim}
\end{lstlisting}
\end{minipage}
\end{center}
% \end{Sbox}
@ -176,13 +176,13 @@ state, which can take the following values:
only possible in this state.
\end{description}
\subsubsection{Methods}
\subsubsection*{get\_local\_rows --- Get number of local rows}
\addcontentsline{toc}{subsubsection}{get\_local\_rows }
\subsubsection{Descriptor Methods}
\begin{verbatim}
\subsubsubroutine{get\_local\_rows}{Get number of local rows}
\begin{lstlisting}
nr = desc%get_local_rows()
\end{verbatim}
\end{lstlisting}
\begin{description}
\item[Type:] Asynchronous.
@ -203,12 +203,11 @@ Scope: {\bf local}.\\
\end{description}
\subsubsection*{get\_local\_cols --- Get number of local cols}
\addcontentsline{toc}{subsubsection}{get\_local\_cols }
\subsubsubroutine{get\_local\_cols}{Get number of local cols}
\begin{verbatim}
\begin{lstlisting}
nc = desc%get_local_cols()
\end{verbatim}
\end{lstlisting}
\begin{description}
\item[\bf On Entry]
@ -230,12 +229,11 @@ Scope: {\bf local}.\\
\end{description}
\subsubsection*{get\_global\_rows --- Get number of global rows}
\addcontentsline{toc}{subsubsection}{get\_global\_rows }
\subsubsubroutine{get\_global\_rows}{Get number of global rows}
\begin{verbatim}
\begin{lstlisting}
nr = desc%get_global_rows()
\end{verbatim}
\end{lstlisting}
\begin{description}
\item[\bf On Entry]
@ -253,12 +251,11 @@ Scope: {\bf local}.\\
global index space.
\end{description}
\subsubsection*{get\_global\_cols --- Get number of global cols}
\addcontentsline{toc}{subsubsection}{get\_global\_cols }
\subsubsubroutine{get\_global\_cols}{Get number of global cols}
\begin{verbatim}
\begin{lstlisting}
nr = desc%get_global_cols()
\end{verbatim}
\end{lstlisting}
\begin{description}
\item[Type:] Asynchronous.
@ -277,10 +274,11 @@ Scope: {\bf local}.\\
\end{description}
\subsubroutine{get\_context}{Get communication context}
\begin{verbatim}
\subsubsubroutine{get\_context}{Get communication context}
\begin{lstlisting}
ictxt = desc%get_context()
\end{verbatim}
\end{lstlisting}
\begin{description}
\item[Type:] Asynchronous.
@ -297,10 +295,11 @@ Scope: {\bf local}.\\
\item[Function value] The communication context.
\end{description}
\subsubroutine{clone}{Clone current object}
\begin{verbatim}
\subsubsubroutine{Clone}{clone current object}
\begin{lstlisting}
call desc%clone(descout,info)
\end{verbatim}
\end{lstlisting}
\begin{description}
\item[Type:] Asynchronous.
@ -319,12 +318,12 @@ Scope: {\bf local}.\\
\end{description}
\subsubsection*{psb\_cd\_get\_large\_threshold --- Get threshold for
\subsubsubroutine{psb\_cd\_get\_large\_threshold}{Get threshold for
index mapping switch}
\addcontentsline{toc}{subsubsection}{psb\_cd\_get\_large\_threshold}
\begin{verbatim}
\begin{lstlisting}
ith = psb_cd_get_large_threshold()
\end{verbatim}
\end{lstlisting}
\begin{description}
\item[Type:] Asynchronous.
@ -335,12 +334,12 @@ ith = psb_cd_get_large_threshold()
\subsubsection*{psb\_cd\_set\_large\_threshold --- Set threshold for
\subsubsubroutine{psb\_cd\_set\_large\_threshold}{Set threshold for
index mapping switch}
\addcontentsline{toc}{subsubsection}{psb\_cd\_set\_large\_threshold}
\begin{verbatim}
\begin{lstlisting}
call psb_cd_set_large_threshold(ith)
\end{verbatim}
\end{lstlisting}
\begin{description}
\item[Type:] Synchronous.
@ -415,7 +414,7 @@ library at runtime via the \verb|psb_spasb| routine.
% \begin{Sbox}
\begin{center}
\begin{minipage}[tl]{0.85\textwidth}
\begin{verbatim}
\begin{lstlisting}
type :: psb_Tspmat_type
@ -423,7 +422,7 @@ library at runtime via the \verb|psb_spasb| routine.
end type psb_Tspmat_type
\end{verbatim}
\end{lstlisting}
\end{minipage}
\end{center}
% \end{Sbox}
@ -458,13 +457,13 @@ following values:
The only storage variant supporting the build state is COO; all other
variants are obtained by conversion to/from it.
\subsubsection{Methods}
\subsubsection*{get\_nrows --- Get number of rows in a sparse matrix}
\addcontentsline{toc}{subsubsection}{get\_nrows}
\subsubsection{Sparse Matrix Methods}
\subsubsubroutine{get\_nrows}{Get number of rows in a sparse matrix}
\begin{verbatim}
\begin{lstlisting}
nr = a%get_nrows()
\end{verbatim}
\end{lstlisting}
\begin{description}
\item[Type:] Asynchronous.
@ -482,12 +481,11 @@ Scope: {\bf local}\\
\end{description}
\subsubsection*{get\_ncols --- Get number of columns in a sparse matrix}
\addcontentsline{toc}{subsubsection}{get\_ncols}
\subsubsubroutine{get\_ncols}{Get number of columns in a sparse matrix}
\begin{verbatim}
\begin{lstlisting}
nc = a%get_ncols()
\end{verbatim}
\end{lstlisting}
\begin{description}
\item[Type:] Asynchronous.
@ -505,13 +503,12 @@ Scope: {\bf local}\\
\end{description}
\subsubsection*{get\_nnzeros --- Get number of nonzero elements
\subsubsubroutine{get\_nnzeros}{Get number of nonzero elements
in a sparse matrix}
\addcontentsline{toc}{subsubsection}{get\_nnzeros}
\begin{verbatim}
\begin{lstlisting}
nz = a%get_nnzeros()
\end{verbatim}
\end{lstlisting}
\begin{description}
\item[Type:] Asynchronous.
@ -535,13 +532,12 @@ Scope: {\bf local}\\
value for the same matrix may be different for different storage choices.
\end{enumerate}
\subsubsection*{get\_size --- Get maximum number of nonzero elements
\subsubsubroutine{get\_size }{Get maximum number of nonzero elements
in a sparse matrix}
\addcontentsline{toc}{subsubsection}{get\_size}
\begin{verbatim}
\begin{lstlisting}
maxnz = a%get_size()
\end{verbatim}
\end{lstlisting}
\begin{description}
\item[Type:] Asynchronous.
@ -559,13 +555,12 @@ Scope: {\bf local}\\
be stored in sparse matrix \verb|a| using its current memory allocation.
\end{description}
\subsubsection*{sizeof --- Get memory occupation in bytes
\subsubsubroutine{sizeof }{Get memory occupation in bytes
of a sparse matrix}
\addcontentsline{toc}{subsubsection}{sizeof}
\begin{verbatim}
\begin{lstlisting}
memory_size = a%sizeof()
\end{verbatim}
\end{lstlisting}
\begin{description}
\item[Type:] Asynchronous.
@ -583,12 +578,11 @@ Scope: {\bf local}\\
\end{description}
\subsubsection*{get\_fmt --- Short description of the dynamic type}
\addcontentsline{toc}{subsubsection}{get\_fmt}
\subsubsubroutine{get\_fmt }{Short description of the dynamic type}
\begin{verbatim}
\begin{lstlisting}
write(*,*) a%get_fmt()
\end{verbatim}
\end{lstlisting}
\begin{description}
\item[Type:] Asynchronous.
@ -607,14 +601,13 @@ Scope: {\bf local}\\
\verb|CSR| and \verb|CSC|.
\end{description}
\subsubsection*{is\_bld, is\_upd, is\_asb --- Status check}
\addcontentsline{toc}{subsubsection}{is\_bld, is\_upd, is\_asb}
\subsubsubroutine{is\_bld, is\_upd, is\_asb }{Status check}
\begin{verbatim}
\begin{lstlisting}
if (a%is_bld()) then
if (a%is_upd()) then
if (a%is_asb()) then
\end{verbatim}
\end{lstlisting}
\begin{description}
\item[Type:] Asynchronous.
@ -633,10 +626,11 @@ Scope: {\bf local}\\
\end{description}
\subsubroutine{clone}{Clone current object}
\begin{verbatim}
\subsubsubroutine{clone}{Clone current object}
\begin{lstlisting}
call a%clone(b,info)
\end{verbatim}
\end{lstlisting}
\begin{description}
\item[Type:] Asynchronous.
@ -705,7 +699,7 @@ private memory.
% \begin{Sbox}
\begin{center}
\begin{minipage}[tl]{0.85\textwidth}
\begin{verbatim}
\begin{lstlisting}
type psb_T_base_vect_type
TYPE(KIND_), allocatable :: v(:)
end type psb_T_base_vect_type
@ -714,7 +708,7 @@ private memory.
class(psb_T_base_vect_type), allocatable :: v
end type psb_T_vect_type
\end{verbatim}
\end{lstlisting}
\end{minipage}
\end{center}
% \end{Sbox}
@ -727,13 +721,12 @@ private memory.
contains a dense vector.}
\end{figure}
\subsubsection{Methods}
\subsubsection*{get\_nrows --- Get number of rows in a dense vector}
\addcontentsline{toc}{subsubsection}{v\_get\_nrows}
\subsubsection{Vector Methods}
\subsubsubroutine{get\_nrows}{Get number of rows in a dense vector}
\begin{verbatim}
\begin{lstlisting}
nr = v%get_nrows()
\end{verbatim}
\end{lstlisting}
\begin{description}
\item[Type:] Asynchronous.
@ -751,13 +744,12 @@ Scope: {\bf local}\\
\end{description}
\subsubsection*{sizeof --- Get memory occupation in bytes
\subsubsubroutine{sizeof }{Get memory occupation in bytes
of a dense vector}
\addcontentsline{toc}{subsubsection}{v\_sizeof}
\begin{verbatim}
\begin{lstlisting}
memory_size = v%sizeof()
\end{verbatim}
\end{lstlisting}
\begin{description}
\item[Type:] Asynchronous.
@ -775,12 +767,11 @@ Scope: {\bf local}\\
\end{description}
\subsubsection*{get\_vect --- Get a copy of the vector contents}
\addcontentsline{toc}{subsubsection}{v\_get\_vect}
\subsubsubroutine{get\_vect }{Get a copy of the vector contents}
\begin{verbatim}
\begin{lstlisting}
extv = v%get_vect()
\end{verbatim}
\end{lstlisting}
\begin{description}
\item[Type:] Asynchronous.
@ -798,10 +789,10 @@ Scope: {\bf local}\\
vector contents.
\end{description}
\subsubroutine{clone}{Clone current object}
\begin{verbatim}
\subsubsubroutine{clone}{Clone current object}
\begin{lstlisting}
call x%clone(y,info)
\end{verbatim}
\end{lstlisting}
\begin{description}
\item[Type:] Asynchronous.
@ -849,13 +840,13 @@ dynamic type corresponding to the desired preconditioner.
% \begin{Sbox}
\begin{center}
\begin{minipage}[tl]{0.9\textwidth}
\begin{verbatim}
\begin{lstlisting}
type psb_Tprec_type
class(psb_T_base_prec_type), allocatable :: prec
end type psb_Tprec_type
\end{verbatim}
\end{lstlisting}
\end{minipage}
\end{center}
% \end{Sbox}

@ -41,7 +41,7 @@ explicitly.
\begin{Sbox}
\begin{minipage}[tl]{0.95\textwidth}
\small
\begin{verbatim}
\begin{lstlisting}
subroutine psb_foo(some args, info)
...
if(error detected) then
@ -66,7 +66,7 @@ subroutine psb_foo(some args, info)
end if
end subroutine psb_foo
\end{verbatim}
\end{lstlisting}
\end{minipage}
\end{Sbox}
\setlength{\fboxsep}{8pt}
@ -119,13 +119,12 @@ Aborting...
\end{figure}
\clearpage\subsection*{psb\_errpush --- Pushes an error code onto the error
\clearpage\subroutine{psb\_errpush}{Pushes an error code onto the error
stack}
\addcontentsline{toc}{subsection}{psb\_errpush}
\begin{verbatim}
\begin{lstlisting}
call psb_errpush(err_c, r_name, i_err, a_err)
\end{verbatim}
\end{lstlisting}
\begin{description}
\item[Type:] Asynchronous.
@ -150,13 +149,12 @@ Type: {\bf optional}\\
Specified as: a string.\\
\end{description}
\clearpage\subsection*{psb\_error --- Prints the error stack content and aborts
\clearpage\subroutine{psb\_error}{Prints the error stack content and aborts
execution}
\addcontentsline{toc}{subsection}{psb\_error}
\begin{verbatim}
\begin{lstlisting}
call psb_error(icontxt)
\end{verbatim}
\end{lstlisting}
\begin{description}
\item[Type:] Asynchronous.
@ -170,13 +168,12 @@ Specified as: an integer.
\clearpage\subsection*{psb\_set\_errverbosity --- Sets the verbosity of error
\clearpage\subroutine{psb\_set\_errverbosity}{Sets the verbosity of error
messages.}
\addcontentsline{toc}{subsection}{psb\_set\_errverbosity}
\begin{verbatim}
\begin{lstlisting}
call psb_set_errverbosity(v)
\end{verbatim}
\end{lstlisting}
\begin{description}
\item[Type:] Asynchronous.
@ -188,14 +185,13 @@ Intent: {\bf in}.\\
Specified as: an integer.
\end{description}
\clearpage\subsection*{psb\_set\_erraction --- Set the type of action to be
\clearpage\subroutine{psb\_set\_erraction}{Set the type of action to be
taken upon error condition.}
\addcontentsline{toc}{subsection}{psb\_set\_erraction}
\begin{verbatim}
\begin{lstlisting}
call psb_set_erraction(err_act)
\end{verbatim}
\end{lstlisting}
\begin{description}
\item[Type:] Asynchronous.
@ -210,12 +206,11 @@ Specified as: an integer. Possible values: \verb|psb_act_ret|,
%% \clearpage\subsection*{psb\_errcomm --- Error communication routine}
%\addcontentsline{toc}{subsection}{psb\_errcomm}
%% \clearpage\subroutine{psb\_errcomm}{Error communication routine}
\begin{verbatim}
call psb_errcomm(icontxt, err)
\end{verbatim}
%% \begin{lstlisting}
%% call psb_errcomm(icontxt, err)
%% \end{lstlisting}
%% \begin{description}
%% \item[\bf On Entry]

@ -11,9 +11,8 @@ the module \verb|psb_krylov_mod|.
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\clearpage\subsection*{psb\_krylov \label{krylov} --- Krylov Methods Driver
\clearpage\subroutine{psb\_krylov \label{krylov}}{Krylov Methods Driver
Routine}
\addcontentsline{toc}{subsection}{krylov}
This subroutine is a driver that provides a general interface for all
the Krylov-Subspace family methods implemented in PSBLAS version 2.
@ -28,10 +27,10 @@ later). In the above formulae, $x_i$ is the tentative solution and
$r_i=b-Ax_i$ the corresponding residual at the $i$-th iteration.
\begin{verbatim}
\begin{lstlisting}
call psb_krylov(method,a,prec,b,x,eps,desc_a,info,&
& itmax,iter,err,itrace,irst,istop,cond)
\end{verbatim}
\end{lstlisting}
\begin{description}
\item[Type:] Synchronous.

@ -2,12 +2,11 @@
\section{Parallel environment routines}
\label{sec:parenv}
\clearpage\subsection*{psb\_init --- Initializes PSBLAS parallel environment}
\addcontentsline{toc}{subsection}{psb\_init}
\clearpage\subroutine{psb\_init}{Initializes PSBLAS parallel environment}
\begin{verbatim}
\begin{lstlisting}
call psb_init(icontxt, np, basectxt, ids)
\end{verbatim}
\end{lstlisting}
This subroutine initializes the PSBLAS parallel environment, defining
a virtual parallel machine.
@ -60,13 +59,12 @@ Specified as: an integer variable.
\end{enumerate}
\clearpage\subsection*{psb\_info --- Return information about PSBLAS parallel
\clearpage\subroutine{psb\_info}{Return information about PSBLAS parallel
environment}
\addcontentsline{toc}{subsection}{psb\_info}
\begin{verbatim}
\begin{lstlisting}
call psb_info(icontxt, iam, np)
\end{verbatim}
\end{lstlisting}
This subroutine returns information about the PSBLAS parallel environment, defining
a virtual parallel machine.
@ -108,13 +106,12 @@ Specified as: an integer variable. \
\end{enumerate}
\clearpage\subsection*{psb\_exit --- Exit from PSBLAS parallel environment}
\addcontentsline{toc}{subsection}{psb\_exit}
\clearpage\subroutine{psb\_exit}{Exit from PSBLAS parallel environment}
\begin{verbatim}
\begin{lstlisting}
call psb_exit(icontxt)
call psb_exit(icontxt,close)
\end{verbatim}
\end{lstlisting}
This subroutine exits from the PSBLAS parallel virtual machine.
\begin{description}
@ -151,12 +148,11 @@ Specified as: a logical variable, default value: true.
\end{enumerate}
\clearpage\subsection*{psb\_get\_mpicomm --- Get the MPI communicator}
\addcontentsline{toc}{subsection}{psb\_get\_mpicomm}
\clearpage\subroutine{psb\_get\_mpicomm}{Get the MPI communicator}
\begin{verbatim}
\begin{lstlisting}
call psb_get_mpicomm(icontxt, icomm)
\end{verbatim}
\end{lstlisting}
This subroutine returns the MPI communicator associated with a PSBLAS context
\begin{description}
@ -179,12 +175,11 @@ Intent: {\bf out}.\\
\end{description}
\clearpage\subsection*{psb\_get\_rank --- Get the MPI rank}
\addcontentsline{toc}{subsection}{psb\_get\_rank}
\clearpage\subroutine{psb\_get\_rank}{Get the MPI rank}
\begin{verbatim}
\begin{lstlisting}
call psb_get_rank(rank, icontxt, id)
\end{verbatim}
\end{lstlisting}
This subroutine returns the MPI rank of the PSBLAS process $id$
\begin{description}
@ -214,12 +209,11 @@ Intent: {\bf out}.\\
\clearpage\subsection*{psb\_wtime --- Wall clock timing}
\addcontentsline{toc}{subsection}{psb\_wtime}
\clearpage\subroutine{psb\_wtime}{Wall clock timing}
\begin{verbatim}
\begin{lstlisting}
time = psb_wtime()
\end{verbatim}
\end{lstlisting}
This function returns a wall clock timer. The resolution of the timer
is dependent on the underlying parallel environment implementation.
@ -231,13 +225,12 @@ Returned as: a \verb|real(psb_dpk_)| variable.
\end{description}
\clearpage\subsection*{psb\_barrier --- Sinchronization point parallel
\clearpage\subroutine{psb\_barrier}{Sinchronization point parallel
environment}
\addcontentsline{toc}{subsection}{psb\_barrier}
\begin{verbatim}
\begin{lstlisting}
call psb_barrier(icontxt)
\end{verbatim}
\end{lstlisting}
This subroutine acts as an explicit synchronization point for the PSBLAS
parallel virtual machine.
@ -253,12 +246,11 @@ Specified as: an integer variable.
\end{description}
\clearpage\subsection*{psb\_abort --- Abort a computation}
\addcontentsline{toc}{subsection}{psb\_abort}
\clearpage\subroutine{psb\_abort}{Abort a computation}
\begin{verbatim}
\begin{lstlisting}
call psb_abort(icontxt)
\end{verbatim}
\end{lstlisting}
This subroutine aborts computation on the parallel virtual machine.
\begin{description}
@ -276,12 +268,11 @@ Specified as: an integer variable.
\clearpage\subsection*{psb\_bcast --- Broadcast data}
\addcontentsline{toc}{subsection}{psb\_bcast}
\clearpage\subroutine{psb\_bcast}{Broadcast data}
\begin{verbatim}
\begin{lstlisting}
call psb_bcast(icontxt, dat, root)
\end{verbatim}
\end{lstlisting}
This subroutine implements a broadcast operation based on the
underlying communication library.
@ -322,12 +313,11 @@ Type, kind, rank and size must agree on all processes.
\end{description}
\clearpage\subsection*{psb\_sum --- Global sum}
\addcontentsline{toc}{subsection}{psb\_sum}
\clearpage\subroutine{psb\_sum}{Global sum}
\begin{verbatim}
\begin{lstlisting}
call psb_sum(icontxt, dat, root)
\end{verbatim}
\end{lstlisting}
This subroutine implements a sum reduction operation based on the
underlying communication library.
@ -377,12 +367,11 @@ Type, kind, rank and size must agree on all processes.
\clearpage\subsection*{psb\_max --- Global maximum}
\addcontentsline{toc}{subsection}{psb\_max}
\clearpage\subroutine{psb\_max}{Global maximum}
\begin{verbatim}
\begin{lstlisting}
call psb_max(icontxt, dat, root)
\end{verbatim}
\end{lstlisting}
This subroutine implements a maximum valuereduction
operation based on the underlying communication library.
@ -431,12 +420,11 @@ Type, kind, rank and size must agree on all processes.
\item The \verb|dat| argument may also be a long integer scalar.
\end{enumerate}
\clearpage\subsection*{psb\_min --- Global minimum}
\addcontentsline{toc}{subsection}{psb\_min}
\clearpage\subroutine{psb\_min}{Global minimum}
\begin{verbatim}
\begin{lstlisting}
call psb_min(icontxt, dat, root)
\end{verbatim}
\end{lstlisting}
This subroutine implements a minimum value reduction
operation based on the underlying communication library.
@ -485,12 +473,11 @@ Type, kind, rank and size must agree on all processes.
\item The \verb|dat| argument may also be a long integer scalar.
\end{enumerate}
\clearpage\subsection*{psb\_amx --- Global maximum absolute value}
\addcontentsline{toc}{subsection}{psb\_amx}
\clearpage\subroutine{psb\_amx}{Global maximum absolute value}
\begin{verbatim}
\begin{lstlisting}
call psb_amx(icontxt, dat, root)
\end{verbatim}
\end{lstlisting}
This subroutine implements a maximum absolute value reduction
operation based on the underlying communication library.
@ -539,12 +526,11 @@ Type, kind, rank and size must agree on all processes.
\item The \verb|dat| argument may also be a long integer scalar.
\end{enumerate}
\clearpage\subsection*{psb\_amn --- Global minimum absolute value}
\addcontentsline{toc}{subsection}{psb\_amn}
\clearpage\subroutine{psb\_amn}{Global minimum absolute value}
\begin{verbatim}
\begin{lstlisting}
call psb_amn(icontxt, dat, root)
\end{verbatim}
\end{lstlisting}
This subroutine implements a minimum absolute value reduction
operation based on the underlying communication library.
@ -594,12 +580,11 @@ Type, kind, rank and size must agree on all processes.
\end{enumerate}
\clearpage\subsection*{psb\_snd --- Send data}
\addcontentsline{toc}{subsection}{psb\_snd}
\clearpage\subroutine{psb\_snd}{Send data}
\begin{verbatim}
\begin{lstlisting}
call psb_snd(icontxt, dat, dst, m)
\end{verbatim}
\end{lstlisting}
This subroutine sends a packet of data to a destination.
\begin{description}
@ -646,12 +631,11 @@ same value on sending and receiving processes.
\end{enumerate}
\clearpage\subsection*{psb\_rcv --- Receive data}
\addcontentsline{toc}{subsection}{psb\_rcv}
\clearpage\subroutine{psb\_rcv}{Receive data}
\begin{verbatim}
\begin{lstlisting}
call psb_rcv(icontxt, dat, src, m)
\end{verbatim}
\end{lstlisting}
This subroutine receives a packet of data to a destination.
\begin{description}

@ -23,12 +23,11 @@ module \verb|psb_prec_mod|.
\clearpage\subsection*{psb\_precinit --- Initialize a preconditioner}
\addcontentsline{toc}{subsection}{psb\_precinit}
\clearpage\subroutine{psb\_precinit}{Initialize a preconditioner}
\begin{verbatim}
\begin{lstlisting}
call psb_precinit(prec, ptype, info)
\end{verbatim}
\end{lstlisting}
\begin{description}
\item[Type:] Asynchronous.
@ -80,12 +79,11 @@ $ptype$ string as follows\footnote{The string is case-insensitive}:
\end{description}
\clearpage\subsection*{psb\_precbld --- Builds a preconditioner}
\addcontentsline{toc}{subsection}{psb\_precbld}
\clearpage\subroutine{psb\_precbld}{Builds a preconditioner}
\begin{verbatim}
\begin{lstlisting}
call psb_precbld(a, desc_a, prec, info,amold,vmold)
\end{verbatim}
\end{lstlisting}
\begin{description}
\item[Type:] Synchronous.
@ -139,13 +137,12 @@ An integer value; 0 means no error has been detected.
\clearpage\subsection*{psb\_precaply --- Preconditioner application routine}
\addcontentsline{toc}{subsection}{psb\_precaply}
\clearpage\subroutine{psb\_precaply}{Preconditioner application routine}
\begin{verbatim}
\begin{lstlisting}
call psb_precaply(prec,x,y,desc_a,info,trans,work)
call psb_precaply(prec,x,desc_a,info,trans)
\end{verbatim}
\end{lstlisting}
\begin{description}
\item[Type:] Synchronous.
@ -193,14 +190,13 @@ An integer value; 0 means no error has been detected.
\clearpage\subsection*{psb\_precdescr --- Prints a description of current
\clearpage\subroutine{psb\_precdescr}{Prints a description of current
preconditioner}
\addcontentsline{toc}{subsection}{psb\_precdescr}
\begin{verbatim}
\begin{lstlisting}
call psb_precdescr(prec)
call psb_precdescr(prec, iout)
\end{verbatim}
\end{lstlisting}
\begin{description}
\item[Type:] Asynchronous.
@ -219,12 +215,11 @@ Specified as: an integer number.
\clearpage\subsection*{clone --- clone current
\clearpage\subroutine{clone}{clone current
preconditioner}
\addcontentsline{toc}{subsection}{clone}
\begin{verbatim}
\begin{lstlisting}
call prec%clone(precout,info)
\end{verbatim}
\end{lstlisting}
\begin{description}
\item[Type:] Asynchronous.

@ -5,8 +5,7 @@
% DENSE MATRIX SUM
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\clearpage\subsection*{psb\_geaxpby --- General Dense Matrix Sum}
\addcontentsline{toc}{subsection}{psb\_geaxpby}
\clearpage\subroutine{psb\_geaxpby}{General Dense Matrix Sum}
This subroutine is an interface to the computational kernel for
dense matrix sum:
@ -17,9 +16,9 @@ dense matrix sum:
%% \item[$y$] represents the global dense submatrix $y_{:, :}$
%% \end{description}
\begin{verbatim}
\begin{lstlisting}
call psb_geaxpby(alpha, x, beta, y, desc_a, info)
\end{verbatim}
\end{lstlisting}
%% \syntax*{call psb\_geaxpby}{alpha, x, beta, y, desc\_a, info, n, jx, jy}
%( calculating y <- alpha*x+beta*y )
@ -114,8 +113,7 @@ An integer value; 0 means no error has been detected.
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\clearpage\subsection*{psb\_gedot --- Dot Product}
\addcontentsline{toc}{subsection}{psb\_gedot}
\clearpage\subroutine{psb\_gedot}{Dot Product}
This function computes dot product between two vectors $x$ and
$y$.\\
@ -130,9 +128,9 @@ Else if $x$ and $y$ are complex vectors then it computes dot-product as:
%% \item[$y$] represents the global subvector $y_{:,jy}$
%% \end{description}
\begin{verbatim}
\begin{lstlisting}
psb_gedot(x, y, desc_a, info)
\end{verbatim}
\end{lstlisting}
%% \syntax*{psb\_gedot}{x, y, desc\_a, info, jx, jy}
\begin{table}[h]
\begin{center}
@ -206,8 +204,7 @@ An integer value; 0 means no error has been detected.
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\clearpage\subsection*{psb\_gedots --- Generalized Dot Product}
\addcontentsline{toc}{subsection}{psb\_gedots}
\clearpage\subroutine{psb\_gedots}{Generalized Dot Product}
This subroutine computes a series of dot products among the columns of
two dense matrices $x$ and $y$:
@ -217,9 +214,9 @@ usual convention applies, i.e. the conjugate transpose of $x$ is
used. If $x$ and $y$ are of rank one, then $res$ is a scalar, else it
is a rank one array.
\begin{verbatim}
\begin{lstlisting}
call psb_gedots(res, x, y, desc_a, info)
\end{verbatim}
\end{lstlisting}
\begin{table}[h]
\begin{center}
\begin{tabular}{ll}
@ -280,8 +277,7 @@ An integer value; 0 means no error has been detected.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\clearpage\subsection*{psb\_geamax --- Infinity-Norm of Vector}
\addcontentsline{toc}{subsection}{psb\_geamax}
\clearpage\subroutine{psb\_geamax}{Infinity-Norm of Vector}
This function computes
the infinity-norm of a vector $x$.\\
@ -295,9 +291,9 @@ else if $x$ is a complex vector then it computes the infinity-norm as:
%% \item[$x$] represents the global subvector $x_{:,jx}$
%% \end{description}
\begin{verbatim}
\begin{lstlisting}
psb_geamax(x, desc_a, info)
\end{verbatim}
\end{lstlisting}
%% \syntax*{psb\_geamax}{x, desc\_a, info, jx}
\begin{table}[h]
@ -358,16 +354,15 @@ An integer value; 0 means no error has been detected.
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\clearpage\subsection*{psb\_geamaxs --- Generalized Infinity Norm}
\addcontentsline{toc}{subsection}{psb\_geamaxs}
\clearpage\subroutine{psb\_geamaxs}{Generalized Infinity Norm}
This subroutine computes a series of infinity norms on the columns of
a dense matrix $x$:
\[ res(i) \leftarrow \max_k |x(k,i)| \]
\begin{verbatim}
\begin{lstlisting}
call psb_geamaxs(res, x, desc_a, info)
\end{verbatim}
\end{lstlisting}
\begin{table}[h]
\begin{center}
@ -420,8 +415,7 @@ An integer value; 0 means no error has been detected.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\clearpage\subsection*{psb\_geasum --- 1-Norm of Vector}
\addcontentsline{toc}{subsection}{psb\_geasum}
\clearpage\subroutine{psb\_geasum}{1-Norm of Vector}
This function computes the 1-norm of a vector $x$.\\
If $x$ is a real vector
@ -431,9 +425,9 @@ else if $x$ is a complex vector then it computes 1-norm as:
\[ asum \leftarrow \|re(x)\|_1 + \|im(x)\|_1\]
\begin{verbatim}
\begin{lstlisting}
psb_geasum(x, desc_a, info)
\end{verbatim}
\end{lstlisting}
\begin{table}[h]
\begin{center}
@ -482,8 +476,7 @@ An integer value; 0 means no error has been detected.
\end{description}
\clearpage\subsection*{psb\_geasums --- Generalized 1-Norm of Vector}
\addcontentsline{toc}{subsection}{psb\_geasums}
\clearpage\subroutine{psb\_geasums}{Generalized 1-Norm of Vector}
This subroutine computes a series of 1-norms on the columns of
a dense matrix $x$:
@ -496,9 +489,9 @@ else if $x$ is a complex vector then it computes 1-norm as:
\[ res(i) \leftarrow \|re(x)\|_1 + \|im(x)\|_1\]
\begin{verbatim}
\begin{lstlisting}
call psb_geasums(res, x, desc_a, info)
\end{verbatim}
\end{lstlisting}
\begin{table}[h]
\begin{center}
@ -556,8 +549,7 @@ An integer value; 0 means no error has been detected.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\clearpage\subsection*{psb\_genrm2 --- 2-Norm of Vector}
\addcontentsline{toc}{subsection}{psb\_geasums}
\clearpage\subroutine{psb\_genrm2}{2-Norm of Vector}
This function computes the 2-norm of a vector $x$.\\
If $x$ is a real vector
@ -586,9 +578,9 @@ Long Precision Real&Long Precision Complex & psb\_genrm2 \\
\caption{Data types\label{tab:f90nrm2}}
\end{table}
\begin{verbatim}
\begin{lstlisting}
psb_genrm2(x, desc_a, info)
\end{verbatim}
\end{lstlisting}
%% \syntax*{psb\_genrm2}{x, desc\_a, info, jx}
\begin{description}
@ -630,17 +622,16 @@ An integer value; 0 means no error has been detected.
\clearpage\subsection*{psb\_genrm2s --- Generalized 2-Norm of Vector}
\addcontentsline{toc}{subsection}{psb\_genrm2s}
\clearpage\subroutine{psb\_genrm2s}{Generalized 2-Norm of Vector}
This subroutine computes a series of 2-norms on the columns of
a dense matrix $x$:
\[ res(i) \leftarrow \|x(:,i)\|_2 \]
\begin{verbatim}
\begin{lstlisting}
call psb_genrm2s(res, x, desc_a, info)
\end{verbatim}
\end{lstlisting}
\begin{table}[h]
\begin{center}
@ -698,8 +689,7 @@ An integer value; 0 means no error has been detected.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\clearpage\subsection*{psb\_spnrm1 --- 1-Norm of Sparse Matrix}
\addcontentsline{toc}{subsection}{psb\_spnrm1}
\clearpage\subroutine{psb\_spnrm1}{1-Norm of Sparse Matrix}
This function computes the 1-norm of a matrix $A$:\\
@ -725,9 +715,9 @@ Long Precision Complex & psb\_spnrm1 \\
\caption{Data types\label{tab:f90nrm1}}
\end{table}
\begin{verbatim}
\begin{lstlisting}
psb_spnrm1(A, desc_a, info)
\end{verbatim}
\end{lstlisting}
\begin{description}
\item[Type:] Synchronous.
@ -762,8 +752,7 @@ An integer value; 0 means no error has been detected.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\clearpage\subsection*{psb\_spnrmi --- Infinity Norm of Sparse Matrix}
\addcontentsline{toc}{subsection}{psb\_spnrmi}
\clearpage\subroutine{psb\_spnrmi}{Infinity Norm of Sparse Matrix}
This function computes the infinity-norm of a matrix $A$:\\
@ -789,9 +778,9 @@ Long Precision Complex & psb\_spnrmi \\
\caption{Data types\label{tab:f90nrmi}}
\end{table}
\begin{verbatim}
\begin{lstlisting}
psb_spnrmi(A, desc_a, info)
\end{verbatim}
\end{lstlisting}
\begin{description}
\item[Type:] Synchronous.
@ -826,8 +815,7 @@ An integer value; 0 means no error has been detected.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\clearpage\subsection*{psb\_spmm --- Sparse Matrix by Dense Matrix Product}
\addcontentsline{toc}{subsection}{psb\_spmm}
\clearpage\subroutine{psb\_spmm}{Sparse Matrix by Dense Matrix Product}
This subroutine computes the Sparse Matrix by Dense Matrix Product:
@ -867,11 +855,11 @@ Long Precision Complex & psb\_spmm \\
\caption{Data types\label{tab:f90spmm}}
\end{table}
\begin{verbatim}
\begin{lstlisting}
call psb_spmm(alpha, a, x, beta, y, desc_a, info)
call psb_spmm(alpha, a, x, beta, y,desc_a, info, &
& trans, work)
\end{verbatim}
\end{lstlisting}
\begin{description}
\item[Type:] Synchronous.
@ -978,8 +966,7 @@ An integer value; 0 means no error has been detected.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\clearpage\subsection*{psb\_spsm --- Triangular System Solve}
\addcontentsline{toc}{subsection}{psb\_spsm}
\clearpage\subroutine{psb\_spsm}{Triangular System Solve}
This subroutine computes the Triangular System Solve:
@ -1004,11 +991,11 @@ where:
\item[$D$] is the scaling diagonal matrix.
\end{description}
\begin{verbatim}
\begin{lstlisting}
call psb_spsm(alpha, t, x, beta, y, desc_a, info)
call psb_spsm(alpha, t, x, beta, y, desc_a, info,&
& trans, unit, choice, diag, work)
\end{verbatim}
\end{lstlisting}
\begin{table}[h]
\begin{center}

@ -5,16 +5,15 @@
%
%% psb_cdall %%
%
\subsection*{psb\_cdall --- Allocates a communication descriptor}
\addcontentsline{toc}{subsection}{psb\_cdall}
\subroutine{psb\_cdall}{Allocates a communication descriptor}
\begin{verbatim}
\begin{lstlisting}
call psb_cdall(icontxt, desc_a, info,mg=mg,parts=parts)
call psb_cdall(icontxt, desc_a, info,vg=vg,[mg=mg,flag=flag])
call psb_cdall(icontxt, desc_a, info,vl=vl,[nl=nl,globalcheck=.true.,lidx=lidx])
call psb_cdall(icontxt, desc_a, info,nl=nl)
call psb_cdall(icontxt, desc_a, info,mg=mg,repl=.true.)
\end{verbatim}
\end{lstlisting}
This subroutine initializes the communication descriptor associated
with an index space. One of the optional arguments
@ -109,14 +108,14 @@ An integer value; 0 means no error has been detected.
optional argument is specified, then it is mandatory to
specify the argument \verb|mg| as well.
The subroutine must conform to the following interface:
\begin{verbatim}
\begin{lstlisting}
interface
subroutine psb_parts(glob_index,mg,np,pv,nv)
integer, intent (in) :: glob_index,np,mg
integer, intent (out) :: nv, pv(*)
end subroutine psb_parts
end interface
\end{verbatim}
\end{lstlisting}
The input arguments are:
\begin{description}
\item[glob\_index] The global index to be mapped;
@ -196,13 +195,12 @@ An integer value; 0 means no error has been detected.
%
%% psb_cdins %%
%
\clearpage\subsection*{psb\_cdins --- Communication descriptor insert routine}
\addcontentsline{toc}{subsection}{psb\_cdins}
\clearpage\subroutine{psb\_cdins}{Communication descriptor insert routine}
\begin{verbatim}
\begin{lstlisting}
call psb_cdins(nz, ia, ja, desc_a, info [,ila,jla])
call psb_cdins(nz,ja,desc,info[,jla,mask,lidx])
\end{verbatim}
\end{lstlisting}
This subroutine examines the edges of the graph associated with the
discretization mesh (and isomorphic to the sparsity pattern of a
@ -291,12 +289,11 @@ nor the end vertex belong to the current process.
%
%% psb_cdasb %%
%
\clearpage\subsection*{psb\_cdasb --- Communication descriptor assembly routine}
\addcontentsline{toc}{subsection}{psb\_cdasb}
\clearpage\subroutine{psb\_cdasb}{Communication descriptor assembly routine}
\begin{verbatim}
\begin{lstlisting}
call psb_cdasb(desc_a, info)
\end{verbatim}
\end{lstlisting}
\begin{description}
\item[Type:] Synchronous.
@ -333,12 +330,11 @@ An integer value; 0 means no error has been detected.
%
%% psb_cdcpy %%
%
\clearpage\subsection*{psb\_cdcpy --- Copies a communication descriptor}
\addcontentsline{toc}{subsection}{psb\_cdcpy}
\clearpage\subroutine{psb\_cdcpy}{Copies a communication descriptor}
\begin{verbatim}
\begin{lstlisting}
call psb_cdcpy(desc_in, desc_out, info)
\end{verbatim}
\end{lstlisting}
\begin{description}
\item[Type:] Asynchronous.
@ -369,12 +365,11 @@ An integer value; 0 means no error has been detected.
%
%% psb_cdfree %%
%
\clearpage\subsection*{psb\_cdfree --- Frees a communication descriptor}
\addcontentsline{toc}{subsection}{psb\_cdfree}
\clearpage\subroutine{psb\_cdfree}{Frees a communication descriptor}
\begin{verbatim}
\begin{lstlisting}
call psb_cdfree(desc_a, info)
\end{verbatim}
\end{lstlisting}
\begin{description}
\item[Type:] Synchronous.
@ -400,13 +395,12 @@ An integer value; 0 means no error has been detected.
%
%% psb_cdcpy %%
%
\clearpage\subsection*{psb\_cdbldext --- Build an extended communication
\clearpage\subroutine{psb\_cdbldext}{Build an extended communication
descriptor}
\addcontentsline{toc}{subsection}{psb\_cdbldext}
\begin{verbatim}
\begin{lstlisting}
call psb_cdbldext(a,desc_a,nl,desc_out, info, extype)
\end{verbatim}
\end{lstlisting}
This subroutine builds an extended communication descriptor, based on
the input descriptor \verb|desc_a| and on the stencil specified
@ -470,9 +464,8 @@ An integer value; 0 means no error has been detected.
%% %
%% %% psb_cdren %%
%% %
%% \subsection*{psb\_cdren --- Applies a renumeration to a
%% \subroutine{psb\_cdren}{Applies a renumeration to a
%% communication descriptor}
%% \addcontentsline{toc}{subsection}{psb\_cdren}
%% \syntax{call psb\_cdren}{trans, iperm, desc\_a, info}
@ -507,8 +500,7 @@ An integer value; 0 means no error has been detected.
%
%% psb_descprt %%
%
%% \subsection*{psb\_cdprt --- Prints a descriptor}
%%\addcontentsline{toc}{subsection}{psb\_cdprt}
%% \subroutine{psb\_cdprt}{Prints a descriptor}
%% \syntax{call psb\_cdprt}{iout, desc\_a, glob, short}
@ -537,12 +529,11 @@ An integer value; 0 means no error has been detected.
%
%% psb_spalloc %%
%
\clearpage\subsection*{psb\_spall --- Allocates a sparse matrix}
\addcontentsline{toc}{subsection}{psb\_spall}
\clearpage\subroutine{psb\_spall}{Allocates a sparse matrix}
\begin{verbatim}
\begin{lstlisting}
call psb_spall(a, desc_a, info, nnz)
\end{verbatim}
\end{lstlisting}
\begin{description}
\item[Type:] Synchronous.
@ -589,13 +580,12 @@ An integer value; 0 means no error has been detected.
%
%% psb_spins %%
%
\clearpage\subsection*{psb\_spins --- Insert a cloud of elements into a sparse
\clearpage\subroutine{psb\_spins}{Insert a cloud of elements into a sparse
matrix}
\addcontentsline{toc}{subsection}{psb\_spins}
\begin{verbatim}
\begin{lstlisting}
call psb_spins(nz, ia, ja, val, a, desc_a, info [,local])
\end{verbatim}
\end{lstlisting}
\begin{description}
\item[Type:] Asynchronous.
@ -695,12 +685,11 @@ An integer value; 0 means no error has been detected.
%
%% psb_spasb %%
%
\clearpage\subsection*{psb\_spasb --- Sparse matrix assembly routine}
\addcontentsline{toc}{subsection}{psb\_spasb}
\clearpage\subroutine{psb\_spasb}{Sparse matrix assembly routine}
\begin{verbatim}
\begin{lstlisting}
call psb_spasb(a, desc_a, info, afmt, upd, dupl, mold)
\end{verbatim}
\end{lstlisting}
\begin{description}
\item[Type:] Synchronous.
@ -770,9 +759,8 @@ An integer value; 0 means no error has been detected.
%% %
%% %% psb_spcnv %%
%% %
%% \subsection*{psb\_spcnv --- Converts a sparse matrix storage
%% \subroutine{psb\_spcnv}{Converts a sparse matrix storage
%% format}
%%\addcontentsline{toc}{subsection}{psb\_spcnv}
%% \syntax{call psb\_spcnv}{a, b, desc\_a, info}
@ -805,12 +793,11 @@ An integer value; 0 means no error has been detected.
%
%% psb_spfree %%
%
\clearpage\subsection*{psb\_spfree --- Frees a sparse matrix}
\addcontentsline{toc}{subsection}{psb\_spfree}
\clearpage\subroutine{psb\_spfree}{Frees a sparse matrix}
\begin{verbatim}
\begin{lstlisting}
call psb_spfree(a, desc_a, info)
\end{verbatim}
\end{lstlisting}
\begin{description}
\item[Type:] Synchronous.
@ -842,13 +829,12 @@ An integer value; 0 means no error has been detected.
%
%% psb_sprn %%
%
\clearpage\subsection*{psb\_sprn --- Reinit sparse matrix structure for psblas
\clearpage\subroutine{psb\_sprn}{Reinit sparse matrix structure for psblas
routines.}
\addcontentsline{toc}{subsection}{psb\_sprn}
\begin{verbatim}
\begin{lstlisting}
call psb_sprn(a, decsc_a, info, clear)
\end{verbatim}
\end{lstlisting}
\begin{description}
\item[Type:] Synchronous.
@ -886,8 +872,7 @@ An integer value; 0 means no error has been detected.
%
%% psb_spupdate %%
%
%% \subsection*{psb\_spupdate --- Updates a sparse matrix.}
%%\addcontentsline{toc}{subsection}{psb\_spupdate}
%% \subroutine{psb\_spupdate}{Updates a sparse matrix.}
%% \syntax{call psb\_spupdate}{a, ia, ja, blck, desc\_a, info, ix, jx, updflag}
@ -901,9 +886,8 @@ An integer value; 0 means no error has been detected.
%% %
%% %% psb_csrp %%
%% %
%% \subsection*{psb\_csrp --- Applies a right permutation to a sparse
%% \subroutine{psb\_csrp}{Applies a right permutation to a sparse
%% matrix}
%%\addcontentsline{toc}{subsection}{psb\_csrp}
%% \syntax{call psb\_csrp}{trans, iperm, a, info}
@ -933,12 +917,11 @@ An integer value; 0 means no error has been detected.
%
%% psb_alloc %%
%
\clearpage\subsection*{psb\_geall --- Allocates a dense matrix}
\addcontentsline{toc}{subsection}{psb\_geall}
\clearpage\subroutine{psb\_geall}{Allocates a dense matrix}
\begin{verbatim}
\begin{lstlisting}
call psb_geall(x, desc_a, info, n, lb)
\end{verbatim}
\end{lstlisting}
\begin{description}
\item[Type:] Synchronous.
@ -981,12 +964,11 @@ An integer value; 0 means no error has been detected.
%
%% psb_ins %%
%
\clearpage\subsection*{psb\_geins --- Dense matrix insertion routine}
\addcontentsline{toc}{subsection}{psb\_geins}
\clearpage\subroutine{psb\_geins}{Dense matrix insertion routine}
\begin{verbatim}
\begin{lstlisting}
call psb_geins(m, irw, val, x, desc_a, info [,dupl,local])
\end{verbatim}
\end{lstlisting}
\begin{description}
\item[Type:] Asynchronous.
@ -1054,12 +1036,11 @@ An integer value; 0 means no error has been detected.
%
%% psb_asb %%
%
\clearpage\subsection*{psb\_geasb --- Assembly a dense matrix}
\addcontentsline{toc}{subsection}{psb\_geasb}
\clearpage\subroutine{psb\_geasb}{Assembly a dense matrix}
\begin{verbatim}
\begin{lstlisting}
call psb_geasb(x, desc_a, info, mold)
\end{verbatim}
\end{lstlisting}
\begin{description}
\item[Type:] Synchronous.
@ -1094,12 +1075,11 @@ An integer value; 0 means no error has been detected.
%
%% psb_free %%
%
\clearpage\subsection*{psb\_gefree --- Frees a dense matrix}
\addcontentsline{toc}{subsection}{psb\_gefree}
\clearpage\subroutine{psb\_gefree}{Frees a dense matrix}
\begin{verbatim}
\begin{lstlisting}
call psb_gefree(x, desc_a, info)
\end{verbatim}
\end{lstlisting}
\begin{description}
\item[Type:] Synchronous.
@ -1132,13 +1112,12 @@ An integer value; 0 means no error has been detected.
%
%% psb_gelp %%
%
\clearpage\subsection*{psb\_gelp --- Applies a left permutation to a dense
\clearpage\subroutine{psb\_gelp}{Applies a left permutation to a dense
matrix}
\addcontentsline{toc}{subsection}{psb\_gelp}
\begin{verbatim}
\begin{lstlisting}
call psb_gelp(trans, iperm, x, info)
\end{verbatim}
\end{lstlisting}
\begin{description}
\item[Type:] Asynchronous.
@ -1173,14 +1152,13 @@ An integer value; 0 means no error has been detected.
%
%% psb_glob_to_loc %%
%
\clearpage\subsection*{psb\_glob\_to\_loc --- Global to local indices
\clearpage\subroutine{psb\_glob\_to\_loc}{Global to local indices
convertion}
\addcontentsline{toc}{subsection}{psb\_glob\_to\_loc}
\begin{verbatim}
\begin{lstlisting}
call psb_glob_to_loc(x, y, desc_a, info, iact,owned)
call psb_glob_to_loc(x, desc_a, info, iact,owned)
\end{verbatim}
\end{lstlisting}
\begin{description}
\item[Type:] Asynchronous.
@ -1241,14 +1219,13 @@ An integer value; 0 means no error has been detected.
\end{enumerate}
\clearpage\subsection*{psb\_loc\_to\_glob --- Local to global indices
\clearpage\subroutine{psb\_loc\_to\_glob}{Local to global indices
conversion}
\addcontentsline{toc}{subsection}{psb\_loc\_to\_glob}
\begin{verbatim}
\begin{lstlisting}
call psb_loc_to_glob(x, y, desc_a, info, iact)
call psb_loc_to_glob(x, desc_a, info, iact)
\end{verbatim}
\end{lstlisting}
\begin{description}
\item[Type:] Asynchronous.
@ -1298,12 +1275,11 @@ An integer value; 0 means no error has been detected.
%
%% psb_loc_to_glob %%
%
\clearpage\subsection*{psb\_is\_owned }
\addcontentsline{toc}{subsection}{psb\_is\_owned}
\clearpage\subroutine{psb\_is\_owned }{}
\begin{verbatim}
\begin{lstlisting}
call psb_is_owned(x, desc_a)
\end{verbatim}
\end{lstlisting}
\begin{description}
\item[Type:] Asynchronous.
@ -1338,12 +1314,11 @@ Intent: {\bf out}.\\
\end{enumerate}
\clearpage\subsection*{psb\_owned\_index }
\addcontentsline{toc}{subsection}{psb\_owned\_index}
\clearpage\subroutine{psb\_owned\_index }{}
\begin{verbatim}
\begin{lstlisting}
call psb_owned_index(y, x, desc_a, info)
\end{verbatim}
\end{lstlisting}
\begin{description}
\item[Type:] Asynchronous.
@ -1390,12 +1365,11 @@ An integer value; 0 means no error has been detected.
\end{enumerate}
\clearpage\subsection*{psb\_is\_local }
\addcontentsline{toc}{subsection}{psb\_is\_local}
\clearpage\subroutine{psb\_is\_local }{}
\begin{verbatim}
\begin{lstlisting}
call psb_is_local(x, desc_a)
\end{verbatim}
\end{lstlisting}
\begin{description}
\item[Type:] Asynchronous.
@ -1429,12 +1403,11 @@ Intent: {\bf out}.\\
indices
\end{enumerate}
\clearpage\subsection*{psb\_local\_index }
\addcontentsline{toc}{subsection}{psb\_local\_index}
\clearpage\subroutine{psb\_local\_index }{}
\begin{verbatim}
\begin{lstlisting}
call psb_local_index(y, x, desc_a, info)
\end{verbatim}
\end{lstlisting}
\begin{description}
\item[Type:] Asynchronous.
@ -1485,12 +1458,11 @@ An integer value; 0 means no error has been detected.
%
%% psb_ins %%
%
\clearpage\subsection*{psb\_get\_boundary --- Extract list of boundary elements}
\addcontentsline{toc}{subsection}{psb\_get\_boundary}
\clearpage\subroutine{psb\_get\_boundary}{Extract list of boundary elements}
\begin{verbatim}
\begin{lstlisting}
call psb_get_boundary(bndel, desc, info)
\end{verbatim}
\end{lstlisting}
\begin{description}
\item[Type:] Asynchronous.
@ -1527,12 +1499,11 @@ An integer value; 0 means no error has been detected.
number of boundary elements.
\end{enumerate}
\clearpage\subsection*{psb\_get\_overlap --- Extract list of overlap elements}
\addcontentsline{toc}{subsection}{psb\_get\_overlap}
\clearpage\subroutine{psb\_get\_overlap}{Extract list of overlap elements}
\begin{verbatim}
\begin{lstlisting}
call psb_get_overlap(ovrel, desc, info)
\end{verbatim}
\end{lstlisting}
\begin{description}
\item[Type:] Asynchronous.
@ -1570,13 +1541,12 @@ An integer value; 0 means no error has been detected.
\clearpage\subsection*{psb\_sp\_getrow --- Extract row(s) from a sparse matrix}
\addcontentsline{toc}{subsection}{psb\_sp\_getrow}
\clearpage\subroutine{psb\_sp\_getrow}{Extract row(s) from a sparse matrix}
\begin{verbatim}
\begin{lstlisting}
call psb_sp_getrow(row, a, nz, ia, ja, val, info, &
& append, nzin, lrw)
\end{verbatim}
\end{lstlisting}
\begin{description}
\item[Type:] Asynchronous.
@ -1663,17 +1633,16 @@ An integer value; 0 means no error has been detected.
\clearpage\subsection*{psb\_sizeof --- Memory occupation}
\addcontentsline{toc}{subsection}{psb\_sizeof}
\clearpage\subroutine{psb\_sizeof}{Memory occupation}
This function computes the memory occupation of a PSBLAS object.
\begin{verbatim}
\begin{lstlisting}
isz = psb_sizeof(a)
isz = psb_sizeof(desc_a)
isz = psb_sizeof(prec)
\end{verbatim}
\end{lstlisting}
\begin{description}
\item[Type:] Asynchronous.
@ -1702,8 +1671,7 @@ Returned as: an \verb|integer(psb_long_int_k_)| number.
\end{description}
\clearpage\subsection*{Sorting utilities}
\addcontentsline{toc}{subsection}{Sorting utilities}
\clearpage\subroutine{Sorting utilities}{}
{\par\noindent\large\bfseries psb\_msort --- Sorting by the Merge-sort
algorithm}
@ -1712,11 +1680,11 @@ Returned as: an \verb|integer(psb_long_int_k_)| number.
algorithm}
{\par\noindent\large\bfseries psb\_hsort --- Sorting by the Heapsort algorithm}
\begin{verbatim}
\begin{lstlisting}
call psb_msort(x,ix,dir,flag)
call psb_qsort(x,ix,dir,flag)
call psb_hsort(x,ix,dir,flag)
\end{verbatim}
\end{lstlisting}
These serial routines sort a sequence $X$ into ascending or
descending order. The argument meaning is identical for the three

@ -16,6 +16,7 @@
\usepackage{graphicx}
\newtheorem{theorem}{Theorem}
\newtheorem{corollary}{Corollary}
\usepackage{listings}
%\newboolean{mtc}
%\setboolean{mtc}{true}
@ -24,7 +25,7 @@
\relax
\pdfcompresslevel=0 %-- 0 = none, 9 = best
\pdfinfo{ %-- Info dictionary of PDF output /Author (Alfredo Buttari)
/Title (Parallel Sparse BLAS V. 3.1)
/Title (Parallel Sparse BLAS V. 3.2)
/Subject (Parallel Sparse Basic Linear Algebra Subroutines)
/Keywords (Computer Science Linear Algebra Fluid Dynamics Parallel Linux MPI PSBLAS Iterative Solvers Preconditioners)
/Creator (pdfLaTeX)
@ -45,9 +46,14 @@
\markright{#1}}%
\newcommand{\subsubroutine}[2]{%
\stepcounter{subroutine}%
\subsection*{\flushleft #1---#2 \endflushleft}%
\subsubsection*{\flushleft #1---#2 \endflushleft}%
\addcontentsline{toc}{subsubsection}{#1}%
\markright{#1}}%
\newcommand{\subsubsubroutine}[2]{%
\stepcounter{subroutine}%
\subsubsection*{\flushleft #1---#2 \endflushleft}%
\addcontentsline{toc}{paragraph}{#1}%
\markright{#1}}%
\newcommand{\examplename}{Example}
\newcommand{\syntaxname}{Syntax}
\def\syntax{\@ifstar{\@ssyntax}{\@syntax}}%
@ -80,8 +86,8 @@
\begin{document}
\pdfbookmark{PSBLAS-v3.1 User's Guide}{title}
\pdfbookmark{PSBLAS-v3.2 User's Guide}{title}
\lstset{language=Fortran}
\newlength{\centeroffset}
\setlength{\centeroffset}{-0.5\oddsidemargin}
\addtolength{\centeroffset}{0.5\evensidemargin}
@ -90,7 +96,7 @@
\vspace*{\stretch{1}}
\noindent\hspace*{\centeroffset}\makebox[0pt][l]{\begin{minipage}{\textwidth}
\flushright
{\Huge\bfseries PSBLAS 3.1 User's guide
{\Huge\bfseries PSBLAS 3.2 User's guide
}
\noindent\rule[-1ex]{\textwidth}{5pt}\\[2.5ex]
\hfill\emph{\Large A reference guide for the Parallel Sparse BLAS library}
@ -103,11 +109,12 @@
by Salvatore Filippone\\
and Alfredo Buttari}\\
University of Rome ``Tor Vergata''.\\[3ex]
June 14, 2013
March 31st, 2014.
\end{minipage}}
%\addtolength{\textwidth}{\centeroffset}
\vspace{\stretch{2}}
\setcounter{tocdepth}{4}
\cleardoublepage
\begingroup
@ -121,7 +128,6 @@ June 14, 2013
\pagenumbering{arabic} % Arabic numbering
\setcounter{page}{1} % Chapters start on page 1
\include{intro}
\include{datastruct}
\include{psbrout}

@ -15,6 +15,7 @@
\usepackage{graphicx}
\newtheorem{theorem}{Theorem}
\newtheorem{corollary}{Corollary}
\usepackage{listings}
%\newboolean{mtc}
%\setboolean{mtc}{true}
@ -23,7 +24,7 @@
% \relax
% \pdfcompresslevel=0 %-- 0 = none, 9 = best
% \pdfinfo{ %-- Info dictionary of PDF output /Author (Alfredo Buttari)
% /Title (Parallel Sparse BLAS V. 3.1)
% /Title (Parallel Sparse BLAS V. 3.2)
% /Subject (Parallel Sparse Basic Linear Algebra Subroutines)
% /Keywords (Computer Science Linear Algebra Fluid Dynamics Parallel Linux MPI PSBLAS Iterative Solvers Preconditioners)
% /Creator (pdfLaTeX)
@ -47,6 +48,11 @@
\subsection*{\flushleft #1---#2 \endflushleft}%
\addcontentsline{toc}{subsubsection}{#1}%
\markright{#1}}%
\newcommand{\subsubsubroutine}[2]{%
\stepcounter{subroutine}%
\subsubsection*{\flushleft #1---#2 \endflushleft}%
\addcontentsline{toc}{paragraph}{#1}%
\markright{#1}}%
\newcommand{\examplename}{Example}
\newcommand{\syntaxname}{Syntax}
\def\syntax{\@ifstar{\@ssyntax}{\@syntax}}%
@ -78,6 +84,8 @@
\newcommand{\vbasedata}{\hypertarget{vbasedata}{{\tt psb\_T\_base\_vect\_type}}}
\begin{document}
\lstset{language=Fortran}
{\LARGE\bfseries PSBLAS\\[.8ex] User's and Reference
Guide}\\[\baselineskip]
\emph{\large A reference guide for the Parallel Sparse BLAS library}\\[3ex]
@ -86,9 +94,9 @@
University of Rome ``Tor Vergata'', Italy\\[2ex]
%\\[10ex]
%\today
Software version: 3.1\\
Software version: 3.2\\
%\today
June 14, 2013.
March 31st, 2014.
\cleardoublepage
\begingroup
\renewcommand*{\thepage}{toc}

@ -9,13 +9,12 @@ module \verb|psb_util_mod|.
%\subroutine{PSB\_HBIO\_MOD}{Input/Output in Harwell-Boeing format}
\clearpage\subsection*{hb\_read --- Read a sparse matrix from a file in the
\clearpage\subroutine{hb\_read}{Read a sparse matrix from a file in the
Harwell--Boeing format}
\addcontentsline{toc}{subsubsection}{hb\_read}
\begin{verbatim}
\begin{lstlisting}
call hb_read(a, iret, iunit, filename, b, mtitle)
\end{verbatim}
\end{lstlisting}
\begin{description}
\item[Type:] Asynchronous.
@ -52,13 +51,12 @@ An integer value; 0 means no error has been detected.
\clearpage\subsection*{hb\_write --- Write a sparse matrix to a file
\clearpage\subroutine{hb\_write}{Write a sparse matrix to a file
in the Harwell--Boeing format}
\addcontentsline{toc}{subsubsection}{hb\_write}
\begin{verbatim}
\begin{lstlisting}
call hb_write(a, iret, iunit, filename, key, rhs, mtitle)
\end{verbatim}
\end{lstlisting}
@ -105,13 +103,12 @@ An integer value; 0 means no error has been detected.
%\subroutine{PSB\_MMIO\_MOD}{Input/Output in MatrixMarket format}
\clearpage\subsection*{mm\_mat\_read --- Read a sparse matrix from a
\clearpage\subroutine{mm\_mat\_read}{Read a sparse matrix from a
file in the MatrixMarket format}
\addcontentsline{toc}{subsubsection}{mm\_mat\_read}
\begin{verbatim}
\begin{lstlisting}
call mm_mat_read(a, iret, iunit, filename)
\end{verbatim}
\end{lstlisting}
\begin{description}
\item[Type:] Asynchronous.
@ -136,12 +133,11 @@ Type: {\bf required} \\
An integer value; 0 means no error has been detected.
\end{description}
\clearpage\subsection*{mm\_vet\_read --- Read a dense vector from a
\clearpage\subroutine{mm\_vet\_read}{Read a dense vector from a
file in the MatrixMarket format}
\addcontentsline{toc}{subsubsection}{mm\_vet\_read }
\begin{verbatim}
\begin{lstlisting}
call mm_vet_read(b, iret, iunit, filename)
\end{verbatim}
\end{lstlisting}
\begin{description}
\item[Type:] Asynchronous.
@ -170,12 +166,11 @@ An integer value; 0 means no error has been detected.
\clearpage\subsection*{mm\_mat\_write --- Write a sparse matrix to a
\clearpage\subroutine{mm\_mat\_write}{Write a sparse matrix to a
file in the MatrixMarket format}
\addcontentsline{toc}{subsubsection}{mm\_mat\_write}
\begin{verbatim}
\begin{lstlisting}
call mm_mat_write(a, mtitle, iret, iunit, filename)
\end{verbatim}
\end{lstlisting}
\begin{description}
\item[Type:] Asynchronous.
\item[\bf On Entry ]

Loading…
Cancel
Save