<?xml-stylesheet type="text/xsl" href="../styles/pmathml.xsl"?>
<!-- saved from url=(0014)about:internet -->
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:dsi="http://www.w3.org/1999/xlink" xmlns:m="http://www.w3.org/1998/Math/MathML" xml:space="preserve"><head><meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"/><title>F11 Chapter Introduction : NAG Library, Mark 23</title><link rel="stylesheet" href="../styles/libdoc.css" type="text/css"/><script type="text/javascript">
   function showLevel(_levelId){
    var thisLevel = document.getElementById(_levelId);
    var thisplus = document.getElementById( _levelId.concat('plus'));
    var thisminus = document.getElementById( _levelId.concat('minus'));
    if(thisLevel.style.display != "block"){
     thisLevel.style.display = "block";
     thisplus.style.display = "none";
     thisminus.style.display = "inline";
     }
    else{
     thisLevel.style.display = "none";
     thisminus.style.display = "none";
     thisplus.style.display = "inline";
     }
    }
  </script></head><body><hr/><div><a class="chap" href="f11conts.xml">F11 Chapter Contents</a></div><div><a class="chapint" href="../../pdf/F11/f11intro.pdf">F11 Chapter Introduction (PDF version)</a></div>
<div><a class="htmltoc" href="../FRONTMATTER/manconts.xml">NAG Library Manual</a></div><hr/><h1 class="libdoc">NAG Library Chapter Introduction<br/><br/>F11 &#8211; Large Scale Linear Systems</h1><div class="htmltoc">
<h2 class="htmltoc"><span class="htmltochead" onclick="showLevel('htmltoc');"><span class="htmltocplus" id="htmltocplus">+</span><span class="htmltocminus" id="htmltocminus">&#8722;</span></span>&#160;Contents</h2>
<div class="htmltocitem" id="htmltoc">
<div class="htmltoc">
<span class="htmltocplus">&#160;&#160;&#160;</span>
<a class="htmltoc" href="#scope">1&#160;&#160;<b>Scope of the Chapter</b></a>
</div><div class="htmltoc">
<span class="htmltoc" onclick="showLevel('tocbackground');"><span class="htmltocplus" id="tocbackgroundplus">+</span><span class="htmltocminus" id="tocbackgroundminus">&#8722;</span></span>
<a class="htmltoc" href="#background">2&#160;&#160;<b>Background to the Problems</b></a>
<div class="htmltocitem" id="tocbackground">
<div class="htmltoc">
<span class="htmltoc" onclick="showLevel('tocbackground1');"><span class="htmltocplus" id="tocbackground1plus">+</span><span class="htmltocminus" id="tocbackground1minus">&#8722;</span></span>
<a class="htmltoc" href="#background1">2.1&#160;&#160;<b>Sparse Matrices and Their Storage</b></a>
<div class="htmltocitem" id="tocbackground1">
<div class="htmltoc">
<span class="htmltocplus">&#160;&#160;&#160;</span>
<a class="htmltoc" href="#background10">2.1.1&#160;&#160;<b>Co-ordinate storage (CS) format</b></a>
</div><div class="htmltoc">
<span class="htmltocplus">&#160;&#160;&#160;</span>
<a class="htmltoc" href="#background11">2.1.2&#160;&#160;<b>Symmetric coordinate storage (SCS) format</b></a>
</div><div class="htmltoc">
<span class="htmltocplus">&#160;&#160;&#160;</span>
<a class="htmltoc" href="#background12">2.1.3&#160;&#160;<b>Compressed column storage (CCS) format</b></a>
</div>
</div>
</div><div class="htmltoc">
<span class="htmltocplus">&#160;&#160;&#160;</span>
<a class="htmltoc" href="#background2">2.2&#160;&#160;<b>Direct Methods</b></a>
</div><div class="htmltoc">
<span class="htmltocplus">&#160;&#160;&#160;</span>
<a class="htmltoc" href="#background3">2.3&#160;&#160;<b>Iterative Methods</b></a>
</div><div class="htmltoc">
<span class="htmltocplus">&#160;&#160;&#160;</span>
<a class="htmltoc" href="#background4">2.4&#160;&#160;<b>Iterative Methods for Real Nonsymmetric and Complex NonHermitian Linear Systems</b></a>
</div><div class="htmltoc">
<span class="htmltocplus">&#160;&#160;&#160;</span>
<a class="htmltoc" href="#background5">2.5&#160;&#160;<b>Iterative Methods for Real Symmetric and Complex Hermitian Linear Systems</b></a>
</div>
</div>
</div><div class="htmltoc">
<span class="htmltoc" onclick="showLevel('tocavailable');"><span class="htmltocplus" id="tocavailableplus">+</span><span class="htmltocminus" id="tocavailableminus">&#8722;</span></span>
<a class="htmltoc" href="#available">3&#160;&#160;<b>Recommendations on Choice and Use of Available Routines</b></a>
<div class="htmltocitem" id="tocavailable">
<div class="htmltoc">
<span class="htmltocplus">&#160;&#160;&#160;</span>
<a class="htmltoc" href="#intrecomm_1">3.1&#160;&#160;<b>Types of Routine Available</b></a>
</div><div class="htmltoc">
<span class="htmltocplus">&#160;&#160;&#160;</span>
<a class="htmltoc" href="#intrecomm_2">3.2&#160;&#160;<b>Iterative Methods for Real Nonsymmetric and Complex NonHermitian Linear Systems</b></a>
</div><div class="htmltoc">
<span class="htmltocplus">&#160;&#160;&#160;</span>
<a class="htmltoc" href="#intrecomm_3">3.3&#160;&#160;<b>Iterative Methods for Real Symmetric and Complex Hermitian Linear Systems</b></a>
</div><div class="htmltoc">
<span class="htmltocplus">&#160;&#160;&#160;</span>
<a class="htmltoc" href="#intrecomm_4">3.4&#160;&#160;<b>Direct Methods</b></a>
</div>
</div>
</div><div class="htmltoc">
<span class="htmltocplus">&#160;&#160;&#160;</span>
<a class="htmltoc" href="#dtree">4&#160;&#160;<b>Decision Tree</b></a>
</div><div class="htmltoc">
<span class="htmltocplus">&#160;&#160;&#160;</span>
<a class="htmltoc" href="#index">5&#160;&#160;<b>Functionality Index</b></a>
</div><div class="htmltoc">
<span class="htmltocplus">&#160;&#160;&#160;</span>
<a class="htmltoc" href="#auxindex">6&#160;&#160;<b>Auxiliary Routines Associated with Library Routine Parameters</b></a>
</div><div class="htmltoc">
<span class="htmltocplus">&#160;&#160;&#160;</span>
<a class="htmltoc" href="#withdrawn">7&#160;&#160;<b>Routines Withdrawn or Scheduled for Withdrawal</b></a>
</div><div class="htmltoc">
<span class="htmltocplus">&#160;&#160;&#160;</span>
<a class="htmltoc" href="#references">8&#160;&#160;<b>References</b></a>
</div>
</div>
</div><h2 class="standard"><a class="sec" name="scope" id="scope"/>1&#160;&#160;Scope of the Chapter</h2>
<div class="paramtext">This chapter provides routines for the solution of large sparse systems of simultaneous linear equations. These include <b>iterative</b> methods for real nonsymmetric and symmetric, complex non-Hermitian and Hermitian linear systems and <b>direct</b> methods for general real linear systems. Further direct methods are currently available in <a class="chap" href="../F01/f01conts.xml">Chapters F01</a> and <a class="chap" href="../F04/f04conts.xml">F04</a>.</div><h2 class="standard"><a class="sec" name="background" id="background"/>2&#160;&#160;Background to the Problems</h2>
<div class="paramtext">This section is only a brief introduction to the solution of sparse linear systems. For a more detailed discussion see for example <a class="ref" href="#ref583">Duff <span class="italic">et al.</span> (1986)</a> and <a class="ref" href="#ref726">Demmel <span class="italic">et al.</span> (1999)</a> for direct methods, or <a class="ref" href="#ref572">Barrett <span class="italic">et al.</span> (1994)</a> for iterative methods.</div><h3 class="standard"><a class="sec" name="background1" id="background1"/>2.1&#160;&#160;Sparse Matrices and Their Storage</h3>
<div class="paramtext">A matrix <m:math><m:mi>A</m:mi></m:math>&#160;may be described as <b>sparse</b> if the number of zero elements is sufficiently large that it is worthwhile using algorithms which avoid computations involving zero elements.</div><div class="paramtext">If <m:math><m:mi>A</m:mi></m:math>&#160;is sparse, and the chosen algorithm requires the matrix coefficients to be stored, a significant saving in storage can often be made by storing only the nonzero elements. A number of different formats may be used to represent sparse matrices economically. These differ according to the amount of storage required, the amount of indirect addressing required for fundamental operations such as matrix-vector products, and their suitability for vector and/or parallel architectures. For a survey of some of these storage formats see <a class="ref" href="#ref572">Barrett <span class="italic">et al.</span> (1994)</a>.</div><div class="paramtext">Some of the routines in this chapter have been designed to be independent of the matrix storage format. This allows you to choose your own preferred format, or to avoid storing the matrix altogether. Other routines are the so-called <b>black-boxes</b>, which are easier to use, but are based on fixed storage formats. Three fixed storage formats for sparse matrices are currently used. These are known as coordinate storage (CS) format, symmetric coordinate storage (SCS) format and compressed column storage (CCS) format.</div><h4 class="standard"><a class="sec" name="background10" id="background10"/>2.1.1&#160;&#160;Co-ordinate storage (CS) format</h4>
<div class="paramtext">This storage format represents a sparse matrix <m:math><m:mi>A</m:mi></m:math>, with NNZ nonzero elements, in terms of three one-dimensional arrays &#8211; a real or 
   complex
   array A and two integer arrays IROW and ICOL. These arrays are all of dimension at least NNZ. A contains the nonzero elements themselves, while IROW and ICOL store the corresponding row and column indices respectively.</div><div class="paramtext">For example, the matrix

<div class="formula"><table class="formula"><tr><td class="formula"><m:math display="block">
<m:mi>A</m:mi><m:mo>=</m:mo><m:mfenced><m:mtable columnalign="right">
  <m:mtr>
   <m:mtd><m:mn>1</m:mn></m:mtd>
   <m:mtd><m:mphantom><m:mo>-</m:mo></m:mphantom><m:mn>2</m:mn></m:mtd>
   <m:mtd><m:mrow><m:mo>-</m:mo><m:mn>1</m:mn></m:mrow></m:mtd>
   <m:mtd><m:mrow><m:mo>-</m:mo><m:mn>1</m:mn></m:mrow></m:mtd>
   <m:mtd><m:mrow><m:mo>-</m:mo><m:mn>3</m:mn></m:mrow></m:mtd>
  </m:mtr><m:mtr>
   <m:mtd><m:mn>0</m:mn></m:mtd>
   <m:mtd><m:mrow><m:mo>-</m:mo><m:mn>1</m:mn></m:mrow></m:mtd>
   <m:mtd><m:mn>0</m:mn></m:mtd>
   <m:mtd><m:mn>0</m:mn></m:mtd>
   <m:mtd><m:mrow><m:mo>-</m:mo><m:mn>4</m:mn></m:mrow></m:mtd>
  </m:mtr><m:mtr>
   <m:mtd><m:mn>3</m:mn></m:mtd>
   <m:mtd><m:mn>0</m:mn></m:mtd>
   <m:mtd><m:mn>0</m:mn></m:mtd>
   <m:mtd><m:mn>0</m:mn></m:mtd>
   <m:mtd><m:mn>2</m:mn></m:mtd>
  </m:mtr><m:mtr>
   <m:mtd><m:mn>2</m:mn></m:mtd>
   <m:mtd><m:mn>0</m:mn></m:mtd>
   <m:mtd><m:mn>4</m:mn></m:mtd>
   <m:mtd><m:mn>1</m:mn></m:mtd>
   <m:mtd><m:mn>1</m:mn></m:mtd>
  </m:mtr><m:mtr>
   <m:mtd><m:mrow><m:mo>-</m:mo><m:mn>2</m:mn></m:mrow></m:mtd>
   <m:mtd><m:mn>0</m:mn></m:mtd>
   <m:mtd><m:mn>0</m:mn></m:mtd>
   <m:mtd><m:mn>0</m:mn></m:mtd>
   <m:mtd><m:mn>1</m:mn></m:mtd>
  </m:mtr>
 </m:mtable></m:mfenced>
</m:math></td><td class="formula2"/></tr></table></div>

