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