*** empty log message ***

psblas3-type-indexed
Alfredo Buttari 19 years ago
parent e61b6501b8
commit 14e7e0d1db

@ -54,18 +54,29 @@ Specified as: integer variable.
\end{description} \end{description}
Values assumed by this fields are compatible with ref. 1 (see \S~\ref{chap:appendix}).\\ Values assumed by this fields are compatible with ref. 1 (see \S~\ref{chap:appendix}).\\
FORTRAN95 interface for distributed sparse matrices containing double precision FORTRAN95 interface for distributed sparse matrices containing double precision
real entries is defined as follows: real entries is defined as in figure~\ref{fig:spmattype}.
\begin{figure}[h!]
\begin{Sbox}
\begin{minipage}[tl]{0.85\textwidth}
\begin{verbatim} \begin{verbatim}
type d_spmat type psb_dspmat_type
integer :: m, k integer :: m, k
character*5 :: fida character :: fida(5)
character*1 :: descra(9) character :: descra(10)
integer :: infoa(10) integer :: infoa(10)
real(kind(1.d0)), pointer :: aspk(:) real(kind(1.d0)), pointer :: aspk(:)
integer, pointer :: ia1(:), ia2(:) integer, pointer :: ia1(:), ia2(:), pr(:), pl(:)
integer, pointer :: pl(:), pr(:) end type psb_dspmat_type
end type d_spmat
\end{verbatim} \end{verbatim}
\end{minipage}
\end{Sbox}
\setlength{\fboxsep}{8pt}
\begin{center}
\fbox{\TheSbox}
\end{center}
\caption{\label{fig:spmattype}The PSBLAS defined data type that contains a sparse matrix.}
\end{figure}
The following two cases are among the most commonly used: The following two cases are among the most commonly used:
\begin{description} \begin{description}
\item[fida=``CSR''] Compressed storage by rows. In this case the \item[fida=``CSR''] Compressed storage by rows. In this case the
@ -91,8 +102,6 @@ column index are stored into \verb|apsk(j)|, \verb|ia1(j)| and
\end{description} \end{description}
\subsubsection{Sparse Matrix storage formats}
\subsection{Descriptor data structure} \subsection{Descriptor data structure}
\label{sec:desc} \label{sec:desc}
All the general matrix informations and elements to be All the general matrix informations and elements to be
@ -102,7 +111,7 @@ Every structure of this type is associated to a sparse matrix, it
contains data about general matrix informations and elements to be contains data about general matrix informations and elements to be
exchanged among processes. \\ exchanged among processes. \\
It is not necessary for the user to It is not necessary for the user to
know the internal structure of $psb_desc_type$, it is set in know the internal structure of \verb|psb_desc_type|, it is set in
fully-transparent mode by PSBLAS-TOOLS routines when inserting a new fully-transparent mode by PSBLAS-TOOLS routines when inserting a new
sparse matrix, however the definition of the descriptor is the sparse matrix, however the definition of the descriptor is the
following. following.
@ -167,26 +176,89 @@ process then element $i$ contains local index correpondent to global variable $i
else element $i$ contains -1 (NULL) value.\\ else element $i$ contains -1 (NULL) value.\\
Specified as: a pointer to an integer array of rank one. Specified as: a pointer to an integer array of rank one.
\end{description} \end{description}
FORTRAN90 interface for $decomp\_data$ structures is therefore defined FORTRAN95 interface for \verb|psb_desc_type| structures is therefore defined
as follows: as follows:
\begin{figure}[h!]
\begin{Sbox}
\begin{minipage}[tl]{0.9\textwidth}
\begin{verbatim} \begin{verbatim}
type decomp_data_type type psb_desc_type
integer, pointer :: matrix_data(:) integer, pointer :: matrix_data(:), halo_index(:)
integer, pointer :: halo_index(:) integer, pointer :: overlap_elem(:), overlap_index(:)
integer, pointer :: ovrlap_elem(:) integer, pointer :: loc_to_glob(:), glob_to_loc(:)
integer, pointer :: ovrlap_index(:) end type psb_desc_type
integer, pointer :: loc_to_glob(:)
integer, pointer :: glob_to_loc (:)
end type decomp_data_type
\end{verbatim} \end{verbatim}
\end{minipage}
\end{Sbox}
\setlength{\fboxsep}{8pt}
\begin{center}
\fbox{\TheSbox}
\end{center}
\caption{\label{fig:desctype}The PSBLAS defined data type that
contains the communication descriptor.}
\end{figure}
\subsection{Preconditioner data structure} \subsection{Preconditioner data structure}
\label{sec:prec} \label{sec:prec}
\hypertarget{precdata}{} PSBLAS-2.0 offers the possibility to use many different types of
preconditioning schemes. Besides the simple well known preconditioners
like Diagonal Scaling or Block Jacobi (with ILU(0) incomplete
factorization) also more complex preconditioning methods are
implemented like the Additive Schwarz and Two-Level ones. A
preconditioner is held in the \hypertarget{precdata}{{\tt psb\_prec\_type}} data structure
which depends on the \verb|psb_base_prec| reported in
figure~\ref{fig:prectype}. The \verb|psb_base_prec|
data type may contain a simple preconditioning matrix with the
associated communication descriptor which may be different than the
system communication descriptor in the case of parallel
preconditioners like the Additive Schwarz one. Then the
\verb|psb_prec_type| may contain more than one preconditioning matrix
like in the case of Two-Level (in general Multi-Level) preconditioners.
The user can choose the type of preconditioner to be used by means of
the \verb|psb_precset| subroutine; once the type of preconditioning
method is specified, along with all the parameters that characterize
it, the preconditioner data structure can be built using the
\verb|psb_precbuild| subroutine.
This data structure wants to be flexible enough to easily allow the
implementation of new kind of preconditioners. The values contained in
the \verb|iprcparm| and \verb|dprcparm| define tha type of
preconditioner along with all the parameters related to it; thus,
\verb|iprcparm| and \verb|dprcparm| define how the other records have
to be interpreted.
\begin{figure}[h!]
\small
\begin{Sbox}
\begin{minipage}[tl]{0.9\textwidth}
\begin{verbatim}
type psb_base_prec
type(psb_spmat_type), pointer :: av(:) => null()
real(kind(1.d0)), pointer :: d(:) => null()
type(psb_desc_type), pointer :: desc_data => null()
integer, pointer :: iprcparm(:) => null()
real(kind(1.d0)), pointer :: dprcparm(:) => null()
integer, pointer :: perm(:) => null()
integer, pointer :: mlia(:) => null()
integer, pointer :: invperm(:) => null()
integer, pointer :: nlaggr(:) => null()
type(psb_spmat_type), pointer :: aorig => null()
real(kind(1.d0)), pointer :: dorig(:) => null()
end type psb_base_prec
\subsection{Building and assembling data structures} type psb_prec_type
type(psb_base_prec), pointer :: baseprecv(:) => null()
integer :: prec, base_prec
end type psb_prec_type
\end{verbatim}
\end{minipage}
\end{Sbox}
\setlength{\fboxsep}{8pt}
\begin{center}
\fbox{\TheSbox}
\end{center}
\caption{\label{fig:prectype}The PSBLAS defined data type that contains a preconditioner.}
\end{figure}