might be represented in the arrays A, IROW and ICOL as
<ul class="listind"><li class="listind"><m:math><m:mi mathvariant="bold">A</m:mi><m:mo>=</m:mo><m:mfenced separators=""><m:mn>1</m:mn><m:mo>,</m:mo><m:mn>2</m:mn><m:mo>,</m:mo><m:mrow><m:mo>-</m:mo><m:mn>1</m:mn></m:mrow><m:mo>,</m:mo><m:mrow><m:mo>-</m:mo><m:mn>1</m:mn></m:mrow><m:mo>,</m:mo><m:mrow><m:mo>-</m:mo><m:mn>3</m:mn></m:mrow><m:mo>,</m:mo><m:mrow><m:mo>-</m:mo><m:mn>1</m:mn></m:mrow><m:mo>,</m:mo><m:mrow><m:mo>-</m:mo><m:mn>4</m:mn></m:mrow><m:mo>,</m:mo><m:mn>3</m:mn><m:mo>,</m:mo><m:mn>2</m:mn><m:mo>,</m:mo><m:mn>2</m:mn><m:mo>,</m:mo><m:mn>4</m:mn><m:mo>,</m:mo><m:mn>1</m:mn><m:mo>,</m:mo><m:mn>1</m:mn><m:mo>,</m:mo><m:mrow><m:mo>-</m:mo><m:mn>2</m:mn></m:mrow><m:mo>,</m:mo><m:mn>1</m:mn></m:mfenced></m:math></li><li class="listind"><m:math><m:mi mathvariant="bold">IROW</m:mi><m:mo>=</m:mo><m:mfenced separators=""><m:mn>1</m:mn><m:mo>,</m:mo><m:mn>1</m:mn><m:mo>,</m:mo><m:mn>1</m:mn><m:mo>,</m:mo><m:mn>1</m:mn><m:mo>,</m:mo><m:mn>1</m:mn><m:mo>,</m:mo><m:mn>2</m:mn><m:mo>,</m:mo><m:mn>2</m:mn><m:mo>,</m:mo><m:mn>3</m:mn><m:mo>,</m:mo><m:mn>3</m:mn><m:mo>,</m:mo><m:mn>4</m:mn><m:mo>,</m:mo><m:mn>4</m:mn><m:mo>,</m:mo><m:mn>4</m:mn><m:mo>,</m:mo><m:mn>4</m:mn><m:mo>,</m:mo><m:mn>5</m:mn><m:mo>,</m:mo><m:mn>5</m:mn></m:mfenced></m:math></li><li class="listind"><m:math><m:mi mathvariant="bold">ICOL</m:mi><m:mo>=</m:mo><m:mfenced separators=""><m:mn>1</m:mn><m:mo>,</m:mo><m:mn>2</m:mn><m:mo>,</m:mo><m:mn>3</m:mn><m:mo>,</m:mo><m:mn>4</m:mn><m:mo>,</m:mo><m:mn>5</m:mn><m:mo>,</m:mo><m:mn>2</m:mn><m:mo>,</m:mo><m:mn>5</m:mn><m:mo>,</m:mo><m:mn>1</m:mn><m:mo>,</m:mo><m:mn>5</m:mn><m:mo>,</m:mo><m:mn>1</m:mn><m:mo>,</m:mo><m:mn>3</m:mn><m:mo>,</m:mo><m:mn>4</m:mn><m:mo>,</m:mo><m:mn>5</m:mn><m:mo>,</m:mo><m:mn>1</m:mn><m:mo>,</m:mo><m:mn>5</m:mn></m:mfenced></m:math>.</li></ul>
</div><div class="paramtext">Notes
<table class="standard-100"><tr>
<td style="width:2.1em;" valign="baseline">(i)</td>
<td valign="top">The general format specifies no ordering of the array elements, but some routines may impose a specific ordering. For example, the nonzero elements may be required to be ordered by increasing row index and by increasing column index within each row, as in the example above. <a class="rout" href="../F11/f11zaf.xml">F11ZAF</a> is a utility routine provided to order the elements appropriately (see <a class="sec" href="#background2">Section 2.2</a>).</td>
</tr><tr>
<td style="width:2.1em;" valign="baseline">(ii)</td>
<td valign="top">With this storage format it is possible to enter duplicate elements. These may be interpreted in various ways (e.g., raising an error, ignoring all but the first entry, all but the last, or summing).</td>
</tr></table>
</div><h4 class="standard"><a class="sec" name="background11" id="background11"/>2.1.2&#160;&#160;Symmetric coordinate storage (SCS) format</h4>
<div class="paramtext">This storage format is suitable for symmetric and Hermitian matrices, and is identical to the CS format described in <a class="sec" href="#background10">Section 2.1.1</a>, except that only the lower triangular nonzero elements are stored. Thus, for example, the matrix

<div class="formula"><table class="formula"><tr><td class="formula"><m:math display="block">
<m:mi>A</m:mi><m:mo>=</m:mo><m:mfenced><m:mtable columnalign="right">
  <m:mtr>
   <m:mtd><m:mn>4</m:mn></m:mtd>
   <m:mtd><m:mphantom><m:mo>-</m:mo></m:mphantom><m:mn>1</m:mn></m:mtd>
   <m:mtd><m:mphantom><m:mo>-</m:mo></m:mphantom><m:mn>0</m:mn></m:mtd>
   <m:mtd><m:mphantom><m:mo>-</m:mo></m:mphantom><m:mn>0</m:mn></m:mtd>
   <m:mtd><m:mrow><m:mo>-</m:mo><m:mn>1</m:mn></m:mrow></m:mtd>
   <m:mtd><m:mn>2</m:mn></m:mtd>
  </m:mtr><m:mtr>
   <m:mtd><m:mn>1</m:mn></m:mtd>
   <m:mtd><m:mn>5</m:mn></m:mtd>
   <m:mtd><m:mn>0</m:mn></m:mtd>
   <m:mtd><m:mn>2</m:mn></m:mtd>
   <m:mtd><m:mn>0</m:mn></m:mtd>
   <m:mtd><m:mn>0</m:mn></m:mtd>
  </m:mtr><m:mtr>
   <m:mtd><m:mn>0</m:mn></m:mtd>
   <m:mtd><m:mn>0</m:mn></m:mtd>
   <m:mtd><m:mn>2</m:mn></m:mtd>
   <m:mtd><m:mn>1</m:mn></m:mtd>
   <m:mtd><m:mn>0</m:mn></m:mtd>
   <m:mtd><m:mrow><m:mo>-</m:mo><m:mn>1</m:mn></m:mrow></m:mtd>
  </m:mtr><m:mtr>
   <m:mtd><m:mn>0</m:mn></m:mtd>
   <m:mtd><m:mn>2</m:mn></m:mtd>
   <m:mtd><m:mn>1</m:mn></m:mtd>
   <m:mtd><m:mn>3</m:mn></m:mtd>
   <m:mtd><m:mn>1</m:mn></m:mtd>
   <m:mtd><m:mn>0</m:mn></m:mtd>
  </m:mtr><m:mtr>
   <m:mtd><m:mrow><m:mo>-</m:mo><m:mn>1</m:mn></m:mrow></m:mtd>
   <m:mtd><m:mn>0</m:mn></m:mtd>
   <m:mtd><m:mn>0</m:mn></m:mtd>
   <m:mtd><m:mn>1</m:mn></m:mtd>
   <m:mtd><m:mn>4</m:mn></m:mtd>
   <m:mtd><m:mn>0</m:mn></m:mtd>
  </m:mtr><m:mtr>
   <m:mtd><m:mn>2</m:mn></m:mtd>
   <m:mtd><m:mn>0</m:mn></m:mtd>
   <m:mtd><m:mrow><m:mo>-</m:mo><m:mn>1</m:mn></m:mrow></m:mtd>
   <m:mtd><m:mn>0</m:mn></m:mtd>
   <m:mtd><m:mn>0</m:mn></m:mtd>
   <m:mtd><m:mn>3</m:mn></m:mtd>
  </m:mtr>
 </m:mtable></m:mfenced>
</m:math></td><td class="formula2"/></tr></table></div>

might be represented in the arrays A, IROW and ICOL as
<ul class="listind"><li class="listind"><m:math><m:mi mathvariant="bold">A</m:mi><m:mo>=</m:mo><m:mfenced separators=""><m:mn>4</m:mn><m:mo>,</m:mo><m:mn>1</m:mn><m:mo>,</m:mo><m:mn>5</m:mn><m:mo>,</m:mo><m:mn>2</m:mn><m:mo>,</m:mo><m:mn>2</m:mn><m:mo>,</m:mo><m:mn>1</m:mn><m:mo>,</m:mo><m:mn>3</m:mn><m:mo>,</m:mo><m:mrow><m:mo>-</m:mo><m:mn>1</m:mn></m:mrow><m:mo>,</m:mo><m:mn>1</m:mn><m:mo>,</m:mo><m:mn>4</m:mn><m:mo>,</m:mo><m:mn>2</m:mn><m:mo>,</m:mo><m:mrow><m:mo>-</m:mo><m:mn>1</m:mn></m:mrow><m:mo>,</m:mo><m:mn>3</m:mn></m:mfenced></m:math>.</li><li class="listind"><m:math><m:mi mathvariant="bold">IROW</m:mi><m:mo>=</m:mo><m:mfenced separators=""><m:mn>1</m:mn><m:mo>,</m:mo><m:mn>2</m:mn><m:mo>,</m:mo><m:mn>2</m:mn><m:mo>,</m:mo><m:mn>3</m:mn><m:mo>,</m:mo><m:mn>4</m:mn><m:mo>,</m:mo><m:mn>4</m:mn><m:mo>,</m:mo><m:mn>4</m:mn><m:mo>,</m:mo><m:mn>5</m:mn><m:mo>,</m:mo><m:mn>5</m:mn><m:mo>,</m:mo><m:mn>5</m:mn><m:mo>,</m:mo><m:mn>6</m:mn><m:mo>,</m:mo><m:mn>6</m:mn><m:mo>,</m:mo><m:mn>6</m:mn></m:mfenced></m:math>,</li><li class="listind"><m:math><m:mi mathvariant="bold">ICOL</m:mi><m:mo>=</m:mo><m:mfenced separators=""><m:mn>1</m:mn><m:mo>,</m:mo><m:mn>1</m:mn><m:mo>,</m:mo><m:mn>2</m:mn><m:mo>,</m:mo><m:mn>3</m:mn><m:mo>,</m:mo><m:mn>2</m:mn><m:mo>,</m:mo><m:mn>3</m:mn><m:mo>,</m:mo><m:mn>4</m:mn><m:mo>,</m:mo><m:mn>1</m:mn><m:mo>,</m:mo><m:mn>4</m:mn><m:mo>,</m:mo><m:mn>5</m:mn><m:mo>,</m:mo><m:mn>1</m:mn><m:mo>,</m:mo><m:mn>3</m:mn><m:mo>,</m:mo><m:mn>6</m:mn></m:mfenced></m:math>.</li></ul>
</div><h4 class="standard"><a class="sec" name="background12" id="background12"/>2.1.3&#160;&#160;Compressed column storage (CCS) format</h4>
<div class="paramtext">This storage format also uses three one-dimensional arrays &#8211; a real or 
   complex
   array A and two integer arrays IROWIX and ICOLZP. The array A and IROWIX are of dimension at least <m:math><m:mi mathvariant="italic">nnz</m:mi></m:math>, while ICOLZP is of dimension at least <m:math><m:mi mathvariant="bold">N</m:mi><m:mo>+</m:mo><m:mn>1</m:mn></m:math>. A contains the nonzero elements, going down the first column, then the second and so on. For example, the matrix in <a class="sec" href="#background10">Section 2.1.1</a> above will be represented by
<ul class="listind"><li class="listind"><m:math><m:mi mathvariant="bold">A</m:mi><m:mo>=</m:mo><m:mfenced separators=""><m:mn>1</m:mn><m:mo>,</m:mo><m:mn>3</m:mn><m:mo>,</m:mo><m:mn>2</m:mn><m:mo>,</m:mo><m:mrow><m:mo>-</m:mo><m:mn>2</m:mn></m:mrow><m:mo>,</m:mo><m:mn>2</m:mn><m:mo>,</m:mo><m:mrow><m:mo>-</m:mo><m:mn>1</m:mn></m:mrow><m:mo>,</m:mo><m:mrow><m:mo>-</m:mo><m:mn>1</m:mn></m:mrow><m:mo>,</m:mo><m:mn>4</m:mn><m:mo>,</m:mo><m:mrow><m:mo>-</m:mo><m:mn>1</m:mn></m:mrow><m:mo>,</m:mo><m:mn>1</m:mn><m:mo>,</m:mo><m:mrow><m:mo>-</m:mo><m:mn>3</m:mn></m:mrow><m:mo>,</m:mo><m:mrow><m:mo>-</m:mo><m:mn>4</m:mn></m:mrow><m:mo>,</m:mo><m:mn>2</m:mn><m:mo>,</m:mo><m:mn>1</m:mn><m:mo>,</m:mo><m:mn>1</m:mn></m:mfenced></m:math>.</li></ul>
IROWIX records the row index for each entry in A, so the same matrix will have
<ul class="listind"><li class="listind"><m:math><m:mi mathvariant="bold">IROWIX</m:mi><m:mo>=</m:mo><m:mfenced separators=""><m:mn>1</m:mn><m:mo>,</m:mo><m:mn>3</m:mn><m:mo>,</m:mo><m:mn>4</m:mn><m:mo>,</m:mo><m:mn>5</m:mn><m:mo>,</m:mo><m:mn>1</m:mn><m:mo>,</m:mo><m:mn>2</m:mn><m:mo>,</m:mo><m:mn>1</m:mn><m:mo>,</m:mo><m:mn>4</m:mn><m:mo>,</m:mo><m:mn>1</m:mn><m:mo>,</m:mo><m:mn>4</m:mn><m:mo>,</m:mo><m:mn>1</m:mn><m:mo>,</m:mo><m:mn>2</m:mn><m:mo>,</m:mo><m:mn>3</m:mn><m:mo>,</m:mo><m:mn>4</m:mn><m:mo>,</m:mo><m:mn>5</m:mn></m:mfenced></m:math>.
</li></ul>
ICOLZP records the index into A which starts each new column. The last entry of ICOLZP is equal to <m:math><m:mi mathvariant="italic">nnz</m:mi><m:mo>+</m:mo><m:mn>1</m:mn></m:math>. An empty column (one filled with zeros, that is) is signalled by an index that is the same as the next non-empty column, or <m:math><m:mi mathvariant="italic">nnz</m:mi><m:mo>+</m:mo><m:mn>1</m:mn></m:math>&#160;if all subsequent columns are empty. The above example corresponds to
<ul class="listind"><li class="listind"><m:math><m:mi mathvariant="bold">ICOLZP</m:mi><m:mo>=</m:mo><m:mfenced separators=""><m:mn>1</m:mn><m:mo>,</m:mo><m:mn>5</m:mn><m:mo>,</m:mo><m:mn>7</m:mn><m:mo>,</m:mo><m:mn>9</m:mn><m:mo>,</m:mo><m:mn>11</m:mn><m:mo>,</m:mo><m:mn>16</m:mn></m:mfenced></m:math>&#160;</li></ul>
</div><div class="paramtext">The example in <a class="sec" href="#background11">Section 2.1.2</a> above will be represented by
<ul class="listind"><li class="listind"><m:math><m:mi mathvariant="bold">A</m:mi><m:mo>=</m:mo><m:mfenced separators=""><m:mn>4</m:mn><m:mo>,</m:mo><m:mn>1</m:mn><m:mo>,</m:mo><m:mrow><m:mo>-</m:mo><m:mn>1</m:mn></m:mrow><m:mo>,</m:mo><m:mn>2</m:mn><m:mo>,</m:mo><m:mn>1</m:mn><m:mo>,</m:mo><m:mn>5</m:mn><m:mo>,</m:mo><m:mn>2</m:mn><m:mo>,</m:mo><m:mn>2</m:mn><m:mo>,</m:mo><m:mn>1</m:mn><m:mo>,</m:mo><m:mrow><m:mo>-</m:mo><m:mn>1</m:mn></m:mrow><m:mo>,</m:mo><m:mn>2</m:mn><m:mo>,</m:mo><m:mn>1</m:mn><m:mo>,</m:mo><m:mn>3</m:mn><m:mo>,</m:mo><m:mn>1</m:mn><m:mo>,</m:mo><m:mrow><m:mo>-</m:mo><m:mn>1</m:mn></m:mrow><m:mo>,</m:mo><m:mn>1</m:mn><m:mo>,</m:mo><m:mn>4</m:mn><m:mo>,</m:mo><m:mn>2</m:mn><m:mo>,</m:mo><m:mrow><m:mo>-</m:mo><m:mn>1</m:mn></m:mrow><m:mo>,</m:mo><m:mn>3</m:mn></m:mfenced></m:math></li><li class="listind"><m:math><m:mi mathvariant="bold">IROWIX</m:mi><m:mo>=</m:mo><m:mfenced separators=""><m:mn>1</m:mn><m:mo>,</m:mo><m:mn>2</m:mn><m:mo>,</m:mo><m:mn>5</m:mn><m:mo>,</m:mo><m:mn>6</m:mn><m:mo>,</m:mo><m:mn>1</m:mn><m:mo>,</m:mo><m:mn>2</m:mn><m:mo>,</m:mo><m:mn>4</m:mn><m:mo>,</m:mo><m:mn>3</m:mn><m:mo>,</m:mo><m:mn>4</m:mn><m:mo>,</m:mo><m:mn>6</m:mn><m:mo>,</m:mo><m:mn>2</m:mn><m:mo>,</m:mo><m:mn>3</m:mn><m:mo>,</m:mo><m:mn>4</m:mn><m:mo>,</m:mo><m:mn>5</m:mn><m:mo>,</m:mo><m:mn>1</m:mn><m:mo>,</m:mo><m:mn>4</m:mn><m:mo>,</m:mo><m:mn>5</m:mn><m:mo>,</m:mo><m:mn>1</m:mn><m:mo>,</m:mo><m:mn>3</m:mn><m:mo>,</m:mo><m:mn>6</m:mn></m:mfenced></m:math></li><li class="listind"><m:math><m:mi mathvariant="bold">ICOLZP</m:mi><m:mo>=</m:mo><m:mfenced separators=""><m:mn>1</m:mn><m:mo>,</m:mo><m:mn>5</m:mn><m:mo>,</m:mo><m:mn>8</m:mn><m:mo>,</m:mo><m:mn>11</m:mn><m:mo>,</m:mo><m:mn>15</m:mn><m:mo>,</m:mo><m:mn>18</m:mn><m:mo>,</m:mo><m:mn>21</m:mn></m:mfenced></m:math></li></ul>
</div><h3 class="standard"><a class="sec" name="background2" id="background2"/>2.2&#160;&#160;Direct Methods</h3>
<div class="paramtext">Direct methods for the solution of the linear algebraic system

