Certainly!
Let's modify the mesh to include a nozzle where liquid CO2
enters, and the phase-changed gas CO2 exits the nozzle.
Desired Setup:
The nozzle will be on the left side, where the liquid CO2 enters.
The phase transition from liquid to gas will occur as the CO2
passes through the nozzle.
The gas CO2 will exit outside the nozzle.
The mesh will need to reflect these changes, with a higher
resolution in the nozzle to capture the detailed flow and phase
transition behavior.
Updated Mesh Design
We will create a 2D nozzle geometry in a computational domain that can
simulate the high-pressure CO2 jet dynamics.
Mesh Geometry
A circular nozzle will be created with a specific inlet diameter and
an outlet that expands (or narrows).
The nozzle length will be determined by the flow dynamics you
wish to capture.
We'll assume a rectangular computational domain (for
simplicity in meshing) and define the nozzle as a region inside this
domain.
1. Updated blockMeshDict
This file will define the mesh with the nozzle geometry.
// system/blockMeshDict
convertToMeters 1;
vertices
(
// Define the coordinates for the rectangular mesh
(0 0 0) // 0: Bottom left corner
(10 0 0) // 1: Bottom right corner
(10 5 0) // 2: Top right corner
(0 5 0) // 3: Top left corner
(2 2 0) // 4: Nozzle start (center)
(3 2 0) // 5: Nozzle outlet (small opening)
(3 3 0) // 6: Nozzle outlet (expanded opening)
(2 3 0) // 7: Nozzle start (expanded opening)
);
blocks
// Define mesh blocks
hex (0 1 2 3 4 5 6 7) (100 50 1) simpleGrading (1 1 1)
);
edges
// Optionally, define edges for the nozzle to ensure smooth transitions
);
boundary
inlet
type fixedValue;
value uniform 1; // Liquid CO2 at the inlet
faces
(0 4 7 3) // Inlet nozzle face
);
outlet
type zeroGradient;
faces
(1 2 6 5) // Outlet nozzle face (phase changed gas CO2)
);
walls
type wall;
faces
(0 1 2 3) // Bottom and top faces
(4 5 6 7) // Nozzle walls
);
mergePatchPairs ();
Key Changes:
Vertices define the rectangular domain and the nozzle. The nozzle
is positioned between vertices 4 and 7.
The boundary conditions at the inlet (for liquid CO2) and the
outlet (for gas CO2) have been specified.
The nozzle is represented by the faces from vertices 4–7.
2. Simulation Code
With the modified mesh, the following simulation setup applies to the
updated mesh.
Initial Conditions in 0/alpha1, 0/velocity, 0/pressure,
0/temperature
These files will define the initial field conditions based on the new nozzle
mesh.
0/alpha1 (Phase Fraction)
// 0/alpha1
internalField uniform 1; // Inlet: liquid CO2
boundaryField
inlet
type fixedValue;
value uniform 1; // Liquid CO2 at the nozzle inlet
outlet
type zeroGradient;
walls
{
type noSlip;
0/velocity (Velocity Field)
// 0/velocity
internalField uniform (10 0 0); // Velocity at the nozzle inlet, 10 m/s in the
x-direction
boundaryField
inlet
type fixedValue;
value uniform (10 0 0); // Velocity at the nozzle inlet
outlet
type zeroGradient;
walls
type noSlip;
0/pressure (Pressure Field)
// 0/pressure
internalField uniform 50e5; // High pressure of CO2 at the nozzle inlet
boundaryField
{
inlet
type fixedValue;
value uniform 50e5; // Inlet pressure (50 MPa)
outlet
type zeroGradient;
walls
type noSlip;
0/temperature (Temperature Field)
// 0/temperature
internalField uniform 300; // Initial temperature in Kelvin
boundaryField
inlet
type fixedValue;
value uniform 300; // Inlet temperature
outlet
{
type zeroGradient;
walls
type noSlip;
3. Updated constant/thermophysicalProperties
This file will define the thermodynamic properties of CO2 and may be
adjusted depending on your phase transition model.
// constant/thermophysicalProperties
thermoType
type heRhoThermo;
transport simpleTransport;
thermodynamics perfectGas;
equationOfState rhotheta;
specie CO2;
CO2
molarMass 44.01; // g/mol
T_crit 304.13; // K
P_crit 7390.0; // kPa
Tc 31.98; // K
Pc 7390.0; // kPa
phaseChange true; // Enable phase change (optional, depends on
your solver)
4. system/blockMeshDict
This file defines the mesh for the new geometry.
// system/blockMeshDict
convertToMeters 1;
vertices
// Define coordinates for the nozzle and outer domain
(0 0 0)
(10 0 0)
(10 5 0)
(0 5 0)
(2 2 0) // Nozzle start (liquid CO2 region)
(3 2 0) // Nozzle outlet
(3 3 0) // Nozzle outlet expanded
(2 3 0) // Nozzle start (expanded)
);
blocks
// Mesh block definition
hex (0 1 2 3 4 5 6 7) (100 50 1) simpleGrading (1 1 1)
);
boundary
inlet
type fixedValue;
value uniform 1; // Liquid CO2 at the nozzle inlet
faces
(0 4 7 3) // Inlet nozzle face
);
outlet
type zeroGradient;
faces
(1 2 6 5) // Outlet nozzle face (phase-changed gas CO2)
);
walls
type wall;
faces
(0 1 2 3) // Bottom and top faces of the domain
(4 5 6 7) // Nozzle walls
);
mergePatchPairs ();
5. Running the Simulation
Now that you've modified the mesh and setup, follow these steps to run
the simulation:
1. Create the Mesh: Use the blockMesh command to generate the
mesh.
2. blockMesh
3. Run the Solver: Run twoPhaseEulerFoam to start the simulation.
4. twoPhaseEulerFoam
5. Post-processing: After running the simulation, you can visualize
the results using ParaView to observe the liquid CO2 entering the
nozzle, transitioning into gas CO2, and exiting the nozzle.
6. paraFoam
Conclusion
This modified setup provides the necessary mesh and simulation code to
simulate a CO2 jet from a nozzle, including phase transition from liquid
to gas. The key is defining the nozzle geometry, setting up the appropriate
boundary conditions, and ensuring that thermophysical properties are
correctly specified for CO2.
Let me know if you need any further adjustments or additional help!
If you're looking for a more robust solver for simulating multiphase flow
with phase transitions in OpenFOAM, the
rhoReactingTwoPhaseEulerFoam solver might be a better choice, as it
is designed for complex multiphase flows with phase change (e.g., from
liquid to gas). This solver is capable of simulating reacting flows, where
you can specify phase changes in the context of thermodynamic
properties.
Here's an outline for using this solver, along with the updated mesh and
configuration files.
Why Use rhoReactingTwoPhaseEulerFoam?
Phase Transition Modeling: It handles phase change between
liquid and gas phases more robustly.
Two-Phase Flow: It’s built for simulations where both phases
interact and exchange mass, momentum, and energy.
Thermodynamics and Chemistry: Can simulate thermodynamic
changes and phase transitions using equation of state (EOS).
1. Mesh Design with Nozzle Geometry
Let's continue with a nozzle geometry, where liquid CO2 enters the
nozzle, and the phase transition to gas CO2 occurs.
Updated blockMeshDict
This file will define the geometry, including a nozzle, and the
computational domain.
// system/blockMeshDict
convertToMeters 1;
vertices
(0 0 0) // 0: Bottom left corner
(10 0 0) // 1: Bottom right corner
(10 5 0) // 2: Top right corner
(0 5 0) // 3: Top left corner
(2 2 0) // 4: Nozzle start (center)
(3 2 0) // 5: Nozzle outlet (small opening)
(3 3 0) // 6: Nozzle outlet (expanded opening)
(2 3 0) // 7: Nozzle start (expanded opening)
);
blocks
// Define mesh blocks with refined resolution near the nozzle
hex (0 1 2 3 4 5 6 7) (100 50 1) simpleGrading (1 1 1)
);
edges
// Optional: smooth edges for nozzle transitions
);
boundary
inlet
type fixedValue;
value uniform 1; // Liquid CO2 at the inlet
faces
(0 4 7 3) // Inlet nozzle face
);
outlet
type zeroGradient;
faces
(1 2 6 5) // Outlet nozzle face (gas CO2)
);
walls
type wall;
faces
(0 1 2 3) // Bottom and top faces
(4 5 6 7) // Nozzle walls
);
mergePatchPairs ();
2. Thermophysical Properties in
constant/thermophysicalProperties
We’ll use the heRhoThermo model for thermodynamics with CO2. The
key here is specifying the phase change behavior (using CO2’s
thermodynamic properties) and the equation of state (EOS).
// constant/thermophysicalProperties
thermoType
type heRhoThermo;
transport simpleTransport;
thermodynamics perfectGas;
equationOfState rhotheta;
specie CO2;
CO2
molarMass 44.01; // g/mol
T_crit 304.13; // K
P_crit 7390.0; // kPa
Tc 31.98; // K
Pc 7390.0; // kPa
phaseChange true; // Enable phase change behavior
3. Initial Conditions for the Simulation
You’ll need to specify initial conditions for the velocity, pressure, phase
fraction (alpha1), and temperature. Here's an example configuration
for the initial conditions.
0/alpha1 (Phase Fraction)
For liquid CO2 entering the nozzle (phase fraction = 1), and the outlet
will transition to gas CO2.
// 0/alpha1
internalField uniform 1; // Inlet: liquid CO2
boundaryField
inlet
type fixedValue;
value uniform 1; // Liquid CO2 at the nozzle inlet
outlet
type zeroGradient;
walls
type noSlip;
0/velocity (Velocity Field)
Here, we specify the initial velocity at the nozzle inlet.
// 0/velocity
internalField uniform (10 0 0); // Velocity at the nozzle inlet, 10 m/s in the
x-direction
boundaryField
inlet
type fixedValue;
value uniform (10 0 0); // Velocity at the nozzle inlet
}
outlet
type zeroGradient;
walls
type noSlip;
0/pressure (Pressure Field)
We set the pressure at the nozzle inlet to reflect high-pressure CO2
conditions.
// 0/pressure
internalField uniform 50e5; // High pressure of CO2 at the nozzle inlet (50
MPa)
boundaryField
inlet
type fixedValue;
value uniform 50e5; // Inlet pressure
outlet
type zeroGradient;
}
walls
type noSlip;
0/temperature (Temperature Field)
We set an initial temperature for CO2 entering the nozzle.
// 0/temperature
internalField uniform 300; // Initial temperature (in Kelvin)
boundaryField
inlet
type fixedValue;
value uniform 300; // Inlet temperature
outlet
type zeroGradient;
walls
type noSlip;
4. Solver Setup and Running
With the mesh and initial conditions configured, follow these steps to run
the simulation:
1. Create the Mesh: Generate the mesh using the blockMesh utility:
2. blockMesh
3. Run the Solver: Use the rhoReactingTwoPhaseEulerFoam
solver for multiphase simulations, which can account for phase
transitions.
4. rhoReactingTwoPhaseEulerFoam
5. Post-Processing: After running the simulation, use ParaView to
visualize the results. You can observe the CO2 phase transition and
jet dynamics.
6. paraFoam
Conclusion
In this setup, we’ve configured a nozzle where liquid CO2 enters and
undergoes a phase transition to gas CO2. The
rhoReactingTwoPhaseEulerFoam solver is better suited for this type of
simulation because it accounts for multiphase flow with phase transitions,
and it allows for complex thermodynamic modeling, including the handling
of CO2's critical point, liquid/gas phase changes, and mass transfer.
This solver should be more robust and accurate for simulating your case of
high-pressure CO2 jet dynamics with phase changes.
Let me know if you need any further assistance!