Pressure Drop Across Packed Bed - Water

Submitted by mardussa on Thu, 10/04/2018 - 08:55

Hi All,
My simulation of a heated packed bed is progressing, however I have come across another difference between my CFDEM results and my past results using starccm+. The pressure drop across the pebble bed is expected to be ~550Pa, which is what the experimental results show, as well as mine and another authors simulation results in the past.

Using CFDEM however I am getting a pressure drop across the geometry of ~2Pa only. I am am not sure why it is so low. Perhaps I have not set the fluid properties correctly? I am using water as my continuous phase therefore I have changed the density and the laminar viscosity, but I am not sure what the Prandtl number should be

transportModel Newtonian;
// Density
rho [ 1 -3 0 0 0 0 0 ] 1000;
// Laminar viscosity
nu [ 0 2 -1 0 0 0 0 ] 1.0e-06;
// Laminar Prandtl number
Pr [0 0 0 0 0 0 0] 70.097; // alpha=nu/Pr=2.1399e-5
// Turbulent Prandtl number
Prt [0 0 0 0 0 0 0] 1e15;

The pressure drop for the packedBedTemp exmaple is believable and on the order of a few hundred Pa, so I do not have reason to believe that CFDEM is not capable of producing a pressure drop across a packed bed of pebbles. If anyone might know what I could have overlooked in my set up, or any ideas as to why mine would be so unexpectadly small, please let me know.

Kind regards,
Robert

paul | Thu, 10/04/2018 - 12:19

Do you realize that the pressure in the p field is in kinematic units (m2/s2)? You have to multiply it with the density to get the actual pressure. What drag model / virtual mass force model combination are you using? Do you have slip or no slip at the walls?

Which solver are you using? Does it use the prandtl number at all? In this case, the prandtl number should be much smaller (<10 for liquid water). This will have no influence on the pressure drop though.

mardussa | Fri, 10/05/2018 - 07:41

Hi Paul,
I did not realise that the pressure was in m2/s2. I have multiplied by my density of 1000kg/m3 to get my pressure drop in Pa. I currently am not at Uni where the workstation that is running this simulation is, so I will have to check next week if this does in fact correspond to the expected pressure drop. Hopefully it does!

I am using the Gidaspow drag model that either applies the Ergun or Wen Yu drag formulations depending on the local void fraction value. This is the model that was implement in past simulations I have conducted, and has been used for correct modelling of the drag on particles when they are being loaded into the geometry.

Currently no virtual mass force is implemented, as it was not implemented in the heatedPackedBed example which I adapted for my case. My forceModels are:

forceModels
(
GidaspowDrag
LaEuScalarTemp
Archimedes (my particles are buoyant in the continuous domain)
);

I will have think further about if it is a fair assumption to neglect the virtual mass force or not.

The solver I am using is cfdemSolverPisoScalar. I do this as the particles generate their own heat and need to track the temperature of the fluid as well as the particles. The laminar and turbulent Prandtl (Pr and Prt) numbers are used in this solver to determine the alphaEff field before the transport equation for T is solved, so you are correct in noting that Pr and Prt numbers will not be effecting the pressure, and also that Pr and Prt numbers are currently incorrect for water in this temperature range.

Thank you very much for again lending me your expertise.
Kind regards,
Robert

mardussa | Tue, 10/09/2018 - 07:05

UPDATE:
I have checked the pressure drop from my simulation at Uni. I get a result that is approximately 20% from the experiment and previous simulations. I recall in the past that the Young's Modulus of the particles plays a significant role in the pressure drop across the packed bed. In the past I had to reduce the YoungsMod to damp out unrealistic pressure fluctuations, and bring the temporal average pressure drop down to the expected level. It seems that in this case I may need to increase the YoungsMod of my particles and see if this increases the pressure drop across the packed bed.

Another option I may look at is the inclusion of other forces that may add to the drag and therefore pressure drop. I will try adding in the virtual mass force, however as my particles are almost stationary in their packed bed configuration, I don't believe there will be much difference.

I will also search the OpenFOAM specific forums to determine if my choice of fvSchemes is correct (at the moment, mostly Gauss linear corrected or Gauss limitedLinear).

Regards,
Robert

paul | Tue, 10/09/2018 - 09:25

A low Youngs Modulus will cause higher voidfractions, as particles will overlap further - good catch! For my cases, I use the Beetstra correlation (not available in PUBLIC, but easy to implement - similar to Koch Hill drag).

Are your particles smooth - surface roughness is very important for pressure drop calculation, but the state of the art does not consider it. In industry, it is usually calibrated using a correction factor like scaleDrag. Do you use OF4 or 5 - in my experience, numerics differs between the two versions, and I found OF4 much more stable (some cases that run in OF4 without issues will crash quickly in OF5).

mardussa | Thu, 10/11/2018 - 06:06

The particles used in the experiment were polypropylene spheres ~2.5cm in diameter. I do not have an example of the spheres, so there may be some roughness to them, but I would not have thought that the roughness is too significant in this simulation. Of course, it could be what is causing the 20% variation from experimental results.

I have not heard of the Beestra correlation before. I will look in to it and see if it may be more appropriate for me, although I may not have the time to implement a new model for drag right now. For now I will try using the scaleDrag factor under GidaspowDragProps. From searching it looks as though it is simply a linear scaling factor acting on scaleCoeff (which also depends on scaleDia if it is specified?):

void forceSubModel::scaleCoeff(scalar& coeff, scalar& d, int index) const
{
if(particleCloud_.cgTypeSpecificDifferent)
{
double cgCurr = particleCloud_.cg(particleCloud_.particleType(index));
coeff *= cgCurr*cgCurr*cgCurr;
}
else
coeff *= scaleDia_*scaleDia_*scaleDia_;

coeff *= scaleDrag_;

Which is then implemented in Gidaspow.C as:

// calc particle's drag
dragCoefficient = Vs*betaP;
if (modelType_=="B")
dragCoefficient /= voidfraction;

forceSubM(0).scaleCoeff(dragCoefficient,dParcel,index);
drag = dragCoefficient * Ur;

I use OF4, so good to know it is more stable :) Thank you Paul for giving me someone to talk to about my problem.

Regards,
Robert