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>
430
430
</ol>
431
431
<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>
<li><spanclass="tt">collision_model</span> is an integer to select the collision model being used for IB collisions. Using 0 disables collisions and collision checking. 1 enables the soft-sphere collision model, where all IBs must be circles or sphere and those IBs can collide with each other as well as walls.</li>
511
511
<li><spanclass="tt">collision_time</span> is approximately the amount of simulation time used to resolve collisions. This is handled by modifying the spring constant used to apply collision forces.</li>
512
512
<li><spanclass="tt">ib_coefficient_of_friction</span> is the coefficient of friction used in IB collisions.</li>
513
-
<li><spanclass="tt">ib_neighborhood_radius</span> controls the size of the neighborhood size. This value defaults to 1, which indicates that any given rank is aware of IBs up to 1 ranks away. This parameter is required to strong-scale a case when IBs eventually grow to be larger than one full processor domain wide.</li>
513
+
<li><spanclass="tt">ib_neighborhood_radius</span> controls the size of the neighborhood size. A value of $r$ indicates that any given rank is aware of IBs up to $r$ ranks away. This value defaults to 0, which leaves the radius unset so that it is selected automatically. This parameter is required to strong-scale a case when IBs eventually grow to be larger than one full processor domain wide.</li>
<tdclass="markdownTableBodyRight"><spanclass="tt">x[y,z]_centroid</span></td><tdclass="markdownTableBodyCenter">Real </td><tdclass="markdownTableBodyLeft">Centre of the cloud region in the [x,y,z]-direction. </td></tr>
523
523
<trclass="markdownTableRowEven">
524
-
<tdclass="markdownTableBodyRight"><spanclass="tt">length_x[y,z]</span></td><tdclass="markdownTableBodyCenter">Real </td><tdclass="markdownTableBodyLeft">Extent of the cloud region in the [x,y,z]-direction. </td></tr>
524
+
<tdclass="markdownTableBodyRight"><spanclass="tt">length_x[y,z]</span></td><tdclass="markdownTableBodyCenter">Real </td><tdclass="markdownTableBodyLeft">Extent of the cloud region in the [x,y,z]-direction for <spanclass="tt">cloud_geometry = 1</span>; ignored by <spanclass="tt">cloud_geometry = 2</span>. </td></tr>
525
525
<trclass="markdownTableRowOdd">
526
526
<tdclass="markdownTableBodyRight"><spanclass="tt">num_particles</span></td><tdclass="markdownTableBodyCenter">Integer </td><tdclass="markdownTableBodyLeft">Number of particles to place in the region. </td></tr>
<tdclass="markdownTableBodyRight"><spanclass="tt">min_spacing</span></td><tdclass="markdownTableBodyCenter">Real </td><tdclass="markdownTableBodyLeft">Minimum surface-to-surface gap between particles (centres are <spanclass="tt">2*radius + min_spacing</span> apart). </td></tr>
533
533
<trclass="markdownTableRowOdd">
534
-
<tdclass="markdownTableBodyRight"><spanclass="tt">moving_ibm</span></td><tdclass="markdownTableBodyCenter">Integer </td><tdclass="markdownTableBodyLeft">Motion flag applied to every particle (see <spanclass="tt">patch_ib(j)%moving_ibm</span>). </td></tr>
534
+
<tdclass="markdownTableBodyRight"><spanclass="tt">cloud_geometry</span></td><tdclass="markdownTableBodyCenter">Integer </td><tdclass="markdownTableBodyLeft">Shape of the cloud region. </td></tr>
535
535
<trclass="markdownTableRowEven">
536
-
<tdclass="markdownTableBodyRight"><spanclass="tt">seed</span></td><tdclass="markdownTableBodyCenter">Integer </td><tdclass="markdownTableBodyLeft">Random seed for reproducible placement (used by <spanclass="tt">packing_method = 1</span>). </td></tr>
536
+
<tdclass="markdownTableBodyRight"><spanclass="tt">shell_inner_radius</span></td><tdclass="markdownTableBodyCenter">Real </td><tdclass="markdownTableBodyLeft">Inner radius for hemisphere-shell clouds (<spanclass="tt">cloud_geometry = 2</span>). </td></tr>
537
+
<trclass="markdownTableRowOdd">
538
+
<tdclass="markdownTableBodyRight"><spanclass="tt">shell_outer_radius</span></td><tdclass="markdownTableBodyCenter">Real </td><tdclass="markdownTableBodyLeft">Outer radius for hemisphere-shell clouds (<spanclass="tt">cloud_geometry = 2</span>). </td></tr>
539
+
<trclass="markdownTableRowEven">
540
+
<tdclass="markdownTableBodyRight"><spanclass="tt">moving_ibm</span></td><tdclass="markdownTableBodyCenter">Integer </td><tdclass="markdownTableBodyLeft">Motion flag applied to every particle (see <spanclass="tt">patch_ib(j)%moving_ibm</span>). </td></tr>
537
541
<trclass="markdownTableRowOdd">
542
+
<tdclass="markdownTableBodyRight"><spanclass="tt">seed</span></td><tdclass="markdownTableBodyCenter">Integer </td><tdclass="markdownTableBodyLeft">Random seed for reproducible placement (used by <spanclass="tt">packing_method = 1</span>). </td></tr>
543
+
<trclass="markdownTableRowEven">
538
544
<tdclass="markdownTableBodyRight"><spanclass="tt">packing_method</span></td><tdclass="markdownTableBodyCenter">Integer </td><tdclass="markdownTableBodyLeft">Algorithm used to place the particles. </td></tr>
539
545
</table>
540
546
<ul>
547
+
<li><spanclass="tt">cloud_geometry</span> selects the cloud region:<ul>
548
+
<li><spanclass="tt">1</span> (box) uses <spanclass="tt">x[y,z]_centroid</span> and <spanclass="tt">length_x[y,z]</span> to define the region.</li>
549
+
<li><spanclass="tt">2</span> uses <spanclass="tt">x[y,z]_centroid</span>, <spanclass="tt">shell_inner_radius</span>, and <spanclass="tt">shell_outer_radius</span> to define a half-annulus in 2D and a hemisphere shell in 3D. Particle centres are sampled between <spanclass="tt">shell_inner_radius + radius</span> and <spanclass="tt">shell_outer_radius - radius</span>, and the flat plane is kept clear by one particle radius. The flat face is fixed at <spanclass="tt">y_centroid</span> in 2D and <spanclass="tt">z_centroid</span> in 3D; the filled region opens toward positive <spanclass="tt">y</span> in 2D and positive <spanclass="tt">z</span> in 3D. The full shell extent (<spanclass="tt">x[y,z]_centroid +/- shell_outer_radius</span> on the open side, and one particle radius of clearance on the flat-face side) must lie inside the computational domain; a hemisphere shell also requires at least two dimensions (<spanclass="tt">n > 0</span>).</li>
550
+
</ul>
551
+
</li>
541
552
<li><spanclass="tt">packing_method</span> selects how the <spanclass="tt">num_particles</span> are positioned within the cloud region:<ul>
542
553
<li><spanclass="tt">1</span> (rejection sampling) draws random positions and rejects any that violate <spanclass="tt">min_spacing</span>, producing a disordered bed. <spanclass="tt">seed</span> makes the placement reproducible.</li>
543
554
<li><spanclass="tt">2</span> (lattice) places the particles on the optimally dense lattice for the geometry — a triangular lattice in 2D and a face-centered cubic lattice in 3D. The lattice spacing is derived from the particle density (<spanclass="tt">num_particles</span> over the region area/volume); if that spacing is below the required <spanclass="tt">2*radius + min_spacing</span>, the region is too dense and the run aborts.</li>
555
+
<li>Hemisphere-shell clouds currently support rejection sampling only; <spanclass="tt">cloud_geometry = 2</span> with <spanclass="tt">packing_method = 2</span> is rejected during input validation.</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