Robert G. Nelson (rgnelson)
Moderator Username: rgnelson
Post Number: 51 Registered: 06-2003
| Posted on Friday, October 24, 2003 - 02:44 pm: | |
The TINTEGRAL function as currently implemented is a scalar function. It cannot create a field of values (we will generalize this someday). In the example you reference, time_integral(vol_integral(source)) is a scalar. time_integral(source) is not, because source is a function of position and is therefore a field quantity. Your approach of adding the variable "total" is the right one. The only problem is that it interacts with a characteristic of the finite element method. The FE method creates a discretized approximation of the PDE by integrating the PDE over the space surrounding a node. As long as there are derivatives in the PDE (ie, it really is a PDE), this couples the nodal values in a way that leads (usually) to a unique solution. When there are no derivatives, then many oscillatory solutions will satisfy the integrated equations. This allows instabilities to grow and crash the timestep control. The solution is to include a small artificial diffusion term in any "point" equation which contains no derivatives. Change your equation to dt(total) = fuzz*div(grad(total)) + source. Use "fuzz" on the order of D^2/tc, where D is a spatial range over which smearing is allowed, and tc is a characteristic signal propagation time across that distance. (See Help | Tech Notes | Smoothing Operators in PDE's) The div(grad()) operator can be viewed as a low-pass filter function that damps high frequency oscillations.
|