<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
    "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
<meta http-equiv="Content-Type" content="application/xhtml+xml; charset=UTF-8" />
<meta name="generator" content="AsciiDoc 9.1.0" />
<title>LAPACK 3.10.0</title>
<style type="text/css">
/* Shared CSS for AsciiDoc xhtml11 and html5 backends */

/* Default font. */
body {
  font-family: Georgia,serif;
}

/* Title font. */
h1, h2, h3, h4, h5, h6,
div.title, caption.title,
thead, p.table.header,
#toctitle,
#author, #revnumber, #revdate, #revremark,
#footer {
  font-family: Arial,Helvetica,sans-serif;
}

body {
  margin: 1em 5% 1em 5%;
}

a {
  color: blue;
  text-decoration: underline;
}
a:visited {
  color: fuchsia;
}

em {
  font-style: italic;
  color: navy;
}

strong {
  font-weight: bold;
  color: #083194;
}

h1, h2, h3, h4, h5, h6 {
  color: #527bbd;
  margin-top: 1.2em;
  margin-bottom: 0.5em;
  line-height: 1.3;
}

h1, h2, h3 {
  border-bottom: 2px solid silver;
}
h2 {
  padding-top: 0.5em;
}
h3 {
  float: left;
}
h3 + * {
  clear: left;
}
h5 {
  font-size: 1.0em;
}

div.sectionbody {
  margin-left: 0;
}

hr {
  border: 1px solid silver;
}

p {
  margin-top: 0.5em;
  margin-bottom: 0.5em;
}

ul, ol, li > p {
  margin-top: 0;
}
ul > li     { color: #aaa; }
ul > li > * { color: black; }

.monospaced, code, pre {
  font-family: "Courier New", Courier, monospace;
  font-size: inherit;
  color: navy;
  padding: 0;
  margin: 0;
}
pre {
  white-space: pre-wrap;
}

#author {
  color: #527bbd;
  font-weight: bold;
  font-size: 1.1em;
}
#email {
}
#revnumber, #revdate, #revremark {
}

#footer {
  font-size: small;
  border-top: 2px solid silver;
  padding-top: 0.5em;
  margin-top: 4.0em;
}
#footer-text {
  float: left;
  padding-bottom: 0.5em;
}
#footer-badges {
  float: right;
  padding-bottom: 0.5em;
}

#preamble {
  margin-top: 1.5em;
  margin-bottom: 1.5em;
}
div.imageblock, div.exampleblock, div.verseblock,
div.quoteblock, div.literalblock, div.listingblock, div.sidebarblock,
div.admonitionblock {
  margin-top: 1.0em;
  margin-bottom: 1.5em;
}
div.admonitionblock {
  margin-top: 2.0em;
  margin-bottom: 2.0em;
  margin-right: 10%;
  color: #606060;
}

div.content { /* Block element content. */
  padding: 0;
}

/* Block element titles. */
div.title, caption.title {
  color: #527bbd;
  font-weight: bold;
  text-align: left;
  margin-top: 1.0em;
  margin-bottom: 0.5em;
}
div.title + * {
  margin-top: 0;
}

td div.title:first-child {
  margin-top: 0.0em;
}
div.content div.title:first-child {
  margin-top: 0.0em;
}
div.content + div.title {
  margin-top: 0.0em;
}

div.sidebarblock > div.content {
  background: #ffffee;
  border: 1px solid #dddddd;
  border-left: 4px solid #f0f0f0;
  padding: 0.5em;
}

div.listingblock > div.content {
  border: 1px solid #dddddd;
  border-left: 5px solid #f0f0f0;
  background: #f8f8f8;
  padding: 0.5em;
}

div.quoteblock, div.verseblock {
  padding-left: 1.0em;
  margin-left: 1.0em;
  margin-right: 10%;
  border-left: 5px solid #f0f0f0;
  color: #888;
}

div.quoteblock > div.attribution {
  padding-top: 0.5em;
  text-align: right;
}

