CFD Online Logo CFD Online URL
www.cfd-online.com
[Sponsors]
Home > Forums > Software User Forums > OpenFOAM > OpenFOAM Running, Solving & CFD

Odd lagrangian particle behavior at small size

Register Blogs Community New Posts Updated Threads Search

Reply
 
LinkBack Thread Tools Search this Thread Display Modes
Old   November 3, 2015, 10:59
Unhappy Odd lagrangian particle behavior at small size
  #1
New Member
 
Paul Handy
Join Date: Sep 2014
Location: Idaho, USA
Posts: 21
Rep Power: 11
phandy is on a distinguished road
I'm attempting to reproduce the results of Hoffman et al (http://onlinelibrary.wiley.com/doi/1...71109/abstract) in OpenFOAM (Data retrieved from "Gas Cyclones and Swirl Tubes" https://books.google.com/books?id=jq...page&q&f=false). It seemed to me that the best solver to use in this case was MPPICFoam, and that's how I set it up.

Here's my basic case setup:

constant/kinematicCloudProperties:

Code:
FoamFile
{
  version     2.0;
  format      ascii;
  class       dictionary;
  location    "constant";
  object      particleProperties;
}

solution
{
  active          true;
  coupled         true;
  transient       yes;
  cellValueSourceCorrection off;

  maxCo           1.0;

  interpolationSchemes
  {
    rho.air         cell;
    U.air           cellPoint;
    mu.air          cell;
  }

  averagingMethod dual;

  integrationSchemes
  {
    U               Euler;
  }

  sourceTerms
  {
    schemes
    {
      U           semiImplicit 1;
    }
  }
}

constantProperties
{
  rho0            2730;
  alphaMax        0.9;
}

