Compare commits
11 Commits
e5bfd54234
...
feature/ke
| Author | SHA1 | Date | |
|---|---|---|---|
| b00a64309b | |||
| 4a692c08f4 | |||
| d4fa557c64 | |||
| 9e7370a051 | |||
| 83b20110d0 | |||
| 3aaaf9ee3d | |||
| b24e0377f6 | |||
| 475fce5fca | |||
| a3b63a68d1 | |||
| 6a8fcc0290 | |||
| 2db3d6e666 |
6
.gitignore
vendored
6
.gitignore
vendored
@@ -101,3 +101,9 @@ output/
|
||||
.idea/
|
||||
|
||||
scratch/
|
||||
|
||||
releases/
|
||||
stroid-dist/
|
||||
stroid-universal-dist.tar.gz
|
||||
stroid-*/
|
||||
stroid-*.tar.gz
|
||||
|
||||
2
Doxyfile
2
Doxyfile
@@ -48,7 +48,7 @@ PROJECT_NAME = stroid
|
||||
# could be handy for archiving the generated documentation or if some version
|
||||
# control system is used.
|
||||
|
||||
PROJECT_NUMBER = v0.1.0
|
||||
PROJECT_NUMBER = v0.2.0
|
||||
|
||||
# Using the PROJECT_BRIEF tag one can provide an optional one line description
|
||||
# for a project that appears at the top of each page and should give viewers a
|
||||
|
||||
@@ -5,9 +5,10 @@ mfem_cmake_options.add_cmake_defines({
|
||||
'MFEM_ENABLE_TESTING': 'OFF',
|
||||
'MFEM_ENABLE_MINIAPPS': 'OFF',
|
||||
'MFEM_USE_BENCMARK': 'OFF',
|
||||
'BUILD_SHARED_LIBS': 'ON',
|
||||
'CMAKE_SKIP_INSTALL_RULES': 'ON'
|
||||
'BUILD_SHARED_LIBS': 'OFF',
|
||||
'BUILD_STATIC_LIBS': 'ON',
|
||||
})
|
||||
mfem_cmake_options.set_install(true)
|
||||
|
||||
mfem_sp = cmake.subproject(
|
||||
'mfem',
|
||||
|
||||
@@ -2,9 +2,14 @@
|
||||
core_steepness = 1.0
|
||||
flattening = 0.0
|
||||
include_external_domain = false
|
||||
inf_bdr_id = 2
|
||||
order = 3
|
||||
r_core = 1.5
|
||||
r_infinity = 6.0
|
||||
r_instability = 1e-14
|
||||
r_star = 5.0
|
||||
refinement_levels = 4
|
||||
surface_bdr_id = 1
|
||||
core_id = 1
|
||||
envelope_id = 2
|
||||
vacuum_id = 3
|
||||
|
||||
@@ -2,9 +2,14 @@
|
||||
core_steepness = 1.0
|
||||
flattening = 0.0
|
||||
include_external_domain = true
|
||||
inf_bdr_id = 2
|
||||
order = 3
|
||||
r_core = 1.5
|
||||
r_infinity = 6.0
|
||||
r_instability = 1e-14
|
||||
r_star = 5.0
|
||||
refinement_levels = 4
|
||||
surface_bdr_id = 1
|
||||
core_id = 1
|
||||
envelope_id = 2
|
||||
vacuum_id = 3
|
||||
|
||||
16
configs/test_external_domain_refinement_l1.toml
Normal file
16
configs/test_external_domain_refinement_l1.toml
Normal file
@@ -0,0 +1,16 @@
|
||||
[main]
|
||||
core_steepness = 1.0
|
||||
flattening = 0.0
|
||||
include_external_domain = true
|
||||
inf_bdr_id = 2
|
||||
order = 3
|
||||
r_core = 1.5
|
||||
r_infinity = 6.0
|
||||
r_instability = 1e-14
|
||||
r_star = 5.0
|
||||
refinement_levels = 1
|
||||
surface_bdr_id = 1
|
||||
core_id = 1
|
||||
envelope_id = 2
|
||||
vacuum_id = 3
|
||||
|
||||
@@ -2,9 +2,14 @@
|
||||
core_steepness = 1.0
|
||||
flattening = 0.2
|
||||
include_external_domain = false
|
||||
inf_bdr_id = 2
|
||||
order = 3
|
||||
r_core = 1.5
|
||||
r_infinity = 6.0
|
||||
r_instability = 1e-14
|
||||
r_star = 5.0
|
||||
refinement_levels = 4
|
||||
surface_bdr_id = 1
|
||||
core_id = 1
|
||||
envelope_id = 2
|
||||
vacuum_id = 3
|
||||
|
||||
16
configs/test_refinement_l2.toml
Normal file
16
configs/test_refinement_l2.toml
Normal file
@@ -0,0 +1,16 @@
|
||||
[main]
|
||||
core_steepness = 1.0
|
||||
flattening = 0.0
|
||||
include_external_domain = false
|
||||
inf_bdr_id = 2
|
||||
order = 3
|
||||
r_core = 1.5
|
||||
r_infinity = 6.0
|
||||
r_instability = 1e-14
|
||||
r_star = 5.0
|
||||
refinement_levels = 2
|
||||
surface_bdr_id = 1
|
||||
core_id = 1
|
||||
envelope_id = 2
|
||||
vacuum_id = 3
|
||||
|
||||
16
configs/test_volume_no_external.toml
Normal file
16
configs/test_volume_no_external.toml
Normal file
@@ -0,0 +1,16 @@
|
||||
[main]
|
||||
refinement_levels = 2
|
||||
order = 3
|
||||
include_external_domain = false
|
||||
r_core = 1.5
|
||||
r_star = 5.0
|
||||
flattening = 0.08
|
||||
r_infinity = 6.0
|
||||
r_instability = 1e-14
|
||||
core_steepness = 1.0
|
||||
surface_bdr_id = 1
|
||||
inf_bdr_id = 2
|
||||
core_id = 1
|
||||
envelope_id = 2
|
||||
vacuum_id = 3
|
||||
|
||||
16
configs/test_volume_spherical_no_external.toml
Normal file
16
configs/test_volume_spherical_no_external.toml
Normal file
@@ -0,0 +1,16 @@
|
||||
[main]
|
||||
refinement_levels = 2
|
||||
order = 3
|
||||
include_external_domain = false
|
||||
r_core = 1.5
|
||||
r_star = 5.0
|
||||
flattening = 0.0
|
||||
r_infinity = 6.0
|
||||
r_instability = 1e-14
|
||||
core_steepness = 1.0
|
||||
surface_bdr_id = 1
|
||||
inf_bdr_id = 2
|
||||
core_id = 1
|
||||
envelope_id = 2
|
||||
vacuum_id = 3
|
||||
|
||||
16
configs/test_volume_spherical_with_external.toml
Normal file
16
configs/test_volume_spherical_with_external.toml
Normal file
@@ -0,0 +1,16 @@
|
||||
[main]
|
||||
refinement_levels = 2
|
||||
order = 3
|
||||
include_external_domain = true
|
||||
r_core = 1.5
|
||||
r_star = 5.0
|
||||
flattening = 0.0
|
||||
r_infinity = 6.0
|
||||
r_instability = 1e-14
|
||||
core_steepness = 1.0
|
||||
surface_bdr_id = 1
|
||||
inf_bdr_id = 2
|
||||
core_id = 1
|
||||
envelope_id = 2
|
||||
vacuum_id = 3
|
||||
|
||||
16
configs/test_volume_with_external.toml
Normal file
16
configs/test_volume_with_external.toml
Normal file
@@ -0,0 +1,16 @@
|
||||
[main]
|
||||
refinement_levels = 2
|
||||
order = 3
|
||||
include_external_domain = true
|
||||
r_core = 1.5
|
||||
r_star = 5.0
|
||||
flattening = 0.08
|
||||
r_infinity = 6.0
|
||||
r_instability = 1e-14
|
||||
core_steepness = 1.0
|
||||
surface_bdr_id = 1
|
||||
inf_bdr_id = 2
|
||||
core_id = 1
|
||||
envelope_id = 2
|
||||
vacuum_id = 3
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
<tr id="projectrow">
|
||||
<td id="projectlogo"><img alt="Logo" src="Logo.png"/></td>
|
||||
<td id="projectalign">
|
||||
<div id="projectname">stroid<span id="projectnumber"> v0.1.0</span>
|
||||
<div id="projectname">stroid<span id="projectnumber"> v0.2.0</span>
|
||||
</div>
|
||||
<div id="projectbrief">Multi-block curvilinear mesh generation</div>
|
||||
</td>
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
<tr id="projectrow">
|
||||
<td id="projectlogo"><img alt="Logo" src="Logo.png"/></td>
|
||||
<td id="projectalign">
|
||||
<div id="projectname">stroid<span id="projectnumber"> v0.1.0</span>
|
||||
<div id="projectname">stroid<span id="projectnumber"> v0.2.0</span>
|
||||
</div>
|
||||
<div id="projectbrief">Multi-block curvilinear mesh generation</div>
|
||||
</td>
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
<tr id="projectrow">
|
||||
<td id="projectlogo"><img alt="Logo" src="Logo.png"/></td>
|
||||
<td id="projectalign">
|
||||
<div id="projectname">stroid<span id="projectnumber"> v0.1.0</span>
|
||||
<div id="projectname">stroid<span id="projectnumber"> v0.2.0</span>
|
||||
</div>
|
||||
<div id="projectbrief">Multi-block curvilinear mesh generation</div>
|
||||
</td>
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
<tr id="projectrow">
|
||||
<td id="projectlogo"><img alt="Logo" src="Logo.png"/></td>
|
||||
<td id="projectalign">
|
||||
<div id="projectname">stroid<span id="projectnumber"> v0.1.0</span>
|
||||
<div id="projectname">stroid<span id="projectnumber"> v0.2.0</span>
|
||||
</div>
|
||||
<div id="projectbrief">Multi-block curvilinear mesh generation</div>
|
||||
</td>
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
<tr id="projectrow">
|
||||
<td id="projectlogo"><img alt="Logo" src="Logo.png"/></td>
|
||||
<td id="projectalign">
|
||||
<div id="projectname">stroid<span id="projectnumber"> v0.1.0</span>
|
||||
<div id="projectname">stroid<span id="projectnumber"> v0.2.0</span>
|
||||
</div>
|
||||
<div id="projectbrief">Multi-block curvilinear mesh generation</div>
|
||||
</td>
|
||||
@@ -111,10 +111,11 @@ $(function(){initNavTree('curvilinear_8cpp.html',''); initResizable(true); });
|
||||
<code>#include "<a class="el" href="mapping_8h.html">stroid/topology/mapping.h</a>"</code><br />
|
||||
<code>#include <iostream></code><br />
|
||||
<code>#include <memory></code><br />
|
||||
<code>#include <sys/proc.h></code><br />
|
||||
</div><div class="textblock"><div class="dynheader">
|
||||
Include dependency graph for curvilinear.cpp:</div>
|
||||
<div class="dyncontent">
|
||||
<div class="center"><iframe scrolling="no" frameborder="0" src="curvilinear_8cpp__incl.svg" width="575" height="184"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe></div>
|
||||
<div class="center"><div class="zoom"><iframe scrolling="no" frameborder="0" src="curvilinear_8cpp__incl.svg" width="100%" height="438"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe></div></div>
|
||||
</div>
|
||||
</div><table class="memberdecls">
|
||||
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="namespaces" name="namespaces"></a>
|
||||
|
||||
@@ -1,20 +1,22 @@
|
||||
<map id="src/lib/topology/curvilinear.cpp" name="src/lib/topology/curvilinear.cpp">
|
||||
<area shape="rect" id="Node000001" title=" " alt="" coords="271,5,467,31"/>
|
||||
<area shape="rect" id="Node000002" href="$curvilinear_8h.html" title=" " alt="" coords="9,79,188,105"/>
|
||||
<area shape="poly" id="edge1_Node000001_Node000002" title=" " alt="" coords="324,34,160,77,159,72,322,29"/>
|
||||
<area shape="rect" id="Node000006" href="$mapping_8h.html" title=" " alt="" coords="212,79,382,105"/>
|
||||
<area shape="poly" id="edge5_Node000001_Node000006" title=" " alt="" coords="359,33,322,70,318,66,355,29"/>
|
||||
<area shape="rect" id="Node000007" title=" " alt="" coords="407,79,478,105"/>
|
||||
<area shape="poly" id="edge9_Node000001_Node000007" title=" " alt="" coords="383,29,421,66,417,70,379,33"/>
|
||||
<area shape="rect" id="Node000008" title=" " alt="" coords="502,79,570,105"/>
|
||||
<area shape="poly" id="edge10_Node000001_Node000008" title=" " alt="" coords="398,29,494,70,492,75,396,34"/>
|
||||
<area shape="rect" id="Node000001" title=" " alt="" coords="348,5,544,31"/>
|
||||
<area shape="rect" id="Node000002" href="$curvilinear_8h.html" title=" " alt="" coords="207,79,387,105"/>
|
||||
<area shape="poly" id="edge1_Node000001_Node000002" title=" " alt="" coords="424,31,337,74,335,69,418,32"/>
|
||||
<area shape="rect" id="Node000006" href="$mapping_8h.html" title=" " alt="" coords="13,79,184,105"/>
|
||||
<area shape="poly" id="edge5_Node000001_Node000006" title=" " alt="" coords="386,34,173,78,172,73,388,29"/>
|
||||
<area shape="rect" id="Node000007" title=" " alt="" coords="411,79,482,105"/>
|
||||
<area shape="poly" id="edge9_Node000001_Node000007" title=" " alt="" coords="448,29,449,65,444,62,445,33"/>
|
||||
<area shape="rect" id="Node000008" title=" " alt="" coords="506,79,574,105"/>
|
||||
<area shape="poly" id="edge10_Node000001_Node000008" title=" " alt="" coords="463,29,515,70,509,69,461,34"/>
|
||||
<area shape="rect" id="Node000009" title=" " alt="" coords="598,79,681,105"/>
|
||||
<area shape="poly" id="edge11_Node000001_Node000009" title=" " alt="" coords="479,29,595,73,590,73,479,34"/>
|
||||
<area shape="rect" id="Node000003" title=" " alt="" coords="5,153,85,178"/>
|
||||
<area shape="poly" id="edge2_Node000002_Node000003" title=" " alt="" coords="92,106,65,142,61,138,87,103"/>
|
||||
<area shape="poly" id="edge2_Node000002_Node000003" title=" " alt="" coords="255,108,100,151,99,146,254,103"/>
|
||||
<area shape="rect" id="Node000004" href="$config_8h.html" title=" " alt="" coords="108,153,251,178"/>
|
||||
<area shape="poly" id="edge3_Node000002_Node000004" title=" " alt="" coords="114,103,156,140,153,144,110,107"/>
|
||||
<area shape="poly" id="edge3_Node000002_Node000004" title=" " alt="" coords="280,105,214,147,211,142,275,106"/>
|
||||
<area shape="rect" id="Node000005" title=" " alt="" coords="275,153,426,178"/>
|
||||
<area shape="poly" id="edge4_Node000002_Node000005" title=" " alt="" coords="142,103,294,145,292,151,140,108"/>
|
||||
<area shape="poly" id="edge6_Node000006_Node000003" title=" " alt="" coords="255,108,100,151,99,146,254,103"/>
|
||||
<area shape="poly" id="edge7_Node000006_Node000004" title=" " alt="" coords="278,107,214,147,211,142,276,103"/>
|
||||
<area shape="poly" id="edge8_Node000006_Node000005" title=" " alt="" coords="308,103,334,138,330,142,304,106"/>
|
||||
<area shape="poly" id="edge4_Node000002_Node000005" title=" " alt="" coords="307,102,335,141,330,139,305,107"/>
|
||||
<area shape="poly" id="edge6_Node000006_Node000003" title=" " alt="" coords="92,104,65,142,61,138,87,106"/>
|
||||
<area shape="poly" id="edge7_Node000006_Node000004" title=" " alt="" coords="113,103,157,142,152,143,111,108"/>
|
||||
<area shape="poly" id="edge8_Node000006_Node000005" title=" " alt="" coords="141,103,295,146,291,150,141,108"/>
|
||||
</map>
|
||||
|
||||
@@ -1 +1 @@
|
||||
b8eef4875e081be998fbcbc84a3978b1
|
||||
6950d4e2891a4c4f47ed638d27c5bf68
|
||||
@@ -1,13 +1,12 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
|
||||
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<!-- Generated by graphviz version 13.0.1 (20250615.1724)
|
||||
<!-- Generated by graphviz version 14.1.2 (20260124.0452)
|
||||
-->
|
||||
<!-- Title: src/lib/topology/curvilinear.cpp Pages: 1 -->
|
||||
<svg width="431pt" height="138pt"
|
||||
viewBox="0.00 0.00 431.00 138.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<!--zoomable 138 -->
|
||||
|
||||
<svg id="main" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve">
|
||||
<svg id="main" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" onload="init(evt)">
|
||||
|
||||
<style type="text/css"><![CDATA[
|
||||
.node, .edge {opacity: 0.7;}
|
||||
@@ -15,16 +14,53 @@
|
||||
.edge:hover path { stroke: red; }
|
||||
.edge:hover polygon { stroke: red; fill: red; }
|
||||
]]></style>
|
||||
|
||||
<defs>
|
||||
<circle id="rim" cx="0" cy="0" r="7"/>
|
||||
<circle id="rim2" cx="0" cy="0" r="3.5"/>
|
||||
<g id="zoomPlus">
|
||||
<use xlink:href="#rim" fill="#404040"><set attributeName="fill" to="#808080" begin="zoomplus.mouseover" end="zoomplus.mouseout"/></use>
|
||||
<path d="M-4,0h8M0,-4v8" fill="none" stroke="white" stroke-width="1.5" pointer-events="none"/>
|
||||
</g>
|
||||
<g id="zoomMin">
|
||||
<use xlink:href="#rim" fill="#404040"><set attributeName="fill" to="#808080" begin="zoomminus.mouseover" end="zoomminus.mouseout"/></use>
|
||||
<path d="M-4,0h8" fill="none" stroke="white" stroke-width="1.5" pointer-events="none"/>
|
||||
</g>
|
||||
<g id="arrowUp" transform="translate(30 24)">
|
||||
<use xlink:href="#rim"/>
|
||||
<path pointer-events="none" fill="none" stroke="white" stroke-width="1.5" d="M0,-3.0v7 M-2.5,-0.5L0,-3.0L2.5,-0.5"/>
|
||||
</g>
|
||||
<g id="arrowRight" transform="rotate(90) translate(36 -43)">
|
||||
<use xlink:href="#rim"/>
|
||||
<path pointer-events="none" fill="none" stroke="white" stroke-width="1.5" d="M0,-3.0v7 M-2.5,-0.5L0,-3.0L2.5,-0.5"/>
|
||||
</g>
|
||||
<g id="arrowDown" transform="rotate(180) translate(-30 -48)">
|
||||
<use xlink:href="#rim"/>
|
||||
<path pointer-events="none" fill="none" stroke="white" stroke-width="1.5" d="M0,-3.0v7 M-2.5,-0.5L0,-3.0L2.5,-0.5"/>
|
||||
</g>
|
||||
<g id="arrowLeft" transform="rotate(270) translate(-36 17)">
|
||||
<use xlink:href="#rim"/>
|
||||
<path pointer-events="none" fill="none" stroke="white" stroke-width="1.5" d="M0,-3.0v7 M-2.5,-0.5L0,-3.0L2.5,-0.5"/>
|
||||
</g>
|
||||
<g id="resetDef">
|
||||
<use xlink:href="#rim2" fill="#404040"><set attributeName="fill" to="#808080" begin="reset.mouseover" end="reset.mouseout"/></use>
|
||||
</g>
|
||||
</defs>
|
||||
<script type="application/ecmascript">
|
||||
var viewWidth = 515;
|
||||
var viewHeight = 138;
|
||||
var sectionId = 'dynsection-0';
|
||||
</script>
|
||||
<script type="application/ecmascript" xlink:href="svg.min.js"/>
|
||||
<svg id="graph" class="graph">
|
||||
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 133.75)">
|
||||
<g id="viewport">
|
||||
<title>src/lib/topology/curvilinear.cpp</title>
|
||||
<!-- Node1 -->
|
||||
<g id="Node000001" class="node">
|
||||
<title>Node1</title>
|
||||
<g id="a_Node000001"><a xlink:title=" ">
|
||||
<polygon fill="#999999" stroke="#666666" points="346.38,-129.75 199.12,-129.75 199.12,-110.5 346.38,-110.5 346.38,-129.75"/>
|
||||
<text xml:space="preserve" text-anchor="middle" x="272.75" y="-116.25" font-family="Helvetica,sans-Serif" font-size="10.00">src/lib/topology/curvilinear.cpp</text>
|
||||
<polygon fill="#999999" stroke="#666666" points="404.38,-129.75 257.12,-129.75 257.12,-110.5 404.38,-110.5 404.38,-129.75"/>
|
||||
<text xml:space="preserve" text-anchor="middle" x="330.75" y="-116.25" font-family="Helvetica,sans-Serif" font-size="10.00">src/lib/topology/curvilinear.cpp</text>
|
||||
</a>
|
||||
</g>
|
||||
</g>
|
||||
@@ -32,8 +68,8 @@
|
||||
<g id="Node000002" class="node">
|
||||
<title>Node2</title>
|
||||
<g id="a_Node000002"><a xlink:href="curvilinear_8h.html" target="_top" xlink:title=" ">
|
||||
<polygon fill="white" stroke="#666666" points="137,-74.5 2.5,-74.5 2.5,-55.25 137,-55.25 137,-74.5"/>
|
||||
<text xml:space="preserve" text-anchor="middle" x="69.75" y="-61" font-family="Helvetica,sans-Serif" font-size="10.00">stroid/topology/curvilinear.h</text>
|
||||
<polygon fill="white" stroke="#666666" points="286,-74.5 151.5,-74.5 151.5,-55.25 286,-55.25 286,-74.5"/>
|
||||
<text xml:space="preserve" text-anchor="middle" x="218.75" y="-61" font-family="Helvetica,sans-Serif" font-size="10.00">stroid/topology/curvilinear.h</text>
|
||||
</a>
|
||||
</g>
|
||||
</g>
|
||||
@@ -41,8 +77,8 @@
|
||||
<g id="edge1_Node000001_Node000002" class="edge">
|
||||
<title>Node1->Node2</title>
|
||||
<g id="a_edge1_Node000001_Node000002"><a xlink:title=" ">
|
||||
<path fill="none" stroke="#63b8ff" d="M238.31,-110.09C204.48,-101.22 152.66,-87.62 115.41,-77.85"/>
|
||||
<polygon fill="#63b8ff" stroke="#63b8ff" points="116.38,-74.49 105.82,-75.34 114.6,-81.26 116.38,-74.49"/>
|
||||
<path fill="none" stroke="#63b8ff" d="M311.75,-110.09C294.29,-101.79 268.15,-89.36 248.03,-79.79"/>
|
||||
<polygon fill="#63b8ff" stroke="#63b8ff" points="249.74,-76.74 239.21,-75.6 246.74,-83.06 249.74,-76.74"/>
|
||||
</a>
|
||||
</g>
|
||||
</g>
|
||||
@@ -50,8 +86,8 @@
|
||||
<g id="Node000006" class="node">
|
||||
<title>Node6</title>
|
||||
<g id="a_Node000006"><a xlink:href="mapping_8h.html" target="_top" xlink:title=" ">
|
||||
<polygon fill="white" stroke="#666666" points="282.62,-74.5 154.88,-74.5 154.88,-55.25 282.62,-55.25 282.62,-74.5"/>
|
||||
<text xml:space="preserve" text-anchor="middle" x="218.75" y="-61" font-family="Helvetica,sans-Serif" font-size="10.00">stroid/topology/mapping.h</text>
|
||||
<polygon fill="white" stroke="#666666" points="133.62,-74.5 5.88,-74.5 5.88,-55.25 133.62,-55.25 133.62,-74.5"/>
|
||||
<text xml:space="preserve" text-anchor="middle" x="69.75" y="-61" font-family="Helvetica,sans-Serif" font-size="10.00">stroid/topology/mapping.h</text>
|
||||
</a>
|
||||
</g>
|
||||
</g>
|
||||
@@ -59,8 +95,8 @@
|
||||
<g id="edge5_Node000001_Node000006" class="edge">
|
||||
<title>Node1->Node6</title>
|
||||
<g id="a_edge5_Node000001_Node000006"><a xlink:title=" ">
|
||||
<path fill="none" stroke="#63b8ff" d="M263.83,-110.33C256.3,-102.9 245.28,-92.04 236.02,-82.91"/>
|
||||
<polygon fill="#63b8ff" stroke="#63b8ff" points="238.52,-80.45 228.94,-75.92 233.6,-85.44 238.52,-80.45"/>
|
||||
<path fill="none" stroke="#63b8ff" d="M286.18,-110.03C241.7,-100.96 173.24,-86.99 125.26,-77.2"/>
|
||||
<polygon fill="#63b8ff" stroke="#63b8ff" points="126.12,-73.8 115.62,-75.23 124.72,-80.66 126.12,-73.8"/>
|
||||
</a>
|
||||
</g>
|
||||
</g>
|
||||
@@ -68,8 +104,8 @@
|
||||
<g id="Node000007" class="node">
|
||||
<title>Node7</title>
|
||||
<g id="a_Node000007"><a xlink:title=" ">
|
||||
<polygon fill="#e0e0e0" stroke="#999999" points="354.5,-74.5 301,-74.5 301,-55.25 354.5,-55.25 354.5,-74.5"/>
|
||||
<text xml:space="preserve" text-anchor="middle" x="327.75" y="-61" font-family="Helvetica,sans-Serif" font-size="10.00">iostream</text>
|
||||
<polygon fill="#e0e0e0" stroke="#999999" points="357.5,-74.5 304,-74.5 304,-55.25 357.5,-55.25 357.5,-74.5"/>
|
||||
<text xml:space="preserve" text-anchor="middle" x="330.75" y="-61" font-family="Helvetica,sans-Serif" font-size="10.00">iostream</text>
|
||||
</a>
|
||||
</g>
|
||||
</g>
|
||||
@@ -77,8 +113,8 @@
|
||||
<g id="edge9_Node000001_Node000007" class="edge">
|
||||
<title>Node1->Node7</title>
|
||||
<g id="a_edge9_Node000001_Node000007"><a xlink:title=" ">
|
||||
<path fill="none" stroke="#63b8ff" d="M281.83,-110.33C289.59,-102.82 300.96,-91.81 310.45,-82.63"/>
|
||||
<polygon fill="#63b8ff" stroke="#63b8ff" points="312.63,-85.38 317.38,-75.91 307.76,-80.35 312.63,-85.38"/>
|
||||
<path fill="none" stroke="#63b8ff" d="M330.75,-110.33C330.75,-103.82 330.75,-94.67 330.75,-86.37"/>
|
||||
<polygon fill="#63b8ff" stroke="#63b8ff" points="334.25,-86.37 330.75,-76.37 327.25,-86.37 334.25,-86.37"/>
|
||||
</a>
|
||||
</g>
|
||||
</g>
|
||||
@@ -86,8 +122,8 @@
|
||||
<g id="Node000008" class="node">
|
||||
<title>Node8</title>
|
||||
<g id="a_Node000008"><a xlink:title=" ">
|
||||
<polygon fill="#e0e0e0" stroke="#999999" points="423.38,-74.5 372.12,-74.5 372.12,-55.25 423.38,-55.25 423.38,-74.5"/>
|
||||
<text xml:space="preserve" text-anchor="middle" x="397.75" y="-61" font-family="Helvetica,sans-Serif" font-size="10.00">memory</text>
|
||||
<polygon fill="#e0e0e0" stroke="#999999" points="426.38,-74.5 375.12,-74.5 375.12,-55.25 426.38,-55.25 426.38,-74.5"/>
|
||||
<text xml:space="preserve" text-anchor="middle" x="400.75" y="-61" font-family="Helvetica,sans-Serif" font-size="10.00">memory</text>
|
||||
</a>
|
||||
</g>
|
||||
</g>
|
||||
@@ -95,8 +131,26 @@
|
||||
<g id="edge10_Node000001_Node000008" class="edge">
|
||||
<title>Node1->Node8</title>
|
||||
<g id="a_edge10_Node000001_Node000008"><a xlink:title=" ">
|
||||
<path fill="none" stroke="#63b8ff" d="M293.95,-110.09C313.71,-101.68 343.42,-89.02 366,-79.4"/>
|
||||
<polygon fill="#63b8ff" stroke="#63b8ff" points="367.22,-82.68 375.05,-75.55 364.48,-76.24 367.22,-82.68"/>
|
||||
<path fill="none" stroke="#63b8ff" d="M342.62,-110.09C352.84,-102.32 367.82,-90.92 380.01,-81.65"/>
|
||||
<polygon fill="#63b8ff" stroke="#63b8ff" points="382.01,-84.53 387.85,-75.69 377.77,-78.96 382.01,-84.53"/>
|
||||
</a>
|
||||
</g>
|
||||
</g>
|
||||
<!-- Node9 -->
|
||||
<g id="Node000009" class="node">
|
||||
<title>Node9</title>
|
||||
<g id="a_Node000009"><a xlink:title=" ">
|
||||
<polygon fill="#e0e0e0" stroke="#999999" points="506.62,-74.5 444.88,-74.5 444.88,-55.25 506.62,-55.25 506.62,-74.5"/>
|
||||
<text xml:space="preserve" text-anchor="middle" x="475.75" y="-61" font-family="Helvetica,sans-Serif" font-size="10.00">sys/proc.h</text>
|
||||
</a>
|
||||
</g>
|
||||
</g>
|
||||
<!-- Node1->Node9 -->
|
||||
<g id="edge11_Node000001_Node000009" class="edge">
|
||||
<title>Node1->Node9</title>
|
||||
<g id="a_edge11_Node000001_Node000009"><a xlink:title=" ">
|
||||
<path fill="none" stroke="#63b8ff" d="M355.35,-110.09C378.68,-101.52 413.99,-88.56 440.35,-78.88"/>
|
||||
<polygon fill="#63b8ff" stroke="#63b8ff" points="441.43,-82.21 449.61,-75.47 439.02,-75.64 441.43,-82.21"/>
|
||||
</a>
|
||||
</g>
|
||||
</g>
|
||||
@@ -113,8 +167,8 @@
|
||||
<g id="edge2_Node000002_Node000003" class="edge">
|
||||
<title>Node2->Node3</title>
|
||||
<g id="a_edge2_Node000002_Node000003"><a xlink:title=" ">
|
||||
<path fill="none" stroke="#63b8ff" d="M63.14,-55.08C57.79,-47.96 50.07,-37.68 43.4,-28.8"/>
|
||||
<polygon fill="#63b8ff" stroke="#63b8ff" points="46.21,-26.71 37.41,-20.82 40.62,-30.92 46.21,-26.71"/>
|
||||
<path fill="none" stroke="#63b8ff" d="M186.69,-54.84C154.66,-45.82 105.32,-31.92 70.53,-22.11"/>
|
||||
<polygon fill="#63b8ff" stroke="#63b8ff" points="71.81,-18.84 61.24,-19.5 69.91,-25.58 71.81,-18.84"/>
|
||||
</a>
|
||||
</g>
|
||||
</g>
|
||||
@@ -131,8 +185,8 @@
|
||||
<g id="edge3_Node000002_Node000004" class="edge">
|
||||
<title>Node2->Node4</title>
|
||||
<g id="a_edge3_Node000002_Node000004"><a xlink:title=" ">
|
||||
<path fill="none" stroke="#63b8ff" d="M80.1,-54.84C88.83,-47.22 101.54,-36.12 112.05,-26.95"/>
|
||||
<polygon fill="#63b8ff" stroke="#63b8ff" points="114.18,-29.73 119.41,-20.52 109.58,-24.46 114.18,-29.73"/>
|
||||
<path fill="none" stroke="#63b8ff" d="M203.82,-54.84C190.55,-46.81 170.88,-34.91 155.3,-25.48"/>
|
||||
<polygon fill="#63b8ff" stroke="#63b8ff" points="157.41,-22.67 147.05,-20.49 153.79,-28.66 157.41,-22.67"/>
|
||||
</a>
|
||||
</g>
|
||||
</g>
|
||||
@@ -149,8 +203,8 @@
|
||||
<g id="edge4_Node000002_Node000005" class="edge">
|
||||
<title>Node2->Node5</title>
|
||||
<g id="a_edge4_Node000002_Node000005"><a xlink:title=" ">
|
||||
<path fill="none" stroke="#63b8ff" d="M101.81,-54.84C133.17,-46.01 181.14,-32.49 215.79,-22.73"/>
|
||||
<polygon fill="#63b8ff" stroke="#63b8ff" points="216.4,-26.19 225.07,-20.11 214.5,-19.46 216.4,-26.19"/>
|
||||
<path fill="none" stroke="#63b8ff" d="M225.36,-55.08C230.71,-47.96 238.43,-37.68 245.1,-28.8"/>
|
||||
<polygon fill="#63b8ff" stroke="#63b8ff" points="247.88,-30.92 251.09,-20.82 242.29,-26.71 247.88,-30.92"/>
|
||||
</a>
|
||||
</g>
|
||||
</g>
|
||||
@@ -158,8 +212,8 @@
|
||||
<g id="edge6_Node000006_Node000003" class="edge">
|
||||
<title>Node6->Node3</title>
|
||||
<g id="a_edge6_Node000006_Node000003"><a xlink:title=" ">
|
||||
<path fill="none" stroke="#63b8ff" d="M186.69,-54.84C154.66,-45.82 105.32,-31.92 70.53,-22.11"/>
|
||||
<polygon fill="#63b8ff" stroke="#63b8ff" points="71.81,-18.84 61.24,-19.5 69.91,-25.58 71.81,-18.84"/>
|
||||
<path fill="none" stroke="#63b8ff" d="M63.14,-55.08C57.79,-47.96 50.07,-37.68 43.4,-28.8"/>
|
||||
<polygon fill="#63b8ff" stroke="#63b8ff" points="46.21,-26.71 37.41,-20.82 40.62,-30.92 46.21,-26.71"/>
|
||||
</a>
|
||||
</g>
|
||||
</g>
|
||||
@@ -167,8 +221,8 @@
|
||||
<g id="edge7_Node000006_Node000004" class="edge">
|
||||
<title>Node6->Node4</title>
|
||||
<g id="a_edge7_Node000006_Node000004"><a xlink:title=" ">
|
||||
<path fill="none" stroke="#63b8ff" d="M203.82,-54.84C190.55,-46.81 170.88,-34.91 155.3,-25.48"/>
|
||||
<polygon fill="#63b8ff" stroke="#63b8ff" points="157.41,-22.67 147.05,-20.49 153.79,-28.66 157.41,-22.67"/>
|
||||
<path fill="none" stroke="#63b8ff" d="M80.1,-54.84C88.83,-47.22 101.54,-36.12 112.05,-26.95"/>
|
||||
<polygon fill="#63b8ff" stroke="#63b8ff" points="114.18,-29.73 119.41,-20.52 109.58,-24.46 114.18,-29.73"/>
|
||||
</a>
|
||||
</g>
|
||||
</g>
|
||||
@@ -176,13 +230,34 @@
|
||||
<g id="edge8_Node000006_Node000005" class="edge">
|
||||
<title>Node6->Node5</title>
|
||||
<g id="a_edge8_Node000006_Node000005"><a xlink:title=" ">
|
||||
<path fill="none" stroke="#63b8ff" d="M225.36,-55.08C230.71,-47.96 238.43,-37.68 245.1,-28.8"/>
|
||||
<polygon fill="#63b8ff" stroke="#63b8ff" points="247.88,-30.92 251.09,-20.82 242.29,-26.71 247.88,-30.92"/>
|
||||
<path fill="none" stroke="#63b8ff" d="M101.81,-54.84C133.17,-46.01 181.14,-32.49 215.79,-22.73"/>
|
||||
<polygon fill="#63b8ff" stroke="#63b8ff" points="216.4,-26.19 225.07,-20.11 214.5,-19.46 216.4,-26.19"/>
|
||||
</a>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
||||
<g id="navigator" transform="translate(0 0)" fill="#404254">
|
||||
<rect fill="#f2f5e9" fill-opacity="0.5" stroke="#606060" stroke-width=".5" x="0" y="0" width="60" height="60"/>
|
||||
<use id="zoomplus" xlink:href="#zoomPlus" x="17" y="9" onmousedown="handleZoom(evt,'in')"/>
|
||||
<use id="zoomminus" xlink:href="#zoomMin" x="42" y="9" onmousedown="handleZoom(evt,'out')"/>
|
||||
<use id="reset" xlink:href="#resetDef" x="30" y="36" onmousedown="handleReset()"/>
|
||||
<use id="arrowup" xlink:href="#arrowUp" x="0" y="0" onmousedown="handlePan(0,-1)"/>
|
||||
<use id="arrowright" xlink:href="#arrowRight" x="0" y="0" onmousedown="handlePan(1,0)"/>
|
||||
<use id="arrowdown" xlink:href="#arrowDown" x="0" y="0" onmousedown="handlePan(0,1)"/>
|
||||
<use id="arrowleft" xlink:href="#arrowLeft" x="0" y="0" onmousedown="handlePan(-1,0)"/>
|
||||
</g>
|
||||
<svg viewBox="0 0 15 15" width="100%" height="30px" preserveAspectRatio="xMaxYMin meet">
|
||||
<g id="arrow_out" transform="scale(0.3 0.3)">
|
||||
<a xlink:href="curvilinear_8cpp__incl_org.svg" target="_base">
|
||||
<rect id="button" ry="5" rx="5" y="6" x="6" height="38" width="38"
|
||||
fill="#f2f5e9" fill-opacity="0.5" stroke="#606060" stroke-width="1.0"/>
|
||||
<path id="arrow"
|
||||
d="M 11.500037,31.436501 C 11.940474,20.09759 22.043105,11.32322 32.158766,21.979434 L 37.068811,17.246167 C 37.068811,17.246167 37.088388,32 37.088388,32 L 22.160133,31.978069 C 22.160133,31.978069 26.997745,27.140456 26.997745,27.140456 C 18.528582,18.264221 13.291696,25.230495 11.500037,31.436501 z"
|
||||
style="fill:#404040;"/>
|
||||
</a>
|
||||
</g>
|
||||
</svg>
|
||||
|
||||
<style type='text/css'>
|
||||
|
||||
|
Before Width: | Height: | Size: 8.2 KiB After Width: | Height: | Size: 12 KiB |
@@ -1,19 +1,19 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
|
||||
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<!-- Generated by graphviz version 13.0.1 (20250615.1724)
|
||||
<!-- Generated by graphviz version 14.1.2 (20260124.0452)
|
||||
-->
|
||||
<!-- Title: src/lib/topology/curvilinear.cpp Pages: 1 -->
|
||||
<svg width="431pt" height="138pt"
|
||||
viewBox="0.00 0.00 431.00 138.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<svg width="515pt" height="138pt"
|
||||
viewBox="0.00 0.00 515.00 138.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 133.75)">
|
||||
<title>src/lib/topology/curvilinear.cpp</title>
|
||||
<!-- Node1 -->
|
||||
<g id="Node000001" class="node">
|
||||
<title>Node1</title>
|
||||
<g id="a_Node000001"><a xlink:title=" ">
|
||||
<polygon fill="#999999" stroke="#666666" points="346.38,-129.75 199.12,-129.75 199.12,-110.5 346.38,-110.5 346.38,-129.75"/>
|
||||
<text xml:space="preserve" text-anchor="middle" x="272.75" y="-116.25" font-family="Helvetica,sans-Serif" font-size="10.00">src/lib/topology/curvilinear.cpp</text>
|
||||
<polygon fill="#999999" stroke="#666666" points="404.38,-129.75 257.12,-129.75 257.12,-110.5 404.38,-110.5 404.38,-129.75"/>
|
||||
<text xml:space="preserve" text-anchor="middle" x="330.75" y="-116.25" font-family="Helvetica,sans-Serif" font-size="10.00">src/lib/topology/curvilinear.cpp</text>
|
||||
</a>
|
||||
</g>
|
||||
</g>
|
||||
@@ -21,8 +21,8 @@
|
||||
<g id="Node000002" class="node">
|
||||
<title>Node2</title>
|
||||
<g id="a_Node000002"><a xlink:href="curvilinear_8h.html" target="_top" xlink:title=" ">
|
||||
<polygon fill="white" stroke="#666666" points="137,-74.5 2.5,-74.5 2.5,-55.25 137,-55.25 137,-74.5"/>
|
||||
<text xml:space="preserve" text-anchor="middle" x="69.75" y="-61" font-family="Helvetica,sans-Serif" font-size="10.00">stroid/topology/curvilinear.h</text>
|
||||
<polygon fill="white" stroke="#666666" points="286,-74.5 151.5,-74.5 151.5,-55.25 286,-55.25 286,-74.5"/>
|
||||
<text xml:space="preserve" text-anchor="middle" x="218.75" y="-61" font-family="Helvetica,sans-Serif" font-size="10.00">stroid/topology/curvilinear.h</text>
|
||||
</a>
|
||||
</g>
|
||||
</g>
|
||||
@@ -30,8 +30,8 @@
|
||||
<g id="edge1_Node000001_Node000002" class="edge">
|
||||
<title>Node1->Node2</title>
|
||||
<g id="a_edge1_Node000001_Node000002"><a xlink:title=" ">
|
||||
<path fill="none" stroke="#63b8ff" d="M238.31,-110.09C204.48,-101.22 152.66,-87.62 115.41,-77.85"/>
|
||||
<polygon fill="#63b8ff" stroke="#63b8ff" points="116.38,-74.49 105.82,-75.34 114.6,-81.26 116.38,-74.49"/>
|
||||
<path fill="none" stroke="#63b8ff" d="M311.75,-110.09C294.29,-101.79 268.15,-89.36 248.03,-79.79"/>
|
||||
<polygon fill="#63b8ff" stroke="#63b8ff" points="249.74,-76.74 239.21,-75.6 246.74,-83.06 249.74,-76.74"/>
|
||||
</a>
|
||||
</g>
|
||||
</g>
|
||||
@@ -39,8 +39,8 @@
|
||||
<g id="Node000006" class="node">
|
||||
<title>Node6</title>
|
||||
<g id="a_Node000006"><a xlink:href="mapping_8h.html" target="_top" xlink:title=" ">
|
||||
<polygon fill="white" stroke="#666666" points="282.62,-74.5 154.88,-74.5 154.88,-55.25 282.62,-55.25 282.62,-74.5"/>
|
||||
<text xml:space="preserve" text-anchor="middle" x="218.75" y="-61" font-family="Helvetica,sans-Serif" font-size="10.00">stroid/topology/mapping.h</text>
|
||||
<polygon fill="white" stroke="#666666" points="133.62,-74.5 5.88,-74.5 5.88,-55.25 133.62,-55.25 133.62,-74.5"/>
|
||||
<text xml:space="preserve" text-anchor="middle" x="69.75" y="-61" font-family="Helvetica,sans-Serif" font-size="10.00">stroid/topology/mapping.h</text>
|
||||
</a>
|
||||
</g>
|
||||
</g>
|
||||
@@ -48,8 +48,8 @@
|
||||
<g id="edge5_Node000001_Node000006" class="edge">
|
||||
<title>Node1->Node6</title>
|
||||
<g id="a_edge5_Node000001_Node000006"><a xlink:title=" ">
|
||||
<path fill="none" stroke="#63b8ff" d="M263.83,-110.33C256.3,-102.9 245.28,-92.04 236.02,-82.91"/>
|
||||
<polygon fill="#63b8ff" stroke="#63b8ff" points="238.52,-80.45 228.94,-75.92 233.6,-85.44 238.52,-80.45"/>
|
||||
<path fill="none" stroke="#63b8ff" d="M286.18,-110.03C241.7,-100.96 173.24,-86.99 125.26,-77.2"/>
|
||||
<polygon fill="#63b8ff" stroke="#63b8ff" points="126.12,-73.8 115.62,-75.23 124.72,-80.66 126.12,-73.8"/>
|
||||
</a>
|
||||
</g>
|
||||
</g>
|
||||
@@ -57,8 +57,8 @@
|
||||
<g id="Node000007" class="node">
|
||||
<title>Node7</title>
|
||||
<g id="a_Node000007"><a xlink:title=" ">
|
||||
<polygon fill="#e0e0e0" stroke="#999999" points="354.5,-74.5 301,-74.5 301,-55.25 354.5,-55.25 354.5,-74.5"/>
|
||||
<text xml:space="preserve" text-anchor="middle" x="327.75" y="-61" font-family="Helvetica,sans-Serif" font-size="10.00">iostream</text>
|
||||
<polygon fill="#e0e0e0" stroke="#999999" points="357.5,-74.5 304,-74.5 304,-55.25 357.5,-55.25 357.5,-74.5"/>
|
||||
<text xml:space="preserve" text-anchor="middle" x="330.75" y="-61" font-family="Helvetica,sans-Serif" font-size="10.00">iostream</text>
|
||||
</a>
|
||||
</g>
|
||||
</g>
|
||||
@@ -66,8 +66,8 @@
|
||||
<g id="edge9_Node000001_Node000007" class="edge">
|
||||
<title>Node1->Node7</title>
|
||||
<g id="a_edge9_Node000001_Node000007"><a xlink:title=" ">
|
||||
<path fill="none" stroke="#63b8ff" d="M281.83,-110.33C289.59,-102.82 300.96,-91.81 310.45,-82.63"/>
|
||||
<polygon fill="#63b8ff" stroke="#63b8ff" points="312.63,-85.38 317.38,-75.91 307.76,-80.35 312.63,-85.38"/>
|
||||
<path fill="none" stroke="#63b8ff" d="M330.75,-110.33C330.75,-103.82 330.75,-94.67 330.75,-86.37"/>
|
||||
<polygon fill="#63b8ff" stroke="#63b8ff" points="334.25,-86.37 330.75,-76.37 327.25,-86.37 334.25,-86.37"/>
|
||||
</a>
|
||||
</g>
|
||||
</g>
|
||||
@@ -75,8 +75,8 @@
|
||||
<g id="Node000008" class="node">
|
||||
<title>Node8</title>
|
||||
<g id="a_Node000008"><a xlink:title=" ">
|
||||
<polygon fill="#e0e0e0" stroke="#999999" points="423.38,-74.5 372.12,-74.5 372.12,-55.25 423.38,-55.25 423.38,-74.5"/>
|
||||
<text xml:space="preserve" text-anchor="middle" x="397.75" y="-61" font-family="Helvetica,sans-Serif" font-size="10.00">memory</text>
|
||||
<polygon fill="#e0e0e0" stroke="#999999" points="426.38,-74.5 375.12,-74.5 375.12,-55.25 426.38,-55.25 426.38,-74.5"/>
|
||||
<text xml:space="preserve" text-anchor="middle" x="400.75" y="-61" font-family="Helvetica,sans-Serif" font-size="10.00">memory</text>
|
||||
</a>
|
||||
</g>
|
||||
</g>
|
||||
@@ -84,8 +84,26 @@
|
||||
<g id="edge10_Node000001_Node000008" class="edge">
|
||||
<title>Node1->Node8</title>
|
||||
<g id="a_edge10_Node000001_Node000008"><a xlink:title=" ">
|
||||
<path fill="none" stroke="#63b8ff" d="M293.95,-110.09C313.71,-101.68 343.42,-89.02 366,-79.4"/>
|
||||
<polygon fill="#63b8ff" stroke="#63b8ff" points="367.22,-82.68 375.05,-75.55 364.48,-76.24 367.22,-82.68"/>
|
||||
<path fill="none" stroke="#63b8ff" d="M342.62,-110.09C352.84,-102.32 367.82,-90.92 380.01,-81.65"/>
|
||||
<polygon fill="#63b8ff" stroke="#63b8ff" points="382.01,-84.53 387.85,-75.69 377.77,-78.96 382.01,-84.53"/>
|
||||
</a>
|
||||
</g>
|
||||
</g>
|
||||
<!-- Node9 -->
|
||||
<g id="Node000009" class="node">
|
||||
<title>Node9</title>
|
||||
<g id="a_Node000009"><a xlink:title=" ">
|
||||
<polygon fill="#e0e0e0" stroke="#999999" points="506.62,-74.5 444.88,-74.5 444.88,-55.25 506.62,-55.25 506.62,-74.5"/>
|
||||
<text xml:space="preserve" text-anchor="middle" x="475.75" y="-61" font-family="Helvetica,sans-Serif" font-size="10.00">sys/proc.h</text>
|
||||
</a>
|
||||
</g>
|
||||
</g>
|
||||
<!-- Node1->Node9 -->
|
||||
<g id="edge11_Node000001_Node000009" class="edge">
|
||||
<title>Node1->Node9</title>
|
||||
<g id="a_edge11_Node000001_Node000009"><a xlink:title=" ">
|
||||
<path fill="none" stroke="#63b8ff" d="M355.35,-110.09C378.68,-101.52 413.99,-88.56 440.35,-78.88"/>
|
||||
<polygon fill="#63b8ff" stroke="#63b8ff" points="441.43,-82.21 449.61,-75.47 439.02,-75.64 441.43,-82.21"/>
|
||||
</a>
|
||||
</g>
|
||||
</g>
|
||||
@@ -102,8 +120,8 @@
|
||||
<g id="edge2_Node000002_Node000003" class="edge">
|
||||
<title>Node2->Node3</title>
|
||||
<g id="a_edge2_Node000002_Node000003"><a xlink:title=" ">
|
||||
<path fill="none" stroke="#63b8ff" d="M63.14,-55.08C57.79,-47.96 50.07,-37.68 43.4,-28.8"/>
|
||||
<polygon fill="#63b8ff" stroke="#63b8ff" points="46.21,-26.71 37.41,-20.82 40.62,-30.92 46.21,-26.71"/>
|
||||
<path fill="none" stroke="#63b8ff" d="M186.69,-54.84C154.66,-45.82 105.32,-31.92 70.53,-22.11"/>
|
||||
<polygon fill="#63b8ff" stroke="#63b8ff" points="71.81,-18.84 61.24,-19.5 69.91,-25.58 71.81,-18.84"/>
|
||||
</a>
|
||||
</g>
|
||||
</g>
|
||||
@@ -120,8 +138,8 @@
|
||||
<g id="edge3_Node000002_Node000004" class="edge">
|
||||
<title>Node2->Node4</title>
|
||||
<g id="a_edge3_Node000002_Node000004"><a xlink:title=" ">
|
||||
<path fill="none" stroke="#63b8ff" d="M80.1,-54.84C88.83,-47.22 101.54,-36.12 112.05,-26.95"/>
|
||||
<polygon fill="#63b8ff" stroke="#63b8ff" points="114.18,-29.73 119.41,-20.52 109.58,-24.46 114.18,-29.73"/>
|
||||
<path fill="none" stroke="#63b8ff" d="M203.82,-54.84C190.55,-46.81 170.88,-34.91 155.3,-25.48"/>
|
||||
<polygon fill="#63b8ff" stroke="#63b8ff" points="157.41,-22.67 147.05,-20.49 153.79,-28.66 157.41,-22.67"/>
|
||||
</a>
|
||||
</g>
|
||||
</g>
|
||||
@@ -138,8 +156,8 @@
|
||||
<g id="edge4_Node000002_Node000005" class="edge">
|
||||
<title>Node2->Node5</title>
|
||||
<g id="a_edge4_Node000002_Node000005"><a xlink:title=" ">
|
||||
<path fill="none" stroke="#63b8ff" d="M101.81,-54.84C133.17,-46.01 181.14,-32.49 215.79,-22.73"/>
|
||||
<polygon fill="#63b8ff" stroke="#63b8ff" points="216.4,-26.19 225.07,-20.11 214.5,-19.46 216.4,-26.19"/>
|
||||
<path fill="none" stroke="#63b8ff" d="M225.36,-55.08C230.71,-47.96 238.43,-37.68 245.1,-28.8"/>
|
||||
<polygon fill="#63b8ff" stroke="#63b8ff" points="247.88,-30.92 251.09,-20.82 242.29,-26.71 247.88,-30.92"/>
|
||||
</a>
|
||||
</g>
|
||||
</g>
|
||||
@@ -147,8 +165,8 @@
|
||||
<g id="edge6_Node000006_Node000003" class="edge">
|
||||
<title>Node6->Node3</title>
|
||||
<g id="a_edge6_Node000006_Node000003"><a xlink:title=" ">
|
||||
<path fill="none" stroke="#63b8ff" d="M186.69,-54.84C154.66,-45.82 105.32,-31.92 70.53,-22.11"/>
|
||||
<polygon fill="#63b8ff" stroke="#63b8ff" points="71.81,-18.84 61.24,-19.5 69.91,-25.58 71.81,-18.84"/>
|
||||
<path fill="none" stroke="#63b8ff" d="M63.14,-55.08C57.79,-47.96 50.07,-37.68 43.4,-28.8"/>
|
||||
<polygon fill="#63b8ff" stroke="#63b8ff" points="46.21,-26.71 37.41,-20.82 40.62,-30.92 46.21,-26.71"/>
|
||||
</a>
|
||||
</g>
|
||||
</g>
|
||||
@@ -156,8 +174,8 @@
|
||||
<g id="edge7_Node000006_Node000004" class="edge">
|
||||
<title>Node6->Node4</title>
|
||||
<g id="a_edge7_Node000006_Node000004"><a xlink:title=" ">
|
||||
<path fill="none" stroke="#63b8ff" d="M203.82,-54.84C190.55,-46.81 170.88,-34.91 155.3,-25.48"/>
|
||||
<polygon fill="#63b8ff" stroke="#63b8ff" points="157.41,-22.67 147.05,-20.49 153.79,-28.66 157.41,-22.67"/>
|
||||
<path fill="none" stroke="#63b8ff" d="M80.1,-54.84C88.83,-47.22 101.54,-36.12 112.05,-26.95"/>
|
||||
<polygon fill="#63b8ff" stroke="#63b8ff" points="114.18,-29.73 119.41,-20.52 109.58,-24.46 114.18,-29.73"/>
|
||||
</a>
|
||||
</g>
|
||||
</g>
|
||||
@@ -165,8 +183,8 @@
|
||||
<g id="edge8_Node000006_Node000005" class="edge">
|
||||
<title>Node6->Node5</title>
|
||||
<g id="a_edge8_Node000006_Node000005"><a xlink:title=" ">
|
||||
<path fill="none" stroke="#63b8ff" d="M225.36,-55.08C230.71,-47.96 238.43,-37.68 245.1,-28.8"/>
|
||||
<polygon fill="#63b8ff" stroke="#63b8ff" points="247.88,-30.92 251.09,-20.82 242.29,-26.71 247.88,-30.92"/>
|
||||
<path fill="none" stroke="#63b8ff" d="M101.81,-54.84C133.17,-46.01 181.14,-32.49 215.79,-22.73"/>
|
||||
<polygon fill="#63b8ff" stroke="#63b8ff" points="216.4,-26.19 225.07,-20.11 214.5,-19.46 216.4,-26.19"/>
|
||||
</a>
|
||||
</g>
|
||||
</g>
|
||||
|
||||
|
Before Width: | Height: | Size: 7.5 KiB After Width: | Height: | Size: 8.3 KiB |
@@ -31,7 +31,7 @@
|
||||
<tr id="projectrow">
|
||||
<td id="projectlogo"><img alt="Logo" src="Logo.png"/></td>
|
||||
<td id="projectalign">
|
||||
<div id="projectname">stroid<span id="projectnumber"> v0.1.0</span>
|
||||
<div id="projectname">stroid<span id="projectnumber"> v0.2.0</span>
|
||||
</div>
|
||||
<div id="projectbrief">Multi-block curvilinear mesh generation</div>
|
||||
</td>
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
<tr id="projectrow">
|
||||
<td id="projectlogo"><img alt="Logo" src="Logo.png"/></td>
|
||||
<td id="projectalign">
|
||||
<div id="projectname">stroid<span id="projectnumber"> v0.1.0</span>
|
||||
<div id="projectname">stroid<span id="projectnumber"> v0.2.0</span>
|
||||
</div>
|
||||
<div id="projectbrief">Multi-block curvilinear mesh generation</div>
|
||||
</td>
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
<tr id="projectrow">
|
||||
<td id="projectlogo"><img alt="Logo" src="Logo.png"/></td>
|
||||
<td id="projectalign">
|
||||
<div id="projectname">stroid<span id="projectnumber"> v0.1.0</span>
|
||||
<div id="projectname">stroid<span id="projectnumber"> v0.2.0</span>
|
||||
</div>
|
||||
<div id="projectbrief">Multi-block curvilinear mesh generation</div>
|
||||
</td>
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
<tr id="projectrow">
|
||||
<td id="projectlogo"><img alt="Logo" src="Logo.png"/></td>
|
||||
<td id="projectalign">
|
||||
<div id="projectname">stroid<span id="projectnumber"> v0.1.0</span>
|
||||
<div id="projectname">stroid<span id="projectnumber"> v0.2.0</span>
|
||||
</div>
|
||||
<div id="projectbrief">Multi-block curvilinear mesh generation</div>
|
||||
</td>
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
<tr id="projectrow">
|
||||
<td id="projectlogo"><img alt="Logo" src="Logo.png"/></td>
|
||||
<td id="projectalign">
|
||||
<div id="projectname">stroid<span id="projectnumber"> v0.1.0</span>
|
||||
<div id="projectname">stroid<span id="projectnumber"> v0.2.0</span>
|
||||
</div>
|
||||
<div id="projectbrief">Multi-block curvilinear mesh generation</div>
|
||||
</td>
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
<tr id="projectrow">
|
||||
<td id="projectlogo"><img alt="Logo" src="Logo.png"/></td>
|
||||
<td id="projectalign">
|
||||
<div id="projectname">stroid<span id="projectnumber"> v0.1.0</span>
|
||||
<div id="projectname">stroid<span id="projectnumber"> v0.2.0</span>
|
||||
</div>
|
||||
<div id="projectbrief">Multi-block curvilinear mesh generation</div>
|
||||
</td>
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
<tr id="projectrow">
|
||||
<td id="projectlogo"><img alt="Logo" src="Logo.png"/></td>
|
||||
<td id="projectalign">
|
||||
<div id="projectname">stroid<span id="projectnumber"> v0.1.0</span>
|
||||
<div id="projectname">stroid<span id="projectnumber"> v0.2.0</span>
|
||||
</div>
|
||||
<div id="projectbrief">Multi-block curvilinear mesh generation</div>
|
||||
</td>
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
<tr id="projectrow">
|
||||
<td id="projectlogo"><img alt="Logo" src="Logo.png"/></td>
|
||||
<td id="projectalign">
|
||||
<div id="projectname">stroid<span id="projectnumber"> v0.1.0</span>
|
||||
<div id="projectname">stroid<span id="projectnumber"> v0.2.0</span>
|
||||
</div>
|
||||
<div id="projectbrief">Multi-block curvilinear mesh generation</div>
|
||||
</td>
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
<tr id="projectrow">
|
||||
<td id="projectlogo"><img alt="Logo" src="Logo.png"/></td>
|
||||
<td id="projectalign">
|
||||
<div id="projectname">stroid<span id="projectnumber"> v0.1.0</span>
|
||||
<div id="projectname">stroid<span id="projectnumber"> v0.2.0</span>
|
||||
</div>
|
||||
<div id="projectbrief">Multi-block curvilinear mesh generation</div>
|
||||
</td>
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
<tr id="projectrow">
|
||||
<td id="projectlogo"><img alt="Logo" src="Logo.png"/></td>
|
||||
<td id="projectalign">
|
||||
<div id="projectname">stroid<span id="projectnumber"> v0.1.0</span>
|
||||
<div id="projectname">stroid<span id="projectnumber"> v0.2.0</span>
|
||||
</div>
|
||||
<div id="projectbrief">Multi-block curvilinear mesh generation</div>
|
||||
</td>
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
<tr id="projectrow">
|
||||
<td id="projectlogo"><img alt="Logo" src="Logo.png"/></td>
|
||||
<td id="projectalign">
|
||||
<div id="projectname">stroid<span id="projectnumber"> v0.1.0</span>
|
||||
<div id="projectname">stroid<span id="projectnumber"> v0.2.0</span>
|
||||
</div>
|
||||
<div id="projectbrief">Multi-block curvilinear mesh generation</div>
|
||||
</td>
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
<tr id="projectrow">
|
||||
<td id="projectlogo"><img alt="Logo" src="Logo.png"/></td>
|
||||
<td id="projectalign">
|
||||
<div id="projectname">stroid<span id="projectnumber"> v0.1.0</span>
|
||||
<div id="projectname">stroid<span id="projectnumber"> v0.2.0</span>
|
||||
</div>
|
||||
<div id="projectbrief">Multi-block curvilinear mesh generation</div>
|
||||
</td>
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
<tr id="projectrow">
|
||||
<td id="projectlogo"><img alt="Logo" src="Logo.png"/></td>
|
||||
<td id="projectalign">
|
||||
<div id="projectname">stroid<span id="projectnumber"> v0.1.0</span>
|
||||
<div id="projectname">stroid<span id="projectnumber"> v0.2.0</span>
|
||||
</div>
|
||||
<div id="projectbrief">Multi-block curvilinear mesh generation</div>
|
||||
</td>
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
<tr id="projectrow">
|
||||
<td id="projectlogo"><img alt="Logo" src="Logo.png"/></td>
|
||||
<td id="projectalign">
|
||||
<div id="projectname">stroid<span id="projectnumber"> v0.1.0</span>
|
||||
<div id="projectname">stroid<span id="projectnumber"> v0.2.0</span>
|
||||
</div>
|
||||
<div id="projectbrief">Multi-block curvilinear mesh generation</div>
|
||||
</td>
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
<tr id="projectrow">
|
||||
<td id="projectlogo"><img alt="Logo" src="Logo.png"/></td>
|
||||
<td id="projectalign">
|
||||
<div id="projectname">stroid<span id="projectnumber"> v0.1.0</span>
|
||||
<div id="projectname">stroid<span id="projectnumber"> v0.2.0</span>
|
||||
</div>
|
||||
<div id="projectbrief">Multi-block curvilinear mesh generation</div>
|
||||
</td>
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
<tr id="projectrow">
|
||||
<td id="projectlogo"><img alt="Logo" src="Logo.png"/></td>
|
||||
<td id="projectalign">
|
||||
<div id="projectname">stroid<span id="projectnumber"> v0.1.0</span>
|
||||
<div id="projectname">stroid<span id="projectnumber"> v0.2.0</span>
|
||||
</div>
|
||||
<div id="projectbrief">Multi-block curvilinear mesh generation</div>
|
||||
</td>
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
<tr id="projectrow">
|
||||
<td id="projectlogo"><img alt="Logo" src="Logo.png"/></td>
|
||||
<td id="projectalign">
|
||||
<div id="projectname">stroid<span id="projectnumber"> v0.1.0</span>
|
||||
<div id="projectname">stroid<span id="projectnumber"> v0.2.0</span>
|
||||
</div>
|
||||
<div id="projectbrief">Multi-block curvilinear mesh generation</div>
|
||||
</td>
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
<tr id="projectrow">
|
||||
<td id="projectlogo"><img alt="Logo" src="Logo.png"/></td>
|
||||
<td id="projectalign">
|
||||
<div id="projectname">stroid<span id="projectnumber"> v0.1.0</span>
|
||||
<div id="projectname">stroid<span id="projectnumber"> v0.2.0</span>
|
||||
</div>
|
||||
<div id="projectbrief">Multi-block curvilinear mesh generation</div>
|
||||
</td>
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
<tr id="projectrow">
|
||||
<td id="projectlogo"><img alt="Logo" src="Logo.png"/></td>
|
||||
<td id="projectalign">
|
||||
<div id="projectname">stroid<span id="projectnumber"> v0.1.0</span>
|
||||
<div id="projectname">stroid<span id="projectnumber"> v0.2.0</span>
|
||||
</div>
|
||||
<div id="projectbrief">Multi-block curvilinear mesh generation</div>
|
||||
</td>
|
||||
|
||||
@@ -83,12 +83,17 @@
|
||||
<a href="structstroid_1_1config_1_1_mesh_config-members.html"/>
|
||||
<a href="structstroid_1_1config_1_1_mesh_config.html"/>
|
||||
<a href="structstroid_1_1config_1_1_mesh_config.html#a062652781f4f3ea0b7ca8764362a7368"/>
|
||||
<a href="structstroid_1_1config_1_1_mesh_config.html#a2faa5aa1fef84ebbda30590d3fb2799b"/>
|
||||
<a href="structstroid_1_1config_1_1_mesh_config.html#a33f25ff277aa8834065e04ccb9cdbdda"/>
|
||||
<a href="structstroid_1_1config_1_1_mesh_config.html#a36c7b05405691393d381086a27ea36ad"/>
|
||||
<a href="structstroid_1_1config_1_1_mesh_config.html#a3fe80a30990d484dcc39b6f9a0befc05"/>
|
||||
<a href="structstroid_1_1config_1_1_mesh_config.html#a4da6d99ff7ba24d2f917e1fd98ddd877"/>
|
||||
<a href="structstroid_1_1config_1_1_mesh_config.html#a5c68a895f73dc82a38a8daac22a83ad7"/>
|
||||
<a href="structstroid_1_1config_1_1_mesh_config.html#a64cb00c8cba27267279a52207a4b5be0"/>
|
||||
<a href="structstroid_1_1config_1_1_mesh_config.html#a860e78f1906acb0c3aa08d55f94de3fd"/>
|
||||
<a href="structstroid_1_1config_1_1_mesh_config.html#a8cafcbebf64ae251517118eb152de981"/>
|
||||
<a href="structstroid_1_1config_1_1_mesh_config.html#ac7546899ebbfe191ea3a8bf2403b31eb"/>
|
||||
<a href="structstroid_1_1config_1_1_mesh_config.html#ac99aa48fe3e71e2ef57b09d48cacfef8"/>
|
||||
<a href="structstroid_1_1config_1_1_mesh_config.html#aed32864839b149c94842801b6413d94d"/>
|
||||
<a href="structstroid_1_1config_1_1_mesh_config.html#affad4638b0ae7b710f2b2db992f6f584"/>
|
||||
<a href="topology_8cpp.html"/>
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
<tr id="projectrow">
|
||||
<td id="projectlogo"><img alt="Logo" src="Logo.png"/></td>
|
||||
<td id="projectalign">
|
||||
<div id="projectname">stroid<span id="projectnumber"> v0.1.0</span>
|
||||
<div id="projectname">stroid<span id="projectnumber"> v0.2.0</span>
|
||||
</div>
|
||||
<div id="projectbrief">Multi-block curvilinear mesh generation</div>
|
||||
</td>
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
<tr id="projectrow">
|
||||
<td id="projectlogo"><img alt="Logo" src="Logo.png"/></td>
|
||||
<td id="projectalign">
|
||||
<div id="projectname">stroid<span id="projectnumber"> v0.1.0</span>
|
||||
<div id="projectname">stroid<span id="projectnumber"> v0.2.0</span>
|
||||
</div>
|
||||
<div id="projectbrief">Multi-block curvilinear mesh generation</div>
|
||||
</td>
|
||||
@@ -102,15 +102,20 @@ $(function(){initNavTree('functions.html',''); initResizable(true); });
|
||||
|
||||
<div class="contents">
|
||||
<div class="textblock">Here is a list of all class members with links to the classes they belong to:</div><ul>
|
||||
<li>core_id : <a class="el" href="structstroid_1_1config_1_1_mesh_config.html#a2faa5aa1fef84ebbda30590d3fb2799b">stroid::config::MeshConfig</a></li>
|
||||
<li>core_steepness : <a class="el" href="structstroid_1_1config_1_1_mesh_config.html#aed32864839b149c94842801b6413d94d">stroid::config::MeshConfig</a></li>
|
||||
<li>envelope_id : <a class="el" href="structstroid_1_1config_1_1_mesh_config.html#ac99aa48fe3e71e2ef57b09d48cacfef8">stroid::config::MeshConfig</a></li>
|
||||
<li>flattening : <a class="el" href="structstroid_1_1config_1_1_mesh_config.html#affad4638b0ae7b710f2b2db992f6f584">stroid::config::MeshConfig</a></li>
|
||||
<li>include_external_domain : <a class="el" href="structstroid_1_1config_1_1_mesh_config.html#a062652781f4f3ea0b7ca8764362a7368">stroid::config::MeshConfig</a></li>
|
||||
<li>inf_bdr_id : <a class="el" href="structstroid_1_1config_1_1_mesh_config.html#a64cb00c8cba27267279a52207a4b5be0">stroid::config::MeshConfig</a></li>
|
||||
<li>order : <a class="el" href="structstroid_1_1config_1_1_mesh_config.html#a860e78f1906acb0c3aa08d55f94de3fd">stroid::config::MeshConfig</a></li>
|
||||
<li>r_core : <a class="el" href="structstroid_1_1config_1_1_mesh_config.html#a5c68a895f73dc82a38a8daac22a83ad7">stroid::config::MeshConfig</a></li>
|
||||
<li>r_infinity : <a class="el" href="structstroid_1_1config_1_1_mesh_config.html#ac7546899ebbfe191ea3a8bf2403b31eb">stroid::config::MeshConfig</a></li>
|
||||
<li>r_instability : <a class="el" href="structstroid_1_1config_1_1_mesh_config.html#a4da6d99ff7ba24d2f917e1fd98ddd877">stroid::config::MeshConfig</a></li>
|
||||
<li>r_star : <a class="el" href="structstroid_1_1config_1_1_mesh_config.html#a3fe80a30990d484dcc39b6f9a0befc05">stroid::config::MeshConfig</a></li>
|
||||
<li>refinement_levels : <a class="el" href="structstroid_1_1config_1_1_mesh_config.html#a8cafcbebf64ae251517118eb152de981">stroid::config::MeshConfig</a></li>
|
||||
<li>surface_bdr_id : <a class="el" href="structstroid_1_1config_1_1_mesh_config.html#a33f25ff277aa8834065e04ccb9cdbdda">stroid::config::MeshConfig</a></li>
|
||||
<li>vacuum_id : <a class="el" href="structstroid_1_1config_1_1_mesh_config.html#a36c7b05405691393d381086a27ea36ad">stroid::config::MeshConfig</a></li>
|
||||
</ul>
|
||||
</div><!-- contents -->
|
||||
</div><!-- doc-content -->
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
<tr id="projectrow">
|
||||
<td id="projectlogo"><img alt="Logo" src="Logo.png"/></td>
|
||||
<td id="projectalign">
|
||||
<div id="projectname">stroid<span id="projectnumber"> v0.1.0</span>
|
||||
<div id="projectname">stroid<span id="projectnumber"> v0.2.0</span>
|
||||
</div>
|
||||
<div id="projectbrief">Multi-block curvilinear mesh generation</div>
|
||||
</td>
|
||||
@@ -102,15 +102,20 @@ $(function(){initNavTree('functions_vars.html',''); initResizable(true); });
|
||||
|
||||
<div class="contents">
|
||||
<div class="textblock">Here is a list of all variables with links to the classes they belong to:</div><ul>
|
||||
<li>core_id : <a class="el" href="structstroid_1_1config_1_1_mesh_config.html#a2faa5aa1fef84ebbda30590d3fb2799b">stroid::config::MeshConfig</a></li>
|
||||
<li>core_steepness : <a class="el" href="structstroid_1_1config_1_1_mesh_config.html#aed32864839b149c94842801b6413d94d">stroid::config::MeshConfig</a></li>
|
||||
<li>envelope_id : <a class="el" href="structstroid_1_1config_1_1_mesh_config.html#ac99aa48fe3e71e2ef57b09d48cacfef8">stroid::config::MeshConfig</a></li>
|
||||
<li>flattening : <a class="el" href="structstroid_1_1config_1_1_mesh_config.html#affad4638b0ae7b710f2b2db992f6f584">stroid::config::MeshConfig</a></li>
|
||||
<li>include_external_domain : <a class="el" href="structstroid_1_1config_1_1_mesh_config.html#a062652781f4f3ea0b7ca8764362a7368">stroid::config::MeshConfig</a></li>
|
||||
<li>inf_bdr_id : <a class="el" href="structstroid_1_1config_1_1_mesh_config.html#a64cb00c8cba27267279a52207a4b5be0">stroid::config::MeshConfig</a></li>
|
||||
<li>order : <a class="el" href="structstroid_1_1config_1_1_mesh_config.html#a860e78f1906acb0c3aa08d55f94de3fd">stroid::config::MeshConfig</a></li>
|
||||
<li>r_core : <a class="el" href="structstroid_1_1config_1_1_mesh_config.html#a5c68a895f73dc82a38a8daac22a83ad7">stroid::config::MeshConfig</a></li>
|
||||
<li>r_infinity : <a class="el" href="structstroid_1_1config_1_1_mesh_config.html#ac7546899ebbfe191ea3a8bf2403b31eb">stroid::config::MeshConfig</a></li>
|
||||
<li>r_instability : <a class="el" href="structstroid_1_1config_1_1_mesh_config.html#a4da6d99ff7ba24d2f917e1fd98ddd877">stroid::config::MeshConfig</a></li>
|
||||
<li>r_star : <a class="el" href="structstroid_1_1config_1_1_mesh_config.html#a3fe80a30990d484dcc39b6f9a0befc05">stroid::config::MeshConfig</a></li>
|
||||
<li>refinement_levels : <a class="el" href="structstroid_1_1config_1_1_mesh_config.html#a8cafcbebf64ae251517118eb152de981">stroid::config::MeshConfig</a></li>
|
||||
<li>surface_bdr_id : <a class="el" href="structstroid_1_1config_1_1_mesh_config.html#a33f25ff277aa8834065e04ccb9cdbdda">stroid::config::MeshConfig</a></li>
|
||||
<li>vacuum_id : <a class="el" href="structstroid_1_1config_1_1_mesh_config.html#a36c7b05405691393d381086a27ea36ad">stroid::config::MeshConfig</a></li>
|
||||
</ul>
|
||||
</div><!-- contents -->
|
||||
</div><!-- doc-content -->
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
<tr id="projectrow">
|
||||
<td id="projectlogo"><img alt="Logo" src="Logo.png"/></td>
|
||||
<td id="projectalign">
|
||||
<div id="projectname">stroid<span id="projectnumber"> v0.1.0</span>
|
||||
<div id="projectname">stroid<span id="projectnumber"> v0.2.0</span>
|
||||
</div>
|
||||
<div id="projectbrief">Multi-block curvilinear mesh generation</div>
|
||||
</td>
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
<tr id="projectrow">
|
||||
<td id="projectlogo"><img alt="Logo" src="Logo.png"/></td>
|
||||
<td id="projectalign">
|
||||
<div id="projectname">stroid<span id="projectnumber"> v0.1.0</span>
|
||||
<div id="projectname">stroid<span id="projectnumber"> v0.2.0</span>
|
||||
</div>
|
||||
<div id="projectbrief">Multi-block curvilinear mesh generation</div>
|
||||
</td>
|
||||
@@ -150,15 +150,20 @@ Running</h2>
|
||||
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">refinement_levels = 2</div>
|
||||
<div class="line">order = 3</div>
|
||||
<div class="line">include_external_domain = true</div>
|
||||
<div class="line">r_core = 1.5</div>
|
||||
<div class="line">r_star = 5.0</div>
|
||||
<div class="line">flattening = 0.08</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 class="line">core_steepness = 1.0</div>
|
||||
<div class="line">surface_bdr_id = 1</div>
|
||||
<div class="line">inf_bdr_id = 2</div>
|
||||
<div class="line">core_id = 1</div>
|
||||
<div class="line">envelope_id = 2</div>
|
||||
<div class="line">vacuum_id = 3</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>
|
||||
@@ -167,7 +172,7 @@ Configuration File</h2>
|
||||
<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>
|
||||
<td class="markdownTableBodyNone">include_external_domain </td><td class="markdownTableBodyNone">Whether to include an external domain extending to r_infinity </td><td class="markdownTableBodyNone">true </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">
|
||||
@@ -179,7 +184,17 @@ Configuration File</h2>
|
||||
<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>
|
||||
<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>
|
||||
<tr class="markdownTableRowEven">
|
||||
<td class="markdownTableBodyNone">surface_bdr_id </td><td class="markdownTableBodyNone">The boundary ID to assign to the surface of the star </td><td class="markdownTableBodyNone">1 </td></tr>
|
||||
<tr class="markdownTableRowOdd">
|
||||
<td class="markdownTableBodyNone">inf_bdr_id </td><td class="markdownTableBodyNone">The boundary ID to assign to the outer boundary of the external domain (if included) </td><td class="markdownTableBodyNone">2 </td></tr>
|
||||
<tr class="markdownTableRowEven">
|
||||
<td class="markdownTableBodyNone">core_id </td><td class="markdownTableBodyNone">The material ID to assign to the core region of the star </td><td class="markdownTableBodyNone">1 </td></tr>
|
||||
<tr class="markdownTableRowOdd">
|
||||
<td class="markdownTableBodyNone">envelope_id </td><td class="markdownTableBodyNone">The material ID to assign to the envelope region of the star </td><td class="markdownTableBodyNone">2 </td></tr>
|
||||
<tr class="markdownTableRowEven">
|
||||
<td class="markdownTableBodyNone">vacuum_id </td><td class="markdownTableBodyNone">The material ID to assign to the vacuum region of the star (if included) </td><td class="markdownTableBodyNone">3 </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>
|
||||
@@ -211,9 +226,9 @@ C++ Interface</h2>
|
||||
<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 &mesh, const std::string &title, VISUALIZATION_MODE mode, const std::string &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 &mesh, const fourdst::config::Config< config::MeshConfig > &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 &mesh, const fourdst::config::Config< config::MeshConfig > &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 &mesh, const fourdst::config::Config< config::MeshConfig > &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_a5907aa2e639cda703d48d177abc37caf"><div class="ttname"><a href="namespacestroid_1_1topology.html#a5907aa2e639cda703d48d177abc37caf">stroid::topology::PromoteToHighOrder</a></div><div class="ttdeci">void PromoteToHighOrder(mfem::Mesh &mesh, const fourdst::config::Config< config::MeshConfig > &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:9</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 &mesh, const fourdst::config::Config< config::MeshConfig > &config)</div><div class="ttdoc">Finalize topology, validate orientation, and apply uniform refinement.</div><div class="ttdef"><b>Definition</b> topology.cpp:90</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 &mesh, const fourdst::config::Config< config::MeshConfig > &config)</div><div class="ttdoc">Project high-order mesh nodes using the configured curvilinear mapping.</div><div class="ttdef"><b>Definition</b> curvilinear.cpp:15</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< mfem::Mesh > BuildSkeleton(const fourdst::config::Config< config::MeshConfig > &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>
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
<tr id="projectrow">
|
||||
<td id="projectlogo"><img alt="Logo" src="Logo.png"/></td>
|
||||
<td id="projectalign">
|
||||
<div id="projectname">stroid<span id="projectnumber"> v0.1.0</span>
|
||||
<div id="projectname">stroid<span id="projectnumber"> v0.2.0</span>
|
||||
</div>
|
||||
<div id="projectbrief">Multi-block curvilinear mesh generation</div>
|
||||
</td>
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
<tr id="projectrow">
|
||||
<td id="projectlogo"><img alt="Logo" src="Logo.png"/></td>
|
||||
<td id="projectalign">
|
||||
<div id="projectname">stroid<span id="projectnumber"> v0.1.0</span>
|
||||
<div id="projectname">stroid<span id="projectnumber"> v0.2.0</span>
|
||||
</div>
|
||||
<div id="projectbrief">Multi-block curvilinear mesh generation</div>
|
||||
</td>
|
||||
@@ -131,9 +131,6 @@ Functions</h2></td></tr>
|
||||
<tr class="memitem:a7fbf58c40c03bc751d53f4a3273744fc" id="r_a7fbf58c40c03bc751d53f4a3273744fc"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="namespacestroid_1_1topology.html#a7fbf58c40c03bc751d53f4a3273744fc">stroid::topology::ApplySpheroidal</a> (mfem::Vector &pos, const fourdst::config::Config< <a class="el" href="structstroid_1_1config_1_1_mesh_config.html">config::MeshConfig</a> > &config)</td></tr>
|
||||
<tr class="memdesc:a7fbf58c40c03bc751d53f4a3273744fc"><td class="mdescLeft"> </td><td class="mdescRight">Apply spheroidal flattening along the Z axis. <br /></td></tr>
|
||||
<tr class="separator:a7fbf58c40c03bc751d53f4a3273744fc"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:a59c54a10f726d323f8506b4a2edd7467" id="r_a59c54a10f726d323f8506b4a2edd7467"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="namespacestroid_1_1topology.html#a59c54a10f726d323f8506b4a2edd7467">stroid::topology::ApplyKelvin</a> (mfem::Vector &pos, const fourdst::config::Config< <a class="el" href="structstroid_1_1config_1_1_mesh_config.html">config::MeshConfig</a> > &config)</td></tr>
|
||||
<tr class="memdesc:a59c54a10f726d323f8506b4a2edd7467"><td class="mdescLeft"> </td><td class="mdescRight">Apply Kelvin transform outside the stellar radius. <br /></td></tr>
|
||||
<tr class="separator:a59c54a10f726d323f8506b4a2edd7467"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:a394e33bdfafdaccd6edfaae0642d3456" id="r_a394e33bdfafdaccd6edfaae0642d3456"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="namespacestroid_1_1topology.html#a394e33bdfafdaccd6edfaae0642d3456">stroid::topology::TransformPoint</a> (mfem::Vector &pos, const fourdst::config::Config< <a class="el" href="structstroid_1_1config_1_1_mesh_config.html">config::MeshConfig</a> > &config, int attribute_id)</td></tr>
|
||||
<tr class="memdesc:a394e33bdfafdaccd6edfaae0642d3456"><td class="mdescLeft"> </td><td class="mdescRight">Map a point from the initial block topology to the curvilinear domain. <br /></td></tr>
|
||||
<tr class="separator:a394e33bdfafdaccd6edfaae0642d3456"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
var mapping_8cpp =
|
||||
[
|
||||
[ "stroid::topology::ApplyEquiangular", "namespacestroid_1_1topology.html#a03f0b29ccf7d427a175de9ff75824b7c", null ],
|
||||
[ "stroid::topology::ApplyKelvin", "namespacestroid_1_1topology.html#a59c54a10f726d323f8506b4a2edd7467", null ],
|
||||
[ "stroid::topology::ApplySpheroidal", "namespacestroid_1_1topology.html#a7fbf58c40c03bc751d53f4a3273744fc", null ],
|
||||
[ "stroid::topology::TransformPoint", "namespacestroid_1_1topology.html#a394e33bdfafdaccd6edfaae0642d3456", null ]
|
||||
];
|
||||
@@ -31,7 +31,7 @@
|
||||
<tr id="projectrow">
|
||||
<td id="projectlogo"><img alt="Logo" src="Logo.png"/></td>
|
||||
<td id="projectalign">
|
||||
<div id="projectname">stroid<span id="projectnumber"> v0.1.0</span>
|
||||
<div id="projectname">stroid<span id="projectnumber"> v0.2.0</span>
|
||||
</div>
|
||||
<div id="projectbrief">Multi-block curvilinear mesh generation</div>
|
||||
</td>
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
<tr id="projectrow">
|
||||
<td id="projectlogo"><img alt="Logo" src="Logo.png"/></td>
|
||||
<td id="projectalign">
|
||||
<div id="projectname">stroid<span id="projectnumber"> v0.1.0</span>
|
||||
<div id="projectname">stroid<span id="projectnumber"> v0.2.0</span>
|
||||
</div>
|
||||
<div id="projectbrief">Multi-block curvilinear mesh generation</div>
|
||||
</td>
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
<tr id="projectrow">
|
||||
<td id="projectlogo"><img alt="Logo" src="Logo.png"/></td>
|
||||
<td id="projectalign">
|
||||
<div id="projectname">stroid<span id="projectnumber"> v0.1.0</span>
|
||||
<div id="projectname">stroid<span id="projectnumber"> v0.2.0</span>
|
||||
</div>
|
||||
<div id="projectbrief">Multi-block curvilinear mesh generation</div>
|
||||
</td>
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
<tr id="projectrow">
|
||||
<td id="projectlogo"><img alt="Logo" src="Logo.png"/></td>
|
||||
<td id="projectalign">
|
||||
<div id="projectname">stroid<span id="projectnumber"> v0.1.0</span>
|
||||
<div id="projectname">stroid<span id="projectnumber"> v0.2.0</span>
|
||||
</div>
|
||||
<div id="projectbrief">Multi-block curvilinear mesh generation</div>
|
||||
</td>
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
<tr id="projectrow">
|
||||
<td id="projectlogo"><img alt="Logo" src="Logo.png"/></td>
|
||||
<td id="projectalign">
|
||||
<div id="projectname">stroid<span id="projectnumber"> v0.1.0</span>
|
||||
<div id="projectname">stroid<span id="projectnumber"> v0.2.0</span>
|
||||
</div>
|
||||
<div id="projectbrief">Multi-block curvilinear mesh generation</div>
|
||||
</td>
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
<tr id="projectrow">
|
||||
<td id="projectlogo"><img alt="Logo" src="Logo.png"/></td>
|
||||
<td id="projectalign">
|
||||
<div id="projectname">stroid<span id="projectnumber"> v0.1.0</span>
|
||||
<div id="projectname">stroid<span id="projectnumber"> v0.2.0</span>
|
||||
</div>
|
||||
<div id="projectbrief">Multi-block curvilinear mesh generation</div>
|
||||
</td>
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
<tr id="projectrow">
|
||||
<td id="projectlogo"><img alt="Logo" src="Logo.png"/></td>
|
||||
<td id="projectalign">
|
||||
<div id="projectname">stroid<span id="projectnumber"> v0.1.0</span>
|
||||
<div id="projectname">stroid<span id="projectnumber"> v0.2.0</span>
|
||||
</div>
|
||||
<div id="projectbrief">Multi-block curvilinear mesh generation</div>
|
||||
</td>
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
<tr id="projectrow">
|
||||
<td id="projectlogo"><img alt="Logo" src="Logo.png"/></td>
|
||||
<td id="projectalign">
|
||||
<div id="projectname">stroid<span id="projectnumber"> v0.1.0</span>
|
||||
<div id="projectname">stroid<span id="projectnumber"> v0.2.0</span>
|
||||
</div>
|
||||
<div id="projectbrief">Multi-block curvilinear mesh generation</div>
|
||||
</td>
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
<tr id="projectrow">
|
||||
<td id="projectlogo"><img alt="Logo" src="Logo.png"/></td>
|
||||
<td id="projectalign">
|
||||
<div id="projectname">stroid<span id="projectnumber"> v0.1.0</span>
|
||||
<div id="projectname">stroid<span id="projectnumber"> v0.2.0</span>
|
||||
</div>
|
||||
<div id="projectbrief">Multi-block curvilinear mesh generation</div>
|
||||
</td>
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
<tr id="projectrow">
|
||||
<td id="projectlogo"><img alt="Logo" src="Logo.png"/></td>
|
||||
<td id="projectalign">
|
||||
<div id="projectname">stroid<span id="projectnumber"> v0.1.0</span>
|
||||
<div id="projectname">stroid<span id="projectnumber"> v0.2.0</span>
|
||||
</div>
|
||||
<div id="projectbrief">Multi-block curvilinear mesh generation</div>
|
||||
</td>
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
<tr id="projectrow">
|
||||
<td id="projectlogo"><img alt="Logo" src="Logo.png"/></td>
|
||||
<td id="projectalign">
|
||||
<div id="projectname">stroid<span id="projectnumber"> v0.1.0</span>
|
||||
<div id="projectname">stroid<span id="projectnumber"> v0.2.0</span>
|
||||
</div>
|
||||
<div id="projectbrief">Multi-block curvilinear mesh generation</div>
|
||||
</td>
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
<tr id="projectrow">
|
||||
<td id="projectlogo"><img alt="Logo" src="Logo.png"/></td>
|
||||
<td id="projectalign">
|
||||
<div id="projectname">stroid<span id="projectnumber"> v0.1.0</span>
|
||||
<div id="projectname">stroid<span id="projectnumber"> v0.2.0</span>
|
||||
</div>
|
||||
<div id="projectbrief">Multi-block curvilinear mesh generation</div>
|
||||
</td>
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
<tr id="projectrow">
|
||||
<td id="projectlogo"><img alt="Logo" src="Logo.png"/></td>
|
||||
<td id="projectalign">
|
||||
<div id="projectname">stroid<span id="projectnumber"> v0.1.0</span>
|
||||
<div id="projectname">stroid<span id="projectnumber"> v0.2.0</span>
|
||||
</div>
|
||||
<div id="projectbrief">Multi-block curvilinear mesh generation</div>
|
||||
</td>
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
<tr id="projectrow">
|
||||
<td id="projectlogo"><img alt="Logo" src="Logo.png"/></td>
|
||||
<td id="projectalign">
|
||||
<div id="projectname">stroid<span id="projectnumber"> v0.1.0</span>
|
||||
<div id="projectname">stroid<span id="projectnumber"> v0.2.0</span>
|
||||
</div>
|
||||
<div id="projectbrief">Multi-block curvilinear mesh generation</div>
|
||||
</td>
|
||||
|
||||
@@ -67,24 +67,34 @@ var NAVTREEINDEX0 =
|
||||
"pages.html":[],
|
||||
"structstroid_1_1config_1_1_mesh_config.html":[3,0,0,0,0],
|
||||
"structstroid_1_1config_1_1_mesh_config.html":[4,0,0,0,0],
|
||||
"structstroid_1_1config_1_1_mesh_config.html#a062652781f4f3ea0b7ca8764362a7368":[3,0,0,0,0,2],
|
||||
"structstroid_1_1config_1_1_mesh_config.html#a062652781f4f3ea0b7ca8764362a7368":[4,0,0,0,0,2],
|
||||
"structstroid_1_1config_1_1_mesh_config.html#a3fe80a30990d484dcc39b6f9a0befc05":[3,0,0,0,0,7],
|
||||
"structstroid_1_1config_1_1_mesh_config.html#a3fe80a30990d484dcc39b6f9a0befc05":[4,0,0,0,0,7],
|
||||
"structstroid_1_1config_1_1_mesh_config.html#a4da6d99ff7ba24d2f917e1fd98ddd877":[3,0,0,0,0,6],
|
||||
"structstroid_1_1config_1_1_mesh_config.html#a4da6d99ff7ba24d2f917e1fd98ddd877":[4,0,0,0,0,6],
|
||||
"structstroid_1_1config_1_1_mesh_config.html#a5c68a895f73dc82a38a8daac22a83ad7":[3,0,0,0,0,4],
|
||||
"structstroid_1_1config_1_1_mesh_config.html#a5c68a895f73dc82a38a8daac22a83ad7":[4,0,0,0,0,4],
|
||||
"structstroid_1_1config_1_1_mesh_config.html#a860e78f1906acb0c3aa08d55f94de3fd":[3,0,0,0,0,3],
|
||||
"structstroid_1_1config_1_1_mesh_config.html#a860e78f1906acb0c3aa08d55f94de3fd":[4,0,0,0,0,3],
|
||||
"structstroid_1_1config_1_1_mesh_config.html#a8cafcbebf64ae251517118eb152de981":[3,0,0,0,0,8],
|
||||
"structstroid_1_1config_1_1_mesh_config.html#a8cafcbebf64ae251517118eb152de981":[4,0,0,0,0,8],
|
||||
"structstroid_1_1config_1_1_mesh_config.html#ac7546899ebbfe191ea3a8bf2403b31eb":[3,0,0,0,0,5],
|
||||
"structstroid_1_1config_1_1_mesh_config.html#ac7546899ebbfe191ea3a8bf2403b31eb":[4,0,0,0,0,5],
|
||||
"structstroid_1_1config_1_1_mesh_config.html#aed32864839b149c94842801b6413d94d":[3,0,0,0,0,0],
|
||||
"structstroid_1_1config_1_1_mesh_config.html#aed32864839b149c94842801b6413d94d":[4,0,0,0,0,0],
|
||||
"structstroid_1_1config_1_1_mesh_config.html#affad4638b0ae7b710f2b2db992f6f584":[3,0,0,0,0,1],
|
||||
"structstroid_1_1config_1_1_mesh_config.html#affad4638b0ae7b710f2b2db992f6f584":[4,0,0,0,0,1],
|
||||
"structstroid_1_1config_1_1_mesh_config.html#a062652781f4f3ea0b7ca8764362a7368":[3,0,0,0,0,4],
|
||||
"structstroid_1_1config_1_1_mesh_config.html#a062652781f4f3ea0b7ca8764362a7368":[4,0,0,0,0,4],
|
||||
"structstroid_1_1config_1_1_mesh_config.html#a2faa5aa1fef84ebbda30590d3fb2799b":[3,0,0,0,0,0],
|
||||
"structstroid_1_1config_1_1_mesh_config.html#a2faa5aa1fef84ebbda30590d3fb2799b":[4,0,0,0,0,0],
|
||||
"structstroid_1_1config_1_1_mesh_config.html#a33f25ff277aa8834065e04ccb9cdbdda":[3,0,0,0,0,12],
|
||||
"structstroid_1_1config_1_1_mesh_config.html#a33f25ff277aa8834065e04ccb9cdbdda":[4,0,0,0,0,12],
|
||||
"structstroid_1_1config_1_1_mesh_config.html#a36c7b05405691393d381086a27ea36ad":[3,0,0,0,0,13],
|
||||
"structstroid_1_1config_1_1_mesh_config.html#a36c7b05405691393d381086a27ea36ad":[4,0,0,0,0,13],
|
||||
"structstroid_1_1config_1_1_mesh_config.html#a3fe80a30990d484dcc39b6f9a0befc05":[3,0,0,0,0,10],
|
||||
"structstroid_1_1config_1_1_mesh_config.html#a3fe80a30990d484dcc39b6f9a0befc05":[4,0,0,0,0,10],
|
||||
"structstroid_1_1config_1_1_mesh_config.html#a4da6d99ff7ba24d2f917e1fd98ddd877":[3,0,0,0,0,9],
|
||||
"structstroid_1_1config_1_1_mesh_config.html#a4da6d99ff7ba24d2f917e1fd98ddd877":[4,0,0,0,0,9],
|
||||
"structstroid_1_1config_1_1_mesh_config.html#a5c68a895f73dc82a38a8daac22a83ad7":[3,0,0,0,0,7],
|
||||
"structstroid_1_1config_1_1_mesh_config.html#a5c68a895f73dc82a38a8daac22a83ad7":[4,0,0,0,0,7],
|
||||
"structstroid_1_1config_1_1_mesh_config.html#a64cb00c8cba27267279a52207a4b5be0":[3,0,0,0,0,5],
|
||||
"structstroid_1_1config_1_1_mesh_config.html#a64cb00c8cba27267279a52207a4b5be0":[4,0,0,0,0,5],
|
||||
"structstroid_1_1config_1_1_mesh_config.html#a860e78f1906acb0c3aa08d55f94de3fd":[3,0,0,0,0,6],
|
||||
"structstroid_1_1config_1_1_mesh_config.html#a860e78f1906acb0c3aa08d55f94de3fd":[4,0,0,0,0,6],
|
||||
"structstroid_1_1config_1_1_mesh_config.html#a8cafcbebf64ae251517118eb152de981":[3,0,0,0,0,11],
|
||||
"structstroid_1_1config_1_1_mesh_config.html#a8cafcbebf64ae251517118eb152de981":[4,0,0,0,0,11],
|
||||
"structstroid_1_1config_1_1_mesh_config.html#ac7546899ebbfe191ea3a8bf2403b31eb":[3,0,0,0,0,8],
|
||||
"structstroid_1_1config_1_1_mesh_config.html#ac7546899ebbfe191ea3a8bf2403b31eb":[4,0,0,0,0,8],
|
||||
"structstroid_1_1config_1_1_mesh_config.html#ac99aa48fe3e71e2ef57b09d48cacfef8":[3,0,0,0,0,2],
|
||||
"structstroid_1_1config_1_1_mesh_config.html#ac99aa48fe3e71e2ef57b09d48cacfef8":[4,0,0,0,0,2],
|
||||
"structstroid_1_1config_1_1_mesh_config.html#aed32864839b149c94842801b6413d94d":[3,0,0,0,0,1],
|
||||
"structstroid_1_1config_1_1_mesh_config.html#aed32864839b149c94842801b6413d94d":[4,0,0,0,0,1],
|
||||
"structstroid_1_1config_1_1_mesh_config.html#affad4638b0ae7b710f2b2db992f6f584":[3,0,0,0,0,3],
|
||||
"structstroid_1_1config_1_1_mesh_config.html#affad4638b0ae7b710f2b2db992f6f584":[4,0,0,0,0,3],
|
||||
"topology_8cpp.html":[5,0,1,1,1,2],
|
||||
"topology_8h.html":[5,0,1,0,0,2,2]
|
||||
};
|
||||
|
||||
@@ -3,7 +3,8 @@ var searchData=
|
||||
['c_20interface_0',['C++ Interface',['../index.html#autotoc_md7',1,'']]],
|
||||
['config_2eh_1',['config.h',['../config_8h.html',1,'']]],
|
||||
['configuration_20file_2',['Configuration File',['../index.html#autotoc_md6',1,'']]],
|
||||
['core_5fsteepness_3',['core_steepness',['../structstroid_1_1config_1_1_mesh_config.html#aed32864839b149c94842801b6413d94d',1,'stroid::config::MeshConfig']]],
|
||||
['curvilinear_2ecpp_4',['curvilinear.cpp',['../curvilinear_8cpp.html',1,'']]],
|
||||
['curvilinear_2eh_5',['curvilinear.h',['../curvilinear_8h.html',1,'']]]
|
||||
['core_5fid_3',['core_id',['../structstroid_1_1config_1_1_mesh_config.html#a2faa5aa1fef84ebbda30590d3fb2799b',1,'stroid::config::MeshConfig']]],
|
||||
['core_5fsteepness_4',['core_steepness',['../structstroid_1_1config_1_1_mesh_config.html#aed32864839b149c94842801b6413d94d',1,'stroid::config::MeshConfig']]],
|
||||
['curvilinear_2ecpp_5',['curvilinear.cpp',['../curvilinear_8cpp.html',1,'']]],
|
||||
['curvilinear_2eh_6',['curvilinear.h',['../curvilinear_8h.html',1,'']]]
|
||||
];
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
var searchData=
|
||||
[
|
||||
['element_5fid_0',['ELEMENT_ID',['../namespacestroid_1_1_i_o.html#ad4048304d8a0c7075d2b2a6e465d0b6eac31a2fe3e97d218a154c1947b43d6bbf',1,'stroid::IO']]]
|
||||
['element_5fid_0',['ELEMENT_ID',['../namespacestroid_1_1_i_o.html#ad4048304d8a0c7075d2b2a6e465d0b6eac31a2fe3e97d218a154c1947b43d6bbf',1,'stroid::IO']]],
|
||||
['envelope_5fid_1',['envelope_id',['../structstroid_1_1config_1_1_mesh_config.html#ac99aa48fe3e71e2ef57b09d48cacfef8',1,'stroid::config::MeshConfig']]]
|
||||
];
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
var searchData=
|
||||
[
|
||||
['include_5fexternal_5fdomain_0',['include_external_domain',['../structstroid_1_1config_1_1_mesh_config.html#a062652781f4f3ea0b7ca8764362a7368',1,'stroid::config::MeshConfig']]],
|
||||
['installing_1',['Building and Installing',['../index.html#autotoc_md2',1,'']]],
|
||||
['interface_2',['C++ Interface',['../index.html#autotoc_md7',1,'']]]
|
||||
['inf_5fbdr_5fid_1',['inf_bdr_id',['../structstroid_1_1config_1_1_mesh_config.html#a64cb00c8cba27267279a52207a4b5be0',1,'stroid::config::MeshConfig']]],
|
||||
['installing_2',['Building and Installing',['../index.html#autotoc_md2',1,'']]],
|
||||
['interface_3',['C++ Interface',['../index.html#autotoc_md7',1,'']]]
|
||||
];
|
||||
|
||||
@@ -8,5 +8,6 @@ var searchData=
|
||||
['stroid_3a_3aconfig_5',['config',['../namespacestroid_1_1config.html',1,'stroid']]],
|
||||
['stroid_3a_3aio_6',['IO',['../namespacestroid_1_1_i_o.html',1,'stroid']]],
|
||||
['stroid_3a_3atopology_7',['topology',['../namespacestroid_1_1topology.html',1,'stroid']]],
|
||||
['stroid_3a_3autils_8',['utils',['../namespacestroid_1_1utils.html',1,'stroid']]]
|
||||
['stroid_3a_3autils_8',['utils',['../namespacestroid_1_1utils.html',1,'stroid']]],
|
||||
['surface_5fbdr_5fid_9',['surface_bdr_id',['../structstroid_1_1config_1_1_mesh_config.html#a33f25ff277aa8834065e04ccb9cdbdda',1,'stroid::config::MeshConfig']]]
|
||||
];
|
||||
|
||||
@@ -5,7 +5,7 @@ var indexSectionsWithContent =
|
||||
2: "s",
|
||||
3: "clmt",
|
||||
4: "abfmpstv",
|
||||
5: "cfior",
|
||||
5: "cefiorsv",
|
||||
6: "v",
|
||||
7: "ben",
|
||||
8: "s"
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
var searchData=
|
||||
[
|
||||
['core_5fsteepness_0',['core_steepness',['../structstroid_1_1config_1_1_mesh_config.html#aed32864839b149c94842801b6413d94d',1,'stroid::config::MeshConfig']]]
|
||||
['core_5fid_0',['core_id',['../structstroid_1_1config_1_1_mesh_config.html#a2faa5aa1fef84ebbda30590d3fb2799b',1,'stroid::config::MeshConfig']]],
|
||||
['core_5fsteepness_1',['core_steepness',['../structstroid_1_1config_1_1_mesh_config.html#aed32864839b149c94842801b6413d94d',1,'stroid::config::MeshConfig']]]
|
||||
];
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
var searchData=
|
||||
[
|
||||
['flattening_0',['flattening',['../structstroid_1_1config_1_1_mesh_config.html#affad4638b0ae7b710f2b2db992f6f584',1,'stroid::config::MeshConfig']]]
|
||||
['envelope_5fid_0',['envelope_id',['../structstroid_1_1config_1_1_mesh_config.html#ac99aa48fe3e71e2ef57b09d48cacfef8',1,'stroid::config::MeshConfig']]]
|
||||
];
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
var searchData=
|
||||
[
|
||||
['include_5fexternal_5fdomain_0',['include_external_domain',['../structstroid_1_1config_1_1_mesh_config.html#a062652781f4f3ea0b7ca8764362a7368',1,'stroid::config::MeshConfig']]]
|
||||
['flattening_0',['flattening',['../structstroid_1_1config_1_1_mesh_config.html#affad4638b0ae7b710f2b2db992f6f584',1,'stroid::config::MeshConfig']]]
|
||||
];
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
var searchData=
|
||||
[
|
||||
['order_0',['order',['../structstroid_1_1config_1_1_mesh_config.html#a860e78f1906acb0c3aa08d55f94de3fd',1,'stroid::config::MeshConfig']]]
|
||||
['include_5fexternal_5fdomain_0',['include_external_domain',['../structstroid_1_1config_1_1_mesh_config.html#a062652781f4f3ea0b7ca8764362a7368',1,'stroid::config::MeshConfig']]],
|
||||
['inf_5fbdr_5fid_1',['inf_bdr_id',['../structstroid_1_1config_1_1_mesh_config.html#a64cb00c8cba27267279a52207a4b5be0',1,'stroid::config::MeshConfig']]]
|
||||
];
|
||||
|
||||
@@ -1,8 +1,4 @@
|
||||
var searchData=
|
||||
[
|
||||
['r_5fcore_0',['r_core',['../structstroid_1_1config_1_1_mesh_config.html#a5c68a895f73dc82a38a8daac22a83ad7',1,'stroid::config::MeshConfig']]],
|
||||
['r_5finfinity_1',['r_infinity',['../structstroid_1_1config_1_1_mesh_config.html#ac7546899ebbfe191ea3a8bf2403b31eb',1,'stroid::config::MeshConfig']]],
|
||||
['r_5finstability_2',['r_instability',['../structstroid_1_1config_1_1_mesh_config.html#a4da6d99ff7ba24d2f917e1fd98ddd877',1,'stroid::config::MeshConfig']]],
|
||||
['r_5fstar_3',['r_star',['../structstroid_1_1config_1_1_mesh_config.html#a3fe80a30990d484dcc39b6f9a0befc05',1,'stroid::config::MeshConfig']]],
|
||||
['refinement_5flevels_4',['refinement_levels',['../structstroid_1_1config_1_1_mesh_config.html#a8cafcbebf64ae251517118eb152de981',1,'stroid::config::MeshConfig']]]
|
||||
['order_0',['order',['../structstroid_1_1config_1_1_mesh_config.html#a860e78f1906acb0c3aa08d55f94de3fd',1,'stroid::config::MeshConfig']]]
|
||||
];
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
<tr id="projectrow">
|
||||
<td id="projectlogo"><img alt="Logo" src="Logo.png"/></td>
|
||||
<td id="projectalign">
|
||||
<div id="projectname">stroid<span id="projectnumber"> v0.1.0</span>
|
||||
<div id="projectname">stroid<span id="projectnumber"> v0.2.0</span>
|
||||
</div>
|
||||
<div id="projectbrief">Multi-block curvilinear mesh generation</div>
|
||||
</td>
|
||||
@@ -107,15 +107,20 @@ $(function(){initNavTree('structstroid_1_1config_1_1_mesh_config.html',''); init
|
||||
|
||||
<p>This is the complete list of members for <a class="el" href="structstroid_1_1config_1_1_mesh_config.html">stroid::config::MeshConfig</a>, including all inherited members.</p>
|
||||
<table class="directory">
|
||||
<tr class="even"><td class="entry"><a class="el" href="structstroid_1_1config_1_1_mesh_config.html#aed32864839b149c94842801b6413d94d">core_steepness</a></td><td class="entry"><a class="el" href="structstroid_1_1config_1_1_mesh_config.html">stroid::config::MeshConfig</a></td><td class="entry"></td></tr>
|
||||
<tr class="even"><td class="entry"><a class="el" href="structstroid_1_1config_1_1_mesh_config.html#a2faa5aa1fef84ebbda30590d3fb2799b">core_id</a></td><td class="entry"><a class="el" href="structstroid_1_1config_1_1_mesh_config.html">stroid::config::MeshConfig</a></td><td class="entry"></td></tr>
|
||||
<tr class="odd"><td class="entry"><a class="el" href="structstroid_1_1config_1_1_mesh_config.html#aed32864839b149c94842801b6413d94d">core_steepness</a></td><td class="entry"><a class="el" href="structstroid_1_1config_1_1_mesh_config.html">stroid::config::MeshConfig</a></td><td class="entry"></td></tr>
|
||||
<tr class="even"><td class="entry"><a class="el" href="structstroid_1_1config_1_1_mesh_config.html#ac99aa48fe3e71e2ef57b09d48cacfef8">envelope_id</a></td><td class="entry"><a class="el" href="structstroid_1_1config_1_1_mesh_config.html">stroid::config::MeshConfig</a></td><td class="entry"></td></tr>
|
||||
<tr class="odd"><td class="entry"><a class="el" href="structstroid_1_1config_1_1_mesh_config.html#affad4638b0ae7b710f2b2db992f6f584">flattening</a></td><td class="entry"><a class="el" href="structstroid_1_1config_1_1_mesh_config.html">stroid::config::MeshConfig</a></td><td class="entry"></td></tr>
|
||||
<tr class="even"><td class="entry"><a class="el" href="structstroid_1_1config_1_1_mesh_config.html#a062652781f4f3ea0b7ca8764362a7368">include_external_domain</a></td><td class="entry"><a class="el" href="structstroid_1_1config_1_1_mesh_config.html">stroid::config::MeshConfig</a></td><td class="entry"></td></tr>
|
||||
<tr class="odd"><td class="entry"><a class="el" href="structstroid_1_1config_1_1_mesh_config.html#a860e78f1906acb0c3aa08d55f94de3fd">order</a></td><td class="entry"><a class="el" href="structstroid_1_1config_1_1_mesh_config.html">stroid::config::MeshConfig</a></td><td class="entry"></td></tr>
|
||||
<tr class="even"><td class="entry"><a class="el" href="structstroid_1_1config_1_1_mesh_config.html#a5c68a895f73dc82a38a8daac22a83ad7">r_core</a></td><td class="entry"><a class="el" href="structstroid_1_1config_1_1_mesh_config.html">stroid::config::MeshConfig</a></td><td class="entry"></td></tr>
|
||||
<tr class="odd"><td class="entry"><a class="el" href="structstroid_1_1config_1_1_mesh_config.html#ac7546899ebbfe191ea3a8bf2403b31eb">r_infinity</a></td><td class="entry"><a class="el" href="structstroid_1_1config_1_1_mesh_config.html">stroid::config::MeshConfig</a></td><td class="entry"></td></tr>
|
||||
<tr class="even"><td class="entry"><a class="el" href="structstroid_1_1config_1_1_mesh_config.html#a4da6d99ff7ba24d2f917e1fd98ddd877">r_instability</a></td><td class="entry"><a class="el" href="structstroid_1_1config_1_1_mesh_config.html">stroid::config::MeshConfig</a></td><td class="entry"></td></tr>
|
||||
<tr class="odd"><td class="entry"><a class="el" href="structstroid_1_1config_1_1_mesh_config.html#a3fe80a30990d484dcc39b6f9a0befc05">r_star</a></td><td class="entry"><a class="el" href="structstroid_1_1config_1_1_mesh_config.html">stroid::config::MeshConfig</a></td><td class="entry"></td></tr>
|
||||
<tr class="even"><td class="entry"><a class="el" href="structstroid_1_1config_1_1_mesh_config.html#a8cafcbebf64ae251517118eb152de981">refinement_levels</a></td><td class="entry"><a class="el" href="structstroid_1_1config_1_1_mesh_config.html">stroid::config::MeshConfig</a></td><td class="entry"></td></tr>
|
||||
<tr class="odd"><td class="entry"><a class="el" href="structstroid_1_1config_1_1_mesh_config.html#a64cb00c8cba27267279a52207a4b5be0">inf_bdr_id</a></td><td class="entry"><a class="el" href="structstroid_1_1config_1_1_mesh_config.html">stroid::config::MeshConfig</a></td><td class="entry"></td></tr>
|
||||
<tr class="even"><td class="entry"><a class="el" href="structstroid_1_1config_1_1_mesh_config.html#a860e78f1906acb0c3aa08d55f94de3fd">order</a></td><td class="entry"><a class="el" href="structstroid_1_1config_1_1_mesh_config.html">stroid::config::MeshConfig</a></td><td class="entry"></td></tr>
|
||||
<tr class="odd"><td class="entry"><a class="el" href="structstroid_1_1config_1_1_mesh_config.html#a5c68a895f73dc82a38a8daac22a83ad7">r_core</a></td><td class="entry"><a class="el" href="structstroid_1_1config_1_1_mesh_config.html">stroid::config::MeshConfig</a></td><td class="entry"></td></tr>
|
||||
<tr class="even"><td class="entry"><a class="el" href="structstroid_1_1config_1_1_mesh_config.html#ac7546899ebbfe191ea3a8bf2403b31eb">r_infinity</a></td><td class="entry"><a class="el" href="structstroid_1_1config_1_1_mesh_config.html">stroid::config::MeshConfig</a></td><td class="entry"></td></tr>
|
||||
<tr class="odd"><td class="entry"><a class="el" href="structstroid_1_1config_1_1_mesh_config.html#a4da6d99ff7ba24d2f917e1fd98ddd877">r_instability</a></td><td class="entry"><a class="el" href="structstroid_1_1config_1_1_mesh_config.html">stroid::config::MeshConfig</a></td><td class="entry"></td></tr>
|
||||
<tr class="even"><td class="entry"><a class="el" href="structstroid_1_1config_1_1_mesh_config.html#a3fe80a30990d484dcc39b6f9a0befc05">r_star</a></td><td class="entry"><a class="el" href="structstroid_1_1config_1_1_mesh_config.html">stroid::config::MeshConfig</a></td><td class="entry"></td></tr>
|
||||
<tr class="odd"><td class="entry"><a class="el" href="structstroid_1_1config_1_1_mesh_config.html#a8cafcbebf64ae251517118eb152de981">refinement_levels</a></td><td class="entry"><a class="el" href="structstroid_1_1config_1_1_mesh_config.html">stroid::config::MeshConfig</a></td><td class="entry"></td></tr>
|
||||
<tr class="even"><td class="entry"><a class="el" href="structstroid_1_1config_1_1_mesh_config.html#a33f25ff277aa8834065e04ccb9cdbdda">surface_bdr_id</a></td><td class="entry"><a class="el" href="structstroid_1_1config_1_1_mesh_config.html">stroid::config::MeshConfig</a></td><td class="entry"></td></tr>
|
||||
<tr class="odd"><td class="entry"><a class="el" href="structstroid_1_1config_1_1_mesh_config.html#a36c7b05405691393d381086a27ea36ad">vacuum_id</a></td><td class="entry"><a class="el" href="structstroid_1_1config_1_1_mesh_config.html">stroid::config::MeshConfig</a></td><td class="entry"></td></tr>
|
||||
</table></div><!-- contents -->
|
||||
</div><!-- doc-content -->
|
||||
<!-- start footer part -->
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
<tr id="projectrow">
|
||||
<td id="projectlogo"><img alt="Logo" src="Logo.png"/></td>
|
||||
<td id="projectalign">
|
||||
<div id="projectname">stroid<span id="projectnumber"> v0.1.0</span>
|
||||
<div id="projectname">stroid<span id="projectnumber"> v0.2.0</span>
|
||||
</div>
|
||||
<div id="projectbrief">Multi-block curvilinear mesh generation</div>
|
||||
</td>
|
||||
@@ -116,37 +116,73 @@ $(function(){initNavTree('structstroid_1_1config_1_1_mesh_config.html',''); init
|
||||
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pub-attribs" name="pub-attribs"></a>
|
||||
Public Attributes</h2></td></tr>
|
||||
<tr class="memitem:a8cafcbebf64ae251517118eb152de981" id="r_a8cafcbebf64ae251517118eb152de981"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="#a8cafcbebf64ae251517118eb152de981">refinement_levels</a> = 4</td></tr>
|
||||
<tr class="memdesc:a8cafcbebf64ae251517118eb152de981"><td class="mdescLeft"> </td><td class="mdescRight">Number of uniform refinement passes applied after topology creation. @toml [main].refinement_levels. <br /></td></tr>
|
||||
<tr class="memdesc:a8cafcbebf64ae251517118eb152de981"><td class="mdescLeft"> </td><td class="mdescRight">Number of uniform refinement passes applied after topology creation. <br /></td></tr>
|
||||
<tr class="separator:a8cafcbebf64ae251517118eb152de981"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:a860e78f1906acb0c3aa08d55f94de3fd" id="r_a860e78f1906acb0c3aa08d55f94de3fd"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="#a860e78f1906acb0c3aa08d55f94de3fd">order</a> = 3</td></tr>
|
||||
<tr class="memdesc:a860e78f1906acb0c3aa08d55f94de3fd"><td class="mdescLeft"> </td><td class="mdescRight">Polynomial order for high-order elements. @toml [main].order. <br /></td></tr>
|
||||
<tr class="memdesc:a860e78f1906acb0c3aa08d55f94de3fd"><td class="mdescLeft"> </td><td class="mdescRight">Polynomial order for high-order elements. <br /></td></tr>
|
||||
<tr class="separator:a860e78f1906acb0c3aa08d55f94de3fd"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:a062652781f4f3ea0b7ca8764362a7368" id="r_a062652781f4f3ea0b7ca8764362a7368"><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="#a062652781f4f3ea0b7ca8764362a7368">include_external_domain</a> = false</td></tr>
|
||||
<tr class="memitem:a062652781f4f3ea0b7ca8764362a7368" id="r_a062652781f4f3ea0b7ca8764362a7368"><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="#a062652781f4f3ea0b7ca8764362a7368">include_external_domain</a> = true</td></tr>
|
||||
<tr class="memdesc:a062652781f4f3ea0b7ca8764362a7368"><td class="mdescLeft"> </td><td class="mdescRight">Whether to include an external domain extending to <code>r_infinity</code>. <br /></td></tr>
|
||||
<tr class="separator:a062652781f4f3ea0b7ca8764362a7368"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:a5c68a895f73dc82a38a8daac22a83ad7" id="r_a5c68a895f73dc82a38a8daac22a83ad7"><td class="memItemLeft" align="right" valign="top">double </td><td class="memItemRight" valign="bottom"><a class="el" href="#a5c68a895f73dc82a38a8daac22a83ad7">r_core</a> = 1.5</td></tr>
|
||||
<tr class="memdesc:a5c68a895f73dc82a38a8daac22a83ad7"><td class="mdescLeft"> </td><td class="mdescRight">Radius of the stellar core region. @toml [main].r_core. <br /></td></tr>
|
||||
<tr class="memdesc:a5c68a895f73dc82a38a8daac22a83ad7"><td class="mdescLeft"> </td><td class="mdescRight">Radius of the stellar core region. <br /></td></tr>
|
||||
<tr class="separator:a5c68a895f73dc82a38a8daac22a83ad7"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:a3fe80a30990d484dcc39b6f9a0befc05" id="r_a3fe80a30990d484dcc39b6f9a0befc05"><td class="memItemLeft" align="right" valign="top">double </td><td class="memItemRight" valign="bottom"><a class="el" href="#a3fe80a30990d484dcc39b6f9a0befc05">r_star</a> = 5.0</td></tr>
|
||||
<tr class="memdesc:a3fe80a30990d484dcc39b6f9a0befc05"><td class="mdescLeft"> </td><td class="mdescRight">Radius of the stellar surface. @toml [main].r_star. <br /></td></tr>
|
||||
<tr class="memdesc:a3fe80a30990d484dcc39b6f9a0befc05"><td class="mdescLeft"> </td><td class="mdescRight">Radius of the stellar surface. <br /></td></tr>
|
||||
<tr class="separator:a3fe80a30990d484dcc39b6f9a0befc05"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:affad4638b0ae7b710f2b2db992f6f584" id="r_affad4638b0ae7b710f2b2db992f6f584"><td class="memItemLeft" align="right" valign="top">double </td><td class="memItemRight" valign="bottom"><a class="el" href="#affad4638b0ae7b710f2b2db992f6f584">flattening</a> = 0</td></tr>
|
||||
<tr class="memdesc:affad4638b0ae7b710f2b2db992f6f584"><td class="mdescLeft"> </td><td class="mdescRight">Flattening factor for spheroidal shaping (0 = spherical, >0 = oblate). @toml [main].flattening. <br /></td></tr>
|
||||
<tr class="memdesc:affad4638b0ae7b710f2b2db992f6f584"><td class="mdescLeft"> </td><td class="mdescRight">Flattening factor for spheroidal shaping (0 = spherical, >0 = oblate). <br /></td></tr>
|
||||
<tr class="separator:affad4638b0ae7b710f2b2db992f6f584"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:ac7546899ebbfe191ea3a8bf2403b31eb" id="r_ac7546899ebbfe191ea3a8bf2403b31eb"><td class="memItemLeft" align="right" valign="top">double </td><td class="memItemRight" valign="bottom"><a class="el" href="#ac7546899ebbfe191ea3a8bf2403b31eb">r_infinity</a> = 6.0</td></tr>
|
||||
<tr class="memdesc:ac7546899ebbfe191ea3a8bf2403b31eb"><td class="mdescLeft"> </td><td class="mdescRight">Outer radius of the external domain when enabled. @toml [main].r_infinity. <br /></td></tr>
|
||||
<tr class="memdesc:ac7546899ebbfe191ea3a8bf2403b31eb"><td class="mdescLeft"> </td><td class="mdescRight">Outer radius of the external domain when enabled. <br /></td></tr>
|
||||
<tr class="separator:ac7546899ebbfe191ea3a8bf2403b31eb"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:a4da6d99ff7ba24d2f917e1fd98ddd877" id="r_a4da6d99ff7ba24d2f917e1fd98ddd877"><td class="memItemLeft" align="right" valign="top">double </td><td class="memItemRight" valign="bottom"><a class="el" href="#a4da6d99ff7ba24d2f917e1fd98ddd877">r_instability</a> = 1e-14</td></tr>
|
||||
<tr class="memdesc:a4da6d99ff7ba24d2f917e1fd98ddd877"><td class="mdescLeft"> </td><td class="mdescRight">Radius inside which transformations are skipped to avoid singularities. @toml [main].r_instability. <br /></td></tr>
|
||||
<tr class="memdesc:a4da6d99ff7ba24d2f917e1fd98ddd877"><td class="mdescLeft"> </td><td class="mdescRight">Radius inside which transformations are skipped to avoid singularities. <br /></td></tr>
|
||||
<tr class="separator:a4da6d99ff7ba24d2f917e1fd98ddd877"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:aed32864839b149c94842801b6413d94d" id="r_aed32864839b149c94842801b6413d94d"><td class="memItemLeft" align="right" valign="top">double </td><td class="memItemRight" valign="bottom"><a class="el" href="#aed32864839b149c94842801b6413d94d">core_steepness</a> = 1.0</td></tr>
|
||||
<tr class="memdesc:aed32864839b149c94842801b6413d94d"><td class="mdescLeft"> </td><td class="mdescRight">Controls the smoothness/steepness of the core-to-envelope transition. @toml [main].core_steepness. <br /></td></tr>
|
||||
<tr class="memdesc:aed32864839b149c94842801b6413d94d"><td class="mdescLeft"> </td><td class="mdescRight">Controls the smoothness/steepness of the core-to-envelope transition. <br /></td></tr>
|
||||
<tr class="separator:aed32864839b149c94842801b6413d94d"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:a33f25ff277aa8834065e04ccb9cdbdda" id="r_a33f25ff277aa8834065e04ccb9cdbdda"><td class="memItemLeft" align="right" valign="top">size_t </td><td class="memItemRight" valign="bottom"><a class="el" href="#a33f25ff277aa8834065e04ccb9cdbdda">surface_bdr_id</a> = 1</td></tr>
|
||||
<tr class="memdesc:a33f25ff277aa8834065e04ccb9cdbdda"><td class="mdescLeft"> </td><td class="mdescRight">Boundary attribute id for stellar surface. <br /></td></tr>
|
||||
<tr class="separator:a33f25ff277aa8834065e04ccb9cdbdda"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:a64cb00c8cba27267279a52207a4b5be0" id="r_a64cb00c8cba27267279a52207a4b5be0"><td class="memItemLeft" align="right" valign="top">size_t </td><td class="memItemRight" valign="bottom"><a class="el" href="#a64cb00c8cba27267279a52207a4b5be0">inf_bdr_id</a> = 2</td></tr>
|
||||
<tr class="memdesc:a64cb00c8cba27267279a52207a4b5be0"><td class="mdescLeft"> </td><td class="mdescRight">Boundary attribute id for infinity in kelvin mapping. <br /></td></tr>
|
||||
<tr class="separator:a64cb00c8cba27267279a52207a4b5be0"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:a2faa5aa1fef84ebbda30590d3fb2799b" id="r_a2faa5aa1fef84ebbda30590d3fb2799b"><td class="memItemLeft" align="right" valign="top">size_t </td><td class="memItemRight" valign="bottom"><a class="el" href="#a2faa5aa1fef84ebbda30590d3fb2799b">core_id</a> = 1</td></tr>
|
||||
<tr class="memdesc:a2faa5aa1fef84ebbda30590d3fb2799b"><td class="mdescLeft"> </td><td class="mdescRight">Material attribute id for the core region. <br /></td></tr>
|
||||
<tr class="separator:a2faa5aa1fef84ebbda30590d3fb2799b"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:ac99aa48fe3e71e2ef57b09d48cacfef8" id="r_ac99aa48fe3e71e2ef57b09d48cacfef8"><td class="memItemLeft" align="right" valign="top">size_t </td><td class="memItemRight" valign="bottom"><a class="el" href="#ac99aa48fe3e71e2ef57b09d48cacfef8">envelope_id</a> = 2</td></tr>
|
||||
<tr class="memdesc:ac99aa48fe3e71e2ef57b09d48cacfef8"><td class="mdescLeft"> </td><td class="mdescRight">Material attribute id for the envelope region. <br /></td></tr>
|
||||
<tr class="separator:ac99aa48fe3e71e2ef57b09d48cacfef8"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:a36c7b05405691393d381086a27ea36ad" id="r_a36c7b05405691393d381086a27ea36ad"><td class="memItemLeft" align="right" valign="top">size_t </td><td class="memItemRight" valign="bottom"><a class="el" href="#a36c7b05405691393d381086a27ea36ad">vacuum_id</a> = 3</td></tr>
|
||||
<tr class="memdesc:a36c7b05405691393d381086a27ea36ad"><td class="mdescLeft"> </td><td class="mdescRight">Material attribute id for the external domain (if enabled) <br /></td></tr>
|
||||
<tr class="separator:a36c7b05405691393d381086a27ea36ad"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
</table>
|
||||
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
|
||||
<div class="textblock"><p>Configuration parameters for stroid mesh generation. </p>
|
||||
<p>These values are typically loaded via <code>fourdst::config::Config<<a class="el" href="structstroid_1_1config_1_1_mesh_config.html" title="Configuration parameters for stroid mesh generation.">stroid::config::MeshConfig</a>></code> from a TOML file. The README shows the expected TOML layout under the <code>[main]</code> table. Unspecified keys use the defaults defined here. </p>
|
||||
</div><h2 class="groupheader">Member Data Documentation</h2>
|
||||
<a id="a2faa5aa1fef84ebbda30590d3fb2799b" name="a2faa5aa1fef84ebbda30590d3fb2799b"></a>
|
||||
<h2 class="memtitle"><span class="permalink"><a href="#a2faa5aa1fef84ebbda30590d3fb2799b">◆ </a></span>core_id</h2>
|
||||
|
||||
<div class="memitem">
|
||||
<div class="memproto">
|
||||
<table class="memname">
|
||||
<tr>
|
||||
<td class="memname">size_t stroid::config::MeshConfig::core_id = 1</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div><div class="memdoc">
|
||||
|
||||
<p>Material attribute id for the core region. </p>
|
||||
<h1><a class="anchor" id="toml"></a>
|
||||
toml</h1>
|
||||
<ul>
|
||||
<li>[main].core_id </li>
|
||||
</ul>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<a id="aed32864839b149c94842801b6413d94d" name="aed32864839b149c94842801b6413d94d"></a>
|
||||
<h2 class="memtitle"><span class="permalink"><a href="#aed32864839b149c94842801b6413d94d">◆ </a></span>core_steepness</h2>
|
||||
|
||||
@@ -159,7 +195,33 @@ Public Attributes</h2></td></tr>
|
||||
</table>
|
||||
</div><div class="memdoc">
|
||||
|
||||
<p>Controls the smoothness/steepness of the core-to-envelope transition. @toml [main].core_steepness. </p>
|
||||
<p>Controls the smoothness/steepness of the core-to-envelope transition. </p>
|
||||
<h1><a class="anchor" id="toml"></a>
|
||||
toml</h1>
|
||||
<ul>
|
||||
<li>[main].core_steepness </li>
|
||||
</ul>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<a id="ac99aa48fe3e71e2ef57b09d48cacfef8" name="ac99aa48fe3e71e2ef57b09d48cacfef8"></a>
|
||||
<h2 class="memtitle"><span class="permalink"><a href="#ac99aa48fe3e71e2ef57b09d48cacfef8">◆ </a></span>envelope_id</h2>
|
||||
|
||||
<div class="memitem">
|
||||
<div class="memproto">
|
||||
<table class="memname">
|
||||
<tr>
|
||||
<td class="memname">size_t stroid::config::MeshConfig::envelope_id = 2</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div><div class="memdoc">
|
||||
|
||||
<p>Material attribute id for the envelope region. </p>
|
||||
<h1><a class="anchor" id="toml"></a>
|
||||
toml</h1>
|
||||
<ul>
|
||||
<li>[main].envelope_id </li>
|
||||
</ul>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
@@ -175,7 +237,12 @@ Public Attributes</h2></td></tr>
|
||||
</table>
|
||||
</div><div class="memdoc">
|
||||
|
||||
<p>Flattening factor for spheroidal shaping (0 = spherical, >0 = oblate). @toml [main].flattening. </p>
|
||||
<p>Flattening factor for spheroidal shaping (0 = spherical, >0 = oblate). </p>
|
||||
<h1><a class="anchor" id="toml"></a>
|
||||
toml</h1>
|
||||
<ul>
|
||||
<li>[main].flattening </li>
|
||||
</ul>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
@@ -186,13 +253,38 @@ Public Attributes</h2></td></tr>
|
||||
<div class="memproto">
|
||||
<table class="memname">
|
||||
<tr>
|
||||
<td class="memname">bool stroid::config::MeshConfig::include_external_domain = false</td>
|
||||
<td class="memname">bool stroid::config::MeshConfig::include_external_domain = true</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div><div class="memdoc">
|
||||
|
||||
<p>Whether to include an external domain extending to <code>r_infinity</code>. </p>
|
||||
<p>Currently this flag does not affect mesh generation. @toml [main].include_external_domain </p>
|
||||
<h1><a class="anchor" id="toml"></a>
|
||||
toml</h1>
|
||||
<ul>
|
||||
<li>[main].include_external_domain </li>
|
||||
</ul>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<a id="a64cb00c8cba27267279a52207a4b5be0" name="a64cb00c8cba27267279a52207a4b5be0"></a>
|
||||
<h2 class="memtitle"><span class="permalink"><a href="#a64cb00c8cba27267279a52207a4b5be0">◆ </a></span>inf_bdr_id</h2>
|
||||
|
||||
<div class="memitem">
|
||||
<div class="memproto">
|
||||
<table class="memname">
|
||||
<tr>
|
||||
<td class="memname">size_t stroid::config::MeshConfig::inf_bdr_id = 2</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div><div class="memdoc">
|
||||
|
||||
<p>Boundary attribute id for infinity in kelvin mapping. </p>
|
||||
<h1><a class="anchor" id="toml"></a>
|
||||
toml</h1>
|
||||
<ul>
|
||||
<li>[main].inf_bdr_id </li>
|
||||
</ul>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
@@ -208,7 +300,12 @@ Public Attributes</h2></td></tr>
|
||||
</table>
|
||||
</div><div class="memdoc">
|
||||
|
||||
<p>Polynomial order for high-order elements. @toml [main].order. </p>
|
||||
<p>Polynomial order for high-order elements. </p>
|
||||
<h1><a class="anchor" id="toml"></a>
|
||||
toml</h1>
|
||||
<ul>
|
||||
<li>[main].order </li>
|
||||
</ul>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
@@ -224,7 +321,12 @@ Public Attributes</h2></td></tr>
|
||||
</table>
|
||||
</div><div class="memdoc">
|
||||
|
||||
<p>Radius of the stellar core region. @toml [main].r_core. </p>
|
||||
<p>Radius of the stellar core region. </p>
|
||||
<h1><a class="anchor" id="toml"></a>
|
||||
toml</h1>
|
||||
<ul>
|
||||
<li>[main].r_core </li>
|
||||
</ul>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
@@ -240,7 +342,12 @@ Public Attributes</h2></td></tr>
|
||||
</table>
|
||||
</div><div class="memdoc">
|
||||
|
||||
<p>Outer radius of the external domain when enabled. @toml [main].r_infinity. </p>
|
||||
<p>Outer radius of the external domain when enabled. </p>
|
||||
<h1><a class="anchor" id="toml"></a>
|
||||
toml</h1>
|
||||
<ul>
|
||||
<li>[main].r_infinity </li>
|
||||
</ul>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
@@ -256,7 +363,12 @@ Public Attributes</h2></td></tr>
|
||||
</table>
|
||||
</div><div class="memdoc">
|
||||
|
||||
<p>Radius inside which transformations are skipped to avoid singularities. @toml [main].r_instability. </p>
|
||||
<p>Radius inside which transformations are skipped to avoid singularities. </p>
|
||||
<h1><a class="anchor" id="toml"></a>
|
||||
toml</h1>
|
||||
<ul>
|
||||
<li>[main].r_instability </li>
|
||||
</ul>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
@@ -272,7 +384,12 @@ Public Attributes</h2></td></tr>
|
||||
</table>
|
||||
</div><div class="memdoc">
|
||||
|
||||
<p>Radius of the stellar surface. @toml [main].r_star. </p>
|
||||
<p>Radius of the stellar surface. </p>
|
||||
<h1><a class="anchor" id="toml"></a>
|
||||
toml</h1>
|
||||
<ul>
|
||||
<li>[main].r_star </li>
|
||||
</ul>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
@@ -288,7 +405,54 @@ Public Attributes</h2></td></tr>
|
||||
</table>
|
||||
</div><div class="memdoc">
|
||||
|
||||
<p>Number of uniform refinement passes applied after topology creation. @toml [main].refinement_levels. </p>
|
||||
<p>Number of uniform refinement passes applied after topology creation. </p>
|
||||
<h1><a class="anchor" id="toml"></a>
|
||||
toml</h1>
|
||||
<ul>
|
||||
<li>[main].refinement_levels </li>
|
||||
</ul>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<a id="a33f25ff277aa8834065e04ccb9cdbdda" name="a33f25ff277aa8834065e04ccb9cdbdda"></a>
|
||||
<h2 class="memtitle"><span class="permalink"><a href="#a33f25ff277aa8834065e04ccb9cdbdda">◆ </a></span>surface_bdr_id</h2>
|
||||
|
||||
<div class="memitem">
|
||||
<div class="memproto">
|
||||
<table class="memname">
|
||||
<tr>
|
||||
<td class="memname">size_t stroid::config::MeshConfig::surface_bdr_id = 1</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div><div class="memdoc">
|
||||
|
||||
<p>Boundary attribute id for stellar surface. </p>
|
||||
<h1><a class="anchor" id="toml"></a>
|
||||
toml</h1>
|
||||
<ul>
|
||||
<li>[main].surface_bdr_id </li>
|
||||
</ul>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<a id="a36c7b05405691393d381086a27ea36ad" name="a36c7b05405691393d381086a27ea36ad"></a>
|
||||
<h2 class="memtitle"><span class="permalink"><a href="#a36c7b05405691393d381086a27ea36ad">◆ </a></span>vacuum_id</h2>
|
||||
|
||||
<div class="memitem">
|
||||
<div class="memproto">
|
||||
<table class="memname">
|
||||
<tr>
|
||||
<td class="memname">size_t stroid::config::MeshConfig::vacuum_id = 3</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div><div class="memdoc">
|
||||
|
||||
<p>Material attribute id for the external domain (if enabled) </p>
|
||||
<h1><a class="anchor" id="toml"></a>
|
||||
toml</h1>
|
||||
<ul>
|
||||
<li>[main].vacuum_id </li>
|
||||
</ul>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -1,12 +1,17 @@
|
||||
var structstroid_1_1config_1_1_mesh_config =
|
||||
[
|
||||
[ "core_id", "structstroid_1_1config_1_1_mesh_config.html#a2faa5aa1fef84ebbda30590d3fb2799b", null ],
|
||||
[ "core_steepness", "structstroid_1_1config_1_1_mesh_config.html#aed32864839b149c94842801b6413d94d", null ],
|
||||
[ "envelope_id", "structstroid_1_1config_1_1_mesh_config.html#ac99aa48fe3e71e2ef57b09d48cacfef8", null ],
|
||||
[ "flattening", "structstroid_1_1config_1_1_mesh_config.html#affad4638b0ae7b710f2b2db992f6f584", null ],
|
||||
[ "include_external_domain", "structstroid_1_1config_1_1_mesh_config.html#a062652781f4f3ea0b7ca8764362a7368", null ],
|
||||
[ "inf_bdr_id", "structstroid_1_1config_1_1_mesh_config.html#a64cb00c8cba27267279a52207a4b5be0", null ],
|
||||
[ "order", "structstroid_1_1config_1_1_mesh_config.html#a860e78f1906acb0c3aa08d55f94de3fd", null ],
|
||||
[ "r_core", "structstroid_1_1config_1_1_mesh_config.html#a5c68a895f73dc82a38a8daac22a83ad7", null ],
|
||||
[ "r_infinity", "structstroid_1_1config_1_1_mesh_config.html#ac7546899ebbfe191ea3a8bf2403b31eb", null ],
|
||||
[ "r_instability", "structstroid_1_1config_1_1_mesh_config.html#a4da6d99ff7ba24d2f917e1fd98ddd877", null ],
|
||||
[ "r_star", "structstroid_1_1config_1_1_mesh_config.html#a3fe80a30990d484dcc39b6f9a0befc05", null ],
|
||||
[ "refinement_levels", "structstroid_1_1config_1_1_mesh_config.html#a8cafcbebf64ae251517118eb152de981", null ]
|
||||
[ "refinement_levels", "structstroid_1_1config_1_1_mesh_config.html#a8cafcbebf64ae251517118eb152de981", null ],
|
||||
[ "surface_bdr_id", "structstroid_1_1config_1_1_mesh_config.html#a33f25ff277aa8834065e04ccb9cdbdda", null ],
|
||||
[ "vacuum_id", "structstroid_1_1config_1_1_mesh_config.html#a36c7b05405691393d381086a27ea36ad", null ]
|
||||
];
|
||||
@@ -31,7 +31,7 @@
|
||||
<tr id="projectrow">
|
||||
<td id="projectlogo"><img alt="Logo" src="Logo.png"/></td>
|
||||
<td id="projectalign">
|
||||
<div id="projectname">stroid<span id="projectnumber"> v0.1.0</span>
|
||||
<div id="projectname">stroid<span id="projectnumber"> v0.2.0</span>
|
||||
</div>
|
||||
<div id="projectbrief">Multi-block curvilinear mesh generation</div>
|
||||
</td>
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
<tr id="projectrow">
|
||||
<td id="projectlogo"><img alt="Logo" src="Logo.png"/></td>
|
||||
<td id="projectalign">
|
||||
<div id="projectname">stroid<span id="projectnumber"> v0.1.0</span>
|
||||
<div id="projectname">stroid<span id="projectnumber"> v0.2.0</span>
|
||||
</div>
|
||||
<div id="projectbrief">Multi-block curvilinear mesh generation</div>
|
||||
</td>
|
||||
|
||||
22
docs/static/mainpage.md
vendored
22
docs/static/mainpage.md
vendored
@@ -77,15 +77,20 @@ file is found below
|
||||
|
||||
```toml
|
||||
[main]
|
||||
core_steepness = 1.0
|
||||
flattening = 0.0
|
||||
include_external_domain = false
|
||||
refinement_levels = 2
|
||||
order = 3
|
||||
include_external_domain = true
|
||||
r_core = 1.5
|
||||
r_star = 5.0
|
||||
flattening = 0.08
|
||||
r_infinity = 6.0
|
||||
r_instability = 1e-14
|
||||
r_star = 5.0
|
||||
refinement_levels = 4
|
||||
core_steepness = 1.0
|
||||
surface_bdr_id = 1
|
||||
inf_bdr_id = 2
|
||||
core_id = 1
|
||||
envelope_id = 2
|
||||
vacuum_id = 3
|
||||
```
|
||||
|
||||
<!-- Table of what these parameters do -->
|
||||
@@ -93,13 +98,18 @@ refinement_levels = 4
|
||||
|-------------------------|-----------------------------------------------------------------------------------------------------|---------|
|
||||
| refinement_levels | Number of uniform refinement levels to apply to the mesh after generation | 4 |
|
||||
| order | The polynomial order of the finite elements in the mesh | 3 |
|
||||
| include_external_domain | Whether to include an external domain extending to r_infinity | false |
|
||||
| include_external_domain | Whether to include an external domain extending to r_infinity | true |
|
||||
| r_core | The radius of the core region of the star | 1.5 |
|
||||
| r_star | The radius of the star | 5.0 |
|
||||
| flattening | The flattening factor of the star (0 for spherical, >0 for oblate) | 0 |
|
||||
| r_infinity | The outer radius of the external domain (if included) | 6.0 |
|
||||
| r_instability | The radius at which no transformations are applied to the initial topology (to avoid singularities) | 1e-14 |
|
||||
| core_steepness | The steepness of the transition between the core and envelope regions of the star | 1.0 |
|
||||
| surface_bdr_id | The boundary ID to assign to the surface of the star | 1 |
|
||||
| inf_bdr_id | The boundary ID to assign to the outer boundary of the external domain (if included) | 2 |
|
||||
| core_id | The material ID to assign to the core region of the star | 1 |
|
||||
| envelope_id | The material ID to assign to the envelope region of the star | 2 |
|
||||
| vacuum_id | The material ID to assign to the vacuum region of the star (if included) | 3 |
|
||||
|
||||
|
||||
If no configuration file is provided, stroid will use the default parameters listed above. Further, configuration files
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
project('stroid', 'cpp', meson_version : '>= 1.3.0', version : 'v0.1.0', default_options : ['cpp_std=c++23'])
|
||||
project('stroid', 'cpp', meson_version : '>= 1.3.0', version : 'v0.2.0', default_options : ['cpp_std=c++23'])
|
||||
|
||||
subdir('build-check')
|
||||
|
||||
|
||||
113
package_release.sh
Executable file
113
package_release.sh
Executable file
@@ -0,0 +1,113 @@
|
||||
#!/bin/bash
|
||||
|
||||
set -e
|
||||
|
||||
RELEASE_DIR="releases"
|
||||
STAGING_DIR="stroid-dist"
|
||||
|
||||
REQUIRED_BINARIES=(
|
||||
"stroid-macos-arm64"
|
||||
"stroid-linux-x86_64"
|
||||
"stroid-linux-arm64"
|
||||
)
|
||||
|
||||
for bin in "${REQUIRED_BINARIES[@]}"; do
|
||||
if [ ! -f "$RELEASE_DIR/$bin" ]; then
|
||||
echo "Error: Missing binary $RELEASE_DIR/$bin. Run release.sh first."
|
||||
exit 1
|
||||
fi
|
||||
done
|
||||
|
||||
chmod +x "$RELEASE_DIR/stroid-macos-arm64"
|
||||
VERSION_OUTPUT=$("$RELEASE_DIR/stroid-macos-arm64" info -v)
|
||||
VERSION=$(echo "$VERSION_OUTPUT" | awk '{print $3}')
|
||||
|
||||
if [ -z "$VERSION" ]; then
|
||||
echo "Error: Could not extract version from binary output."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
TARBALL_NAME="stroid-${VERSION}.tar.gz"
|
||||
|
||||
echo "Packaging Stroid version ${VERSION}..."
|
||||
|
||||
rm -rf "$STAGING_DIR"
|
||||
mkdir -p "$STAGING_DIR/bin"
|
||||
|
||||
for bin in "${REQUIRED_BINARIES[@]}"; do
|
||||
cp "$RELEASE_DIR/$bin" "$STAGING_DIR/bin/"
|
||||
done
|
||||
|
||||
cat << 'EOF' > "$STAGING_DIR/install.sh"
|
||||
#!/bin/bash
|
||||
set -e
|
||||
|
||||
OS=$(uname -s)
|
||||
ARCH=$(uname -m)
|
||||
INSTALL_PATH=$1
|
||||
|
||||
echo "Detecting system: $OS ($ARCH)"
|
||||
|
||||
case "$OS" in
|
||||
Darwin)
|
||||
if [ "$ARCH" = "arm64" ]; then
|
||||
SELECTED_BIN="bin/stroid-macos-arm64"
|
||||
else
|
||||
echo "Error: Intel Macs (x86_64) are not supported by this package."
|
||||
exit 1
|
||||
fi
|
||||
;;
|
||||
Linux)
|
||||
if [ "$ARCH" = "x86_64" ]; then
|
||||
SELECTED_BIN="bin/stroid-linux-x86_64"
|
||||
elif [ "$ARCH" = "aarch64" ] || [ "$ARCH" = "arm64" ]; then
|
||||
SELECTED_BIN="bin/stroid-linux-arm64"
|
||||
else
|
||||
echo "Error: Linux architecture $ARCH is not supported."
|
||||
exit 1
|
||||
fi
|
||||
;;
|
||||
*)
|
||||
echo "Error: Operating system $OS is not supported."
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
echo "Verifying binary integrity..."
|
||||
chmod +x "$SELECTED_BIN"
|
||||
if ! ./"$SELECTED_BIN" info -v > /dev/null 2>&1; then
|
||||
echo "Error: The selected binary failed the version check. It may be incompatible with this system's libraries."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
VERSION_INFO=$(./"$SELECTED_BIN" info -v)
|
||||
echo "Verification successful: $VERSION_INFO"
|
||||
|
||||
if [ -z "$INSTALL_PATH" ]; then
|
||||
if [ "$EUID" -eq 0 ]; then
|
||||
INSTALL_PATH="/usr/local/bin"
|
||||
else
|
||||
INSTALL_PATH="$HOME/.local/bin"
|
||||
fi
|
||||
fi
|
||||
|
||||
mkdir -p "$INSTALL_PATH"
|
||||
|
||||
echo "Installing to: $INSTALL_PATH/stroid"
|
||||
cp "$SELECTED_BIN" "$INSTALL_PATH/stroid"
|
||||
chmod +x "$INSTALL_PATH/stroid"
|
||||
|
||||
echo "Installation complete."
|
||||
if [[ ":$PATH:" != *":$INSTALL_PATH:"* ]]; then
|
||||
echo "Note: $INSTALL_PATH is not in your PATH. Add it to your shell profile to run 'stroid' from anywhere."
|
||||
fi
|
||||
EOF
|
||||
|
||||
chmod +x "$STAGING_DIR/install.sh"
|
||||
|
||||
export COPYFILE_DISABLE=1
|
||||
tar -cz --no-xattrs -f "$TARBALL_NAME" -C "$STAGING_DIR" .
|
||||
|
||||
echo "Distribution package created: $TARBALL_NAME"
|
||||
|
||||
rm -rf "$STAGING_DIR"
|
||||
22
readme.md
22
readme.md
@@ -78,15 +78,20 @@ file is found below
|
||||
|
||||
```toml
|
||||
[main]
|
||||
core_steepness = 1.0
|
||||
flattening = 0.0
|
||||
include_external_domain = false
|
||||
refinement_levels = 2
|
||||
order = 3
|
||||
include_external_domain = true
|
||||
r_core = 1.5
|
||||
r_star = 5.0
|
||||
flattening = 0.08
|
||||
r_infinity = 6.0
|
||||
r_instability = 1e-14
|
||||
r_star = 5.0
|
||||
refinement_levels = 4
|
||||
core_steepness = 1.0
|
||||
surface_bdr_id = 1
|
||||
inf_bdr_id = 2
|
||||
core_id = 1
|
||||
envelope_id = 2
|
||||
vacuum_id = 3
|
||||
```
|
||||
|
||||
<!-- Table of what these parameters do -->
|
||||
@@ -94,13 +99,18 @@ refinement_levels = 4
|
||||
|-------------------------|-----------------------------------------------------------------------------------------------------|---------|
|
||||
| refinement_levels | Number of uniform refinement levels to apply to the mesh after generation | 4 |
|
||||
| order | The polynomial order of the finite elements in the mesh | 3 |
|
||||
| include_external_domain | Whether to include an external domain extending to r_infinity | false |
|
||||
| include_external_domain | Whether to include an external domain extending to r_infinity | true |
|
||||
| r_core | The radius of the core region of the star | 1.5 |
|
||||
| r_star | The radius of the star | 5.0 |
|
||||
| flattening | The flattening factor of the star (0 for spherical, >0 for oblate) | 0 |
|
||||
| r_infinity | The outer radius of the external domain (if included) | 6.0 |
|
||||
| r_instability | The radius at which no transformations are applied to the initial topology (to avoid singularities) | 1e-14 |
|
||||
| core_steepness | The steepness of the transition between the core and envelope regions of the star | 1.0 |
|
||||
| surface_bdr_id | The boundary ID to assign to the surface of the star | 1 |
|
||||
| inf_bdr_id | The boundary ID to assign to the outer boundary of the external domain (if included) | 2 |
|
||||
| core_id | The material ID to assign to the core region of the star | 1 |
|
||||
| envelope_id | The material ID to assign to the envelope region of the star | 2 |
|
||||
| vacuum_id | The material ID to assign to the vacuum region of the star (if included) | 3 |
|
||||
|
||||
|
||||
If no configuration file is provided, stroid will use the default parameters listed above. Further, configuration files
|
||||
|
||||
44
release.md
Normal file
44
release.md
Normal file
@@ -0,0 +1,44 @@
|
||||
# Generating Releases
|
||||
|
||||
> This document is likely only of interest to developers wishing to build release files. If you wish to use
|
||||
> stroid, please refer to the main readme instructions.
|
||||
|
||||
## Building
|
||||
Release files can be built on an arm mac using the following commands:
|
||||
|
||||
```bash
|
||||
./release.sh
|
||||
```
|
||||
|
||||
all release files will be placed in the `releases/` folder.
|
||||
|
||||
This will construct release files for arm mac, arm linux, and x86_64 linux. These should be
|
||||
compatible with most systems (linux more recent than 2020 and macOS more recent than 15.0)
|
||||
|
||||
For those who wish to build from source see the main readme instructions.
|
||||
|
||||
## Packaging
|
||||
The auto-generated release files are named according to the following convention:
|
||||
`stroid-<os>-<arch>`, these are all statically linked so they should
|
||||
just run on system. To distribute these files we want to package them into a single
|
||||
archive file along with an installation script which will select the correct binary
|
||||
for the host system. There is a script `package_release.sh` which will do this automatically.
|
||||
|
||||
Once the release files have been generated, run the following command:
|
||||
|
||||
```bash
|
||||
./package_release.sh
|
||||
```
|
||||
|
||||
## Uploading
|
||||
Once the release files have been packaged, they can be uploaded to the github releases page. This can be done manually through the github web interface, or
|
||||
automatically using the `gh` CLI tool. To upload using the CLI tool, first ensure you have it installed and authenticated with your
|
||||
github account. Then run the following command:
|
||||
|
||||
```bash
|
||||
gh release create <tag> ./stroid-release.tar.gz
|
||||
```
|
||||
|
||||
Alternatively, you can upload the files manually through the github web interface by navigating to the releases page of
|
||||
the repository and clicking on "Draft a new release". From there, you can upload the `stroid-release.tar.gz` file and
|
||||
publish the release.
|
||||
80
release.sh
Executable file
80
release.sh
Executable file
@@ -0,0 +1,80 @@
|
||||
#!/bin/bash
|
||||
|
||||
set -e
|
||||
|
||||
# Confirm that the script is being run on a macOS aarch64 host
|
||||
ARCHITECTURE=$(uname -m)
|
||||
OS_NAME=$(uname -s)
|
||||
if [[ "$OS_NAME" != "Darwin" || "$ARCHITECTURE" != "arm64" ]]; then
|
||||
echo "This release script must be run on a macOS aarch64 host."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
PROJECT_NAME="stroid"
|
||||
MACOS_MIN_VERSION="15.0"
|
||||
OUTPUT_DIR="releases"
|
||||
|
||||
# Confirm that Meson and Ninja are installed
|
||||
if ! command -v meson &> /dev/null || ! command -v ninja &> /dev/null; then
|
||||
echo "Meson and Ninja are required to build the project."
|
||||
echo "Please install them via pip:"
|
||||
echo " pip install meson ninja"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Confirm that the current macOS version meets the minimum requirement
|
||||
CURRENT_MACOS_VERSION=$(sw_vers -productVersion)
|
||||
if [[ "$(printf '%s\n%s\n' "$MACOS_MIN_VERSION" "$CURRENT_MACOS_VERSION" | sort -V | head -n1)" != "$MACOS_MIN_VERSION" ]]; then
|
||||
echo "Current macOS version ($CURRENT_MACOS_VERSION) does not meet the minimum requirement ($MACOS_MIN_VERSION)."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
|
||||
X86_IMAGE="quay.io/pypa/manylinux_2_28_x86_64"
|
||||
ARM_IMAGE="quay.io/pypa/manylinux_2_28_aarch64"
|
||||
|
||||
mkdir -p "$OUTPUT_DIR"
|
||||
|
||||
echo "Starting release build for $PROJECT_NAME..."
|
||||
|
||||
echo "Building for macOS (ARM64, Target >= $MACOS_MIN_VERSION)..."
|
||||
rm -rf build-mac
|
||||
export MACOSX_DEPLOYMENT_TARGET=$MACOS_MIN_VERSION
|
||||
|
||||
meson setup build-mac \
|
||||
--buildtype release \
|
||||
-Dcpp_args="-mmacosx-version-min=$MACOS_MIN_VERSION" \
|
||||
-Dcpp_link_args="-mmacosx-version-min=$MACOS_MIN_VERSION"
|
||||
|
||||
meson compile -C build-mac
|
||||
cp build-mac/tools/stroid "$OUTPUT_DIR/stroid-macos-arm64"
|
||||
|
||||
echo "Building for Linux (x86_64) via Manylinux 2.28..."
|
||||
docker run --rm --platform linux/amd64 \
|
||||
-v "$(pwd)":/src -w /src \
|
||||
$X86_IMAGE /bin/bash -c "
|
||||
/opt/python/cp311-cp311/bin/pip install meson ninja
|
||||
export PATH=/opt/python/cp311-cp311/bin:\$PATH
|
||||
|
||||
rm -rf build-linux-x86
|
||||
meson setup build-linux-x86 --buildtype release -Dbuild_tests=false
|
||||
meson compile -C build-linux-x86
|
||||
cp build-linux-x86/tools/stroid /src/$OUTPUT_DIR/stroid-linux-x86_64
|
||||
"
|
||||
|
||||
echo "Building for Linux (ARM64) via Manylinux 2.28..."
|
||||
docker run --rm --platform linux/arm64 \
|
||||
-v "$(pwd)":/src -w /src \
|
||||
$ARM_IMAGE /bin/bash -c "
|
||||
/opt/python/cp311-cp311/bin/pip install meson ninja
|
||||
export PATH=/opt/python/cp311-cp311/bin:\$PATH
|
||||
|
||||
rm -rf build-linux-arm
|
||||
meson setup build-linux-arm --buildtype release -Dbuild_tests=false
|
||||
meson compile -C build-linux-arm
|
||||
cp build-linux-arm/tools/stroid /src/$OUTPUT_DIR/stroid-linux-arm64
|
||||
"
|
||||
|
||||
echo "---"
|
||||
echo "All binaries generated in /$OUTPUT_DIR"
|
||||
ls -lh "$OUTPUT_DIR"
|
||||
@@ -12,52 +12,95 @@ namespace stroid::config {
|
||||
struct MeshConfig {
|
||||
/**
|
||||
* @brief Number of uniform refinement passes applied after topology creation.
|
||||
* @toml [main].refinement_levels
|
||||
* @section toml
|
||||
* - [main].refinement_levels
|
||||
*/
|
||||
int refinement_levels = 4;
|
||||
/**
|
||||
* @brief Polynomial order for high-order elements.
|
||||
* @toml [main].order
|
||||
* @section toml
|
||||
* - [main].order
|
||||
*/
|
||||
int order = 3;
|
||||
/**
|
||||
* @brief Whether to include an external domain extending to `r_infinity`.
|
||||
* @details Currently this flag does not affect mesh generation.
|
||||
* @toml [main].include_external_domain
|
||||
* @section toml
|
||||
* - [main].include_external_domain
|
||||
*/
|
||||
bool include_external_domain = false;
|
||||
bool include_external_domain = true;
|
||||
|
||||
/**
|
||||
* @brief Radius of the stellar core region.
|
||||
* @toml [main].r_core
|
||||
* @section toml
|
||||
* - [main].r_core
|
||||
*/
|
||||
double r_core = 1.5;
|
||||
/**
|
||||
* @brief Radius of the stellar surface.
|
||||
* @toml [main].r_star
|
||||
* @section toml
|
||||
* - [main].r_star
|
||||
*/
|
||||
double r_star = 5.0;
|
||||
/**
|
||||
* @brief Flattening factor for spheroidal shaping (0 = spherical, >0 = oblate).
|
||||
* @toml [main].flattening
|
||||
* @section toml
|
||||
* - [main].flattening
|
||||
*/
|
||||
double flattening = 0;
|
||||
|
||||
/**
|
||||
* @brief Outer radius of the external domain when enabled.
|
||||
* @toml [main].r_infinity
|
||||
* @section toml
|
||||
* - [main].r_infinity
|
||||
*/
|
||||
double r_infinity = 6.0;
|
||||
|
||||
/**
|
||||
* @brief Radius inside which transformations are skipped to avoid singularities.
|
||||
* @toml [main].r_instability
|
||||
* @section toml
|
||||
* - [main].r_instability
|
||||
*/
|
||||
double r_instability = 1e-14;
|
||||
/**
|
||||
* @brief Controls the smoothness/steepness of the core-to-envelope transition.
|
||||
* @toml [main].core_steepness
|
||||
* @section toml
|
||||
* - [main].core_steepness
|
||||
*/
|
||||
double core_steepness = 1.0;
|
||||
|
||||
/**
|
||||
* @brief Boundary attribute id for stellar surface
|
||||
* @section toml
|
||||
* - [main].surface_bdr_id
|
||||
*/
|
||||
size_t surface_bdr_id = 1;
|
||||
|
||||
/**
|
||||
* @brief Boundary attribute id for infinity in kelvin mapping
|
||||
* @section toml
|
||||
* - [main].inf_bdr_id
|
||||
*/
|
||||
size_t inf_bdr_id = 2;
|
||||
|
||||
/**
|
||||
* @brief Material attribute id for the core region
|
||||
* @section toml
|
||||
* - [main].core_id
|
||||
*/
|
||||
size_t core_id = 1;
|
||||
|
||||
/**
|
||||
* @brief Material attribute id for the envelope region
|
||||
* @section toml
|
||||
* - [main].envelope_id
|
||||
*/
|
||||
size_t envelope_id = 2;
|
||||
|
||||
/**
|
||||
* @brief Material attribute id for the external domain (if enabled)
|
||||
* @section toml
|
||||
* - [main].vacuum_id
|
||||
*/
|
||||
size_t vacuum_id = 3;
|
||||
};
|
||||
}
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
|
||||
#include <iostream>
|
||||
#include <memory>
|
||||
#include <sys/proc.h>
|
||||
|
||||
namespace stroid::topology {
|
||||
void PromoteToHighOrder(mfem::Mesh &mesh, const fourdst::config::Config<config::MeshConfig> &config) {
|
||||
@@ -22,20 +23,48 @@ namespace stroid::topology {
|
||||
|
||||
const int vDim = fes->GetVDim();
|
||||
const int nDofs = fes->GetNDofs();
|
||||
const int nElem = mesh.GetNE();
|
||||
|
||||
std::vector<bool> processed(nDofs, false);
|
||||
mfem::Array<int> vdofs;
|
||||
mfem::Vector pos(vDim);
|
||||
|
||||
for (int i = 0; i < nDofs; ++i) {
|
||||
for (int d = 0; d < vDim; ++d) {
|
||||
pos(d) = nodes(fes->DofToVDof(i, d));
|
||||
}
|
||||
for (int elemID = 0; elemID < nElem; ++elemID) {
|
||||
const int attrID = mesh.GetAttribute(elemID);
|
||||
fes->GetElementVDofs(elemID, vdofs);
|
||||
|
||||
TransformPoint(pos, config, 0);
|
||||
for (int dofID = 0; dofID < vdofs.Size(); ++dofID) {
|
||||
const int vDof = vdofs[dofID];
|
||||
const int scalar_dof = (fes->GetOrdering() == mfem::Ordering::byNODES) ? vDof / vDim : vDof % nDofs;
|
||||
|
||||
for (int d = 0; d < vDim; ++d) {
|
||||
nodes(fes->DofToVDof(i, d)) = pos(d);
|
||||
if (processed[scalar_dof]) {
|
||||
continue; // Skip already processed dofs. This avoids doing multiple transformations of a node if it was already transformed by a neighbor
|
||||
}
|
||||
|
||||
for (int d = 0; d < vDim; ++d) {
|
||||
pos(d) = nodes(fes->DofToVDof(scalar_dof, d));
|
||||
}
|
||||
|
||||
TransformPoint(pos, config, attrID);
|
||||
|
||||
for (int d = 0; d < vDim; ++d) {
|
||||
nodes(fes->DofToVDof(scalar_dof, d)) = pos(d);
|
||||
}
|
||||
|
||||
processed[scalar_dof] = true;
|
||||
}
|
||||
}
|
||||
|
||||
// for (int i = 0; i < nDofs; ++i) {
|
||||
// for (int d = 0; d < vDim; ++d) {
|
||||
// pos(d) = nodes(fes->DofToVDof(i, d));
|
||||
// }
|
||||
//
|
||||
// TransformPoint(pos, config, 0);
|
||||
//
|
||||
// for (int d = 0; d < vDim; ++d) {
|
||||
// nodes(fes->DofToVDof(i, d)) = pos(d);
|
||||
// }
|
||||
// }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -32,20 +32,6 @@ namespace stroid::topology {
|
||||
pos(2) *= (1.0 - config->flattening);
|
||||
}
|
||||
|
||||
void ApplyKelvin(mfem::Vector &pos, const fourdst::config::Config<config::MeshConfig> &config) {
|
||||
const double r = pos.Norml2();
|
||||
if (r <= config->r_star) {
|
||||
return;
|
||||
}
|
||||
|
||||
double xi = (r - config->r_star) / (config->r_infinity - config->r_star);
|
||||
xi = std::min(0.999, std::max(0.0, xi)); // Clamp xi to [0, 0.999]
|
||||
|
||||
const double r_new = config->r_star + xi / (1.0 - xi);
|
||||
const double scale = r_new / r;
|
||||
pos *= scale;
|
||||
}
|
||||
|
||||
void TransformPoint(mfem::Vector &pos, const fourdst::config::Config<config::MeshConfig> &config, int attribute_id) {
|
||||
double l_inf = 0.0;
|
||||
for (int i = 0; i < pos.Size(); ++i) {
|
||||
@@ -82,9 +68,6 @@ namespace stroid::topology {
|
||||
ApplySpheroidal(pos, config);
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
|
||||
if (l_inf <= config->r_star) {
|
||||
const double xi = (l_inf - config->r_core) / (config->r_star - config->r_core);
|
||||
const double r_phys = config->r_core + xi * (config->r_star - config->r_core);
|
||||
@@ -97,7 +80,6 @@ namespace stroid::topology {
|
||||
pos = unit_dir;
|
||||
pos *= l_inf;
|
||||
|
||||
ApplyKelvin(pos, config);
|
||||
ApplySpheroidal(pos, config);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -10,7 +10,7 @@ namespace stroid::topology {
|
||||
std::unique_ptr<mfem::Mesh> BuildSkeleton(const fourdst::config::Config<config::MeshConfig> & config) {
|
||||
int nVert = config->include_external_domain ? 24 : 16;
|
||||
int nElem = config->include_external_domain ? 13 : 7;
|
||||
int nBev = 6;
|
||||
int nBev = config->include_external_domain ? 12 : 6;
|
||||
|
||||
auto mesh = std::make_unique<mfem::Mesh>(3, nVert, nElem, nBev, 3);
|
||||
|
||||
@@ -28,9 +28,9 @@ namespace stroid::topology {
|
||||
}
|
||||
|
||||
const int core_v[8] = {0, 1, 3, 2, 4, 5, 7, 6};
|
||||
mesh->AddHex(core_v, 1);
|
||||
mesh->AddHex(core_v, config->core_id);
|
||||
|
||||
int shells[6][8] = {
|
||||
std::vector<std::array<int, 8>> stellar_shells = {
|
||||
{8, 9, 11, 10, 0, 1, 3, 2},
|
||||
{4, 5, 7, 6, 12, 13, 15, 14}, // +Z face
|
||||
{0, 1, 5, 4, 8, 9, 13, 12}, // -Y face
|
||||
@@ -38,9 +38,25 @@ namespace stroid::topology {
|
||||
{1, 3, 7, 5, 9, 11, 15, 13}, // +X face
|
||||
{0, 4, 6, 2, 8, 12, 14, 10} // -X face
|
||||
};
|
||||
for (const auto & shell : shells) mesh->AddHex(shell, 2);
|
||||
for (const auto & shell : stellar_shells) {
|
||||
mesh->AddHex(shell.data(), config->envelope_id);
|
||||
}
|
||||
|
||||
const int bdr_quads[6][4] = {
|
||||
if (config->include_external_domain) {
|
||||
std::vector<std::array<int, 8>> vacuum_shells;
|
||||
vacuum_shells.push_back({8, 9, 13, 12, 16, 17, 21, 20});
|
||||
vacuum_shells.push_back({9, 11, 15, 13, 17, 19, 23, 21});
|
||||
vacuum_shells.push_back({11, 10, 14, 15, 19, 18, 22, 23});
|
||||
vacuum_shells.push_back({10, 8, 12, 14, 18, 16, 20, 22});
|
||||
vacuum_shells.push_back({12, 13, 15, 14, 20, 21, 23, 22});
|
||||
vacuum_shells.push_back({10, 11, 9, 8, 18, 19, 17, 16});
|
||||
for (const auto & shell : vacuum_shells) {
|
||||
mesh->AddHex(shell.data(), config->vacuum_id);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
const int surface_bdr_quads[6][4] = {
|
||||
{12, 13, 15, 14},
|
||||
{13, 9, 11, 15},
|
||||
{9, 8, 10, 11},
|
||||
@@ -49,8 +65,23 @@ namespace stroid::topology {
|
||||
{14, 15, 11, 10}
|
||||
};
|
||||
|
||||
for (const auto& bdr: bdr_quads) {
|
||||
mesh->AddBdrQuad(bdr, 1);
|
||||
for (const auto& bdr: surface_bdr_quads) {
|
||||
mesh->AddBdrQuad(bdr, config->surface_bdr_id);
|
||||
}
|
||||
|
||||
if (config->include_external_domain) {
|
||||
const int inf_bdr_quads[6][4] = {
|
||||
{16, 17, 21, 20},
|
||||
{17, 19, 23, 21},
|
||||
{19, 18, 22, 23},
|
||||
{18, 16, 20, 22},
|
||||
{18, 19, 17, 16},
|
||||
{20, 21, 23, 22}
|
||||
};
|
||||
|
||||
for (const auto& bdr: inf_bdr_quads) {
|
||||
mesh->AddBdrQuad(bdr, config->inf_bdr_id);
|
||||
}
|
||||
}
|
||||
|
||||
return mesh;
|
||||
|
||||
@@ -4,8 +4,6 @@
|
||||
|
||||
namespace stroid::utils {
|
||||
void MarkFlippedElements(mfem::Mesh& mesh) {
|
||||
size_t total_flipped = 0;
|
||||
size_t total_elements = mesh.GetNE();
|
||||
for (int i = 0; i < mesh.GetNE(); i++) {
|
||||
mfem::ElementTransformation *T = mesh.GetElementTransformation(i);
|
||||
|
||||
@@ -22,17 +20,11 @@ namespace stroid::utils {
|
||||
|
||||
if (is_flipped) {
|
||||
mesh.SetAttribute(i, 999);
|
||||
total_flipped++;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
std::println("Marked {}/{} elements as flipped.", total_flipped, total_elements);
|
||||
}
|
||||
|
||||
void MarkFlippedBoundaryElements(mfem::Mesh& mesh) {
|
||||
size_t total_flipped = 0;
|
||||
size_t total_boundary_elements = mesh.GetNBE();
|
||||
for (int i = 0; i < mesh.GetNBE(); i++) {
|
||||
mfem::ElementTransformation *T = mesh.GetBdrElementTransformation(i);
|
||||
const mfem::IntegrationRule &ir = mfem::IntRules.Get(T->GetGeometryType(), 2 * T->Order());
|
||||
@@ -56,9 +48,7 @@ namespace stroid::utils {
|
||||
|
||||
if (is_flipped) {
|
||||
mesh.SetBdrAttribute(i, 500);
|
||||
total_flipped++;
|
||||
}
|
||||
}
|
||||
std::println("Marked {}/{} boundary elements as flipped.", total_flipped, total_boundary_elements);
|
||||
}
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
[wrap-git]
|
||||
url = https://github.com/4D-STAR/libconfig.git
|
||||
revision = v2.0.4
|
||||
revision = v2.0.5
|
||||
depth = 1
|
||||
@@ -1,6 +1,7 @@
|
||||
gtest_dep = dependency('gtest', main: true, required : true)
|
||||
gtest_main = dependency('gtest_main', required: true)
|
||||
gtest_nomain_dep = dependency('gtest', main: false, required : true)
|
||||
threads_dep = dependency('threads')
|
||||
|
||||
# Test files for const
|
||||
test_sources = [
|
||||
@@ -14,6 +15,7 @@ foreach test_file : test_sources
|
||||
exe_name,
|
||||
test_file,
|
||||
dependencies: [
|
||||
threads_dep,
|
||||
stroid_dep,
|
||||
gtest_dep,
|
||||
gtest_main
|
||||
@@ -25,3 +27,5 @@ foreach test_file : test_sources
|
||||
test_exe,
|
||||
env: ['MESON_SOURCE_ROOT=' + meson.project_source_root(), 'MESON_BUILD_ROOT=' + meson.project_build_root()])
|
||||
endforeach
|
||||
|
||||
subdir('sandbox')
|
||||
|
||||
15
tests/sandbox/default.toml
Normal file
15
tests/sandbox/default.toml
Normal file
@@ -0,0 +1,15 @@
|
||||
[main]
|
||||
core_steepness = 1.0
|
||||
flattening = 0.0
|
||||
include_external_domain = true
|
||||
inf_bdr_id = 2
|
||||
order = 3
|
||||
r_core = 1.5
|
||||
r_infinity = 10.0
|
||||
r_instability = 1e-14
|
||||
r_star = 5.0
|
||||
refinement_levels = 2
|
||||
surface_bdr_id = 1
|
||||
core_id = 1
|
||||
envelope_id = 2
|
||||
vacuum_id = 3
|
||||
1
tests/sandbox/meson.build
Normal file
1
tests/sandbox/meson.build
Normal file
@@ -0,0 +1 @@
|
||||
executable('sandbox_test', 'sandbox_test.cpp', dependencies: [stroid_dep])
|
||||
37
tests/sandbox/sandbox_test.cpp
Normal file
37
tests/sandbox/sandbox_test.cpp
Normal file
@@ -0,0 +1,37 @@
|
||||
#include "fourdst/config/config.h"
|
||||
#include "stroid/config/config.h"
|
||||
#include "stroid/IO/mesh.h"
|
||||
#include "stroid/topology/curvilinear.h"
|
||||
#include "stroid/topology/mapping.h"
|
||||
#include "stroid/topology/topology.h"
|
||||
|
||||
#include "mfem.hpp"
|
||||
|
||||
#include <print>
|
||||
|
||||
struct SandboxConfig {
|
||||
std::string host = "localhost";
|
||||
int port = 19916;
|
||||
bool visualize = true;
|
||||
};
|
||||
|
||||
using MeshConfig = fourdst::config::Config<stroid::config::MeshConfig>;
|
||||
using UserConfig = fourdst::config::Config<SandboxConfig>;
|
||||
|
||||
int main() {
|
||||
MeshConfig mesh_cfg;
|
||||
mesh_cfg.load("default.toml");
|
||||
|
||||
UserConfig user_cfg;
|
||||
|
||||
|
||||
std::unique_ptr<mfem::Mesh> mesh = stroid::topology::BuildSkeleton(mesh_cfg);
|
||||
stroid::topology::Finalize(*mesh, mesh_cfg);
|
||||
stroid::topology::PromoteToHighOrder(*mesh, mesh_cfg);
|
||||
stroid::topology::ProjectMesh(*mesh, mesh_cfg);
|
||||
stroid::IO::ViewMesh(*mesh, "Sandbox Mesh", stroid::IO::VISUALIZATION_MODE::ELEMENT_ID, user_cfg->host, user_cfg->port);
|
||||
|
||||
return 0;
|
||||
|
||||
|
||||
}
|
||||
@@ -6,11 +6,17 @@
|
||||
#include "stroid/topology/curvilinear.h"
|
||||
#include "stroid/topology/mapping.h"
|
||||
#include "stroid/topology/topology.h"
|
||||
#include "stroid/utils/mesh_utils.h"
|
||||
|
||||
#include <cmath>
|
||||
#include <filesystem>
|
||||
#include <cstdlib>
|
||||
#include <string>
|
||||
#include <map>
|
||||
#include <set>
|
||||
#include <algorithm>
|
||||
#include <array>
|
||||
#include <limits>
|
||||
|
||||
namespace {
|
||||
|
||||
@@ -21,7 +27,7 @@ using Config = fourdst::config::Config<stroid::config::MeshConfig>;
|
||||
|
||||
std::filesystem::path GetSourceRoot() {
|
||||
if (const char* env = std::getenv("MESON_SOURCE_ROOT")) {
|
||||
return std::filesystem::path(env);
|
||||
return {env};
|
||||
}
|
||||
return std::filesystem::current_path();
|
||||
}
|
||||
@@ -51,6 +57,182 @@ bool IsFiniteMeshNodes(const mfem::Mesh& mesh) {
|
||||
return true;
|
||||
}
|
||||
|
||||
std::map<int, int> CountVolumeAttributes(const mfem::Mesh& mesh) {
|
||||
std::map<int, int> counts;
|
||||
for (int i = 0; i < mesh.GetNE(); ++i) {
|
||||
counts[mesh.GetAttribute(i)]++;
|
||||
}
|
||||
return counts;
|
||||
}
|
||||
|
||||
std::map<int, int> CountBoundaryAttributes(const mfem::Mesh& mesh) {
|
||||
std::map<int, int> counts;
|
||||
for (int i = 0; i < mesh.GetNBE(); ++i) {
|
||||
counts[mesh.GetBdrAttribute(i)]++;
|
||||
}
|
||||
return counts;
|
||||
}
|
||||
|
||||
mfem::Vector TransformCopy(const mfem::Vector& in, const Config& cfg, int attribute_id = 0) {
|
||||
mfem::Vector out = in;
|
||||
stroid::topology::TransformPoint(out, cfg, attribute_id);
|
||||
return out;
|
||||
}
|
||||
|
||||
double IntegrateElementVolume(const mfem::Mesh& mesh, int element_id) {
|
||||
mfem::ElementTransformation* T = const_cast<mfem::Mesh&>(mesh).GetElementTransformation(element_id);
|
||||
const int order = std::max(2, 2 * T->Order() + 2);
|
||||
const mfem::IntegrationRule& ir = mfem::IntRules.Get(T->GetGeometryType(), order);
|
||||
|
||||
double volume = 0.0;
|
||||
for (int j = 0; j < ir.GetNPoints(); ++j) {
|
||||
const mfem::IntegrationPoint& ip = ir.IntPoint(j);
|
||||
T->SetIntPoint(&ip);
|
||||
volume += ip.weight * std::abs(T->Weight());
|
||||
}
|
||||
return volume;
|
||||
}
|
||||
|
||||
double ComputeMeshVolume(const mfem::Mesh& mesh) {
|
||||
double volume = 0.0;
|
||||
for (int i = 0; i < mesh.GetNE(); ++i) {
|
||||
volume += IntegrateElementVolume(mesh, i);
|
||||
}
|
||||
return volume;
|
||||
}
|
||||
|
||||
double ComputeMeshVolumeForAttributes(const mfem::Mesh& mesh, const std::set<int>& attributes) {
|
||||
double volume = 0.0;
|
||||
for (int i = 0; i < mesh.GetNE(); ++i) {
|
||||
if (!attributes.contains(mesh.GetAttribute(i))) {
|
||||
continue;
|
||||
}
|
||||
volume += IntegrateElementVolume(mesh, i);
|
||||
}
|
||||
return volume;
|
||||
}
|
||||
|
||||
std::unique_ptr<mfem::Mesh> BuildProjectedMesh(const Config& cfg) {
|
||||
std::unique_ptr<mfem::Mesh> mesh = stroid::topology::BuildSkeleton(cfg);
|
||||
stroid::topology::Finalize(*mesh, cfg);
|
||||
stroid::topology::PromoteToHighOrder(*mesh, cfg);
|
||||
stroid::topology::ProjectMesh(*mesh, cfg);
|
||||
return mesh;
|
||||
}
|
||||
|
||||
double ComputeStellarVolumeWithDomainLFIntegrator(mfem::Mesh& mesh, const Config& cfg) {
|
||||
const int mesh_max_attr = mesh.attributes.Size() > 0 ? mesh.attributes.Max() : 0;
|
||||
const int cfg_max_attr = static_cast<int>(std::max({cfg->core_id, cfg->envelope_id, cfg->vacuum_id}));
|
||||
const int coeff_size = std::max(1, std::max(mesh_max_attr, cfg_max_attr));
|
||||
|
||||
mfem::Vector attr_coeff(coeff_size);
|
||||
attr_coeff = 0.0;
|
||||
attr_coeff(static_cast<int>(cfg->core_id) - 1) = 1.0;
|
||||
attr_coeff(static_cast<int>(cfg->envelope_id) - 1) = 1.0;
|
||||
|
||||
mfem::PWConstCoefficient stellar_coeff(attr_coeff);
|
||||
mfem::L2_FECollection fec(0, mesh.Dimension());
|
||||
mfem::FiniteElementSpace fes(&mesh, &fec);
|
||||
mfem::LinearForm lf(&fes);
|
||||
lf.AddDomainIntegrator(new mfem::DomainLFIntegrator(stellar_coeff));
|
||||
lf.Assemble();
|
||||
return lf.Sum();
|
||||
}
|
||||
|
||||
double ColumnNorm2(const mfem::DenseMatrix& J, int col) {
|
||||
double n2 = 0.0;
|
||||
for (int r = 0; r < J.Height(); ++r) {
|
||||
n2 += J(r, col) * J(r, col);
|
||||
}
|
||||
return std::sqrt(n2);
|
||||
}
|
||||
|
||||
double ComputeHexEdgeRatio(const mfem::Mesh& mesh, int elem_id) {
|
||||
static constexpr std::array<std::array<int, 2>, 12> edges = {{
|
||||
{{0, 1}}, {{1, 2}}, {{2, 3}}, {{3, 0}},
|
||||
{{4, 5}}, {{5, 6}}, {{6, 7}}, {{7, 4}},
|
||||
{{0, 4}}, {{1, 5}}, {{2, 6}}, {{3, 7}}
|
||||
}};
|
||||
|
||||
const mfem::Element* e = mesh.GetElement(elem_id);
|
||||
if (e->GetNVertices() != 8) {
|
||||
return 1.0;
|
||||
}
|
||||
|
||||
const int* v = e->GetVertices();
|
||||
double min_edge = std::numeric_limits<double>::infinity();
|
||||
double max_edge = 0.0;
|
||||
|
||||
for (const auto& [a, b] : edges) {
|
||||
const double* pa = mesh.GetVertex(v[a]);
|
||||
const double* pb = mesh.GetVertex(v[b]);
|
||||
const double dx = pa[0] - pb[0];
|
||||
const double dy = pa[1] - pb[1];
|
||||
const double dz = pa[2] - pb[2];
|
||||
const double len = std::sqrt(dx * dx + dy * dy + dz * dz);
|
||||
min_edge = std::min(min_edge, len);
|
||||
max_edge = std::max(max_edge, len);
|
||||
}
|
||||
|
||||
if (min_edge <= 0.0 || !std::isfinite(min_edge)) {
|
||||
return std::numeric_limits<double>::infinity();
|
||||
}
|
||||
return max_edge / min_edge;
|
||||
}
|
||||
|
||||
struct ConditioningStats {
|
||||
double min_det = std::numeric_limits<double>::infinity();
|
||||
double max_det = 0.0;
|
||||
double min_scaled_jac = std::numeric_limits<double>::infinity();
|
||||
double max_stretch_ratio = 0.0;
|
||||
double max_edge_ratio = 0.0;
|
||||
int samples = 0;
|
||||
};
|
||||
|
||||
ConditioningStats CollectConditioningStats(const mfem::Mesh& mesh, const std::set<int>& attrs) {
|
||||
ConditioningStats stats;
|
||||
|
||||
for (int i = 0; i < mesh.GetNE(); ++i) {
|
||||
if (!attrs.empty() && !attrs.contains(mesh.GetAttribute(i))) {
|
||||
continue;
|
||||
}
|
||||
|
||||
stats.max_edge_ratio = std::max(stats.max_edge_ratio, ComputeHexEdgeRatio(mesh, i));
|
||||
|
||||
mfem::ElementTransformation* T = const_cast<mfem::Mesh&>(mesh).GetElementTransformation(i);
|
||||
const int order = std::max(2, 2 * T->Order() + 2);
|
||||
const mfem::IntegrationRule& ir = mfem::IntRules.Get(T->GetGeometryType(), order);
|
||||
|
||||
for (int j = 0; j < ir.GetNPoints(); ++j) {
|
||||
const mfem::IntegrationPoint& ip = ir.IntPoint(j);
|
||||
T->SetIntPoint(&ip);
|
||||
|
||||
const mfem::DenseMatrix& J = T->Jacobian();
|
||||
const double det = T->Weight();
|
||||
const double abs_det = std::abs(det);
|
||||
|
||||
const double c0 = ColumnNorm2(J, 0);
|
||||
const double c1 = ColumnNorm2(J, 1);
|
||||
const double c2 = ColumnNorm2(J, 2);
|
||||
|
||||
const double denom = c0 * c1 * c2;
|
||||
const double scaled_jac = (denom > 0.0) ? (abs_det / denom) : 0.0;
|
||||
|
||||
const double cmax = std::max({c0, c1, c2});
|
||||
const double cmin = std::max(1e-16, std::min({c0, c1, c2}));
|
||||
const double stretch_ratio = cmax / cmin;
|
||||
|
||||
stats.min_det = std::min(stats.min_det, det);
|
||||
stats.max_det = std::max(stats.max_det, abs_det);
|
||||
stats.min_scaled_jac = std::min(stats.min_scaled_jac, scaled_jac);
|
||||
stats.max_stretch_ratio = std::max(stats.max_stretch_ratio, stretch_ratio);
|
||||
stats.samples++;
|
||||
}
|
||||
}
|
||||
|
||||
return stats;
|
||||
}
|
||||
|
||||
} // namespace
|
||||
|
||||
/**
|
||||
@@ -58,18 +240,80 @@ bool IsFiniteMeshNodes(const mfem::Mesh& mesh) {
|
||||
*/
|
||||
class stroidTest : public ::testing::Test {};
|
||||
|
||||
/**
|
||||
* @brief Verifies the baseline block topology cardinalities in the no-vacuum case.
|
||||
* @details
|
||||
* Rationale: this is the fastest canary for accidental edits in block construction order,
|
||||
* vertex indexing, or boundary-face assembly.
|
||||
* Method: build the default skeleton and assert exact counts (3D, 16 vertices, 7 hexes, 6 bdr quads).
|
||||
* If this fails: inspect `stroid::topology::BuildSkeleton` in `src/lib/topology/topology.cpp`,
|
||||
* especially `add_box`, `stellar_shells`, and `surface_bdr_quads`, plus ID defaults in
|
||||
* `src/include/stroid/config/config.h`.
|
||||
*/
|
||||
TEST_F(stroidTest, BuildSkeleton_DefaultCounts) {
|
||||
const Config cfg;
|
||||
const std::unique_ptr<mfem::Mesh> mesh = stroid::topology::BuildSkeleton(cfg);
|
||||
|
||||
ASSERT_NE(mesh, nullptr);
|
||||
EXPECT_EQ(mesh->Dimension(), 3);
|
||||
EXPECT_EQ(mesh->GetNV(), 16);
|
||||
EXPECT_EQ(mesh->GetNE(), 7);
|
||||
EXPECT_EQ(mesh->GetNBE(), 6);
|
||||
EXPECT_EQ(mesh->GetNV(), 24);
|
||||
EXPECT_EQ(mesh->GetNE(), 13);
|
||||
EXPECT_EQ(mesh->GetNBE(), 12);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Verifies topology cardinalities when the external vacuum domain is enabled.
|
||||
* @details
|
||||
* Rationale: external-domain regressions usually surface first as wrong element/boundary counts.
|
||||
* Method: load `configs/test_external_domain.toml`, build skeleton, assert exact counts (24, 13, 12).
|
||||
* If this fails: inspect vacuum block creation and infinity boundary insertion in
|
||||
* `src/lib/topology/topology.cpp` (`vacuum_shells`, `inf_bdr_quads`) and config parsing path.
|
||||
*/
|
||||
TEST_F(stroidTest, BuildSkeleton_ExternalDomainCounts) {
|
||||
const Config cfg = LoadConfigFromRepo("configs/test_external_domain.toml");
|
||||
const std::unique_ptr<mfem::Mesh> mesh = stroid::topology::BuildSkeleton(cfg);
|
||||
|
||||
ASSERT_NE(mesh, nullptr);
|
||||
EXPECT_EQ(mesh->Dimension(), 3);
|
||||
EXPECT_EQ(mesh->GetNV(), 24);
|
||||
EXPECT_EQ(mesh->GetNE(), 13);
|
||||
EXPECT_EQ(mesh->GetNBE(), 12);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Confirms attribute bookkeeping for core/envelope/vacuum and surface/infinity boundaries.
|
||||
* @details
|
||||
* Rationale: physics coupling depends on stable material and boundary IDs, not just geometry.
|
||||
* Method: count attributes immediately after skeleton build and assert expected multiplicities.
|
||||
* If this fails: inspect element insertion attribute arguments in `BuildSkeleton` and verify
|
||||
* `core_id`, `envelope_id`, `vacuum_id`, `surface_bdr_id`, `inf_bdr_id` in config fixtures.
|
||||
*/
|
||||
TEST_F(stroidTest, BuildSkeleton_ExternalDomainAttributes) {
|
||||
const Config cfg = LoadConfigFromRepo("configs/test_external_domain.toml");
|
||||
const std::unique_ptr<mfem::Mesh> mesh = stroid::topology::BuildSkeleton(cfg);
|
||||
|
||||
ASSERT_NE(mesh, nullptr);
|
||||
|
||||
const auto volume_attr_counts = CountVolumeAttributes(*mesh);
|
||||
EXPECT_EQ(volume_attr_counts.at(static_cast<int>(cfg->core_id)), 1);
|
||||
EXPECT_EQ(volume_attr_counts.at(static_cast<int>(cfg->envelope_id)), 6);
|
||||
EXPECT_EQ(volume_attr_counts.at(static_cast<int>(cfg->vacuum_id)), 6);
|
||||
|
||||
const auto boundary_attr_counts = CountBoundaryAttributes(*mesh);
|
||||
EXPECT_EQ(boundary_attr_counts.at(static_cast<int>(cfg->surface_bdr_id)), 6);
|
||||
EXPECT_EQ(boundary_attr_counts.at(static_cast<int>(cfg->inf_bdr_id)), 6);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @brief Ensures `Finalize` performs refinement and preserves conforming topology.
|
||||
* @details
|
||||
* Rationale: `Finalize` is the topology gate before high-order projection; nonconforming output here
|
||||
* contaminates every downstream stage.
|
||||
* Method: compare element count pre/post finalize and assert `mesh.Conforming()`.
|
||||
* If this fails: inspect `stroid::topology::Finalize` in `src/lib/topology/topology.cpp`
|
||||
* (`FinalizeTopology`, orientation checks, `UniformRefinement` loop).
|
||||
*/
|
||||
TEST_F(stroidTest, Finalize_RefinementIncreasesElements) {
|
||||
const Config cfg;
|
||||
const std::unique_ptr<mfem::Mesh> mesh = stroid::topology::BuildSkeleton(cfg);
|
||||
@@ -81,6 +325,117 @@ TEST_F(stroidTest, Finalize_RefinementIncreasesElements) {
|
||||
EXPECT_TRUE(mesh->Conforming());
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Checks exact 3D uniform-refinement scaling for default topology.
|
||||
* @details
|
||||
* Rationale: each hexahedron should split into 8; this catches subtle refine-loop regressions.
|
||||
* Method: run with fixed `refinement_levels=2` config and assert `NE_final = NE_initial * 8^2`.
|
||||
* If this fails: inspect refine-loop count and any topology-side early exits in `Finalize`.
|
||||
*/
|
||||
TEST_F(stroidTest, Finalize_DefaultRefinementScalesHexCountByEightPowerL) {
|
||||
const Config cfg = LoadConfigFromRepo("configs/test_refinement_l2.toml");
|
||||
|
||||
const std::unique_ptr<mfem::Mesh> mesh = stroid::topology::BuildSkeleton(cfg);
|
||||
const int initial_elements = mesh->GetNE();
|
||||
|
||||
stroid::topology::Finalize(*mesh, cfg);
|
||||
|
||||
const int expected = initial_elements * 8 * 8;
|
||||
EXPECT_EQ(mesh->GetNE(), expected);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Checks exact 3D uniform-refinement scaling for external-domain topology.
|
||||
* @details
|
||||
* Rationale: refinement behavior must be independent of whether vacuum blocks are present.
|
||||
* Method: use fixed `refinement_levels=1` external config and assert `NE_final = NE_initial * 8`.
|
||||
* If this fails: inspect `Finalize` and verify external-domain elements are not excluded from refinement.
|
||||
*/
|
||||
TEST_F(stroidTest, Finalize_ExternalDomainRefinementScalesHexCountByEightPowerL) {
|
||||
const Config cfg = LoadConfigFromRepo("configs/test_external_domain_refinement_l1.toml");
|
||||
|
||||
const std::unique_ptr<mfem::Mesh> mesh = stroid::topology::BuildSkeleton(cfg);
|
||||
const int initial_elements = mesh->GetNE();
|
||||
|
||||
stroid::topology::Finalize(*mesh, cfg);
|
||||
|
||||
const int expected = initial_elements * 8;
|
||||
EXPECT_EQ(mesh->GetNE(), expected);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Validates conformance + attribute presence after refining external-domain meshes.
|
||||
* @details
|
||||
* Rationale: refinement must not silently drop regions or boundaries in multi-material meshes.
|
||||
* Method: finalize external mesh, check conforming status, growth in `NE`, and nonzero counts for expected IDs.
|
||||
* If this fails: inspect `Finalize` orientation/refinement calls and any attribute mutation side effects.
|
||||
*/
|
||||
TEST_F(stroidTest, Finalize_ExternalDomainConformingAndRefined) {
|
||||
const Config cfg = LoadConfigFromRepo("configs/test_external_domain.toml");
|
||||
const std::unique_ptr<mfem::Mesh> mesh = stroid::topology::BuildSkeleton(cfg);
|
||||
const int initial_elements = mesh->GetNE();
|
||||
|
||||
stroid::topology::Finalize(*mesh, cfg);
|
||||
|
||||
EXPECT_TRUE(mesh->Conforming());
|
||||
EXPECT_GT(mesh->GetNE(), initial_elements);
|
||||
|
||||
const auto volume_attr_counts = CountVolumeAttributes(*mesh);
|
||||
EXPECT_GT(volume_attr_counts.at(static_cast<int>(cfg->core_id)), 0);
|
||||
EXPECT_GT(volume_attr_counts.at(static_cast<int>(cfg->envelope_id)), 0);
|
||||
EXPECT_GT(volume_attr_counts.at(static_cast<int>(cfg->vacuum_id)), 0);
|
||||
|
||||
const auto boundary_attr_counts = CountBoundaryAttributes(*mesh);
|
||||
EXPECT_GT(boundary_attr_counts.at(static_cast<int>(cfg->surface_bdr_id)), 0);
|
||||
EXPECT_GT(boundary_attr_counts.at(static_cast<int>(cfg->inf_bdr_id)), 0);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Enforces strict attribute set invariants after finalize.
|
||||
* @details
|
||||
* Rationale: presence checks alone can miss rogue IDs introduced by buggy attribute rewrites.
|
||||
* Method: assert post-finalize volume/boundary attribute keys exactly match expected sets.
|
||||
* If this fails: inspect all calls to `SetAttribute` / `SetBdrAttribute` in topology + utility code,
|
||||
* notably `src/lib/topology/topology.cpp` and `src/lib/utils/mesh_utils.cpp`.
|
||||
*/
|
||||
TEST_F(stroidTest, Finalize_ExternalDomainKeepsOnlyExpectedMaterialAndBoundaryIDs) {
|
||||
const Config cfg = LoadConfigFromRepo("configs/test_external_domain.toml");
|
||||
const std::unique_ptr<mfem::Mesh> mesh = stroid::topology::BuildSkeleton(cfg);
|
||||
|
||||
stroid::topology::Finalize(*mesh, cfg);
|
||||
|
||||
const auto volume_attr_counts = CountVolumeAttributes(*mesh);
|
||||
const std::set<int> expected_volume_ids = {
|
||||
static_cast<int>(cfg->core_id),
|
||||
static_cast<int>(cfg->envelope_id),
|
||||
static_cast<int>(cfg->vacuum_id)
|
||||
};
|
||||
for (const auto& [attr, count] : volume_attr_counts) {
|
||||
EXPECT_TRUE(expected_volume_ids.contains(attr));
|
||||
EXPECT_GT(count, 0);
|
||||
}
|
||||
EXPECT_EQ(volume_attr_counts.size(), expected_volume_ids.size());
|
||||
|
||||
const auto boundary_attr_counts = CountBoundaryAttributes(*mesh);
|
||||
const std::set<int> expected_boundary_ids = {
|
||||
static_cast<int>(cfg->surface_bdr_id),
|
||||
static_cast<int>(cfg->inf_bdr_id)
|
||||
};
|
||||
for (const auto& [attr, count] : boundary_attr_counts) {
|
||||
EXPECT_TRUE(expected_boundary_ids.contains(attr));
|
||||
EXPECT_GT(count, 0);
|
||||
}
|
||||
EXPECT_EQ(boundary_attr_counts.size(), expected_boundary_ids.size());
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Verifies high-order promotion actually attaches nodal data.
|
||||
* @details
|
||||
* Rationale: projection and most quality metrics are node-based; missing nodes means pipeline misuse.
|
||||
* Method: finalize then promote, assert nodes exist and are finite.
|
||||
* If this fails: inspect `stroid::topology::PromoteToHighOrder` in
|
||||
* `src/lib/topology/curvilinear.cpp` (`H1_FECollection`, `SetNodalFESpace`).
|
||||
*/
|
||||
TEST_F(stroidTest, PromoteToHighOrder_SetsNodes) {
|
||||
const Config cfg;
|
||||
const std::unique_ptr<mfem::Mesh> mesh = stroid::topology::BuildSkeleton(cfg);
|
||||
@@ -92,6 +447,14 @@ TEST_F(stroidTest, PromoteToHighOrder_SetsNodes) {
|
||||
EXPECT_TRUE(IsFiniteMeshNodes(*mesh));
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Confirms projection does not produce NaN/Inf nodal coordinates.
|
||||
* @details
|
||||
* Rationale: finite nodes are the minimum numerical sanity condition for any downstream solver.
|
||||
* Method: run full pre-projection pipeline, project once, assert all node components are finite.
|
||||
* If this fails: inspect `ProjectMesh` and mapping functions in
|
||||
* `src/lib/topology/curvilinear.cpp` and `src/lib/topology/mapping.cpp`.
|
||||
*/
|
||||
TEST_F(stroidTest, ProjectMesh_ProducesFiniteNodes) {
|
||||
const Config cfg;
|
||||
const std::unique_ptr<mfem::Mesh> mesh = stroid::topology::BuildSkeleton(cfg);
|
||||
@@ -103,6 +466,13 @@ TEST_F(stroidTest, ProjectMesh_ProducesFiniteNodes) {
|
||||
EXPECT_TRUE(IsFiniteMeshNodes(*mesh));
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Unit-checks equiangular mapping against closed-form tangent expression.
|
||||
* @details
|
||||
* Rationale: this catches formula or branch edits before they propagate into mesh-wide projection.
|
||||
* Method: transform a known point and compare against explicit `tan(pi/4 * ratio)` expectations.
|
||||
* If this fails: inspect `ApplyEquiangular` in `src/lib/topology/mapping.cpp`, especially dominant-axis logic.
|
||||
*/
|
||||
TEST_F(stroidTest, ApplyEquiangular_BasicTransform) {
|
||||
mfem::Vector pos(3);
|
||||
pos(0) = 1.0;
|
||||
@@ -117,6 +487,14 @@ TEST_F(stroidTest, ApplyEquiangular_BasicTransform) {
|
||||
EXPECT_NEAR(pos(2), expected_z, 1e-12);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Verifies spheroidal flattening scales only the z component as configured.
|
||||
* @details
|
||||
* Rationale: flattening is intentionally simple and should remain easy to reason about.
|
||||
* Method: load flattening config, apply transform to z-axis point, check exact expected z.
|
||||
* If this fails: inspect `ApplySpheroidal` in `src/lib/topology/mapping.cpp` and fixture values in
|
||||
* `configs/test_flattening.toml`.
|
||||
*/
|
||||
TEST_F(stroidTest, ApplySpheroidal_FlattensZ) {
|
||||
const Config cfg = LoadConfigFromRepo("configs/test_flattening.toml");
|
||||
|
||||
@@ -130,21 +508,14 @@ TEST_F(stroidTest, ApplySpheroidal_FlattensZ) {
|
||||
EXPECT_NEAR(pos(2), 8.0, 1e-12);
|
||||
}
|
||||
|
||||
TEST_F(stroidTest, ApplyKelvin_ExpandsOutsideStar) {
|
||||
const Config cfg;
|
||||
|
||||
mfem::Vector pos(3);
|
||||
pos(0) = 5.5;
|
||||
pos(1) = 0.0;
|
||||
pos(2) = 0.0;
|
||||
|
||||
stroid::topology::ApplyKelvin(pos, cfg);
|
||||
|
||||
EXPECT_NEAR(pos(0), 6.0, 1e-12);
|
||||
EXPECT_NEAR(pos(1), 0.0, 1e-12);
|
||||
EXPECT_NEAR(pos(2), 0.0, 1e-12);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Ensures axis-aligned points inside the core stay unchanged in this mapping regime.
|
||||
* @details
|
||||
* Rationale: axis points are symmetry anchors; any drift here is usually a serious branch regression.
|
||||
* Method: map `(1,0,0)` with default config and assert identity.
|
||||
* If this fails: inspect `TransformPoint` core-zone blend path and instability guard in
|
||||
* `src/lib/topology/mapping.cpp`.
|
||||
*/
|
||||
TEST_F(stroidTest, TransformPoint_AxisInsideCore_NoChange) {
|
||||
const Config cfg;
|
||||
|
||||
@@ -160,6 +531,13 @@ TEST_F(stroidTest, TransformPoint_AxisInsideCore_NoChange) {
|
||||
EXPECT_NEAR(pos(2), 0.0, 1e-12);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Ensures axis-aligned envelope points remain unchanged under default spherical setup.
|
||||
* @details
|
||||
* Rationale: this verifies envelope branch consistency and avoids silent radial drift.
|
||||
* Method: map `(3,0,0)` and assert identity under default parameters.
|
||||
* If this fails: inspect `TransformPoint` envelope branch and normalized-direction reconstruction logic.
|
||||
*/
|
||||
TEST_F(stroidTest, TransformPoint_AxisEnvelope_NoChange) {
|
||||
const Config cfg;
|
||||
|
||||
@@ -175,21 +553,92 @@ TEST_F(stroidTest, TransformPoint_AxisEnvelope_NoChange) {
|
||||
EXPECT_NEAR(pos(2), 0.0, 1e-12);
|
||||
}
|
||||
|
||||
TEST_F(stroidTest, TransformPoint_AxisOutsideStar_KelvinExpands) {
|
||||
/**
|
||||
* @brief Checks continuity near `r_core` and `r_star` transition surfaces.
|
||||
* @details
|
||||
* Rationale: discontinuities at interfaces destabilize high-order interpolation and integration.
|
||||
* Method: evaluate points at `r*(1±eps)` and assert mapped separation stays small in L2 norm.
|
||||
* If this fails: inspect transition formulas in `TransformPoint` (core blend, envelope mapping)
|
||||
* and any recent edits to `core_steepness` handling.
|
||||
*/
|
||||
TEST_F(stroidTest, TransformPoint_IsContinuousAcrossCoreAndStarInterfaces) {
|
||||
const Config cfg;
|
||||
constexpr double eps = 1e-6;
|
||||
|
||||
mfem::Vector pos(3);
|
||||
pos(0) = 5.5;
|
||||
pos(1) = 0.0;
|
||||
pos(2) = 0.0;
|
||||
mfem::Vector dir(3);
|
||||
dir(0) = 1.0;
|
||||
dir(1) = 0.6;
|
||||
dir(2) = -0.4;
|
||||
|
||||
stroid::topology::TransformPoint(pos, cfg, 0);
|
||||
mfem::Vector near_core_left = dir;
|
||||
near_core_left *= cfg->r_core * (1.0 - eps);
|
||||
mfem::Vector near_core_right = dir;
|
||||
near_core_right *= cfg->r_core * (1.0 + eps);
|
||||
|
||||
EXPECT_NEAR(pos(0), 6.0, 1e-12);
|
||||
EXPECT_NEAR(pos(1), 0.0, 1e-12);
|
||||
EXPECT_NEAR(pos(2), 0.0, 1e-12);
|
||||
const mfem::Vector core_left_mapped = TransformCopy(near_core_left, cfg);
|
||||
const mfem::Vector core_right_mapped = TransformCopy(near_core_right, cfg);
|
||||
|
||||
mfem::Vector diff = core_left_mapped;
|
||||
diff -= core_right_mapped;
|
||||
EXPECT_LT(diff.Norml2(), 1e-3);
|
||||
|
||||
mfem::Vector near_star_left = dir;
|
||||
near_star_left *= cfg->r_star * (1.0 - eps);
|
||||
mfem::Vector near_star_right = dir;
|
||||
near_star_right *= cfg->r_star * (1.0 + eps);
|
||||
|
||||
const mfem::Vector star_left_mapped = TransformCopy(near_star_left, cfg);
|
||||
const mfem::Vector star_right_mapped = TransformCopy(near_star_right, cfg);
|
||||
|
||||
diff = star_left_mapped;
|
||||
diff -= star_right_mapped;
|
||||
EXPECT_LT(diff.Norml2(), 1e-3);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Verifies expected sign and axis-permutation symmetry in the spherical case.
|
||||
* @details
|
||||
* Rationale: symmetry violations usually indicate branch asymmetry bugs in mapping logic.
|
||||
* Method: compare mapped values for original, sign-flipped, and axis-swapped points.
|
||||
* If this fails: inspect dominant-axis branching in `ApplyEquiangular` and normalization flow in
|
||||
* `TransformPoint`.
|
||||
*/
|
||||
TEST_F(stroidTest, TransformPoint_RespectsSignAndAxisPermutationSymmetryWithoutFlattening) {
|
||||
const Config cfg;
|
||||
|
||||
mfem::Vector p(3);
|
||||
p(0) = 4.0;
|
||||
p(1) = 2.0;
|
||||
p(2) = 1.0;
|
||||
|
||||
mfem::Vector p_neg = p;
|
||||
p_neg *= -1.0;
|
||||
|
||||
mfem::Vector p_swapped(3);
|
||||
p_swapped(0) = p(1);
|
||||
p_swapped(1) = p(0);
|
||||
p_swapped(2) = p(2);
|
||||
|
||||
const mfem::Vector mapped = TransformCopy(p, cfg);
|
||||
const mfem::Vector mapped_neg = TransformCopy(p_neg, cfg);
|
||||
const mfem::Vector mapped_swapped = TransformCopy(p_swapped, cfg);
|
||||
|
||||
EXPECT_NEAR(mapped_neg(0), -mapped(0), 1e-12);
|
||||
EXPECT_NEAR(mapped_neg(1), -mapped(1), 1e-12);
|
||||
EXPECT_NEAR(mapped_neg(2), -mapped(2), 1e-12);
|
||||
|
||||
EXPECT_NEAR(mapped_swapped(0), mapped(1), 1e-12);
|
||||
EXPECT_NEAR(mapped_swapped(1), mapped(0), 1e-12);
|
||||
EXPECT_NEAR(mapped_swapped(2), mapped(2), 1e-12);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Smoke-tests mesh serialization to MFEM format.
|
||||
* @details
|
||||
* Rationale: I/O regressions are easy to miss during geometry-focused development.
|
||||
* Method: write a finalized mesh to temp storage and assert file exists and is non-empty.
|
||||
* If this fails: inspect `stroid::IO::SaveMesh` in `src/lib/IO/mesh.cpp` and local filesystem perms.
|
||||
*/
|
||||
TEST_F(stroidTest, SaveMesh_WritesFile) {
|
||||
const Config cfg;
|
||||
const std::unique_ptr<mfem::Mesh> mesh = stroid::topology::BuildSkeleton(cfg);
|
||||
@@ -207,6 +656,14 @@ TEST_F(stroidTest, SaveMesh_WritesFile) {
|
||||
std::filesystem::remove(mesh_path, ec);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief End-to-end baseline pipeline test for the default domain.
|
||||
* @details
|
||||
* Rationale: validates the canonical operation order used by both library examples and CLI.
|
||||
* Method: execute full pipeline and assert non-empty, nodal, finite output mesh.
|
||||
* If this fails: check call-order assumptions and recent edits in
|
||||
* `src/lib/topology/topology.cpp` / `src/lib/topology/curvilinear.cpp`.
|
||||
*/
|
||||
TEST_F(stroidTest, EndToEnd_BuildFinalizePromoteProject) {
|
||||
const Config cfg;
|
||||
const std::unique_ptr<mfem::Mesh> mesh = stroid::topology::BuildSkeleton(cfg);
|
||||
@@ -218,3 +675,215 @@ TEST_F(stroidTest, EndToEnd_BuildFinalizePromoteProject) {
|
||||
EXPECT_NE(mesh->GetNodes(), nullptr);
|
||||
EXPECT_TRUE(IsFiniteMeshNodes(*mesh));
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief End-to-end pipeline test for external-domain meshes.
|
||||
* @details
|
||||
* Rationale: confirms the same pipeline remains valid when vacuum blocks are included.
|
||||
* Method: run full external-domain pipeline and assert conforming + finite nodal output.
|
||||
* If this fails: inspect external-domain topology assembly and projection loops over mixed attributes.
|
||||
*/
|
||||
TEST_F(stroidTest, EndToEnd_ExternalDomainBuildFinalizePromoteProject) {
|
||||
const Config cfg = LoadConfigFromRepo("configs/test_external_domain.toml");
|
||||
const std::unique_ptr<mfem::Mesh> mesh = stroid::topology::BuildSkeleton(cfg);
|
||||
stroid::topology::Finalize(*mesh, cfg);
|
||||
stroid::topology::PromoteToHighOrder(*mesh, cfg);
|
||||
stroid::topology::ProjectMesh(*mesh, cfg);
|
||||
|
||||
EXPECT_TRUE(mesh->Conforming());
|
||||
EXPECT_GT(mesh->GetNE(), 0);
|
||||
EXPECT_NE(mesh->GetNodes(), nullptr);
|
||||
EXPECT_TRUE(IsFiniteMeshNodes(*mesh));
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Verifies stellar volume invariance with respect to adding a vacuum shell.
|
||||
* @details
|
||||
* Rationale: the vacuum region should extend domain extent, not alter stellar mass volume.
|
||||
* Method: integrate core+envelope volume in both configs and compare relative difference.
|
||||
* If this fails: inspect attribute-filtered volume helpers in this file and mapping/topology changes
|
||||
* that may leak starside nodes into vacuum geometry.
|
||||
*/
|
||||
TEST_F(stroidTest, Volume_StellarDomainMatchesWithAndWithoutExternalDomain) {
|
||||
const Config no_external_cfg = LoadConfigFromRepo("configs/test_volume_no_external.toml");
|
||||
const Config with_external_cfg = LoadConfigFromRepo("configs/test_volume_with_external.toml");
|
||||
|
||||
const std::unique_ptr<mfem::Mesh> no_external_mesh = stroid::topology::BuildSkeleton(no_external_cfg);
|
||||
stroid::topology::Finalize(*no_external_mesh, no_external_cfg);
|
||||
stroid::topology::PromoteToHighOrder(*no_external_mesh, no_external_cfg);
|
||||
stroid::topology::ProjectMesh(*no_external_mesh, no_external_cfg);
|
||||
|
||||
const std::unique_ptr<mfem::Mesh> with_external_mesh = stroid::topology::BuildSkeleton(with_external_cfg);
|
||||
stroid::topology::Finalize(*with_external_mesh, with_external_cfg);
|
||||
stroid::topology::PromoteToHighOrder(*with_external_mesh, with_external_cfg);
|
||||
stroid::topology::ProjectMesh(*with_external_mesh, with_external_cfg);
|
||||
|
||||
const std::set<int> stellar_attrs_no_external = {
|
||||
static_cast<int>(no_external_cfg->core_id),
|
||||
static_cast<int>(no_external_cfg->envelope_id)
|
||||
};
|
||||
const std::set<int> stellar_attrs_with_external = {
|
||||
static_cast<int>(with_external_cfg->core_id),
|
||||
static_cast<int>(with_external_cfg->envelope_id)
|
||||
};
|
||||
|
||||
const double stellar_volume_no_external = ComputeMeshVolumeForAttributes(*no_external_mesh, stellar_attrs_no_external);
|
||||
const double stellar_volume_with_external = ComputeMeshVolumeForAttributes(*with_external_mesh, stellar_attrs_with_external);
|
||||
|
||||
const double rel_diff = std::abs(stellar_volume_with_external - stellar_volume_no_external) /
|
||||
std::max(stellar_volume_with_external, stellar_volume_no_external);
|
||||
EXPECT_LT(rel_diff, 5e-3);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Confirms total volume decomposition into stellar + vacuum components.
|
||||
* @details
|
||||
* Rationale: this explicitly checks that vacuum exclusion logic is doing real work, not a no-op.
|
||||
* Method: on external mesh, compute total, stellar-only, and vacuum-only volumes and enforce
|
||||
* additive consistency.
|
||||
* If this fails: inspect `ComputeMeshVolume*` helpers and region attribute IDs in config fixtures.
|
||||
*/
|
||||
TEST_F(stroidTest, Volume_ExternalMeshExcludesVacuumWhenRequested) {
|
||||
const Config cfg = LoadConfigFromRepo("configs/test_volume_with_external.toml");
|
||||
|
||||
const std::unique_ptr<mfem::Mesh> mesh = stroid::topology::BuildSkeleton(cfg);
|
||||
stroid::topology::Finalize(*mesh, cfg);
|
||||
stroid::topology::PromoteToHighOrder(*mesh, cfg);
|
||||
stroid::topology::ProjectMesh(*mesh, cfg);
|
||||
|
||||
const std::set<int> stellar_attrs = {
|
||||
static_cast<int>(cfg->core_id),
|
||||
static_cast<int>(cfg->envelope_id)
|
||||
};
|
||||
const std::set<int> vacuum_attr = {static_cast<int>(cfg->vacuum_id)};
|
||||
|
||||
const double total_volume = ComputeMeshVolume(*mesh);
|
||||
const double stellar_volume = ComputeMeshVolumeForAttributes(*mesh, stellar_attrs);
|
||||
const double vacuum_volume = ComputeMeshVolumeForAttributes(*mesh, vacuum_attr);
|
||||
|
||||
EXPECT_GT(vacuum_volume, 0.0);
|
||||
EXPECT_GT(total_volume, stellar_volume);
|
||||
EXPECT_NEAR(total_volume, stellar_volume + vacuum_volume, total_volume * 1e-9 + 1e-12);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Compares direct Jacobian-based stellar volume to analytic sphere volume.
|
||||
* @details
|
||||
* Rationale: anchors numerical integration against a closed-form reference in the spherical limit.
|
||||
* Method: integrate core+envelope using element transformations, compare to `4/3*pi*r_star^3`.
|
||||
* If this fails: inspect mapping spherical path (`flattening=0`) and quadrature order in
|
||||
* `IntegrateElementVolume`.
|
||||
*/
|
||||
TEST_F(stroidTest, Volume_SphericalStellarDomainMatchesAnalyticSphere) {
|
||||
const Config cfg = LoadConfigFromRepo("configs/test_volume_spherical_no_external.toml");
|
||||
|
||||
const std::unique_ptr<mfem::Mesh> mesh = stroid::topology::BuildSkeleton(cfg);
|
||||
stroid::topology::Finalize(*mesh, cfg);
|
||||
stroid::topology::PromoteToHighOrder(*mesh, cfg);
|
||||
stroid::topology::ProjectMesh(*mesh, cfg);
|
||||
|
||||
const std::set<int> stellar_attrs = {
|
||||
static_cast<int>(cfg->core_id),
|
||||
static_cast<int>(cfg->envelope_id)
|
||||
};
|
||||
|
||||
const double measured_volume = ComputeMeshVolumeForAttributes(*mesh, stellar_attrs);
|
||||
const double analytic_volume = 4.0 / 3.0 * kPi * std::pow(cfg->r_star, 3.0);
|
||||
const double rel_err = std::abs(measured_volume - analytic_volume) / analytic_volume;
|
||||
|
||||
EXPECT_LT(rel_err, 1e-2);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Repeats spherical analytic-volume check via MFEM `DomainLFIntegrator`.
|
||||
* @details
|
||||
* Rationale: independent integration machinery lowers the risk of helper-specific false confidence.
|
||||
* Method: build attribute-weighted `PWConstCoefficient` (core+envelope=1, vacuum=0), assemble
|
||||
* domain linear form, and compare against analytic sphere volume.
|
||||
* If this fails: inspect coefficient indexing (attr-1 convention), `ComputeStellarVolumeWithDomainLFIntegrator`,
|
||||
* and MFEM assembly setup in this test file.
|
||||
*/
|
||||
TEST_F(stroidTest, Volume_SphericalStellarDomainDomainLFIntegratorMatchesAnalyticSphere) {
|
||||
const Config cfg = LoadConfigFromRepo("configs/test_volume_spherical_with_external.toml");
|
||||
|
||||
std::unique_ptr<mfem::Mesh> mesh = BuildProjectedMesh(cfg);
|
||||
const double measured_volume = ComputeStellarVolumeWithDomainLFIntegrator(*mesh, cfg);
|
||||
const double analytic_volume = 4.0 / 3.0 * kPi * std::pow(cfg->r_star, 3.0);
|
||||
const double rel_err = std::abs(measured_volume - analytic_volume) / analytic_volume;
|
||||
|
||||
EXPECT_LT(rel_err, 1e-2);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Enforces baseline conditioning bounds for the default projected mesh.
|
||||
* @details
|
||||
* Rationale: this guards against silent degradation in element quality that may still pass finiteness checks.
|
||||
* Method: sample Jacobian stats over quadrature points and assert positivity + distortion/stretch bounds.
|
||||
* If this fails: inspect mapping formulas in `src/lib/topology/mapping.cpp` and any changes to
|
||||
* refinement/order config used by `configs/test_volume_spherical_no_external.toml`.
|
||||
*/
|
||||
TEST_F(stroidTest, Conditioning_DefaultMeshHasPositiveJacobiansAndReasonableShape) {
|
||||
const Config cfg = LoadConfigFromRepo("configs/test_volume_spherical_no_external.toml");
|
||||
const std::unique_ptr<mfem::Mesh> mesh = BuildProjectedMesh(cfg);
|
||||
|
||||
const ConditioningStats stats = CollectConditioningStats(*mesh, {});
|
||||
|
||||
ASSERT_GT(stats.samples, 0);
|
||||
EXPECT_GT(stats.min_det, 1e-10);
|
||||
EXPECT_LT(stats.max_det / stats.min_det, 1e6);
|
||||
EXPECT_GT(stats.min_scaled_jac, 2e-2);
|
||||
EXPECT_LT(stats.max_stretch_ratio, 50.0);
|
||||
EXPECT_LT(stats.max_edge_ratio, 50.0);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Applies Jacobian conditioning checks independently to core, envelope, and vacuum regions.
|
||||
* @details
|
||||
* Rationale: global stats can hide localized failures; region-level checks make regressions diagnosable.
|
||||
* Method: collect conditioning statistics per attribute and enforce positive Jacobians + scaled-Jacobian floors.
|
||||
* If this fails: inspect region-specific mapping behavior in `TransformPoint` and verify attribute
|
||||
* assignment in `BuildSkeleton`.
|
||||
*/
|
||||
TEST_F(stroidTest, Conditioning_ExternalMeshPerRegionHasPositiveJacobians) {
|
||||
const Config cfg = LoadConfigFromRepo("configs/test_volume_spherical_with_external.toml");
|
||||
const std::unique_ptr<mfem::Mesh> mesh = BuildProjectedMesh(cfg);
|
||||
|
||||
const ConditioningStats core_stats = CollectConditioningStats(*mesh, {static_cast<int>(cfg->core_id)});
|
||||
const ConditioningStats envelope_stats = CollectConditioningStats(*mesh, {static_cast<int>(cfg->envelope_id)});
|
||||
const ConditioningStats vacuum_stats = CollectConditioningStats(*mesh, {static_cast<int>(cfg->vacuum_id)});
|
||||
|
||||
ASSERT_GT(core_stats.samples, 0);
|
||||
ASSERT_GT(envelope_stats.samples, 0);
|
||||
ASSERT_GT(vacuum_stats.samples, 0);
|
||||
|
||||
EXPECT_GT(core_stats.min_det, 1e-10);
|
||||
EXPECT_GT(envelope_stats.min_det, 1e-10);
|
||||
EXPECT_GT(vacuum_stats.min_det, 1e-10);
|
||||
|
||||
EXPECT_GT(core_stats.min_scaled_jac, 2e-2);
|
||||
EXPECT_GT(envelope_stats.min_scaled_jac, 2e-2);
|
||||
EXPECT_GT(vacuum_stats.min_scaled_jac, 1e-3);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Validates orientation quality via flipped-element and flipped-boundary markers.
|
||||
* @details
|
||||
* Rationale: this is a direct orientation sanity check using project utilities already used for debugging.
|
||||
* Method: run `MarkFlippedElements`/`MarkFlippedBoundaryElements` and assert sentinel attrs are absent.
|
||||
* If this fails: inspect Jacobian sign behavior and boundary normal orientation code in
|
||||
* `src/lib/utils/mesh_utils.cpp`, then trace upstream mapping changes.
|
||||
*/
|
||||
TEST_F(stroidTest, Conditioning_DefaultMeshHasNoFlippedElementsOrBoundaryFaces) {
|
||||
const Config cfg = LoadConfigFromRepo("configs/test_volume_spherical_no_external.toml");
|
||||
std::unique_ptr<mfem::Mesh> mesh = BuildProjectedMesh(cfg);
|
||||
|
||||
stroid::utils::MarkFlippedElements(*mesh);
|
||||
stroid::utils::MarkFlippedBoundaryElements(*mesh);
|
||||
|
||||
const auto volume_attr_counts = CountVolumeAttributes(*mesh);
|
||||
const auto boundary_attr_counts = CountBoundaryAttributes(*mesh);
|
||||
|
||||
EXPECT_FALSE(volume_attr_counts.contains(999));
|
||||
EXPECT_FALSE(boundary_attr_counts.contains(500));
|
||||
}
|
||||
|
||||
|
||||
46
tools/python/visualize_winding.py
Normal file
46
tools/python/visualize_winding.py
Normal file
@@ -0,0 +1,46 @@
|
||||
import matplotlib.pyplot as plt
|
||||
|
||||
class Box:
|
||||
def __init__(self, scale, vc="red", ec="blue", offset=0):
|
||||
self.scale = scale
|
||||
self.offset = offset
|
||||
self.verticies = [[scale, -scale, -scale], [scale, scale, -scale], [-scale, -scale, -scale], [-scale, scale, -scale], [scale, -scale, scale], [scale, scale, scale], [-scale, -scale, scale], [-scale, scale, scale]]
|
||||
self.edges = [[0, 1], [0, 2], [0, 4], [1, 3], [1, 5], [3, 7], [3, 2], [2, 6], [4, 5], [4, 6], [5, 7], [7, 6]]
|
||||
self.edge_color = ec
|
||||
self.vertex_color = vc
|
||||
|
||||
def plot(self, ax, vlabel=True, elabel=False):
|
||||
for vertID, vert in enumerate(self.verticies):
|
||||
ax.scatter(vert[0], vert[1], vert[2], c=self.vertex_color)
|
||||
if vlabel:
|
||||
ax.text(vert[0], vert[1], vert[2], f"{self.offset + vertID}", fontsize=25)
|
||||
for edge in self.edges:
|
||||
ax.plot([self.verticies[edge[0]][0], self.verticies[edge[1]][0]], [self.verticies[edge[0]][1], self.verticies[edge[1]][1]], [self.verticies[edge[0]][2], self.verticies[edge[1]][2]], color=self.edge_color)
|
||||
|
||||
class Wedge:
|
||||
def __init__(self, A, B, ec="green"):
|
||||
self.A = A
|
||||
self.B = B
|
||||
self.edge_color = ec
|
||||
def plot(self, ax):
|
||||
for vA, vB in zip(self.A.verticies, self.B.verticies):
|
||||
ax.plot([vA[0], vB[0]], [vA[1], vB[1]], [vA[2], vB[2]], color=self.edge_color)
|
||||
|
||||
def main():
|
||||
core = Box(0.5)
|
||||
envelope = Box(2, offset=8)
|
||||
star = Wedge(core, envelope)
|
||||
infinity = Box(5, offset=16)
|
||||
vacuum = Wedge(envelope, infinity)
|
||||
|
||||
fig, ax = plt.subplots(1, 1, figsize=(10, 10), subplot_kw={"projection": "3d"})
|
||||
core.plot(ax)
|
||||
envelope.plot(ax)
|
||||
star.plot(ax)
|
||||
infinity.plot(ax)
|
||||
vacuum.plot(ax)
|
||||
ax.view_init(30, 30)
|
||||
plt.show()
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
@@ -112,11 +112,13 @@ int main(int argc, char** argv) {
|
||||
|
||||
info->add_flag_callback("-v,--version", []() {
|
||||
std::println("Stroid Version {}", stroid::version::toString());
|
||||
exit(0);
|
||||
}, "Display stroid version information");
|
||||
|
||||
info->add_flag_callback("-d,--default", [&cfg]() {
|
||||
cfg.save("default.toml");
|
||||
std::println("Default configuration saved to default.toml");
|
||||
exit(0);
|
||||
}, "Save the default configuration to default.toml");
|
||||
|
||||
try {
|
||||
|
||||
Reference in New Issue
Block a user