-
Notifications
You must be signed in to change notification settings - Fork 21
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
0382cdb
commit 1f4c962
Showing
1 changed file
with
336 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,336 @@ | ||
<?xml version="1.0" encoding="utf-8" ?> | ||
<!DOCTYPE article PUBLIC "-//NLM//DTD JATS (Z39.96) Journal Publishing DTD v1.2 20190208//EN" | ||
"JATS-publishing1.dtd"> | ||
<article xmlns:mml="http://www.w3.org/1998/Math/MathML" xmlns:xlink="http://www.w3.org/1999/xlink" dtd-version="1.2" article-type="other"> | ||
<front> | ||
<journal-meta> | ||
<journal-id></journal-id> | ||
<journal-title-group> | ||
<journal-title>Journal of Open Source Software</journal-title> | ||
<abbrev-journal-title>JOSS</abbrev-journal-title> | ||
</journal-title-group> | ||
<issn publication-format="electronic">2475-9066</issn> | ||
<publisher> | ||
<publisher-name>Open Journals</publisher-name> | ||
</publisher> | ||
</journal-meta> | ||
<article-meta> | ||
<article-id pub-id-type="publisher-id">6654</article-id> | ||
<article-id pub-id-type="doi">10.21105/joss.06654</article-id> | ||
<title-group> | ||
<article-title><italic>Hypredrive</italic>: High-level interface for | ||
solving linear systems with <italic>hypre</italic></article-title> | ||
</title-group> | ||
<contrib-group> | ||
<contrib contrib-type="author"> | ||
<contrib-id contrib-id-type="orcid">https://orcid.org/0000-0002-3389-523X</contrib-id> | ||
<name> | ||
<surname>Magri</surname> | ||
<given-names>Victor A. P.</given-names> | ||
</name> | ||
<xref ref-type="aff" rid="aff-1"/> | ||
</contrib> | ||
<aff id="aff-1"> | ||
<institution-wrap> | ||
<institution>Lawrence Livermore National Laboratory, CA, | ||
USA</institution> | ||
</institution-wrap> | ||
</aff> | ||
</contrib-group> | ||
<pub-date date-type="pub" publication-format="electronic" iso-8601-date="2024-03-30"> | ||
<day>30</day> | ||
<month>3</month> | ||
<year>2024</year> | ||
</pub-date> | ||
<volume>9</volume> | ||
<issue>98</issue> | ||
<fpage>6654</fpage> | ||
<permissions> | ||
<copyright-statement>Authors of papers retain copyright and release the | ||
work under a Creative Commons Attribution 4.0 International License (CC | ||
BY 4.0)</copyright-statement> | ||
<copyright-year>2022</copyright-year> | ||
<copyright-holder>The article authors</copyright-holder> | ||
<license license-type="open-access" xlink:href="https://creativecommons.org/licenses/by/4.0/"> | ||
<license-p>Authors of papers retain copyright and release the work under | ||
a Creative Commons Attribution 4.0 International License (CC BY | ||
4.0)</license-p> | ||
</license> | ||
</permissions> | ||
<kwd-group kwd-group-type="author"> | ||
<kwd>linear solvers</kwd> | ||
<kwd>preconditioning</kwd> | ||
<kwd>algebraic multigrid</kwd> | ||
<kwd>high performance computing</kwd> | ||
</kwd-group> | ||
</article-meta> | ||
</front> | ||
<body> | ||
<sec id="summary"> | ||
<title>Summary</title> | ||
<p>Solving sparse linear systems of equations is an essential task for | ||
many application codes in computational science and engineering. | ||
Commonly used mathematical libraries for addressing these problems | ||
include, among others, | ||
<ext-link ext-link-type="uri" xlink:href="https://trilinos.github.io/index.html">trilinos</ext-link> | ||
(<xref alt="Heroux et al., 2005" rid="ref-trilinos" ref-type="bibr">Heroux | ||
et al., 2005</xref>), | ||
<ext-link ext-link-type="uri" xlink:href="https://petsc.org/">PETSc</ext-link> | ||
(<xref alt="Balay et al., 2024" rid="ref-petsc" ref-type="bibr">Balay | ||
et al., 2024</xref>) and | ||
<ext-link ext-link-type="uri" xlink:href="https://github.com/hypre-space/hypre"><italic>hypre</italic></ext-link> | ||
(<xref alt="Falgout & Yang, 2002" rid="ref-hypre" ref-type="bibr">Falgout | ||
& Yang, 2002</xref>). The first two allow for quick testing of | ||
different solution strategies through input files, a feature that | ||
<italic>hypre</italic> currently lacks. <italic>Hypredrive</italic> | ||
aims to fill this gap by providing a simple and user-friendly | ||
interface to <italic>hypre</italic>. Inspired by the solver | ||
composability support in PETSc via | ||
<ext-link ext-link-type="uri" xlink:href="https://petsc.org/main/manual/other/#the-options-database"><monospace>.petscrc</monospace> | ||
files</ext-link> and the flexible configuration framework used in | ||
spack | ||
(<xref alt="Gamblin et al., 2015" rid="ref-spack" ref-type="bibr">Gamblin | ||
et al., 2015</xref>), <italic>hypredrive</italic> allows users to | ||
easily configure and switch solver options in <italic>hypre</italic> | ||
through input files in | ||
<ext-link ext-link-type="uri" xlink:href="https://yaml.org/spec/1.2/spec.html">YAML</ext-link> | ||
format, making experimentation with different solver techniques more | ||
accessible to researchers and software developers who work with | ||
numerical simulation codes.</p> | ||
</sec> | ||
<sec id="statement-of-need"> | ||
<title>Statement of need</title> | ||
<p><italic>Hypre</italic> is a widely used and efficient linear solver | ||
package; however, the complexity associated with its direct use might | ||
limit <italic>hypre</italic> users and application developers to | ||
explore with different solver options. <italic>Hypredrive</italic> | ||
bridges this gap by providing a high-level and lightweight interface | ||
to <italic>hypre</italic>, encapsulating its complexity while | ||
retaining its capabilities with minimal computational overhead.</p> | ||
</sec> | ||
<sec id="software-capabilities"> | ||
<title>Software capabilities</title> | ||
<p><italic>Hypredrive</italic> is a software package written in C that | ||
includes a library with APIs designed to simplify the interaction with | ||
<italic>hypre</italic> and an executable driver for performing the | ||
solution of linear systems defined via YAML input files. The types of | ||
linear systems solvable with <italic>hypredrive</italic> are | ||
determined by <italic>hypre</italic>. Key features of the software | ||
are:</p> | ||
<list list-type="bullet"> | ||
<list-item> | ||
<p><bold>Encapsulation</bold>: <monospace>libHYPREDRV</monospace> | ||
wraps the function calls for building solvers and preconditioners | ||
in <italic>hypre</italic> through an intuitive YAML interface | ||
driven by configuration files. This design ensures a | ||
straightforward way of setting up solvers in | ||
<italic>hypre</italic> and sharing options without recompiling the | ||
user’s application code.</p> | ||
</list-item> | ||
<list-item> | ||
<p><bold>Prototyping</bold>: <monospace>hypredrive</monospace> | ||
allows users to prototype rapidly, comparing the performance of | ||
various solver options and tweaking parameters directly through | ||
the YAML configuration file. This flexibility encourages | ||
experimentation, helping users identify the most effective solver | ||
strategies for their specific problems.</p> | ||
</list-item> | ||
<list-item> | ||
<p><bold>Testing</bold>: <monospace>hypredrive</monospace> enables | ||
the creation of an integrated testing framework to evaluate | ||
solvers against a set of predefined linear systems. This feature | ||
lets users understand whether updates to <italic>hypre</italic> | ||
lead to different solver convergence or performance for their | ||
problems of interest.</p> | ||
</list-item> | ||
</list> | ||
</sec> | ||
<sec id="example-usage"> | ||
<title>Example usage</title> | ||
<p>As an example usage of <monospace>hypredrive</monospace>, consider | ||
the solution of a linear system arising from a seven points finite | ||
difference discretization of the Laplace equation on a | ||
<monospace>10x10x10</monospace> cartesian grid. Both sparse matrix and | ||
right hand side vector are stored at | ||
<monospace>data/ps3d10pt7/np1/</monospace>. For solving this linear | ||
system with algebraic multigrid (BoomerAMG) as a preconditioner to the | ||
conjugate gradient iterative solver, the YAML input file | ||
<monospace>input.yml</monospace> would look like:</p> | ||
<code language="yaml">linear_system: | ||
rhs_filename: data/ps3d10pt7/np1/IJ.out.b | ||
matrix_filename: data/ps3d10pt7/np1/IJ.out.A | ||
solver: pcg | ||
preconditioner: amg</code> | ||
<p>while <monospace>hypredrive</monospace> can be executed via</p> | ||
<code language="bash">$ mpirun -np 1 ./hypredrive input.yml</code> | ||
<p>yielding an output that looks like:</p> | ||
<preformat>Date and time: YYYY-MM-DD HH:MM:SS | ||
|
||
Using HYPRE_DEVELOP_STRING: HYPRE_VERSION_GOES_HERE | ||
|
||
Running on 1 MPI rank | ||
------------------------------------------------------------------------------- | ||
linear_system: | ||
rhs_filename: data/ps3d10pt7/np1/IJ.out.b | ||
matrix_filename: data/ps3d10pt7/np1/IJ.out.A | ||
solver: pcg | ||
preconditioner: amg | ||
------------------------------------------------------------------------------- | ||
=============================================================================== | ||
Solving linear system #0 with 1000 rows and 6400 nonzeros... | ||
=============================================================================== | ||
|
||
|
||
STATISTICS SUMMARY: | ||
|
||
+----------+-------------+-------------+-------------+-------------+----------+ | ||
| | LS build | setup | solve | relative | | | ||
| Entry | times | times | times | res. norm | iters | | ||
+----------+-------------+-------------+-------------+-------------+----------+ | ||
| 0 | 0.004 | 0.002 | 0.001 | 4.98e-08 | 6 | | ||
+----------+-------------+-------------+-------------+-------------+----------+ | ||
|
||
Date and time: YYYY-MM-DD HH:MM:SS | ||
${HYPREDRIVE_PATH}/hypredrive done!</preformat> | ||
<p>This example shows the minimal set of options in | ||
<monospace>hypredrive</monospace>’s input file needed for running the | ||
executable. Specific parameter/value pairs for controlling the setup | ||
of preconditioners and solvers can be added to the input file, leading | ||
to different convergence behaviors. For a complete list of available | ||
parameters and more detailed input file examples, see | ||
<ext-link ext-link-type="uri" xlink:href="https://hypredrive.readthedocs.io/en/latest/"><italic>hypredrive</italic>’s | ||
manual</ext-link>.</p> | ||
</sec> | ||
<sec id="acknowledgements"> | ||
<title>Acknowledgements</title> | ||
<p>This work was performed under the auspices of the U.S. Department | ||
of Energy by Lawrence Livermore National Laboratory under Contract | ||
DE-AC52-07NA27344 (LLNL-JRNL-865058).</p> | ||
</sec> | ||
</body> | ||
<back> | ||
<ref-list> | ||
<title></title> | ||
<ref id="ref-hypre"> | ||
<element-citation publication-type="paper-conference"> | ||
<person-group person-group-type="author"> | ||
<name><surname>Falgout</surname><given-names>Robert D.</given-names></name> | ||
<name><surname>Yang</surname><given-names>Ulrike Meier</given-names></name> | ||
</person-group> | ||
<article-title>Hypre: A library of high performance preconditioners</article-title> | ||
<source>Computational science — ICCS 2002</source> | ||
<person-group person-group-type="editor"> | ||
<name><surname>Sloot</surname><given-names>Peter M. A.</given-names></name> | ||
<name><surname>Hoekstra</surname><given-names>Alfons G.</given-names></name> | ||
<name><surname>Tan</surname><given-names>C. J. Kenneth</given-names></name> | ||
<name><surname>Dongarra</surname><given-names>Jack J.</given-names></name> | ||
</person-group> | ||
<publisher-name>Springer Berlin Heidelberg</publisher-name> | ||
<publisher-loc>Berlin, Heidelberg</publisher-loc> | ||
<year iso-8601-date="2002">2002</year> | ||
<isbn>978-3-540-47789-1</isbn> | ||
<pub-id pub-id-type="doi">10.1007/3-540-47789-6_66</pub-id> | ||
<fpage>632</fpage> | ||
<lpage>641</lpage> | ||
</element-citation> | ||
</ref> | ||
<ref id="ref-trilinos"> | ||
<element-citation publication-type="article-journal"> | ||
<person-group person-group-type="author"> | ||
<name><surname>Heroux</surname><given-names>Michael A.</given-names></name> | ||
<name><surname>Bartlett</surname><given-names>Roscoe A.</given-names></name> | ||
<name><surname>Howle</surname><given-names>Vicki E.</given-names></name> | ||
<name><surname>Hoekstra</surname><given-names>Robert J.</given-names></name> | ||
<name><surname>Hu</surname><given-names>Jonathan J.</given-names></name> | ||
<name><surname>Kolda</surname><given-names>Tamara G.</given-names></name> | ||
<name><surname>Lehoucq</surname><given-names>Richard B.</given-names></name> | ||
<name><surname>Long</surname><given-names>Kevin R.</given-names></name> | ||
<name><surname>Pawlowski</surname><given-names>Roger P.</given-names></name> | ||
<name><surname>Phipps</surname><given-names>Eric T.</given-names></name> | ||
<name><surname>Salinger</surname><given-names>Andrew G.</given-names></name> | ||
<name><surname>Thornquist</surname><given-names>Heidi K.</given-names></name> | ||
<name><surname>Tuminaro</surname><given-names>Ray S.</given-names></name> | ||
<name><surname>Willenbring</surname><given-names>James M.</given-names></name> | ||
<name><surname>Williams</surname><given-names>Alan</given-names></name> | ||
<name><surname>Stanley</surname><given-names>Kendall S.</given-names></name> | ||
</person-group> | ||
<article-title>An overview of the Trilinos project</article-title> | ||
<source>ACM Trans. Math. Softw.</source> | ||
<publisher-name>Association for Computing Machinery</publisher-name> | ||
<publisher-loc>New York, NY, USA</publisher-loc> | ||
<year iso-8601-date="2005-09">2005</year><month>09</month> | ||
<volume>31</volume> | ||
<issue>3</issue> | ||
<issn>0098-3500</issn> | ||
<uri>https://doi.org/10.1145/1089014.1089021</uri> | ||
<pub-id pub-id-type="doi">10.1145/1089014.1089021</pub-id> | ||
<fpage>397</fpage> | ||
<lpage>423</lpage> | ||
</element-citation> | ||
</ref> | ||
<ref id="ref-petsc"> | ||
<element-citation publication-type="report"> | ||
<person-group person-group-type="author"> | ||
<name><surname>Balay</surname><given-names>Satish</given-names></name> | ||
<name><surname>Abhyankar</surname><given-names>Shrirang</given-names></name> | ||
<name><surname>Adams</surname><given-names>Mark F.</given-names></name> | ||
<name><surname>Benson</surname><given-names>Steven</given-names></name> | ||
<name><surname>Brown</surname><given-names>Jed</given-names></name> | ||
<name><surname>Brune</surname><given-names>Peter</given-names></name> | ||
<name><surname>Buschelman</surname><given-names>Kris</given-names></name> | ||
<name><surname>Constantinescu</surname><given-names>Emil</given-names></name> | ||
<name><surname>Dalcin</surname><given-names>Lisandro</given-names></name> | ||
<name><surname>Dener</surname><given-names>Alp</given-names></name> | ||
<name><surname>Eijkhout</surname><given-names>Victor</given-names></name> | ||
<name><surname>Faibussowitsch</surname><given-names>Jacob</given-names></name> | ||
<name><surname>Gropp</surname><given-names>William D.</given-names></name> | ||
<name><surname>Hapla</surname><given-names>Václav</given-names></name> | ||
<name><surname>Isaac</surname><given-names>Tobin</given-names></name> | ||
<name><surname>Jolivet</surname><given-names>Pierre</given-names></name> | ||
<name><surname>Karpeev</surname><given-names>Dmitry</given-names></name> | ||
<name><surname>Kaushik</surname><given-names>Dinesh</given-names></name> | ||
<name><surname>Knepley</surname><given-names>Matthew G.</given-names></name> | ||
<name><surname>Kong</surname><given-names>Fande</given-names></name> | ||
<name><surname>Kruger</surname><given-names>Scott</given-names></name> | ||
<name><surname>May</surname><given-names>Dave A.</given-names></name> | ||
<name><surname>McInnes</surname><given-names>Lois Curfman</given-names></name> | ||
<name><surname>Mills</surname><given-names>Richard Tran</given-names></name> | ||
<name><surname>Mitchell</surname><given-names>Lawrence</given-names></name> | ||
<name><surname>Munson</surname><given-names>Todd</given-names></name> | ||
<name><surname>Roman</surname><given-names>Jose E.</given-names></name> | ||
<name><surname>Rupp</surname><given-names>Karl</given-names></name> | ||
<name><surname>Sanan</surname><given-names>Patrick</given-names></name> | ||
<name><surname>Sarich</surname><given-names>Jason</given-names></name> | ||
<name><surname>Smith</surname><given-names>Barry F.</given-names></name> | ||
<name><surname>Zampini</surname><given-names>Stefano</given-names></name> | ||
<name><surname>Zhang</surname><given-names>Hong</given-names></name> | ||
<name><surname>Zhang</surname><given-names>Hong</given-names></name> | ||
<name><surname>Zhang</surname><given-names>Junchao</given-names></name> | ||
</person-group> | ||
<article-title>PETSc/TAO users manual</article-title> | ||
<publisher-name>Argonne National Laboratory</publisher-name> | ||
<year iso-8601-date="2024">2024</year> | ||
<pub-id pub-id-type="doi">10.2172/2205494</pub-id> | ||
</element-citation> | ||
</ref> | ||
<ref id="ref-spack"> | ||
<element-citation publication-type="paper-conference"> | ||
<person-group person-group-type="author"> | ||
<name><surname>Gamblin</surname><given-names>Todd</given-names></name> | ||
<name><surname>LeGendre</surname><given-names>Matthew</given-names></name> | ||
<name><surname>Collette</surname><given-names>Michael R.</given-names></name> | ||
<name><surname>Lee</surname><given-names>Gregory L.</given-names></name> | ||
<name><surname>Moody</surname><given-names>Adam</given-names></name> | ||
<name><surname>Supinski</surname><given-names>Bronis R. de</given-names></name> | ||
<name><surname>Futral</surname><given-names>Scott</given-names></name> | ||
</person-group> | ||
<article-title>The Spack package manager: Bringing order to HPC software chaos</article-title> | ||
<publisher-loc>Austin, Texas, USA</publisher-loc> | ||
<year iso-8601-date="2015">2015</year> | ||
<uri>https://github.com/spack/spack</uri> | ||
<pub-id pub-id-type="doi">10.1145/2807591.2807623</pub-id> | ||
</element-citation> | ||
</ref> | ||
</ref-list> | ||
</back> | ||
</article> |