subModels
{
  particleForces
  {
       ErgunWenYuDrag
       {
       alphac alpha.air;
       }
    gravity;
  }

  injectionModels
  {
    model1
    {
      type            patchInjection;
      massTotal       .1125;
      SOI             1;
      parcelBasisType mass;
      patchName       inlet;
      duration        1;
      parcelsPerSecond 3e4;
      U0              (0 0 -10 );
      flowRateProfile constant 1;
      sizeDistribution
      {
        type        general;
        generalDistribution
        {
          distribution
            (
             ( 0.30000e-6   0.11602)
             ( 0.89700e-6   0.10512)
             ( 1.49400e-6   0.09194)
             ( 2.09100e-6   0.08211)
             ( 2.68800e-6   0.08818)
             ( 3.28500e-6   0.07266)
             ( 3.88200e-6   0.04576)
             ( 4.47900e-6   0.03196)
             ( 5.07600e-6   0.02825)
             ( 5.67300e-6   0.02596)
             ( 6.27000e-6   0.02365)
             ( 6.86700e-6   0.02130)
             ( 7.46400e-6   0.01891)
             ( 8.06100e-6   0.01654)
             ( 8.65800e-6   0.01435)
             ( 9.25500e-6   0.01237)
             ( 9.85200e-6   0.01059)
             (10.44900e-6   0.00903)
             (11.04600e-6   0.00767)
             (11.64300e-6   0.00652)
             (12.24000e-6   0.00557)
             (12.83700e-6   0.00484)
             (13.43400e-6   0.00431)
             (14.03100e-6   0.00399)
             (14.62800e-6   0.00387)
             (15.22500e-6   0.00388)
             (15.82200e-6   0.00388)
             (16.41900e-6   0.00389)
             (17.01600e-6   0.00389)
             (17.61300e-6   0.00389)
             (18.21000e-6   0.00388)
             (18.80700e-6   0.00386)
             (19.40400e-6   0.00385)
             (20.00100e-6   0.00382)
             (20.59800e-6   0.00380)
             (21.19500e-6   0.00377)
             (21.79200e-6   0.00373)
             (22.38900e-6   0.00369)
             (22.98600e-6   0.00364)
             (23.58300e-6   0.00359)
             (24.18000e-6   0.00354)
             (24.77700e-6   0.00348)
             (25.37400e-6   0.00342)
             (25.97100e-6   0.00335)
             (26.56800e-6   0.00328)
             (27.16500e-6   0.00320)
             (27.76200e-6   0.00312)
             (28.35900e-6   0.00303)
             (28.95600e-6   0.00294)
             (29.55300e-6   0.00285)
             (30.15000e-6   0.00275)
             (30.74700e-6   0.00265)
             (31.34400e-6   0.00256)
             (31.94100e-6   0.00247)
             (32.53800e-6   0.00238)
             (33.13500e-6   0.00229)
             (33.73200e-6   0.00220)
             (34.32900e-6   0.00212)
             (34.92600e-6   0.00204)
             (35.52300e-6   0.00196)
             (36.12000e-6   0.00188)
             (36.71700e-6   0.00180)
             (37.31400e-6   0.00173)
             (37.91100e-6   0.00166)
             (38.50800e-6   0.00159)
             (39.10500e-6   0.00152)
             (39.70200e-6   0.00145)
             (40.29900e-6   0.00139)
             (40.89600e-6   0.00133)
             (41.49300e-6   0.00127)
             (42.09000e-6   0.00121)
             (42.68700e-6   0.00115)
             (43.28400e-6   0.00110)
             (43.88100e-6   0.00105)
             (44.47800e-6   0.00100)
             (45.07500e-6   0.00095)
             (45.67200e-6   0.00091)
             (46.26900e-6   0.00086)
             (46.86600e-6   0.00082)
             (47.46300e-6   0.00078)
             (48.06000e-6   0.00074)
             (48.65700e-6   0.00071)
             (49.25400e-6   0.00068)
             (49.85100e-6   0.00064)
             (50.44800e-6   0.00061)
             (51.04500e-6   0.00059)
             (51.64200e-6   0.00056)
             (52.23900e-6   0.00054)
             (52.83600e-6   0.00052)
             (53.43300e-6   0.00050)
             (54.03000e-6   0.00048)
             (54.62700e-6   0.00047)
             (55.22400e-6   0.00045)
             (55.82100e-6   0.00044)
             (56.41800e-6   0.00043)
             (57.01500e-6   0.00043)
             (57.61200e-6   0.00042)
             (58.20900e-6   0.00042)
             (58.80600e-6   0.00042)
             (59.40300e-6   0.00042)
             (60.00000e-6   0.00000)
             );
        }
      }
    }
  }

  dispersionModel none;

  patchInteractionModel localInteraction;

  localInteractionCoeffs
  {
    patches
      (
       walls
       {
       type rebound;
       e    0.97;
       mu   0.09;
       }
       inlet
       {
       type rebound;
       e    0.97;
       mu   0.09;
       }
       outlet
       {
       type escape;
       }
       particleOutlet
       {
       type escape;
       }
       );
  }

  heatTransferModel none;

  surfaceFilmModel none;

  packingModel none; //was implicit;

  dampingModel none;

  isotropyModel stochastic;

  stochasticCollisionModel none;

  stochasticCoeffs
  {
    timeScaleModel
    {
      type isotropic;
      alphaPacked 0.6;
      e 0.9;
    }
  }

  radiation off;
}


cloudFunctions
{}
constant/turbulenceProperties.air

Code:
FoamFile
{
    version     2.0;
    format      ascii;
    class       dictionary;
    location    "constant";
    object      turbulenceProperties.air;
}

simulationType  LES;

LES
{
    LESModel kEqn;

    turbulence      on;
    printCoeffs     on;

    delta           cubeRootVol;

    cubeRootVolCoeffs
    {
    }
}
constant/transportProperties:

Code:
FoamFile
{
    version     2.0;
    format      ascii;
    class       dictionary;
    location    "constant";
    object      transportProperties;
}

contiuousPhaseName air;

rho.air         1.2;

transportModel  Newtonian;
nu              1.568e-05;
constant/g

Code:
FoamFile
{
    version     2.0;
    format      ascii;
    class       uniformDimensionedVectorField;
    location    "constant";
    object      g;
}

dimensions      [0 1 -2 0 0 0 0];
value           ( 0 -9.81 0 );
0/k.air:

