Calling species concentrations for kinetic rates

The HP1 code incorporates modules simulating
(1) transient water flow in variably-saturated media,
(2) transport of multiple components, and
(3) mixed equilibrium/kinetic geochemical reactions.
Post Reply
Posts: 1
Joined: Tue Mar 30, 2021 3:57 pm
Location: USA

Calling species concentrations for kinetic rates

Post by nmurphy » Wed Mar 31, 2021 6:41 pm


I am modeling the first order kinetic reaction of a sorbed species in HP1. I have a question regarding calling the concentration of the species in the model to calculate the kinetic rate. Some PHREEQC models use the function mol() which calls the molality of a chemical species. However, in this model where unsaturated flow is occurring, the molality will fluctuate up and down with varying water content. I don't believe that this is accurately representing the first order kinetics we have observed in a lab setting. It would be expected that through time, the substrate (the sorbed species in this case) would be consumed as the kinetic reaction occurs, and the rate of the reaction would decrease accordingly, rather than the fluctuation with water content we are observing.

To solve this, I am currently using the SURF() function, which calls the total moles of a sorbed species for a cell in the model. This function is not dependent on water content. Based on some basic model verification, it seems to work as we'd expect for modeling first order kinetics. I was just wondering if anyone else has encountered this problem, or if there were any recommendations.


Posts: 65
Joined: Fri Mar 10, 2006 7:57 am
Location: Belgium

Re: Calling species concentrations for kinetic rates

Post by diederik » Wed Mar 31, 2021 7:39 pm


Do you simulate single-species sorption? You then introduce a kinetic reactant, say SorbedSpecies. The kinetic equation is:

dSorbedSpecies / dt = k (SorbedSpecies - K*AqSpecies)

the second term being the equilibrium amount of the sorbed species. In HP1, the concentration unit of a kinetic reactant ((sorbedSpecies)) is mol/dm3 (bulk soil) so no water content dependency.
In script language (for a species xx)

rate = parm(1) * (m - parm(2)*mol("xx"))
moles = rate*time
save time

with parm(1) the rate constant and parm(2) the equilibrium constant K =xx(sorbed mol/dm³) / xx(aq mol/l)
If SorbedSpecies > K*AqSpecies, the term between brackets is positive, so a mole transfer to the solution and a decrease in the kinetic reactant (the sorbed species).

I am not following completely your last sentence of the first paragraph.
I am also not completely sure where the SURF function comes in. Do you have a (kinetic) competitive multispecies sorption problem and a dummy surface to calculate equilibrium? You might have a look at Apello's website for first-order multispecies sorption problem for a CEC model:


Post Reply