<div class="formula-eqn"><a name="eqn1" id="eqn1"/><table class="formula-eqn"><tr><td class="formula-eqn"><m:math display="block">
<m:mi>A</m:mi><m:mi>x</m:mi><m:mo>=</m:mo><m:mi>b</m:mi>
</m:math></td><td class="formula-eqn2">
      (1)
     </td></tr></table></div>

aim to determine the solution vector <m:math><m:mi>x</m:mi></m:math>&#160;in a fixed number of arithmetic operations, which is determined <span class="italic">a priori</span> by the number of unknowns. For example, an <m:math><m:mi>L</m:mi><m:mi>U</m:mi></m:math>&#160;factorization of <m:math><m:mi>A</m:mi></m:math>&#160;followed by forward and backward substitution is a direct method for <a class="eqn" href="#eqn1">(1)</a>.</div><div class="paramtext">If the matrix <m:math><m:mi>A</m:mi></m:math>&#160;is sparse it is possible to design <b>direct</b> methods which exploit the sparsity pattern and are therefore much more computationally efficient than the algorithms in <a class="chap" href="../F07/f07conts.xml">Chapter F07</a>, which in general take no account of sparsity. However, if the matrix is very large and sparse, then <b>iterative</b> methods, with an appropriate preconditioner, (see <a class="sec" href="#background3">Section 2.3</a>) may be more efficient still.</div><div class="paramtext">This chapter provides a direct <m:math><m:mi>L</m:mi><m:mi>U</m:mi></m:math>&#160;factorization method for sparse real systems. This method is based on special coding for supernodes, broadly defined as groups of consecutive columns with the same nonzero structure, which enables use of dense BLAS kernels. The algorithms contained here come from the SuperLU software suite (see <a class="ref" href="#ref726">Demmel <span class="italic">et al.</span> (1999)</a>). An important requirement of sparse <m:math><m:mi>L</m:mi><m:mi>U</m:mi></m:math>&#160;factorization is keeping the factors as sparse as possible. It is well known that certain column orderings can produce much sparser factorizations than the normal left-to-right ordering. It is well worth the effort, then, to find such column orderings since they reduce both storage requirements of the factors, the time taken to compute them and the time taken to solve the linear system. The row reorderings, demanded by partial pivoting in order to keep the factorization stable, can further complicate the choice of the column ordering, but quite good and fast algorithms have been developed to make possible a fairly reliable computation of an appropriate column ordering for any sparsity pattern. We provide one such algorithm (known in the literature as COLAMD) through one routine in the suite. Similar to the case for dense matrices, routines are provided to compute the <m:math><m:mi>L</m:mi><m:mi>U</m:mi></m:math>&#160;factorization with partial row pivoting for numerical stability, solve <a class="eqn" href="#eqn1">(1)</a> by performing the forward and backward substitutions for multiple right hand side vectors, refine the solution, minimize the backward error and estimate the forward error of the solutions, compute norms, estimate condition numbers and perform diagnostics of the factorization. For more details see <a class="sec" href="#intrecomm_4">Section 3.4</a>.</div><div class="paramtext">It is also possible to use iterative method routines in this chapter to compute a direct factorization. Such methods are available for sparse real nonsymmetric, complex non-Hermitian, real symmetric positive definite and complex Hermitian positive definite systems. Further direct methods may be found in <a class="chap" href="../F01/f01conts.xml">Chapters F01</a>, <a class="chap" href="../F04/f04conts.xml">F04</a> and <a class="chap" href="../F07/f07conts.xml">F07</a>.</div><h3 class="standard"><a class="sec" name="background3" id="background3"/>2.3&#160;&#160;Iterative Methods</h3>
<div class="paramtext">In contrast to the direct methods discussed in <a class="sec" href="#background2">Section 2.2</a>, <b>iterative</b> methods for <a class="eqn" href="#eqn1">(1)</a> approach the solution through a sequence of approximations until some user-specified termination criterion is met or until some predefined maximum number of iterations has been reached. The number of iterations required for convergence is not generally known in advance, as it depends on the accuracy required, and on the matrix <m:math><m:mi>A</m:mi></m:math>&#160;&#8211; its sparsity pattern, conditioning and eigenvalue spectrum.</div><div class="paramtext">Faster convergence can often be achieved using a <b>preconditioner</b> (see <a class="ref" href="#ref105">Golub and Van Loan (1996)</a> and <a class="ref" href="#ref572">Barrett <span class="italic">et al.</span> (1994)</a>). A preconditioner maps the original system of equations onto a different system

<div class="formula-eqn"><a name="eqne2" id="eqne2"/><table class="formula-eqn"><tr><td class="formula-eqn"><m:math display="block">
<m:mover><m:mi>A</m:mi><m:mo>-</m:mo></m:mover><m:mover><m:mi>x</m:mi><m:mo>-</m:mo></m:mover><m:mo>=</m:mo><m:mover><m:mi>b</m:mi><m:mo>-</m:mo></m:mover><m:mtext>,</m:mtext>
</m:math></td><td class="formula-eqn2">
      (2)
     </td></tr></table></div>

