CFD Online Discussion Forums

CFD Online Discussion Forums (http://www.cfd-online.com/Forums/)
-   OpenFOAM Programming & Development (http://www.cfd-online.com/Forums/openfoam-programming-development/)
-   -   multiphaseEulerFoam for packed bed reactor (http://www.cfd-online.com/Forums/openfoam-programming-development/109558-multiphaseeulerfoam-packed-bed-reactor.html)

yanxiang November 20, 2012 16:44

multiphaseEulerFoam for packed bed reactor
 
2 Attachment(s)
Foamers,

I am working on a two phase flow in packed bed reactor. Since the solid phase is not moving, I thought I can basically force it fixed by setting corresponding velocity to zero at each time step. So I did. In the UEqn.C, I added after line 9 so it became

Code:

    volVectorField& U = phase.U();

    if (phase.name() == "water")
    {
        U = U*0;
    }

    volScalarField nuEff(sgsModel->nut() + iter().nu());

It compiled OK. I took the bubbleColumn as the test case (tutorials/multiphase/multiphaseEulerFoam/bubbleColumn) and changed the property of the water phase to that of a solid (taken from tutorials/multiphase/twoPhaseEulerFoam/bed) but left the other phase (gas phase) unchanged. Initial conditions are shown in the attached picture t0.png. alphawater is really alphasolid in this case. Since the solid phase velocity is forced to be zero, I would expect it not moving. However, the solution shows that the solid phase is compressed till the volume fraction is 0.9. The sum of the two phases, indicated by alphasum, is, however, 1 (with slight deviation at some points due to numerical errors). I played around with the diamterModel parameters, it stayed the same.

So why would the solid phase compress itself if the velocity is zero and the alpha equations depend on that? What do I miss?

Thanks,
yanxiang

yanxiang November 20, 2012 18:45

I think I figured out what went wrong myself.

So the solution procedures of the alpha equations in multiphaseEulerFoam is similar to the ones presented in Rusche's thesis (Eqn 3.58), only adding more equations. So with this equation, even Ua = 0, alpha_a still changes. Change this to the straightforward solution of the equations should solve the problem, but also would possibly introduce unboundedness.
http://www.cfd-online.com/Forums/dat...BJRU5ErkJggg==

yanxiang November 21, 2012 17:11

Ok. Seems like nobody is really interested in this topic.

So anyway, my last post was wrong. The fact that the solid phase is compressed has nothing to do with how the alpha equations are solved. I implemented the straightforward solution of those, but what I got is simply worse. Compression still, and unboundedness. So for this simple two phase case, the solution is basically not to solve the alpha equations. alpha_solid = alpha_solid0, and alpha_gas = 1- alpha_solid.

kwardle December 14, 2012 13:51

Maybe it is not that no one is interested, just not fast enough to respond in 1 day...
If you are only looking at two phases, why not try with twoPhaseEulerFoam? Did you try to change the order that your phases are defined in transportProperties? Perhaps that way you would have the solid phase be the dependent as you have suggested should be the case.
I guess, fundamentally I don't see why multiphaseEulerFoam is the correct approach for you. Is there a reason why a porous approach does not work. Just some thoughts.

yanxiang December 14, 2012 15:36

Dear Kent,

Thanks for the reply, and for comforting. I wasn't patient enough.

You are right about the twoPhaseEulerFoam. I have discontinued any effort of trying to make the multiphaseEulerFoam work. It is not such a trivial task to do. So instead, I switch to twoPhaseEulerFoam and so far I have made some progress. However, just to clarify, there really is three phases, i.e., a static solid phase and flowing gas and liquid phases.

The porous media model isn't ideal because what I am interested in is the liquid distribution within the bed, whereas the porous media model implemented in OF only considers uniform porosity. I have implemented my own variable porous media model, but I still favor the multi-fluid approach as it provides more flexibility and to some degree is closer to the real physics because it accounts for the interactions between phases.

Now I am facing another issue. There is a brief discussion here:

http://www.cfd-online.com/Forums/ope...rall-loop.html

So the issue is basically that I can't seem to limit the volume fraction within 0 and 1. I would appreciate it if you could help me with that.

yanxiang

vonboett May 17, 2016 03:48

Hi Yanxiang,

Although this thread is old I would like to add something if someone goes the same way: The solver searches for a divergence free velocity field to find the solution (continuity equation) so setting the velocity to a chosen value somewhere messes up your equation system. What you can do is the "bodyforce" approach, you can add a volume force in your UEqn that causes the fluid to decellerate to the desired velocity in the cells where your solids are. This causes some pressure oscillation so the more sophisticated way is to introduce these terms in the pEqn (see how gravity is handled) but if you are not interested in the local pressure but in the overall flow field its OK. I did that once to add the opening of a gate to the interFOAM solver and I now reuse the code to account for large boulders lying in the channel that disturb the flow. In the createFields.H I added some lines that read in the cells that are blocked by a body from an .stl surface file that contains the scanned shape of the boulders:

Info<< "Creating body force: reading impermeable cells from cellset constant/polyMesh/sets/selectedCells";
// Allocate the body force vector field and initialize it to zero
volVectorField bodyForce
(
IOobject
(
"bodyForce",
runTime.timeName(),
mesh,
IOobject::READ_IF_PRESENT,
IOobject::AUTO_WRITE
),
mesh,
dimensionedVector("zero",
dimForce/dimVolume,
vector::zero)
);
volVectorField bodyVel
(
IOobject
(
"bodyVel",
runTime.timeName(),
mesh,
IOobject::READ_IF_PRESENT,
IOobject::AUTO_WRITE
),
mesh,
dimensionedVector("zero",
dimLength/dimTime,
vector::zero)
);
volScalarField bodySurfaceCells
(
IOobject
(
"bodySurfaceCells",
runTime.timeName(),
mesh,
IOobject::READ_IF_PRESENT,
IOobject::AUTO_WRITE
),
mesh,
dimensionedScalar("zero",
dimForce/dimForce,
0.0)
);


cellSet selectedCells
(
mesh,
"selectedCells",
IOobject::MUST_READ,
IOobject::NO_WRITE
);

for(cellSet::iterator cell=selectedCells.begin();cell!=selectedCells.end ();cell++)
{
bodySurfaceCells[cell.key()] = 1;
}
fv::IOoptionList fvOptions(mesh);


then add + (bodyForce/phase.rho()) to the right hand side in UEqns.set( ) in UEqns.H of multiphaseEulerFoam and prior to calling UEqn.H in multiphaseEulerFoam.C add

bodyForce *= 0;
bodyVel = -U*bodySurfaceCells;
bodyForce = rho * (bodyVel) / runTime.deltaT();

I currently work on implementing a fully coupled Lagrangian Particle Simulation based on DPMFoam to multiphaseEulerFoam and it seems to work, maybe this would be a better way to get the right physics...


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