# Define function G such that G \cdot n = g
class BoundarySource(Expression):
    def __init__(self, mesh, **kwargs):
        self.mesh = mesh
    def eval_cell(self, values, x, ufc_cell):
        cell = Cell(self.mesh, ufc_cell.index)
        n = cell.normal(ufc_cell.local_facet)
        g = sin(5*x[0])
        values[0] = g*n[0]
        values[1] = g*n[1]
    def value_shape(self):
        return (2,)
G = BoundarySource(mesh, degree=2)
# Define essential boundary
def boundary(x):
    return x[1] < DOLFIN_EPS or x[1] > 1.0 - DOLFIN_EPS
bc = DirichletBC(W.sub(0), G, boundary)
------------------
Francis Poulin                    
Associate Professor
Department of Applied Mathematics
University of Waterloo
email:           
fpoulin@uwaterloo.ca
Web:            
https://uwaterloo.ca/poulin-research-group/
Telephone:  
+1 519 888 4567 x32637