CO2 removal using passive scalars

Hi there,

I’m currently modelling a CO2 removal system, and hoping to measure the CO2 concentration as the depleted stream disperses into the surrounding atmospheric air. The source at the exit of the contactor unit is roughly 200pm, and the surrounding air is roughly 400pm. Can passive scalar sources be used to model a removal of a species?

Would this have to be done by taking the difference? For example, at the exit of the removal system, assign a value of 200 to the volume representing the exit fan. At the exit we expect a value of 400-200ppm = 200pm. Further away as it disperses, we might expect 400-100ppm = 300ppm?


In principle you should be able to use passive scalars to model the concentration in ppm of the CO2, due to dispersion in the flow. Please have a look at this sample project for reference:

If you have a CAD model or a project already setup in the platform, you can share the URL here and we can give better advice.

1 Like

Hi @ggiraldof ,

Thank you for your response. I’ve created this sample project to test what I’m hoping to do. See attached screen shots and the link posted at the bottom.

At the left boundary, 400 ppm passive scalar with inlet velocity u_x = 1m/s was applied. At each cube in the first row to the left, a passive scalar was assigned with a value of -200ppm, at u_x = 1 m/s.

The result appears for the most part as I would expect, with values ranging from 200-400ppm as the CO2 depleted air exiting each cube mixes with the CO2 rich air in the atmosphere (400ppm). However, as can be seen in the figure above, and highlighted in the figure below showing an iso-volume displaying regions with passive scalar values between 0-199; some regions appear to go below the exit condition of 200ppm. Is there any way to constrain the passive scalar quantities to avoid this?

The test project can be seen here: SimScale.

The simulations discussed above is simulation found under “Passive scalar array 2x5”, called “Run 6- +400 inlet, -200 passive scalar”.

Thanks very much.

Hi @ggiraldof, just following up on this post. Any chance you had any thoughts on constraining the passive scalar values so they don’t go below the outlet condition?

Thanks so much!

Hey again,

Just had a look and I think that your results are not converged yet. The residuals are too high.

I would try to refine the mesh, specially around the regions with passive scalar sources/sinks. This should help gain confidence on the results.


It looks like there’s a small confusion on how volumetric passive scalar sources interact with velocity inlets.

This is what you can infer from the inlet boundary condition:

The volumetric scalar source will remove scalar from the domain based on their volume. Each one of the 1m3 boxes will remove 200 mL/s, to be more precise. So a setting of -200 doesn’t mean that the scalar level will be bounded between 400 and 400-200 = 200.

In the aftermath, from the initial 28000 mL/s of contaminant that enter the domain through the inlet, 1000 mL/s are removed from the domain via the 5 “scalar sinks”, and the rest exits through the outlet.

This public project that I posted some years ago may be insightful: SimScale



Thanks for the replies @ggiraldof and @RicardoParis! That definitely does help to clarify how the passive scalars work. I’ve taken a look at the example you shared, and it does a nice job clarifying this

@RicardoParis I’m still a little bit confused on how I would interpret and convert back to ppm at a result control. For example the area average concentration hitting the front face of each downstream cube. Or the concentration at a specific probe point.

So I understand from your discussion above that currently 28,000 mL/s of CO2 enter at the inlet velocity. Is the current boundary condition at the inlet set up correctly to signify 400ppm? Or should I specify that 28,000mL/s enter at the velocity inlet as follows?

If so, the area average value of the passive scalar is around 27,800 mL/s at the downstream face. Can I convert this back to ppm?

I very much appreciate your support on the matter, thank you!


If you set your simulation assuming T1 as a concentration (i.e. ppm), the results will automatically be in the same unit. This is always the easiest way to proceed with passive scalars.

So in the simulation results that you mentioned in post #3 from this thread, what you see are the results in ppm.

For the last simulation that you posted, it’s technically possible to convert the number that you are showing back to ppm. You just have to divide the concentration of contaminant leaving the domain (in mL/s) by the amount of flow exiting the domain (in m3/s). This works because ppm = mL/m3

In this example, you would have 27800/70 =397 ppm (eyeballing the amount of contaminant).


Hi @Ricardopg.

I’ve run into some more confusion regarding passive scalars.

I tried a simple 1m^3 box (1x1x1m), and then scaled up to 8m^2 (2x2x2m), and then a 64m^3 (4x4x4m). I tried setting each volume with both types of passive scalar source/sinks (1/s and 1/m^3s). Simulations of note are labelled “1m passive test”, “2m passive test”, and “4m passive test”.

I’m expecting that at the exit of the cube, the concentration would be 200ppm as prescribed, and then it will disperse, re-equilibrating to the ambient concentration of 400ppm as you move away from the sink. But I’m seeing that the domain doesn’t have any regions with 200ppm, even directly at the outlet of the sink.

