iNSE-ALE-Article/common.py

55 lines
1.5 KiB
Python

"""
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))