div.verseblock > pre.content {
  font-family: inherit;
  font-size: inherit;
}
div.verseblock > div.attribution {
  padding-top: 0.75em;
  text-align: left;
}
/* DEPRECATED: Pre version 8.2.7 verse style literal block. */
div.verseblock + div.attribution {
  text-align: left;
}

div.admonitionblock .icon {
  vertical-align: top;
  font-size: 1.1em;
  font-weight: bold;
  text-decoration: underline;
  color: #527bbd;
  padding-right: 0.5em;
}
div.admonitionblock td.content {
  padding-left: 0.5em;
  border-left: 3px solid #dddddd;
}

div.exampleblock > div.content {
  border-left: 3px solid #dddddd;
  padding-left: 0.5em;
}

div.imageblock div.content { padding-left: 0; }
span.image img { border-style: none; vertical-align: text-bottom; }
a.image:visited { color: white; }

dl {
  margin-top: 0.8em;
  margin-bottom: 0.8em;
}
dt {
  margin-top: 0.5em;
  margin-bottom: 0;
  font-style: normal;
  color: navy;
}
dd > *:first-child {
  margin-top: 0.1em;
}

ul, ol {
    list-style-position: outside;
}
ol.arabic {
  list-style-type: decimal;
}
ol.loweralpha {
  list-style-type: lower-alpha;
}
ol.upperalpha {
  list-style-type: upper-alpha;
}
ol.lowerroman {
  list-style-type: lower-roman;
}
ol.upperroman {
  list-style-type: upper-roman;
}

div.compact ul, div.compact ol,
div.compact p, div.compact p,
div.compact div, div.compact div {
  margin-top: 0.1em;
  margin-bottom: 0.1em;
}

tfoot {
  font-weight: bold;
}
td > div.verse {
  white-space: pre;
}

div.hdlist {
  margin-top: 0.8em;
  margin-bottom: 0.8em;
}
div.hdlist tr {
  padding-bottom: 15px;
}
dt.hdlist1.strong, td.hdlist1.strong {
  font-weight: bold;
}
td.hdlist1 {
  vertical-align: top;
  font-style: normal;
  padding-right: 0.8em;
  color: navy;
}
td.hdlist2 {
  vertical-align: top;
}
div.hdlist.compact tr {
  margin: 0;
  padding-bottom: 0;
}

.comment {
  background: yellow;
}

.footnote, .footnoteref {
  font-size: 0.8em;
}

span.footnote, span.footnoteref {
  vertical-align: super;
}

#footnotes {
  margin: 20px 0 20px 0;
  padding: 7px 0 0 0;
}

#footnotes div.footnote {
  margin: 0 0 5px 0;
}

#footnotes hr {
  border: none;
  border-top: 1px solid silver;
  height: 1px;
  text-align: left;
  margin-left: 0;
  width: 20%;
  min-width: 100px;
}

div.colist td {
  padding-right: 0.5em;
  padding-bottom: 0.3em;
  vertical-align: top;
}
div.colist td img {
  margin-top: 0.3em;
}

@media print {
  #footer-badges { display: none; }
}

#toc {
  margin-bottom: 2.5em;
}

#toctitle {
  color: #527bbd;
  font-size: 1.1em;
  font-weight: bold;
  margin-top: 1.0em;
  margin-bottom: 0.1em;
}

div.toclevel0, div.toclevel1, div.toclevel2, div.toclevel3, div.toclevel4 {
  margin-top: 0;
  margin-bottom: 0;
}
div.toclevel2 {
  margin-left: 2em;
  font-size: 0.9em;
}
div.toclevel3 {
  margin-left: 4em;
  font-size: 0.9em;
}
div.toclevel4 {
  margin-left: 6em;
  font-size: 0.9em;
}

span.aqua { color: aqua; }
span.black { color: black; }
span.blue { color: blue; }
span.fuchsia { color: fuchsia; }
span.gray { color: gray; }
span.green { color: green; }
span.lime { color: lime; }
span.maroon { color: maroon; }
span.navy { color: navy; }
span.olive { color: olive; }
span.purple { color: purple; }
span.red { color: red; }
span.silver { color: silver; }
span.teal { color: teal; }
span.white { color: white; }
span.yellow { color: yellow; }

