|
[Sponsors] |
April 10, 2016, 17:20 |
Source term to VOF equation
|
#1 |
Senior Member
David Long
Join Date: May 2012
Location: Germany
Posts: 104
Rep Power: 14 |
Dear Foamers,
Having been working on solid particles - free surface flow interaction for a while, so far I got some good results in terms of coupled particle-fluid interaction. Nevertheless, an unnoticeable issue was found on the volume conservation of fluid phase. The modified solver is based on interFoam where an open-source DEM (discrete element method) code is called as a shared library to handle dynamics of solid particles. The interaction is realized via a momentum exchange term (Sp_f) to the R.H.S of N-S equation, and empirical drag models to calculate fluid forces acting on solid particles. The VOF and continuity equations used in the solver are given by: hence the Source term which stands for the displaced volume by solid particles reads as: here "alpha_f" is the volume fraction of fluid phase in a cell (= 1- V_particles/V_cell), and "U_f" the fluid velocity. The continuity equation is already implemented into the pressure equation instead of the original one. The alplaEqn.H is implemented as: Code:
{ word alphaScheme("div(phi,alpha)"); word alpharScheme("div(phirb,alpha)"); surfaceScalarField phic(mag(phi/mesh.magSf())); phic = min(interface.cAlpha()*phic, max(phic)); surfaceScalarField phir(phic*interface.nHatf()); for (int aCorr=0; aCorr<nAlphaCorr; aCorr++) { surfaceScalarField phiAlpha ( fvc::flux ( phi, // = U*alpha_f alpha1, alphaScheme ) + fvc::flux ( -fvc::flux(-phir, scalar(1) - alpha1, alpharScheme), alpha1, alpharScheme ) ); //MULES::explicitSolve(alpha1, phi, phiAlpha, 1, 0); // source term volScalarField divU(fvc::div(U*alpha_f)); volScalarField SpVoF = alpha1*divU; MULES::explicitSolve(geometricOneField(), alpha1, phi, phiAlpha, SpVoF, zeroField(), 1, 0); rhoPhi = phiAlpha*(rho1 - rho2) + phi*rho2; } // end for Info<< "Phase-1 volume fraction = " << alpha1.weightedAverage(mesh.Vsc()).value() << " Min(alpha1) = " << min(alpha1).value() << " Max(alpha1) = " << max(alpha1).value() << endl; } However. what i got from the coupled particle-fluid simulation is odd: the water level remains at 0.1 m which is not true after several hundred of particles poured into the water column. Where is the problem in the VOF implementation, especially the source term and the MULES solver. I read the MULES.c and MULESTemplates.C but still could not fully understand. Can we directly implement the alpha equation just like in UEqn.H without using MULES (e.g. bubbleFoam)? I would appreciate any helpful advice Cheers, David Last edited by keepfit; April 11, 2016 at 16:09. |
|
April 12, 2016, 17:06 |
Update
|
#2 |
Senior Member
David Long
Join Date: May 2012
Location: Germany
Posts: 104
Rep Power: 14 |
Update
The direct implementation of the modified VOF method seems working, but still suffer some mass loss. Code:
{ word alphaScheme("div(phi,alpha)"); word alpharScheme("div(phirb,alpha)"); surfaceScalarField phic(mag(phi/mesh.magSf())); phic = min(interface.cAlpha()*phic, max(phic)); surfaceScalarField phir(phic*interface.nHatf()); for (int aCorr=0; aCorr<nAlphaCorr; aCorr++) { volScalarField::DimensionedInternalField SpVof ( IOobject ( "SpVof", runTime.timeName(), mesh ), // Divergence term is handled explicitly to be // consistent with the explicit transport solution fvc::div(alpha_f*U) ); fvScalarMatrix alpha1Eqn ( fvm::ddt(alpha1) + fvm::div(phi, alpha1, alphaScheme) + fvm::div(-fvc::flux(-phir, alpha_f - alpha1, alpharScheme), alpha1, alpharScheme) // alpha1 + alpha2 = alpha_f; alpha_f +alpha_solid = 1 == fvm::Sp(SpVof, alpha1) ); alpha1Eqn.relax(); alpha1Eqn.solve(); rhoPhi = alpha1Eqn.flux()*(rho1 - rho2) + phi*rho2; } // end for Info<< "Phase-1 volume fraction = " << alpha1.weightedAverage(mesh.Vsc()).value() << " Min(alpha1) = " << min(alpha1).value() << " Max(alpha1) = " << max(alpha1).value() << endl; } thanks! |
|
April 23, 2016, 06:43 |
|
#3 |
Senior Member
Ramakant Gadhewal
Join Date: Apr 2010
Location: Chemical Engineering,National Institute of Technology,Warangal (T.S.),India
Posts: 131
Rep Power: 16 |
Dear David Long
this model is also used for the lake modelin ?.For example in the lake water and solid particle are coming together and get settled at the bottom of the lake/river. any advice? thanks! |
|
April 25, 2016, 18:21 |
|
#4 |
Senior Member
David Long
Join Date: May 2012
Location: Germany
Posts: 104
Rep Power: 14 |
yes, the solver can be used to study river/channel sediment transport as well.
|
|
July 12, 2019, 06:18 |
|
#5 |
New Member
Dan
Join Date: May 2019
Posts: 3
Rep Power: 7 |
Hello,
I know this is an old thread but I'm dealing with exactly the same problem with water/air/particles solver (i.e. no volume displacement due to addition of particles). I'm able to maintain the volume fraction of the liquid phase and keep alpha1 between 0 and 1, but the water level doesn't rise accordingly. I've tried MULES and direct implementation. Have you managed back then to implement the alpha equation correctly? Could you share your results? Your help would be much appreciated. Thanks! |
|
July 17, 2019, 16:46 |
|
#6 |
New Member
Gavin Ridley
Join Date: Jan 2019
Location: Tennessee, USA
Posts: 25
Rep Power: 7 |
Hi, did you try adding your alpha source term in alphaSuSp.H? That will make it get used by MULES correctly. There are a few equations where consistent source terms need to be added in for MULES, which is why they seem to have added that alphaSuSp file.
|
|
|
|
Similar Threads | ||||
Thread | Thread Starter | Forum | Replies | Last Post |
what is swap4foam ?? | AB08 | OpenFOAM | 28 | February 2, 2016 02:22 |
[Other] Adding solvers from DensityBasedTurbo to foam-extend 3.0 | Seroga | OpenFOAM Community Contributions | 9 | June 12, 2015 18:18 |
[swak4Foam] swak4Foam-groovyBC build problem | zxj160 | OpenFOAM Community Contributions | 18 | July 30, 2013 14:14 |
[swak4Foam] funkySetFields compilation error | tayo | OpenFOAM Community Contributions | 39 | December 3, 2012 06:18 |
Source term for diffusion equation in FLUENT 4.5 | Raja Banerjee | FLUENT | 1 | August 31, 2000 00:00 |