(Module):
parent
3acb2737fa
commit
5dd25f596d
@ -0,0 +1,371 @@
|
|||||||
|
\section{Communication routines}
|
||||||
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
|
%
|
||||||
|
% HALO DATA COMMUNICATION
|
||||||
|
%
|
||||||
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
|
|
||||||
|
|
||||||
|
\subroutine{psb\_halo}{Halo Data Communication}
|
||||||
|
|
||||||
|
These subroutines restore a consistent status for the halo
|
||||||
|
elements, and (optionally) scale the result:
|
||||||
|
|
||||||
|
\[ x \leftarrow \alpha x \]
|
||||||
|
where:
|
||||||
|
\begin{description}
|
||||||
|
\item[$x$] is a global dense submatrix.
|
||||||
|
\end{description}
|
||||||
|
|
||||||
|
\begin{table}[h]
|
||||||
|
\begin{center}
|
||||||
|
\begin{tabular}{ll}
|
||||||
|
\hline
|
||||||
|
$\alpha$, $x$ & {\bf Subroutine}\\
|
||||||
|
\hline
|
||||||
|
Single Precision Real & psb\_halo\\
|
||||||
|
Long Precision Real & psb\_halo \\
|
||||||
|
Long Precision Complex & psb\_halo \\
|
||||||
|
\hline
|
||||||
|
\end{tabular}
|
||||||
|
\end{center}
|
||||||
|
\caption{Data types\label{tab:f90halo}}
|
||||||
|
\end{table}
|
||||||
|
|
||||||
|
\syntax{CALL psb\_halo}{x, desc\_a, info}
|
||||||
|
\syntax*{CALL psb\_halo}{x, desc\_a, info, alpha, work}
|
||||||
|
|
||||||
|
\begin{description}
|
||||||
|
\item[\bf On Entry]
|
||||||
|
\item[x] global dense matrix $x$.\\
|
||||||
|
Scope: {\bf local} \\
|
||||||
|
Type: {\bf required} \\
|
||||||
|
Specified as: a rank one or two array with the POINTER attribute
|
||||||
|
containing numbers of type specified in
|
||||||
|
Table~\ref{tab:f90halo}.
|
||||||
|
\item[desc\_a] contains data structures for communications.\\
|
||||||
|
Scope: {\bf local} \\
|
||||||
|
Type: {\bf required}\\
|
||||||
|
Specified as: a structured data type specified in
|
||||||
|
\S~\ref{sec:datastruct}.
|
||||||
|
\item[alpha] the scalar $\alpha$.\\
|
||||||
|
Scope: {\bf global} \\
|
||||||
|
Type: {\bf optional} \\
|
||||||
|
Default: $alpha = 1 $\\
|
||||||
|
Specified as: a number of the data type indicated in Table~\ref{tab:f90halo}.
|
||||||
|
\item[work] the work array. \\
|
||||||
|
Scope: {\bf local} \\
|
||||||
|
Type: {\bf optional}\\
|
||||||
|
Specified as: a rank one array of the same type of $x$ with the
|
||||||
|
POINTER attribute.
|
||||||
|
|
||||||
|
\item[\bf On Return]
|
||||||
|
\item[x] global dense result matrix $x$.\\
|
||||||
|
Scope: {\bf local} \\
|
||||||
|
Type: {\bf required} \\
|
||||||
|
Returned as: a rank one or two array with the POINTER attribute
|
||||||
|
containing numbers of type specified in
|
||||||
|
Table~\ref{tab:f90halo}.
|
||||||
|
\item[info] the local portion of result submatrix $y$.\\
|
||||||
|
Scope: {\bf local} \\
|
||||||
|
Type: {\bf required} \\
|
||||||
|
An integer value that contains an error code.
|
||||||
|
\end{description}
|
||||||
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
|
%
|
||||||
|
% OVERLAP UPDATE
|
||||||
|
%
|
||||||
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
|
|
||||||
|
|
||||||
|
\subroutine{psb\_ovrl}{Overlap Update}
|
||||||
|
|
||||||
|
These subroutines restore a consistent status for the overlap
|
||||||
|
elements:
|
||||||
|
|
||||||
|
\[ x \leftarrow Q x \]
|
||||||
|
where:
|
||||||
|
\begin{description}
|
||||||
|
\item[$x$] is the global dense submatrix $x$
|
||||||
|
\item[$Q$] is the overlap operator; it is the composition of two
|
||||||
|
operators $ P_a$ and $ P^{T}$.
|
||||||
|
\end{description}
|
||||||
|
|
||||||
|
\begin{table}[h]
|
||||||
|
\begin{center}
|
||||||
|
\begin{tabular}{ll}
|
||||||
|
\hline
|
||||||
|
$x$ & {\bf Subroutine}\\
|
||||||
|
\hline
|
||||||
|
Single Precision Real & psb\_ovrl\\
|
||||||
|
Long Precision Real & psb\_ovrl \\
|
||||||
|
Long Precision Complex & psb\_ovrl \\
|
||||||
|
\hline
|
||||||
|
\end{tabular}
|
||||||
|
\end{center}
|
||||||
|
\caption{Data types\label{tab:f90ovrl}}
|
||||||
|
\end{table}
|
||||||
|
|
||||||
|
\syntax{CALL psb\_ovrl}{x, desc\_a, info}
|
||||||
|
\syntax*{CALL psb\_ovrl}{x, desc\_a, info, choice=choice,
|
||||||
|
update\_type=update\_type, work=work}
|
||||||
|
|
||||||
|
\begin{description}
|
||||||
|
\item[\bf On Entry]
|
||||||
|
\item[x] global dense matrix $x$.\\
|
||||||
|
Scope: {\bf local} \\
|
||||||
|
Type: {\bf required} \\
|
||||||
|
Specified as: a rank one or two array with the POINTER attribute
|
||||||
|
containing numbers of type specified in
|
||||||
|
Table~\ref{tab:f90ovrl}.
|
||||||
|
\item[desc\_a] contains data structures for communications.\\
|
||||||
|
Scope: {\bf local} \\
|
||||||
|
Type: {\bf required}\\
|
||||||
|
Specified as: a structured data type specified in
|
||||||
|
\S~\ref{sec:datastruct}.
|
||||||
|
item[choice] specify if exchange overlap elements.
|
||||||
|
\begin{description}
|
||||||
|
\item[choice = .true.] exchange overlap elements, i.e. apply operator
|
||||||
|
$P^{T}$;
|
||||||
|
\item[choice = .false.] don't exchange overlap elements
|
||||||
|
\end{description}
|
||||||
|
Scope: {\bf global} \\
|
||||||
|
Type: {\bf optional} \\
|
||||||
|
Default: $choice = .true. $\\
|
||||||
|
Specified as: a logical variable.
|
||||||
|
\begin{description}
|
||||||
|
\item[update\_type = 1] normal update $P_a$;
|
||||||
|
\item[update\_type = 2] square root update $\sqrt{P_a}$;
|
||||||
|
\end{description}
|
||||||
|
Scope: {\bf global} \\
|
||||||
|
Default: $update\_type = .true. $\\
|
||||||
|
Scope: {\bf global} \\
|
||||||
|
Specified as: a integer variable.
|
||||||
|
\item[work] the work array. \\
|
||||||
|
Scope: {\bf local} \\
|
||||||
|
Type: {\bf optional}\\
|
||||||
|
Specified as: a one dimensional array of the same type of $x$.
|
||||||
|
|
||||||
|
\item[\bf On Return]
|
||||||
|
\item[x] global dense result matrix $x$.\\
|
||||||
|
Scope: {\bf local} \\
|
||||||
|
Type: {\bf required} \\
|
||||||
|
Specified as: a pointer to array of rank one or two
|
||||||
|
containing numbers of type specified in
|
||||||
|
Table~\ref{tab:f90ovrl}.
|
||||||
|
\item[info] the local portion of result submatrix $y$.\\
|
||||||
|
Scope: {\bf local} \\
|
||||||
|
Type: {\bf required} \\
|
||||||
|
An integer value that contains an error code.
|
||||||
|
\end{description}
|
||||||
|
|
||||||
|
|
||||||
|
\section*{Usage notes}
|
||||||
|
\begin{enumerate}
|
||||||
|
\item If there is no overlap in the data distribution, no operations
|
||||||
|
are performed;
|
||||||
|
\item The operator $P^{T}$ performs the reduction sum of overlap
|
||||||
|
elements; it is the inverse of a ``stretch'' operator $P$ that
|
||||||
|
replicates overlap elements, accounting for the physical replication
|
||||||
|
of data;
|
||||||
|
\item The operator $P_a$ performs a scaling on the overlap elements by
|
||||||
|
the amount of replication; thus, when combined with the reduction
|
||||||
|
operator, it implements the average of replicated elements over all of
|
||||||
|
their instances.
|
||||||
|
\item The square root update option makes it possible to applythe
|
||||||
|
following operator:
|
||||||
|
\[ x\leftarrow \sqrt{P_a} P^{T} K^{-1} P \sqrt{P_a} x\]
|
||||||
|
In the case of a symmetric $K$, this preserves simmetry of the overall
|
||||||
|
preconditioner, which would otherwise be destroyed.
|
||||||
|
\end{enumerate}
|
||||||
|
|
||||||
|
|
||||||
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
|
%
|
||||||
|
% GATHER GLOBAL DENSE MATRIX
|
||||||
|
%
|
||||||
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
|
|
||||||
|
\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
|
||||||
|
process.
|
||||||
|
|
||||||
|
\[ glob\_x \leftarrow collect(loc\_x_i) \]
|
||||||
|
where:
|
||||||
|
\begin{description}
|
||||||
|
\item[$glob\_x$] is the global submatrix $glob\_x_{iy:iy+m-1,jy:jy+n-1}$
|
||||||
|
\item[$loc\_x_i$] is the local portion of global dense matrix on
|
||||||
|
process $i$.
|
||||||
|
\item[$collect$] is the collect function.
|
||||||
|
\end{description}
|
||||||
|
|
||||||
|
\begin{table}[h]
|
||||||
|
\begin{center}
|
||||||
|
\begin{tabular}{ll}
|
||||||
|
\hline
|
||||||
|
$x_i, y$ & {\bf Subroutine}\\
|
||||||
|
\hline
|
||||||
|
Single Precision Real & psb\_gather\\
|
||||||
|
Long Precision Real & psb\_gather \\
|
||||||
|
Long Precision Complex & psb\_gather \\
|
||||||
|
\hline
|
||||||
|
\end{tabular}
|
||||||
|
\end{center}
|
||||||
|
\caption{Data types\label{tab:gather}}
|
||||||
|
\end{table}
|
||||||
|
|
||||||
|
\syntax{call psb\_gather}{glob\_x, loc\_x, desc\_a, info,
|
||||||
|
root, iglobx, jglobx, ilocx, jlocx, k}
|
||||||
|
\syntax{call psb\_gather}{glob\_x, loc\_x, desc\_a, info,
|
||||||
|
root, iglobx, ilocx}
|
||||||
|
|
||||||
|
\begin{description}
|
||||||
|
\item[\bf On Entry]
|
||||||
|
\item[loc\_x] the local portion of global dense matrix
|
||||||
|
$glob\_x$. \\
|
||||||
|
Scope: {\bf local} \\
|
||||||
|
Type: {\bf required}\\
|
||||||
|
Specified as: a rank one or two array containing numbers of the type
|
||||||
|
indicated in Table~\ref{tab:gather}.
|
||||||
|
\item[desc\_a] contains data structures for communications.\\
|
||||||
|
Scope: {\bf local} \\
|
||||||
|
Type: {\bf required}\\
|
||||||
|
Specified as: a structured data type specified in \S~\ref{sec:datastruct}.
|
||||||
|
\item[root] The process that holds the global copy. If $root=-1$ all
|
||||||
|
the processes will have a copy of the global vector.\\
|
||||||
|
Scope: {\bf global} \\
|
||||||
|
Type: {\bf optional}\\
|
||||||
|
Specified as: an integer variable $0\le ix\le np$.
|
||||||
|
\item[iglobx] Row index to define a submatrix in glob\_x into which
|
||||||
|
gather the local pieces.\\
|
||||||
|
Scope: {\bf global} \\
|
||||||
|
Type: {\bf optional}\\
|
||||||
|
Specified as: an integer variable $1\le ix\le matrix\_data(psb\_m\_)$.
|
||||||
|
\item[jglobx] Column index to define a submatrix in glob\_x into which
|
||||||
|
gather the local pieces.\\
|
||||||
|
Scope: {\bf global} \\
|
||||||
|
Type: {\bf optional}\\
|
||||||
|
Specified as: an integer variable.
|
||||||
|
\item[ilocx] Row index to define a submatrix in loc\_x that has to
|
||||||
|
be gathered into glob\_x.\\
|
||||||
|
Scope: {\bf local} \\
|
||||||
|
Type: {\bf optional}\\
|
||||||
|
Specified as: an integer variable.
|
||||||
|
\item[jlocx] Columns index to define a submatrix in loc\_x that has
|
||||||
|
to be gathered into glob\_x.\\
|
||||||
|
Scope: {\bf global} \\
|
||||||
|
Type: {\bf optional}\\
|
||||||
|
Specified as: an integer variable.
|
||||||
|
\item[k] The number of columns to gather.\\
|
||||||
|
Scope: {\bf global} \\
|
||||||
|
Type: {\bf optional}\\
|
||||||
|
Specified as: an integer variable.
|
||||||
|
\item[\bf On Return]
|
||||||
|
\item[glob\_x] The array where the local parts must be gathered.\\
|
||||||
|
Scope: {\bf global} \\
|
||||||
|
Type: {\bf required}\\
|
||||||
|
Specified as: a rank one or two array.
|
||||||
|
\item[info] the local portion of result submatrix $y$.\\
|
||||||
|
Scope: {\bf local} \\
|
||||||
|
Type: {\bf required} \\
|
||||||
|
An integer value that contains an error code.
|
||||||
|
\end{description}
|
||||||
|
|
||||||
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
|
%
|
||||||
|
% SCATTER GLOBAL DENSE MATRIX
|
||||||
|
%
|
||||||
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
|
|
||||||
|
\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.
|
||||||
|
|
||||||
|
\[ loc\_x_i \leftarrow scatter(glob\_x_i) \]
|
||||||
|
where:
|
||||||
|
\begin{description}
|
||||||
|
\item[$glob\_x$] is the global submatrix $glob\_x_{iy:iy+m-1,jy:jy+n-1}$
|
||||||
|
\item[$loc\_x_i$] is the local portion of global dense matrix on
|
||||||
|
process $i$.
|
||||||
|
\item[$scatter$] is the scatter function.
|
||||||
|
\end{description}
|
||||||
|
|
||||||
|
\begin{table}[h]
|
||||||
|
\begin{center}
|
||||||
|
\begin{tabular}{ll}
|
||||||
|
\hline
|
||||||
|
$x_i, y$ & {\bf Subroutine}\\
|
||||||
|
\hline
|
||||||
|
Single Precision Real & psb\_scatter\\
|
||||||
|
Long Precision Real & psb\_scatter \\
|
||||||
|
Long Precision Complex & psb\_scatter \\
|
||||||
|
\hline
|
||||||
|
\end{tabular}
|
||||||
|
\end{center}
|
||||||
|
\caption{Data types\label{tab:scatter}}
|
||||||
|
\end{table}
|
||||||
|
|
||||||
|
\syntax{call psb\_scatter}{glob\_x, loc\_x, desc\_a, info,
|
||||||
|
root, iglobx, jglobx, ilocx, jlocx, k}
|
||||||
|
\syntax{call psb\_scatter}{glob\_x, loc\_x, desc\_a, info,
|
||||||
|
root, iglobx, ilocx}
|
||||||
|
|
||||||
|
\begin{description}
|
||||||
|
\item[\bf On Entry]
|
||||||
|
\item[glob\_x] The array that must be scattered into local pieces.\\
|
||||||
|
Scope: {\bf global} \\
|
||||||
|
Type: {\bf required}\\
|
||||||
|
Specified as: a rank one or two array.
|
||||||
|
\item[desc\_a] contains data structures for communications.\\
|
||||||
|
Scope: {\bf local} \\
|
||||||
|
Type: {\bf required}\\
|
||||||
|
Specified as: a structured data type specified in \S~\ref{sec:datastruct}.
|
||||||
|
\item[root] The process that holds the global copy. If $root=-1$ all
|
||||||
|
the processes have a copy of the global vector.\\
|
||||||
|
Scope: {\bf global} \\
|
||||||
|
Type: {\bf optional}\\
|
||||||
|
Specified as: an integer variable $0\le ix\le np$.
|
||||||
|
\item[iglobx] Row index to define a submatrix in glob\_x that has to
|
||||||
|
be scattered into local pieces.\\
|
||||||
|
Scope: {\bf global} \\
|
||||||
|
Type: {\bf optional}\\
|
||||||
|
Specified as: an integer variable $1\le ix\le matrix\_data(psb\_m\_)$.
|
||||||
|
\item[jglobx] Column index to define a submatrix in glob\_x that has to
|
||||||
|
be scattered into local pieces.\\
|
||||||
|
Scope: {\bf global} \\
|
||||||
|
Type: {\bf optional}\\
|
||||||
|
Specified as: an integer variable.
|
||||||
|
\item[ilocx] Row index to define a submatrix in loc\_x into which
|
||||||
|
scatter the local piece of glob\_x.\\
|
||||||
|
Scope: {\bf local} \\
|
||||||
|
Type: {\bf optional}\\
|
||||||
|
Specified as: an integer variable.
|
||||||
|
\item[jlocx] Columns index to define a submatrix in loc\_x into which
|
||||||
|
scatter the local piece of glob\_x.\\
|
||||||
|
Scope: {\bf global} \\
|
||||||
|
Type: {\bf optional}\\
|
||||||
|
Specified as: an integer variable.
|
||||||
|
\item[k] The number of columns to scatter.\\
|
||||||
|
Scope: {\bf global} \\
|
||||||
|
Type: {\bf optional}\\
|
||||||
|
Specified as: an integer variable.
|
||||||
|
\item[\bf On Return]
|
||||||
|
\item[loc\_x] the local portion of global dense matrix
|
||||||
|
$glob\_x$. \\
|
||||||
|
Scope: {\bf local} \\
|
||||||
|
Type: {\bf required}\\
|
||||||
|
Specified as: a rank one or two array containing numbers of the type
|
||||||
|
indicated in Table~\ref{tab:scatter}.
|
||||||
|
\item[info] the local portion of result submatrix $y$.\\
|
||||||
|
Scope: {\bf local} \\
|
||||||
|
Type: {\bf required} \\
|
||||||
|
An integer value that contains an error code.
|
||||||
|
\end{description}
|
||||||
|
|
||||||
|
%%% Local Variables:
|
||||||
|
%%% mode: latex
|
||||||
|
%%% TeX-master: "userguide"
|
||||||
|
%%% End:
|
@ -0,0 +1,195 @@
|
|||||||
|
\section{Data Structures}
|
||||||
|
\label{sec:datastruct}
|
||||||
|
%\ifthenelse{\boolean{mtc}}{\minitoc}{}
|
||||||
|
|
||||||
|
In this chapter are illustrated data structures used for definition of
|
||||||
|
routines interfaces. This include data structure for sparse matrix,
|
||||||
|
communication descriptor and preconditioner. These data structures are used for
|
||||||
|
calling PSBLAS routines in Fortran~90 language and will be used to next
|
||||||
|
chapters containing these callings. Their definitions are included in
|
||||||
|
the modules \verb|psb_spmat_type|, \verb|psb_descriptor_type| and \verb|psb_prec_type|.
|
||||||
|
|
||||||
|
\subsection{Sparse Matrix data structure}
|
||||||
|
\label{sec:spmat}
|
||||||
|
Contains all information about local portion of the sparse matrix and
|
||||||
|
its storage mode. Many of this fields are set in fully-transparent
|
||||||
|
mode by PSBLAS-TOOLS routines when inserting a new sparse matrix, user
|
||||||
|
must set only fields which describe matrix storage mode (see
|
||||||
|
\S~\ref{psb_spall}). \\
|
||||||
|
Fields contained in Sparse matrix structures are:
|
||||||
|
\begin{description}
|
||||||
|
\item[{\bf aspk}] Contains values of the local distributed sparse
|
||||||
|
matrix.\\
|
||||||
|
Specified as: a pointer to an array of rank one of type corresponding
|
||||||
|
to matrix entries type .
|
||||||
|
\item[{\bf ia1}] Holds integer information on distributed sparse
|
||||||
|
matrix. Actual information will depend on data format used.\\
|
||||||
|
Specified as: a pointer to an integer array of rank one.
|
||||||
|
\item[{\bf ia2}] Holds integer information on distributed sparse
|
||||||
|
matrix. Actual information will depend on data format used.\\
|
||||||
|
Specified as: a pointer to an integer array of rank one.
|
||||||
|
\item[{\bf infoa}] On entry can hold auxiliary information on distributed sparse
|
||||||
|
matrix. Actual information will depend on data format used.\\
|
||||||
|
Specified as: integer array of length 10.
|
||||||
|
\item[{\bf fida}] Defines the format of the distributed sparse matrix.\\
|
||||||
|
Specified as: a string of length 5
|
||||||
|
\item[{\bf descra}] Describe the characteristic of the distributed sparse matrix.\\
|
||||||
|
Specified as: array of character of length 9.
|
||||||
|
\item[{\bf pl}] Specifies the local row permutation of distributed sparse
|
||||||
|
matrix. If pl(1) is equal to 0, then there isn't row permutation.\\
|
||||||
|
Specified as: pointer to integer array of dimension equal to number of local row (matrix\_data[psb\_n\_row\_\hbox{]})
|
||||||
|
\item[{\bf pr}] Specifies the local column permutation of distributed sparse
|
||||||
|
matrix. If PR(1) is equal to 0, then there isn't columnm permutation.\\
|
||||||
|
Specified as: pointer to integer array of dimension equal to number of
|
||||||
|
local row (matrix\_data[psb\_n\_col\_\hbox{]})
|
||||||
|
\item[{\bf m}] Number of rows; if row indices are stored explicitly,
|
||||||
|
as in Coordinate Storage, should be greater than or equal to the
|
||||||
|
maximum row index actually present in the sparse matrix.
|
||||||
|
Specified as: integer variable.
|
||||||
|
\item[{\bf k}] Number of columns; if column indices are stored explicitly,
|
||||||
|
as in Coordinate Storage or Compressed Sparse Rows, should be greater
|
||||||
|
than or equal to the maximum column index actually present in the sparse matrix.
|
||||||
|
Specified as: integer variable.
|
||||||
|
\end{description}
|
||||||
|
Values assumed by this fields are compatible with ref. 1 (see \S~\ref{chap:appendix}).\\
|
||||||
|
FORTRAN95 interface for distributed sparse matrices containing double precision
|
||||||
|
real entries is defined as follows:
|
||||||
|
\begin{verbatim}
|
||||||
|
type d_spmat
|
||||||
|
integer :: m, k
|
||||||
|
character*5 :: fida
|
||||||
|
character*1 :: descra(9)
|
||||||
|
integer :: infoa(10)
|
||||||
|
real(kind(1.d0)), pointer :: aspk(:)
|
||||||
|
integer, pointer :: ia1(:), ia2(:)
|
||||||
|
integer, pointer :: pl(:), pr(:)
|
||||||
|
end type d_spmat
|
||||||
|
\end{verbatim}
|
||||||
|
The following two cases are used in the data insertion routines:
|
||||||
|
\begin{description}
|
||||||
|
\item[fida=``CSR''] Compressed storage rows. In this case the
|
||||||
|
following should hold:
|
||||||
|
\begin{enumerate}
|
||||||
|
\item \verb|ia2(i)| contains the index of the first element of row
|
||||||
|
\verb|i|; the last element of the sparse matrix is thus stored at
|
||||||
|
index $ia2(m+1)-1$. It should contain \verb|m+1| entries in
|
||||||
|
nondecreasing order (strictly increasing, if there are no empty rows).
|
||||||
|
\item \verb|ia1(j)| contains the column index and \verb|aspk(j)|
|
||||||
|
contains the corresponding coefficient value, for all $ia2(1) \le j
|
||||||
|
\le ia2(m+1)-1$.
|
||||||
|
\end{enumerate}
|
||||||
|
\item[fida=``COO''] Coordinate storage. In this case the following
|
||||||
|
should hold:
|
||||||
|
\begin{enumerate}
|
||||||
|
\item \verb|infoa(1)| contains the number of nonzero elements in the
|
||||||
|
matrix;
|
||||||
|
\item For all $1 \le j \le infoa(1)$, the coefficient, row index and
|
||||||
|
column index are stored into \verb|apsk(j)|, \verb|ia1(j)| and
|
||||||
|
\verb|ia2(j)| respectively.
|
||||||
|
\end{enumerate}
|
||||||
|
\end{description}
|
||||||
|
|
||||||
|
|
||||||
|
\subsubsection{Sparse Matrix storage formats}
|
||||||
|
|
||||||
|
\subsection{Descriptor data structure}
|
||||||
|
\label{sec:desc}
|
||||||
|
All the general matrix informations and elements to be
|
||||||
|
exchanged among processes are stored within a data structure of the type $psb_desc_type$.
|
||||||
|
Every structure of this type is associated to a sparse matrix, it
|
||||||
|
contains data about general matrix informations and elements to be
|
||||||
|
exchanged among processes. \\
|
||||||
|
It is not necessary for the user to
|
||||||
|
know the internal structure of $psb_desc_type$, it is set in
|
||||||
|
fully-transparent mode by PSBLAS-TOOLS routines when inserting a new
|
||||||
|
sparse matrix, however the definition of the descriptor is the
|
||||||
|
following.
|
||||||
|
\begin{description}
|
||||||
|
\item[{\bf matrix\_data}] includes general information about matrix and
|
||||||
|
BLACS grid. More precisely:
|
||||||
|
\begin{description}
|
||||||
|
\item[matrix\_data[psb\_dec\_type\_\hbox{]}] Identifies the decomposition type
|
||||||
|
(global); the actual values are internally defined, so they should
|
||||||
|
never be accessed directly.
|
||||||
|
\item[matrix\_data[psb\_ctxt\_\hbox{]}] Communication context as returned by the
|
||||||
|
BLACS (global).
|
||||||
|
\item[matrix\_data[psb\_m\_\hbox{]}] Total number of equations (global).
|
||||||
|
\item[matrix\_data[psb\_n\_\hbox{]}] Total number of variables (global).
|
||||||
|
\item[matrix\_data[psb\_n\_row\_\hbox{]}] Number of grid variables owned by the
|
||||||
|
current process (local); equivalent to the number of local rows in the
|
||||||
|
sparse coefficient matrix.
|
||||||
|
\item[matrix\_data[psb\_n\_col\_\hbox{]}] Total number of grid variables read by the
|
||||||
|
current process (local); equivalent to the number of local columns in
|
||||||
|
the sparse coefficient matrix. They include the halo.
|
||||||
|
\end{description}
|
||||||
|
Specified as: a pointer to integer array of dimension 10.
|
||||||
|
\item[{\bf halo\_index}] A list of the halo and boundary elements for
|
||||||
|
the current process to be exchanged with other processes; for each
|
||||||
|
processes with which it is necessary to communicate:
|
||||||
|
\begin{enumerate}
|
||||||
|
\item Process identifier;
|
||||||
|
\item Number of points to be received;
|
||||||
|
\item Indices of points to be received;
|
||||||
|
\item Number of points to be sent;
|
||||||
|
\item Indices of points to be sent;
|
||||||
|
\end{enumerate}
|
||||||
|
The list may contain an arbitrary number of groups; its end is marked
|
||||||
|
by a -1.\\
|
||||||
|
Specified as: a pointer to an integer array of rank one.
|
||||||
|
\item [{\bf ovrlap\_index}] A list of the overlap elements for the
|
||||||
|
current process, organized in groups like the previous vector:
|
||||||
|
\begin{enumerate}
|
||||||
|
\item Process identifier;
|
||||||
|
\item Number of points to be received;
|
||||||
|
\item Indices of points to be received;
|
||||||
|
\item Number of points to be sent;
|
||||||
|
\item Indices of points to be sent;
|
||||||
|
\end{enumerate}
|
||||||
|
The list may contain an arbitrary number of groups; its end is marked
|
||||||
|
by a -1.\\
|
||||||
|
Specified as: a pointer to an integer array of rank one.
|
||||||
|
\item [{\bf ovrlap\_index}] For all overlap points belonging to th
|
||||||
|
ecurrent process:
|
||||||
|
\begin{enumerate}
|
||||||
|
\item Overlap point index;
|
||||||
|
\item Number of processes sharing that overlap points;
|
||||||
|
\end{enumerate}
|
||||||
|
The list may contain an arbitrary number of groups; its end is marked
|
||||||
|
by a -1.\\
|
||||||
|
Specified as: a pointer to an integer array of rank one.
|
||||||
|
\item[{\bf loc\_to\_glob}] each element $i$ of this array contains
|
||||||
|
global identifier of the local variable $i$.\\
|
||||||
|
Specified as: a pointer to an integer array of rank one.
|
||||||
|
\item[{\bf glob\_to\_loc}] if global variable $i$ is read by current
|
||||||
|
process then element $i$ contains local index correpondent to global variable $i$;
|
||||||
|
else element $i$ contains -1 (NULL) value.\\
|
||||||
|
Specified as: a pointer to an integer array of rank one.
|
||||||
|
\end{description}
|
||||||
|
FORTRAN90 interface for $decomp\_data$ structures is therefore defined
|
||||||
|
as follows:
|
||||||
|
\begin{verbatim}
|
||||||
|
type decomp_data_type
|
||||||
|
integer, pointer :: matrix_data(:)
|
||||||
|
integer, pointer :: halo_index(:)
|
||||||
|
integer, pointer :: ovrlap_elem(:)
|
||||||
|
integer, pointer :: ovrlap_index(:)
|
||||||
|
integer, pointer :: loc_to_glob(:)
|
||||||
|
integer, pointer :: glob_to_loc (:)
|
||||||
|
end type decomp_data_type
|
||||||
|
\end{verbatim}
|
||||||
|
|
||||||
|
\subsection{Preconditioner data structure}
|
||||||
|
\label{sec:prec}
|
||||||
|
\hypertarget{precdata}{ciao finocchio}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
\subsection{Building and assembling data structures}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
%%% Local Variables:
|
||||||
|
%%% mode: latex
|
||||||
|
%%% TeX-master: "userguide"
|
||||||
|
%%% End:
|
@ -0,0 +1,6 @@
|
|||||||
|
\section{Introduction}
|
||||||
|
|
||||||
|
%%% Local Variables:
|
||||||
|
%%% mode: latex
|
||||||
|
%%% TeX-master: "userguide"
|
||||||
|
%%% End:
|
@ -0,0 +1,482 @@
|
|||||||
|
\section{Iterative Methods}
|
||||||
|
\label{sec:methods}
|
||||||
|
|
||||||
|
In this chapter we provide routines for preconditioners and iterative
|
||||||
|
methods. Their
|
||||||
|
interfaces are defined in the module \verb|psb_methd_mod|
|
||||||
|
|
||||||
|
|
||||||
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
|
%
|
||||||
|
% CG
|
||||||
|
%
|
||||||
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
|
|
||||||
|
\subroutine{psb\_cg \label{cg}}{CG Iterative Method}
|
||||||
|
|
||||||
|
This subroutine implements the CG method with restarting. The
|
||||||
|
stopping criterion is the normwise backward error, in the infinity
|
||||||
|
norm, i.e. the iteration is stopped when
|
||||||
|
\[ \frac{\|r\|}{(\|A\|\|x\|+\|b\|)} < eps \]
|
||||||
|
or
|
||||||
|
\[ \frac{\|r_i\|}{\|b\|_2} < eps \]
|
||||||
|
according to the value passed through the istop argument (see later).
|
||||||
|
|
||||||
|
|
||||||
|
\syntax{call psb\_cgs}{a,prec,b,x,eps,desc\_a,info,itmax,iter,err,itrace,istop}
|
||||||
|
|
||||||
|
\begin{description}
|
||||||
|
\item[\bf On Entry]
|
||||||
|
\item[a] the local portion of global sparse matrix
|
||||||
|
$A$. \\
|
||||||
|
Scope: {\bf local} \\
|
||||||
|
Type: {\bf required}\\
|
||||||
|
Specified as: a structured data type specified in \S~\ref{sec:datastruct}.
|
||||||
|
\item[prec] The data structure containing the preconditioner.\\
|
||||||
|
Scope: {\bf local} \\
|
||||||
|
Type: {\bf required}\\
|
||||||
|
Specified as: a structured data type specified in \S~\ref{sec:datastruct}.
|
||||||
|
\item[b] The RHS vector. \\
|
||||||
|
Scope: {\bf local} \\
|
||||||
|
Type: {\bf required}\\
|
||||||
|
Specified as: a rank one array.
|
||||||
|
\item[x] The initial guess. \\
|
||||||
|
Scope: {\bf local} \\
|
||||||
|
Type: {\bf required}\\
|
||||||
|
Specified as: a rank one array.
|
||||||
|
\item[eps] The stopping tolerance. \\
|
||||||
|
Scope: {\bf global} \\
|
||||||
|
Type: {\bf required}\\
|
||||||
|
Specified as: a real number.
|
||||||
|
\item[desc\_a] contains data structures for communications.\\
|
||||||
|
Scope: {\bf local} \\
|
||||||
|
Type: {\bf required}\\
|
||||||
|
Specified as: a structured data type specified in \S~\ref{sec:datastruct}.
|
||||||
|
\item[itmax] The maximum number of iterations to perform.\\
|
||||||
|
Scope: {\bf global} \\
|
||||||
|
Type: {\bf optional}\\
|
||||||
|
Default: $itmax = 1000$.\\
|
||||||
|
Specified as: an integer variable $itmax \ge 1$.
|
||||||
|
\item[itrace] A tracing parameter.\\
|
||||||
|
Scope: {\bf global} \\
|
||||||
|
Type: {\bf optional}\\
|
||||||
|
\item[istop] An integer specifying the stopping criterion.\\
|
||||||
|
Scope: {\bf global} \\
|
||||||
|
Type: {\bf optional}\\
|
||||||
|
|
||||||
|
\item[\bf On Return]
|
||||||
|
\item[x] The computed solution. \\
|
||||||
|
Scope: {\bf local} \\
|
||||||
|
Type: {\bf required}\\
|
||||||
|
Specified as: a rank one array.
|
||||||
|
\item[iter] The number of iterations performed.\\
|
||||||
|
Scope: {\bf global} \\
|
||||||
|
Type: {\bf optional}\\
|
||||||
|
Returned as: an integer variable.
|
||||||
|
\item[err] The error estimate on exit.\\
|
||||||
|
Scope: {\bf global} \\
|
||||||
|
Type: {\bf optional}\\
|
||||||
|
Returned as: a real number.
|
||||||
|
\item[info] An error code.\\
|
||||||
|
Scope: {\bf global} \\
|
||||||
|
Type: {\bf optional}\\
|
||||||
|
Returned as: an integer variable.
|
||||||
|
\end{description}
|
||||||
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
|
%
|
||||||
|
% CGS
|
||||||
|
%
|
||||||
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
|
|
||||||
|
\subroutine{psb\_cgs \label{cgs}}{CGS Iterative Method}
|
||||||
|
|
||||||
|
This subroutine implements the CGS method with restarting. The
|
||||||
|
stopping criterion is the normwise backward error, in the infinity
|
||||||
|
norm, i.e. the iteration is stopped when
|
||||||
|
\[ \frac{\|r\|}{(\|A\|\|x\|+\|b\|)} < eps \]
|
||||||
|
or
|
||||||
|
\[ \frac{\|r_i\|}{\|b\|_2} < eps \]
|
||||||
|
according to the value passed through the istop argument (see later).
|
||||||
|
|
||||||
|
|
||||||
|
\syntax{call psb\_cgs}{a,prec,b,x,eps,desc\_a,info,itmax,iter,err,itrace,istop}
|
||||||
|
|
||||||
|
\begin{description}
|
||||||
|
\item[\bf On Entry]
|
||||||
|
\item[a] the local portion of global sparse matrix
|
||||||
|
$A$. \\
|
||||||
|
Scope: {\bf local} \\
|
||||||
|
Type: {\bf required}\\
|
||||||
|
Specified as: a structured data type specified in \S~\ref{sec:datastruct}.
|
||||||
|
\item[prec] The data structure containing the preconditioner.\\
|
||||||
|
Scope: {\bf local} \\
|
||||||
|
Type: {\bf required}\\
|
||||||
|
Specified as: a structured data type specified in \S~\ref{sec:datastruct}.
|
||||||
|
\item[b] The RHS vector. \\
|
||||||
|
Scope: {\bf local} \\
|
||||||
|
Type: {\bf required}\\
|
||||||
|
Specified as: a rank one array.
|
||||||
|
\item[x] The initial guess. \\
|
||||||
|
Scope: {\bf local} \\
|
||||||
|
Type: {\bf required}\\
|
||||||
|
Specified as: a rank one array.
|
||||||
|
\item[eps] The stopping tolerance. \\
|
||||||
|
Scope: {\bf global} \\
|
||||||
|
Type: {\bf required}\\
|
||||||
|
Specified as: a real number.
|
||||||
|
\item[desc\_a] contains data structures for communications.\\
|
||||||
|
Scope: {\bf local} \\
|
||||||
|
Type: {\bf required}\\
|
||||||
|
Specified as: a structured data type specified in \S~\ref{sec:datastruct}.
|
||||||
|
\item[itmax] The maximum number of iterations to perform.\\
|
||||||
|
Scope: {\bf global} \\
|
||||||
|
Type: {\bf optional}\\
|
||||||
|
Default: $itmax = 1000$.\\
|
||||||
|
Specified as: an integer variable $itmax \ge 1$.
|
||||||
|
\item[itrace] A tracing parameter.\\
|
||||||
|
Scope: {\bf global} \\
|
||||||
|
Type: {\bf optional}\\
|
||||||
|
\item[istop] An integer specifying the stopping criterion.\\
|
||||||
|
Scope: {\bf global} \\
|
||||||
|
Type: {\bf optional}\\
|
||||||
|
|
||||||
|
\item[\bf On Return]
|
||||||
|
\item[x] The computed solution. \\
|
||||||
|
Scope: {\bf local} \\
|
||||||
|
Type: {\bf required}\\
|
||||||
|
Specified as: a rank one array.
|
||||||
|
\item[iter] The number of iterations performed.\\
|
||||||
|
Scope: {\bf global} \\
|
||||||
|
Type: {\bf optional}\\
|
||||||
|
Returned as: an integer variable.
|
||||||
|
\item[err] The error estimate on exit.\\
|
||||||
|
Scope: {\bf global} \\
|
||||||
|
Type: {\bf optional}\\
|
||||||
|
Returned as: a real number.
|
||||||
|
\item[info] An error code.\\
|
||||||
|
Scope: {\bf global} \\
|
||||||
|
Type: {\bf optional}\\
|
||||||
|
Returned as: an integer variable.
|
||||||
|
\end{description}
|
||||||
|
|
||||||
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
|
%
|
||||||
|
% BiCG
|
||||||
|
%
|
||||||
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
|
\subroutine{psb\_bicg \label{bicg}}{BiCG Iterative Method}
|
||||||
|
|
||||||
|
This subroutine implements the BiCG method with restarting. The
|
||||||
|
stopping criterion is the normwise backward error, in the infinity
|
||||||
|
norm, i.e. the iteration is stopped when
|
||||||
|
\[ \frac{\|r\|}{(\|A\|\|x\|+\|b\|)} < eps \]
|
||||||
|
or
|
||||||
|
\[ \frac{\|r_i\|}{\|b\|_2} < eps \]
|
||||||
|
according to the value passed through the istop argument (see later).
|
||||||
|
|
||||||
|
|
||||||
|
\syntax{call psb\_bicg}{a,prec,b,x,eps,desc\_a,info,itmax,iter,err,itrace,istop}
|
||||||
|
|
||||||
|
\begin{description}
|
||||||
|
\item[\bf On Entry]
|
||||||
|
\item[a] the local portion of global sparse matrix
|
||||||
|
$A$. \\
|
||||||
|
Scope: {\bf local} \\
|
||||||
|
Type: {\bf required}\\
|
||||||
|
Specified as: a structured data type specified in \S~\ref{sec:datastruct}.
|
||||||
|
\item[prec] The data structure containing the preconditioner.\\
|
||||||
|
Scope: {\bf local} \\
|
||||||
|
Type: {\bf required}\\
|
||||||
|
Specified as: a structured data type specified in \S~\ref{sec:datastruct}.
|
||||||
|
\item[b] The RHS vector. \\
|
||||||
|
Scope: {\bf local} \\
|
||||||
|
Type: {\bf required}\\
|
||||||
|
Specified as: a rank one array.
|
||||||
|
\item[x] The initial guess. \\
|
||||||
|
Scope: {\bf local} \\
|
||||||
|
Type: {\bf required}\\
|
||||||
|
Specified as: a rank one array.
|
||||||
|
\item[eps] The stopping tolerance. \\
|
||||||
|
Scope: {\bf global} \\
|
||||||
|
Type: {\bf required}\\
|
||||||
|
Specified as: a real number.
|
||||||
|
\item[desc\_a] contains data structures for communications.\\
|
||||||
|
Scope: {\bf local} \\
|
||||||
|
Type: {\bf required}\\
|
||||||
|
Specified as: a structured data type specified in \S~\ref{sec:datastruct}.
|
||||||
|
\item[itmax] The maximum number of iterations to perform.\\
|
||||||
|
Scope: {\bf global} \\
|
||||||
|
Type: {\bf optional}\\
|
||||||
|
Default: $itmax = 1000$.\\
|
||||||
|
Specified as: an integer variable $itmax \ge 1$.
|
||||||
|
\item[itrace] A tracing parameter.\\
|
||||||
|
Scope: {\bf global} \\
|
||||||
|
Type: {\bf optional}\\
|
||||||
|
\item[istop] An integer specifying the stopping criterion.\\
|
||||||
|
Scope: {\bf global} \\
|
||||||
|
Type: {\bf optional}\\
|
||||||
|
|
||||||
|
\item[\bf On Return]
|
||||||
|
\item[x] The computed solution. \\
|
||||||
|
Scope: {\bf local} \\
|
||||||
|
Type: {\bf required}\\
|
||||||
|
Specified as: a rank one array.
|
||||||
|
\item[iter] The number of iterations performed.\\
|
||||||
|
Scope: {\bf global} \\
|
||||||
|
Type: {\bf optional}\\
|
||||||
|
Returned as: an integer variable.
|
||||||
|
\item[err] The error estimate on exit.\\
|
||||||
|
Scope: {\bf global} \\
|
||||||
|
Type: {\bf optional}\\
|
||||||
|
Returned as: a real number.
|
||||||
|
\item[info] An error code.\\
|
||||||
|
Scope: {\bf global} \\
|
||||||
|
Type: {\bf optional}\\
|
||||||
|
Returned as: an integer variable.
|
||||||
|
\end{description}
|
||||||
|
|
||||||
|
|
||||||
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
|
%
|
||||||
|
% BiCGSTAB
|
||||||
|
%
|
||||||
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
|
\subroutine{psb\_bicgstab \label{bicgstab}}{BiCGSTAB Iterative Method}
|
||||||
|
|
||||||
|
This subroutine implements the BiCGSTAB method with restarting. The
|
||||||
|
stopping criterion is the normwise backward error, in the infinity
|
||||||
|
norm, i.e. the iteration is stopped when
|
||||||
|
\[ \frac{\|r\|}{(\|A\|\|x\|+\|b\|)} < eps \]
|
||||||
|
or
|
||||||
|
\[ \frac{\|r_i\|}{\|b\|_2} < eps \]
|
||||||
|
according to the value passed through the istop argument (see later).
|
||||||
|
|
||||||
|
|
||||||
|
\syntax{call psb\_bicgstab}{a,prec,b,x,eps,desc\_a,info,itmax,iter,err,itrace,istop}
|
||||||
|
|
||||||
|
\begin{description}
|
||||||
|
\item[\bf On Entry]
|
||||||
|
\item[a] the local portion of global sparse matrix
|
||||||
|
$A$. \\
|
||||||
|
Scope: {\bf local} \\
|
||||||
|
Type: {\bf required}\\
|
||||||
|
Specified as: a structured data type specified in \S~\ref{sec:datastruct}.
|
||||||
|
\item[prec] The data structure containing the preconditioner.\\
|
||||||
|
Scope: {\bf local} \\
|
||||||
|
Type: {\bf required}\\
|
||||||
|
Specified as: a structured data type specified in \S~\ref{sec:datastruct}.
|
||||||
|
\item[b] The RHS vector. \\
|
||||||
|
Scope: {\bf local} \\
|
||||||
|
Type: {\bf required}\\
|
||||||
|
Specified as: a rank one array.
|
||||||
|
\item[x] The initial guess. \\
|
||||||
|
Scope: {\bf local} \\
|
||||||
|
Type: {\bf required}\\
|
||||||
|
Specified as: a rank one array.
|
||||||
|
\item[eps] The stopping tolerance. \\
|
||||||
|
Scope: {\bf global} \\
|
||||||
|
Type: {\bf required}\\
|
||||||
|
Specified as: a real number.
|
||||||
|
\item[desc\_a] contains data structures for communications.\\
|
||||||
|
Scope: {\bf local} \\
|
||||||
|
Type: {\bf required}\\
|
||||||
|
Specified as: a structured data type specified in \S~\ref{sec:datastruct}.
|
||||||
|
\item[itmax] The maximum number of iterations to perform.\\
|
||||||
|
Scope: {\bf global} \\
|
||||||
|
Type: {\bf optional}\\
|
||||||
|
Default: $itmax = 1000$.\\
|
||||||
|
Specified as: an integer variable $itmax \ge 1$.
|
||||||
|
\item[itrace] A tracing parameter.\\
|
||||||
|
Scope: {\bf global} \\
|
||||||
|
Type: {\bf optional}\\
|
||||||
|
\item[istop] An integer specifying the stopping criterion.\\
|
||||||
|
Scope: {\bf global} \\
|
||||||
|
Type: {\bf optional}\\
|
||||||
|
|
||||||
|
\item[\bf On Return]
|
||||||
|
\item[x] The computed solution. \\
|
||||||
|
Scope: {\bf local} \\
|
||||||
|
Type: {\bf required}\\
|
||||||
|
Specified as: a rank one array.
|
||||||
|
\item[iter] The number of iterations performed.\\
|
||||||
|
Scope: {\bf global} \\
|
||||||
|
Type: {\bf optional}\\
|
||||||
|
Returned as: an integer variable.
|
||||||
|
\item[err] The error estimate on exit.\\
|
||||||
|
Scope: {\bf global} \\
|
||||||
|
Type: {\bf optional}\\
|
||||||
|
Returned as: a real number.
|
||||||
|
\item[info] An error code.\\
|
||||||
|
Scope: {\bf global} \\
|
||||||
|
Type: {\bf optional}\\
|
||||||
|
Returned as: an integer variable.
|
||||||
|
\end{description}
|
||||||
|
|
||||||
|
|
||||||
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
|
%
|
||||||
|
% BiCGSTAB(L)
|
||||||
|
%
|
||||||
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
|
\subroutine{psb\_bicgstabl \label{bicgstabl}}{BiCGSTAB-$l$ Iterative Method}
|
||||||
|
|
||||||
|
This subroutine implements the BiCGSTAB-$l$ method with restarting. The
|
||||||
|
stopping criterion is the normwise backward error, in the infinity
|
||||||
|
norm, i.e. the iteration is stopped when
|
||||||
|
\[ \frac{\|r\|}{(\|A\|\|x\|+\|b\|)} < eps \]
|
||||||
|
or
|
||||||
|
\[ \frac{\|r_i\|}{\|b\|_2} < eps \]
|
||||||
|
according to the value passed through the istop argument (see later).
|
||||||
|
|
||||||
|
|
||||||
|
\syntax{call psb\_bicgstab}{a,prec,b,x,eps,desc\_a,info,itmax,iter,err,itrace,irst,istop}
|
||||||
|
|
||||||
|
\begin{description}
|
||||||
|
\item[\bf On Entry]
|
||||||
|
\item[a] the local portion of global sparse matrix
|
||||||
|
$A$. \\
|
||||||
|
Scope: {\bf local} \\
|
||||||
|
Type: {\bf required}\\
|
||||||
|
Specified as: a structured data type specified in \S~\ref{sec:datastruct}.
|
||||||
|
\item[prec] The data structure containing the preconditioner.\\
|
||||||
|
Scope: {\bf local} \\
|
||||||
|
Type: {\bf required}\\
|
||||||
|
Specified as: a structured data type specified in \S~\ref{sec:datastruct}.
|
||||||
|
\item[b] The RHS vector. \\
|
||||||
|
Scope: {\bf local} \\
|
||||||
|
Type: {\bf required}\\
|
||||||
|
Specified as: a rank one array.
|
||||||
|
\item[x] The initial guess. \\
|
||||||
|
Scope: {\bf local} \\
|
||||||
|
Type: {\bf required}\\
|
||||||
|
Specified as: a rank one array.
|
||||||
|
\item[eps] The stopping tolerance. \\
|
||||||
|
Scope: {\bf global} \\
|
||||||
|
Type: {\bf required}\\
|
||||||
|
Specified as: a real number.
|
||||||
|
\item[desc\_a] contains data structures for communications.\\
|
||||||
|
Scope: {\bf local} \\
|
||||||
|
Type: {\bf required}\\
|
||||||
|
Specified as: a structured data type specified in \S~\ref{sec:datastruct}.
|
||||||
|
\item[itmax] The maximum number of iterations to perform.\\
|
||||||
|
Scope: {\bf global} \\
|
||||||
|
Type: {\bf optional}\\
|
||||||
|
Default: $itmax = 1000$.\\
|
||||||
|
Specified as: an integer variable $itmax \ge 1$.
|
||||||
|
\item[itrace] A tracing parameter.\\
|
||||||
|
Scope: {\bf global} \\
|
||||||
|
Type: {\bf optional}\\
|
||||||
|
\item[irst] An integer specifying the restarting iteration.\\
|
||||||
|
Scope: {\bf global} \\
|
||||||
|
Type: {\bf optional}\\
|
||||||
|
\item[istop] An integer specifying the stopping criterion.\\
|
||||||
|
Scope: {\bf global} \\
|
||||||
|
Type: {\bf optional}\\
|
||||||
|
|
||||||
|
\item[\bf On Return]
|
||||||
|
\item[x] The computed solution. \\
|
||||||
|
Scope: {\bf local} \\
|
||||||
|
Type: {\bf required}\\
|
||||||
|
Specified as: a rank one array.
|
||||||
|
\item[iter] The number of iterations performed.\\
|
||||||
|
Scope: {\bf global} \\
|
||||||
|
Type: {\bf optional}\\
|
||||||
|
Returned as: an integer variable.
|
||||||
|
\item[err] The error estimate on exit.\\
|
||||||
|
Scope: {\bf global} \\
|
||||||
|
Type: {\bf optional}\\
|
||||||
|
Returned as: a real number.
|
||||||
|
\item[info] An error code.\\
|
||||||
|
Scope: {\bf global} \\
|
||||||
|
Type: {\bf optional}\\
|
||||||
|
Returned as: an integer variable.
|
||||||
|
\end{description}
|
||||||
|
|
||||||
|
|
||||||
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
|
%
|
||||||
|
% GMRES
|
||||||
|
%
|
||||||
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
|
\subroutine{psb\_gmres \label{gmres}}{GMRES Iterative Method}
|
||||||
|
|
||||||
|
This subroutine implements the GMRES method with restarting. The
|
||||||
|
stopping criterion is the normwise backward error, in the infinity
|
||||||
|
norm, i.e. the iteration is stopped when
|
||||||
|
\[ \frac{\|r\|}{(\|A\|\|x\|+\|b\|)} < eps \]
|
||||||
|
or
|
||||||
|
\[ \frac{\|r_i\|}{\|b\|_2} < eps \]
|
||||||
|
according to the value passed through the istop argument (see later).
|
||||||
|
|
||||||
|
|
||||||
|
\syntax{call psb\_gmres}{a,prec,b,x,eps,desc\_a,info,itmax,iter,err,itrace,irst,istop}
|
||||||
|
|
||||||
|
\begin{description}
|
||||||
|
\item[\bf On Entry]
|
||||||
|
\item[a] the local portion of global sparse matrix
|
||||||
|
$A$. \\
|
||||||
|
Scope: {\bf local} \\
|
||||||
|
Type: {\bf required}\\
|
||||||
|
Specified as: a structured data type specified in \S~\ref{sec:datastruct}.
|
||||||
|
\item[prec] The data structure containing the preconditioner.\\
|
||||||
|
Scope: {\bf local} \\
|
||||||
|
Type: {\bf required}\\
|
||||||
|
Specified as: a structured data type specified in \S~\ref{sec:datastruct}.
|
||||||
|
\item[b] The RHS vector. \\
|
||||||
|
Scope: {\bf local} \\
|
||||||
|
Type: {\bf required}\\
|
||||||
|
Specified as: a rank one array.
|
||||||
|
\item[x] The initial guess. \\
|
||||||
|
Scope: {\bf local} \\
|
||||||
|
Type: {\bf required}\\
|
||||||
|
Specified as: a rank one array.
|
||||||
|
\item[eps] The stopping tolerance. \\
|
||||||
|
Scope: {\bf global} \\
|
||||||
|
Type: {\bf required}\\
|
||||||
|
Specified as: a real number.
|
||||||
|
\item[desc\_a] contains data structures for communications.\\
|
||||||
|
Scope: {\bf local} \\
|
||||||
|
Type: {\bf required}\\
|
||||||
|
Specified as: a structured data type specified in \S~\ref{sec:datastruct}.
|
||||||
|
\item[itmax] The maximum number of iterations to perform.\\
|
||||||
|
Scope: {\bf global} \\
|
||||||
|
Type: {\bf optional}\\
|
||||||
|
Default: $itmax = 1000$.\\
|
||||||
|
Specified as: an integer variable $itmax \ge 1$.
|
||||||
|
\item[itrace] A tracing parameter.\\
|
||||||
|
Scope: {\bf global} \\
|
||||||
|
Type: {\bf optional}\\
|
||||||
|
\item[irst] An integer specifying the restart iteration.\\
|
||||||
|
Scope: {\bf global} \\
|
||||||
|
Type: {\bf optional}\\
|
||||||
|
\item[istop] An integer specifying the stopping criterion.\\
|
||||||
|
Scope: {\bf global} \\
|
||||||
|
Type: {\bf optional}\\
|
||||||
|
|
||||||
|
\item[\bf On Return]
|
||||||
|
\item[x] The computed solution. \\
|
||||||
|
Scope: {\bf local} \\
|
||||||
|
Type: {\bf required}\\
|
||||||
|
Specified as: a rank one array.
|
||||||
|
\item[iter] The number of iterations performed.\\
|
||||||
|
Scope: {\bf global} \\
|
||||||
|
Type: {\bf optional}\\
|
||||||
|
Returned as: an integer variable.
|
||||||
|
\item[err] The error estimate on exit.\\
|
||||||
|
Scope: {\bf global} \\
|
||||||
|
Type: {\bf optional}\\
|
||||||
|
Returned as: a real number.
|
||||||
|
\item[info] An error code.\\
|
||||||
|
Scope: {\bf global} \\
|
||||||
|
Type: {\bf optional}\\
|
||||||
|
Returned as: an integer variable.
|
||||||
|
\end{description}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
%%% Local Variables:
|
||||||
|
%%% mode: latex
|
||||||
|
%%% TeX-master: "userguide"
|
||||||
|
%%% End:
|
@ -0,0 +1,7 @@
|
|||||||
|
\section{Preconditioner routines}
|
||||||
|
\label{sec:precs}
|
||||||
|
|
||||||
|
%%% Local Variables:
|
||||||
|
%%% mode: latex
|
||||||
|
%%% TeX-master: "userguide"
|
||||||
|
%%% End:
|
@ -0,0 +1,878 @@
|
|||||||
|
\section{Algebraic routines}
|
||||||
|
|
||||||
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
|
%
|
||||||
|
% DENSE MATRIX SUM
|
||||||
|
%
|
||||||
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
|
\subroutine{psb\_axpby}{General Dense Matrix Sum}
|
||||||
|
|
||||||
|
This subroutine is an interface to the computational kernel for
|
||||||
|
dense matrix sum:
|
||||||
|
\[ y \leftarrow \alpha\> x+ \beta y \]
|
||||||
|
where:
|
||||||
|
\begin{description}
|
||||||
|
\item[$x$] represents the global dense submatrix $x_{:, jx:jx+n-1}$
|
||||||
|
\item[$y$] represents the global dense submatrix $y_{:, jy:jy+n-1}$
|
||||||
|
\end{description}
|
||||||
|
|
||||||
|
\syntax{call psb\_axpby}{alpha, x, beta, y, desc\_a, info}
|
||||||
|
\syntax*{call psb\_axpby}{alpha, x, beta, y, desc\_a, info, n, jx, jy}
|
||||||
|
|
||||||
|
%( calculating y <- alpha*x+beta*y )
|
||||||
|
\begin{table}[h]
|
||||||
|
\begin{center}
|
||||||
|
\begin{tabular}{ll}
|
||||||
|
\hline
|
||||||
|
$x$, $y$, $\alpha$, $\beta$ & {\bf Subroutine}\\
|
||||||
|
\hline
|
||||||
|
Single Precision Real & psb\_axpby \\
|
||||||
|
Long Precision Real & psb\_axpby \\
|
||||||
|
Long Precision Complex & psb\_axpby \\
|
||||||
|
\hline
|
||||||
|
\end{tabular}
|
||||||
|
\end{center}
|
||||||
|
\caption{Data types\label{tab:f90axpby}}
|
||||||
|
\end{table}
|
||||||
|
|
||||||
|
\begin{description}
|
||||||
|
\item[\bf On Entry]
|
||||||
|
\item[alpha] the scalar $\alpha$.\\
|
||||||
|
Scope: {\bf global} \\
|
||||||
|
Type: {\bf required} \\
|
||||||
|
Specified as: a number of the data type indicated in Table~\ref{tab:f90axpby}.
|
||||||
|
\item[x] the local portion of global dense matrix
|
||||||
|
$x$.\\
|
||||||
|
Scope: {\bf local} \\
|
||||||
|
Type: {\bf required} \\
|
||||||
|
Specified as: a rank one or two array with the POINTER attribute
|
||||||
|
containing numbers of type
|
||||||
|
specified in Table~\ref{tab:f90axpby}. The rank of $x$ must be the same of $y$.
|
||||||
|
\item[beta] the scalar $\beta$.\\
|
||||||
|
Scope: {\bf global} \\
|
||||||
|
Type: {\bf required} \\
|
||||||
|
Specified as: a number of the data type indicated in Table~\ref{tab:f90axpby}.
|
||||||
|
\item[y] the local portion of the global dense matrix
|
||||||
|
$y$. \\
|
||||||
|
Scope: {\bf local} \\
|
||||||
|
Type: {\bf required} \\
|
||||||
|
Specified as: a rank one or two array with the POINTER
|
||||||
|
attributecontaining numbers of the type
|
||||||
|
indicated in Table~\ref{tab:f90axpby}. The rank of $y$ must be the same of $x$.
|
||||||
|
\item[desc\_a] contains data structures for communications.\\
|
||||||
|
Scope: {\bf local} \\
|
||||||
|
Type: {\bf required}\\
|
||||||
|
Specified as: a structured data type specified in \S~\ref{sec:datastruct}.
|
||||||
|
\item[n] number of columns in dense submatrices $x$ and $y$.\\
|
||||||
|
Scope: {\bf global} \\
|
||||||
|
Type: {\bf optional}; can only be present if $x$ and $y$ are of rank 2.\\
|
||||||
|
Default: \verb|min(size(x,2),size(y,2))|.\\
|
||||||
|
Specified as: an integer variable $n\ge 0$.
|
||||||
|
\item[jx] the column index of the global dense matrix $x$,
|
||||||
|
identifying the first column of the submatrix $x$.\\
|
||||||
|
Scope: {\bf global} \\
|
||||||
|
Type: {\bf optional}; can only be present if $x$ and $y$ are of rank 2.\\
|
||||||
|
Default: $jx = 1$.\\
|
||||||
|
Specified as: an integer variable $jx\ge 1$.
|
||||||
|
\item[jy] the column index of the global dense matrix $y$,
|
||||||
|
identifying the first column of the submatrix $y$.\\
|
||||||
|
Scope: {\bf global} \\
|
||||||
|
Type: {\bf optional}; can only be present if $x$ and $y$ are of rank 2.\\
|
||||||
|
Default: $jy = 1$.\\
|
||||||
|
Specified as: an integer variable $jy\ge 1$.
|
||||||
|
|
||||||
|
\end{description}
|
||||||
|
|
||||||
|
\begin{description}
|
||||||
|
\item[\bf On Return]
|
||||||
|
\item[y] the local portion of result submatrix $y$.\\
|
||||||
|
Scope: {\bf local} \\
|
||||||
|
Type: {\bf required} \\
|
||||||
|
Specified as: a rank one or two array containing numbers of the type
|
||||||
|
indicated in Table~\ref{tab:f90axpby}.
|
||||||
|
\item[info] the local portion of result submatrix $y$.\\
|
||||||
|
Scope: {\bf local} \\
|
||||||
|
Type: {\bf required} \\
|
||||||
|
An integer value that contains an error code.
|
||||||
|
\end{description}
|
||||||
|
|
||||||
|
|
||||||
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
|
%
|
||||||
|
% F90DOT PRODUCT
|
||||||
|
%
|
||||||
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
|
|
||||||
|
\subroutine{psb\_dot}{Dot Product}
|
||||||
|
|
||||||
|
This function computes dot product between two vectors $x$ and
|
||||||
|
$y$.\\
|
||||||
|
If $x$ and $y$ are double precision real or single precision real vectors
|
||||||
|
computes dot-product as:
|
||||||
|
\[dot \leftarrow x^T y\]
|
||||||
|
Else if $x$ and $y$ are double precision complex vectors then computes dot-product as:
|
||||||
|
\[dot \leftarrow x^H y\]
|
||||||
|
where:
|
||||||
|
\begin{description}
|
||||||
|
\item[$x$] represents the global subvector $x_{:,jx}$
|
||||||
|
\item[$y$] represents the global subvector $y_{:,jy}$
|
||||||
|
\end{description}
|
||||||
|
|
||||||
|
\syntax{psb\_dot}{x, y, desc\_a, info}
|
||||||
|
\syntax*{psb\_dot}{x, y, desc\_a, info, jx, jy}
|
||||||
|
\begin{table}[h]
|
||||||
|
\begin{center}
|
||||||
|
\begin{tabular}{ll}
|
||||||
|
\hline
|
||||||
|
$dot$, $x$, $y$ & {\bf Function}\\
|
||||||
|
\hline
|
||||||
|
Single Precision Real & psb\_dot\\
|
||||||
|
Long Precision Real & psb\_dot \\
|
||||||
|
Long Precision Complex & psb\_dot \\
|
||||||
|
\hline
|
||||||
|
\end{tabular}
|
||||||
|
\end{center}
|
||||||
|
\caption{Data types\label{tab:f90dot}}
|
||||||
|
\end{table}
|
||||||
|
|
||||||
|
\begin{description}
|
||||||
|
\item[\bf On Entry]
|
||||||
|
\item[x] the local portion of global dense matrix
|
||||||
|
$x$. This function computes the location of the first element of
|
||||||
|
local subarray used, based on $jx$ and the field $matrix\_data$ of $desc\_a$ . \\
|
||||||
|
Scope: {\bf local} \\
|
||||||
|
Type: {\bf required} \\
|
||||||
|
Specified as: a pointer to array of rank one or two
|
||||||
|
containing numbers of type specified in
|
||||||
|
Table~\ref{tab:f90dot}. The rank of $x$ must be the same of $y$.
|
||||||
|
\item[y] the local portion of global dense matrix
|
||||||
|
$y$. This function computes the location of the first element of
|
||||||
|
local subarray used, based on $iy, jy$ and the field $matrix\_data$ of $desc\_a$ . \\
|
||||||
|
Scope: {\bf local} \\
|
||||||
|
Type: {\bf required} \\
|
||||||
|
Specified as: a pointer to array of rank one or two
|
||||||
|
containing numbers of type specified in
|
||||||
|
Table~\ref{tab:f90dot}. The rank of $y$ must be the same of $x$.
|
||||||
|
\item[desc\_a] contains data structures for communications.\\
|
||||||
|
Scope: {\bf local} \\
|
||||||
|
Type: {\bf required}\\
|
||||||
|
Specified as: a structured data type specified in
|
||||||
|
\S~\ref{sec:datastruct}.
|
||||||
|
\item[jx] the column index of global dense matrix $x$,
|
||||||
|
identifying the column of subvector $x$.\\
|
||||||
|
Scope: {\bf global} \\
|
||||||
|
Type: {\bf optional}; can only be present if $x$ and $y$ are of rank 2.\\
|
||||||
|
Default: $jx = 1$.\\
|
||||||
|
|
||||||
|
\item[jy] the column index of global dense matrix $y$,
|
||||||
|
identifying the column of subvector $y$.\\
|
||||||
|
Scope: {\bf global} \\
|
||||||
|
Type: {\bf optional}; can only be present if $x$ and $y$ are of rank 2.\\
|
||||||
|
Default: $jy = 1$.\\
|
||||||
|
Specified as: an integer variable $jy\ge 1$.
|
||||||
|
\item[\bf On Return]
|
||||||
|
\item[Function value] is the dot product of subvectors $x$ and $y$.\\
|
||||||
|
Scope: {\bf global} \\
|
||||||
|
Specified as: a number of the data type indicated in Table~\ref{tab:f90dot}.
|
||||||
|
\item[info] the local portion of result submatrix $y$.\\
|
||||||
|
Scope: {\bf local} \\
|
||||||
|
Type: {\bf required} \\
|
||||||
|
An integer value that contains an error code.
|
||||||
|
\end{description}
|
||||||
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
|
%
|
||||||
|
% F90DOT PRODUCT
|
||||||
|
%
|
||||||
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
|
|
||||||
|
\subroutine{psb\_dot}{Generalized Dot Product}
|
||||||
|
|
||||||
|
This subroutine computes a series of dot products among the columns of
|
||||||
|
two dense matrices $x$ and $y$:
|
||||||
|
\[ res(i) \leftarrow x(:,i)^T y(:,i)\]
|
||||||
|
If the matrices are complex, then the
|
||||||
|
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.
|
||||||
|
|
||||||
|
\syntax{psb\_dot}{res, x, y, desc\_a, info}
|
||||||
|
\begin{table}[h]
|
||||||
|
\begin{center}
|
||||||
|
\begin{tabular}{ll}
|
||||||
|
\hline
|
||||||
|
$res$, $x$, $y$ & {\bf Subroutine}\\
|
||||||
|
\hline
|
||||||
|
Single Precision Real & psb\_dot\\
|
||||||
|
Long Precision Real & psb\_dot \\
|
||||||
|
Long Precision Complex & psb\_dot \\
|
||||||
|
\hline
|
||||||
|
\end{tabular}
|
||||||
|
\end{center}
|
||||||
|
\caption{Data types\label{tab:f90mdot}}
|
||||||
|
\end{table}
|
||||||
|
|
||||||
|
\begin{description}
|
||||||
|
\item[\bf On Entry]
|
||||||
|
\item[x] the local portion of global dense matrix
|
||||||
|
$x$. \\
|
||||||
|
Scope: {\bf local} \\
|
||||||
|
Type: {\bf required} \\
|
||||||
|
Specified as: a pointer to array of rank one or two
|
||||||
|
containing numbers of type specified in
|
||||||
|
Table~\ref{tab:f90mdot}. The rank of $x$ must be the same of $y$.
|
||||||
|
\item[y] the local portion of global dense matrix
|
||||||
|
$y$. \\
|
||||||
|
Scope: {\bf local} \\
|
||||||
|
Type: {\bf required} \\
|
||||||
|
Specified as: a pointer to array of rank one or two
|
||||||
|
containing numbers of type specified in
|
||||||
|
Table~\ref{tab:f90mdot}. The rank of $y$ must be the same of $x$.
|
||||||
|
\item[desc\_a] contains data structures for communications.\\
|
||||||
|
Scope: {\bf local} \\
|
||||||
|
Type: {\bf required}\\
|
||||||
|
Specified as: a structured data type specified in Sec.~\ref{sec:datastruct}.
|
||||||
|
\item[\bf On Return]
|
||||||
|
\item[res] is the dot product of subvectors $x$ and $y$.\\
|
||||||
|
Scope: {\bf global} \\
|
||||||
|
Specified as: a number or a rank-one array of the data type indicated
|
||||||
|
in Table~\ref{tab:f90dot}.
|
||||||
|
\item[info] the local portion of result submatrix $y$.\\
|
||||||
|
Scope: {\bf local} \\
|
||||||
|
Type: {\bf required} \\
|
||||||
|
An integer value that contains an error code.
|
||||||
|
\end{description}
|
||||||
|
|
||||||
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
|
%
|
||||||
|
% VECTOR INFINITY-NORM
|
||||||
|
%
|
||||||
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
|
|
||||||
|
|
||||||
|
\subroutine{psb\_amax}{Infinity-Norm of Vector}
|
||||||
|
|
||||||
|
This function computes
|
||||||
|
the infinity-norm of a vector $x$.\\
|
||||||
|
If $x$ is double precision real or single precision real vector
|
||||||
|
computes infinity norm as:
|
||||||
|
\[ amax \leftarrow \max_i |x_i|\]
|
||||||
|
else if $x$ is double precision complex vector then computes infinity-norm as:
|
||||||
|
\[ amax \leftarrow \max_i {(|re(x_i)| + |im(x_i)|)}\]
|
||||||
|
where:
|
||||||
|
\begin{description}
|
||||||
|
\item[$x$] represents the global subvector $x_{:,jx}$
|
||||||
|
\end{description}
|
||||||
|
|
||||||
|
\syntax{psb\_amax}{x, desc\_a, info}
|
||||||
|
\syntax*{psb\_amax}{x, desc\_a, info, jx}
|
||||||
|
|
||||||
|
\begin{table}[h]
|
||||||
|
\begin{center}
|
||||||
|
\begin{tabular}{lll}
|
||||||
|
\hline
|
||||||
|
$amax$ & $x$ & {\bf Function}\\
|
||||||
|
\hline
|
||||||
|
Single Precision Real&Single Precision Real & psb\_amax\\
|
||||||
|
Long Precision Real&Long Precision Real & psb\_amax \\
|
||||||
|
Long Precision Real&Long Precision Complex & psb\_zamax \\
|
||||||
|
\hline
|
||||||
|
\end{tabular}
|
||||||
|
\end{center}
|
||||||
|
\caption{Data types\label{tab:f90amax}}
|
||||||
|
\end{table}
|
||||||
|
|
||||||
|
|
||||||
|
\begin{description}
|
||||||
|
\item[\bf On Entry]
|
||||||
|
\item[x] the local portion of global dense matrix
|
||||||
|
$x$. This function computes the location of the first element of
|
||||||
|
local subarray used, based on $jx$ and the field $matrix\_data$ of $desc\_a$ . \\
|
||||||
|
Scope: {\bf local} \\
|
||||||
|
Type: {\bf required} \\
|
||||||
|
Specified as: a rank one or two array with the POINTER attribute
|
||||||
|
containing numbers of type specified in
|
||||||
|
Table~\ref{tab:f90amax}.
|
||||||
|
\item[desc\_a] contains data structures for communications.\\
|
||||||
|
Scope: {\bf local} \\
|
||||||
|
Type: {\bf required}\\
|
||||||
|
Specified as: a structured data type specified in
|
||||||
|
\S~\ref{sec:datastruct}.
|
||||||
|
\item[jx] the column index of global dense matrix $x$,
|
||||||
|
identifying the column of subvector $x$.\\
|
||||||
|
Scope: {\bf global} \\
|
||||||
|
Type: {\bf optional}; can only be present if $x$ is of rank 2.\\
|
||||||
|
Default: $jx = 1$\\
|
||||||
|
Specified as: an integer variable $jx\ge 1$.
|
||||||
|
|
||||||
|
\item[\bf On Return]
|
||||||
|
\item[Function value] is the infinity norm of subvector $x$.\\
|
||||||
|
Scope: {\bf global} \\
|
||||||
|
Specified as: a number of the data type indicated in Table~\ref{tab:f90amax}.
|
||||||
|
\item[info] the local portion of result submatrix $y$.\\
|
||||||
|
Scope: {\bf local} \\
|
||||||
|
Type: {\bf required} \\
|
||||||
|
An integer value that contains an error code.
|
||||||
|
\end{description}
|
||||||
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
|
%
|
||||||
|
% Infinity norm
|
||||||
|
%
|
||||||
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
|
|
||||||
|
\subroutine{psb\_amax}{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)| \]
|
||||||
|
|
||||||
|
\syntax{psb\_amax}{res, x, desc\_a, info}
|
||||||
|
\begin{table}[h]
|
||||||
|
\begin{center}
|
||||||
|
\begin{tabular}{lll}
|
||||||
|
\hline
|
||||||
|
$res$& $x$& {\bf Subroutine}\\
|
||||||
|
\hline
|
||||||
|
Single Precision Real &Single Precision Real & psb\_amax\\
|
||||||
|
Long Precision Real &Long Precision Real & psb\_amax\\
|
||||||
|
Long Precision Real &Long Precision Complex & psb\_amax\\
|
||||||
|
\hline
|
||||||
|
\end{tabular}
|
||||||
|
\end{center}
|
||||||
|
\caption{Data types\label{tab:f90mamax}}
|
||||||
|
\end{table}
|
||||||
|
|
||||||
|
\begin{description}
|
||||||
|
\item[\bf On Entry]
|
||||||
|
\item[x] the local portion of global dense matrix
|
||||||
|
$x$. \\
|
||||||
|
Scope: {\bf local} \\
|
||||||
|
Type: {\bf required} \\
|
||||||
|
Specified as: a rank one or two array with the POINTER attribute
|
||||||
|
containing numbers of type specified in
|
||||||
|
Table~\ref{tab:f90mamax}.
|
||||||
|
\item[desc\_a] contains data structures for communications.\\
|
||||||
|
Scope: {\bf local} \\
|
||||||
|
Type: {\bf required}\\
|
||||||
|
Specified as: a structured data type specified in Sec.~\ref{sec:datastruct}.
|
||||||
|
\item[\bf On Return]
|
||||||
|
\item[res] is the infinity norm of the columns of $x$.\\
|
||||||
|
Scope: {\bf global} \\
|
||||||
|
Specified as: a number or a rank-one array of the data type indicated
|
||||||
|
in Table~\ref{tab:f90amax}.
|
||||||
|
\item[info] the local portion of result submatrix $y$.\\
|
||||||
|
Scope: {\bf local} \\
|
||||||
|
Type: {\bf required} \\
|
||||||
|
An integer value that contains an error code.
|
||||||
|
\end{description}
|
||||||
|
|
||||||
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
|
%
|
||||||
|
% 1-NORM OF A VECTOR
|
||||||
|
%
|
||||||
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
|
|
||||||
|
|
||||||
|
\subroutine{psb\_asum}{1-Norm of Vector}
|
||||||
|
|
||||||
|
This function computes the 1-norm of a vector $x$.\\
|
||||||
|
If $x$ is double precision real or single precision real vector
|
||||||
|
computes 1-norm as:
|
||||||
|
\[ asum \leftarrow \|x_i\|\]
|
||||||
|
else if $x$ ic double precision complex vector then computes 1-norm as:
|
||||||
|
\[ asum \leftarrow \|re(x)\|_1 + \|im(x)\|_1\]
|
||||||
|
where:
|
||||||
|
\begin{description}
|
||||||
|
\item[$x$] represents the global subvector $x_{:,jx}$
|
||||||
|
\end{description}
|
||||||
|
|
||||||
|
\syntax{psb\_asum}{x, desc\_a, info}
|
||||||
|
\syntax*{psb\_asum}{x, desc\_a, info, jx}
|
||||||
|
|
||||||
|
\begin{table}[h]
|
||||||
|
\begin{center}
|
||||||
|
\begin{tabular}{ll}
|
||||||
|
\hline
|
||||||
|
$dot$, $x$, $y$ & {\bf Function}\\
|
||||||
|
\hline
|
||||||
|
Single Precision Real & psb\_asum\\
|
||||||
|
Long Precision Real & psb\_asum \\
|
||||||
|
Long Precision Complex & psb\_asum \\
|
||||||
|
\hline
|
||||||
|
\end{tabular}
|
||||||
|
\end{center}
|
||||||
|
\caption{Data types\label{tab:f90asum}}
|
||||||
|
\end{table}
|
||||||
|
|
||||||
|
\begin{description}
|
||||||
|
\item[\bf On Entry]
|
||||||
|
\item[x] the local portion of global dense matrix
|
||||||
|
$x$. This function computes the location of the first element of
|
||||||
|
local subarray used, based on $jx$ and the field $matrix\_data$ of $desc\_a$ . \\
|
||||||
|
Scope: {\bf local} \\
|
||||||
|
Type: {\bf required} \\
|
||||||
|
Specified as: a rank one or two array with the POINTER attribute
|
||||||
|
containing numbers of type specified in
|
||||||
|
Table~\ref{tab:f90asum}.
|
||||||
|
\item[desc\_a] contains data structures for communications.\\
|
||||||
|
Scope: {\bf local} \\
|
||||||
|
Type: {\bf required}\\
|
||||||
|
Specified as: a structured data type specified in
|
||||||
|
\S~\ref{sec:datastruct}.
|
||||||
|
\item[jx] the column index of global dense matrix $x$,
|
||||||
|
identifying the column of subvector $x$.\\
|
||||||
|
Scope: {\bf global} \\
|
||||||
|
Type: {\bf optional}; can only be present if $x$ is of rank 2.\\
|
||||||
|
Default: $jx = 1$\\
|
||||||
|
Specified as: an integer variable $jx\ge 1$.
|
||||||
|
|
||||||
|
\item[\bf On Return]
|
||||||
|
\item[Function value] is the 1-norm of subvector $x$.\\
|
||||||
|
Scope: {\bf global} \\
|
||||||
|
Specified as: a number of the data type indicated in Table~\ref{tab:f90asum}.
|
||||||
|
\item[info] the local portion of result submatrix $y$.\\
|
||||||
|
Scope: {\bf local} \\
|
||||||
|
Type: {\bf required} \\
|
||||||
|
An integer value that contains an error code.
|
||||||
|
\end{description}
|
||||||
|
|
||||||
|
|
||||||
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
|
%
|
||||||
|
% 2-NORM OF A VECTOR
|
||||||
|
%
|
||||||
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
|
|
||||||
|
|
||||||
|
\subroutine {psb\_nrm2}{2-Norm of Vector}
|
||||||
|
|
||||||
|
This function computes the 2-norm of a vector $x$.\\
|
||||||
|
If $x$ is double precision real or single precision real vector
|
||||||
|
computes 2-norm as:
|
||||||
|
\[ nrm2 \leftarrow \sqrt{x^T x}\]
|
||||||
|
else if $x$ is double precision complex vector then computes 2-norm as:
|
||||||
|
\[ nrm2 \leftarrow \sqrt{x^H x}\]
|
||||||
|
where:
|
||||||
|
\begin{description}
|
||||||
|
\item[$x$] represents the global subvector $x_{:,jx}$
|
||||||
|
\end{description}
|
||||||
|
|
||||||
|
\begin{table}[h]
|
||||||
|
\begin{center}
|
||||||
|
\begin{tabular}{ll}
|
||||||
|
\hline
|
||||||
|
$nrm2$, $x$ & {\bf Function}\\
|
||||||
|
\hline
|
||||||
|
Single Precision Real & psb\_nrm2\\
|
||||||
|
Long Precision Real & psb\_nrm2 \\
|
||||||
|
Long Precision Complex & psb\_nrm2 \\
|
||||||
|
\hline
|
||||||
|
\end{tabular}
|
||||||
|
\end{center}
|
||||||
|
\caption{Data types\label{tab:f90nrm2}}
|
||||||
|
\end{table}
|
||||||
|
|
||||||
|
\syntax{psb\_nrm2}{x, desc\_a, info}
|
||||||
|
\syntax*{psb\_nrm2}{x, desc\_a, info, jx}
|
||||||
|
\begin{description}
|
||||||
|
\item[\bf On Entry]
|
||||||
|
\item[x] the local portion of global dense matrix
|
||||||
|
$x$. This function computes the location of the first element of
|
||||||
|
local subarray used, based on $jx$ and the field $matrix\_data$ of $desc\_a$ . \\
|
||||||
|
Scope: {\bf local} \\
|
||||||
|
Type: {\bf required} \\
|
||||||
|
Specified as: a rank one or two array with the POINTER attribute
|
||||||
|
containing numbers of type specified in
|
||||||
|
Table~\ref{tab:f90nrm2}.
|
||||||
|
\item[desc\_a] contains data structures for communications.\\
|
||||||
|
Scope: {\bf local} \\
|
||||||
|
Type: {\bf required}\\
|
||||||
|
Specified as: a structured data type specified in
|
||||||
|
\S~\ref{sec:datastruct}.
|
||||||
|
\item[jx] the column index of global dense matrix $x$,
|
||||||
|
identifying the column of subvector $x$.\\
|
||||||
|
Scope: {\bf global} \\
|
||||||
|
Type: {\bf optional}; can only be present if $x$ is of rank 2.\\
|
||||||
|
Default: $jx = 1$\\
|
||||||
|
Specified as: an integer variable $jx\ge 1$.
|
||||||
|
|
||||||
|
\item[\bf On Return]
|
||||||
|
\item[Function Value] is the 2-norm of subvector $x$.\\
|
||||||
|
Scope: {\bf global} \\
|
||||||
|
Type: {\bf required} \\
|
||||||
|
Specified as: a number of the data type indicated in Table~\ref{tab:f90nrm2}.
|
||||||
|
\item[info] the local portion of result submatrix $y$.\\
|
||||||
|
Scope: {\bf local} \\
|
||||||
|
Type: {\bf required} \\
|
||||||
|
An integer value that contains an error code.
|
||||||
|
\end{description}
|
||||||
|
|
||||||
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
|
%
|
||||||
|
% INFINITY-NORM OF A MATRIX
|
||||||
|
%
|
||||||
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
|
|
||||||
|
|
||||||
|
\subroutine{psb\_nrmi}{Infinity Norm of Sparse Matrix}
|
||||||
|
|
||||||
|
This function computes the infinity-norm of a matrix $A$:\\
|
||||||
|
|
||||||
|
\[ nrmi \leftarrow \|A\|_\infty \]
|
||||||
|
where:
|
||||||
|
\begin{description}
|
||||||
|
\item[$A$] represents the global matrix $A$
|
||||||
|
\end{description}
|
||||||
|
|
||||||
|
\begin{table}[h]
|
||||||
|
\begin{center}
|
||||||
|
\begin{tabular}{ll}
|
||||||
|
\hline
|
||||||
|
$nrmi$, $A$ & {\bf Function}\\
|
||||||
|
\hline
|
||||||
|
Single Precision Real & psb\_nrmi\\
|
||||||
|
Long Precision Real & psb\_nrmi \\
|
||||||
|
Long Precision Complex & psb\_nrmi \\
|
||||||
|
\hline
|
||||||
|
\end{tabular}
|
||||||
|
\end{center}
|
||||||
|
\caption{Data types\label{tab:f90nrmi}}
|
||||||
|
\end{table}
|
||||||
|
|
||||||
|
\syntax{psb\_nrmi}{A, desc\_a, info}
|
||||||
|
|
||||||
|
\begin{description}
|
||||||
|
\item[\bf On Entry]
|
||||||
|
\item[a] the local portion of the global sparse matrix
|
||||||
|
$A$. \\
|
||||||
|
Scope: {\bf local} \\
|
||||||
|
Type: {\bf required}\\
|
||||||
|
Specified as: a structured data type specified in
|
||||||
|
\S~\ref{sec:datastruct}.
|
||||||
|
\item[desc\_a] contains data structures for communications.\\
|
||||||
|
Scope: {\bf local} \\
|
||||||
|
Type: {\bf required}\\
|
||||||
|
Specified as: a structured data type specified in
|
||||||
|
\S~\ref{sec:datastruct}.
|
||||||
|
\item[\bf On Return]
|
||||||
|
\item[Function value] is the infinity-norm of sparse submatrix $A$.\\
|
||||||
|
Scope: {\bf global} \\
|
||||||
|
Specified as: a number of the data type indicated in Table~\ref{tab:f90nrmi}.
|
||||||
|
\item[info] the local portion of result submatrix $y$.\\
|
||||||
|
Scope: {\bf local} \\
|
||||||
|
Type: {\bf required} \\
|
||||||
|
An integer value that contains an error code.
|
||||||
|
\end{description}
|
||||||
|
|
||||||
|
|
||||||
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
|
%
|
||||||
|
% SPARSE MATRIX by DENSE MATRIX PRODUCT
|
||||||
|
%
|
||||||
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
|
|
||||||
|
|
||||||
|
\subroutine{psb\_spmm}{Sparse Matrix by Dense Matrix Product}
|
||||||
|
|
||||||
|
This subroutine computes the Sparse Matrix by Dense Matrix Product:
|
||||||
|
|
||||||
|
\begin{equation}
|
||||||
|
y \leftarrow \alpha P_r A P_c x + \beta y
|
||||||
|
\label{eq:f90spmm_no_tra}
|
||||||
|
\end{equation}
|
||||||
|
\begin{equation}
|
||||||
|
y \leftarrow \alpha P_r A^T P_c x + \beta y
|
||||||
|
\label{eq:f90spmm_tra}
|
||||||
|
\end{equation}
|
||||||
|
\begin{equation}
|
||||||
|
y \leftarrow \alpha P_r A^H P_c x + \beta y
|
||||||
|
\label{eq:f90spmm_con}
|
||||||
|
\end{equation}
|
||||||
|
|
||||||
|
where:
|
||||||
|
\begin{description}
|
||||||
|
\item[$x$] is the global dense submatrix $x_{:, jx:jx+k-1}$
|
||||||
|
\item[$y$] is the global dense submatrix $y_{:, jy:jy+k-1}$
|
||||||
|
\item[$A$] is the global sparse submatrix $A$
|
||||||
|
\item[$P_r, P_c$] are the permutation matrices.
|
||||||
|
\end{description}
|
||||||
|
|
||||||
|
\begin{table}[h]
|
||||||
|
\begin{center}
|
||||||
|
\begin{tabular}{ll}
|
||||||
|
\hline
|
||||||
|
$A$, $x$, $y$, $\alpha$, $\beta$ & {\bf Subroutine}\\
|
||||||
|
\hline
|
||||||
|
Single Precision Real & psb\_spmm\\
|
||||||
|
Long Precision Real & psb\_spmm \\
|
||||||
|
Long Precision Complex & psb\_spmm \\
|
||||||
|
\hline
|
||||||
|
\end{tabular}
|
||||||
|
\end{center}
|
||||||
|
\caption{Data types\label{tab:f90spmm}}
|
||||||
|
\end{table}
|
||||||
|
|
||||||
|
\syntax{CALL psb\_spmm}{alpha, a, x, beta, y, desc\_a, info}
|
||||||
|
\syntax*{CALL psb\_spmm}{alpha, a, x, beta, y,desc\_a, info,
|
||||||
|
trans, k, jx, jy, work}
|
||||||
|
|
||||||
|
\begin{description}
|
||||||
|
\item[\bf On Entry]
|
||||||
|
\item[alpha] the scalar $\alpha$.\\
|
||||||
|
Scope: {\bf global} \\
|
||||||
|
Type: {\bf required}\\
|
||||||
|
Specified as: a number of the data type indicated in
|
||||||
|
Table~\ref{tab:f90spmm}.
|
||||||
|
\item[a] the local portion of the sparse matrix
|
||||||
|
$A$. \\
|
||||||
|
Scope: {\bf local} \\
|
||||||
|
Type: {\bf required}\\
|
||||||
|
Specified as: a structured data type specified in
|
||||||
|
\S~\ref{sec:datastruct}.
|
||||||
|
\item[x] the local portion of global dense matrix
|
||||||
|
$x$. This subroutine computes the location of the first element of
|
||||||
|
local subarray used, based on $jx$ and the field $matrix\_data$ of $desc\_a$ . \\
|
||||||
|
Scope: {\bf local} \\
|
||||||
|
Type: {\bf required} \\
|
||||||
|
Specified as: a rank one or two array with the POINTER attribute
|
||||||
|
containing numbers of type specified in
|
||||||
|
Table~\ref{tab:f90spmm}. The rank of $x$ must be the same of $y$.
|
||||||
|
\item[beta] the scalar $\beta$.\\
|
||||||
|
Scope: {\bf global} \\
|
||||||
|
Type: {\bf required} \\
|
||||||
|
Specified as: a number of the data type indicated in Table~\ref{tab:f90spmm}.
|
||||||
|
\item[y] the local portion of global dense matrix
|
||||||
|
$y$. This subroutine computes the location of the first element of
|
||||||
|
local subarray used, based on $jy$ and the field $matrix\_data$ of $desc\_a$ . \\
|
||||||
|
Scope: {\bf local} \\
|
||||||
|
Type: {\bf required} \\
|
||||||
|
Specified as: a rank one or two array with the POINTER attribute
|
||||||
|
containing numbers of type specified in
|
||||||
|
Table~\ref{tab:f90spmm}. The rank of $y$ must be the same of $x$.
|
||||||
|
\item[desc\_a] contains data structures for communications.\\
|
||||||
|
Scope: {\bf local} \\
|
||||||
|
Type: {\bf required}\\
|
||||||
|
Specified as: a structured data type specified in
|
||||||
|
\S~\ref{sec:datastruct}.
|
||||||
|
\item[trans] indicate what kind of operation to perform.
|
||||||
|
\begin{description}
|
||||||
|
\item[trans = N] the operation is specified by equation \ref{eq:f90spmm_no_tra}
|
||||||
|
\item[trans = T] the operation is specified by equation
|
||||||
|
\ref{eq:f90spmm_tra}
|
||||||
|
\item[trans = C] the operation is specified by equation
|
||||||
|
\ref{eq:f90spmm_con}
|
||||||
|
\end{description}
|
||||||
|
Scope: {\bf global} \\
|
||||||
|
Type: {\bf optional}\\
|
||||||
|
Default: $trans = N$\\
|
||||||
|
Specified as: a character variable.
|
||||||
|
\item[k] number of columns in dense submatrices $x$ and $y$. \\
|
||||||
|
Scope: {\bf global} \\
|
||||||
|
Type: {\bf optional}\\
|
||||||
|
Default: \verb|min(size(x,2)-jx+1,size(y,2)-jy+1)|\\
|
||||||
|
Specified as: an integer variable $ k \ge 1$.
|
||||||
|
\item[jx] the column index of global dense matrix $x$,
|
||||||
|
identifying the column of subvector $x$.\\
|
||||||
|
Scope: {\bf global} \\
|
||||||
|
Type: {\bf optional}; can only be present if $x$ is of rank 2.\\
|
||||||
|
Default: $iy = 1$\\
|
||||||
|
Specified as: an integer variable $jx\ge 1$.
|
||||||
|
\item[jy] the column index of global dense matrix $y$,
|
||||||
|
identifying the column of subvector $y$.\\
|
||||||
|
Scope: {\bf global} \\
|
||||||
|
Type: {\bf optional}; can only be present if $y$ is of rank 2.\\
|
||||||
|
Default: $jy = 1$\\
|
||||||
|
Specified as: an integer variable $jy\ge 1$.
|
||||||
|
|
||||||
|
\item[work] the work array.\\
|
||||||
|
Scope: {\bf local} \\
|
||||||
|
Specified as: a rank one array of the same type of $x$ and $y$ with
|
||||||
|
the POINTER attribute.
|
||||||
|
|
||||||
|
\item[\bf On Return]
|
||||||
|
\item[y] the local portion of result submatrix $y$.\\
|
||||||
|
Scope: {\bf local} \\
|
||||||
|
Type: {\bf required} \\
|
||||||
|
Specified as: a pointer to array of rank one or two
|
||||||
|
containing numbers of type specified in
|
||||||
|
Table~\ref{tab:f90spmm}.
|
||||||
|
\item[info] the local portion of result submatrix $y$.\\
|
||||||
|
Scope: {\bf local} \\
|
||||||
|
Type: {\bf required} \\
|
||||||
|
An integer value that contains an error code.
|
||||||
|
\end{description}
|
||||||
|
|
||||||
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
|
%
|
||||||
|
% TRIANGULAR SYSTEM SOLVE
|
||||||
|
%
|
||||||
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
|
|
||||||
|
|
||||||
|
\subroutine{psb\_spsm}{Triangular System Solve}
|
||||||
|
|
||||||
|
This subroutine computes the Triangular System Solve:
|
||||||
|
|
||||||
|
\begin{eqnarray*}
|
||||||
|
y &\leftarrow& \alpha P_r T^{-1} P_c x + \beta y\\
|
||||||
|
y &\leftarrow& \alpha D P_r T^{-1} P_c x + \beta y\\
|
||||||
|
y &\leftarrow& \alpha P_r T^{-1} P_c D x + \beta y\\
|
||||||
|
y &\leftarrow& \alpha P_r T^{-T} P_c x + \beta y\\
|
||||||
|
y &\leftarrow& \alpha D P_r T^{-T} P_c x + \beta y\\
|
||||||
|
y &\leftarrow& \alpha P_r T^{-T} P_c D x + \beta y\\
|
||||||
|
y &\leftarrow& \alpha P_r T^{-H} P_c x + \beta y\\
|
||||||
|
y &\leftarrow& \alpha D P_r T^{-H} P_c x + \beta y\\
|
||||||
|
y &\leftarrow& \alpha P_r T^{-H} P_c D x + \beta y\\
|
||||||
|
\end{eqnarray*}
|
||||||
|
|
||||||
|
|
||||||
|
where:
|
||||||
|
\begin{description}
|
||||||
|
\item[$x$] is the global dense submatrix $x_{:, jx:jx+n-1}$
|
||||||
|
\item[$y$] is the global dense submatrix $y_{:, jy:jy+n-1}$
|
||||||
|
\item[$T$] is the global sparse block triangular submatrix $T$
|
||||||
|
\item[$D$] is the scaling diagonal matrix.
|
||||||
|
\item[$P_r, P_c$] are the permutation matrices.
|
||||||
|
\end{description}
|
||||||
|
|
||||||
|
\syntax{CALL psb\_spsm}{alpha, t, x, beta, y, desc\_a, info}
|
||||||
|
\syntax*{CALL psb\_spsm}{alpha, t, x, beta, y, desc\_a, info,
|
||||||
|
trans, unit, choice, diag, n, jx, jy, work}
|
||||||
|
|
||||||
|
\begin{table}[h]
|
||||||
|
\begin{center}
|
||||||
|
\begin{tabular}{ll}
|
||||||
|
\hline
|
||||||
|
$T$, $x$, $y$, $D$, $\alpha$, $\beta$ & {\bf Subroutine}\\
|
||||||
|
\hline
|
||||||
|
Single Precision Real & psb\_spsm\\
|
||||||
|
Long Precision Real & psb\_spsm \\
|
||||||
|
Long Precision Complex & psb\_spsm \\
|
||||||
|
\hline
|
||||||
|
\end{tabular}
|
||||||
|
\end{center}
|
||||||
|
\caption{Data types\label{tab:f90spsm}}
|
||||||
|
\end{table}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
\begin{description}
|
||||||
|
\item[\bf On Entry]
|
||||||
|
\item[alpha] the scalar $\alpha$.\\
|
||||||
|
Scope: {\bf global} \\
|
||||||
|
Type: {\bf required}\\
|
||||||
|
Specified as: a number of the data type indicated in
|
||||||
|
Table~\ref{tab:f90spsm}.
|
||||||
|
\item[t] the global portion of the sparse matrix
|
||||||
|
$T$. \\
|
||||||
|
Scope: {\bf local} \\
|
||||||
|
Type: {\bf required}\\
|
||||||
|
Specified as: a structured data type specified in
|
||||||
|
\S~\ref{sec:datastruct}.
|
||||||
|
\item[x] the local portion of global dense matrix
|
||||||
|
$x$. This subroutine computes the location of the first element of
|
||||||
|
local subarray used, based on $jx$ and the field $matrix\_data$ of $desc\_a$ . \\
|
||||||
|
Scope: {\bf local} \\
|
||||||
|
Type: {\bf required} \\
|
||||||
|
Specified as: a rank one or two array with the POINTER attribute
|
||||||
|
containing numbers of type specified in
|
||||||
|
Table~\ref{tab:f90spsm}. The rank of $x$ must be the same of $y$.
|
||||||
|
\item[beta] the scalar $\beta$.\\
|
||||||
|
Scope: {\bf global} \\
|
||||||
|
Type: {\bf required} \\
|
||||||
|
Specified as: a number of the data type indicated in Table~\ref{tab:f90spsm}.
|
||||||
|
\item[y] the local portion of global dense matrix
|
||||||
|
$y$. This subroutine computes the location of the first element of
|
||||||
|
local subarray used, based on $jy$ and the field $matrix\_data$ of $desc\_a$ . \\
|
||||||
|
Scope: {\bf local} \\
|
||||||
|
Type: {\bf required} \\
|
||||||
|
Specified as: a rank one or two array with the POINTER attribute
|
||||||
|
containing numbers of type specified in
|
||||||
|
Table~\ref{tab:f90spsm}. The rank of $y$ must be the same of $x$.
|
||||||
|
\item[desc\_a] contains data structures for communications.\\
|
||||||
|
Scope: {\bf local} \\
|
||||||
|
Type: {\bf required}\\
|
||||||
|
Specified as: a structured data type specified in
|
||||||
|
\S~\ref{sec:datastruct}.
|
||||||
|
\item[trans] specify with {\em unitd} the operation to perform.
|
||||||
|
\begin{description}
|
||||||
|
\item[trans = 'N'] the operation is with no transposed matrix
|
||||||
|
\item[trans = 'T'] the operation is with transposed matrix.
|
||||||
|
\item[trans = 'C'] the operation is with conjugate transposed matrix.
|
||||||
|
\end{description}
|
||||||
|
Scope: {\bf global} \\
|
||||||
|
Type: {\bf optional}\\
|
||||||
|
Default: $trans = N$\\
|
||||||
|
Specified as: a character variable.
|
||||||
|
\item[unitd] specify with {\em trans} the operation to perform.
|
||||||
|
\begin{description}
|
||||||
|
\item[unitd = 'U'] the operation is with no scaling
|
||||||
|
\item[unitd = 'L'] the operation is with left scaling
|
||||||
|
\item[unitd = 'R'] the operation is with right scaling.
|
||||||
|
\end{description}
|
||||||
|
Scope: {\bf global} \\
|
||||||
|
Type: {\bf optional}\\
|
||||||
|
Default: $unitd = U$\\
|
||||||
|
Specified as: a character variable.
|
||||||
|
\item[choice] specify whether a cleanup of the overlapped elements is
|
||||||
|
required on exit.
|
||||||
|
\begin{description}
|
||||||
|
\item[choice = .false.] no cleanup on exit
|
||||||
|
\item[choice = .true.] cleanup on exit.\\
|
||||||
|
\end{description}
|
||||||
|
Scope: {\bf global} \\
|
||||||
|
Type: {\bf optional}\\
|
||||||
|
Default: $choice = .true.$\\
|
||||||
|
Specified as: a logical variable.
|
||||||
|
\item[diag] the diagonal scaling matrix.\\
|
||||||
|
Scope: {\bf local} \\
|
||||||
|
Type: {\bf optional}\\
|
||||||
|
Default: $diag(1) = 1 (no scaling)$\\
|
||||||
|
Specified as: a rank one array containing numbers of the type
|
||||||
|
indicated in Table~\ref{tab:f90spsm}.
|
||||||
|
\item[n] number of columns in dense submatrices $x$ and $y$. \\
|
||||||
|
Scope: {\bf global} \\
|
||||||
|
Type: {\bf optional}\\
|
||||||
|
Default: \verb|min(size(x,2)-jx+1,size(y,2)-jy+1)|\\
|
||||||
|
Specified as: an integer variable $ n \ge 0$.
|
||||||
|
\item[jx] the column index of global dense matrix $x$,
|
||||||
|
identifying the column of subvector $x$.\\
|
||||||
|
Scope: {\bf global} \\
|
||||||
|
Type: {\bf optional}; can only be present if $x$ is of rank 2.\\
|
||||||
|
Default: $jx = 1 $\\
|
||||||
|
Specified as: an integer variable $jx\ge 1$.
|
||||||
|
\item[jy] the column index of global dense matrix $y$,
|
||||||
|
identifying the column of subvector $y$.\\
|
||||||
|
Scope: {\bf global} \\
|
||||||
|
Type: {\bf optional}; can only be present if $y$ is of rank 2.\\
|
||||||
|
Default: $jy = 1 $\\
|
||||||
|
Specified as: an integer variable $jy\ge 1$. \\
|
||||||
|
Scope: {\bf global} \\
|
||||||
|
Specified as: a number of the data type indicated in Table~\ref{tab:f90spsm}.
|
||||||
|
\item[work] the work array. \\
|
||||||
|
Scope: {\bf local} \\
|
||||||
|
Type: {\bf optional}\\
|
||||||
|
Specified as: a rank one array of the same type of $x$ with the
|
||||||
|
POINTER attribute.
|
||||||
|
|
||||||
|
\item[\bf On Return]
|
||||||
|
\item[y] the local portion of global dense matrix
|
||||||
|
$y$. This subroutine computes the location of the first element of
|
||||||
|
local subarray used, based on $jy$ and the field $matrix\_data$ of $desc\_a$ . \\
|
||||||
|
Scope: {\bf local} \\
|
||||||
|
Type: {\bf required} \\
|
||||||
|
Specified as: a pointer to array of rank one or two
|
||||||
|
containing numbers of type specified in
|
||||||
|
Table~\ref{tab:f90spsm}.
|
||||||
|
\item[info] the local portion of result submatrix $y$.\\
|
||||||
|
Scope: {\bf local} \\
|
||||||
|
Type: {\bf required} \\
|
||||||
|
An integer value that contains an error code.
|
||||||
|
\end{description}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
%%% Local Variables:
|
||||||
|
%%% mode: latex
|
||||||
|
%%% TeX-master: "userguide"
|
||||||
|
%%% End:
|
@ -1,14 +1,46 @@
|
|||||||
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
|
% Contents: The title page
|
||||||
|
% $Id$
|
||||||
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
|
|
||||||
|
\ifx\pdfoutput\undefined % We're not running pdftex
|
||||||
|
\else
|
||||||
|
\pdfbookmark{Title Page}{title}
|
||||||
|
\fi
|
||||||
|
\newlength{\centeroffset}
|
||||||
|
\setlength{\centeroffset}{-0.5\oddsidemargin}
|
||||||
|
\addtolength{\centeroffset}{0.5\evensidemargin}
|
||||||
|
%\addtolength{\textwidth}{-\centeroffset}
|
||||||
\thispagestyle{empty}
|
\thispagestyle{empty}
|
||||||
\vspace{5cm}
|
\vspace*{\stretch{1}}
|
||||||
|
\noindent\hspace*{\centeroffset}\makebox[0pt][l]{\begin{minipage}{\textwidth}
|
||||||
\begin{center}
|
\flushright
|
||||||
{\Large PSBLAS V. 2.0}\\
|
{\Huge\bfseries PSBLAS-2.0 User's guide
|
||||||
Userguide
|
}
|
||||||
\vspace{5cm}
|
\noindent\rule[-1ex]{\textwidth}{5pt}\\[2.5ex]
|
||||||
Alfredo Buttari
|
\hfill\emph{\Large A reference guide for the Parallel Sparse BLAS library}
|
||||||
Salvatore Filippone
|
\end{minipage}}
|
||||||
|
|
||||||
%%% Local Variables:
|
\vspace{\stretch{1}}
|
||||||
%%% mode: latex
|
\noindent\hspace*{\centeroffset}\makebox[0pt][l]{\begin{minipage}{\textwidth}
|
||||||
%%% TeX-master: "userguide"
|
\flushright
|
||||||
%%% End:
|
{\bfseries
|
||||||
|
by Salvatore Filippone\\[1.5ex]
|
||||||
|
and Alfredo Buttari\\[3ex]}
|
||||||
|
``Tor Vergata'' University of Rome.
|
||||||
|
\today
|
||||||
|
\end{minipage}}
|
||||||
|
|
||||||
|
%\addtolength{\textwidth}{\centeroffset}
|
||||||
|
\vspace{\stretch{2}}
|
||||||
|
|
||||||
|
\endinput
|
||||||
|
|
||||||
|
%
|
||||||
|
|
||||||
|
% Local Variables:
|
||||||
|
% TeX-master: "userguide"
|
||||||
|
% mode: latex
|
||||||
|
% mode: flyspell
|
||||||
|
% End:
|
||||||
|
|
||||||
|
@ -0,0 +1,451 @@
|
|||||||
|
\section{Data management and initialization routines}
|
||||||
|
%
|
||||||
|
%% psb_alloc %%
|
||||||
|
%
|
||||||
|
\subroutine{psb\_alloc}{Allocates a dense matrix}
|
||||||
|
|
||||||
|
\syntax{call psb\_alloc}{m, n, x, desc\_a, info, js}
|
||||||
|
\syntax*{call psb\_alloc}{m, n, x, desc\_a, info}
|
||||||
|
|
||||||
|
\begin{description}
|
||||||
|
\item[\bf On Entry]
|
||||||
|
\item[m] The number of rows of the dense matrix to be allocated.\\
|
||||||
|
Scope: {\bf local} \\
|
||||||
|
Type: {\bf required}\\
|
||||||
|
\item[n] The number of columns of the dense matrix to be allocated.\\
|
||||||
|
Scope: {\bf local} \\
|
||||||
|
Type: {\bf required}\\
|
||||||
|
\item[desc\_a] The communication descriptor.\\
|
||||||
|
Scope: {\bf local} \\
|
||||||
|
Type: {\bf required}\\
|
||||||
|
\item[js] The starting column.\\
|
||||||
|
Scope: {\bf local} \\
|
||||||
|
Type: {\bf optional}\\
|
||||||
|
\end{description}
|
||||||
|
|
||||||
|
\begin{description}
|
||||||
|
\item[\bf On Return]
|
||||||
|
\item[x] The dense matrix to be allocated.
|
||||||
|
Scope: {\bf local} \\
|
||||||
|
Type: {\bf required}\\
|
||||||
|
\item[info] Error code.
|
||||||
|
Scope: {\bf local} \\
|
||||||
|
Type: {\bf required}\\
|
||||||
|
\end{description}
|
||||||
|
|
||||||
|
%
|
||||||
|
%% psb_asb %%
|
||||||
|
%
|
||||||
|
\subroutine{psb\_asb}{Assembly a dense matrix}
|
||||||
|
|
||||||
|
\syntax{call psb\_asb}{x, desc\_a, info}
|
||||||
|
|
||||||
|
\begin{description}
|
||||||
|
\item[\bf On Entry]
|
||||||
|
\item[desc\_a] The communication descriptor.\\
|
||||||
|
Scope: {\bf local} \\
|
||||||
|
Type: {\bf required}\\
|
||||||
|
\end{description}
|
||||||
|
|
||||||
|
\begin{description}
|
||||||
|
\item[\bf On Return]
|
||||||
|
\item[x] The dense matrix to be assembled.
|
||||||
|
Scope: {\bf local} \\
|
||||||
|
Type: {\bf required}\\
|
||||||
|
\item[info] Error code.
|
||||||
|
Scope: {\bf local} \\
|
||||||
|
Type: {\bf required}\\
|
||||||
|
\end{description}
|
||||||
|
|
||||||
|
|
||||||
|
%
|
||||||
|
%% psb_csrp %%
|
||||||
|
%
|
||||||
|
\subroutine{psb\_csrp}{Applies a right permutation to a sparse matrix}
|
||||||
|
|
||||||
|
\syntax{call psb\_csrp}{trans, iperm, a, desc\_a, info}
|
||||||
|
|
||||||
|
\begin{description}
|
||||||
|
\item[\bf On Entry]
|
||||||
|
\item[arg]
|
||||||
|
\end{description}
|
||||||
|
|
||||||
|
\begin{description}
|
||||||
|
\item[\bf On Return]
|
||||||
|
\item[arg]
|
||||||
|
\end{description}
|
||||||
|
|
||||||
|
|
||||||
|
%
|
||||||
|
%% psb_descprt %%
|
||||||
|
%
|
||||||
|
\subroutine{psb\_descprt}{Prints a descriptor}
|
||||||
|
|
||||||
|
\syntax{call psb\_descprt}{iout, desc\_p, glob, short}
|
||||||
|
|
||||||
|
\begin{description}
|
||||||
|
\item[\bf On Entry]
|
||||||
|
\item[arg]
|
||||||
|
\end{description}
|
||||||
|
|
||||||
|
\begin{description}
|
||||||
|
\item[\bf On Return]
|
||||||
|
\item[arg]
|
||||||
|
\end{description}
|
||||||
|
|
||||||
|
|
||||||
|
%
|
||||||
|
%% psb_free %%
|
||||||
|
%
|
||||||
|
\subroutine{psb\_free}{Frees a dense matrix}
|
||||||
|
|
||||||
|
\syntax{call psb\_free}{x, desc\_a, info}
|
||||||
|
|
||||||
|
\begin{description}
|
||||||
|
\item[\bf On Entry]
|
||||||
|
\item[arg]
|
||||||
|
\end{description}
|
||||||
|
|
||||||
|
\begin{description}
|
||||||
|
\item[\bf On Return]
|
||||||
|
\item[arg]
|
||||||
|
\end{description}
|
||||||
|
|
||||||
|
|
||||||
|
%
|
||||||
|
%% psb_gelp %%
|
||||||
|
%
|
||||||
|
\subroutine{psb\_gelp}{Applies a left permutation to a dense matrix}
|
||||||
|
|
||||||
|
\syntax{call psb\_gelp}{trans, iperm, x, desc\_a, info}
|
||||||
|
|
||||||
|
\begin{description}
|
||||||
|
\item[\bf On Entry]
|
||||||
|
\item[arg]
|
||||||
|
\end{description}
|
||||||
|
|
||||||
|
\begin{description}
|
||||||
|
\item[\bf On Return]
|
||||||
|
\item[arg]
|
||||||
|
\end{description}
|
||||||
|
|
||||||
|
%
|
||||||
|
%% psb_ins %%
|
||||||
|
%
|
||||||
|
\subroutine{psb\_ins}{Insert a submatrix into a dense matrix}
|
||||||
|
|
||||||
|
\syntax{call psb\_ins}{m, n, x, ix, jx, blck, desc\_a, info, iblck, jblck}
|
||||||
|
\syntax*{call psb\_ins}{m, x, ix, jx, blck, desc\_a, info, iblck}
|
||||||
|
\syntax*{call psb\_ins}{m, x, ix, jx, blck, desc\_a, info, iblck, insflag}
|
||||||
|
|
||||||
|
\begin{description}
|
||||||
|
\item[\bf On Entry]
|
||||||
|
\item[arg]
|
||||||
|
\end{description}
|
||||||
|
|
||||||
|
\begin{description}
|
||||||
|
\item[\bf On Return]
|
||||||
|
\item[arg]
|
||||||
|
\end{description}
|
||||||
|
|
||||||
|
|
||||||
|
%
|
||||||
|
%% psb_dscall %%
|
||||||
|
%
|
||||||
|
\subroutine{psb\_dscall}{Allocates a communication descriptor}
|
||||||
|
|
||||||
|
\syntax{call psb\_dscall}{m, n, parts, icontxt, desc\_a, info, flag}
|
||||||
|
\syntax*{call psb\_dscall}{m, v, icontxt, desc\_a, info, flag}
|
||||||
|
|
||||||
|
\begin{description}
|
||||||
|
\item[\bf On Entry]
|
||||||
|
\item[arg]
|
||||||
|
\end{description}
|
||||||
|
|
||||||
|
\begin{description}
|
||||||
|
\item[\bf On Return]
|
||||||
|
\item[arg]
|
||||||
|
\end{description}
|
||||||
|
|
||||||
|
|
||||||
|
%
|
||||||
|
%% psb_dscasb %%
|
||||||
|
%
|
||||||
|
\subroutine{psb\_dscasb}{Communication descriptor assembly routine}
|
||||||
|
|
||||||
|
\syntax{call psb\_dscasb}{desc\_a, info}
|
||||||
|
|
||||||
|
\begin{description}
|
||||||
|
\item[\bf On Entry]
|
||||||
|
\item[arg]
|
||||||
|
\end{description}
|
||||||
|
|
||||||
|
\begin{description}
|
||||||
|
\item[\bf On Return]
|
||||||
|
\item[arg]
|
||||||
|
\end{description}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
%
|
||||||
|
%% psb_dsccpy %%
|
||||||
|
%
|
||||||
|
\subroutine{psb\_dsccpy}{Copies a communication descriptor}
|
||||||
|
|
||||||
|
\syntax{call }{}
|
||||||
|
\syntax*{call }{}
|
||||||
|
|
||||||
|
\begin{description}
|
||||||
|
\item[\bf On Entry]
|
||||||
|
\item[arg]
|
||||||
|
\end{description}
|
||||||
|
|
||||||
|
\begin{description}
|
||||||
|
\item[\bf On Return]
|
||||||
|
\item[arg]
|
||||||
|
\end{description}
|
||||||
|
|
||||||
|
|
||||||
|
%
|
||||||
|
%% psb_dscfree %%
|
||||||
|
%
|
||||||
|
\subroutine{psb\_dscfree}{Frees a communication descriptor}
|
||||||
|
|
||||||
|
\syntax{call }{}
|
||||||
|
\syntax*{call }{}
|
||||||
|
|
||||||
|
\begin{description}
|
||||||
|
\item[\bf On Entry]
|
||||||
|
\item[arg]
|
||||||
|
\end{description}
|
||||||
|
|
||||||
|
\begin{description}
|
||||||
|
\item[\bf On Return]
|
||||||
|
\item[arg]
|
||||||
|
\end{description}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
%
|
||||||
|
%% psb_dscins %%
|
||||||
|
%
|
||||||
|
\subroutine{psb\_dscins}{Comunnication descriptor insert routine}
|
||||||
|
|
||||||
|
\syntax{call }{}
|
||||||
|
\syntax*{call }{}
|
||||||
|
|
||||||
|
\begin{description}
|
||||||
|
\item[\bf On Entry]
|
||||||
|
\item[arg]
|
||||||
|
\end{description}
|
||||||
|
|
||||||
|
\begin{description}
|
||||||
|
\item[\bf On Return]
|
||||||
|
\item[arg]
|
||||||
|
\end{description}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
%
|
||||||
|
%% psb_dscren %%
|
||||||
|
%
|
||||||
|
\subroutine{psb\_dscren}{Applies a renumeration to a communication descriptor}
|
||||||
|
|
||||||
|
\syntax{call }{}
|
||||||
|
\syntax*{call }{}
|
||||||
|
|
||||||
|
\begin{description}
|
||||||
|
\item[\bf On Entry]
|
||||||
|
\item[arg]
|
||||||
|
\end{description}
|
||||||
|
|
||||||
|
\begin{description}
|
||||||
|
\item[\bf On Return]
|
||||||
|
\item[arg]
|
||||||
|
\end{description}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
%
|
||||||
|
%% psb_spalloc %%
|
||||||
|
%
|
||||||
|
\subroutine{psb\_spalloc}{Allocates a sparse matrix}
|
||||||
|
|
||||||
|
\syntax{call }{}
|
||||||
|
\syntax*{call }{}
|
||||||
|
|
||||||
|
\begin{description}
|
||||||
|
\item[\bf On Entry]
|
||||||
|
\item[arg]
|
||||||
|
\end{description}
|
||||||
|
|
||||||
|
\begin{description}
|
||||||
|
\item[\bf On Return]
|
||||||
|
\item[arg]
|
||||||
|
\end{description}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
%
|
||||||
|
%% psb_spasb %%
|
||||||
|
%
|
||||||
|
\subroutine{psb\_spasb}{Sparse matrix assembly routine}
|
||||||
|
|
||||||
|
\syntax{call }{}
|
||||||
|
\syntax*{call }{}
|
||||||
|
|
||||||
|
\begin{description}
|
||||||
|
\item[\bf On Entry]
|
||||||
|
\item[arg]
|
||||||
|
\end{description}
|
||||||
|
|
||||||
|
\begin{description}
|
||||||
|
\item[\bf On Return]
|
||||||
|
\item[arg]
|
||||||
|
\end{description}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
%
|
||||||
|
%% psb_spcnv %%
|
||||||
|
%
|
||||||
|
\subroutine{psb\_spcnv}{Converts a sparse matrix storage format}
|
||||||
|
|
||||||
|
\syntax{call }{}
|
||||||
|
\syntax*{call }{}
|
||||||
|
|
||||||
|
\begin{description}
|
||||||
|
\item[\bf On Entry]
|
||||||
|
\item[arg]
|
||||||
|
\end{description}
|
||||||
|
|
||||||
|
\begin{description}
|
||||||
|
\item[\bf On Return]
|
||||||
|
\item[arg]
|
||||||
|
\end{description}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
%
|
||||||
|
%% psb_spfree %%
|
||||||
|
%
|
||||||
|
\subroutine{psb\_spfree}{Frees a sparse matrix}
|
||||||
|
|
||||||
|
\syntax{call }{}
|
||||||
|
\syntax*{call }{}
|
||||||
|
|
||||||
|
\begin{description}
|
||||||
|
\item[\bf On Entry]
|
||||||
|
\item[arg]
|
||||||
|
\end{description}
|
||||||
|
|
||||||
|
\begin{description}
|
||||||
|
\item[\bf On Return]
|
||||||
|
\item[arg]
|
||||||
|
\end{description}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
%
|
||||||
|
%% psb_spins %%
|
||||||
|
%
|
||||||
|
\subroutine{psb\_spins}{Sparse matrix insertion routine}
|
||||||
|
|
||||||
|
\syntax{call }{}
|
||||||
|
\syntax*{call }{}
|
||||||
|
|
||||||
|
\begin{description}
|
||||||
|
\item[\bf On Entry]
|
||||||
|
\item[arg]
|
||||||
|
\end{description}
|
||||||
|
|
||||||
|
\begin{description}
|
||||||
|
\item[\bf On Return]
|
||||||
|
\item[arg]
|
||||||
|
\end{description}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
%
|
||||||
|
%% psb_sprn %%
|
||||||
|
%
|
||||||
|
\subroutine{psb\_sprn}{???}
|
||||||
|
|
||||||
|
\syntax{call }{}
|
||||||
|
\syntax*{call }{}
|
||||||
|
|
||||||
|
\begin{description}
|
||||||
|
\item[\bf On Entry]
|
||||||
|
\item[arg]
|
||||||
|
\end{description}
|
||||||
|
|
||||||
|
\begin{description}
|
||||||
|
\item[\bf On Return]
|
||||||
|
\item[arg]
|
||||||
|
\end{description}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
%
|
||||||
|
%% psb_spupdate %%
|
||||||
|
%
|
||||||
|
\subroutine{psb\_spupdate}{???}
|
||||||
|
|
||||||
|
\syntax{call }{}
|
||||||
|
\syntax*{call }{}
|
||||||
|
|
||||||
|
\begin{description}
|
||||||
|
\item[\bf On Entry]
|
||||||
|
\item[arg]
|
||||||
|
\end{description}
|
||||||
|
|
||||||
|
\begin{description}
|
||||||
|
\item[\bf On Return]
|
||||||
|
\item[arg]
|
||||||
|
\end{description}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
%
|
||||||
|
%% psb_glob_to_loc %%
|
||||||
|
%
|
||||||
|
\subroutine{psb\_glob\_to\_loc}{Global to local indices convertion}
|
||||||
|
|
||||||
|
\syntax{call }{}
|
||||||
|
\syntax*{call }{}
|
||||||
|
|
||||||
|
\begin{description}
|
||||||
|
\item[\bf On Entry]
|
||||||
|
\item[arg]
|
||||||
|
\end{description}
|
||||||
|
|
||||||
|
\begin{description}
|
||||||
|
\item[\bf On Return]
|
||||||
|
\item[arg]
|
||||||
|
\end{description}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
%
|
||||||
|
%% psb_loc_to_glob %%
|
||||||
|
%
|
||||||
|
\subroutine{psb\_loc\_to\_glob}{Local to global indices conversion}
|
||||||
|
|
||||||
|
\syntax{call }{}
|
||||||
|
\syntax*{call }{}
|
||||||
|
|
||||||
|
\begin{description}
|
||||||
|
\item[\bf On Entry]
|
||||||
|
\item[arg]
|
||||||
|
\end{description}
|
||||||
|
|
||||||
|
\begin{description}
|
||||||
|
\item[\bf On Return]
|
||||||
|
\item[arg]
|
||||||
|
\end{description}
|
||||||
|
|
||||||
|
|
||||||
|
%%% Local Variables:
|
||||||
|
%%% mode: latex
|
||||||
|
%%% TeX-master: "userguide"
|
||||||
|
%%% End:
|
Loading…
Reference in New Issue