|
[Sponsors] |
March 19, 2013, 14:11 |
Bubble column with sprayFoam
|
#1 |
Member
Davide D.
Join Date: Oct 2012
Location: Birmingham (UK)
Posts: 44
Rep Power: 14 |
Hi everyone,
I want to reproduce a bubble column inside water with sprayFoam, namely a water tank with an air nozzle on the bottom. The reason why I want to use sprayFoam instead of a VOF model is that my computational domain is a large tank (about 10 m diameter, 6 m height), and bubbles dimensions are much smaller than cells size. I am encountering a problem, namely the bubbles just fall towards the bottom instead of rising. Here are my ./constant files: thermophysicalProperties: Code:
thermoType hsPsiMixtureThermo<reactingMixture<gasThermoPhysics>>; CHEMKINFile "$FOAM_CASE/constant/chemkin/chem.inp"; CHEMKINThermoFile "~OpenFOAM/thermoData/therm.dat"; inertSpecie CO2 CH4; liquids { liquidComponents ( H2O ); H2O { defaultCoeffs yes; } } solids { solidComponents ( ); } Code:
solution { active true; coupled true; transient yes; cellValueSourceCorrection on; sourceTerms { schemes { rho explicit 1; U explicit 1; Yi explicit 1; hs explicit 1; } } interpolationSchemes { rho cell; U cellPoint; mu cell; T cell; Cp cell; p cell; } integrationSchemes { U Euler; T analytical; } } constantProperties { parcelTypeId 1; rhoMin 1e-15; TMin 300; pMin 1000; minParticleMass 1e-15; rho0 1; T0 300; Cp0 4187; youngsModulus 1e9; poissonsRatio 0.35; epsilon0 1; f0 0.5; Pr 0.7; Tvap 373; Tbp 373; constantVolume false; } subModels { particleForces { pressureGradient { U U; }; sphereDrag; gravity; } injectionModel coneNozzleInjection; dispersionModel none; patchInteractionModel standardWallInteraction; heatTransferModel none; compositionModel singlePhaseMixture; phaseChangeModel none; surfaceFilmModel none; atomizationModel none; breakupModel none; stochasticCollisionModel none; radiation off; gravity on; coneNozzleInjectionCoeffs { SOI 0; massTotal 6.0e-8; parcelBasisType mass; injectionMethod disc; flowType flowRateAndDischarge; outerDiameter 2e-3; innerDiameter 0; duration 0.2; position ( 0 0.005 0 ); direction ( 0 1 0 ); parcelsPerSecond 20; flowRateProfile table ( (0 3e-7) (0.2 3e-7) ); Cd constant 0.9; thetaInner constant 0.0; thetaOuter constant 10.0; sizeDistribution { type RosinRammler; RosinRammlerDistribution { minValue 1e-06; maxValue 0.00015; d 0.00015; n 3; } } } standardWallInteractionCoeffs { type rebound; } RanzMarshallCoeffs { BirdCorrection true; } singlePhaseMixtureCoeffs { phases ( liquid { H2O 1; } ); } liquidEvaporationBoilCoeffs { enthalpyTransfer enthalpyDifference; activeLiquids ( H2O ); } ReitzDiwakarCoeffs { solveOscillationEq yes; Cbag 6; Cb 0.785; Cstrip 0.5; Cs 10; } TABCoeffs { y0 0; yDot0 0; Cmu 10; Comega 8; WeCrit 12; } } cloudFunctions {} |
|
March 19, 2013, 14:53 |
|
#2 |
Member
ri
Join Date: Oct 2012
Posts: 34
Rep Power: 14 |
Hello,
If you are injecting air into water, should the liquid you specified in thermophysical properties/sprayCloudProperties be AIR and not H2O. Then defining H2O in your 0/ folder as: internalField uniform 1.0; unless I have misunderstood your case. regards, ris |
|
March 20, 2013, 06:39 |
|
#3 |
Member
Davide D.
Join Date: Oct 2012
Location: Birmingham (UK)
Posts: 44
Rep Power: 14 |
I modified sprayCloudProperties in the following way:
Code:
solution { active true; coupled true; transient yes; cellValueSourceCorrection on; sourceTerms { schemes { rho explicit 1; U explicit 1; Yi explicit 1; hs explicit 1; } } interpolationSchemes { rho cell; U cellPoint; mu cell; T cell; Cp cell; p cell; } integrationSchemes { U Euler; T analytical; } } constantProperties { parcelTypeId 1; rhoMin 1e-15; TMin 300; pMin 1000; minParticleMass 1e-15; rho0 1; T0 300; Cp0 4187; youngsModulus 1e9; poissonsRatio 0.35; epsilon0 1; f0 0.5; Pr 0.7; Tvap 373; Tbp 373; constantVolume false; } subModels { particleForces { pressureGradient { U U; }; sphereDrag; gravity; } injectionModel coneNozzleInjection; dispersionModel none; patchInteractionModel standardWallInteraction; heatTransferModel none; compositionModel singlePhaseMixture; phaseChangeModel none; surfaceFilmModel none; atomizationModel none; breakupModel none; // ReitzKHRT; stochasticCollisionModel none; radiation off; gravity on; coneNozzleInjectionCoeffs { SOI 0; massTotal 6.0e-8; parcelBasisType mass; injectionMethod disc; flowType flowRateAndDischarge; outerDiameter 2e-3; innerDiameter 0; duration 0.2; position ( 0 0.005 0 ); direction ( 0 1 0 ); parcelsPerSecond 20; flowRateProfile table ( (0 3e-7) (0.2 3e-7) ); Cd constant 0.9; thetaInner constant 0.0; thetaOuter constant 10.0; sizeDistribution { type RosinRammler; RosinRammlerDistribution { minValue 1e-06; maxValue 0.00015; d 0.00015; n 3; } } } standardWallInteractionCoeffs { type rebound; } RanzMarshallCoeffs { BirdCorrection true; } singlePhaseMixtureCoeffs { phases ( gas { CO2 1; } ); } ReitzDiwakarCoeffs { solveOscillationEq yes; Cbag 6; Cb 0.785; Cstrip 0.5; Cs 10; } TABCoeffs { y0 0; yDot0 0; Cmu 10; Comega 8; WeCrit 12; } } cloudFunctions {} Code:
thermoType hsPsiMixtureThermo<reactingMixture<gasThermoPhysics>>; CHEMKINFile "$FOAM_CASE/constant/chemkin/chem.inp"; CHEMKINThermoFile "~OpenFOAM/thermoData/therm.dat"; inertSpecie CO2 CH4; liquids { liquidComponents ( H2O ); H2O { defaultCoeffs yes; } } gases { gasComponents ( CO2 ); CO2 { defaultCoeffs yes; } } solids { solidComponents ( ); } I also tried to modify thermophysicalProperties as follows: Code:
thermoType hsPsiMixtureThermo<reactingMixture<gasThermoPhysics>>; CHEMKINFile "$FOAM_CASE/constant/chemkin/chem.inp"; CHEMKINThermoFile "~OpenFOAM/thermoData/therm.dat"; inertSpecie CO2 CH4; liquids { liquidComponents ( ); } gases { gasComponents ( CO2 ); CO2 { defaultCoeffs yes; } } solids { solidComponents ( ); } Code:
Solving cloud sprayCloud #0 Foam::error::printStack(Foam::Ostream&) in "/opt/openfoam211/platforms/linux64GccDPOpt/lib/libOpenFOAM.so" #1 Foam::sigSegv::sigHandler(int) in "/opt/openfoam211/platforms/linux64GccDPOpt/lib/libOpenFOAM.so" #2 in "/lib/x86_64-linux-gnu/libc.so.6" #3 Foam::liquidMixtureProperties::X(Foam::Field<double> const&) const in "/opt/openfoam211/platforms/linux64GccDPOpt/lib/libliquidMixtureProperties.so" #4 in "/opt/openfoam211/platforms/linux64GccDPOpt/bin/sprayFoam" #5 in "/opt/openfoam211/platforms/linux64GccDPOpt/bin/sprayFoam" #6 in "/opt/openfoam211/platforms/linux64GccDPOpt/bin/sprayFoam" #7 in "/opt/openfoam211/platforms/linux64GccDPOpt/bin/sprayFoam" #8 in "/opt/openfoam211/platforms/linux64GccDPOpt/bin/sprayFoam" #9 __libc_start_main in "/lib/x86_64-linux-gnu/libc.so.6" #10 in "/opt/openfoam211/platforms/linux64GccDPOpt/bin/sprayFoam" Segmentation fault (core dumped) |
|
March 20, 2013, 09:09 |
|
#4 |
Member
ri
Join Date: Oct 2012
Posts: 34
Rep Power: 14 |
Hello,
The segmentation fault occurs as a result of removing the liquid from the thermophysical properties file. Are the diameters of the bubbles constant? If yes make sure to change size distribution settings and the corresponding diameters in the sprayCloudProperties file. regards, ris |
|
March 20, 2013, 11:31 |
|
#5 |
Member
Davide D.
Join Date: Oct 2012
Location: Birmingham (UK)
Posts: 44
Rep Power: 14 |
I tried some modifications, but without success.
I modified constantVolume and sizeDistribution entries in sprayCloudProperties: Code:
solution { active true; coupled true; transient yes; cellValueSourceCorrection on; sourceTerms { schemes { rho explicit 1; U explicit 1; Yi explicit 1; hs explicit 1; } } interpolationSchemes { rho cell; U cellPoint; mu cell; T cell; Cp cell; p cell; } integrationSchemes { U Euler; T analytical; } } constantProperties { parcelTypeId 1; rhoMin 1e-15; TMin 300; pMin 1000; minParticleMass 1e-15; rho0 1; T0 300; Cp0 4187; youngsModulus 1e9; poissonsRatio 0.35; epsilon0 1; f0 0.5; Pr 0.7; Tvap 373; Tbp 373; constantVolume true; } subModels { particleForces { pressureGradient { U U; }; sphereDrag; gravity; } injectionModel coneNozzleInjection; dispersionModel none; patchInteractionModel standardWallInteraction; heatTransferModel none; compositionModel singlePhaseMixture; phaseChangeModel none; surfaceFilmModel none; atomizationModel none; breakupModel none; stochasticCollisionModel none; radiation off; gravity on; pressureGradient on; coneNozzleInjectionCoeffs { SOI 0; massTotal 6.0e-8; parcelBasisType mass; injectionMethod disc; flowType flowRateAndDischarge; outerDiameter 2e-3; innerDiameter 0; duration 0.2; position ( 0 0.01 0 ); direction ( 0 1 0 ); parcelsPerSecond 20; flowRateProfile table ( (0 3e-7) (0.2 3e-7) ); Cd constant 0.9; thetaInner constant 0.0; thetaOuter constant 10.0; sizeDistribution { type fixedValue; fixedValueDistribution { value 3e-3; } } } standardWallInteractionCoeffs { type rebound; } singlePhaseMixtureCoeffs { phases ( gas { CO2 1; } ); } cloudFunctions {} |
|
June 12, 2013, 11:27 |
|
#6 | |||
New Member
Thomas F.
Join Date: Jun 2013
Location: Graz, Austria
Posts: 14
Rep Power: 13 |
Hello dav.dap!
I was trying to do the same as you did but we both were wrong. For some reasons OpenFoam calculates the number of particles to inject in a different way. If you choose Quote:
Code:
case pbMass: { nP = volume/volumeTotal_ *massTotal_/rho /(parcels*mathematicalConstant::pi/6.0*pow3(diameter)); break; } Quote:
Code:
case pbNumber: { nP = massTotal_/(rho*volumeTotal_); break; } Quote:
Code:
volumeTotal_ = flowRateProfile_.integrate(0.0, duration_); |
||||
June 13, 2013, 11:25 |
|
#7 |
Member
Davide D.
Join Date: Oct 2012
Location: Birmingham (UK)
Posts: 44
Rep Power: 14 |
Hi,
I succeeded in describing rising bubbles by changing solver. For some reason sprayFoam seems to be unable do describe gas parcels inside a liquid phase; but reactingParcelFoam does. Just turn off all the thermophysics and chemistry and copy&paste injectionModels subdictionary into constant/reactingCloud1Properties. |
|
June 17, 2013, 09:15 |
|
#8 |
New Member
Thomas F.
Join Date: Jun 2013
Location: Graz, Austria
Posts: 14
Rep Power: 13 |
Whats your problem with the liquid phase by using sprayFoam? It was mainly made (as the name says) for injecting diesel into air.
BTW: If you want to inject 3mm bubbles with 0,1 m/s at 1kg/m³ you should change parcelBasisType to fixed and sizeDistribution to fixedValue. Than just calculate the amount of particles by parcelsPerSecond * duration. It worked for me. Code:
coneNozzleCoeffs { SOI 0; massTotal 6.0e-1; parcelBasisType fixed; duration 1.25e-2; nParticle 2500; parcelsPerSecond 200000; U0 (0 0 0.1); flowRateProfile constant 1; ........ sizeDistribution { type fixedValue; fixedValueDistribution { value 0.003; } } |
|
June 17, 2013, 09:17 |
|
#9 |
Member
Davide D.
Join Date: Oct 2012
Location: Birmingham (UK)
Posts: 44
Rep Power: 14 |
Hi, the problem is the converse: injecting air into a liquid.
|
|
June 17, 2013, 11:36 |
|
#10 |
Senior Member
Aurelien Thinat
Join Date: Jul 2010
Posts: 165
Rep Power: 16 |
Hi,
It seems that solvers like icoUncoupledKinematicParcelFoam (particles tracking) or twoPhaseEulerFoam (Euler/Euler solver) would fit better to your problem. If you don't have any chemistry at all of course. But I guess you are not using anymore sprayFoam according to your old post (@June 13, 2013 16:25). |
|
August 13, 2014, 10:10 |
working on bubblecolumns too!
|
#11 |
Member
Andreas Weber
Join Date: Jun 2014
Posts: 37
Rep Power: 12 |
Hey there,
I'm also working on a solver for bubbly flows, just like you. So far I have been unsing a composition of sprayFoam and reactingParcelFoam, because I want to use the Breakup-Model coming with the SprayCloud functionality.... So far so good, I have my bubblecolumn with rising bubbles that are breaking up and can coalesce (all work in progress...). My Problem is, somehow similar to your one: I wasn't really able to set the particles to have the rigth density.... wich could also be your problem with the particles falling down and not rising up. What ever I do, the "bubbles" will always have a density of 994.511 . I think my options in the thermophysicalProperties are wrong. However: setting a higher density of the surrounding fluid is a fast workaround, because buoyancy is calculated throug the density-difference. best regards Andy |
|
July 28, 2016, 09:10 |
|
#12 | ||
New Member
Join Date: Jul 2016
Posts: 3
Rep Power: 10 |
Quote:
How did you set your composition of sprayFoam and reactingParcelFoam? I want to use the coalescence model "ORourke" from SprayFoam in ReactingParcelFoam. I add "ORoukeCollision" in intermediate library but after compiling the library and the new solver I still get Quote:
EDIT : I add the new collision model in "makeReactingMultiphaseParcelStochasticCollisionMo dels.H" and I can select it now but coalescence still not happens, my 2 particules pass through each other. Have you a solution ? Last edited by TheophileC; August 1, 2016 at 11:55. |
|||
August 2, 2016, 08:30 |
|
#13 |
Member
Andreas Weber
Join Date: Jun 2014
Posts: 37
Rep Power: 12 |
Hi,
hope you have turned the coalescence switches to on ;-) When you have parcels with more than 1 particle, it can happen, that only some of them do coalesce and the rest stays untouched. Your parcel will then not be deleted but will change in the number of particles it carries. best regards |
|
August 2, 2016, 10:39 |
|
#14 | |
New Member
Join Date: Jul 2016
Posts: 3
Rep Power: 10 |
I found my mistake, my 2 particules are now interacting but the coalescence not happens yet.
My simulation is running but when the particules are about to coalesce i got this error : Quote:
Do you know how to resolve this kind of error ? Do you know if the volume of the coalesced particule will change ? I didn't change anything in ORourkeCollision.C and my reactingCloud1Properties file look like this : Code:
solution { active true; coupled true;//false; transient yes; cellValueSourceCorrection off; maxCo 0.3; sourceTerms { schemes { rho explicit 1; U explicit 1; Yi explicit 1; h explicit 1; radiation explicit 1; } } interpolationSchemes { rho cell; U cellPoint; thermo:mu cell; T cell; Cp cell; kappa cell; p cell; } integrationSchemes { U Euler; T Euler; } } constantProperties { rho0 0.5;//1000; T0 350; Cp0 4100; constantVolume false; } subModels { particleForces { sphereDrag; gravity; } injectionModels { model1 { type manualInjection; massTotal 2.047e-09;//5.23599e-10; // 1 droplet of density 1000 kg/m3 // inputFile "parcelInjectionProperties"; parcelBasisType mass; SOI 0; positionsFile "reactingCloud1Positions"; U0 (0 0 0); sizeDistribution { type uniform; uniformDistribution { minValue 100e-06; maxValue 100e-06; } } } /* model2 { type manualInjection; massTotal 5.23599e-10;//5.23599e-10; // 1 droplet of density 1000 kg/m3 //nparticule 2; parcelBasisType mass; SOI 0; positionsFile "reactingCloud1Positions2"; U0 (0 0.5 0); sizeDistribution { type uniform; uniformDistribution { minValue 100e-06; maxValue 100e-06; } } } */ } dispersionModel none; patchInteractionModel standardWallInteraction; heatTransferModel none;//RanzMarshall; compositionModel singleMixtureFraction; phaseChangeModel none;//liquidEvaporation; devolatilisationModel none; surfaceReactionModel none; stochasticCollisionModel ORourke;// trajectory; singleMixtureFractionCoeffs { phases ( gas { } liquid { H2O 1; } solid { } ); YGasTot0 0; YLiquidTot0 1; YSolidTot0 0; } ORourkeCoeffs { coalescence on; } trajectoryCoeffs { cSpace 1; cTime 0.3; coalescence true; } suppressionCollisionCoeffs { } surfaceFilmModel none; radiation off; standardWallInteractionCoeffs { type rebound; } |
||
August 2, 2016, 11:42 |
|
#15 |
Member
Andreas Weber
Join Date: Jun 2014
Posts: 37
Rep Power: 12 |
hmm semms there is something wrong in the line
Code:
const scalarField X(liquids_.X(p1.Y())); Since the sprayFoam solver uses mostly different thermophysical models this can be the root of the problem, e.g. I am using the following in my cloudProperties: Code:
compositionModel singlePhaseMixture; singlePhaseMixtureCoeffs { phases ( gas { CO2 1; } ); } You can simply leave this calculations out if your colliding parcels have the same cp, sigma, mu etc.... regards |
|
August 3, 2016, 03:10 |
|
#16 |
New Member
Join Date: Jul 2016
Posts: 3
Rep Power: 10 |
Hello,
Thank you, my case is working now. I'll post my modification later. |
|
August 4, 2016, 05:04 |
|
#17 |
Member
Andreas Weber
Join Date: Jun 2014
Posts: 37
Rep Power: 12 |
before i forget,
there is a bug in orourke collision model... in newer versions it has been corrected: Code:
// collision occurs if (xx < collProb) { i made some other changes, there are two ways of calculating the collision propability: 1. using p = exp(-nu) then xx > p 2. using directly xx < nu (when your nParticles = 1) |
|
December 9, 2016, 23:18 |
|
#18 | |
New Member
Li Linmin
Join Date: Nov 2015
Location: China
Posts: 27
Rep Power: 11 |
Quote:
I am also working on adding the spray cloud in to the multiphase solver but I got the error while making the solver: no matching function for call to SprayCloud... Can you help me with that? I also don't want to considering the reacting. Thank you very much. Linmin Li |
||
November 30, 2020, 15:06 |
|
#19 |
Member
Riddhideep Biswas
Join Date: May 2020
Posts: 30
Rep Power: 6 |
Code:
thermoType hsPsiMixtureThermo<reactingMixture<gasThermoPhysics>>; CHEMKINFile "$FOAM_CASE/constant/chemkin/chem.inp"; CHEMKINThermoFile "~OpenFOAM/thermoData/therm.dat"; inertSpecie CO2 CH4; liquids { liquidComponents ( H2O ); H2O { defaultCoeffs yes; } } solids { solidComponents ( ); } Can anyone tell me what is the meaning of defaultCoeffs under liquidComponents (H2O) and why is it set to yes? What will be the case if I set defaultCoeffs to false? Thanks in advance! |
|
Tags |
bubble, sprayfoam, water and air |
Thread Tools | Search this Thread |
Display Modes | |
|
|
Similar Threads | ||||
Thread | Thread Starter | Forum | Replies | Last Post |
Bubble size distribution : Bubble column | oj.bulmer | CFX | 8 | June 7, 2019 06:03 |
Bubble Column Modelling | dlaw | FLUENT | 24 | October 31, 2017 07:01 |
bubble column | ken | FLUENT | 1 | June 30, 2013 02:18 |
Modelling a Water-Air bubble column | GerhardHolzinger | OpenFOAM Running, Solving & CFD | 1 | February 28, 2012 05:12 |
bubble rising in a column | swamysrikanth | Main CFD Forum | 2 | September 27, 2010 09:59 |