Skip to content

Layered Packing of Particles in a Silo

PhasicFlow edited this page Sep 28, 2022 · 2 revisions

Problem definition

It is supposed to fill a silo with layers of light (density 1000 kg/m3) and heavy particles (density 1500 kg/m3). The diameter of spherical particles is 7 mm and the diameter of the silo is 20 cm. The silo is initially empty and five layers of particles are piled on one another.

Note: It is supposed that you have reviewed simulating a rotating drum tutorial before starting this tutorial.

a view of the silo after filling with particles

Setting up the case

PhasicFlow simulation case setup is based on the text-based files that we provide in two folders located in the simulation case folder: settings and caseSetup. Here we will have a look at some important files and the rest can be found in the tutorial folder of this case setup.

Simulation case setup files can be found in tutorials/sphereGranFlow folder.

Creating geometry

In file settings/geometryDict you can define motion model and wall surfaces. The motion model is fixedWall, which means all wall surfaces are fixed in this simulation. In dictionary surfaces, three surfaces are created: cylinderShell creates the cylindrical part of the silo, coneShell creates the cone part of the silo beneath the cylindrical part, and exitGate is a plane surface to plug the exit.

in settings/geometryDict file
// motion model: all surfaces are fixed
motionModel fixedWall; 

surfaces
{
    
    cylinderShell
    {
        type         cylinderWall;   // type of the wall
        p1           (0.0 0.0 0.0);  // begin point of cylinder axis
        p2           (0.0 0.0 0.4);  // end point of cylinder axis
        radius1      0.1;          // radius at p1
        radius2      0.1;          // radius at p2
        resolution   36;           // number of divisions
        material     wallMat;      // material name of this wall
    }

    coneShell
    {
        type         cylinderWall;   // type of the wall
        p1           (0.0 0.0 -0.1); // begin point of cylinder axis
        p2           (0.0 0.0 0.0);  // end point of cylinder axis
        radius1       0.02;       // radius at p1
        radius2       0.1;        // radius at p2
        resolution    36;         // number of divisions
        material      wallMat;    // material name of this wall
    }

    /*
    This is a plane wall at the exit of silo
    */
    exitGate
    {
        type planeWall;
        p1 (-0.02 -0.02 -0.1);
        p2 ( 0.02 -0.02 -0.1);
        p3 ( 0.02  0.02 -0.1);
        p4 (-0.02  0.02 -0.1);
    
    }
        
}

Enter the following command in the terminal to create the geometry and store it in 0/geometry folder.

> geometryPhasicFlow

Creating particles

Open the file settings/particlesDict. At t = 0 s, there are no particle in the simulation (empty silo). Dictionary positionParticles creates empty fields for particles (with no particle). maxNumberOfParticles sets maximum number of particles in the simulation. Total number of particles should not exceed this number after all particle insertions. Dictionary setFields creates and initialize thes required fields for particles. In this case setup, although there are no particles at t = 0 s, but the solver required to find these fields in 0 folder.

in settings/particlesDict file
setFields
{
    defaultValue 
    {
        velocity         realx3     (0 0 0);       // linear velocity (m/s)
        acceleration     realx3     (0 0 0);       // linear acceleration (m/s2)
        rotVelocity      realx3     (0 0 0);       // rotational velocity (rad/s)
        shapeName         word      lightSphere;   // name of the particle shape 
    }

    selectors
    {}
}

// positions particles 
positionParticles
{
    method empty;             // creates the required fields with zero particles (empty). 

    maxNumberOfParticles     50000; // maximum number of particles in the simulation
    mortonSorting            Yes;   // perform initial sorting based on morton code?   

}

Enter the following command in the terminal to create the particles and store them in 0 folder.

> particlesPhasicFlow

Defining particles shapes and particle insertion

In file caseSetup/sphereShape, you can set names for spherical particles, define their diameter and their material properties. Here, we define two types of particles lightSphere and heavySphere.

in caseSetup/sphereShape file
names        (lightSphere heavySphere);  // names of shapes 
diameters    (0.007 0.007);              // diameter of shapes 
materials    (lightMat heavyMat);        // material names for shapes 

