Skip to content
This repository has been archived by the owner on Dec 6, 2024. It is now read-only.

Commit

Permalink
Merge pull request #325 from firedrakeproject/faznaran/hu-zhang
Browse files Browse the repository at this point in the history
Hu-Zhang
  • Loading branch information
pbrubeck authored Nov 6, 2024
2 parents d7f064c + 102b44a commit aa7e4a1
Show file tree
Hide file tree
Showing 2 changed files with 14 additions and 0 deletions.
3 changes: 3 additions & 0 deletions tsfc/finatinterface.py
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,7 @@
"Johnson-Mercier": finat.JohnsonMercier,
"Nonconforming Arnold-Winther": finat.ArnoldWintherNC,
"Conforming Arnold-Winther": finat.ArnoldWinther,
"Hu-Zhang": finat.HuZhang,
"Hermite": finat.Hermite,
"Kong-Mulder-Veldhuizen": finat.KongMulderVeldhuizen,
"Argyris": finat.Argyris,
Expand All @@ -74,6 +75,8 @@
"Nedelec 2nd kind H(curl)": finat.NedelecSecondKind,
"Raviart-Thomas": finat.RaviartThomas,
"Regge": finat.Regge,
"Gopalakrishnan-Lederer-Schoberl 1st kind": finat.GopalakrishnanLedererSchoberlFirstKind,
"Gopalakrishnan-Lederer-Schoberl 2nd kind": finat.GopalakrishnanLedererSchoberlSecondKind,
"BDMCE": finat.BrezziDouglasMariniCubeEdge,
"BDMCF": finat.BrezziDouglasMariniCubeFace,
# These require special treatment below
Expand Down
11 changes: 11 additions & 0 deletions tsfc/ufl_utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -403,6 +403,10 @@ def apply_mapping(expression, element, domain):
G(X) = det(J)^2 K g(x) K^T i.e. G_il(X)=(detJ)^2 K_ij g_jk K_lk
'covariant contravariant piola' mapping for g:
G(X) = det(J) J^T g(x) K^T i.e. G_il(X) = det(J) J_ji g_jk(x) K_lk
If 'contravariant piola' or 'covariant piola' (or their double
variants) are applied to a matrix-valued function, the appropriate
mappings are applied row-by-row.
Expand Down Expand Up @@ -442,6 +446,13 @@ def apply_mapping(expression, element, domain):
*k, i, j, m, n = indices(len(expression.ufl_shape) + 2)
kmn = (*k, m, n)
rexpression = as_tensor(detJ**2 * K[i, m] * expression[kmn] * K[j, n], (*k, i, j))
elif mapping == "covariant contravariant piola":
J = Jacobian(mesh)
K = JacobianInverse(mesh)
detJ = JacobianDeterminant(mesh)
*k, i, j, m, n = indices(len(expression.ufl_shape) + 2)
kmn = (*k, m, n)
rexpression = as_tensor(detJ * J[m, i] * expression[kmn] * K[j, n], (*k, i, j))
elif mapping == "symmetries":
# This tells us how to get from the pieces of the reference
# space expression to the physical space one.
Expand Down

0 comments on commit aa7e4a1

Please sign in to comment.