span.aqua-background { background: aqua; }
span.black-background { background: black; }
span.blue-background { background: blue; }
span.fuchsia-background { background: fuchsia; }
span.gray-background { background: gray; }
span.green-background { background: green; }
span.lime-background { background: lime; }
span.maroon-background { background: maroon; }
span.navy-background { background: navy; }
span.olive-background { background: olive; }
span.purple-background { background: purple; }
span.red-background { background: red; }
span.silver-background { background: silver; }
span.teal-background { background: teal; }
span.white-background { background: white; }
span.yellow-background { background: yellow; }

span.big { font-size: 2em; }
span.small { font-size: 0.6em; }

span.underline { text-decoration: underline; }
span.overline { text-decoration: overline; }
span.line-through { text-decoration: line-through; }

div.unbreakable { page-break-inside: avoid; }


/*
 * xhtml11 specific
 *
 * */

div.tableblock {
  margin-top: 1.0em;
  margin-bottom: 1.5em;
}
div.tableblock > table {
  border: 3px solid #527bbd;
}
thead, p.table.header {
  font-weight: bold;
  color: #527bbd;
}
p.table {
  margin-top: 0;
}
/* Because the table frame attribute is overridden by CSS in most browsers. */
div.tableblock > table[frame="void"] {
  border-style: none;
}
div.tableblock > table[frame="hsides"] {
  border-left-style: none;
  border-right-style: none;
}
div.tableblock > table[frame="vsides"] {
  border-top-style: none;
  border-bottom-style: none;
}


/*
 * html5 specific
 *
 * */

table.tableblock {
  margin-top: 1.0em;
  margin-bottom: 1.5em;
}
thead, p.tableblock.header {
  font-weight: bold;
  color: #527bbd;
}
p.tableblock {
  margin-top: 0;
}
table.tableblock {
  border-width: 3px;
  border-spacing: 0px;
  border-style: solid;
  border-color: #527bbd;
  border-collapse: collapse;
}
th.tableblock, td.tableblock {
  border-width: 1px;
  padding: 4px;
  border-style: solid;
  border-color: #527bbd;
}

table.tableblock.frame-topbot {
  border-left-style: hidden;
  border-right-style: hidden;
}
table.tableblock.frame-sides {
  border-top-style: hidden;
  border-bottom-style: hidden;
}
table.tableblock.frame-none {
  border-style: hidden;
}

th.tableblock.halign-left, td.tableblock.halign-left {
  text-align: left;
}
th.tableblock.halign-center, td.tableblock.halign-center {
  text-align: center;
}
th.tableblock.halign-right, td.tableblock.halign-right {
  text-align: right;
}

th.tableblock.valign-top, td.tableblock.valign-top {
  vertical-align: top;
}
th.tableblock.valign-middle, td.tableblock.valign-middle {
  vertical-align: middle;
}
th.tableblock.valign-bottom, td.tableblock.valign-bottom {
  vertical-align: bottom;
}


/*
 * manpage specific
 *
 * */

body.manpage h1 {
  padding-top: 0.5em;
  padding-bottom: 0.5em;
  border-top: 2px solid silver;
  border-bottom: 2px solid silver;
}
body.manpage h2 {
  border-style: none;
}
body.manpage div.sectionbody {
  margin-left: 3em;
}

@media print {
  body.manpage div#toc { display: none; }
}