which hopefully exhibits better convergence characteristics. For example, the condition number of the matrix <m:math><m:mover><m:mi>A</m:mi><m:mo>-</m:mo></m:mover></m:math>&#160;may be better than that of <m:math><m:mi>A</m:mi></m:math>, or it may have eigenvalues of greater multiplicity.</div><div class="paramtext">An unsuitable preconditioner or no preconditioning at all may result in a very slow rate or lack of convergence. However, preconditioning involves a trade-off between the reduction in the number of iterations required for convergence and the additional computational costs per iteration.  Setting up a preconditioner may also involve non-negligible overheads. The application of preconditioners to real nonsymmetric, complex non-Hermitian, real symmetric and complex Hermitian systems of equations is further considered in <a class="sec" href="#background4">Sections 2.4</a> and <a class="sec" href="#background5">2.5</a>.</div><h3 class="standard"><a class="sec" name="background4" id="background4"/>2.4&#160;&#160;Iterative Methods for Real Nonsymmetric and Complex NonHermitian Linear Systems</h3>
<div class="paramtext">Many of the most effective iterative methods for the solution of <a class="eqn" href="#eqn1">(1)</a> lie in the class of non-stationary <b>Krylov subspace methods</b> (see <a class="ref" href="#ref572">Barrett <span class="italic">et al.</span> (1994)</a>). For real nonsymmetric 
and complex non-Hermitian
matrices this class includes:
<ul class="listind"><li class="listind">the restarted generalized minimum residual (RGMRES) method (see <a class="ref" href="#ref573">Saad and Schultz (1986)</a>);</li><li class="listind">the conjugate gradient squared (CGS) method (see <a class="ref" href="#ref627">Sonneveld (1989)</a>);</li><li class="listind">the polynomial stabilized bi-conjugate gradient (Bi-CGSTAB<m:math><m:mfenced separators=""><m:mi>&#8467;</m:mi></m:mfenced></m:math>) method (see <a class="ref" href="#ref628">Van der Vorst (1989)</a> and <a class="ref" href="#ref626">Sleijpen and Fokkema (1993)</a>);</li><li class="listind">the transpose-free quasi-minimal residual method (TFQMR) (see <a class="ref" href="#ref645">Freund and Nachtigal (1991)</a> and <a class="ref" href="#ref646">Freund (1993)</a>).</li></ul>
</div><div class="paramtext">Here we just give a brief overview of these algorithms as implemented in this chapter.
For full details see the routine documents for <a class="rout" href="../F11/f11bdf.xml">F11BDF</a> and <a class="rout" href="../F11/f11brf.xml">F11BRF</a>.
</div><div class="paramtext">RGMRES is based on the Arnoldi method, which explicitly generates an orthogonal basis for the Krylov subspace <m:math><m:mrow><m:mi>span</m:mi><m:mfenced open="{" close="}" separators=""><m:msup><m:mi>A</m:mi><m:mi>k</m:mi></m:msup><m:msub><m:mi>r</m:mi><m:mn>0</m:mn></m:msub></m:mfenced></m:mrow></m:math>, <m:math><m:mi>k</m:mi><m:mo>=</m:mo><m:mn>0</m:mn><m:mo>,</m:mo><m:mn>1</m:mn><m:mo>,</m:mo><m:mn>2</m:mn><m:mo>,</m:mo><m:mo>&#8230;</m:mo><m:mtext/></m:math>, where <m:math><m:msub><m:mi>r</m:mi><m:mn>0</m:mn></m:msub></m:math>&#160;is the initial residual. The solution is then expanded onto the orthogonal basis so as to minimize the residual norm. For real nonsymmetric and complex non-Hermitian matrices the generation of the basis requires a &#8216;long&#8217; recurrence relation, resulting in prohibitive computational and storage costs. RGMRES limits these costs by restarting the Arnoldi process from the latest available residual every <m:math><m:mi>m</m:mi></m:math>&#160;iterations. The value of <m:math><m:mi>m</m:mi></m:math>&#160;is chosen in advance and is fixed throughout the computation. Unfortunately, an optimum value of <m:math><m:mi>m</m:mi></m:math>&#160;cannot easily be predicted.</div><div class="paramtext">CGS is a development of the bi-conjugate gradient method where the nonsymmetric Lanczos method is applied to reduce the coefficient matrix to tridiagonal form: two bi-orthogonal sequences of vectors are generated starting from the initial residual <m:math><m:msub><m:mi>r</m:mi><m:mn>0</m:mn></m:msub></m:math>&#160;and from the <span class="italic">shadow residual</span> <m:math><m:msub><m:mover><m:mi>r</m:mi><m:mo>^</m:mo></m:mover><m:mn>0</m:mn></m:msub></m:math>&#160;corresponding to the arbitrary problem <m:math><m:msup><m:mi>A</m:mi><m:mi mathvariant="normal">H</m:mi></m:msup><m:mover><m:mi>x</m:mi><m:mo>^</m:mo></m:mover><m:mo>=</m:mo><m:mover><m:mi>b</m:mi><m:mo>^</m:mo></m:mover></m:math>, where <m:math><m:mover><m:mi>b</m:mi><m:mo>^</m:mo></m:mover></m:math>&#160;is chosen so that <m:math><m:msub><m:mi>r</m:mi><m:mn>0</m:mn></m:msub><m:mo>=</m:mo><m:msub><m:mover><m:mi>r</m:mi><m:mo>^</m:mo></m:mover><m:mn>0</m:mn></m:msub></m:math>. In the course of the iteration, the residual and shadow residual <m:math><m:msub><m:mi>r</m:mi><m:mi>i</m:mi></m:msub><m:mo>=</m:mo><m:msub><m:mi>P</m:mi><m:mi>i</m:mi></m:msub><m:mfenced separators=""><m:mi>A</m:mi></m:mfenced><m:msub><m:mi>r</m:mi><m:mn>0</m:mn></m:msub></m:math>&#160;and <m:math><m:msub><m:mover><m:mi>r</m:mi><m:mo>^</m:mo></m:mover><m:mi>i</m:mi></m:msub><m:mo>=</m:mo><m:msub><m:mi>P</m:mi><m:mi>i</m:mi></m:msub><m:mfenced separators=""><m:msup><m:mi>A</m:mi><m:mi mathvariant="normal">H</m:mi></m:msup></m:mfenced><m:msub><m:mover><m:mi>r</m:mi><m:mo>^</m:mo></m:mover><m:mn>0</m:mn></m:msub></m:math>&#160;are generated, where <m:math><m:msub><m:mi>P</m:mi><m:mi>i</m:mi></m:msub></m:math>&#160;is a polynomial of order <m:math><m:mi>i</m:mi></m:math>, and bi-orthogonality is exploited by computing the vector product 
<m:math>
 <m:msub>
 <m:mi>&#961;</m:mi>
 <m:mi>i</m:mi>
 </m:msub>
 <m:mo>=</m:mo>
 <m:mfenced separators=""><m:msub>
   <m:mover>
    <m:mi>r</m:mi>
   <m:mo>^</m:mo></m:mover>
   <m:mi>i</m:mi>
  </m:msub><m:mo>,</m:mo><m:msub>
   <m:mi>r</m:mi>
   <m:mi>i</m:mi>
  </m:msub></m:mfenced>
 <m:mo>=</m:mo>
 <m:mfenced separators="">
  <m:mrow>
   <m:msub><m:mi>P</m:mi><m:mi>i</m:mi></m:msub>
   <m:mfenced separators="">
    <m:msup><m:mi>A</m:mi><m:mi mathvariant="normal">H</m:mi></m:msup>
   </m:mfenced>
   <m:msub>
    <m:mover>
     <m:mi>r</m:mi>
    <m:mo>^</m:mo></m:mover>
    <m:mn>0</m:mn>
   </m:msub>
  </m:mrow>
  <m:msub>
   <m:mi>P</m:mi>
   <m:mi>i</m:mi>
  </m:msub>
  <m:mfenced separators="">
   <m:mi>A</m:mi>
  </m:mfenced>
  <m:msub>
   <m:mi>r</m:mi>
   <m:mn>0</m:mn>
  </m:msub>
 </m:mfenced>
 <m:mo>=</m:mo>
 <m:mfenced separators=""><m:msub>
   <m:mover>
    <m:mi>r</m:mi>
   <m:mo>^</m:mo></m:mover>
   <m:mn>0</m:mn>
  </m:msub><m:mo>,</m:mo><m:mrow>
   <m:msubsup>
    <m:mi>P</m:mi>
    <m:mi>i</m:mi>
    <m:mn>2</m:mn>
   </m:msubsup>
   <m:mfenced separators="">
    <m:mi>A</m:mi>
   </m:mfenced>
   <m:msub>
    <m:mi>r</m:mi>
    <m:mn>0</m:mn>
   </m:msub>
  </m:mrow></m:mfenced>
</m:math>. Applying the &#8216;contraction&#8217; operator <m:math><m:msub><m:mi>P</m:mi><m:mi>i</m:mi></m:msub><m:mfenced separators=""><m:mi>A</m:mi></m:mfenced></m:math>&#160;twice, the iteration coefficients can still be recovered without advancing the solution of the shadow problem, which is of no interest. The CGS method often provides fast convergence; however, there is no reason why the contraction operator should also reduce the once reduced vector <m:math><m:msub><m:mi>P</m:mi><m:mi>i</m:mi></m:msub><m:mfenced separators=""><m:mi>A</m:mi></m:mfenced><m:msub><m:mi>r</m:mi><m:mn>0</m:mn></m:msub></m:math>: this can lead to a highly irregular convergence.</div><div class="paramtext">Bi-CGSTAB<m:math><m:mfenced separators=""><m:mi>&#8467;</m:mi></m:mfenced></m:math>&#160;is similar to the CGS method. However, instead of generating the sequence <m:math><m:mfenced open="{" close="}" separators=""><m:msubsup><m:mi>P</m:mi><m:mi>i</m:mi><m:mn>2</m:mn></m:msubsup><m:mfenced separators=""><m:mi>A</m:mi></m:mfenced><m:msub><m:mi>r</m:mi><m:mn>0</m:mn></m:msub></m:mfenced></m:math>, it generates the sequence <m:math><m:mfenced open="{" close="}" separators=""><m:msub><m:mi>Q</m:mi><m:mi>i</m:mi></m:msub><m:mfenced separators=""><m:mi>A</m:mi></m:mfenced><m:msub><m:mi>P</m:mi><m:mi>i</m:mi></m:msub><m:mfenced separators=""><m:mi>A</m:mi></m:mfenced><m:msub><m:mi>r</m:mi><m:mn>0</m:mn></m:msub></m:mfenced></m:math>&#160;where the <m:math><m:msub><m:mi>Q</m:mi><m:mi>i</m:mi></m:msub><m:mfenced separators=""><m:mi>A</m:mi></m:mfenced></m:math>&#160;are polynomials chosen to minimize the residual <span class="italic">after</span> the application of the contraction operator <m:math><m:msub><m:mi>P</m:mi><m:mi>i</m:mi></m:msub><m:mfenced separators=""><m:mi>A</m:mi></m:mfenced></m:math>. Two main steps can be identified for each iteration: an OR (Orthogonal Residuals) step where a basis of order <m:math><m:mi>&#8467;</m:mi></m:math>&#160;is generated by a Bi-CG iteration and an MR (Minimum Residuals) step where the residual is minimized over the basis generated, by a method similar to GMRES. For <m:math><m:mi>&#8467;</m:mi><m:mo>=</m:mo><m:mn>1</m:mn></m:math>, the method corresponds to the Bi-CGSTAB method of <a class="ref" href="#ref628">Van der Vorst (1989)</a>. For <m:math><m:mi>&#8467;</m:mi><m:mo>&gt;</m:mo><m:mn>1</m:mn></m:math>, more information about complex eigenvalues of the iteration matrix can be taken into account, and this may lead to improved convergence and robustness. However, as <m:math><m:mi>&#8467;</m:mi></m:math>&#160;increases, numerical instabilities may arise.</div><div class="paramtext">The transpose-free quasi-minimal residual method (TFQMR) (see <a class="ref" href="#ref645">Freund and Nachtigal (1991)</a> and <a class="ref" href="#ref646">Freund (1993)</a>) is conceptually derived from the CGS method. The residual is minimized over the space of the residual vectors generated by the CGS iterations under the simplifying assumption that residuals are almost orthogonal. In practice, this is not the case but theoretical analysis has proved the validity of the method. This has the effect of remedying the rather irregular convergence behaviour with wild oscillations in the residual norm that can degrade the numerical performance and robustness of the CGS method. In general, the TFQMR method can be expected to converge at least as fast as the CGS method, in terms of number of iterations, although each iteration involves a higher operation count. When the CGS method exhibits irregular convergence, the TFQMR method can produce much smoother, almost monotonic convergence curves. However, the close relationship between the CGS and TFQMR method implies that the <span class="italic">overall</span> speed of convergence is similar for both methods. In some cases, the TFQMR method may converge faster than the CGS method.</div><div class="paramtext">Faster convergence can usually be achieved by using a <b>preconditioner</b>. A <span class="italic">left</span> preconditioner <m:math><m:msup><m:mi>M</m:mi><m:mrow><m:mo>-</m:mo><m:mn>1</m:mn></m:mrow></m:msup></m:math>&#160;can be used by the RGMRES, CGS and TFQMR methods, such that <m:math><m:mover><m:mi>A</m:mi><m:mo>-</m:mo></m:mover><m:mo>=</m:mo><m:msup><m:mi>M</m:mi><m:mrow><m:mo>-</m:mo><m:mn>1</m:mn></m:mrow></m:msup><m:mi>A</m:mi><m:mo>&#8764;</m:mo><m:msub><m:mi>I</m:mi><m:mi>n</m:mi></m:msub></m:math>&#160;in <a class="eqn" href="#eqne2">(2)</a>, where <m:math><m:msub><m:mi>I</m:mi><m:mi>n</m:mi></m:msub></m:math>&#160;is the identity matrix of order <m:math><m:mi>n</m:mi></m:math>; a <span class="italic">right</span> preconditioner <m:math><m:msup><m:mi>M</m:mi><m:mrow><m:mo>-</m:mo><m:mn>1</m:mn></m:mrow></m:msup></m:math>&#160;can be used by the Bi-CGSTAB<m:math><m:mfenced separators=""><m:mi>&#8467;</m:mi></m:mfenced></m:math>&#160;method, such that <m:math><m:mover><m:mi>A</m:mi><m:mo>-</m:mo></m:mover><m:mo>=</m:mo><m:mi>A</m:mi><m:msup><m:mi>M</m:mi><m:mrow><m:mo>-</m:mo><m:mn>1</m:mn></m:mrow></m:msup><m:mo>&#8764;</m:mo><m:msub><m:mi>I</m:mi><m:mi>n</m:mi></m:msub></m:math>. These are formal definitions, used only in the design of the algorithms; in practice, only the means to compute the matrix-vector products <m:math><m:mi>v</m:mi><m:mo>=</m:mo><m:mi>A</m:mi><m:mi>u</m:mi></m:math>&#160;and <m:math><m:mi>v</m:mi><m:mo>=</m:mo><m:msup><m:mi>A</m:mi><m:mi mathvariant="normal">H</m:mi></m:msup><m:mi>u</m:mi></m:math>&#160;(the latter only being required when an estimate of <m:math><m:msub><m:mfenced open="&#8214;" close="&#8214;" separators=""><m:mi>A</m:mi></m:mfenced><m:mn>1</m:mn></m:msub></m:math>&#160;or <m:math><m:msub><m:mfenced open="&#8214;" close="&#8214;" separators=""><m:mi>A</m:mi></m:mfenced><m:mi>&#8734;</m:mi></m:msub></m:math>&#160;is computed internally), and to solve the preconditioning equations <m:math><m:mi>M</m:mi><m:mi>v</m:mi><m:mo>=</m:mo><m:mi>u</m:mi></m:math>&#160;are required, that is, explicit information about <m:math><m:mi>M</m:mi></m:math>, or its inverse is not required at any stage.</div><div class="paramtext">Preconditioning matrices <m:math><m:mi>M</m:mi></m:math>&#160;are typically based on incomplete factorizations (see <a class="ref" href="#ref624">Meijerink and Van der Vorst (1981)</a>), or on the approximate inverses occurring in stationary iterative methods (see <a class="ref" href="#ref582">Young (1971)</a>). A common example is the <b>incomplete <m:math><m:mi>L</m:mi><m:mi>U</m:mi></m:math>&#160;factorization</b><div class="formula"><table class="formula"><tr><td class="formula"><m:math display="block">
<m:mi>M</m:mi><m:mo>=</m:mo><m:mi>P</m:mi><m:mi>L</m:mi><m:mi>D</m:mi><m:mi>U</m:mi><m:mi>Q</m:mi><m:mo>=</m:mo><m:mi>A</m:mi><m:mo>-</m:mo><m:mi>R</m:mi>
</m:math></td><td class="formula2"/></tr></table></div>

where <m:math><m:mi>L</m:mi></m:math>&#160;is lower triangular with unit diagonal elements, <m:math><m:mi>D</m:mi></m:math>&#160;is diagonal, <m:math><m:mi>U</m:mi></m:math>&#160;is upper triangular with unit diagonals, <m:math><m:mi>P</m:mi></m:math>&#160;and <m:math><m:mi>Q</m:mi></m:math>&#160;are permutation matrices, and <m:math><m:mi>R</m:mi></m:math>&#160;is a remainder matrix. A <b>zero-fill</b> incomplete <m:math><m:mi>L</m:mi><m:mi>U</m:mi></m:math>&#160;factorization is one for which the matrix

<div class="formula"><table class="formula"><tr><td class="formula"><m:math display="block">
<m:mi>S</m:mi><m:mo>=</m:mo><m:mi>P</m:mi><m:mfenced separators=""><m:mi>L</m:mi><m:mo>+</m:mo><m:mi>D</m:mi><m:mo>+</m:mo><m:mi>U</m:mi></m:mfenced><m:mi>Q</m:mi>
</m:math></td><td class="formula2"/></tr></table></div>

has the same pattern of nonzero entries as <m:math><m:mi>A</m:mi></m:math>. This is obtained by discarding any <b>fill</b> elements (nonzero elements of <m:math><m:mi>S</m:mi></m:math>&#160;arising during the factorization in locations where <m:math><m:mi>A</m:mi></m:math>&#160;has zero elements). Allowing some of these fill elements to be kept rather than discarded generally increases the accuracy of the factorization at the expense of some loss of sparsity. For further details see <a class="ref" href="#ref572">Barrett <span class="italic">et al.</span> (1994)</a>.</div><h3 class="standard"><a class="sec" name="background5" id="background5"/>2.5&#160;&#160;Iterative Methods for Real Symmetric and Complex Hermitian Linear Systems</h3>
<div class="paramtext">Three of the best known iterative methods applicable to real symmetric and complex Hermitian linear systems are the conjugate gradient (CG) method (see <a class="ref" href="#ref576">Hestenes and Stiefel (1952)</a> and <a class="ref" href="#ref105">Golub and Van Loan (1996)</a>) and Lanczos type methods based on SYMMLQ and MINRES (see <a class="ref" href="#ref118">Paige and Saunders (1975)</a>).
The description of these methods given below is for the real symmetric cases. The generalization to complex Hermitian matrices is straightforward.
</div><div class="paramtext">For the CG method the matrix <m:math><m:mi>A</m:mi></m:math>&#160;should ideally be positive definite. The application of CG to indefinite matrices may lead to failure, or to lack of convergence. The SYMMLQ  and MINRES methods are suitable for both positive definite and indefinite symmetric matrices. They are more robust than CG, but less efficient when <m:math><m:mi>A</m:mi></m:math>&#160;is positive definite.</div><div class="paramtext">The methods start from the residual <m:math><m:msub><m:mi>r</m:mi><m:mn>0</m:mn></m:msub><m:mo>=</m:mo><m:mi>b</m:mi><m:mo>-</m:mo><m:mi>A</m:mi><m:msub><m:mi>x</m:mi><m:mn>0</m:mn></m:msub></m:math>, where <m:math><m:msub><m:mi>x</m:mi><m:mn>0</m:mn></m:msub></m:math>&#160;is an initial estimate for the solution (often <m:math><m:msub><m:mi>x</m:mi><m:mn>0</m:mn></m:msub><m:mo>=</m:mo><m:mn>0</m:mn></m:math>), and generate an orthogonal basis for the Krylov subspace <m:math><m:mrow><m:mi>span</m:mi><m:mfenced open="{" close="}" separators=""><m:msup><m:mi>A</m:mi><m:mi>k</m:mi></m:msup><m:msub><m:mi>r</m:mi><m:mn>0</m:mn></m:msub></m:mfenced></m:mrow></m:math>, for <m:math><m:mi mathvariant="italic">k</m:mi><m:mo>=</m:mo><m:mn>0</m:mn><m:mo>,</m:mo><m:mn>1</m:mn><m:mo>,</m:mo><m:mo>&#8230;</m:mo></m:math>, by means of three-term recurrence relations (see <a class="ref" href="#ref105">Golub and Van Loan (1996)</a>). A sequence of symmetric tridiagonal matrices <m:math><m:mfenced open="{" close="}" separators=""><m:msub><m:mi>T</m:mi><m:mi>k</m:mi></m:msub></m:mfenced></m:math>&#160;is also generated. Here and in the following, the index <m:math><m:mi>k</m:mi></m:math>&#160;denotes the iteration count. The resulting symmetric tridiagonal systems of equations are usually more easily solved than the original problem. A sequence of solution iterates <m:math><m:mfenced open="{" close="}" separators=""><m:msub><m:mi>x</m:mi><m:mi>k</m:mi></m:msub></m:mfenced></m:math>&#160;is thus generated such that the sequence of the norms of the residuals <m:math><m:mfenced open="{" close="}" separators=""><m:mfenced open="&#8214;" close="&#8214;" separators=""><m:msub><m:mi>r</m:mi><m:mi>k</m:mi></m:msub></m:mfenced></m:mfenced></m:math>&#160;converges to a required tolerance. Note that, in general, the convergence is not monotonic.</div><div class="paramtext">In exact arithmetic, after <m:math><m:mi>n</m:mi></m:math>&#160;iterations, this process is equivalent to an orthogonal reduction of <m:math><m:mi>A</m:mi></m:math>&#160;to symmetric tridiagonal form, <m:math><m:msub><m:mi>T</m:mi><m:mi>n</m:mi></m:msub><m:mo>=</m:mo><m:msup><m:mi>Q</m:mi><m:mi mathvariant="normal">T</m:mi></m:msup><m:mi>A</m:mi><m:mi>Q</m:mi></m:math>; the solution <m:math><m:msub><m:mi>x</m:mi><m:mi>n</m:mi></m:msub></m:math>&#160;would thus achieve exact convergence. In finite-precision arithmetic, cancellation and round-off errors accumulate causing loss of orthogonality. These methods must therefore be viewed as genuinely iterative methods, able to converge to a solution <b>within a prescribed tolerance</b>.</div><div class="paramtext">The orthogonal basis is not formed explicitly in either method. The basic difference between the methods lies in the method of solution of the resulting symmetric tridiagonal systems of equations: the CG method is equivalent to carrying out an <m:math><m:mi>L</m:mi><m:mi>D</m:mi><m:msup><m:mi>L</m:mi><m:mi mathvariant="normal">T</m:mi></m:msup></m:math>&#160;(Cholesky) factorization whereas the Lanczos method (SYMMLQ) uses an <m:math><m:mi>L</m:mi><m:mi>Q</m:mi></m:math>&#160;factorization.  The MINRES method on the other hand minimizes the residual into 2-norm.</div><div class="paramtext">A preconditioner for these methods must be <b>symmetric and positive definite</b>, i.e., representable by <m:math><m:mi>M</m:mi><m:mo>=</m:mo><m:mi>E</m:mi><m:msup><m:mi>E</m:mi><m:mi mathvariant="normal">T</m:mi></m:msup></m:math>, where <m:math><m:mi>M</m:mi></m:math>&#160;is nonsingular, and such that <m:math><m:mover><m:mi>A</m:mi><m:mo>-</m:mo></m:mover><m:mo>=</m:mo><m:msup><m:mi>E</m:mi><m:mrow><m:mo>-</m:mo><m:mn>1</m:mn></m:mrow></m:msup><m:mi>A</m:mi><m:msup><m:mi>E</m:mi><m:mrow><m:mo>-</m:mo><m:mi mathvariant="normal">T</m:mi></m:mrow></m:msup><m:mo>&#8764;</m:mo><m:msub><m:mi>I</m:mi><m:mi>n</m:mi></m:msub></m:math>&#160;in <a class="eqn" href="#eqne2">(2)</a>, where <m:math><m:msub><m:mi>I</m:mi><m:mi>n</m:mi></m:msub></m:math>&#160;is the identity matrix of order <m:math><m:mi>n</m:mi></m:math>. These are formal definitions, used only in the design of the algorithms; in practice, only the means to compute the matrix-vector products <m:math><m:mi>v</m:mi><m:mo>=</m:mo><m:mi>A</m:mi><m:mi>u</m:mi></m:math>&#160;and to solve the preconditioning equations <m:math><m:mi>M</m:mi><m:mi>v</m:mi><m:mo>=</m:mo><m:mi>u</m:mi></m:math>&#160;are required.</div><div class="paramtext">Preconditioning matrices <m:math><m:mi>M</m:mi></m:math>&#160;are typically based on incomplete factorizations (see <a class="ref" href="#ref579">Meijerink and Van der Vorst (1977)</a>), or on the approximate inverses occurring in stationary iterative methods (see <a class="ref" href="#ref582">Young (1971)</a>). A common example is the <b>incomplete Cholesky factorization</b><div class="formula"><table class="formula"><tr><td class="formula"><m:math display="block">
<m:mi>M</m:mi><m:mo>=</m:mo><m:mi>P</m:mi><m:mi>L</m:mi><m:mi>D</m:mi><m:msup><m:mi>L</m:mi><m:mi mathvariant="normal">T</m:mi></m:msup><m:msup><m:mi>P</m:mi><m:mi mathvariant="normal">T</m:mi></m:msup><m:mo>=</m:mo><m:mi>A</m:mi><m:mo>-</m:mo><m:mi>R</m:mi>
</m:math></td><td class="formula2"/></tr></table></div>

where <m:math><m:mi>P</m:mi></m:math>&#160;is a permutation matrix, <m:math><m:mi>L</m:mi></m:math>&#160;is lower triangular with unit diagonal elements, <m:math><m:mi>D</m:mi></m:math>&#160;is diagonal and <m:math><m:mi>R</m:mi></m:math>&#160;is a remainder matrix. A <b>zero-fill</b> incomplete Cholesky factorization is one for which the matrix

<div class="formula"><table class="formula"><tr><td class="formula"><m:math display="block">
<m:mi>S</m:mi><m:mo>=</m:mo><m:mi>P</m:mi><m:mfenced separators=""><m:mi>L</m:mi><m:mo>+</m:mo><m:mi>D</m:mi><m:mo>+</m:mo><m:msup><m:mi>L</m:mi><m:mi mathvariant="normal">T</m:mi></m:msup></m:mfenced><m:msup><m:mi>P</m:mi><m:mi mathvariant="normal">T</m:mi></m:msup>
</m:math></td><td class="formula2"/></tr></table></div>

has the same pattern of nonzero entries as <m:math><m:mi>A</m:mi></m:math>. This is obtained by discarding any <b>fill</b> elements (nonzero elements of <m:math><m:mi>S</m:mi></m:math>&#160;arising during the factorization in locations where <m:math><m:mi>A</m:mi></m:math>&#160;has zero elements). Allowing some of these fill elements to be kept rather than discarded generally increases the accuracy of the factorization at the expense of some loss of sparsity. For further details see <a class="ref" href="#ref572">Barrett <span class="italic">et al.</span> (1994)</a>.</div><h2 class="standard"><a class="sec" name="available" id="available"/>3&#160;&#160;Recommendations on Choice and Use of Available Routines</h2><h3 class="standard"><a class="sec" name="intrecomm_1" id="intrecomm_1"/>3.1&#160;&#160;Types of Routine Available</h3>
<div class="paramtext">The direct method routines available in this chapter largely follow the LAPACK scheme in that four different routines separately handle the tasks of factorizing, solving, refining and condition number estimating. See <a class="sec" href="#intrecomm_4">Section 3.4</a>.</div><div class="paramtext">The iterative method routines available in this chapter divide essentially into three types: basic routines, utility routines and Black Box routines.</div><div class="paramtext"><b>Basic routines</b> are grouped in suites of three, and implement the underlying iterative method. Each suite comprises a setup routine, a solver, and a routine to return additional information. The solver routine is independent of the matrix storage format (indeed the matrix need not be stored at all) and the type of preconditioner. It uses <b>reverse communication</b>, i.e., it returns repeatedly to the calling program with the parameter IREVCM set to specified values which require the calling program to carry out a specific task (either to compute a matrix-vector product or to solve the preconditioning equation), to signal the completion of the computation or to allow the calling program to monitor the solution. Reverse communication has the following advantages.
<table class="standard-100"><tr>
<td style="width:2.1em;" valign="baseline">(i)</td>
<td valign="top">Maximum flexibility in the representation and storage of sparse matrices. All matrix operations are performed outside the solver routine, thereby avoiding the need for a complicated interface with enough flexibility to cope with all types of storage schemes and sparsity patterns. This also applies to preconditioners.</td>
</tr><tr>
<td style="width:2.1em;" valign="baseline">(ii)</td>
<td valign="top">Enhanced user interaction: you can closely monitor the solution and tidy or immediate termination can be requested. This is useful, for example, when alternative termination criteria are to be employed or in case of failure of the external routines used to perform matrix operations.</td>
</tr></table>
</div><div class="paramtext">At present there are suites of basic routines for real symmetric and nonsymmetric systems, and for complex non-Hermitian systems.</div><div class="paramtext"><b>Utility routines</b> perform such tasks as initializing the preconditioning matrix <m:math><m:mi>M</m:mi></m:math>, solving linear systems involving <m:math><m:mi>M</m:mi></m:math>, or computing matrix-vector products, for particular preconditioners and matrix storage formats. Used in combination, basic routines and utility routines therefore provide iterative methods with a considerable degree of flexibility, allowing you to select from different termination criteria, monitor the approximate solution, and compute various diagnostic parameters. The tasks of computing the matrix-vector products and dealing with the preconditioner are removed from you, but at the expense of sacrificing some flexibility in the choice of preconditioner and matrix storage format.</div><div class="paramtext"><b>Black Box</b> routines call basic and utility routines in order to provide easy-to-use routines for particular preconditioners and sparse matrix storage formats. They are much less flexible than the basic routines, but do not use reverse communication, and may be suitable in many simple cases.</div><div class="paramtext">The structure of this chapter has been designed to cater for as many types of application as possible. If a Black Box routine exists which is suitable for a given application you are recommended to use it. If you then decide you need some additional flexibility it is easy to achieve this by using basic and utility routines which reproduce the algorithm used in the Black Box, but allow more access to algorithmic control parameters and monitoring. If you wish to use a preconditioner or storage format for which no utility routines are provided, you must call basic routines, and provide your own utility routines.</div><h3 class="standard"><a class="sec" name="intrecomm_2" id="intrecomm_2"/>3.2&#160;&#160;Iterative Methods for Real Nonsymmetric and Complex NonHermitian Linear Systems</h3>
<div class="paramtext">The suite of basic routines <a class="rout" href="../F11/f11bdf.xml">F11BDF</a>, <a class="rout" href="../F11/f11bef.xml">F11BEF</a> and <a class="rout" href="../F11/f11bff.xml">F11BFF</a> implements either RGMRES, CGS, Bi-CGSTAB<m:math><m:mfenced separators=""><m:mi>&#8467;</m:mi></m:mfenced></m:math>, or TFQMR, for the iterative solution of the real sparse nonsymmetric linear system <m:math><m:mi>A</m:mi><m:mi>x</m:mi><m:mo>=</m:mo><m:mi>b</m:mi></m:math>. These routines allow a choice of termination criteria and the norms used in them, allow monitoring of the approximate solution, and can return estimates of the norm of <m:math><m:mi>A</m:mi></m:math>&#160;and the largest singular value of the preconditioned matrix <m:math><m:mover><m:mi>A</m:mi><m:mo>-</m:mo></m:mover></m:math>.</div><div class="paramtext">In general, it is not possible to recommend one of these methods  in preference to another. RGMRES is popular, but requires the most storage, and can easily stagnate when the size <m:math><m:mi>m</m:mi></m:math>&#160;of the orthogonal basis is too small, or the preconditioner is not good enough. CGS can be the fastest method, but the computed residuals can exhibit instability which may greatly affect the convergence and quality of the solution. Bi-CGSTAB<m:math><m:mfenced separators=""><m:mi>&#8467;</m:mi></m:mfenced></m:math>&#160;seems robust and reliable, but it can be slower than the other methods. TFQMR can be viewed as a more robust variant of the CGS method: it shares the CGS method speed but avoids the CGS fluctuations in the residual, which may give, rise to instability. Some further discussion of the relative merits of these methods can be found in <a class="ref" href="#ref572">Barrett <span class="italic">et al.</span> (1994)</a>.</div><div class="paramtext">The utility routines provided for real nonsymmetric matrices use the coordinate storage (CS) format described in <a class="sec" href="#background10">Section 2.1.1</a>. <a class="rout" href="../F11/f11daf.xml">F11DAF</a> computes a preconditioning matrix based on incomplete <m:math><m:mi>L</m:mi><m:mi>U</m:mi></m:math>&#160;factorization, and <a class="rout" href="../F11/f11dbf.xml">F11DBF</a> solves linear systems involving the preconditioner generated by <a class="rout" href="../F11/f11daf.xml">F11DAF</a>. The amount of fill-in occurring in the incomplete factorization can be controlled by specifying either the level of fill, or the drop tolerance. Partial or complete pivoting may optionally be employed, and the factorization can be modified to preserve row-sums.</div><div class="paramtext"><a class="rout" href="../F11/f11ddf.xml">F11DDF</a> is similar to <a class="rout" href="../F11/f11dbf.xml">F11DBF</a>, but solves linear systems involving the preconditioner corresponding to symmetric successive-over-relaxation (SSOR). The value of the relaxation parameter <m:math><m:mi>&#969;</m:mi></m:math>&#160;must currently be supplied by you. Automatic procedures for choosing <m:math><m:mi>&#969;</m:mi></m:math>&#160;will be included in the chapter at a future mark.</div><div class="paramtext"><a class="rout" href="../F11/f11dkf.xml">F11DKF</a> applies the iterated Jacobi method to a system of linear equations and can be used as a preconditioner. However, the domain of validity of the Jacobi method is rather restricted; you should read the routine document for <a class="rout" href="../F11/f11dkf.xml">F11DKF</a> before using it.</div><div class="paramtext"><a class="rout" href="../F11/f11xaf.xml">F11XAF</a> computes matrix-vector products for real nonsymmetric matrices stored in ordered CS format. An additional utility routine <a class="rout" href="../F11/f11zaf.xml">F11ZAF</a> orders the nonzero elements of a real sparse nonsymmetric matrix stored in general CS format.</div><div class="paramtext">The Black Box routine <a class="rout" href="../F11/f11dcf.xml">F11DCF</a> makes calls to <a class="rout" href="../F11/f11bdf.xml">F11BDF</a>, <a class="rout" href="../F11/f11bef.xml">F11BEF</a>, <a class="rout" href="../F11/f11bff.xml">F11BFF</a>, <a class="rout" href="../F11/f11dbf.xml">F11DBF</a> and <a class="rout" href="../F11/f11xaf.xml">F11XAF</a>, to solve a real sparse nonsymmetric linear system, represented in CS format, using RGMRES, CGS, Bi-CGSTAB<m:math><m:mfenced separators=""><m:mi>&#8467;</m:mi></m:mfenced></m:math>, or TFQMR, with incomplete <m:math><m:mi>L</m:mi><m:mi>U</m:mi></m:math>&#160;preconditioning. <a class="rout" href="../F11/f11def.xml">F11DEF</a> is similar, but has options for no preconditioning, Jacobi preconditioning or SSOR preconditioning.</div><div class="paramtext">For complex non-Hermitian sparse matrices there is an equivalent suite of routines. <a class="rout" href="../F11/f11brf.xml">F11BRF</a>, <a class="rout" href="../F11/f11bsf.xml">F11BSF</a> and <a class="rout" href="../F11/f11btf.xml">F11BTF</a> are the basic routines which implement the same methods used for real nonsymmetric systems, namely RGMRES, CGS, Bi-CGSTAB<m:math><m:mfenced separators=""><m:mi>&#8467;</m:mi></m:mfenced></m:math>&#160;and TFQMR, for the solution of complex sparse non-Hermitian linear systems. <a class="rout" href="../F11/f11dnf.xml">F11DNF</a> and <a class="rout" href="../F11/f11dpf.xml">F11DPF</a> are the complex equivalents of <a class="rout" href="../F11/f11daf.xml">F11DAF</a> and <a class="rout" href="../F11/f11dbf.xml">F11DBF</a>, respectively, providing facilities for implementing ILU preconditioning. <a class="rout" href="../F11/f11drf.xml">F11DRF</a> implements a complex version of the SSOR preconditioner. <a class="rout" href="../F11/f11dxf.xml">F11DXF</a> implements a complex version of the iterated Jacobi preconditioner. Utility routines <a class="rout" href="../F11/f11xnf.xml">F11XNF</a> and <a class="rout" href="../F11/f11znf.xml">F11ZNF</a> are provided for computing matrix-vector products and sorting the elements of complex sparse non-Hermitian matrices, respectively. Finally, the Black Box routines <a class="rout" href="../F11/f11dqf.xml">F11DQF</a> and <a class="rout" href="../F11/f11dsf.xml">F11DSF</a> are complex equivalents of <a class="rout" href="../F11/f11dcf.xml">F11DCF</a> and <a class="rout" href="../F11/f11def.xml">F11DEF</a>.</div><h3 class="standard"><a class="sec" name="intrecomm_3" id="intrecomm_3"/>3.3&#160;&#160;Iterative Methods for Real Symmetric and Complex Hermitian Linear Systems</h3>
<div class="paramtext">The suite of basic routines <a class="rout" href="../F11/f11gdf.xml">F11GDF</a>, <a class="rout" href="../F11/f11gef.xml">F11GEF</a> and <a class="rout" href="../F11/f11gff.xml">F11GFF</a> implement either the conjugate gradient (CG) method, or a Lanczos method based on SYMMLQ, for the iterative solution of the real sparse symmetric linear system <m:math><m:mi>A</m:mi><m:mi>x</m:mi><m:mo>=</m:mo><m:mi>b</m:mi></m:math>. If <m:math><m:mi>A</m:mi></m:math>&#160;is known to be positive definite the CG method should be chosen; the Lanczos method is more robust but less efficient for positive definite matrices. These routines allow a choice of termination criteria and the norms used in them, allow monitoring of the approximate solution, and can return estimates of the norm of <m:math><m:mi>A</m:mi></m:math>&#160;and the largest singular value of the preconditioned matrix <m:math><m:mover><m:mi>A</m:mi><m:mo>-</m:mo></m:mover></m:math>.</div><div class="paramtext">The utility routines provided for real symmetric matrices use the symmetric coordinate storage (SCS) format described in <a class="sec" href="#background11">Section 2.1.2</a>. <a class="rout" href="../F11/f11jaf.xml">F11JAF</a> computes a preconditioning matrix based on incomplete Cholesky factorization, and <a class="rout" href="../F11/f11jbf.xml">F11JBF</a> solves linear systems involving the preconditioner generated by <a class="rout" href="../F11/f11jaf.xml">F11JAF</a>. The amount of fill-in occurring in the incomplete factorization can be controlled by specifying either the level of fill, or the drop tolerance. Diagonal Markowitz pivoting may optionally be employed, and the factorization can be modified to preserve row-sums.</div><div class="paramtext"><a class="rout" href="../F11/f11jdf.xml">F11JDF</a> is similar to <a class="rout" href="../F11/f11jbf.xml">F11JBF</a>, but solves linear systems involving the preconditioner corresponding to symmetric successive-over-relaxation (SSOR). The value of the relaxation parameter <m:math><m:mi>&#969;</m:mi></m:math>&#160;must currently be supplied by you. Automatic procedures for choosing <m:math><m:mi>&#969;</m:mi></m:math>&#160;will be included in the chapter at a future mark.</div><div class="paramtext"><a class="rout" href="../F11/f11dkf.xml">F11DKF</a> applies the iterated Jacobi method to a system of linear equations and can be used as a preconditioner. However, the domain of validity of the Jacobi method is rather restricted; you should read the routine document for <a class="rout" href="../F11/f11dkf.xml">F11DKF</a> before using it.</div><div class="paramtext"><a class="rout" href="../F11/f11xef.xml">F11XEF</a> computes matrix-vector products for real symmetric matrices stored in ordered SCS format. An additional utility routine <a class="rout" href="../F11/f11zbf.xml">F11ZBF</a> orders the nonzero elements of a real sparse symmetric matrix stored in general SCS format.</div><div class="paramtext">The Black Box routine <a class="rout" href="../F11/f11jcf.xml">F11JCF</a> makes calls to <a class="rout" href="../F11/f11gdf.xml">F11GDF</a>, <a class="rout" href="../F11/f11gef.xml">F11GEF</a>, <a class="rout" href="../F11/f11gff.xml">F11GFF</a>, <a class="rout" href="../F11/f11jbf.xml">F11JBF</a> and <a class="rout" href="../F11/f11xef.xml">F11XEF</a>, to solve  a real sparse symmetric linear system, represented in SCS format, using a conjugate gradient or Lanczos method, with incomplete Cholesky preconditioning. <a class="rout" href="../F11/f11jef.xml">F11JEF</a> is similar, but has options for no preconditioning, Jacobi preconditioning or SSOR preconditioning.</div><div class="paramtext">For complex Hermitian sparse matrices there is an equivalent suite of routines. <a class="rout" href="../F11/f11grf.xml">F11GRF</a>, <a class="rout" href="../F11/f11gsf.xml">F11GSF</a> and <a class="rout" href="../F11/f11gtf.xml">F11GTF</a> are the basic routines which implement the same methods used for real symmetric systems, namely CG and SYMMLQ, for the solution of complex sparse Hermitian linear systems. <a class="rout" href="../F11/f11jnf.xml">F11JNF</a> and <a class="rout" href="../F11/f11jpf.xml">F11JPF</a> are the complex equivalents of <a class="rout" href="../F11/f11jaf.xml">F11JAF</a> and <a class="rout" href="../F11/f11jbf.xml">F11JBF</a>, respectively, providing facilities for implementing incomplete Cholesky preconditioning. <a class="rout" href="../F11/f11jrf.xml">F11JRF</a> implements a complex version of the SSOR preconditioner. <a class="rout" href="../F11/f11dxf.xml">F11DXF</a> implements a complex version of the iterated Jacobi preconditioner. Utility routines <a class="rout" href="../F11/f11xsf.xml">F11XSF</a> and <a class="rout" href="../F11/f11zpf.xml">F11ZPF</a> are provided for computing matrix-vector products and sorting the elements of complex sparse Hermitian matrices, respectively. Finally, the Black Box routines <a class="rout" href="../F11/f11jqf.xml">F11JQF</a> and <a class="rout" href="../F11/f11jsf.xml">F11JSF</a> provide easy-to-use implementations of the CG and SYMMLQ methods for complex Hermitian linear systems.</div><h3 class="standard"><a class="sec" name="intrecomm_4" id="intrecomm_4"/>3.4&#160;&#160;Direct Methods</h3>
<div class="paramtext">The suite of routines <a class="rout" href="../F11/f11mdf.xml">F11MDF</a>, <a class="rout" href="../F11/f11mef.xml">F11MEF</a>, <a class="rout" href="../F11/f11mff.xml">F11MFF</a>, <a class="rout" href="../F11/f11mgf.xml">F11MGF</a>, <a class="rout" href="../F11/f11mhf.xml">F11MHF</a>, <a class="rout" href="../F11/f11mkf.xml">F11MKF</a>, <a class="rout" href="../F11/f11mlf.xml">F11MLF</a> and <a class="rout" href="../F11/f11mmf.xml">F11MMF</a> implement the COLAMD/SuperLU direct real sparse solver and associated utilities. You are expected to first call <a class="rout" href="../F11/f11mdf.xml">F11MDF</a> to compute a suitable column permutation for the subsequent factorization by <a class="rout" href="../F11/f11mef.xml">F11MEF</a>. <a class="rout" href="../F11/f11mff.xml">F11MFF</a> then solves the system of equations. A solution can be further refined by <a class="rout" href="../F11/f11mhf.xml">F11MHF</a>, which also minimizes the backward error and estimates a bound for the forward error in the solution. Diagnostics are provided by <a class="rout" href="../F11/f11mgf.xml">F11MGF</a> which computes an estimate of the condition number of the matrix using the factorization output by <a class="rout" href="../F11/f11mef.xml">F11MEF</a>, and <a class="rout" href="../F11/f11mmf.xml">F11MMF</a> which computes the reciprocal pivot growth (a numerical stability measure) of the factorization. The two utility routines, <a class="rout" href="../F11/f11mkf.xml">F11MKF</a>, which computes matrix-matrix products in the particular storage scheme demanded by the suite, and <a class="rout" href="../F11/f11mlf.xml">F11MLF</a> which computes quantities relating to norms of a matrix in that particular storage scheme, complete the suite.</div><div class="paramtext">Another way of computing a direct solution is to choose specific parameters for the indirect solvers. For example, routine <a class="rout" href="../F11/f11dbf.xml">F11DBF</a> solves a linear system involving the incomplete <m:math><m:mi>L</m:mi><m:mi>U</m:mi></m:math>&#160;preconditioning matrix

<div class="formula"><table class="formula"><tr><td class="formula"><m:math display="block">
<m:mi>M</m:mi><m:mo>=</m:mo><m:mi>P</m:mi><m:mi>L</m:mi><m:mi>D</m:mi><m:mi>U</m:mi><m:mi>Q</m:mi><m:mo>=</m:mo><m:mi>A</m:mi><m:mo>-</m:mo><m:mi>R</m:mi>
</m:math></td><td class="formula2"/></tr></table></div>

generated by <a class="rout" href="../F11/f11daf.xml">F11DAF</a>, where <m:math><m:mi>P</m:mi></m:math>&#160;and <m:math><m:mi>Q</m:mi></m:math>&#160;are permutation matrices, <m:math><m:mi>L</m:mi></m:math>&#160;is lower triangular with unit diagonal elements, <m:math><m:mi>U</m:mi></m:math>&#160;is upper triangular with unit diagonal elements, <m:math><m:mi>D</m:mi></m:math>&#160;is diagonal and <m:math><m:mi>R</m:mi></m:math>&#160;is a remainder matrix.</div><div class="paramtext">If <m:math><m:mi>A</m:mi></m:math>&#160;is nonsingular, a call to <a class="rout" href="../F11/f11daf.xml">F11DAF</a> with <m:math><m:mi mathvariant="bold">LFILL</m:mi><m:mo>&lt;</m:mo><m:mn>0</m:mn></m:math>&#160;and <m:math><m:mi mathvariant="bold">DTOL</m:mi><m:mo>=</m:mo><m:mn>0.0</m:mn></m:math>&#160;results in a zero remainder matrix <m:math><m:mi>R</m:mi></m:math>&#160;and a <b>complete</b> factorization. A subsequent call to <a class="rout" href="../F11/f11dbf.xml">F11DBF</a> will therefore result in a direct method for real sparse nonsymmetric systems.</div><div class="paramtext">If <m:math><m:mi>A</m:mi></m:math>&#160;is known to be symmetric positive definite, <a class="rout" href="../F11/f11jaf.xml">F11JAF</a> and <a class="rout" href="../F11/f11jbf.xml">F11JBF</a> may similarly be used to give a direct solution. For further details see <a class="sec" href="../F11/f11jaf.xml#fcomments4">Section 8.4</a> in F11JAF.</div><div class="paramtext">Complex non-Hermitian systems can be solved directly in the same way using <a class="rout" href="../F11/f11dnf.xml">F11DNF</a> and <a class="rout" href="../F11/f11dpf.xml">F11DPF</a>, while for complex Hermitian systems <a class="rout" href="../F11/f11jnf.xml">F11JNF</a> and <a class="rout" href="../F11/f11jpf.xml">F11JPF</a> may be used.</div><div class="paramtext">Some other routines specifically designed for direct solution of sparse linear systems can currently be found in <a class="chap" href="../F01/f01conts.xml">Chapters F01</a>, <a class="chap" href="../F04/f04conts.xml">F04</a> and <a class="chap" href="../F07/f07conts.xml">F07</a>. In particular, the following routines allow the direct solution of nonsymmetric systems:
<div class="left-tablediv"><table class="frame-none">
  
  
  <tbody>
   <tr>
    <td class="libdoc" valign="top" align="left" style="width:13.5em;">Almost block-diagonal</td>
    <td class="libdoc" valign="top" align="left" style="width:33em;"><a class="rout" href="../F01/f01lhf.xml">F01LHF</a> and <a class="rout" href="../F04/f04lhf.xml">F04LHF</a></td>
   </tr><tr>
    <td class="libdoc" valign="top" align="left" style="width:13.5em;">Sparse</td>
    <td class="libdoc" valign="top" align="left" style="width:33em;"><a class="rout" href="../F01/f01brf.xml">F01BRF</a> (or <a class="rout" href="../F01/f01bsf.xml">F01BSF</a>)  and <a class="rout" href="../F04/f04axf.xml">F04AXF</a></td>
   </tr>
  </tbody>
 </table></div>
and the following routines allow the direct solution of symmetric positive definite systems:
<div class="left-tablediv"><table class="frame-none">
  
  
  <tbody>
   <tr>
    <td class="libdoc" valign="top" align="left" style="width:13.5em;">Variable band (skyline)</td>
    <td class="libdoc" valign="top" align="left" style="width:33em;"><a class="rout" href="../F01/f01mcf.xml">F01MCF</a> and <a class="rout" href="../F04/f04mcf.xml">F04MCF</a></td>
   </tr>
  </tbody>
 </table></div>
</div><div class="paramtext">Routines for the solution of band and tridiagonal systems can be found in <a class="chap" href="../F04/f04conts.xml">Chapters F04</a> and <a class="chap" href="../F07/f07conts.xml">F07</a>.</div><h2 class="standard"><a class="sec" name="dtree" id="dtree"/>4&#160;&#160;Decision Tree</h2>
<h3 class="sec"><a name="tree1" id="tree1"/>Tree 1: Solvers</h3>
<table class="dtree">
<tr>
<td class="dtentry">Do you have a real system and want to use a direct method?</td>
<td class="dtnobar">_<br/>yes</td>
<td class="dtentry"><a class="rout" href="../F11/f11mdf.xml">F11MDF</a>, <a class="rout" href="../F11/f11mef.xml">F11MEF</a> and <a class="rout" href="../F11/f11mff.xml">F11MFF</a></td></tr>
<tr>
<td class="dtnobar">no<br/>|</td>
<td/></tr>
<tr>
<td class="dtentry">Do you want to use your own storage scheme or preconditioner?</td>
<td class="dtnobar">_<br/>yes</td>
<td class="dtentry">complex system?</td>
<td class="dtnobar">_<br/>yes</td>
<td class="dtentry">Hermitian?</td>
<td class="dtnobar">_<br/>yes</td>
<td class="dtentry"><a class="rout" href="../F11/f11grf.xml">F11GRF</a>, <a class="rout" href="../F11/f11gsf.xml">F11GSF</a> and <a class="rout" href="../F11/f11gtf.xml">F11GTF</a></td></tr>
<tr>
<td class="dtnobar">|</td>
<td/>
<td class="dtnobar">|</td>
<td/>
<td class="dtnobar">no<br/>|</td>
<td/></tr>
<tr><td class="dtnobar">|</td>
<td/><td class="dtnobar">|</td>
<td/>
<td class="dtentry"><a class="rout" href="../F11/f11brf.xml">F11BRF</a>, <a class="rout" href="../F11/f11bsf.xml">F11BSF</a> and <a class="rout" href="../F11/f11btf.xml">F11BTF</a></td></tr>
<tr>
<td class="dtnobar">|</td>
<td/>
<td class="dtnobar">no<br/>|</td>
<td/></tr>
<tr><td class="dtnobar">|</td>
<td/>
<td class="dtentry">symmetric?</td>
<td class="dtnobar">_<br/>yes</td>
<td class="dtentry"><a class="rout" href="../F11/f11gdf.xml">F11GDF</a>, <a class="rout" href="../F11/f11gef.xml">F11GEF</a> and <a class="rout" href="../F11/f11gff.xml">F11GFF</a></td></tr>
<tr>
<td class="dtnobar">|</td>
<td/>
<td class="dtnobar">no<br/>|</td>
<td/></tr>
<tr><td class="dtnobar">|</td>
<td/>
<td class="dtentry"><a class="rout" href="../F11/f11bdf.xml">F11BDF</a>, <a class="rout" href="../F11/f11bef.xml">F11BEF</a> and <a class="rout" href="../F11/f11bff.xml">F11BFF</a></td></tr>
<tr>
<td class="dtnobar">no<br/>|</td>
<td/></tr>
<tr>
<td class="dtentry">complex system?</td>
<td class="dtnobar">_<br/>yes</td>
<td class="dtentry">Hermitian positive definite?</td>
<td class="dtnobar">_<br/>yes</td>
<td class="dtentry">Incomplete Cholesky preconditioner?</td>
<td class="dtnobar">_<br/>yes</td>
<td class="dtentry"><a class="rout" href="../F11/f11jnf.xml">F11JNF</a> and <a class="rout" href="../F11/f11jpf.xml">F11JPF</a></td></tr>
<tr>
<td class="dtnobar">|</td>
<td/>
<td class="dtnobar">|</td>
<td/>
<td class="dtnobar">no<br/>|</td>
<td/></tr>
<tr><td class="dtnobar">|</td>
<td/><td class="dtnobar">|</td>
<td/>
<td class="dtentry"><a class="rout" href="../F11/f11jsf.xml">F11JSF</a></td></tr>
<tr>
<td class="dtnobar">|</td>
<td/>
<td class="dtnobar">no<br/>|</td>
<td/></tr>
<tr><td class="dtnobar">|</td>
<td/>
<td class="dtentry">Incomplete <m:math><m:mi>L</m:mi><m:mi>U</m:mi></m:math>&#160;preconditioner?</td>
<td class="dtnobar">_<br/>yes</td>
<td class="dtentry"><a class="rout" href="../F11/f11dnf.xml">F11DNF</a> and <a class="rout" href="../F11/f11dqf.xml">F11DQF</a></td></tr>
<tr>
<td class="dtnobar">|</td>
<td/>
<td class="dtnobar">no<br/>|</td>
<td/></tr>
<tr><td class="dtnobar">|</td>
<td/>
<td class="dtentry"><a class="rout" href="../F11/f11dsf.xml">F11DSF</a></td></tr>
<tr>
<td class="dtnobar">no<br/>|</td>
<td/></tr>
<tr>
<td class="dtentry">symmetric positive definite?</td>
<td class="dtnobar">_<br/>yes</td>
<td class="dtentry">Incomplete Cholesky preconditioner?</td>
<td class="dtnobar">_<br/>yes</td>
<td class="dtentry"><a class="rout" href="../F11/f11jaf.xml">F11JAF</a> and <a class="rout" href="../F11/f11jcf.xml">F11JCF</a></td></tr>
<tr>
<td class="dtnobar">|</td>
<td/>
<td class="dtnobar">no<br/>|</td>
<td/></tr>
<tr><td class="dtnobar">|</td>
<td/>
<td class="dtentry"><a class="rout" href="../F11/f11jef.xml">F11JEF</a></td></tr>
<tr>
<td class="dtnobar">no<br/>|</td>
<td/></tr>
<tr>
<td class="dtentry">Incomplete <m:math><m:mi>L</m:mi><m:mi>U</m:mi></m:math>&#160;preconditioner?</td>
<td class="dtnobar">_<br/>yes</td>
<td class="dtentry"><a class="rout" href="../F11/f11daf.xml">F11DAF</a> and <a class="rout" href="../F11/f11dcf.xml">F11DCF</a></td></tr>
<tr>
<td class="dtnobar">no<br/>|</td>
<td/></tr>
<tr>
<td class="dtentry"><a class="rout" href="../F11/f11def.xml">F11DEF</a></td></tr></table><h2 class="standard"><a class="sec" name="index" id="index"/>5&#160;&#160;Functionality Index</h2>
<div>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>Apply&#160;iterative&#160;refinement&#160;to&#160;the&#160;solution&#160;and&#160;compute&#160;error&#160;estimates,&#160;after&#160;factorizing&#160;the&#160;matrix&#160;of&#160;coefficients,</nobr></td><td>&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr/></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;real&#160;sparse&#160;nonsymmetric&#160;matrix&#160;in&#160;CCS&#160;format</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F11/f11mhf.xml">F11MHF</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>Basic&#160;routines&#160;for&#160;complex&#160;Hermitian&#160;linear&#160;systems,</nobr></td><td>&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr/></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;diagnostic&#160;routine</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F11/f11gtf.xml">F11GTF</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;setup&#160;routine</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F11/f11grf.xml">F11GRF</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>Basic&#160;routines&#160;for&#160;complex&#160;non-Hermitian&#160;linear&#160;systems,</nobr></td><td>&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr/></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;diagnostic&#160;routine</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F11/f11btf.xml">F11BTF</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;reverse&#160;communication&#160;RGMRES,&#160;CGS,&#160;Bi-CGSTAB<span><span>(<i>&#8467;</i>)</span></span>&#160;or TFQMR solver routine</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F11/f11bsf.xml">F11BSF</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;setup&#160;routine</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F11/f11brf.xml">F11BRF</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>Basic&#160;routines&#160;for&#160;real&#160;nonsymmetric&#160;linear&#160;systems,</nobr></td><td>&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr/></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;diagnostic&#160;routine</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F11/f11bff.xml">F11BFF</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;reverse&#160;communication&#160;RGMRES,&#160;CGS,&#160;Bi-CGSTAB<span><span>(<i>&#8467;</i>)</span></span>&#160;or TFQMR solver routine</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F11/f11bef.xml">F11BEF</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;setup&#160;routine</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F11/f11bdf.xml">F11BDF</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>Basic&#160;routines&#160;for&#160;real&#160;sparse&#160;nonsymmetric&#160;linear&#160;systems</nobr></td><td>&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr/></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;Matrix-matrix&#160;multiplier&#160;for&#160;real&#160;sparse&#160;nonsymmetric&#160;matrices&#160;in&#160;CCS&#160;format</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F11/f11mkf.xml">F11MKF</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>Basic&#160;routines&#160;for&#160;real&#160;symmetric&#160;linear&#160;systems,</nobr></td><td>&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr/></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;diagnostic&#160;routine</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F11/f11gff.xml">F11GFF</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;reverse&#160;communication&#160;CG&#160;or&#160;SYMMLQ&#160;solver</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F11/f11gef.xml">F11GEF</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;setup&#160;routine</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F11/f11gdf.xml">F11GDF</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>Black&#160;Box&#160;routines&#160;for&#160;complex&#160;Hermitian&#160;linear&#160;systems,</nobr></td><td>&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr/></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;CG&#160;or&#160;SYMMLQ&#160;solver</nobr></td><td>&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr/></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;with&#160;incomplete&#160;Cholesky&#160;preconditioning</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F11/f11jqf.xml">F11JQF</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;with&#160;no&#160;preconditioning,&#160;Jacobi&#160;or&#160;SSOR&#160;preconditioning</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F11/f11jsf.xml">F11JSF</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>Black&#160;Box&#160;routines&#160;for&#160;complex&#160;non-Hermitian&#160;linear&#160;systems,</nobr></td><td>&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr/></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;RGMRES,&#160;CGS,&#160;Bi-CGSTAB<span><span>(<i>&#8467;</i>)</span></span>&#160;or TFQMR solver</nobr></td><td>&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr/></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;with&#160;incomplete&#160;<span><i>L</i><i>U</i></span>&#160;preconditioning</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F11/f11dqf.xml">F11DQF</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;with&#160;no&#160;preconditioning,&#160;Jacobi,&#160;or&#160;SSOR&#160;preconditioning</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F11/f11dsf.xml">F11DSF</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>Black&#160;Box&#160;routines&#160;for&#160;real&#160;nonsymmetric&#160;linear&#160;systems,</nobr></td><td>&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr/></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;RGMRES,&#160;CGS,&#160;Bi-CGSTAB<span><span>(<i>&#8467;</i>)</span></span>&#160;or TFQMR solver</nobr></td><td>&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr/></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;with&#160;incomplete&#160;<span><i>L</i><i>U</i></span>&#160;preconditioning</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F11/f11dcf.xml">F11DCF</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;with&#160;no&#160;preconditioning,&#160;Jacobi,&#160;or&#160;SSOR&#160;preconditioning</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F11/f11def.xml">F11DEF</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>Black&#160;Box&#160;routines&#160;for&#160;real&#160;symmetric&#160;linear&#160;systems,</nobr></td><td>&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr/></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;CG&#160;or&#160;SYMMLQ&#160;solver</nobr></td><td>&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr/></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;with&#160;incomplete&#160;Cholesky&#160;preconditioning</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F11/f11jcf.xml">F11JCF</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;with&#160;no&#160;preconditioning,&#160;Jacobi,&#160;or&#160;SSOR&#160;preconditioning</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F11/f11jef.xml">F11JEF</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>Compute&#160;a&#160;norm&#160;or&#160;the&#160;element&#160;of&#160;largest&#160;absolute&#160;value,</nobr></td><td>&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr/></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;real&#160;sparse&#160;nonsymmetric&#160;matrix&#160;in&#160;CCS&#160;format</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F11/f11mlf.xml">F11MLF</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>Condition&#160;number&#160;estimation,&#160;after&#160;factorizing&#160;the&#160;matrix&#160;of&#160;coefficients,</nobr></td><td>&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr/></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;real&#160;sparse&#160;nonsymmetric&#160;matrix&#160;in&#160;CCS&#160;format</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F11/f11mgf.xml">F11MGF</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr><span><i>L</i><i>U</i></span>&#160;factorization,</nobr></td><td>&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr/></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;diagnostic&#160;routine,</nobr></td><td>&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr/></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;real&#160;sparse&#160;nonsymmetric&#160;matrix&#160;in&#160;CCS&#160;format</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F11/f11mmf.xml">F11MMF</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;real&#160;sparse&#160;nonsymmetric&#160;matrix&#160;in&#160;CCS&#160;format</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F11/f11mef.xml">F11MEF</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;setup&#160;routine,</nobr></td><td>&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr/></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;real&#160;sparse&#160;nonsymmetric&#160;matrices&#160;in&#160;CCS&#160;format</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F11/f11mdf.xml">F11MDF</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>matrix-vector&#160;multiplier&#160;for&#160;complex&#160;Hermitian&#160;matrices&#160;in&#160;SCS&#160;format</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F11/f11xsf.xml">F11XSF</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>reverse&#160;communication&#160;CG&#160;or&#160;SYMMLQ&#160;solver&#160;routine</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F11/f11gsf.xml">F11GSF</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>Solution&#160;of&#160;simultaneous&#160;linear&#160;equations,&#160;after&#160;factorizing&#160;the&#160;matrix&#160;of&#160;coefficients,</nobr></td><td>&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr/></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;real&#160;sparse&#160;nonsymmetric&#160;matrix&#160;in&#160;CCS&#160;format</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F11/f11mff.xml">F11MFF</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>Utility&#160;routine&#160;for&#160;complex&#160;Hermitian&#160;linear&#160;systems,</nobr></td><td>&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr/></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;incomplete&#160;Cholesky&#160;factorization</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F11/f11jnf.xml">F11JNF</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;solver&#160;for&#160;linear&#160;systems&#160;involving&#160;preconditioning&#160;matrix&#160;from&#160;<a class="rout" href="../F11/f11jnf.xml">F11JNF</a></nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F11/f11jpf.xml">F11JPF</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;solver&#160;for&#160;linear&#160;systems&#160;involving&#160;SSOR&#160;preconditioning&#160;matrix</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F11/f11jrf.xml">F11JRF</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;sort&#160;routine&#160;for&#160;complex&#160;Hermitian&#160;matrices&#160;in&#160;SCS&#160;format</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F11/f11zpf.xml">F11ZPF</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>Utility&#160;routine&#160;for&#160;complex&#160;non-Hermitian&#160;linear&#160;systems,</nobr></td><td>&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr/></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;incomplete&#160;<span><i>L</i><i>U</i></span>&#160;factorization</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F11/f11dnf.xml">F11DNF</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;matrix-vector&#160;multiplier&#160;for&#160;complex&#160;non-Hermitian&#160;matrices&#160;in&#160;CS&#160;format</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F11/f11xnf.xml">F11XNF</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;solver&#160;for&#160;linear&#160;systems&#160;involving&#160;iterated&#160;Jacobi&#160;method</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F11/f11dxf.xml">F11DXF</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;solver&#160;for&#160;linear&#160;systems&#160;involving&#160;preconditioning&#160;matrix&#160;from&#160;<a class="rout" href="../F11/f11dnf.xml">F11DNF</a></nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F11/f11dpf.xml">F11DPF</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;solver&#160;for&#160;linear&#160;systems&#160;involving&#160;SSOR&#160;preconditioning&#160;matrix</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F11/f11drf.xml">F11DRF</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;sort&#160;routine&#160;for&#160;complex&#160;non-Hermitian&#160;matrices&#160;in&#160;CS&#160;format</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F11/f11znf.xml">F11ZNF</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>Utility&#160;routine&#160;for&#160;real&#160;nonsymmetric&#160;linear&#160;systems,</nobr></td><td>&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr/></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;incomplete&#160;<span><i>L</i><i>U</i></span>&#160;factorization</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F11/f11daf.xml">F11DAF</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;matrix-vector&#160;multiplier&#160;for&#160;real&#160;nonsymmetric&#160;matrices&#160;in&#160;CS&#160;format</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F11/f11xaf.xml">F11XAF</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;solver&#160;for&#160;linear&#160;systems&#160;involving&#160;iterated&#160;Jacobi&#160;method</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F11/f11dkf.xml">F11DKF</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;solver&#160;for&#160;linear&#160;systems&#160;involving&#160;preconditioning&#160;matrix&#160;from&#160;<a class="rout" href="../F11/f11daf.xml">F11DAF</a></nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F11/f11dbf.xml">F11DBF</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;solver&#160;for&#160;linear&#160;systems&#160;involving&#160;SSOR&#160;preconditioning&#160;matrix</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F11/f11ddf.xml">F11DDF</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;sort&#160;routine&#160;for&#160;real&#160;nonsymmetric&#160;matrices&#160;in&#160;CS&#160;format</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F11/f11zaf.xml">F11ZAF</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>Utility&#160;routine&#160;for&#160;real&#160;symmetric&#160;linear&#160;systems,</nobr></td><td>&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr/></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;incomplete&#160;Cholesky&#160;factorization</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F11/f11jaf.xml">F11JAF</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;matrix-vector&#160;multiplier&#160;for&#160;real&#160;symmetric&#160;matrices&#160;in&#160;SCS&#160;format</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F11/f11xef.xml">F11XEF</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;solver&#160;for&#160;linear&#160;systems&#160;involving&#160;preconditioning&#160;matrix&#160;from&#160;<a class="rout" href="../F11/f11jaf.xml">F11JAF</a></nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F11/f11jbf.xml">F11JBF</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;solver&#160;for&#160;linear&#160;systems&#160;involving&#160;SSOR&#160;preconditioning&#160;matrix</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F11/f11jdf.xml">F11JDF</a></nobr></td></tr></table>
<table style="width:95%"><tr><td style="width:1pt; white-space: no-wrap;"><nobr>&#160;&#160;&#160;&#160;sort&#160;routine&#160;for&#160;real&#160;symmetric&#160;matrices&#160;in&#160;SCS&#160;format</nobr></td><td style="border-bottom: 0.1em dotted black;">&#160;</td><td style="width: 1pt; white-space: no-wrap;"><nobr><a class="rout" href="../F11/f11zbf.xml">F11ZBF</a></nobr></td></tr></table></div><h2 class="standard"><a class="sec" name="auxindex" id="auxindex"/>6&#160;&#160;Auxiliary Routines Associated with Library Routine Parameters</h2>
<div class="paramtext">None.</div><h2 class="standard"><a class="sec" name="withdrawn" id="withdrawn"/>7&#160;&#160;Routines Withdrawn or Scheduled for Withdrawal</h2>
<div class="left-tablediv"><table class="wdrn"><tbody>
<tr><td class="libdoc" valign="top"><b>Withdrawn<br/>Routine</b></td><td class="libdoc" valign="top" align="center"><b>Mark of<br/>Withdrawal</b></td><td class="libdoc" valign="top"><br/><b>Replacement Routine(s)</b></td></tr>
<tr><td class="libdoc" valign="top"><a class="wdrn" href="../GENINT/replace.xml#F11BAF">F11BAF</a></td><td class="libdoc" valign="top" align="center">21</td><td class="libdoc" valign="top"><a class="rout" href="../F11/f11bdf.xml">F11BDF</a></td></tr>
<tr><td class="libdoc" valign="top"><a class="wdrn" href="../GENINT/replace.xml#F11BBF">F11BBF</a></td><td class="libdoc" valign="top" align="center">21</td><td class="libdoc" valign="top"><a class="rout" href="../F11/f11bef.xml">F11BEF</a></td></tr>
<tr><td class="libdoc" valign="top"><a class="wdrn" href="../GENINT/replace.xml#F11BCF">F11BCF</a></td><td class="libdoc" valign="top" align="center">21</td><td class="libdoc" valign="top"><a class="rout" href="../F11/f11bff.xml">F11BFF</a></td></tr>
<tr><td class="libdoc" valign="top"><a class="wdrn" href="../GENINT/replace.xml#F11GAF">F11GAF</a></td><td class="libdoc" valign="top" align="center">22</td><td class="libdoc" valign="top"><a class="rout" href="../F11/f11gdf.xml">F11GDF</a></td></tr>
<tr><td class="libdoc" valign="top"><a class="wdrn" href="../GENINT/replace.xml#F11GBF">F11GBF</a></td><td class="libdoc" valign="top" align="center">22</td><td class="libdoc" valign="top"><a class="rout" href="../F11/f11gef.xml">F11GEF</a></td></tr>
<tr><td class="libdoc" valign="top"><a class="wdrn" href="../GENINT/replace.xml#F11GCF">F11GCF</a></td><td class="libdoc" valign="top" align="center">22</td><td class="libdoc" valign="top"><a class="rout" href="../F11/f11gff.xml">F11GFF</a></td></tr></tbody></table></div><h2 class="standard"><a class="sec" name="references" id="references"/>8&#160;&#160;References</h2><div class="paramtext"><a name="ref572" id="ref572"/>Barrett R, Berry M, Chan T F, Demmel J, Donato J, Dongarra J, Eijkhout V, Pozo R, Romine C and Van der Vorst H (1994)  <i>Templates for the Solution of Linear Systems: Building Blocks for Iterative Methods</i> SIAM, Philadelphia </div>
<div class="paramtext"><a name="ref726" id="ref726"/>Demmel J W, Eisenstat S C, Gilbert J R, Li X S and Li J W H (1999)  A supernodal approach to sparse partial pivoting <i>SIAM J. Matrix Anal. Appl. </i> <b>20</b> 720&#8211;755 </div>
<div class="paramtext"><a name="ref583" id="ref583"/>Duff I S, Erisman A M and Reid J K (1986)  <i>Direct Methods for Sparse Matrices</i> Oxford University Press, London </div>
<div class="paramtext"><a name="ref646" id="ref646"/>Freund R W (1993)  A transpose-free quasi-minimal residual algorithm for non-Hermitian linear systems <i>SIAM J. Sci. Comput.</i> <b>14</b> 470&#8211;482 </div>
<div class="paramtext"><a name="ref645" id="ref645"/>Freund R W and Nachtigal N (1991)  QMR: a Quasi-Minimal Residual Method for Non-Hermitian Linear Systems <i>Numer. Math.</i> <b>60</b> 315&#8211;339 </div>
<div class="paramtext"><a name="ref105" id="ref105"/>Golub G H and Van Loan C F (1996)  <i>Matrix Computations</i> (3rd Edition) Johns Hopkins University Press, Baltimore </div>
<div class="paramtext"><a name="ref576" id="ref576"/>Hestenes M and Stiefel E (1952)  Methods of conjugate gradients for solving linear systems <i>J. Res. Nat. Bur. Stand.</i> <b>49</b> 409&#8211;436 </div>
<div class="paramtext"><a name="ref579" id="ref579"/>Meijerink J and Van der Vorst H (1977)  An iterative solution method for linear systems of which the coefficient matrix is a symmetric M-matrix <i>Math. Comput.</i> <b>31</b> 148&#8211;162 </div>
<div class="paramtext"><a name="ref624" id="ref624"/>Meijerink J and Van der Vorst H (1981)  Guidelines for the usage of incomplete decompositions in solving sets of linear equations as they occur in practical problems <i>J. Comput. Phys.</i> <b>44</b> 134&#8211;155 </div>
<div class="paramtext"><a name="ref118" id="ref118"/>Paige C C and Saunders M A (1975)  Solution of sparse indefinite systems of linear equations <i>SIAM J. Numer. Anal.</i> <b>12</b> 617&#8211;629 </div>
<div class="paramtext"><a name="ref573" id="ref573"/>Saad Y and Schultz M (1986)  GMRES: a generalized minimal residual algorithm for solving nonsymmetric linear systems <i>SIAM J. Sci. Statist. Comput.</i> <b>7</b> 856&#8211;869 </div>
<div class="paramtext"><a name="ref626" id="ref626"/>Sleijpen G L G and Fokkema D R (1993)  BiCGSTAB<m:math><m:mfenced separators=""><m:mi>&#8467;</m:mi></m:mfenced></m:math>&#160;for linear equations involving matrices with complex spectrum <i>ETNA</i> <b>1</b> 11&#8211;32 </div>
<div class="paramtext"><a name="ref627" id="ref627"/>Sonneveld P (1989)  CGS, a fast Lanczos-type solver for nonsymmetric linear systems  <i>SIAM J. Sci. Statist. Comput.</i> <b>10</b> 36&#8211;52 </div>
<div class="paramtext"><a name="ref628" id="ref628"/>Van der Vorst H (1989)  Bi-CGSTAB, a fast and smoothly converging variant of Bi-CG for the solution of nonsymmetric linear systems <i>SIAM J. Sci. Statist. Comput.</i> <b>13</b> 631&#8211;644 </div>
<div class="paramtext"><a name="ref582" id="ref582"/>Young D (1971)  <i>Iterative Solution of Large Linear Systems</i> Academic Press, New York </div><hr/><div><a class="chap" href="f11conts.xml">F11 Chapter Contents</a></div><div><a class="chapint" href="../../pdf/F11/f11intro.pdf">F11 Chapter Introduction (PDF version)</a></div>
<div><a class="htmltoc" href="../FRONTMATTER/manconts.xml">NAG Library Manual</a></div>
<div><hr/><a class="genint" href="../FRONTMATTER/copyright.xml">&#169; The Numerical Algorithms Group Ltd, Oxford, UK. 2011</a></div></body></html>