<!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>