function [grad_l, grad_r] = eno2y(m,n,i,j,phi,dy) % phi(m+1,n+1), the level set function, m,n>=3. dydy = dy*dy; if j > 1 phy_l = (phi(i,j) - phi(i,j-1) )/dy; else phi_l = 3*phi(i,j) - 3*phi(i,j+1) + phi(i,j+2); phy_l = (phi(i,j) - phi_l )/dy; end if j < n+1 phy_r = (phi(i,j+1) - phi(i,j) )/dy; else phi_r = 3*phi(i,j) - 3*phi(i,j-1) + phi(i,j-2); phy_r = (phi_r - phi(i,j) )/dy; end if j > 1 if j==2 phi_l = 3*phi(i,j-1) - 3*phi(i,j) + phi(i,j+1); phyy_l = (phi(i,j) - 2*phi(i,j-1) + phi_l )/dydy; else phyy_l = (phi(i,j) - 2*phi(i,j-1) + phi(i,j-2) )/dydy; end else phi_l = 3*phi(i,j) - 3*phi(i,j+1) + phi(i,j+2); phi_ll = 6*phi(i,j) -8*phi(i,j+1) + 3*phi(i,j+2); phyy_l = (phi(i,j) - 2*phi_l + phi_ll )/dydy; end if j < n + 1 if j==n phi_r = 3*phi(i,j+1) - 3*phi(i,j) + phi(i,j-1); phyy_r = (phi_r - 2*phi(i,j+1) + phi(i,j) )/dydy; else phyy_r = (phi(i,j+2) - 2*phi(i,j+1) + phi(i,j) )/dydy; end else phi_r = 3*phi(i,j) - 3*phi(i,j-1) + phi(i,j-2); phi_rr = 6*phi(i,j) -8*phi(i,j-1) + 3*phi(i,j-2); phyy_r = (phi_rr - 2*phi_r + phi(i,j) )/dydy; end if j==1 phi_l = 3*phi(i,j) - 3*phi(i,j+1) + phi(i,j+2); phyy_o = (phi(i,j+1) - 2*phi(i,j) + phi_l )/dydy; elseif j==n+1 phi_r = 3*phi(i,j) - 3*phi(i,j-1) + phi(i,j-2); phyy_o = (phi_r - 2*phi(i,j) + phi(i,j-1) )/dydy;; else phyy_o = (phi(i,j+1) - 2*phi(i,j) + phi(i,j-1) )/dydy; end grad_l = phy_l + dy*0.5*absmin(phyy_l, phyy_o); grad_r = phy_r - dy*0.5*absmin(phyy_r, phyy_o);