</style>
<script type="text/javascript">
/*<![CDATA[*/
var asciidoc = {  // Namespace.

/////////////////////////////////////////////////////////////////////
// Table Of Contents generator
/////////////////////////////////////////////////////////////////////

/* Author: Mihai Bazon, September 2002
 * http://students.infoiasi.ro/~mishoo
 *
 * Table Of Content generator
 * Version: 0.4
 *
 * Feel free to use this script under the terms of the GNU General Public
 * License, as long as you do not remove or alter this notice.
 */

 /* modified by Troy D. Hanson, September 2006. License: GPL */
 /* modified by Stuart Rackham, 2006, 2009. License: GPL */

// toclevels = 1..4.
toc: function (toclevels) {

  function getText(el) {
    var text = "";
    for (var i = el.firstChild; i != null; i = i.nextSibling) {
      if (i.nodeType == 3 /* Node.TEXT_NODE */) // IE doesn't speak constants.
        text += i.data;
      else if (i.firstChild != null)
        text += getText(i);
    }
    return text;
  }

  function TocEntry(el, text, toclevel) {
    this.element = el;
    this.text = text;
    this.toclevel = toclevel;
  }

  function tocEntries(el, toclevels) {
    var result = new Array;
    var re = new RegExp('[hH]([1-'+(toclevels+1)+'])');
    // Function that scans the DOM tree for header elements (the DOM2
    // nodeIterator API would be a better technique but not supported by all
    // browsers).
    var iterate = function (el) {
      for (var i = el.firstChild; i != null; i = i.nextSibling) {
        if (i.nodeType == 1 /* Node.ELEMENT_NODE */) {
          var mo = re.exec(i.tagName);
          if (mo && (i.getAttribute("class") || i.getAttribute("className")) != "float") {
            result[result.length] = new TocEntry(i, getText(i), mo[1]-1);
          }
          iterate(i);
        }
      }
    }
    iterate(el);
    return result;
  }

  var toc = document.getElementById("toc");
  if (!toc) {
    return;
  }

  // Delete existing TOC entries in case we're reloading the TOC.
  var tocEntriesToRemove = [];
  var i;
  for (i = 0; i < toc.childNodes.length; i++) {
    var entry = toc.childNodes[i];
    if (entry.nodeName.toLowerCase() == 'div'
     && entry.getAttribute("class")
     && entry.getAttribute("class").match(/^toclevel/))
      tocEntriesToRemove.push(entry);
  }
  for (i = 0; i < tocEntriesToRemove.length; i++) {
    toc.removeChild(tocEntriesToRemove[i]);
  }

  // Rebuild TOC entries.
  var entries = tocEntries(document.getElementById("content"), toclevels);
  for (var i = 0; i < entries.length; ++i) {
    var entry = entries[i];
    if (entry.element.id == "")
      entry.element.id = "_toc_" + i;
    var a = document.createElement("a");
    a.href = "#" + entry.element.id;
    a.appendChild(document.createTextNode(entry.text));
    var div = document.createElement("div");
    div.appendChild(a);
    div.className = "toclevel" + entry.toclevel;
    toc.appendChild(div);
  }
  if (entries.length == 0)
    toc.parentNode.removeChild(toc);
},


/////////////////////////////////////////////////////////////////////
// Footnotes generator
/////////////////////////////////////////////////////////////////////

/* Based on footnote generation code from:
 * http://www.brandspankingnew.net/archive/2005/07/format_footnote.html
 */

footnotes: function () {
  // Delete existing footnote entries in case we're reloading the footnodes.
  var i;
  var noteholder = document.getElementById("footnotes");
  if (!noteholder) {
    return;
  }
  var entriesToRemove = [];
  for (i = 0; i < noteholder.childNodes.length; i++) {
    var entry = noteholder.childNodes[i];
    if (entry.nodeName.toLowerCase() == 'div' && entry.getAttribute("class") == "footnote")
      entriesToRemove.push(entry);
  }
  for (i = 0; i < entriesToRemove.length; i++) {
    noteholder.removeChild(entriesToRemove[i]);
  }

  // Rebuild footnote entries.
  var cont = document.getElementById("content");
  var spans = cont.getElementsByTagName("span");
  var refs = {};
  var n = 0;
  for (i=0; i<spans.length; i++) {
    if (spans[i].className == "footnote") {
      n++;
      var note = spans[i].getAttribute("data-note");
      if (!note) {
        // Use [\s\S] in place of . so multi-line matches work.
        // Because JavaScript has no s (dotall) regex flag.
        note = spans[i].innerHTML.match(/\s*\[([\s\S]*)]\s*/)[1];
        spans[i].innerHTML =
          "[<a id='_footnoteref_" + n + "' href='#_footnote_" + n +
          "' title='View footnote' class='footnote'>" + n + "</a>]";
        spans[i].setAttribute("data-note", note);
      }
      noteholder.innerHTML +=
        "<div class='footnote' id='_footnote_" + n + "'>" +
        "<a href='#_footnoteref_" + n + "' title='Return to text'>" +
        n + "</a>. " + note + "</div>";
      var id =spans[i].getAttribute("id");
      if (id != null) refs["#"+id] = n;
    }
  }
  if (n == 0)
    noteholder.parentNode.removeChild(noteholder);
  else {
    // Process footnoterefs.
    for (i=0; i<spans.length; i++) {
      if (spans[i].className == "footnoteref") {
        var href = spans[i].getElementsByTagName("a")[0].getAttribute("href");
        href = href.match(/#.*/)[0];  // Because IE return full URL.
        n = refs[href];
        spans[i].innerHTML =
          "[<a href='#_footnote_" + n +
          "' title='View footnote' class='footnote'>" + n + "</a>]";
      }
    }
  }
},

install: function(toclevels) {
  var timerId;

  function reinstall() {
    asciidoc.footnotes();
    if (toclevels) {
      asciidoc.toc(toclevels);
    }
  }

  function reinstallAndRemoveTimer() {
    clearInterval(timerId);
    reinstall();
  }

  timerId = setInterval(reinstall, 500);
  if (document.addEventListener)
    document.addEventListener("DOMContentLoaded", reinstallAndRemoveTimer, false);
  else
    window.onload = reinstallAndRemoveTimer;
}

}
asciidoc.install(2);
/*]]>*/
</script>
</head>
<body class="article">
<div id="header">
<h1>LAPACK 3.10.0</h1>
<div id="toc">
  <div id="toctitle">Table of Contents</div>
  <noscript><p><b>JavaScript must be enabled in your browser to display the table of contents.</b></p></noscript>
</div>
</div>
<div id="content">
<div id="preamble">
<div class="sectionbody">
<div class="paragraph"><p>Release date: 06/28/21.</p></div>
<div class="paragraph"><p>This material is based upon work supported by the National Science Foundation
and the Department of Energy.</p></div>
<div class="paragraph"><p>LAPACK is a software package provided by Univ. of Tennessee, Univ. of
California, Berkeley, Univ. of Colorado Denver and NAG Ltd..</p></div>
</div>
</div>
<div class="sect1">
<h2 id="_1_support_and_questions">1. Support and questions:</h2>
<div class="sectionbody">
<div class="paragraph"><p><a href="http://icl.cs.utk.edu/lapack-forum/">http://icl.cs.utk.edu/lapack-forum/</a></p></div>
<div class="paragraph"><p><a href="https://github.com/Reference-LAPACK/lapack/">https://github.com/Reference-LAPACK/lapack/</a></p></div>
</div>
</div>
<div class="sect1">
<h2 id="_2_lapack_3_10_0_what_8217_s_new">2. LAPACK 3.10.0: What&#8217;s new</h2>
<div class="sectionbody">
<div class="ulist"><ul>
<li>
<p>
Download: <a href="https://github.com/Reference-LAPACK/lapack/archive/refs/tags/v3.10.0.tar.gz">lapack-3.10.0.tar.gz</a>
</p>
</li>
</ul></div>
<div class="paragraph"><p>This is a major release and also addressing multiple bug fixes.</p></div>
</div>
</div>
<div class="sect1">
<h2 id="_2_1_safe_scaling_algorithms">2.1. Safe scaling algorithms</h2>
<div class="sectionbody">
<div class="paragraph"><p>Contribution by Ed Anderson</p></div>
<div class="literalblock">
<div class="content">
<pre><code>Added SRC/la_constants.f90
Added SRC/la_xisnan.F90</code></pre>
</div></div>
<div class="literalblock">
<div class="content">
<pre><code>Deleted BLAS/SRC/dnrm2.f      Added BLAS/SRC/dnrm2.f90
Deleted BLAS/SRC/dznrm2.f     Added BLAS/SRC/dznrm2.f90
Deleted BLAS/SRC/scnrm2.f     Added BLAS/SRC/scnrm2.f90
Deleted BLAS/SRC/snrm2.f      Added BLAS/SRC/snrm2.f90
Deleted BLAS/SRC/drotg.f      Added BLAS/SRC/drotg.f90
Deleted BLAS/SRC/zrotg.f      Added BLAS/SRC/zrotg.f90
Deleted BLAS/SRC/crotg.f      Added BLAS/SRC/crotg.f90
Deleted BLAS/SRC/srotg.f      Added BLAS/SRC/srotg.f90
Deleted SRC/dlassq.f          Added SRC/dlassq.f90
Deleted SRC/zlassq.f          Added SRC/zlassq.f90
Deleted SRC/classq.f          Added SRC/classq.f90
Deleted SRC/slassq.f          Added SRC/slassq.f90
Deleted SRC/dlartg.f          Added SRC/dlartg.f90
Deleted SRC/zlartg.f          Added SRC/zlartg.f90
Deleted SRC/clartg.f          Added SRC/clartg.f90
Deleted SRC/slartg.f          Added SRC/slartg.f90</code></pre>
</div></div>
<div class="paragraph"><p>Edward Anderson stated in his paper <a href="https://doi.org/10.1145/3061665">https://doi.org/10.1145/3061665</a>:</p></div>
<div class="paragraph"><p>The square root of a sum of squares is well known to be prone to overflow and underflow. Ad hoc scaling
of intermediate results, as has been done in numerical software such as the BLAS and LAPACK, mostly
avoids the problem, but it can still occur at extreme values in the range of representable numbers. More
careful scaling, as has been implemented in recent versions of the standard algorithms, may come at the
expense of performance or clarity. This work reimplements the vector 2-norm and the generation of Givens
rotations from the Level 1 BLAS to improve their performance and design. In addition, support for negative
increments is extended to the Level 1 BLAS operations on a single vector, and a comprehensive test suite
for all the Level 1 BLAS is included.</p></div>
<div class="paragraph"><p>This contribution replaces the original xNRM2, xROTG, xLARTG, xLASSQ routines with Edward&#8217;s safe scaling codes plus some minor modifications.</p></div>
<div class="paragraph"><p>Note: this code follows Fortran90 standard.</p></div>
<div class="ulist"><ul>
<li>
<p>
The new Fortran90 module <code>SRC/la_constants.f90</code> expands the functionality of <code>INSTALL/xLAMCH.f</code> by adding safe scaling constants.
</p>
</li>
<li>
<p>
The new Fortran90 module <code>SRC/la_xisnan.F90</code> expands the functionality of <code>SRC/xISNAN.f</code> and <code>SRC/xLAISNAN.f</code> by adding the option of using the <code>ieee_is_nan</code> routine.
</p>
</li>
</ul></div>
</div>
</div>
<div class="sect1">
<h2 id="_2_2_implementation_of_the_multishift_qz_algorithm_with_aed">2.2. Implementation of the multishift QZ algorithm with AED</h2>
<div class="sectionbody">
<div class="paragraph"><p>Contribution by <a href="https://github.com/thijssteel">thijssteel</a></p></div>
<div class="paragraph"><p>It is loosely based on my implementation of the <strong>rational QZ algorithm</strong> (<a href="https://github.com/thijssteel/multishift-multipole-rqz">https://github.com/thijssteel/multishift-multipole-rqz</a>).</p></div>
<div class="paragraph"><p>It features:</p></div>
<div class="ulist"><ul>
<li>
<p>
Agressive early deflation
</p>
</li>
<li>
<p>
Multishift QZ sweeps using optimal packing of the bulges
</p>
</li>
<li>
<p>
A new heuristic to select the number of positions in the sweep windows
</p>
</li>
</ul></div>
<div class="paragraph"><p>It does not feature:</p></div>
<div class="ulist"><ul>
<li>
<p>
A windowed deflation of infinite eigenvalues (that is only useful if many infinite eigenvalues are to be deflated and in that case you should probably do some preprocessing anyway).
</p>
</li>
</ul></div>
<div class="paragraph"><p>Also <strong>two accuracy improvements to xtgex2</strong>:</p></div>
<div class="ulist"><ul>
<li>
<p>
Daan Camps has proven in his dissertation that replacing the condition in xtgex2 when swapping 1x1 blocks can improve the accuracy. This condition and the respective error tolerances have been changed to reflect it.
</p>
</li>
<li>
<p>
Also by Daan Camps, "SWAPPING 2 × 2 BLOCKS IN THE SCHUR AND GENERALIZED SCHUR FORM", shows that the accuracy of swapping 2x2 blocks can be improved by iterative refinement and by replacing the QR factorisation with an SVD based method. Only the first improvement was implemented as the paper does not mention how to avoid overflow.
</p>
</li>
</ul></div>
</div>
</div>
<div class="sect1">
<h2 id="_2_3_householder_reconstruction">2.3 Householder Reconstruction</h2>
<div class="sectionbody">
<div class="literalblock">
<div class="content">
<pre><code>new file:   SRC/sorhr_col.f
new file:   SRC/dorhr_col.f
new file:   SRC/cunhr_col.f
new file:   SRC/zunhr_col.f
new file:   SRC/dorgtsqr.f
new file:   SRC/sorgtsqr.f</code></pre>
</div></div>
<div class="literalblock">
<div class="content">
<pre><code>new file:   SRC/dgetsqrhrt.f
new file:   SRC/dlarfb_gett.f
new file:   SRC/dorgtsqr_row.f
new file:   SRC/sgetsqrhrt.f
new file:   SRC/slarfb_gett.f
new file:   SRC/sorgtsqr_row.f
new file:   SRC/cgetsqrhrt.f
new file:   SRC/clarfb_gett.f
new file:   SRC/cungtsqr_row.f
new file:   SRC/zgetsqrhrt.f
new file:   SRC/zlarfb_gett.f
new file:   SRC/zungtsqr_row.f</code></pre>
</div></div>
<div class="paragraph"><p>GETSQRHRT is a QR factorization routine for tall-skinny matrices. It is based on LATSQR, but returns the Q and R factors in the same format as GEQRT, i.e. using  the compact WY representation of Q.</p></div>
<div class="paragraph"><p>This is the same format used by other LAPACK routines that depend on QR factorizations. GETSQRHRT uses ORGTSQR_ROW (which in turn calls LARFB_GETT) to construct an orthonormal matrix from a TSQR factorization, which is a more efficient version of ORGTSQR.</p></div>
</div>
</div>
<div class="sect1">
<h2 id="_2_4_change_in_the_return_behavior_of_gesdd">2.4 Change in the return behavior of GESDD</h2>
<div class="sectionbody">
<div class="paragraph"><p>GESDD now returns with INFO = -4 if A has a NaN entry.</p></div>
<div class="paragraph"><p>In version 3.9.0 and master, GESDD would call <code>exit(0)</code> instead of returning an error code on some matrices. See <a href="https://github.com/Reference-LAPACK/lapack/issues/469#issue-781977643">Issue #469</a></p></div>
</div>
</div>
<div class="sect1">
<h2 id="_2_5_bug_fixes">2.5 Bug fixes</h2>
<div class="sectionbody">
<div class="paragraph"><p>For details please see our Github repository</p></div>
<div class="ulist"><ul>
<li>
<p>
<a href="https://github.com/Reference-LAPACK/lapack">LAPACK Github Repository</a>
</p>
</li>
<li>
<p>
<a href="https://github.com/Reference-LAPACK/lapack/issues?q=is%3Aclosed+milestone%3A%22LAPACK+3.10.0%22">LAPACK 3.10.0 Milestone</a>
</p>
</li>
</ul></div>
</div>
</div>
<div class="sect1">
<h2 id="_2_6_notes_about_compiler_dependency">2.6 Notes about compiler dependency</h2>
<div class="sectionbody">
<div class="paragraph"><p>Some LAPACK routines rely on trustworthy complex division and ABS routines in the FORTRAN compiler.
This [link](<a href="https://github.com/Reference-LAPACK/lapack/files/6672436/complexDivisionFound.txt">https://github.com/Reference-LAPACK/lapack/files/6672436/complexDivisionFound.txt</a>) lists the LAPACK COMPLEX*16 algorithms that contain compiler dependent complex divisions of the form</p></div>
<div class="literalblock">
<div class="content">
<pre><code>REAL / COMPLEX   or   COMPLEX / COMPLEX</code></pre>
</div></div>
<div class="paragraph"><p>See <a href="https://github.com/Reference-LAPACK/lapack/issues/575">Issue #575</a> and <a href="https://github.com/Reference-LAPACK/lapack/issues/577">Issue #577</a> for a more complete discussion on this topic.</p></div>
</div>
</div>
<div class="sect1">
<h2 id="_3_developer_list">3. Developer list</h2>
<div class="sectionbody">
<div class="ulist"><div class="title">LAPACK developers involved in this release</div><ul>
<li>
<p>
Weslley da Silva Pereira (University of Colorado Denver, USA)
</p>
</li>
<li>
<p>
Julie Langou (University of Tennessee, USA)
</p>
</li>
<li>
<p>
Igor Kozachenko  (University of California,  Berkeley, USA)
</p>
</li>
</ul></div>
<div class="ulist"><div class="title">Principal Investigators</div><ul>
<li>
<p>
Jim Demmel (University of California,  Berkeley, USA)
</p>
</li>
<li>
<p>
Jack Dongarra (University of Tennessee and ORNL, USA)
</p>
</li>
<li>
<p>
Julien Langou (University of Colorado Denver, USA)
</p>
</li>
</ul></div>
</div>
</div>
<div class="sect1">
<h2 id="_4_thanks">4. Thanks</h2>
<div class="sectionbody">
<div class="ulist"><ul>
<li>
<p>
MathWorks: Penny Anderson, Amanda Barry, Mary Ann Freeman, Bobby Cheng,
Pat Quillen, Christine Tobler.
</p>
</li>
<li>
<p>
Ed Anderson
</p>
</li>
<li>
<p>
GitHub Users: <a href="https://github.com/thijssteel">thijssteel</a>, <a href="https://github.com/jip">jip</a>, <a href="https://github.com/eshpc">eshpc</a>, <a href="https://github.com/martin-frbg">martin-frbg</a>,
 <a href="https://github.com/Matthew-Badin">Matthew-Badin</a>,
 <a href="https://github.com/msk">msk</a>, <a href="https://github.com/ZTaylor39">ZTaylor39</a>,
 <a href="https://github.com/sergey-v-kuznetsov">sergey-v-kuznetsov</a>, <a href="https://github.com/5tefan">5tefan</a>
</p>
</li>
</ul></div>
<div class="paragraph"><p>Github contribution details <a href="https://github.com/Reference-LAPACK/lapack/graphs/contributors?from=2021-03-23&amp;to=2021-06-28&amp;type=c">here</a></p></div>
</div>
</div>
<div class="sect1">
<h2 id="_5_bug_fix">5.  Bug Fix</h2>
<div class="sectionbody">
<div class="ulist"><ul>
<li>
<p>
<a href="https://github.com/Reference-LAPACK/lapack/milestone/6?closed=1">Closed bugs</a>
</p>
</li>
<li>
<p>
<a href="https://github.com/Reference-LAPACK/lapack/issues?utf8=✓&amp;q=is%3Aissue%20is%3Aopen%20label%3A%22Type%3A%20Bug%22%20">Open bugs</a>
</p>
</li>
<li>
<p>
<a href="https://github.com/Reference-LAPACK/lapack/issues">All open issues</a>
</p>
</li>
</ul></div>
</div>
</div>
</div>
<div id="footnotes"><hr /></div>
<div id="footer">
<div id="footer-text">
Last updated
 2021-06-29 09:13:48 PDT
</div>
</div>
</body>
</html>