In file caseSetup/particleInsertion, you can define an arbitrary number of insertion regions for particles. Here, we define 5 insertion regions named layer0 to layer4, each inserts one layer of particles into the simulation. In dictionary layer0, lightSphere particles with rate of 15000 particles/s is inserted from cylinderRegion (the location that particles are inserted from) between times 0 and 0.5 s. The initial velocity of particles is (0 0 -0.6) and particles are inserted into the simulation each 0.025 s. cylinderRegion is defined in dictionary cylinderRegionInfo: a cylinder with radius 0.09 m and end points (0.0 0.0 0.1) and (0.0 0.0 0.11). Other layers are defined similarly, and the only differences are in the type of inserted particles, the location of insertion, and the time interval of particle insertion.

in caseSetup/particleInsertion file
active  yes;          // is insertion active?
collisionCheck No;   // not implemented for yes

/*
five layers of particles are packed one-by-one using 5 insertion steps. 
*/

layer0
{
   type           cylinderRegion; // type of insertion region
   rate           15000;  // insertion rate (particles/s)
   startTime      0;      // (s)
   endTime        0.5;    // (s)
   interval       0.025;  //s  

   cylinderRegionInfo 
   {
       radius     0.09;    // radius of cylinder (m)
       p1 (0.0  0.0 0.1);  // (m,m,m)
       p2 (0.0  0.0 0.11); // (m,m,m)
   }
   
   setFields
   {
     velocity    realx3 (0.0 0.0 -0.6); // initial velocity of inserted particles 
   }
   
   mixture
   {
      lightSphere 1; // mixture composition of inserted particles 
      
   }
}

layer1
{
   type         cylinderRegion;
   rate         15000; // (particles/s)
   startTime    0.7; // (s)
   endTime      1.2; // (s)
   interval     0.025; //s  

   cylinderRegionInfo 
   {
      radius   0.09;
      p1 (0.0  0.0 0.16); // (m,m,m)
      p2 (0.0  0.0 0.17); // (m,m,m)
   }
   
   setFields
   {
     velocity    realx3 (0.0 0.0 -0.6);
   }
   
   mixture
   {
      heavySphere 1; // only heavySphere
      
   }
}

layer2
{
   type         cylinderRegion;
   rate         15000; // (particles/s)
   startTime    1.4; // (s)
   endTime      1.9; // (s)
   interval     0.025; //s  

   cylinderRegionInfo 
   {
      radius   0.09;
      p1 (0.0  0.0 0.20); // (m,m,m)
      p2 (0.0  0.0 0.21); // (m,m,m)
   }
   
   setFields
   {
     velocity    realx3 (0.0 0.0 -0.6);
   }
   
   mixture
   {
      lightSphere 1; // only lightSphere
      
   }
}

layer3
{
   type         cylinderRegion;
   rate         15000; // (particles/s)
   startTime    2.1; // (s)
   endTime      2.6; // (s)
   interval     0.025; //s  

   cylinderRegionInfo 
   {
      radius   0.09;
      p1 (0.0  0.0 0.28); // (m,m,m)
      p2 (0.0  0.0 0.29); // (m,m,m)
   }
   
   setFields
   {
     velocity   realx3 (0.0 0.0 -0.6);
   }
   
   mixture
   {
      heavySphere 1;
      
   }
}

layer4
{
   type         cylinderRegion;
   rate         15000; // (particles/s)
   startTime    2.8; // (s)
   endTime      3.3; // (s)
   interval     0.025; //s  

   cylinderRegionInfo 
   {
      radius   0.09;
      p1 (0.0  0.0 0.37); // (m,m,m)
      p2 (0.0  0.0 0.38); // (m,m,m)
   }
   
   setFields
   {
     velocity    realx3 (0.0 0.0 -0.6);
   }
   
   mixture
      lightSphere 1;
      
   }
}

Running the case

The solver for this simulation is sphereGranFlow. Enter the following command in the terminal. Depending on the computational power, it may take a few minutes to a few hours to complete.

> sphereGranFlow

Post-processing

After finishing the simulation, you can render the results in Paraview. To convert the results to VTK format, just enter the following command in the terminal. This will converts all the results (particles and geometry) to VTK format and store them in folder VTK/.

> pFlowToVTK