Processes > Reactive transport modelling

Questions about KINETICS in PHREEQCRM with MODFLOW coupling

(1/1)

ZYWTDaEO6:
Hello dlparkhurst,

I am currently working with PHREEQCRM coupled with MODFLOW, and I have two questions regarding the KINETICS module and the use of the .pqi file.

1. Regarding -steps in KINETICS

In PHREEQC, when defining KINETICS, I normally need to specify time steps using the -steps keyword (e.g., -steps 100 in 100 steps). However, when I write a .pqi file for PHREEQCRM and couple it with MODFLOW, I am not sure whether -steps is still required.
From my tests, the reactive transport model seems to run both with and without -steps. Does PHREEQCRM automatically ignore the -steps definition when it is coupled with a transport model (MODFLOW)? Should I explicitly include it, or is it unnecessary in this context?

2. About my RATES and KINETICS definition

Here is a simplified example of what I wrote:


--- Code: ---KINETICS 1
Halite
    -m0  18.380
    -parms  1.0e-3
INCREMENTAL_REACTIONS true
END

RATES 1
Halite
    -start
    10 k0 = PARM(1)
    20 IF M0 <= 0 THEN M0 = 1E-20
    30 IF M > 0 THEN k_t = k0 * (M/M0)^(2/3) ELSE k_t = 0
    80 moles = k_t * (1 - SR("Halite")) * TIME
    100 IF moles > 0 AND moles > M THEN moles = M
    110 SAVE moles
    -end
END
--- End code ---

I noticed that when -parms is set too small, the mineral hardly reacts. But when I increase it slightly, the simulation often crashes with errors. Is there something wrong in the way I defined the RATES expression, or is this behavior expected due to the sensitivity of the parameterization?

Thank you very much for your time and support!

dlparkhurst:
The steps definition is used only when the input file is initially processed. Normally, you probably won't perform a KINETICS calculation in the input file calculations, but if you do react KINETICS with a solution, then the steps definition is used. After the input file is processed, the steps definition is not used.

Parm(1) is the rate constant that has units of 1/second. So the rate of approach to halite equilibrium is inversely proportional to the rate constant. The smaller the constant, the longer it takes to reach equilibrium. A rate constant of 1 will reach equilibrium in a few seconds.

In general, I try to avoid "if" statements in RATES definitions. Especially if the implicit integrator CVODE is used, it is best to have a differentiable rate definition. "if" statements tend to produce singularities and non-differentiable rates.  The reaction will stop automatically when the moles of reactant goes to zero. I would use the following, which runs smoothly for me:


--- Code: ---RATES 1
Halite
    -start
    10 k0 = PARM(1)
    #20 IF M0 <= 0 THEN M0 = 1E-20
    30 IF M > 0 THEN k_t = k0 * (M/M0)^(2/3) ELSE k_t = 0
    80 moles = k_t * (1 - SR("Halite")) * TIME
    #100 IF moles > 0 AND moles > M THEN moles = M
    110 SAVE moles
    -end
END
--- End code ---

Navigation

[0] Message Index

Go to full version