<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">

<!--Converted with LaTeX2HTML 2008 (1.71)
original version by:  Nikos Drakos, CBLU, University of Leeds
* revised and updated by:  Marcus Hennecke, Ross Moore, Herb Swan
* with significant contributions from:
  Jens Lippmann, Marek Rouchal, Martin Wilck and others -->
<HTML>
<HEAD>
<TITLE>Sparse Matrix class</TITLE>
<META NAME="description" CONTENT="Sparse Matrix class">
<META NAME="keywords" CONTENT="userhtml">
<META NAME="resource-type" CONTENT="document">
<META NAME="distribution" CONTENT="global">

<META NAME="Generator" CONTENT="LaTeX2HTML v2008">
<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">

<LINK REL="STYLESHEET" HREF="userhtml.css">

<LINK REL="next" HREF="node41.html">
<LINK REL="previous" HREF="node10.html">
<LINK REL="up" HREF="node9.html">
<LINK REL="next" HREF="node23.html">
</HEAD>

<BODY >
<!--Navigation Panel-->
<A NAME="tex2html493"
  HREF="node23.html">
<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A> 
<A NAME="tex2html489"
  HREF="node9.html">
<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A> 
<A NAME="tex2html483"
  HREF="node21.html">
<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A> 
<A NAME="tex2html491"
  HREF="node1.html">
<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A>  
<BR>
<B> Next:</B> <A NAME="tex2html494"
  HREF="node23.html">Sparse Matrix Methods</A>
<B> Up:</B> <A NAME="tex2html490"
  HREF="node9.html">Data Structures and Classes</A>
<B> Previous:</B> <A NAME="tex2html484"
  HREF="node21.html">Named Constants</A>
 &nbsp; <B>  <A NAME="tex2html492"
  HREF="node1.html">Contents</A></B> 
<BR>
<BR>
<!--End of Navigation Panel-->

<H2><A NAME="SECTION00042000000000000000"></A>
<A NAME="sec:spmat"></A>
<BR>
Sparse Matrix class
</H2>
The spdata<TT>psb_Tspmat_type</TT> class
contains all information about the local portion of the sparse matrix and   
its storage mode. Its design is 
based on the STATE design pattern&nbsp;[<A
 HREF="node128.html#DesignPatterns">13</A>] as detailed
in&nbsp;[<A
 HREF="node128.html#Sparse03">11</A>]; the type declaration is shown in
figure&nbsp;<A HREF="#fig:spmattype">4</A> where <code>T</code> is a placeholder for the
data type and precision variants 
<DL>
<DT><STRONG>S</STRONG></DT>
<DD>Single precision real;
</DD>
<DT><STRONG>D</STRONG></DT>
<DD>Double precision real;
</DD>
<DT><STRONG>C</STRONG></DT>
<DD>Single precision complex;
</DD>
<DT><STRONG>Z</STRONG></DT>
<DD>Double precision complex.
</DD>
</DL>
The actual data is contained in the polymorphic component <code>a%a</code>
of type  spbasedata<TT>psb_T_base_sparse_mat</TT>; its
specific layout can be chosen dynamically among the predefined types,
or an entirely new storage layout can be implemented and passed to the
library at runtime via the <code>psb_spasb</code> routine. 

<DIV ALIGN="CENTER"><A NAME="fig:spmattype"></A><A NAME="875"></A>
<TABLE>
<CAPTION ALIGN="BOTTOM"><STRONG>Figure 4:</STRONG>
    The PSBLAS defined data type that
    contains a sparse matrix.</CAPTION>
<TR><TD><DIV ALIGN="CENTER">
</DIV><TABLE  WIDTH="85%">
<TR><TD>
<PRE>
  type :: psb_Tspmat_type
    class(psb_T_base_sparse_mat), allocatable  :: a 
  end type  psb_Tspmat_type
</PRE></TD></TR>
</TABLE>
<DIV ALIGN="CENTER">
</DIV></TD></TR>
</TABLE>
</DIV>
The following very common formats are precompiled in  PSBLAS and thus
are always available: 
<DL>
<DT><STRONG>psb_T_coo_sparse_mat</STRONG></DT>
<DD>Coordinate storage; 
</DD>
<DT><STRONG>psb_T_csr_sparse_mat</STRONG></DT>
<DD>Compressed storage by rows; 
</DD>
<DT><STRONG>psb_T_csc_sparse_mat</STRONG></DT>
<DD>Compressed storage by columns; 
</DD>
</DL>
The inner sparse matrix has an associated state, which can take the
following values:
<DL>
<DT><STRONG>Build:</STRONG></DT>
<DD>State entered after the first allocation, and before the
  first assembly; in this state it is possible to add nonzero entries.
