I am looking to obtain a solution approximation u = u(x, t) for a partial differential equation via FEM. I am `using DifferentialEquations`

with the prospect utilizing its parameter estimation functionality.

**The parameters determine the spatial discretization**, which in turn determines the mass and stiffness matrices involved. As a MWE,

```
function pde!(du, u, p, t)
# Spatial Grid
x = spatial_grid(p)
# FEM Matrices
M, S = fem_matrices(x)
# Solve
du[:] = M\(S*u)
end
```

for Julia functions `spatial_grid`

and `fem_matrices`

self-explanatory.

In order to define the `ODEProblem`

I need an initial condition `u0`

, which depends on the grid defined *inside* the `pde!`

function.

So my question is: Is there a more elegant way to obtain the spatial grid `x`

than having to run `x = spatial_grid(p)`

twice?

It would be nice to somehow fetch the grid or define the initial conditions inside `pde!`

, since the method for producing the grid inside `pde!`

is much more complicated than is shown in the MWE above. Another option is declaring a `global`

which I would **love** to avoid.

The current implementation idea would be as follows.

```
function spatial_grid(p::AbstractVector{T}) where T <: Real
...
end
function fem_matrices(x::AbstractVector{T}) where T <: Real
...
end
function pde!(du, u, p, t)
x = spatial_grid(p)
M, S = fem_matrices(x)
du[:] = M\(S*u)
end
function f0(x::Real)
...
end
p = [...]
tspan = (0.0, 30.0)
x = spatial_grid(p)
u0 = f0.(x)
prob = ODEProblem(pde!, u0, tspan, p)
sol = solve(prob)
```