mirror of
https://github.com/PhasicFlow/phasicFlow.git
synced 2025-06-12 16:26:23 +00:00
352 lines
19 KiB
HTML
352 lines
19 KiB
HTML
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
|
<html xmlns="http://www.w3.org/1999/xhtml">
|
|
<head>
|
|
<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.8.17"/>
|
|
<title>PhasicFlow: Problem Definition</title>
|
|
<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="resize.js"></script>
|
|
<script type="text/javascript" src="navtreedata.js"></script>
|
|
<script type="text/javascript" src="navtree.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/javascript">
|
|
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
|
$(document).ready(function() { init_search(); });
|
|
/* @license-end */
|
|
</script>
|
|
<script type="text/x-mathjax-config">
|
|
MathJax.Hub.Config({
|
|
extensions: ["tex2jax.js"],
|
|
jax: ["input/TeX","output/HTML-CSS"],
|
|
});
|
|
</script>
|
|
<script type="text/javascript" async="async" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
|
|
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
|
<link href="customdoxygen.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="projectalign" style="padding-left: 0.5em;">
|
|
<div id="projectname"><a href="https://cemf.ir">PhasicFlow</a>
|
|
 <span id="projectnumber"><a href="https://cemf.ir">v0.1</a></span>
|
|
</div>
|
|
<div id="projectbrief"><a href="www.github.com/PhasicFlow">www.cemf.ir</a></div>
|
|
</td>
|
|
<td> <div id="MSearchBox" class="MSearchBoxInactive">
|
|
<span class="left">
|
|
<img id="MSearchSelect" src="search/mag_sel.png"
|
|
onmouseover="return searchBox.OnSearchSelectShow()"
|
|
onmouseout="return searchBox.OnSearchSelectHide()"
|
|
alt=""/>
|
|
<input type="text" id="MSearchField" value="Search" accesskey="S"
|
|
onfocus="searchBox.OnSearchFieldFocus(true)"
|
|
onblur="searchBox.OnSearchFieldFocus(false)"
|
|
onkeyup="searchBox.OnSearchFieldChange(event)"/>
|
|
</span><span class="right">
|
|
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
|
|
</span>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
<!-- end header part -->
|
|
<!-- Generated by Doxygen 1.8.17 -->
|
|
<script type="text/javascript">
|
|
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
|
var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
|
/* @license-end */
|
|
</script>
|
|
</div><!-- top -->
|
|
<div id="side-nav" class="ui-resizable side-nav-resizable">
|
|
<div id="nav-tree">
|
|
<div id="nav-tree-contents">
|
|
<div id="nav-sync" class="sync"></div>
|
|
</div>
|
|
</div>
|
|
<div id="splitbar" style="-moz-user-select:none;"
|
|
class="ui-resizable-handle">
|
|
</div>
|
|
</div>
|
|
<script type="text/javascript">
|
|
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
|
$(document).ready(function(){initNavTree('md_tutorials_sphereGranFlow_toteblender_ReadMe.html',''); initResizable(); });
|
|
/* @license-end */
|
|
</script>
|
|
<div id="doc-content">
|
|
<!-- window showing the filter options -->
|
|
<div id="MSearchSelectWindow"
|
|
onmouseover="return searchBox.OnSearchSelectShow()"
|
|
onmouseout="return searchBox.OnSearchSelectHide()"
|
|
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
|
</div>
|
|
|
|
<!-- iframe showing the search results (closed by default) -->
|
|
<div id="MSearchResultsWindow">
|
|
<iframe src="javascript:void(0)" frameborder="0"
|
|
name="MSearchResults" id="MSearchResults">
|
|
</iframe>
|
|
</div>
|
|
|
|
<div class="PageDoc"><div class="header">
|
|
<div class="headertitle">
|
|
<div class="title">Problem Definition </div> </div>
|
|
</div><!--header-->
|
|
<div class="contents">
|
|
<div class="textblock"><p>The problem is to simulate a double pedestal tote blender with the diameter <b>0.03 m</b> and <b>0.1 m</b> respectively, the length <b>0.3 m</b>, rotating at <b>28 rpm</b>. This blender is filled with <b>20000</b> Particles. The timestep for integration is <b>0.00001 s</b>. There is one type of Particle in this blender that are being inserted during simulation to fill the blender.</p><ul>
|
|
<li><b>20000</b> particles with <b>4 mm</b> diameter, at the rate of 20000 particles/s for 1 sec. َAfter settling particles, this blender starts to rotate at t=**1s**.</li>
|
|
</ul>
|
|
<p><html> <body> </p><div align="center"><b> a view of the tote-blender while rotating </b> <div align="center"> <img src="sample sample sample sample", width=700px> </div><p> </body> </html></div><div align="center"><h1>Setting up the Case</h1>
|
|
</div><div align="center"> As it has been explained in the previous cases, the simulation case setup is based on text-based scripts. Here, the simulation case setup are sotred in two folders: <code>caseSetup</code>, <code>setting</code>. (see the above folders). Unlike the previous cases, this case does not have the <code>stl</code> file. and the geometry is described in the <code>geometryDict</code> file.</div><div align="center"><h2>Defining particles</h2>
|
|
</div><div align="center"> Then in the <code>caseSetup/sphereShape</code> the diameter and the material name of the particles are defined. <div class="fragment"><div class="line"> {C++}</div>
|
|
<div class="line">// names of shapes </div>
|
|
<div class="line">names (sphere1); </div>
|
|
<div class="line">// diameter of shapes (m)</div>
|
|
<div class="line">diameters (0.004);</div>
|
|
<div class="line">// material names for shapes </div>
|
|
<div class="line">materials (prop1); </div>
|
|
</div><!-- fragment --></div><div align="center"><h2>Particle Insertion</h2>
|
|
</div><div align="center"> In this case we have a region for ordering particles. These particles are placed in this blender. For example the script for the inserted particles is shown below.</div><div align="center"><div align="center"> in <b>caseSetup/particleInsertion</b> file </div></div><div align="center"><div class="fragment"><div class="line"> {C++}</div>
|
|
<div class="line">// positions particles </div>
|
|
<div class="line">positionParticles</div>
|
|
<div class="line">{</div>
|
|
<div class="line">// ordered positioning</div>
|
|
<div class="line"> method positionOrdered; </div>
|
|
<div class="line">// maximum number of particles in the simulation</div>
|
|
<div class="line"> maxNumberOfParticles 40000;</div>
|
|
<div class="line">// perform initial sorting based on morton code? </div>
|
|
<div class="line"> mortonSorting Yes; </div>
|
|
<div class="line">// cylinder for positioning particles </div>
|
|
<div class="line"> cylinder</div>
|
|
<div class="line"> {</div>
|
|
<div class="line">// Coordinates of top cylinderRegion (m,m,m) </div>
|
|
<div class="line"> p1 (0.05 0.0 0.12);</div>
|
|
<div class="line"> p2 (0.05 0.0 0.22);</div>
|
|
<div class="line">// radius of cylinder</div>
|
|
<div class="line"> radius 0.066;</div>
|
|
<div class="line"> }</div>
|
|
<div class="line"> </div>
|
|
<div class="line"> positionOrderedInfo</div>
|
|
<div class="line"> {</div>
|
|
<div class="line">// minimum space between centers of particles</div>
|
|
<div class="line"> diameter 0.003;</div>
|
|
<div class="line">// number of particles in the simulation </div>
|
|
<div class="line"> numPoints 20000;</div>
|
|
<div class="line">// axis order for filling the space with particles </div>
|
|
<div class="line"> axisOrder (z y x); </div>
|
|
<div class="line"> }</div>
|
|
<div class="line">}</div>
|
|
</div><!-- fragment --></div><div align="center"><h2>Interaction between particles</h2>
|
|
</div><div align="center"> In <code>caseSetup/interaction</code> file, material names and properties and interaction parameters are defined: interaction between the particles of rotating drum. Since we are defining 1 material for simulation, the interaction matrix is 1x1 (interactions are symetric). <div class="fragment"><div class="line"> {C++}</div>
|
|
<div class="line"> // a list of materials names</div>
|
|
<div class="line">materials (prop1);</div>
|
|
<div class="line">// density of materials [kg/m3]</div>
|
|
<div class="line">densities (1000.0); </div>
|
|
<div class="line"> </div>
|
|
<div class="line">contactListType sortedContactList; </div>
|
|
<div class="line"> </div>
|
|
<div class="line">model</div>
|
|
<div class="line">{</div>
|
|
<div class="line"> contactForceModel nonLinearNonLimited;</div>
|
|
<div class="line"> rollingFrictionModel normal;</div>
|
|
<div class="line"> /*</div>
|
|
<div class="line"> Property (prop1-prop1);</div>
|
|
<div class="line"> */</div>
|
|
<div class="line">// Young modulus [Pa]</div>
|
|
<div class="line"> Yeff (1.0e6); </div>
|
|
<div class="line">// Shear modulus [Pa]</div>
|
|
<div class="line"> Geff (0.8e6); </div>
|
|
<div class="line">// Poisson's ratio [-]</div>
|
|
<div class="line"> nu (0.25); </div>
|
|
<div class="line">// coefficient of normal restitution</div>
|
|
<div class="line"> en (0.7); </div>
|
|
<div class="line">// coefficient of tangential restitution</div>
|
|
<div class="line"> et (1.0); </div>
|
|
<div class="line">// dynamic friction</div>
|
|
<div class="line"> mu (0.3); </div>
|
|
<div class="line">// rolling friction</div>
|
|
<div class="line"> mur (0.1); </div>
|
|
<div class="line"> </div>
|
|
<div class="line">}</div>
|
|
</div><!-- fragment --></div><div align="center"><h2>Settings</h2>
|
|
</div><div align="center"> <h3>Geometry</h3>
|
|
</div><div align="center"> In the <code>settings/geometryDict</code> file, the geometry and axis of rotation is defined for the drum. The geometry is composed of a cylinder inlet and outlet, cone shell top and down, a cylinder shell and enter and exit Gate. <div class="fragment"><div class="line"> {C++}</div>
|
|
<div class="line">surfaces</div>
|
|
<div class="line">{</div>
|
|
<div class="line"> topGate</div>
|
|
<div class="line"> topGate</div>
|
|
<div class="line"> {</div>
|
|
<div class="line"> // type of wall</div>
|
|
<div class="line"> type cylinderWall;</div>
|
|
<div class="line"> // begin point of cylinder axis </div>
|
|
<div class="line"> p1 (0.0 0.0 0.299);</div>
|
|
<div class="line"> // end point of cylinder axis </div>
|
|
<div class="line"> p2 (0.0 0.0 0.3);</div>
|
|
<div class="line"> // radius at p1 </div>
|
|
<div class="line"> radius1 0.03;</div>
|
|
<div class="line"> // radius at p2 </div>
|
|
<div class="line"> radius2 0.0001;</div>
|
|
<div class="line"> // material of wall</div>
|
|
<div class="line"> material solidProperty;</div>
|
|
<div class="line"> // motion component name</div>
|
|
<div class="line"> motion axisOfRotation; </div>
|
|
<div class="line"> }</div>
|
|
<div class="line"> </div>
|
|
<div class="line"> topCylinder</div>
|
|
<div class="line"> {</div>
|
|
<div class="line"> // type of the wall</div>
|
|
<div class="line"> type cylinderWall;</div>
|
|
<div class="line"> // begin point of cylinder axis </div>
|
|
<div class="line"> p1 (0.0 0.0 0.28);</div>
|
|
<div class="line"> // end point of cylinder axis </div>
|
|
<div class="line"> p2 (0.0 0.0 0.3);</div>
|
|
<div class="line"> // radius at p1 </div>
|
|
<div class="line"> radius1 0.03;</div>
|
|
<div class="line"> // radius at p2 </div>
|
|
<div class="line"> radius2 0.03;</div>
|
|
<div class="line"> // number of divisions </div>
|
|
<div class="line"> resolution 36;</div>
|
|
<div class="line"> // material name of this wall</div>
|
|
<div class="line"> material prop1;</div>
|
|
<div class="line"> // motion component name </div>
|
|
<div class="line"> motion axisOfRotation; </div>
|
|
<div class="line"> }</div>
|
|
<div class="line"> </div>
|
|
<div class="line"> coneShelltop</div>
|
|
<div class="line"> {</div>
|
|
<div class="line"> // type of the wall </div>
|
|
<div class="line"> type cylinderWall;</div>
|
|
<div class="line"> // begin point of cylinder axis </div>
|
|
<div class="line"> p1 (0.0 0.0 0.2);</div>
|
|
<div class="line"> // end point of cylinder axis </div>
|
|
<div class="line"> p2 (0.0 0.0 0.28);</div>
|
|
<div class="line"> // radius at p1 </div>
|
|
<div class="line"> radius1 0.1;</div>
|
|
<div class="line"> // radius at p2 </div>
|
|
<div class="line"> radius2 0.03;</div>
|
|
<div class="line"> // number of divisions </div>
|
|
<div class="line"> resolution 36;</div>
|
|
<div class="line"> // material name of this wall </div>
|
|
<div class="line"> material prop1;</div>
|
|
<div class="line"> // motion component name </div>
|
|
<div class="line"> motion axisOfRotation; </div>
|
|
<div class="line"> }</div>
|
|
<div class="line"> </div>
|
|
<div class="line"> cylinderShell</div>
|
|
<div class="line"> {</div>
|
|
<div class="line"> // type of the wall</div>
|
|
<div class="line"> type cylinderWall;</div>
|
|
<div class="line"> // begin point of cylinder axis </div>
|
|
<div class="line"> p1 (0.0 0.0 0.1);</div>
|
|
<div class="line"> // end point of cylinder axis</div>
|
|
<div class="line"> p2 (0.0 0.0 0.2);</div>
|
|
<div class="line"> // radius at p1 </div>
|
|
<div class="line"> radius1 0.1;</div>
|
|
<div class="line"> // radius at p2 </div>
|
|
<div class="line"> radius2 0.1;</div>
|
|
<div class="line"> // number of divisions </div>
|
|
<div class="line"> resolution 36;</div>
|
|
<div class="line"> // material name of this wall </div>
|
|
<div class="line"> material prop1; </div>
|
|
<div class="line"> // motion component name </div>
|
|
<div class="line"> motion axisOfRotation; </div>
|
|
<div class="line"> }</div>
|
|
<div class="line"> </div>
|
|
<div class="line"> coneShelldown</div>
|
|
<div class="line"> {</div>
|
|
<div class="line"> // type of the wall</div>
|
|
<div class="line"> type cylinderWall;</div>
|
|
<div class="line"> // begin point of cylinder axis </div>
|
|
<div class="line"> p1 (0.0 0.0 0.02);</div>
|
|
<div class="line"> // end point of cylinder axis </div>
|
|
<div class="line"> p2 (0.0 0.0 0.1);</div>
|
|
<div class="line"> // radius at p1 </div>
|
|
<div class="line"> radius1 0.03;</div>
|
|
<div class="line"> // radius at p2 </div>
|
|
<div class="line"> radius2 0.1;</div>
|
|
<div class="line"> // number of divisions </div>
|
|
<div class="line"> resolution 36;</div>
|
|
<div class="line"> // material name of this wall </div>
|
|
<div class="line"> material prop1;</div>
|
|
<div class="line"> // motion component name </div>
|
|
<div class="line"> motion axisOfRotation; </div>
|
|
<div class="line"> }</div>
|
|
<div class="line"> /*</div>
|
|
<div class="line"> This is a plane wall at the exit of silo</div>
|
|
<div class="line"> */</div>
|
|
<div class="line"> </div>
|
|
<div class="line"> bottomCylinder</div>
|
|
<div class="line"> {</div>
|
|
<div class="line"> // type of the wall</div>
|
|
<div class="line"> type cylinderWall; </div>
|
|
<div class="line"> // begin point of cylinder axis </div>
|
|
<div class="line"> p1 (0.0 0.0 0.0);</div>
|
|
<div class="line"> // end point of cylinder axis </div>
|
|
<div class="line"> p2 (0.0 0.0 0.02);</div>
|
|
<div class="line"> // radius at p1 </div>
|
|
<div class="line"> radius1 0.03;</div>
|
|
<div class="line"> // radius at p2 </div>
|
|
<div class="line"> radius2 0.03;</div>
|
|
<div class="line"> // number of divisions </div>
|
|
<div class="line"> resolution 36;</div>
|
|
<div class="line"> // material name of this wall </div>
|
|
<div class="line"> material prop1;</div>
|
|
<div class="line"> // motion component name </div>
|
|
<div class="line"> motion axisOfRotation; </div>
|
|
<div class="line"> }</div>
|
|
<div class="line"> exitGate</div>
|
|
<div class="line"> {</div>
|
|
<div class="line"> type planeWall;</div>
|
|
<div class="line"> p1 (-0.05 -0.05 0);</div>
|
|
<div class="line"> p2 (-0.05 0.05 0);</div>
|
|
<div class="line"> p3 ( 0.05 0.05 0);</div>
|
|
<div class="line"> p4 (0.05 -0.05 0);</div>
|
|
<div class="line"> material prop1;</div>
|
|
<div class="line"> motion axisOfRotation; </div>
|
|
<div class="line"> }</div>
|
|
<div class="line"> </div>
|
|
<div class="line">}</div>
|
|
</div><!-- fragment --></div><div align="center"><h3>Rotating Axis Info</h3>
|
|
</div><div align="center"> In this part of <code>geometryDict</code> the information of rotating axis and speed of rotation are defined. Unlike the previous cases, the rotation of this blender starts at time=**0 s**. <div class="fragment"><div class="line"> {C++}</div>
|
|
<div class="line">// information for rotatingAxisMotion motion model </div>
|
|
<div class="line">rotatingAxisMotionInfo</div>
|
|
<div class="line">{</div>
|
|
<div class="line"> axisOfRotation </div>
|
|
<div class="line"> {</div>
|
|
<div class="line"> p1 (-0.1 0.0 0.15); // first point for the axis of rotation </div>
|
|
<div class="line"> p2 (0.1 0.0 0.15); // second point for the axis of rotation</div>
|
|
<div class="line"> omega 1.5708; // rotation speed ==> 15 rad/s</div>
|
|
<div class="line"> // Start time of Geometry Rotating (s) </div>
|
|
<div class="line"> startTime 1;</div>
|
|
<div class="line"> // End time of Geometry Rotating (s)</div>
|
|
<div class="line"> endTime 9.5;</div>
|
|
<div class="line"> }</div>
|
|
<div class="line">}</div>
|
|
</div><!-- fragment --></div><div align="center"><h2>Performing Simulation</h2>
|
|
</div><div align="center"> To perform simulations, enter the following commands one after another in the terminal.</div><div align="center">Enter <code>$ particlesPhasicFlow</code> command to create the initial fields for particles. <br />
|
|
Enter <code>$ geometryPhasicFlow</code> command to create the Geometry. <br />
|
|
At last, enter <code>$ sphereGranFlow</code> command to start the simulation. <br />
|
|
After finishing the simulation, you can use <code>$ pFlowtoVTK</code> to convert the results into vtk format storred in ./VTK folder. </div></div></div><!-- contents -->
|
|
</div><!-- PageDoc -->
|
|
</div><!-- doc-content -->
|
|
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
|
<ul>
|
|
<li class="footer">Generated by
|
|
<a href="http://www.doxygen.org/index.html">
|
|
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.17 </li>
|
|
</ul>
|
|
</div>
|
|
</body>
|
|
</html>
|