Code:
FoamFile
{
    version     2.0;
    format      ascii;
    class       volScalarField;
    object      k.air;
}

dimensions          [0 2 -2 0 0 0 0];

internalField       uniform 1;

boundaryField
{
    inlet
    {
        type               fixedValue;
        value              $internalField;
    }

    outlet
    {
        type               inletOutlet;
        phi                phi.air;
        inletValue         $internalField;
        value              $internalField;
    }

    ".*"
    {
        type               kqRWallFunction;
        value              $internalField;
    }
}
0/nut.air

Code:
FoamFile
{
    version     2.0;
    format      ascii;
    class       volScalarField;
    object      nut.air;
}

dimensions          [0 2 -1 0 0 0 0];

internalField       uniform 0;

boundaryField
{
    inlet
    {
        type               calculated;
        value              $internalField;
    }

    outlet
    {
        type               calculated;
        value              $internalField;
    }

    ".*"
    {
        type               nutkWallFunction;
        value              $internalField;
    }
}
0/p:

Code:
FoamFile
{
    version     2.0;
    format      ascii;
    class       volScalarField;
    object      p;
}

dimensions      [0 2 -2 0 0 0 0];

internalField   uniform 0;

boundaryField
{
    inlet
    {
        type fixedFluxPressure;
        phi phi.air;
        value $internalField;
    }

    outlet
    {
        type fixedValue;
        phi phi.air;
        value uniform 0;
    }
    ".*"
    {
        type fixedFluxPressure;
        phi phi.air;
        value $internalField;
    }
}
0/U.air:

Code:
FoamFile
{
    version     2.0;
    format      binary;
    class       volVectorField;
    location    "0";
    object      U.air;
}

dimensions      [0 1 -1 0 0 0 0];

internalField   uniform (0 0 0);

boundaryField
{
    inlet
    {
        type            fixedValue;
        value           uniform (0 0 -10 );
    }

    outlet
    {
        type            pressureInletOutletVelocity;
        phi             phi.air;
        inletValue      uniform (0 0 0);
        value           uniform (0 0 0);
    }

    ".*"
    {
        type            fixedValue;
        value           uniform (0 0 0);
    }
}
system/controlDict:

Code:
FoamFile
{
    version     2.0;
    format      ascii;
    class       dictionary;
    location    "system";
    object      controlDict;
}

application     MPPICFoam;

startFrom       latestTime;

startTime       0;

stopAt          endTime;

endTime         7;

deltaT          2e-4;

writeControl    runTime;

writeInterval   0.1;

purgeWrite      0;

writeFormat     binary;

writePrecision  6;

writeCompression yes;

timeFormat      general;

timePrecision   6;

runTimeModifiable yes;
system/fvSchemes:

Code:
FoamFile
{
    version     2.0;
    format      ascii;
    class       dictionary;
    object      fvSchemes;
}

ddtSchemes
{
    default Euler;
}

gradSchemes
{
    default         Gauss linear;
}

divSchemes
{
    default         none;
    div(alphaPhic,U.air) Gauss linearUpwindV unlimited;
    div(((alpha.air*nuEff.air)*dev2(T(grad(U.air))))) Gauss linear;
    div(phiGByA,kinematicCloud:alpha) Gauss linear;
    div(alphaPhic,epsilon.air) Gauss limitedLinear 1;
    div(alphaPhic,k.air) Gauss limitedLinear 1;
}

laplacianSchemes
{
    default         Gauss linear corrected;
}

interpolationSchemes
{
    default         linear;
}

snGradSchemes
{
    default         corrected;
}

fluxRequired
{
    default         no;
    p;
    kinematicCloud:alpha;
}
system/fvSolution:

Code:
FoamFile
{
    version     2.0;
    format      ascii;
    class       dictionary;
    location    "system";
    object      fvSolution;
}