@ -1,5 +1,131 @@
\section{Introduction} \section{Introduction}
The PSBLAS library, developed with the aim to facilitate the
parallelization of computationally intensive scientific applications,
is designed to address parallel implementation of iterative solvers
for sparse linear systems through the distributed memory paradigm. It
includes routines for multiplying sparse matrices by dense matrices,
solving block diagonal systems with triangular diagonal entries,
preprocessing sparse matrices, and contains additional routines for
dense matrix operations. The current implementation of PSBLAS
addresses a distributed memory execution model operating with message
passing. However, the overall design does not preclude different
implementation paradigms, such as those based on a shared memory
model.
The PSBLAS library is internally implemented in a mixture of
Fortran~77 and Fortran~95~\cite{metcalf} programming languages. A
similar approach has been advocated by a number of authors,
e.g.~\cite{machiels}. Moreover, the Fortran~95 facilities for dynamic
memory management and interface overloading greatly enhance the usability of the PSBLAS
subroutines. In this way, the library can take care of runtime memory
requirements that are quite difficult or even impossible to predict at
implementation or compilation time. The following presentation of the
PSBLAS library follows the general structure of the proposal for
serial Sparse BLAS~\cite{sblas97}, which in its turn is based on the
proposal for BLAS on dense matrices~\cite{BLAS1,BLAS2,BLAS3}.
The applicability of sparse iterative solvers to many different areas
causes some terminology problems because the same concept may be
denoted through different names depending on the application area. The
PSBLAS features presented in this section will be discussed mainly in terms of finite
difference discretizations of Partial Differential Equations (PDEs).
However, the scope of the library is wider than that: for example, it
can be applied to finite element discretizations of PDEs, and even to
different classes of problems such as nonlinear optimization, for
example in optimal control problems.
The design of a solver for sparse linear systems is driven by many
conflicting objectives, such as limiting occupation of storage
resources, exploiting regularities in the input data, exploiting
hardware characteristics of the parallel platform. To achieve an
optimal communication to computation ratio on distributed memory
machines it is essential to keep the {\em data locality} as high as
possible; this can be done through an appropriate data allocation
strategy. The choice of the preconditioner is another very important
factor that affects efficiency of the implemented application. Optimal
data distribution requirements for a given preconditioner may conflict
with distribution requirements of the rest of the solver. Finding the
optimal trade-off may be very difficult because it is application
dependent. Possible solution to these problems and other important
inputs to the development of the PSBLAS software package has come from
an established experience in applying the PSBLAS solvers to
computational fluid dynamics applications.
\section{General overview}
\label{sec:overview}
The PSBLAS library is designed to handle the implementation of
iterative solvers for sparse linear systems on distributed memory
parallel computers. The system coefficient matrix $A$ must be square;
it may be real or complex, nonsymmetric, and its sparsity pattern
needs not to be symmetric. The serial computation parts are based on
the serial sparse BLAS, so that any extension made to the data
structures of the serial kernels is available to the parallel
version. The overall design and parallelization strategy have been
influenced by the structure of the ScaLAPACK parallel
library~\cite{scalapack}. The layered structure of the PSBLAS library
is shown in figure~\ref{fig:psblas} ; lower layers of the library
indicate an encapsulation relationship with upper layers. The ongoing
discussion focuses on the Fortran~95 layer immediately below the
application layer; two examples of iterative solvers built through the
PSBLAS routines, will be also given in Section~\ref{sec:itmethd}. The
serial parts of the computation on each process are executed through
calls to the serial sparse BLAS subroutines. In a similar way, the
inter-process message exchanges are implemented through the Basic
Linear Algebra Communication Subroutines (BLACS) library~\cite{BLACS}
that guarantees a portable and efficient communication layer. The
Message Passing Interface code is encapsulated within the BLACS
layer. However, in some cases, MPI routines are directly used either
to improve efficiency or to implement communication patterns for which
the BLACS package doesn't provide any method.
\begin{figure}[h] \begin{center}
\includegraphics[scale=0.45]{figures/psblas}
\end{center}
\caption{PSBLAS library components hierarchy.\label{fig:psblas}}
\end{figure}
The PSBLAS library consists of two classes of subroutines that is, the
{\em computational routines} and the {\em auxiliary routines}. The
computational routine set includes:
\begin{itemize}
\item Sparse matrix by dense matrix product; \item Sparse triangular
systems solution for block diagonal matrices;
\item Vector and matrix norms;
\item Dense matrix sums;
\item Dot products.
\end{itemize}
The auxiliary routine set includes:
\begin{itemize}
\item Communication descriptors allocation;
\item Dense and sparse matrix allocation;
\item Dense and sparse matrix build and update;
\item Sparse matrix and data distribution preprocessing.
\end{itemize}
The following naming scheme has been adopted for all the symbols
internally defined in the PSBLAS software package:
\begin{itemize}
\item all the symbols (i.e. subroutine names, data types...) are
prefixed by \verb|psb_|
\item all the data type names are suffixed by \verb|_type|
\item all the constant values are suffixed by \verb|_|
\item all the subroutine names follow the rule \verb|psb_xxname| where
\verb|xx| can be either:
\begin{itemize}
\item \verb|ds|: the routine is related to dense data,
\item \verb|sp|: the routine is related to sparse data,
\item \verb|cd|: the routine is related to communication descriptor (see~\ref{sec:datastruct}).
\end{itemize}
For example the \verb|psb_dsins|, \verb|psb_spins| and
\verb|psb_cdins| perform the same action (see~\ref{sec:toolsrout}) on
dense matrices, sparse matrices and communication descriptors
respectively.
Interface overloading allows the usage of the same subroutine
interfaces for both real and complex data.
\end{itemize}
%%% Local Variables: %%% Local Variables:
%%% mode: latex %%% mode: latex
%%% TeX-master: "userguide" %%% TeX-master: "userguide"