</DD>
<DT><STRONG>Assembled:</STRONG></DT>
<DD>State entered after the assembly; computations using
  the sparse matrix, such as matrix-vector products, are only possible
  in this state;
</DD>
<DT><STRONG>Update:</STRONG></DT>
<DD>State entered after a reinitalization; this is used to
  handle applications in which the same sparsity pattern is used
  multiple times with different coefficients. In this state it is only
  possible to enter coefficients for already existing nonzero entries.
</DD>
</DL>
The only storage variant supporting the build state is COO; all other
variants are obtained by conversion to/from it. 

<P>
<BR><HR>
<!--Table of Child-Links-->
<A NAME="CHILD_LINKS"><STRONG>Subsections</STRONG></A>

<UL>
<LI><A NAME="tex2html495"
  HREF="node23.html">Sparse Matrix Methods</A>
<LI><A NAME="tex2html496"
  HREF="node24.html">get_nrows -- Get number of  rows in a sparse  matrix</A>
<LI><A NAME="tex2html497"
  HREF="node25.html">get_ncols -- Get number of  columns in a  sparse
  matrix</A>
<LI><A NAME="tex2html498"
  HREF="node26.html">get_nnzeros -- Get number of nonzero elements
  in a sparse matrix</A>
<LI><A NAME="tex2html499"
  HREF="node27.html">get_size  -- Get maximum number of nonzero elements
  in a sparse matrix</A>
<LI><A NAME="tex2html500"
  HREF="node28.html">sizeof  -- Get memory occupation in bytes
of  a sparse matrix</A>
<LI><A NAME="tex2html501"
  HREF="node29.html">get_fmt  -- Short description of the dynamic type</A>
<LI><A NAME="tex2html502"
  HREF="node30.html">is_bld, is_upd, is_asb  -- Status check</A>
<LI><A NAME="tex2html503"
  HREF="node31.html">is_lower, is_upper, is_triangle, is_unit  --
  Format  check</A>
<LI><A NAME="tex2html504"
  HREF="node32.html">cscnv -- Convert to a different storage format</A>
<LI><A NAME="tex2html505"
  HREF="node33.html">csclip -- Reduce to a submatrix</A>
<LI><A NAME="tex2html506"
  HREF="node34.html">get_diag -- Get main diagonal</A>
<LI><A NAME="tex2html507"
  HREF="node35.html">clip_diag -- Cut out main diagonal</A>
<LI><A NAME="tex2html508"
  HREF="node36.html">tril -- Return the lower triangle</A>
<LI><A NAME="tex2html509"
  HREF="node37.html">triu -- Return the upper triangle</A>
<LI><A NAME="tex2html510"
  HREF="node38.html">psb_set_mat_default -- Set default  storage format</A>
<LI><A NAME="tex2html511"
  HREF="node39.html">clone -- Clone current object</A>
<LI><A NAME="tex2html512"
  HREF="node40.html">Named Constants</A>
</UL>
<!--End of Table of Child-Links-->
<HR>
<!--Navigation Panel-->
<A NAME="tex2html493"
  HREF="node23.html">
<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A> 
<A NAME="tex2html489"
  HREF="node9.html">
<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A> 
<A NAME="tex2html483"
  HREF="node21.html">
<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A> 
<A NAME="tex2html491"
  HREF="node1.html">
<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A>  
<BR>
<B> Next:</B> <A NAME="tex2html494"
  HREF="node23.html">Sparse Matrix Methods</A>
<B> Up:</B> <A NAME="tex2html490"
  HREF="node9.html">Data Structures and Classes</A>
<B> Previous:</B> <A NAME="tex2html484"
  HREF="node21.html">Named Constants</A>
 &nbsp; <B>  <A NAME="tex2html492"
  HREF="node1.html">Contents</A></B> 
<!--End of Navigation Panel-->

</BODY>
</HTML>