I am interested in increasing "MaxPoints" in NDSolve's "MethodOfLines" in attempt to increase the resolution of the plot of the solution of linearly damped wave equation with transparent boundary conditions and square pulse initial condition.

Here is my code:

interpolatingFunctLinear[initalPulseFunction_, xBoundLow_, xBoundHigh_, timeBound_] :=     
First[ pdeY = D[Y[x, t], t, t] + .04 D[Y[x, t], t] == D[Y[x, t], x, x]; 
solnDerivativeY = NDSolve[{pdeY,
Y[x, 0] == initalPulseFunction, Derivative[0, 1][Y][x, 0] == 0,
Derivative[1, 0][Y][xBoundLow, t] == Derivative[0, 1][Y][xBoundLow,
t], Derivative[1, 0][Y][xBoundHigh, t] == -Derivative[0,
1][Y][xBoundHigh, t]}, Y, {x, xBoundLow, xBoundHigh}, {t, 0,
timeBound }, Method -> {"MethodOfLines", "SpatialDiscretization" ->
{"TensorProductGrid", "MaxPoints" -> 2000}}]]

Here is my square wave:

Piecewise[{{1 , Abs[x] <=  8.40749}, {0, Abs[x] > 8.40749}}]

Now running the whole thing together, we get the following:

interpolatingFunctLinear[Piecewise[{{1 , Abs[x] <=  8.40749}, {0, 
Abs[x] > 8.40749}}], -200, 200, 300]

Manipulate[ Show[Plot[ Evaluate[{Y[x, t] /. solnDerivativeY} /. t -> \[Tau]], {x, -200, 
200}, PlotRange -> {{-200, 200}, {0, 1.1}}]], {\[Tau], 0, 300}]

enter image description here

Notice that the initial square wave is defined as having a value of 1 in the interval |x|< 8.407 and rest zero everywhere else. I wanted to smooth out the spiky effects that seems to be present in the plot by setting "MaxPoints" to a very very large number such as 100,000. I believe that these spiky effects are due to initial square wave not having a continuous derivatives at the edges of the square wave pulse.

However, when I chooses "MaxPoints" -> 4000, Mathematica throws a "No Memory Available" error and shuts down. First I want to know how to let NDSolve smoothly handles these "jumpy" inital wave pulses (such as triangle, square wave pulses). Then, I want to know how to progressively increase numerical precision so that I can smooth out these spiky effects within NDSolve.

Thank You for your input!!

  • 2
    $\begingroup$ "FiniteElement" in v10 might help. (Not tested, the wolfram cloud is currently down. ) See for example this, this and this post. $\endgroup$
    – xzczd
    Sep 27, 2014 at 7:56


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy