Insert f coefficient in pdetool

4 visualizzazioni (ultimi 30 giorni)
NaN1988
NaN1988 il 23 Apr 2014
Commentato: NaN1988 il 27 Apr 2014
Hi all,
I am using pdetool to solve the following parabolic partial differential equation:
y = parabolic(y0,time,b,p,e,t,c,a,f,d)
I need to indicate that the coefficient f depends on the solution "y" and a constant "F" calculated in the previous step. It is clear how to do it when f depends on (x,y,t), however, I don't know how to introduce another parameter. I would need something like
y = parabolic(y0,time,b,p,e,t,c,a,'fcoeff(y,F)',d)
where fcoeff(y,F) is a user function. However, I keep getting this error
Undefined function or variable 'F'
It only recognizes the variables x,y,t. Any suggestion?

Risposte (1)

Bill Greene
Bill Greene il 27 Apr 2014
Do you calculate F in fcoeff? If so, you can make it a global variable and it will retain its value between calls to fcoeff.
One complicating factor is that the parabolic function uses the variable time step ODE solver, ode15s, internally. So fcoeff gets called at unevenly-spaced and possibly non-monotonically increasing time points. You may need to save several values of F along with the times where they are computed and select a particular one or interpolate between values to obtain the value of F you need.
Bill
  1 Commento
NaN1988
NaN1988 il 27 Apr 2014
Thanks for the answer Bill,
The problem is a particle-cell simulation. I have a field represented in a grid, and particles that move off-lattice. These two dynamics are linked because at each time step particles take properties from the grid (extrapolating grid values) and move. At each time step the field is solved; nodes without a particle in the surroundings have F=0, whereas for nodes with particles in the surrounings F=au/(u+1), where a depends on the particle positions. At this moment I am doing the following:
Solve this equation assuming F=0 for all nodes using parabolic in only one time step dt
du/dt-grad(c*grad(u))=0
Recalculate u for the nodes with non-zero F, so du = au/(u+1)*dt for these nodes.
In this way, the command parabolic is inside a for loop and F is recalculated at each step, so I cannot declared it global variable.
I don't really like this method, any suggestion?

Accedi per commentare.

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by