Setting layer‐specific constant tracer concentrations in ATS-PFLOTRAN

43 views
Skip to first unread message

Xueyuan Kang

unread,
Oct 20, 2025, 1:26:13 PMOct 20
to Amanzi-ATS Users

Hi all,

 

I’m trying to use ATS 1.5-PFLOTRAN to assign different tracers (constant concentrations) to different subsurface layers, in order to calculate stream-water source contributions — i.e., the ratio of concentration from a given layer to the total stream concentration.

 

I noticed that the geochemical conditions source term can be used to impose a constant concentration (an internal Dirichlet boundary condition). Therefore, I used ATS-PFLOTRAN, even though no reactions are included in my simulation. I referred to the example input file in ats-regression-tests/07_reactive_transport/dilution_test.xml.

 

To test this approach, I set a constant concentration (C_Tracer = 1.0) for the soil layers. The model ran successfully, but the output concentrations were all zeros — it seems no solute was released from that layer.

 

Below is the source-term section from my subsurface transport PKs:

      <ParameterList name="source terms" type="ParameterList">

        <ParameterList name="geochemical" type="ParameterList">

          <ParameterList name="west_bc" type="ParameterList">

            <Parameter name="regions" type="Array(string)" value="{soil layer}"/>

            <Parameter name="solutes" type="Array(string)" value="{Tracer}"/>

            <Parameter name="times" type="Array(double)" value="{0.0, 1e+20}"/>

            <Parameter name="geochemical conditions" type="Array(string)" value="{upstreambc, upstreambc}"/>

            <Parameter name="time functions" type="Array(string)" value="{constant}"/>

          </ParameterList>

        </ParameterList>

      </ParameterList>

 

Here, upstreambc is a constant concentration constraint (C_Tracer = 1.0) defined in the corresponding PFLOTRAN “.in” file.

Has anyone encountered a similar issue, or could suggest the correct way to assign initial conditions for multiple tracers in ATS?

Any insights or suggestions would be greatly appreciated.

 

I also attached the input xml file and the PFLOTRAN’s “in” file.

 

Best,

Xueyuan

test_surf.xml
test-pflotran_sub.in

Phong Le

unread,
Oct 20, 2025, 1:47:57 PMOct 20
to Amanzi-ATS Users
It’s likely that ATS didn’t correctly read your upstreambc, which caused it to assign a value of 0 at the boundary condition. You need to debug to know what happened exactly.
Anyway, you don’t need to use PFLOTRAN to apply a fixed concentration boundary condition in ATS. Instead, follow the transport example from the short course, where a fixed concentration is created through source terms. You can do the same by:
  1. Creating an evaluator to calculate the tracer mass as: mass_of_tracer=mass_of_water x user defined concentration. This ensures that the tracer mass is always consistent with the desired concentration.
  2. Using this evaluator as the boundary condition in your simulation. At each time step, ATS will update the mass_of_tracer at the boundary based on the current mass_of_water, maintaining a fixed concentration boundary condition throughout the simulation.
Phong

Xueyuan Kang

unread,
Oct 20, 2025, 3:27:49 PMOct 20
to Amanzi-ATS Users

Hi Phong and Sergi,

Thanks so much for your replies. I’ll try running ATS without PFLOTRAN as you suggested.

I reviewed the transport example from the short course. That XML example defines surface injection and source release, where surface-water_source is explicitly defined as canopy-throughfall_drainage_rain + snow-melt – surface-evaporation in the state→evaluator (in my case). Since I need to define this in the subsurface domain, I assume that mass_of_tracer would instead be calculated as water_source × user-defined concentration.

However, it seems that water_source in the subsurface is defined only by –transpiration, which does not include the downward flux from the surface or the interfluxes between nearby subsurface cells.

If that’s the case, and I want to impose a fixed concentration in a certain region (e.g., the soil layer), should this be implemented as a boundary condition rather than through source terms? The short course transport example uses source terms only (without an explicit boundary condition). Do you happen to know of any example input files that demonstrate how to set this up for subsurface domains?

@Sergi – thanks also for the suggestion about using initial conditions. I tried that previously, but found that the concentration in shallow layers decreased rapidly over time. As a result, the solute from deeper layers hadn’t yet reached the stream when the shallow-layer concentration was already depleted, leading to incorrect stream-water source contributions. That’s why I’m thinking I may need a fixed-concentration internal boundary or source term instead.

Thank you both for your help!

Best,
Xueyuan


Phong Le

unread,
Oct 21, 2025, 10:59:00 AMOct 21
to Amanzi-ATS Users
Boundary conditions must be applied at the boundary of the domain. In this case, it cannot be BCs since it is inside the domain.

Back to your goal "to calculate stream-water source contributions i.e., the ratio of concentration from a given layer to the total stream concentration": What happen if tracer flows through several layers before running into the stream? Which layer the tracer belong to? All of them?

Xueyuan Kang

unread,
Oct 22, 2025, 12:11:24 AMOct 22
to Amanzi-ATS Users

Hi Phong,

Thank you for your comment.

In my setup, I assign a separate tracer to each subsurface layer and fix the concentration within that layer (e.g., layer 1: C₁ = 1, layer 2: C₂ = 1, etc.). As you noted, since water and solutes can pass through multiple layers before reaching the stream, a tracer effectively “belongs” to all the layers it travels through.

To address this overlap, one idea I had was to estimate the contribution from a given layer as the difference between adjacent tracer concentrations (e.g., C₁ – C₂ for the first layer, C₂ – C₃ for the second). Conceptually, this could isolate the portion of flow that exits each layer directly into the stream rather than continuing downward.

Do you happen to know of any alternative approaches within ATS to derive a stream-water source contribution profile by depth?

Best,
Xueyuan

Phong Le

unread,
Oct 22, 2025, 10:33:59 AMOct 22
to Amanzi-ATS Users
No, ATS uses finite volume and mimetic finite difference methods, so it cannot directly determine the stream-water source contribution by depth or regions. With certain assumptions, tracer injection can be used to create a proxy for estimating this contribution, similar to what you are doing. In your case, however, the overlap introduces significant uncertainty and is difficult to validate your method, particularly in complex domains. 

Phong
Reply all
Reply to author
Forward
0 new messages