xref: /petsc/src/binding/petsc4py/demo/legacy/bratu2d/bratu2dnpy.py (revision 5a48edb989d3ea10d6aff6c0e26d581c18691deb)
1*55a74a43SLisandro Dalcin# file: bratu2dnpy.py
2*55a74a43SLisandro Dalcin
3*55a74a43SLisandro Dalcindef bratu2d(alpha, x, f):
4*55a74a43SLisandro Dalcin    # get 'exp' from numpy
5*55a74a43SLisandro Dalcin    from numpy import exp
6*55a74a43SLisandro Dalcin    # setup 5-points stencil
7*55a74a43SLisandro Dalcin    u  = x[1:-1, 1:-1] # center
8*55a74a43SLisandro Dalcin    uN = x[1:-1,  :-2] # north
9*55a74a43SLisandro Dalcin    uS = x[1:-1, 2:  ] # south
10*55a74a43SLisandro Dalcin    uW = x[ :-2, 1:-1] # west
11*55a74a43SLisandro Dalcin    uE = x[2:,   1:-1] # east
12*55a74a43SLisandro Dalcin    # compute nonlinear function
13*55a74a43SLisandro Dalcin    nx, ny = x.shape
14*55a74a43SLisandro Dalcin    hx = 1.0/(nx-1) # x grid spacing
15*55a74a43SLisandro Dalcin    hy = 1.0/(ny-1) # y grid spacing
16*55a74a43SLisandro Dalcin    f[:,:] = x
17*55a74a43SLisandro Dalcin    f[1:-1, 1:-1] = \
18*55a74a43SLisandro Dalcin         (2*u - uE - uW) * (hy/hx) \
19*55a74a43SLisandro Dalcin       + (2*u - uN - uS) * (hx/hy) \
20*55a74a43SLisandro Dalcin       - alpha * exp(u)  * (hx*hy)
21