iNSE-ALE-Article/common.py

55 lines
1.5 KiB
Python
Raw Normal View History

"""
This module contains all common functions used in variational form.
All operators are defined with respect to the reference coordiantes.
"""
import fenics as fn
__version__ = "0.1"
__author__ = "Reidmen Arostica"
__date__ = "25/06/2020"
def F_(coordinates: fn.Function) -> fn.grad:
"""
Computes the deformation gradient operator (dx/dX).
"""
return fn.grad(coordinates)
def inv_F_(coordinates: fn.Function) -> fn.inv:
"""
Computes the inverse of the deformation gradient.
"""
return fn.inv(F_(coordinates))
def J_(coordinates: fn.Function) -> fn.det:
"""
Computes the determinant of the deformation gradient.
"""
return fn.det(F_(coordinates))
def grad_(u: fn.Function, coordinates: fn.Function) -> fn.Function:
"""
Computes the grad operator on the reference configuration.
"""
inv_F = fn.inv(F_(coordinates))
return fn.dot(fn.grad(u), inv_F)
def nabla_grad_(u: fn.Function, coordinates: fn.Function) -> fn.Function:
"""
Computes the nabla_grad on the reference configuration.
"""
return grad_(u, coordinates).T
def sym_grad_(u: fn.Function, coordinates: fn.Function) -> fn.Function:
"""
Computes the symmetric gradient operator w.r.t. the reference configuration.
"""
return 0.5*(grad_(u, coordinates) + grad_(u, coordinates).T)
def div_(u: fn.Function, coordinates: fn.Function) -> fn.tr:
"""
Computes the Piola div operator w.r.t. the reference configuration.
"""
J = J_(coordinates)
inv_F = inv_F_(coordinates)
return fn.div(J*fn.dot(inv_F, u))