@ -5,7 +5,7 @@
% DENSE MATRIX SUM % DENSE MATRIX SUM
% %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\subroutine{psb\_axpby}{General Dense Matrix Sum} \subroutine{psb\_geaxpby}{General Dense Matrix Sum}
This subroutine is an interface to the computational kernel for This subroutine is an interface to the computational kernel for
dense matrix sum: dense matrix sum:
@ -16,8 +16,8 @@ where:
\item[$y$] represents the global dense submatrix $y_{:, jy:jy+n-1}$ \item[$y$] represents the global dense submatrix $y_{:, jy:jy+n-1}$
\end{description} \end{description}
\syntax{call psb\_axpby}{alpha, x, beta, y, desc\_a, info} \syntax{call psb\_geaxpby}{alpha, x, beta, y, desc\_a, info}
\syntax*{call psb\_axpby}{alpha, x, beta, y, desc\_a, info, n, jx, jy} \syntax*{call psb\_geaxpby}{alpha, x, beta, y, desc\_a, info, n, jx, jy}
%( calculating y <- alpha*x+beta*y ) %( calculating y <- alpha*x+beta*y )
\begin{table}[h] \begin{table}[h]
@ -103,7 +103,7 @@ An integer value that contains an error code.
% %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\subroutine{psb\_dot}{Dot Product} \subroutine{psb\_gedot}{Dot Product}
This function computes dot product between two vectors $x$ and This function computes dot product between two vectors $x$ and
$y$.\\ $y$.\\
@ -118,17 +118,17 @@ where:
\item[$y$] represents the global subvector $y_{:,jy}$ \item[$y$] represents the global subvector $y_{:,jy}$
\end{description} \end{description}
\syntax{psb\_dot}{x, y, desc\_a, info} \syntax{psb\_gedot}{x, y, desc\_a, info}
\syntax*{psb\_dot}{x, y, desc\_a, info, jx, jy} \syntax*{psb\_gedot}{x, y, desc\_a, info, jx, jy}
\begin{table}[h] \begin{table}[h]
\begin{center} \begin{center}
\begin{tabular}{ll} \begin{tabular}{ll}
\hline \hline
$dot$, $x$, $y$ & {\bf Function}\\ $dot$, $x$, $y$ & {\bf Function}\\
\hline \hline
Single Precision Real & psb\_dot\\ Single Precision Real & psb\_gedot\\
Long Precision Real & psb\_dot \\ Long Precision Real & psb\_gedot \\
Long Precision Complex & psb\_dot \\ Long Precision Complex & psb\_gedot \\
\hline \hline
\end{tabular} \end{tabular}
\end{center} \end{center}
@ -184,7 +184,7 @@ An integer value that contains an error code.
% %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\subroutine{psb\_dot}{Generalized Dot Product} \subroutine{psb\_gedot}{Generalized Dot Product}
This subroutine computes a series of dot products among the columns of This subroutine computes a series of dot products among the columns of
two dense matrices $x$ and $y$: two dense matrices $x$ and $y$:
@ -194,16 +194,16 @@ 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 used. If $x$ and $y$ are of rank one, then $res$ is a scalar, else it
is a rank one array. is a rank one array.
\syntax{psb\_dot}{res, x, y, desc\_a, info} \syntax{psb\_gedot}{res, x, y, desc\_a, info}
\begin{table}[h] \begin{table}[h]
\begin{center} \begin{center}
\begin{tabular}{ll} \begin{tabular}{ll}
\hline \hline
$res$, $x$, $y$ & {\bf Subroutine}\\ $res$, $x$, $y$ & {\bf Subroutine}\\
\hline \hline
Single Precision Real & psb\_dot\\ Single Precision Real & psb\_gedot\\
Long Precision Real & psb\_dot \\ Long Precision Real & psb\_gedot \\
Long Precision Complex & psb\_dot \\ Long Precision Complex & psb\_gedot \\
\hline \hline
\end{tabular} \end{tabular}
\end{center} \end{center}
@ -248,7 +248,7 @@ An integer value that contains an error code.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\subroutine{psb\_amax}{Infinity-Norm of Vector} \subroutine{psb\_geamax}{Infinity-Norm of Vector}
This function computes This function computes
the infinity-norm of a vector $x$.\\ the infinity-norm of a vector $x$.\\
@ -262,8 +262,8 @@ where:
\item[$x$] represents the global subvector $x_{:,jx}$ \item[$x$] represents the global subvector $x_{:,jx}$
\end{description} \end{description}
\syntax{psb\_amax}{x, desc\_a, info} \syntax{psb\_geamax}{x, desc\_a, info}
\syntax*{psb\_amax}{x, desc\_a, info, jx} \syntax*{psb\_geamax}{x, desc\_a, info, jx}
\begin{table}[h] \begin{table}[h]
\begin{center} \begin{center}
@ -271,9 +271,9 @@ where:
\hline \hline
$amax$ & $x$ & {\bf Function}\\ $amax$ & $x$ & {\bf Function}\\
\hline \hline
Single Precision Real&Single Precision Real & psb\_amax\\ Single Precision Real&Single Precision Real & psb\_geamax\\
Long Precision Real&Long Precision Real & psb\_amax \\ Long Precision Real&Long Precision Real & psb\_geamax \\
Long Precision Real&Long Precision Complex & psb\_zamax \\ Long Precision Real&Long Precision Complex & psb\_zgeamax \\
\hline \hline
\end{tabular} \end{tabular}
\end{center} \end{center}
@ -317,22 +317,22 @@ An integer value that contains an error code.
% %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\subroutine{psb\_amax}{Generalized Infinity Norm} \subroutine{psb\_geamax}{Generalized Infinity Norm}
This subroutine computes a series of infinity norms on the columns of This subroutine computes a series of infinity norms on the columns of
a dense matrix $x$: a dense matrix $x$:
\[ res(i) \leftarrow \max_k |x(k,i)| \] \[ res(i) \leftarrow \max_k |x(k,i)| \]
\syntax{psb\_amax}{res, x, desc\_a, info} \syntax{psb\_geamax}{res, x, desc\_a, info}
\begin{table}[h] \begin{table}[h]
\begin{center} \begin{center}
\begin{tabular}{lll} \begin{tabular}{lll}
\hline \hline
$res$& $x$& {\bf Subroutine}\\ $res$& $x$& {\bf Subroutine}\\
\hline \hline
Single Precision Real &Single Precision Real & psb\_amax\\ Single Precision Real &Single Precision Real & psb\_geamax\\
Long Precision Real &Long Precision Real & psb\_amax\\ Long Precision Real &Long Precision Real & psb\_geamax\\
Long Precision Real &Long Precision Complex & psb\_amax\\ Long Precision Real &Long Precision Complex & psb\_geamax\\
\hline \hline
\end{tabular} \end{tabular}
\end{center} \end{center}
@ -370,7 +370,7 @@ An integer value that contains an error code.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\subroutine{psb\_asum}{1-Norm of Vector} \subroutine{psb\_geasum}{1-Norm of Vector}
This function computes the 1-norm of a vector $x$.\\ This function computes the 1-norm of a vector $x$.\\
If $x$ is double precision real or single precision real vector If $x$ is double precision real or single precision real vector
@ -383,8 +383,8 @@ where:
\item[$x$] represents the global subvector $x_{:,jx}$ \item[$x$] represents the global subvector $x_{:,jx}$
\end{description} \end{description}
\syntax{psb\_asum}{x, desc\_a, info} \syntax{psb\_geasum}{x, desc\_a, info}
\syntax*{psb\_asum}{x, desc\_a, info, jx} \syntax*{psb\_geasum}{x, desc\_a, info, jx}
\begin{table}[h] \begin{table}[h]
\begin{center} \begin{center}
@ -392,9 +392,9 @@ where:
\hline \hline
$dot$, $x$, $y$ & {\bf Function}\\ $dot$, $x$, $y$ & {\bf Function}\\
\hline \hline
Single Precision Real & psb\_asum\\ Single Precision Real & psb\_geasum\\
Long Precision Real & psb\_asum \\ Long Precision Real & psb\_geasum \\
Long Precision Complex & psb\_asum \\ Long Precision Complex & psb\_geasum \\
\hline \hline
\end{tabular} \end{tabular}
\end{center} \end{center}
@ -440,7 +440,7 @@ An integer value that contains an error code.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\subroutine {psb\_nrm2}{2-Norm of Vector} \subroutine {psb\_genrm2}{2-Norm of Vector}
This function computes the 2-norm of a vector $x$.\\ This function computes the 2-norm of a vector $x$.\\
If $x$ is double precision real or single precision real vector If $x$ is double precision real or single precision real vector
@ -459,17 +459,17 @@ where:
\hline \hline
$nrm2$, $x$ & {\bf Function}\\ $nrm2$, $x$ & {\bf Function}\\
\hline \hline
Single Precision Real & psb\_nrm2\\ Single Precision Real & psb\_genrm2\\
Long Precision Real & psb\_nrm2 \\ Long Precision Real & psb\_genrm2 \\
Long Precision Complex & psb\_nrm2 \\ Long Precision Complex & psb\_genrm2 \\
\hline \hline
\end{tabular} \end{tabular}
\end{center} \end{center}
\caption{Data types\label{tab:f90nrm2}} \caption{Data types\label{tab:f90nrm2}}
\end{table} \end{table}
\syntax{psb\_nrm2}{x, desc\_a, info} \syntax{psb\_genrm2}{x, desc\_a, info}
\syntax*{psb\_nrm2}{x, desc\_a, info, jx} \syntax*{psb\_genrm2}{x, desc\_a, info, jx}
\begin{description} \begin{description}
\item[\bf On Entry] \item[\bf On Entry]
\item[x] the local portion of global dense matrix \item[x] the local portion of global dense matrix
@ -509,7 +509,7 @@ An integer value that contains an error code.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\subroutine{psb\_nrmi}{Infinity Norm of Sparse Matrix} \subroutine{psb\_spnrmi}{Infinity Norm of Sparse Matrix}
This function computes the infinity-norm of a matrix $A$:\\ This function computes the infinity-norm of a matrix $A$:\\
@ -525,16 +525,16 @@ where:
\hline \hline
$nrmi$, $A$ & {\bf Function}\\ $nrmi$, $A$ & {\bf Function}\\
\hline \hline
Single Precision Real & psb\_nrmi\\ Single Precision Real & psb\_spnrmi\\
Long Precision Real & psb\_nrmi \\ Long Precision Real & psb\_spnrmi \\
Long Precision Complex & psb\_nrmi \\ Long Precision Complex & psb\_spnrmi \\
\hline \hline
\end{tabular} \end{tabular}
\end{center} \end{center}
\caption{Data types\label{tab:f90nrmi}} \caption{Data types\label{tab:f90nrmi}}
\end{table} \end{table}
\syntax{psb\_nrmi}{A, desc\_a, info} \syntax{psb\_spnrmi}{A, desc\_a, info}
\begin{description} \begin{description}
\item[\bf On Entry] \item[\bf On Entry]

