2

I would like to understand, how to obtain gradients of the PDE solution obtained with NDSolve. To be precise let us consider a Laplace equation from one of the examples:

    Clear[x, y, f];
Needs["NDSolve`FEM`"]
emesh = ToElementMesh[Disk[]];

f = NDSolveValue[{Derivative[0, 2][u][x, y] + 
Derivative[2, 0][u][x, y] == 0, 
   DirichletCondition[u[x, y] == Sin[x y], True]}, 
  u, {x, y} ∈ emesh]

This returns the interpolation function which one can plot and integrate:

    NIntegrate[f[x, y], {x, y} ∈ emesh]

(*  1.52794*10^-8  *)

Plot3D[f[x, y], {x, y} ∈ emesh]

enter image description here

This, however, does not work:

  g[x_, y_] := D[f[x, y], x];
Plot3D[g[x, y], {x, y} ∈ emesh]

Since Integrate does not work on this result, only NIntegratedoes, the problem is probably that one needs to apply a numeric derivative. What and how?

user21
  • 39,710
  • 8
  • 110
  • 167
Alexei Boulbitch
  • 39,397
  • 2
  • 47
  • 96

1 Answers1

3

That's an easy one:

g[x_, y_] = D[f[x, y], x];
Plot3D[g[x, y], {x, y} \[Element] emesh]

Mathematica graphics

Note the : in the definition of g :-)

chris
  • 22,860
  • 5
  • 60
  • 149