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
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
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