(*simple example showing how to use Manipulate to animate the 
solution of the Poisson 2D PDE using the Jacobi method. 
Nasser M. Abbasi, March 6, 2012*)

Manipulate[
 
 Module[{h, u, grid, force, f},
  h = 1/(n - 1);
  u = Table[0, {n}, {n}];
  grid = makeCoordinates[n];
  f[x_, y_] := -Exp[-(x - 0.25)^2 - (y - 
         0.6)^2]; (*the force function*)
  
  force = Map[f[#[[1]], #[[2]]] &, 
    grid, {2}]; (*evaluate it on the grid*)
  
  Do[ (*solve*)
   jacobiStep[Unevaluated@u, h, force], {n}
   ];
  
  (*plot the solution*)
  
  ListPlot3D[u, PlotRange -> All, PerformanceGoal -> "Quality", 
   ImagePadding -> 30, ImageSize -> 400, Mesh -> {n, n}, 
   PlotLabel -> 
    Text@Row[{"solution to ", 
       Style[TraditionalForm[
         HoldForm[-Power["\[Del]", 2] "u"[x, 
             y] == -Exp[-(x - 0.25)^2 - (y - 0.6)^2]]]]}]
   ]
  ],
 
 {{n, 9, "number of steps"}, 5, 31, 1, Appearance -> "Labeled"},
 TrackedSymbols :> {n},
 Initialization :> 
  {
   jacobiStep[u_, h_, f_] := Module[{nRow, nCol, i, j},
     {nRow, nCol} = Dimensions[u];
     For[i = 2, i < nRow, i++,
      For[j = 2, j < nCol, j++,
       u[[i, 
         j]] = (1/4) (u[[i - 1, j]] + u[[i + 1, j]] + u[[i, j - 1]] + 
           u[[i, j + 1]] - h^2 f[[i, j]])
       ]
      ]
     ];
   
   makeCoordinates[n_] := Module[{i, j, h},
     h = 1/(n - 1);
     N@Table[{i*h, j*h}, {i, 0, n - 1}, {j, 0, n - 1}]
     ];
   
   }
 ]