Skip to content
Browse files

Merge pull request #13534 from WilkAndy/lava_lamp_13239

Lava lamp 13239
  • Loading branch information...
permcody committed Jun 11, 2019
2 parents 9f9511c + 9a3cdab commit d7c5d816d1d781503902e55539b35c74856e815d
Submodule large_media updated from 06d258 to a52e4f
@@ -1,5 +1,7 @@
# PorousFlow module

!media porous_flow/1phase_convection.gif style=width:80%;margin-left:10px caption=Density driven convective mixing of CO2 in brine id=1phase_convection_anim

The PorousFlow module is a library of physics for fluid and heat flow in porous
media. It is formulated in an extremely general manner, so is capable of solving
problems with an arbitrary number of phases (gas, liquid, etc) and fluid components (species present in
@@ -33,6 +35,7 @@ and geomechanics.
- [Flow in fractures](porous_flow/
- [Underground mining](porous_flow/
- [CO$_2$ storage benchmark problems](porous_flow/
- [Convective mixing](porous_flow/
- [Restarting from previous simulation](porous_flow/
- [QA tests](porous_flow/

@@ -0,0 +1,53 @@
# Density-driven convective mixing

PorousFlow may be used to study the convective mixing of fluids. In this page we discuss the density-driven convective mixing of CO$_{2}$ into brine. CO$_{2}$ exists initially in both the liquid and gas phase. As the CO$_{2} diffuses into the brine, the gaseous CO$_{2}$ disappears and the brine's density increases, which drives convective mixing of the two fluids. Input files for similar situations may be found [here](

A few years ago this type of simulation was explored by Chris Green when modelling CO$_{2}$ sequestration. He was particularly interested in quantifying the CO$_{2}$ flux into a brine-filled reservoir, and found that it was dominated by convective mixing rather than diffusion.

Because this problem involves the disappearance of the gaseous phase, the simulation utilises persistent primary variables and a vapor-liquid flash.

!listing modules/porous_flow/examples/lava_lamp/2phase_convection.i start=[Variables] end=[]

Here {\tt pgas} is the gas-state pressure (the capillary pressure is zero, so this is also the brine porepressure) and {\tt zi} is the total mass fraction of the CO$_{2}$ summed over the two phases. In this input file, the salt content of the brine is fixed at 0.01:
!listing modules/porous_flow/examples/lava_lamp/2phase_convection.i start=[./xnacl] end=[../]
and the temperature at 45degC:
!listing modules/porous_flow/examples/lava_lamp/2phase_convection.i start=[./temperature] end=[../]
The porepressure is initialised to approximate hydrostatic conditions, and the total mass fraction of CO$_{2}$ is zero except towards the top of the model domain where it is 0.2. This corresponds to a gas saturation of 0.29 (the gas is almost all CO$_{2}$ and only about 0.2\% brine) and the mass-fraction of CO$_{2}$ in the liquid phase is 0.048. The porosity is slightly randomised and this promotes initiation of the beautiful "fingers" of CO$_{2}$-rich brine seen in the results.
!listing modules/porous_flow/examples/lava_lamp/2phase_convection.i start=[ICs] end=[]
The equations of state for the liquid brine, the CO$_{2}$ and the liquid brine-CO$_{2}$ mixture are the high-precision versions supplied by the [fluid_properties module](fluid_properties/
!listing modules/porous_flow/examples/lava_lamp/2phase_convection.i start=[Modules] end=[]
!listing modules/porous_flow/examples/lava_lamp/2phase_convection.i start=[./fs] end=[../]
!listing modules/porous_flow/examples/lava_lamp/2phase_convection.i start=[./brineco2] end=[../]
Quantities of interest are tracked using `AuxVariables` populated using the following `AuxKernels`
!listing modules/porous_flow/examples/lava_lamp/2phase_convection.i start=[AuxKernels] end=[]
The usual 2-phase Kernels are used in this example with zero molecular dispersion (but the diffusion coefficient is nonzero)
!listing modules/porous_flow/examples/lava_lamp/2phase_convection.i start=[Kernels] end=[]
!listing modules/porous_flow/examples/lava_lamp/2phase_convection.i start=[./diffusivity] end=[../]
Various postprocessors help with tracking the total quantity of CO$_{2}$ in the two phases, and the flux of CO$_{2}$ into the brine:
!listing modules/porous_flow/examples/lava_lamp/2phase_convection.i start=[Postprocessors] end=[]
Mesh adaptivity is used to refine the mesh as the fingers form, based on the jump in the gradient of the total mass fraction of CO$_{2}$ summed over the two phases:

!listing modules/porous_flow/examples/lava_lamp/2phase_convection.i start=[Adaptivity] end=[]

The evolution of the CO$_{2}$ mass fraction is shown in the animation below
!media porous_flow/2phase_convection.gif caption=Left: Mass fraction of CO2 in the liquid phase. Right: Saturation of gas. The adaptive mesh is overlayed on each figure. id=2phase_convection_anim

0 comments on commit d7c5d81

Please sign in to comment.
You can’t perform that action at this time.