-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy pathgetting-started.html
More file actions
350 lines (348 loc) · 23.4 KB
/
Copy pathgetting-started.html
File metadata and controls
350 lines (348 loc) · 23.4 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
<!-- HTML header for doxygen 1.9.1-->
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<!-- Google tag (gtag.js) -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-SY496B9L99"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'G-SY496B9L99');
</script>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.16.1"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>MFC: Getting Started</title>
<meta name="description" content="Getting Started — MFC documentation. Open-source exascale multiphase flow solver." />
<meta name="keywords" content="exascale, fluid dynamics, cfd, computational fluid dynamics, compressible, hpc, bryngelson, colonius, subgrid, multiphase, frontier, summit, el capitan, aurora, amd gpu, gpu, nvidia"/>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript" src="cookie.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/x-mathjax-config">
MathJax.Hub.Config({
extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
jax: ["input/TeX","output/HTML-CSS"],
});
// This file is set as MATHJAX_CODEFILE in the Doxyfile. It configures how
// MathJax renders expressions in Markdown so that it is consistent with GitHub.
MathJax.Hub.Config({
extensions: ["tex2jax.js"],
jax: ["input/TeX", "output/HTML-CSS"],
tex2jax: {
inlineMath: [ ['$', '$'], ["\\(","\\)"] ],
displayMath: [ ['$$','$$'], ["\\[","\\]"] ],
processEscapes: true,
ignoreClass: "line" // Ignore code blocks: https://web.archive.org/web/20120430100225/http://www.mathjax.org/docs/1.1/options/tex2jax.html
},
"HTML-CSS": {
fonts: ["TeX"]
}
});
</script>
<script type="text/javascript" async="async" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
<link rel="shortcut icon" href="icon.ico" type="image/x-icon" />
<link href="doxygen-awesome.css" rel="stylesheet" type="text/css"/>
<link href="doxygen-awesome-sidebar-only.css" rel="stylesheet" type="text/css"/>
<link href="custom.css" rel="stylesheet" type="text/css"/>
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 56px;">
<td id="projectlogo"><img alt="Logo" src="icon.ico"/></td>
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">MFC
</div>
<div id="projectbrief">Exascale flow solver</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- Cross-navigation injected into sidebar via script below -->
<script>
document.addEventListener('DOMContentLoaded', function() {
var nav = document.createElement('div');
nav.id = 'mfc-nav';
var items = [
['../documentation/index.html', 'documentation', 'User Guide'],
['../api/index.html', 'api', 'API Documentation']
];
var path = window.location.pathname;
var apiPaths = ['/api/', '/pre_process/', '/simulation/', '/post_process/'];
for (var i = 0; i < items.length; i++) {
var a = document.createElement('a');
a.href = items[i][0];
a.textContent = items[i][2];
if (items[i][1] === 'api') {
for (var j = 0; j < apiPaths.length; j++) {
if (path.indexOf(apiPaths[j]) !== -1) { a.className = 'active'; break; }
}
} else {
if (path.indexOf('/' + items[i][1] + '/') !== -1) a.className = 'active';
}
nav.appendChild(a);
}
var sideNav = document.getElementById('side-nav');
if (sideNav) sideNav.insertBefore(nav, sideNav.firstChild);
});
</script>
<!-- end header part -->
<!-- Generated by Doxygen 1.16.1 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search/",'.html');
</script>
<script type="text/javascript">
$(function() { codefold.init(); });
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',true,false,'search.php','Search',true);
$(function() { init_search(); });
});
</script>
<div id="main-nav"></div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
$(function(){initNavTree('getting-started.html','',''); });
</script>
<div id="container">
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<div id="MSearchResults">
<div class="SRPage">
<div id="SRIndex">
<div id="SRResults"></div>
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
</div>
</div>
</div>
</div>
<div><div class="header">
<div class="headertitle"><div class="title">Getting Started </div></div>
</div><!--header-->
<div class="contents">
<div class="textblock"><h1 class="doxsection"><a class="anchor" id="autotoc_md333"></a>
Getting Started</h1>
<h2 class="doxsection"><a class="anchor" id="autotoc_md334"></a>
Fetching MFC</h2>
<p>You can either download MFC's <a href="https://github.com/MFlowCode/MFC/releases/latest">latest release from GitHub</a> or clone the repository:</p>
<div class="fragment"><div class="line">git clone https://github.com/MFlowCode/MFC.git</div>
<div class="line">cd MFC</div>
</div><!-- fragment --><h2 class="doxsection"><a class="anchor" id="autotoc_md335"></a>
Install via Homebrew (macOS)</h2>
<p>On macOS, install prebuilt MFC via Homebrew:</p>
<div class="fragment"><div class="line">brew install mflowcode/mfc/mfc</div>
</div><!-- fragment --><p>Run a quick example:</p>
<div class="fragment"><div class="line">mkdir -p ~/mfc_quickstart && cd ~/mfc_quickstart</div>
<div class="line">cp $(brew --prefix mfc)/examples/1D_sodshocktube/case.py .</div>
<div class="line"># Use -n X to choose the number of MPI processes</div>
<div class="line">mfc case.py -n 2</div>
</div><!-- fragment --><p>Notes:</p><ul>
<li>The Homebrew package uses a simplified syntax: just <span class="tt">mfc <case.py></span> to run cases.</li>
<li>Developer commands like <span class="tt">build</span>, <span class="tt">test</span>, <span class="tt">clean</span> are available when you clone the repo and use <span class="tt">./mfc.sh</span>.</li>
<li>The package bundles a Python venv and prebuilt binaries; no additional setup is required.</li>
<li>Examples are installed at <span class="tt">$(brew --prefix mfc)/examples/</span>.</li>
</ul>
<h2 class="doxsection"><a class="anchor" id="autotoc_md336"></a>
Build Environment</h2>
<p>MFC can be built in multiple ways on various operating systems. Please select your desired configuration from the list below:</p>
<h2>*nix</h2>
<ul>
<li><b>On supported clusters:</b> Load environment modules</li>
</ul>
<div class="fragment"><div class="line">source ./mfc.sh load</div>
</div><!-- fragment --><ul>
<li><b>Via Aptitude:</b></li>
</ul>
<div class="fragment"><div class="line">sudo apt update</div>
<div class="line">sudo apt upgrade</div>
<div class="line">sudo apt install tar wget make cmake gcc g++ \</div>
<div class="line"> python3 python3-dev python3-venv \</div>
<div class="line"> openmpi-bin libopenmpi-dev \</div>
<div class="line"> libhdf5-dev libfftw3-dev \</div>
<div class="line"> libblas-dev liblapack-dev</div>
</div><!-- fragment --><p>If you wish to build MFC using <a href="https://developer.nvidia.com/hpc-sdk">NVIDIA's NVHPC SDK</a>, first follow the instructions <a href="https://developer.nvidia.com/nvidia-hpc-sdk-downloads">here</a>.</p>
<h2>Windows</h2>
<p>On Windows, you can either use Intel Compilers with the standard Microsoft toolchain, or the <a href="https://docs.microsoft.com/en-us/windows/wsl/">Windows Subsystem for Linux (WSL)</a> for a Linux experience.</p>
<details >
<summary >
<b>Windows + WSL (Recommended)</b></summary>
<p></p>
<p></p>
<p>Install <a href="https://docs.microsoft.com/en-us/windows/wsl/">Windows Subsystem for Linux (WSL)</a> on Windows 11: Either</p><ol type="1">
<li>Open a terminal with administrator privileges and run the following command: <div class="fragment"><div class="line">wsl --install</div>
</div><!-- fragment --> Or</li>
</ol>
<ol type="1">
<li>Open the Start menu, search for "Windows Features", and select "Turn Windows features on or off". Enable "Windows Subsystem for Linux" by checking the corresponding box.</li>
<li>Open the Microsoft Store, search for "Linux", and install your preferred distribution (e.g., <a href="https://apps.microsoft.com/store/detail/ubuntu/9PDXGNCFSCZV">Ubuntu</a>)</li>
</ol>
<p>Useful software to install for using WSL on Windows:</p><ul>
<li><a href="https://apps.microsoft.com/store/detail/windows-terminal/9N0DX20HK701">Windows Terminal</a></li>
<li><a href="https://code.visualstudio.com/">Visual Studio Code</a> and the <a href="https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-wsl">Remote - WSL</a> extension</li>
</ul>
<p>Once you have WSL installed, you can follow the instructions for *nix systems above (for Ubuntu, see <span class="tt">Via Aptitude</span> section).</p>
<p></p>
</details>
<details >
<summary >
<b>Native Windows (Intel)</b></summary>
<p></p>
<p></p>
<p>Install the latest version of:</p><ul>
<li><a href="https://visualstudio.microsoft.com/">Microsoft Visual Studio Community</a></li>
<li>Intel® oneAPI Base Toolkit</li>
<li>Intel® oneAPI HPC Toolkit</li>
<li><a href="https://strawberryperl.com/">Strawberry Perl</a> (Install and add <span class="tt">C:\strawberry\perl\bin\perl.exe</span> or your installation path to your <a href="https://www.architectryan.com/2018/03/17/add-to-the-path-on-windows-10/">PATH</a>) Please note that Visual Studio must be installed first, and the oneAPI Toolkits need to be configured with the installed Visual Studio, even if you plan to use a different IDE.</li>
</ul>
<p>Then, to initialize your development environment, run the following command (or your installation path) in the command prompt: </p><div class="fragment"><div class="line">"C:\Program Files (x86)\Intel\oneAPI\setvars.bat"</div>
</div><!-- fragment --><p> Alternatively, you can run the following command in Powershell: </p><div class="fragment"><div class="line">cmd.exe "/K" '"C:\Program Files (x86)\Intel\oneAPI\setvars.bat" && powershell'</div>
</div><!-- fragment --><p> You could verify the initialization by typing <span class="tt">where mpiexec</span> in the command prompt terminal (does not work in Powershell), which should return the path to the Intel MPI executable. To continue following this guide, please stay in the initialized terminal window. Replace <span class="tt">./mfc.sh</span> with <span class="tt">.\mfc.bat</span> for all commands.</p>
<p>If <span class="tt">.\mfc.bat build</span> produces errors, please run the command again. Repeating this process three times should resolve all errors (once each for pre_process, simulation, and post_process). If the same error persists after each attempt, please verify that you have installed all required software and properly initialized the development environment. If uncertain, you could try deleting the build directory and starting over.</p>
<p>You will also have access to the <span class="tt">.sln</span> Microsoft Visual Studio solution files for an IDE (Integrated Development Environment).</p>
<p></p>
</details>
<details >
<summary >
<b>MacOS</b></summary>
<p></p>
<p></p>
<p>Using <a href="https://brew.sh/">Homebrew</a> you can install the necessary dependencies before configuring your environment:</p>
<div class="fragment"><div class="line">brew install coreutils python cmake fftw hdf5 gcc boost open-mpi lapack</div>
<div class="line">echo -e "export BOOST_INCLUDE='$(brew --prefix --installed boost)/include'" | tee -a ~/.bash_profile ~/.zshrc</div>
<div class="line">. ~/.bash_profile 2>/dev/null || . ~/.zshrc 2>/dev/null</div>
<div class="line">! [ -z "${BOOST_INCLUDE+x}" ] && echo 'Environment is ready!' || echo 'Error: $BOOST_INCLUDE is unset. Please adjust the previous commands to fit with your environment.'</div>
</div><!-- fragment --><p>They will download the dependencies MFC requires to build itself.</p>
<p></p>
</details>
<h2 class="doxsection"><a class="anchor" id="autotoc_md337"></a>
Building MFC</h2>
<p>MFC can be built with support for various (compile-time) features:</p>
<table class="markdownTable">
<tr class="markdownTableHead">
<th class="markdownTableHeadCenter">Feature </th><th class="markdownTableHeadCenter">Enable </th><th class="markdownTableHeadCenter">Disable </th><th class="markdownTableHeadCenter">Default </th><th class="markdownTableHeadNone">Description </th></tr>
<tr class="markdownTableRowOdd">
<td class="markdownTableBodyCenter"><b>MPI</b> </td><td class="markdownTableBodyCenter"><span class="tt">--mpi</span> </td><td class="markdownTableBodyCenter"><span class="tt">--no-mpi</span> </td><td class="markdownTableBodyCenter">On </td><td class="markdownTableBodyNone">Allows MFC to run on multiple processors (and nodes). </td></tr>
<tr class="markdownTableRowEven">
<td class="markdownTableBodyCenter"><b>GPU</b> </td><td class="markdownTableBodyCenter"><span class="tt">--gpu</span> </td><td class="markdownTableBodyCenter"><span class="tt">--no-gpu</span> </td><td class="markdownTableBodyCenter">Off </td><td class="markdownTableBodyNone">Enables GPU acceleration via OpenACC or OpenMP offload. </td></tr>
<tr class="markdownTableRowOdd">
<td class="markdownTableBodyCenter"><b>Debug</b> </td><td class="markdownTableBodyCenter"><span class="tt">--debug</span> </td><td class="markdownTableBodyCenter"><span class="tt">--no-debug</span> </td><td class="markdownTableBodyCenter">Off </td><td class="markdownTableBodyNone">Full debug mode: all runtime checks, minimal optimization. </td></tr>
<tr class="markdownTableRowEven">
<td class="markdownTableBodyCenter"><b>RelDebug</b> </td><td class="markdownTableBodyCenter"><span class="tt">--reldebug</span> </td><td class="markdownTableBodyCenter"><span class="tt">--no-reldebug</span> </td><td class="markdownTableBodyCenter">Off </td><td class="markdownTableBodyNone">Lightweight debug: key runtime checks, <span class="tt">-Og</span>/<span class="tt">-O1</span>. Used by CI. </td></tr>
<tr class="markdownTableRowOdd">
<td class="markdownTableBodyCenter"><b>GCov</b> </td><td class="markdownTableBodyCenter"><span class="tt">--gcov</span> </td><td class="markdownTableBodyCenter"><span class="tt">--no-gcov</span> </td><td class="markdownTableBodyCenter">Off </td><td class="markdownTableBodyNone">Build MFC with coverage flags on. </td></tr>
<tr class="markdownTableRowEven">
<td class="markdownTableBodyCenter"><b>Unified Memory</b> </td><td class="markdownTableBodyCenter"><span class="tt">--unified</span> </td><td class="markdownTableBodyCenter"><span class="tt">--no-unified</span> </td><td class="markdownTableBodyCenter">Off </td><td class="markdownTableBodyNone">Build MFC with unified CPU/GPU memory (GH200 superchip only) </td></tr>
<tr class="markdownTableRowOdd">
<td class="markdownTableBodyCenter"><b>Single</b> </td><td class="markdownTableBodyCenter"><span class="tt">--single</span> </td><td class="markdownTableBodyCenter"><span class="tt">--no-single</span> </td><td class="markdownTableBodyCenter">Off </td><td class="markdownTableBodyNone">Build MFC in single precision </td></tr>
</table>
<p><em>⚠️ The <span class="tt">--gpu</span> option requires a supported compiler: NVHPC for NVIDIA GPUs (OpenACC or OpenMP), Cray for AMD GPUs (OpenACC or OpenMP), or AMD compilers for AMD GPUs (OpenMP only).</em></p>
<p>When these options are given to <span class="tt">mfc.sh</span>, they will be remembered when you issue future commands. You can enable and disable features anytime by passing any of the arguments above. For example, if you previously built MFC with MPI support and no longer wish to run using MPI, you can pass <span class="tt">--no-mpi</span> once, making the change permanent.</p>
<p>MFC comprises three codes, each being a separate <em>target</em>. By default, all targets (<span class="tt">pre_process</span>, <span class="tt">simulation</span>, and <span class="tt">post_process</span>) are selected. To only select a subset, use the <span class="tt">-t</span> (i.e., <span class="tt">--targets</span>) argument. For a detailed list of options, arguments, and features, please refer to <span class="tt">./mfc.sh build --help</span>.</p>
<p>Most first-time users will want to build MFC using 8 threads (or more!) with MPI support: </p><div class="fragment"><div class="line">./mfc.sh build -j 8</div>
</div><!-- fragment --><p>Some examples:</p><ul>
<li>Build MFC using 8 threads with MPI and GPU acceleration: <span class="tt">./mfc.sh build --gpu -j 8</span>.</li>
<li>Build MFC using a single thread without MPI, GPU, and Debug support: <span class="tt">./mfc.sh build --no-mpi</span>.</li>
<li>Build MFC's <span class="tt">simulation</span> code in Debug mode with MPI and GPU support: <span class="tt">./mfc.sh build --debug --gpu -t simulation</span>.</li>
</ul>
<h2 class="doxsection"><a class="anchor" id="autotoc_md338"></a>
Using Containers</h2>
<p>Instead of building MFC from scratch, you can use containers to quickly access a pre-built version of MFC and its dependencies. In brief, you can run the latest MFC container: </p><div class="fragment"><div class="line">docker run -it --rm --entrypoint bash sbryngelson/mfc:latest-cpu</div>
</div><!-- fragment --><p> Please refer to the <a class="el" href="docker.html" title="Containers">Docker</a> document for more information.</p>
<h2 class="doxsection"><a class="anchor" id="autotoc_md339"></a>
Running the Test Suite</h2>
<p>Run MFC's test suite with 8 threads: </p><div class="fragment"><div class="line">./mfc.sh test -j 8</div>
</div><!-- fragment --><p>Please refer to the <a class="el" href="testing.html" title="Testing">Testing</a> document for more information.</p>
<h2 class="doxsection"><a class="anchor" id="autotoc_md340"></a>
Running an Example Case</h2>
<p>MFC has example cases in the <span class="tt">examples</span> folder. You can run such a case interactively using 2 tasks by typing:</p>
<div class="fragment"><div class="line">./mfc.sh run examples/2D_shockbubble/case.py -n 2</div>
</div><!-- fragment --><p>Please refer to the <a class="el" href="running.html" title="Running">Running</a> document for more information on <span class="tt">case.py</span> files and how to run them.</p>
<h2 class="doxsection"><a class="anchor" id="autotoc_md341"></a>
Units and Dimensions</h2>
<p>MFC is <b>unit-agnostic</b>: the solver performs no internal unit conversions. Whatever units you provide for initial conditions, boundary conditions, and material properties, the same units appear in the output.</p>
<p>The only requirement is <b>consistency</b> — all inputs must use the same unit system. Note that some parameters use <b>transformed stored forms</b> rather than standard physical values (e.g., <span class="tt">gamma</span> expects \(1/(\gamma-1)\), not \(\gamma\) itself). See <a class="el" href="equations.html#sec-stored-forms" title="Stored Parameter Conventions">Stored Parameter Conventions</a> for details.</p>
<h2 class="doxsection"><a class="anchor" id="autotoc_md342"></a>
Visualizing Results</h2>
<p>After running post_process, visualize the output directly from the command line:</p>
<div class="fragment"><div class="line"># List available variables</div>
<div class="line">./mfc.sh viz examples/2D_shockbubble/ --list-vars --step 0</div>
<div class="line"> </div>
<div class="line"># Render a pressure snapshot</div>
<div class="line">./mfc.sh viz examples/2D_shockbubble/ --var pres --step 1000</div>
<div class="line"> </div>
<div class="line"># Generate a video</div>
<div class="line">./mfc.sh viz examples/2D_shockbubble/ --var pres --step all --mp4</div>
</div><!-- fragment --><p>Output images and videos are saved to the <span class="tt">viz/</span> subdirectory of the case. For more options, see <a class="el" href="visualization.html" title="Flow visualization">Flow Visualization</a> or run <span class="tt">./mfc.sh viz -h</span>.</p>
<h2 class="doxsection"><a class="anchor" id="autotoc_md343"></a>
Helpful Tools</h2>
<h3 class="doxsection"><a class="anchor" id="autotoc_md344"></a>
Parameter Lookup</h3>
<p>MFC has over 3,000 case parameters. Use the <span class="tt">params</span> command to search and explore them:</p>
<div class="fragment"><div class="line">./mfc.sh params dt # Search for parameters matching "dt"</div>
<div class="line">./mfc.sh params -d dt # Show parameter with description</div>
<div class="line">./mfc.sh params patch # Find all patch-related parameters</div>
<div class="line">./mfc.sh params --family # List all parameter families</div>
</div><!-- fragment --><h3 class="doxsection"><a class="anchor" id="autotoc_md345"></a>
Creating a New Case</h3>
<p>Generate a case file template to get started quickly:</p>
<div class="fragment"><div class="line">./mfc.sh new my_case.py # Create a new case file from template</div>
</div><!-- fragment --><h3 class="doxsection"><a class="anchor" id="autotoc_md346"></a>
Shell Completion</h3>
<p>Enable tab-completion for <span class="tt">./mfc.sh</span> commands:</p>
<p><b>Bash</b> (add to <span class="tt">~/.bashrc</span>): </p><div class="fragment"><div class="line">source /path/to/MFC/toolchain/completions/mfc.bash</div>
</div><!-- fragment --><p><b>Zsh</b> (add to <span class="tt">~/.zshrc</span>): </p><div class="fragment"><div class="line">fpath=(/path/to/MFC/toolchain/completions $fpath)</div>
<div class="line">autoload -Uz compinit && compinit</div>
</div><!-- fragment --><p>After reloading your shell, press Tab to complete commands and options.</p>
<div style="text-align:center; font-size:0.75rem; color:#888; padding:16px 0 0;">Page last updated: 2026-02-15</div> </div></div><!-- contents -->
</div><!-- PageDoc -->
</div><!-- doc-content -->
<div id="page-nav" class="page-nav-panel">
<div id="page-nav-resize-handle"></div>
<div id="page-nav-tree">
<div id="page-nav-contents">
</div><!-- page-nav-contents -->
</div><!-- page-nav-tree -->
</div><!-- page-nav -->
</div><!-- container -->
<!-- HTML footer for doxygen 1.9.1-->
<!-- start footer part -->
<div id="nav-path" class="navpath">
<ul></ul>
</div>
</body>
</html>