##########################################################
# Form for creating dotsigma
#
#  sigma_n+1 = sigma_n + k * dotsigma
##########################################################


##########################################################

cell = "tetrahedron"

vector          = VectorElement("Lagrange", cell, 1)
# Dimension of domain
d = vector.cell_dimension()

constant_tensor = VectorElement("Discontinuous Lagrange", cell, 0, d * d)
constant_scalar = FiniteElement("Discontinuous Lagrange", cell, 0)

##########################################################

q        = TestFunction(constant_tensor)  # Weak variable
u        = Function(vector)               # Velocity
icv	 = Function(constant_scalar)      # Cell volume
mu       = Constant(cell)                     # Lame coefficient

##########################################################

def epsilon(u):
    return 0.5 * (grad(u) + transp(grad(u)))

def E(e, mu):
    Ee = 2.0 * mult(mu, e) 
    return Ee

def tomatrix(q):
    return [ [q[d * i + j] for i in range(d)] for j in range(d) ]

Eeu = E(epsilon(u), mu)

##########################################################

qmat        = tomatrix(q)

L = icv * dot(Eeu, qmat) * dx