I’m trying to set it so that regardless of input velocity to the cube (passive scalar sink), each cube will output 200ppm CO2 into the surrounding environment of 400ppm. My understanding from you’re above posts is that the cube will remove a certain quantity of scalar, not have a set output concentration. Is this the correct interpretation, and if so is there any method to implement the latter?

Appreciate you’re continued support on the matter.


The scalar sink doesn’t act as a boundary condition where you can fix the scalar amount to a certain value. It simply acts as a sink of scalar that already exists in the domain. If you imagine that the scalar that you defined is ppm, here is a possible interpretation:

  1. Amount of scalar entering the domain at the inlet (in mL) = area * inlet velocity * concentration at the inlet / 1e6

  2. Amount of scalar being removed by the sink (in mL) = volume of the sink * volumetric scalar flux / 1e6

The amount being removed by the sink will be removed from the scalar that entered the domain at the inlet. Therefore, the actual concentration that you will get at the sink depends on the velocity at the inlet. You could even get values < 200 for the passive scalar if the inlet velocity is low enough.


Hi @Ricardopg,

Thanks very much, that helps clarify this for me.


Hi @Ricardopg,

I’m now applying this to another simulation, and am once again running into some confusion in the wording/units as I apply passive scalars. I’ve gone through a few of the tutorials, and further documentation, and there seems to be some inconsistency in the language regarding concentration vs quantity (mass or volume) when its applied at an inlet as T1, vs a flux (phi) at a source.

As stated here, the “amount of scalar” can be calculated at both the inlet, as well as the amount removed by the source, with units of “mL/s”, meaning a rate of mass or a volume, not a concentration (mL/m^3 or mg/m^3) correct?

So in item 1, “concentration at the inlet” (mL/m^3) multiplied by volumetric flow rate (m^3/s), gives us units (mL/s). In item 2, if we define “volumetric scalar flux (phi)” with the same units, (mL/m^3)/m^3*s, multiplying this with the volume of the sink (m^3), results in units of (mL/m^3)/s.

As per this documentation, if we specify T1 with units of concentration (mL/m^3) at the inlet, we should also specify a passive scalar source flux (phi) at the source, with the same units (mL/m^3)/s, or (mL/m^3)/m^3*s.

In my case, Simulation “15MW- 0 degree”, run “Run 7- mg/m^3 (-300ppm drop, Volumetric sink)”, I have an inlet condition, and a volumetric passive scalar sink(s) in the domain. I’m applying a unit of concentration to both the T1 and flux (phi)

  1. At the inlet:
    A_inlet = 520m x 135m = 70 200m^2, V_inlet = 9.425m/s, T1 = 758 mg/m^3.
    “Amount of scalar” (mg/s) = (70 200m^2) * (9.425m/s) * ( 758 mg/m^3)
    “Amount of scalar” (mg/s) = 501 883 376.6 mg/s

  2. Amount removed :
    V_sink = 475.4 m^3, Volumetric flux = 548.7 (mg/m^3)/m^3s
    "Amount of scalar " ((mg/m^3)/s) = (475.4 m^3) * (548.7mg/m^3
    "Amount of scalar " ((mg/m^3)/s) = 260 857.5 (mg/m^3)/s
    (If we want mg/s here, can we just multiply by the volume of the source twice?)

We can see that the units for “amount of scalar” in both instances don’t line up. Would you be able to clarify the wording on this?

Thank you very much,

Hello Ryan,

Before going through details, it’s worth mentioning that passive scalars do not have any units attached to them and it’s not mandatory to interpret them as a concentration. It just happens that using concentrations is one of the easiest/most useful ways to use scalars.

In your case, I agree with the interpretation of point 1. For the amount removed, in case you are using a volumetric scalar source, the way that I interpret is that you define a concentration as the flux, and you simply multiply the concentration by the volume of the source to see how many mg’s are being added or removed. It would be "Amount of scalar " (mg/s) = 260 857.5 mg/s

There are at least a couple of projects where you can verify this (e.g. this one by myself and the combination of [this][Deleted by author] and this post).

Just to give you a quick calculation of my case:

  • Volumetric flow rate at the inlet = 0.0066 m3/s
  • Volume of the scalar source = 0.00225 m3
  • Volumetric source flux = 800 ppm
  • Total amount of scalar being released = 0.00225 * 800 = 1.8 mL/s
  • Theoretical average concentration at the outlet = total amount of scalar being released / volumetric flow rate at the inlet = 1.8 / 0.0066 = 272.72 ppm

If you look at the results of the run, they are very close to this value.


1 Like

Thanks for your quick response. Okay this makes a bit more sense now.

Is there any way to set a function for the flux? Or only constant value. I’m getting negative concentration values in my domain which is not physically possible. I’m hoping to constrain the removal rate based on a saturation concentration.

For example: Source = k*(c - c_sat) where c <= c_sat.


With volumetric sources there is no way to do that, I’m afraid. If possible, it would be optimal to request this feature via the roadmap portal.


1 Like