@ -5,7 +5,7 @@
\ifx\pdfoutput\undefined % We're not running pdftex \ifx\pdfoutput\undefined % We're not running pdftex
\else \else
\pdfbookmark{Title Page}{title} \pdfbookmark{PSBLAS-v2.0 User's Guide}{title}
\fi \fi
\newlength{\centeroffset} \newlength{\centeroffset}
\setlength{\centeroffset}{-0.5\oddsidemargin} \setlength{\centeroffset}{-0.5\oddsidemargin}

@ -1,4 +1,5 @@
\section{Data management and initialization routines} \section{Data management and initialization routines}
\label{sec:toolrout}
% %
%% psb_alloc %% %% psb_alloc %%
% %

@ -1,5 +1,6 @@
\documentclass[12pt,a4paper,twoside]{article} \documentclass[12pt,a4paper,twoside]{article}
\usepackage{pstricks} \usepackage{pstricks}
\usepackage{fancybox}
\usepackage{amsfonts} \usepackage{amsfonts}
% \usepackage{minitoc} % \usepackage{minitoc}
% \setcounter{minitocdepth}{2} % \setcounter{minitocdepth}{2}
@ -63,9 +64,9 @@
\newcommand{\example}{\stepcounter{example}% \newcommand{\example}{\stepcounter{example}%
\section*{\examplename~\theexample}} \section*{\examplename~\theexample}}
\newcommand{\precdata}{\hyperlink{precdata}{{\tt psb\_prec\_data}}} \newcommand{\precdata}{\hyperlink{precdata}{{\tt psb\_prec\_type}}}
\newcommand{\descdata}{\hyperlink{descdata}{{\tt psb\_desc\_data}}} \newcommand{\descdata}{\hyperlink{descdata}{{\tt psb\_desc\_type}}}
\newcommand{\spdata}{\hyperlink{spdata}{{\tt psb\_spmat\_data}}} \newcommand{\spdata}{\hyperlink{spdata}{{\tt psb\_spmat\_type}}}
\begin{document} \begin{document}
\include{title} \include{title}
@ -82,7 +83,6 @@
\pagenumbering{arabic} % Arabic numbering \pagenumbering{arabic} % Arabic numbering
\setcounter{page}{1} % Chapters start on page 1 \setcounter{page}{1} % Chapters start on page 1
\precdata
\include{intro} \include{intro}
\include{datastruct} \include{datastruct}
\include{psbrout} \include{psbrout}

Loading…
Cancel
Save