Files
stroid/docs/html/index.html

235 lines
18 KiB
HTML

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.13.2"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>stroid: Stroid</title>
<link rel="icon" href="Logo.png" type="image/x-icon" />
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<script type="text/javascript" src="clipboard.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="cookie.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
<link href="doxygen-awesome.css" rel="stylesheet" type="text/css"/>
<link href="doxygen-awesome-sidebar-only.css" rel="stylesheet" type="text/css"/>
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr id="projectrow">
<td id="projectlogo"><img alt="Logo" src="Logo.png"/></td>
<td id="projectalign">
<div id="projectname">stroid<span id="projectnumber">&#160;v0.1.0</span>
</div>
<div id="projectbrief">Multi-block curvilinear mesh generation</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.13.2 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "search/",'.html');
/* @license-end */
</script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() { codefold.init(0); });
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() {
initMenu('',true,false,'search.php','Search',true);
$(function() { init_search(); });
});
/* @license-end */
</script>
<div id="main-nav"></div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function(){initNavTree('index.html',''); initResizable(true); });
/* @license-end */
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<div id="MSearchResults">
<div class="SRPage">
<div id="SRIndex">
<div id="SRResults"></div>
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
</div>
</div>
</div>
</div>
<div><div class="header">
<div class="headertitle"><div class="title">Stroid </div></div>
</div><!--header-->
<div class="contents">
<div class="textblock"><p><a class="anchor" id="md_docs_2static_2mainpage"></a></p>
<h1><a class="anchor" id="autotoc_md1"></a>
A multi-block mesh generation tool for stellar modeling</h1>
<p>Stroid is a simple multi-block mesh generation tool designed to generate multi-domain meshes for 3D finite element modeling of stellar physics. It uses the MFEM library for mesh generation and manipulation and is capable of generating high-order curvilinear and non-singular meshes.</p>
<blockquote class="doxtable">
<p>Note: Stroid is under active development and is not yet stable. Features and interfaces may change in future releases. </p>
</blockquote>
<h1><a class="anchor" id="autotoc_md2"></a>
Building and Installing</h1>
<p>Stroid uses meson as its build system, specifically we require version 1.3.0 or higher. Further, stroid depends on C++23 standard library features, so both a compatible compiler and standard template library are required. All other dependencies are handled by meson and will be downloaded and built automatically.</p>
<h2><a class="anchor" id="autotoc_md3"></a>
Building</h2>
<div class="fragment"><div class="line">git clone https://github.com/4D-STAR/stroid.git</div>
<div class="line">cd stroid</div>
<div class="line">meson setup build</div>
<div class="line">meson compile -C build</div>
<div class="line">meson test -C build</div>
<div class="line">meson install -C build</div>
</div><!-- fragment --><h3><a class="anchor" id="autotoc_md4"></a>
Uninstalling</h3>
<p>To uninstall stroid, if you built it using meson and the default ninja backend, you can use the following command </p><div class="fragment"><div class="line">sudo ninja uninstall -C build</div>
</div><!-- fragment --><h2><a class="anchor" id="autotoc_md5"></a>
Running</h2>
<p>Stroid can be used either from the command line or from C++. The command line interface is the simplest way to get started. After installation, the <code>stroid generate</code> command should be available in your terminal.</p>
<div class="fragment"><div class="line">stroid generate --help</div>
</div><!-- fragment --><p>The main way to interface with this is through the subcommands (currently only <code>generate</code> and <code>info</code> are available):</p>
<div class="fragment"><div class="line">stroid generate -c &lt;path/to/config/file.toml&gt;</div>
</div><!-- fragment --><p>One can change the output format by specificing one of the avalible output formats <b>after</b> generation options</p>
<div class="fragment"><div class="line">stroid generate -c &lt;path/to/config/file.toml&gt; -o &quot;output.vtu&quot; vtu --ref 1</div>
</div><!-- fragment --><p>each output format has its own options, which can be viewed by running</p>
<div class="fragment"><div class="line">stroid generate [fmt] --help</div>
</div><!-- fragment --><p>where <code>[fmt]</code> is replaced with the desired output format (e.g. vtu, netgen, mfem, etc.). Avalible output formats are:</p>
<ul>
<li>vtu: VTK Unstructured Grid format</li>
<li>mfem: MFEM mesh format</li>
<li>netgen: Netgen mesh format</li>
<li>vtk: Legacy VTK format</li>
<li>paraview: ParaView Data collection format</li>
<li>info: Outputs mesh information to the terminal</li>
</ul>
<p>Further, mesh generation options are loaded from a toml file, a default version of this file can be saved by running </p><div class="fragment"><div class="line">stroid info -d</div>
</div><!-- fragment --><p> which will save a default config file to <code>default.toml</code></p>
<h2><a class="anchor" id="autotoc_md6"></a>
Configuration File</h2>
<p>Stroid uses a TOML configuration file to specify the parameters for mesh generation. An example configuration file is found below</p>
<div class="fragment"><div class="line">[main]</div>
<div class="line">core_steepness = 1.0</div>
<div class="line">flattening = 0.0</div>
<div class="line">include_external_domain = false</div>
<div class="line">order = 3</div>
<div class="line">r_core = 1.5</div>
<div class="line">r_infinity = 6.0</div>
<div class="line">r_instability = 1e-14</div>
<div class="line">r_star = 5.0</div>
<div class="line">refinement_levels = 4</div>
</div><!-- fragment --><table class="markdownTable">
<tr class="markdownTableHead">
<th class="markdownTableHeadNone">Parameter </th><th class="markdownTableHeadNone">Description </th><th class="markdownTableHeadNone">Default </th></tr>
<tr class="markdownTableRowOdd">
<td class="markdownTableBodyNone">refinement_levels </td><td class="markdownTableBodyNone">Number of uniform refinement levels to apply to the mesh after generation </td><td class="markdownTableBodyNone">4 </td></tr>
<tr class="markdownTableRowEven">
<td class="markdownTableBodyNone">order </td><td class="markdownTableBodyNone">The polynomial order of the finite elements in the mesh </td><td class="markdownTableBodyNone">3 </td></tr>
<tr class="markdownTableRowOdd">
<td class="markdownTableBodyNone">include_external_domain </td><td class="markdownTableBodyNone">Whether to include an external domain extending to r_infinity </td><td class="markdownTableBodyNone">false </td></tr>
<tr class="markdownTableRowEven">
<td class="markdownTableBodyNone">r_core </td><td class="markdownTableBodyNone">The radius of the core region of the star </td><td class="markdownTableBodyNone">1.5 </td></tr>
<tr class="markdownTableRowOdd">
<td class="markdownTableBodyNone">r_star </td><td class="markdownTableBodyNone">The radius of the star </td><td class="markdownTableBodyNone">5.0 </td></tr>
<tr class="markdownTableRowEven">
<td class="markdownTableBodyNone">flattening </td><td class="markdownTableBodyNone">The flattening factor of the star (0 for spherical, &gt;0 for oblate) </td><td class="markdownTableBodyNone">0 </td></tr>
<tr class="markdownTableRowOdd">
<td class="markdownTableBodyNone">r_infinity </td><td class="markdownTableBodyNone">The outer radius of the external domain (if included) </td><td class="markdownTableBodyNone">6.0 </td></tr>
<tr class="markdownTableRowEven">
<td class="markdownTableBodyNone">r_instability </td><td class="markdownTableBodyNone">The radius at which no transformations are applied to the initial topology (to avoid singularities) </td><td class="markdownTableBodyNone">1e-14 </td></tr>
<tr class="markdownTableRowOdd">
<td class="markdownTableBodyNone">core_steepness </td><td class="markdownTableBodyNone">The steepness of the transition between the core and envelope regions of the star </td><td class="markdownTableBodyNone">1.0 </td></tr>
</table>
<p>If no configuration file is provided, stroid will use the default parameters listed above. Further, configuration files need only include parameters that differ from the defaults, any parameters not specified will use the default values.</p>
<h2><a class="anchor" id="autotoc_md7"></a>
C++ Interface</h2>
<p>Stroid can be used as a library in C++ projects. After installation, include the stroid header and link against the stroid library.</p>
<p>A basic example of using stroid in C++ is shown below (note that you will need a glvis instance running on localhost:19916 to visualize the mesh): </p><div class="fragment"><div class="line"><span class="preprocessor">#include &lt;memory&gt;</span></div>
<div class="line"><span class="preprocessor">#include &quot;mfem.hpp&quot;</span></div>
<div class="line"> </div>
<div class="line"><span class="preprocessor">#include &quot;<a class="code" href="config_8h.html">stroid/config/config.h</a>&quot;</span></div>
<div class="line"><span class="preprocessor">#include &quot;<a class="code" href="mesh_8h.html">stroid/IO/mesh.h</a>&quot;</span></div>
<div class="line"><span class="preprocessor">#include &quot;<a class="code" href="curvilinear_8h.html">stroid/topology/curvilinear.h</a>&quot;</span></div>
<div class="line"><span class="preprocessor">#include &quot;<a class="code" href="topology_8h.html">stroid/topology/topology.h</a>&quot;</span></div>
<div class="line"> </div>
<div class="line"><span class="preprocessor">#include &quot;fourdst/config/config.h&quot;</span></div>
<div class="line"> </div>
<div class="line"><span class="keywordtype">int</span> main() {</div>
<div class="line"> <span class="keyword">const</span> fourdst::config::Config&lt;stroid::config::MeshConfig&gt; cfg;</div>
<div class="line"> </div>
<div class="line"> <span class="keyword">const</span> std::unique_ptr&lt;mfem::Mesh&gt; mesh = <a class="code hl_function" href="namespacestroid_1_1topology.html#abc0d8a1fb8e9c5ac0e259e4c93db7892">stroid::topology::BuildSkeleton</a>(cfg);</div>
<div class="line"> <a class="code hl_function" href="namespacestroid_1_1topology.html#a62774bcba7ea1a485892dcd4bed6425b">stroid::topology::Finalize</a>(*mesh, cfg);</div>
<div class="line"> <a class="code hl_function" href="namespacestroid_1_1topology.html#a5907aa2e639cda703d48d177abc37caf">stroid::topology::PromoteToHighOrder</a>(*mesh, cfg);</div>
<div class="line"> <a class="code hl_function" href="namespacestroid_1_1topology.html#a836ed13e5bac63e7952c3ce4e5532e78">stroid::topology::ProjectMesh</a>(*mesh, cfg);</div>
<div class="line"> </div>
<div class="line"> </div>
<div class="line"> <a class="code hl_function" href="namespacestroid_1_1_i_o.html#a496f5c16eaffda5922a0b96c1f525dab">stroid::IO::ViewMesh</a>(*mesh, <span class="stringliteral">&quot;Spheroidal Mesh&quot;</span>, <a class="code hl_enumvalue" href="namespacestroid_1_1_i_o.html#ad4048304d8a0c7075d2b2a6e465d0b6eaee96e14c2b71bd59252006289ba464cf">stroid::IO::VISUALIZATION_MODE::BOUNDARY_ELEMENT_ID</a>);</div>
<div class="line">}</div>
<div class="ttc" id="aconfig_8h_html"><div class="ttname"><a href="config_8h.html">config.h</a></div></div>
<div class="ttc" id="acurvilinear_8h_html"><div class="ttname"><a href="curvilinear_8h.html">curvilinear.h</a></div></div>
<div class="ttc" id="amesh_8h_html"><div class="ttname"><a href="mesh_8h.html">mesh.h</a></div></div>
<div class="ttc" id="anamespacestroid_1_1_i_o_html_a496f5c16eaffda5922a0b96c1f525dab"><div class="ttname"><a href="namespacestroid_1_1_i_o.html#a496f5c16eaffda5922a0b96c1f525dab">stroid::IO::ViewMesh</a></div><div class="ttdeci">void ViewMesh(mfem::Mesh &amp;mesh, const std::string &amp;title, VISUALIZATION_MODE mode, const std::string &amp;vishost, int visport)</div><div class="ttdoc">Stream a mesh to a running GLVis server for interactive viewing.</div><div class="ttdef"><b>Definition</b> mesh.cpp:25</div></div>
<div class="ttc" id="anamespacestroid_1_1_i_o_html_ad4048304d8a0c7075d2b2a6e465d0b6eaee96e14c2b71bd59252006289ba464cf"><div class="ttname"><a href="namespacestroid_1_1_i_o.html#ad4048304d8a0c7075d2b2a6e465d0b6eaee96e14c2b71bd59252006289ba464cf">stroid::IO::VISUALIZATION_MODE::BOUNDARY_ELEMENT_ID</a></div><div class="ttdeci">@ BOUNDARY_ELEMENT_ID</div><div class="ttdoc">Color boundary-adjacent elements by boundary attribute/ID.</div><div class="ttdef"><b>Definition</b> mesh.h:15</div></div>
<div class="ttc" id="anamespacestroid_1_1topology_html_a5907aa2e639cda703d48d177abc37caf"><div class="ttname"><a href="namespacestroid_1_1topology.html#a5907aa2e639cda703d48d177abc37caf">stroid::topology::PromoteToHighOrder</a></div><div class="ttdeci">void PromoteToHighOrder(mfem::Mesh &amp;mesh, const fourdst::config::Config&lt; config::MeshConfig &gt; &amp;config)</div><div class="ttdoc">Promote a mesh to high-order by attaching an H1 nodal finite element space.</div><div class="ttdef"><b>Definition</b> curvilinear.cpp:8</div></div>
<div class="ttc" id="anamespacestroid_1_1topology_html_a62774bcba7ea1a485892dcd4bed6425b"><div class="ttname"><a href="namespacestroid_1_1topology.html#a62774bcba7ea1a485892dcd4bed6425b">stroid::topology::Finalize</a></div><div class="ttdeci">void Finalize(mfem::Mesh &amp;mesh, const fourdst::config::Config&lt; config::MeshConfig &gt; &amp;config)</div><div class="ttdoc">Finalize topology, validate orientation, and apply uniform refinement.</div><div class="ttdef"><b>Definition</b> topology.cpp:59</div></div>
<div class="ttc" id="anamespacestroid_1_1topology_html_a836ed13e5bac63e7952c3ce4e5532e78"><div class="ttname"><a href="namespacestroid_1_1topology.html#a836ed13e5bac63e7952c3ce4e5532e78">stroid::topology::ProjectMesh</a></div><div class="ttdeci">void ProjectMesh(mfem::Mesh &amp;mesh, const fourdst::config::Config&lt; config::MeshConfig &gt; &amp;config)</div><div class="ttdoc">Project high-order mesh nodes using the configured curvilinear mapping.</div><div class="ttdef"><b>Definition</b> curvilinear.cpp:14</div></div>
<div class="ttc" id="anamespacestroid_1_1topology_html_abc0d8a1fb8e9c5ac0e259e4c93db7892"><div class="ttname"><a href="namespacestroid_1_1topology.html#abc0d8a1fb8e9c5ac0e259e4c93db7892">stroid::topology::BuildSkeleton</a></div><div class="ttdeci">std::unique_ptr&lt; mfem::Mesh &gt; BuildSkeleton(const fourdst::config::Config&lt; config::MeshConfig &gt; &amp;config)</div><div class="ttdoc">Build the initial multi-block mesh topology for the star model.</div><div class="ttdef"><b>Definition</b> topology.cpp:10</div></div>
<div class="ttc" id="atopology_8h_html"><div class="ttname"><a href="topology_8h.html">topology.h</a></div></div>
</div><!-- fragment --><h1><a class="anchor" id="autotoc_md8"></a>
Funding</h1>
<p>Stroid is developed as part of the 4D-STAR project.</p>
<p>4D-STAR is funded by European Research Council (ERC) under the Horizon Europe programme (Synergy Grant agreement No. 101071505: 4D-STAR) Work for this project is funded by the European Union. Views and opinions expressed are however those of the author(s) only and do not necessarily reflect those of the European Union or the European Research Council. </p>
</div></div><!-- PageDoc -->
<a href="doxygen_crawl.html"></a>
</div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.13.2 </li>
</ul>
</div>
</body>
</html>