# Copyright (C) 2008-2016 Kristian B. Oelgaard
#
# This file is part of FFC.
#
# FFC is free software: you can redistribute it and/or modify
# it under the terms of the GNU Lesser General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# FFC is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public License
# along with FFC. If not, see <http://www.gnu.org/licenses/>.
#
# The linearised bilinear form a(u, v) and linear form L(v) for
# the nonlinear equation -div (1 + u) grad u = f (nonlinear Poisson)
#
# Compile this form with FFC: ffc QuadratureElement.ufl

# Configure measure with specific quadrature rule
scheme = "default"
degree = 3
dx = Measure("dx")
dx = dx(degree=degree, scheme=scheme)

# Configure quadrature elements with compatible rule
element = FiniteElement("Lagrange", triangle, 2)
QE      = FiniteElement("Quadrature", triangle, degree, quad_scheme=scheme)
sig     = VectorElement("Quadrature", triangle, degree, quad_scheme=scheme)

u    = TrialFunction(element)
v    = TestFunction(element)
u0   = Coefficient(element)
C    = Coefficient(QE)
sig0 = Coefficient(sig)
f    = Coefficient(element)

a = C*u.dx(i)*v.dx(i)*dx + 2*u0*u0.dx(i)*u*v.dx(i)*dx
L = f*v*dx - inner(sig0, grad(v))*dx
