# \[Solved\] Time evaluation issue in a non-autonomous ODE

**URL:** <https://discourse.julialang.org/t/solved-time-evaluation-issue-in-a-non-autonomous-ode/51458>\
**Category:** Modelling & Simulations\
**Tags:** diffeq\
**Created:** [December 8, 2020, 1:34pm UTC](https://discourse.julialang.org/t/solved-time-evaluation-issue-in-a-non-autonomous-ode/51458 "2020-12-08T13:34:49Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![Wen-Wei\_Tseng](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/wen-wei_tseng/32/28839_2.png) [@Wen-Wei\_Tseng](https://discourse.julialang.org/u/Wen-Wei_Tseng)\
**Post date:** [December 8, 2020, 1:34pm UTC](https://discourse.julialang.org/t/solved-time-evaluation-issue-in-a-non-autonomous-ode/51458/1 "2020-12-08T13:34:50Z")

</div>

Hello everyone, I found a weird situation that a time-dependent parameter seemed to be ignored in my calcium dynamics model. After some trimming, I had an MWE here. Any suggestions/corrections are welcome.

_Edit_: solved by @MatFi I overwrote `t` in the following code. Sometimes it’s hard to see my own errors. 😅

```julia-auto
using Parameters, DifferentialEquations

#######################
# Adenylate kinase
# Equilibrium constant of 0.931 from Golding, 1995
#######################

const KEQ_AK = 0.931
const _p = 4KEQ_AK - 1

"Convert energy charge to adenylate fractions"
function adenylates(x)
    # 0 ≤ x ≤ 1 || throw(DomainError(x, "adenylates(x) is only defined for 0 ≤ x ≤ 1."))
    d = (sqrt(1 + 4_p * x * (1 - x))-1)/_p
    t = x - 0.5 * d
    m = 1 - t - d
    return (t = t, d = d, m = m)
end

"Cytosolic calcium oscillator, sine wave"
@with_kw struct CaOsci
    ca_r = 0.09e-3 # Resting cytosolic Ca concentration
    amplitude = 0.25e-3 # Calcium amplitude
    f2 = 2 * inv(60) # Calcium oscillation frequency
end

"Cytosolic calcium, sine oscillation "
get_ca_c(p::CaOsci, t) = p.ca_r + 0.5 * p.amplitude * (1 + sinpi(p.f2 * t))

# The model
function model(u, p, t)
    ca_m = u

    # ec_c was also a state variable, but I put it here to make a MWE
    # If you remove the following 4 lines , time evaluation works fine
    ec_c = 0.9
    t, d, m = adenylates(ec_c)
    atp_c = t
    adp_c = d

    ca_c = get_ca_c(p, t)

    # Just curious, I added this to see t and ca_c evaluations
    # The result was the same if you comment out the line below
    @show t, ca_c

    # Simplified expressions for calcium dynamics
    jUni = ca_c - ca_m
    jNCLX = ca_m^2

    dca_m = jUni - jNCLX
    return dca_m
end

prob = ODEProblem(model, 0.250e-3, 1000.0, CaOsci())
sol = solve(prob)

```

The `ca_m` result was a smooth curve, rather than a sinusoid one like that of `ca_c`. I added the line `@show t, ca_c` and saw `(t, ca_c) = (0.8252290521896939, 0.00022578878282531064)` was kept evaluated but none for t \>1.

What was even more interesting was that if you remove the lines indicated below, the evaluations of `t` and `ca_m` went back to normal. In this case `t` was evaluated all the way from 0.0 to 1000.0.

```julia-auto
# The ATP part of my model, and trimmed down to the minimum.
ec_c = 0.9
t, d, m = adenylates(ec_c)
atp_c = t
adp_c = d

```

I’m not sure what caused this difference. Any suggestions and/or corrections are welcome.

### System information

OS: Ubuntu 20.04  
CPU: Intel(R) Xeon(R) CPU E5-2620 v4 @ 2.10GHz  
Julia version: 1.53

### Julia packages

```julia-auto
[0c46a032] DifferentialEquations v6.15.0
[d96e819e] Parameters v0.12.1

# Less relevant packages
[91a5bcdd] Plots v1.9.1
[7073ff75] IJulia v1.23.1
[b964fa9f] LaTeXStrings v1.2.0
[2ee39098] LabelledArrays v1.4.0
[d330b81b] PyPlot v2.9.0

```

---

<div class="post-metadata">

**Author:** ![MatFi](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/matfi/32/10002_2.png) [@MatFi](https://discourse.julialang.org/u/MatFi)\
**Post date:** [December 8, 2020, 1:56pm UTC](https://discourse.julialang.org/t/solved-time-evaluation-issue-in-a-non-autonomous-ode/51458/2 "2020-12-08T13:56:52Z")

</div>

> [@Wen-Wei\_Tseng](#):
>
> `ec_c = 0.9`  
> `t, d, m = adenylates(ec_c)`

from this point on `t` is constant, so is every parameter depending on t below this line.  
Are you sure that you want to overwrite the time variable `t` in `model(u, p, t)` with a constant value?

---

<div class="post-metadata">

**Author:** ![Wen-Wei\_Tseng](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/wen-wei_tseng/32/28839_2.png) [@Wen-Wei\_Tseng](https://discourse.julialang.org/u/Wen-Wei_Tseng)\
**Post date:** [December 8, 2020, 2:09pm UTC](https://discourse.julialang.org/t/solved-time-evaluation-issue-in-a-non-autonomous-ode/51458/3 "2020-12-08T14:09:22Z")

</div>

Ah, that was an oversight of my own. Thank you @MatFi for taking the time to see my code.

MatFi via JuliaLang \<[julialang@discoursemail.com](mailto:julialang@discoursemail.com)\> 於 2020年12月8日 週二 22:01 寫道：