solvers
{
    p
    {
        solver          GAMG;
        tolerance       1e-06;
        relTol          0.01;
        smoother        GaussSeidel;
        cacheAgglomeration true;
        nCellsInCoarsestLevel 10;
        agglomerator    faceAreaPair;
        mergeLevels     1;
    }

    pFinal
    {
        solver          GAMG;
        tolerance       1e-06;
        relTol          0;
        smoother        GaussSeidel;
        cacheAgglomeration true;
        nCellsInCoarsestLevel 10;
        agglomerator    faceAreaPair;
        mergeLevels     1;
    }

    "(U|k|epsilon|omega).air"
    {
        solver          smoothSolver;
        smoother        symGaussSeidel;
        tolerance       1e-05;
        relTol          0.1;
    }

    "(U|k|epsilon|omega).airFinal"
    {
        solver          smoothSolver;
        smoother        symGaussSeidel;
        tolerance       1e-05;
        relTol          0.1;
    }

    kinematicCloud:alpha
    {
        solver          GAMG;
        tolerance       1e-06;
        relTol          0.1;
        smoother        GaussSeidel;
        cacheAgglomeration true;
        nCellsInCoarsestLevel 10;
        agglomerator    faceAreaPair;
        mergeLevels     1;
    }
}

PIMPLE
{
    nOuterCorrectors 1;
    nCorrectors     2;
    momentumPredictor yes;
    nNonOrthogonalCorrectors 0;
    pRefCell        0;
    pRefValue       0;
}

relaxationFactors
{
}
With particle sizes as I have them (.3um - 60um), I have extremely odd behavior when they enter the cyclone barrel. Instead of flowing in a circle around the cyclone, they are bunching at one end, and disrupt the air flow.
cyclone-particles.png

This shows the particles just moments after they first enter the cyclone. Note that they are flowing around both ends of the finder.

cyclone-particles-age.png

Moments later (colored for age), you can see that the particles are just filling the side with the inlet, not coming down much with gravity.

I can't explain why this is happening, but certain changes to the kinematic properties will stop it:
  • increase particle size
  • increase particle density
  • remove ErgunWenYuDrag.alphac from particleForces
Now, when I change size or density, my case no longer matches the setup in Hoffman et al. When I remove the ErgunWenYuDrag, no particles flow through the top - they all exit through the bottom; this doesn't match the results they found for fractional efficiency.


What am I missing here? Am I using the wrong solver for this case?
phandy is offline   Reply With Quote

Old   November 5, 2015, 15:54
Default
  #2
New Member
 
Paul Handy
Join Date: Sep 2014
Location: Idaho, USA
Posts: 21
Rep Power: 11
phandy is on a distinguished road
Edit: I thougth that I had done this already, but I set coupling to false, and kept the drag parameter; the number of particles escaping through the top did not seem to quite match Hoffman's case, but it was greater than nothing, and the vortex kept. I suppose that the coupling means that particles can interact with ( and interrupt) the air flow. I was hoping that this would work for me, but I much prefer to have something that somewhat resembles reality.

Last edited by phandy; November 6, 2015 at 10:49.
phandy is offline   Reply With Quote

Old   November 11, 2017, 18:07
Default
  #3
New Member
 
Saeed
Join Date: Sep 2016
Posts: 16
Rep Power: 9
hrhm_04 is on a distinguished road
By the way, do you know when to use packing, damping and isotropy models? whether to set them all for a case or any combinations of them?
hrhm_04 is offline   Reply With Quote

Reply

Tags
lagrangian, mppicfoam


Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are Off
Pingbacks are On
Refbacks are On


Similar Threads
Thread Thread Starter Forum Replies Last Post
Lagrangian particle stats rtb21 OpenFOAM Programming & Development 0 August 5, 2014 11:25
In DPM model, with rosin-rammler particle size distribution described problems, thank fa84a8g779 FLUENT 1 July 11, 2013 21:30
DMP model - mesh size and particle size songpen1985 FLUENT 0 April 17, 2013 04:38
lagrangian particle simulation RedAdmiral Main CFD Forum 2 February 9, 2013 15:05
critical error during installation of openfoam Fabio88 OpenFOAM Installation 21 June 2, 2010 03:01


All times are GMT -4. The time now is 09:09.