You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
<li><b>Add the module to <spanclass="tt">docs/module_categories.json</span></b> so it appears in this page</li>
408
408
</ol>
409
409
<p>Follow the pattern of existing modules like <spanclass="tt">m_body_forces</span> (simple) or <spanclass="tt">m_viscous</span> (more involved) as a template.</p>
<tdclass="markdownTableBodyRight"><spanclass="tt">num_ibs</span></td><tdclass="markdownTableBodyCenter">Integer </td><tdclass="markdownTableBodyLeft">Number of immersed boundary patches </td></tr>
431
431
<trclass="markdownTableRowEven">
432
-
<tdclass="markdownTableBodyRight"><spanclass="tt">num_particle_beds</span></td><tdclass="markdownTableBodyCenter">Integer </td><tdclass="markdownTableBodyLeft">Number of particle bed specifications to generate immersed boundary patches from</td></tr>
432
+
<tdclass="markdownTableBodyRight"><spanclass="tt">num_stl_models</span></td><tdclass="markdownTableBodyCenter">Integer </td><tdclass="markdownTableBodyLeft">Number of STL/OBJ model entries in the <spanclass="tt">stl_models</span> array</td></tr>
433
433
<trclass="markdownTableRowOdd">
434
-
<tdclass="markdownTableBodyRight"><spanclass="tt">ib_neighborhood_radius</span></td><tdclass="markdownTableBodyCenter">Integer </td><tdclass="markdownTableBodyLeft">Parameter that controls the neighborhood size for IB detection. </td></tr>
435
-
<trclass="markdownTableRowEven">
436
-
<tdclass="markdownTableBodyRight"><spanclass="tt">geometry</span></td><tdclass="markdownTableBodyCenter">Integer </td><tdclass="markdownTableBodyLeft">Geometry configuration of the patch. </td></tr>
437
-
<trclass="markdownTableRowOdd">
438
-
<tdclass="markdownTableBodyRight"><spanclass="tt">x[y,z]_centroid</span></td><tdclass="markdownTableBodyCenter">Real </td><tdclass="markdownTableBodyLeft">Centroid of the applied geometry in the [x,y,z]-direction. </td></tr>
434
+
<tdclass="markdownTableBodyRight"><spanclass="tt">num_particle_beds</span></td><tdclass="markdownTableBodyCenter">Integer </td><tdclass="markdownTableBodyLeft">Number of particle bed specifications to generate immersed boundary patches from </td></tr>
439
435
<trclass="markdownTableRowEven">
440
-
<tdclass="markdownTableBodyRight"><spanclass="tt">length_x[y,z]</span></td><tdclass="markdownTableBodyCenter">Real</td><tdclass="markdownTableBodyLeft">Length, if applicable, in the [x,y,z]-direction. </td></tr>
436
+
<tdclass="markdownTableBodyRight"><spanclass="tt">ib_neighborhood_radius</span></td><tdclass="markdownTableBodyCenter">Integer</td><tdclass="markdownTableBodyLeft">Parameter that controls the neighborhood size for IB detection. </td></tr>
441
437
<trclass="markdownTableRowOdd">
442
-
<tdclass="markdownTableBodyRight"><spanclass="tt">radius</span></td><tdclass="markdownTableBodyCenter">Real</td><tdclass="markdownTableBodyLeft">Radius, if applicable, of the applied geometry. </td></tr>
438
+
<tdclass="markdownTableBodyRight"><spanclass="tt">geometry</span></td><tdclass="markdownTableBodyCenter">Integer</td><tdclass="markdownTableBodyLeft">Geometry configuration of the patch. </td></tr>
443
439
<trclass="markdownTableRowEven">
444
-
<tdclass="markdownTableBodyRight"><spanclass="tt">theta</span></td><tdclass="markdownTableBodyCenter">Real </td><tdclass="markdownTableBodyLeft">Angle of attach applied to airfoil IB patches</td></tr>
440
+
<tdclass="markdownTableBodyRight"><spanclass="tt">x[y,z]_centroid</span></td><tdclass="markdownTableBodyCenter">Real </td><tdclass="markdownTableBodyLeft">Centroid of the applied geometry in the [x,y,z]-direction.</td></tr>
445
441
<trclass="markdownTableRowOdd">
446
-
<tdclass="markdownTableBodyRight"><spanclass="tt">c</span></td><tdclass="markdownTableBodyCenter">Real </td><tdclass="markdownTableBodyLeft">NACA airfoil parameters (see below)</td></tr>
442
+
<tdclass="markdownTableBodyRight"><spanclass="tt">length_x[y,z]</span></td><tdclass="markdownTableBodyCenter">Real </td><tdclass="markdownTableBodyLeft">Length, if applicable, in the [x,y,z]-direction.</td></tr>
447
443
<trclass="markdownTableRowEven">
448
-
<tdclass="markdownTableBodyRight"><spanclass="tt">t</span></td><tdclass="markdownTableBodyCenter">Real </td><tdclass="markdownTableBodyLeft">NACA airfoil parameters (see below)</td></tr>
444
+
<tdclass="markdownTableBodyRight"><spanclass="tt">radius</span></td><tdclass="markdownTableBodyCenter">Real </td><tdclass="markdownTableBodyLeft">Radius, if applicable, of the applied geometry.</td></tr>
449
445
<trclass="markdownTableRowOdd">
450
-
<tdclass="markdownTableBodyRight"><spanclass="tt">m</span></td><tdclass="markdownTableBodyCenter">Real</td><tdclass="markdownTableBodyLeft">NACA airfoil parameters (see below)</td></tr>
446
+
<tdclass="markdownTableBodyRight"><spanclass="tt">airfoil_id</span></td><tdclass="markdownTableBodyCenter">Integer</td><tdclass="markdownTableBodyLeft">Index into <spanclass="tt">ib_airfoil</span> array for NACA airfoil geometry patches.</td></tr>
451
447
<trclass="markdownTableRowEven">
452
-
<tdclass="markdownTableBodyRight"><spanclass="tt">p</span></td><tdclass="markdownTableBodyCenter">Real</td><tdclass="markdownTableBodyLeft">NACA airfoil parameters (see below)</td></tr>
448
+
<tdclass="markdownTableBodyRight"><spanclass="tt">model_id</span></td><tdclass="markdownTableBodyCenter">Integer</td><tdclass="markdownTableBodyLeft">Index into <spanclass="tt">stl_models</span> array for STL/OBJ geometry patches.</td></tr>
453
449
<trclass="markdownTableRowOdd">
454
450
<tdclass="markdownTableBodyRight"><spanclass="tt">slip</span></td><tdclass="markdownTableBodyCenter">Logical </td><tdclass="markdownTableBodyLeft">Apply a slip boundary </td></tr>
455
451
<trclass="markdownTableRowEven">
456
-
<tdclass="markdownTableBodyRight"><spanclass="tt">model_filepath</span></td><tdclass="markdownTableBodyCenter">String </td><tdclass="markdownTableBodyLeft">Path to an STL or OBJ file (not all OBJs are supported). </td></tr>
457
-
<trclass="markdownTableRowOdd">
458
-
<tdclass="markdownTableBodyRight"><spanclass="tt">model_scale(i)</span></td><tdclass="markdownTableBodyCenter">Real </td><tdclass="markdownTableBodyLeft">Model's (applied) scaling factor for component $i$. </td></tr>
459
-
<trclass="markdownTableRowEven">
460
-
<tdclass="markdownTableBodyRight"><spanclass="tt">model_rotate(i)</span></td><tdclass="markdownTableBodyCenter">Real </td><tdclass="markdownTableBodyLeft">Model's (applied) angle of rotation about axis $i$. </td></tr>
461
-
<trclass="markdownTableRowOdd">
462
-
<tdclass="markdownTableBodyRight"><spanclass="tt">model_translate(i)</span></td><tdclass="markdownTableBodyCenter">Real </td><tdclass="markdownTableBodyLeft">Model's $i$-th component of (applied) translation. </td></tr>
463
-
<trclass="markdownTableRowEven">
464
-
<tdclass="markdownTableBodyRight"><spanclass="tt">model_spc</span></td><tdclass="markdownTableBodyCenter">Integer </td><tdclass="markdownTableBodyLeft">Number of samples per cell when discretizing the model into the grid. </td></tr>
465
-
<trclass="markdownTableRowOdd">
466
-
<tdclass="markdownTableBodyRight"><spanclass="tt">model_threshold</span></td><tdclass="markdownTableBodyCenter">Real </td><tdclass="markdownTableBodyLeft">Ray fraction inside the model patch above which the fraction is set to one. </td></tr>
467
-
<trclass="markdownTableRowEven">
468
452
<tdclass="markdownTableBodyRight"><spanclass="tt">moving_ibm</span></td><tdclass="markdownTableBodyCenter">Integer </td><tdclass="markdownTableBodyLeft">Sets the method used for IB movement. </td></tr>
469
453
<trclass="markdownTableRowOdd">
470
454
<tdclass="markdownTableBodyRight"><spanclass="tt">vel(i)</span></td><tdclass="markdownTableBodyCenter">Real </td><tdclass="markdownTableBodyLeft">Initial velocity of the moving IB in the i-th direction. </td></tr>
<tdclass="markdownTableBodyRight"><spanclass="tt">ib_coefficient_of_friction</span></td><tdclass="markdownTableBodyCenter">Real </td><tdclass="markdownTableBodyLeft">Coefficient of friction used in IB collisions </td></tr>
481
465
</table>
482
466
<p>These parameters should be prepended with <spanclass="tt">patch_ib(j)%</span> where $j$ is the patch index.</p>
467
+
<p>STL/OBJ model geometry parameters are set on the <spanclass="tt">stl_models</span> array (indexed by <spanclass="tt">model_id</span>):</p>
<tdclass="markdownTableBodyLeft"><spanclass="tt">model_filepath</span></td><tdclass="markdownTableBodyLeft">String </td><tdclass="markdownTableBodyLeft">Path to an STL or OBJ file (not all OBJs are supported). </td></tr>
473
+
<trclass="markdownTableRowEven">
474
+
<tdclass="markdownTableBodyLeft"><spanclass="tt">model_scale(i)</span></td><tdclass="markdownTableBodyLeft">Real </td><tdclass="markdownTableBodyLeft">Model's scaling factor for component $i$. </td></tr>
475
+
<trclass="markdownTableRowOdd">
476
+
<tdclass="markdownTableBodyLeft"><spanclass="tt">model_translate(i)</span></td><tdclass="markdownTableBodyLeft">Real </td><tdclass="markdownTableBodyLeft">Model's $i$-th component of translation. </td></tr>
477
+
<trclass="markdownTableRowEven">
478
+
<tdclass="markdownTableBodyLeft"><spanclass="tt">model_threshold</span></td><tdclass="markdownTableBodyLeft">Real </td><tdclass="markdownTableBodyLeft">Winding number threshold above which a cell is marked as inside the model. </td></tr>
479
+
</table>
480
+
<p>These parameters should be prepended with <spanclass="tt">stl_models(k)%</span> where $k$ is the model index.</p>
<li><spanclass="tt">geometry</span> defines the type of geometry of an immersed boundary patch with an integer number. Definitions for currently implemented immersed boundary patch types are listed in table <aclass="el" href="#immersed-boundary-patch-types" title="Immersed Boundary Patch Types">Immersed Boundary Patch Type</a>.</li>
487
485
<li><spanclass="tt">x[y,z]_centroid</span> is the centroid location of the patch in the x[y,z]-direction</li>
488
486
<li><spanclass="tt">length_x[y,z]</span> is the length of the patch in the x[y,z]-direction.</li>
489
487
<li><spanclass="tt">radius</span> is the radius to be used for circular patches.</li>
490
-
<li><spanclass="tt">theta</span> allows for the angle of attach of airfoil patches to be changed.</li>
491
-
<li><spanclass="tt">c</span>, <spanclass="tt">t</span>, <spanclass="tt">p</span>, and <spanclass="tt">m</span> specify the parameters for a NACA airfoil. <spanclass="tt">m</span> is the maximum camber, <spanclass="tt">p</span> is the location of maximum camber, <spanclass="tt">c</span> is the coord length, and <spanclass="tt">t</span> is the thickness. Additional details on this specification can be found in <ahref="https://en.wikipedia.org/wiki/NACA_airfoil">NACA airfoil</a>.</li>
488
+
<li><spanclass="tt">c</span>, <spanclass="tt">t</span>, <spanclass="tt">p</span>, and <spanclass="tt">m</span> specify the parameters for a NACA airfoil (set on the referenced <spanclass="tt">ib_airfoil</span> entry). <spanclass="tt">m</span> is the maximum camber, <spanclass="tt">p</span> is the location of maximum camber, <spanclass="tt">c</span> is the chord length, and <spanclass="tt">t</span> is the thickness. Additional details on this specification can be found in <ahref="https://en.wikipedia.org/wiki/NACA_airfoil">NACA airfoil</a>.</li>
492
489
<li><spanclass="tt">slip</span> applies a slip boundary to the surface of the patch if true and a no-slip boundary condition to the surface if false.</li>
493
-
<li>Please see <aclass="el" href="#sec-patches" title="3. Patches">Patch Parameters</a> for the descriptions of <spanclass="tt">model_filepath</span>, <spanclass="tt">model_scale</span>, <spanclass="tt">model_rotate</span>, <spanclass="tt">model_translate</span>, <spanclass="tt">model_spc</span>, and <spanclass="tt">model_threshold</span>.</li>
490
+
<li>For STL/OBJ geometry (geometry 5 or 12), set <spanclass="tt">model_id</span> to index into the <spanclass="tt">stl_models</span> array and specify <spanclass="tt">model_filepath</span>, <spanclass="tt">model_scale</span>, <spanclass="tt">model_translate</span>, and <spanclass="tt">model_threshold</span> on that entry.</li>
494
491
<li><spanclass="tt">moving_ibm</span> sets the method by which movement will be applied to the immersed boundary. Using 0 will result in no movement. Using 1 will result 1-way coupling where the boundary moves at a constant rate and applied forces to the fluid based upon it's own motion. In 1-way coupling, the fluid does not apply forces back onto the IB. Using 2 will result in 2-way coupling, where the boundary pushes on the fluid and the fluid pushes back on the boundary via pressure and viscous forces. If external forces are applied, the boundary will also experience those forces.</li>
495
492
<li><spanclass="tt">vel(i)</span> is the initial linear velocity of the IB in the x, y, z direction for i=1, 2, 3. When <spanclass="tt">moving_ibm</span> equals 2, this velocity is just the starting speed of the object, which will then accelerate due to external forces. If <spanclass="tt">moving_ibm</span> equals 1, then this is constant if it is a number, or can be described analytically with an expression.</li>
496
493
<li><spanclass="tt">angular_vel(i)</span> is the initial angular velocity of the IB about the x, y, z axes for i=1, 2, 3 in radians per second. When <spanclass="tt">moving_ibm</span> equals 2, this rotation rate is just the starting rate of the object, which will then change due to external torques. If <spanclass="tt">moving_ibm</span> equals 1, then this is constant if it is a number, or can be described analytically with an expression.</li>
<p>💡 <b>Tip:</b> If you encounter a validation error, check the relevant section above or review <ahref="https://github.com/MFlowCode/MFC/blob/master/toolchain/mfc/case_validator.py"><spanclass="tt">case_validator.py</span></a> for complete validation logic.</p>
0 commit comments