Skip to content

Commit

Permalink
Merge pull request #221 from arcaneframework/dev/mab-elasticity-3D
Browse files Browse the repository at this point in the history
elasticity 3D
  • Loading branch information
mohd-afeef-badri authored Feb 25, 2025
2 parents d9a629b + 2714527 commit 743faa1
Show file tree
Hide file tree
Showing 17 changed files with 694 additions and 163 deletions.
36 changes: 18 additions & 18 deletions femutils/ArcaneFemFunctionsGpu.h
Original file line number Diff line number Diff line change
Expand Up @@ -277,7 +277,7 @@ namespace Arcane::FemUtils::Gpu::FeOperation3D
*/
/*-------------------------------------------------------------------------*/

ARCCORE_HOST_DEVICE static inline FixedMatrix<1, 4> computeGradientXTetra4(CellLocalId cell_lid, const IndexedCellNodeConnectivityView& cn_cv, const Accelerator::VariableNodeReal3InView& in_node_coord)
ARCCORE_HOST_DEVICE static inline Real4 computeGradientXTetra4(CellLocalId cell_lid, const IndexedCellNodeConnectivityView& cn_cv, const Accelerator::VariableNodeReal3InView& in_node_coord)
{
Real3 vertex0 = in_node_coord[cn_cv.nodeId(cell_lid, 0)];
Real3 vertex1 = in_node_coord[cn_cv.nodeId(cell_lid, 1)];
Expand All @@ -291,12 +291,12 @@ ARCCORE_HOST_DEVICE static inline FixedMatrix<1, 4> computeGradientXTetra4(CellL
// 6 x Volume of tetrahedron
Real V6 = std::abs(Arcane::math::dot(v0, Arcane::math::cross(v1, v2)));

FixedMatrix<1, 4> dx;
Real4 dx{};

dx(0,0) = (vertex1.y * (vertex3.z - vertex2.z) + vertex2.y * (vertex1.z - vertex3.z) + vertex3.y * (vertex2.z - vertex1.z)) / V6;
dx(0,1) = (vertex0.y * (vertex2.z - vertex3.z) + vertex2.y * (vertex3.z - vertex0.z) + vertex3.y * (vertex0.z - vertex2.z)) / V6;
dx(0,2) = (vertex0.y * (vertex3.z - vertex1.z) + vertex1.y * (vertex0.z - vertex3.z) + vertex3.y * (vertex1.z - vertex0.z)) / V6;
dx(0,3) = (vertex0.y * (vertex1.z - vertex2.z) + vertex1.y * (vertex2.z - vertex0.z) + vertex2.y * (vertex0.z - vertex1.z)) / V6;
dx[0] = (vertex1.y * (vertex3.z - vertex2.z) + vertex2.y * (vertex1.z - vertex3.z) + vertex3.y * (vertex2.z - vertex1.z)) / V6;
dx[1] = (vertex0.y * (vertex2.z - vertex3.z) + vertex2.y * (vertex3.z - vertex0.z) + vertex3.y * (vertex0.z - vertex2.z)) / V6;
dx[2] = (vertex0.y * (vertex3.z - vertex1.z) + vertex1.y * (vertex0.z - vertex3.z) + vertex3.y * (vertex1.z - vertex0.z)) / V6;
dx[3] = (vertex0.y * (vertex1.z - vertex2.z) + vertex1.y * (vertex2.z - vertex0.z) + vertex2.y * (vertex0.z - vertex1.z)) / V6;

return dx;
};
Expand All @@ -322,7 +322,7 @@ ARCCORE_HOST_DEVICE static inline FixedMatrix<1, 4> computeGradientXTetra4(CellL
*/
/*-------------------------------------------------------------------------*/

ARCCORE_HOST_DEVICE static inline FixedMatrix<1, 4> computeGradientYTetra4(CellLocalId cell_lid, const IndexedCellNodeConnectivityView& cn_cv, const Accelerator::VariableNodeReal3InView& in_node_coord)
ARCCORE_HOST_DEVICE static inline Real4 computeGradientYTetra4(CellLocalId cell_lid, const IndexedCellNodeConnectivityView& cn_cv, const Accelerator::VariableNodeReal3InView& in_node_coord)
{
Real3 vertex0 = in_node_coord[cn_cv.nodeId(cell_lid, 0)];
Real3 vertex1 = in_node_coord[cn_cv.nodeId(cell_lid, 1)];
Expand All @@ -336,12 +336,12 @@ ARCCORE_HOST_DEVICE static inline FixedMatrix<1, 4> computeGradientYTetra4(CellL
// 6 x Volume of tetrahedron
Real V6 = std::abs(Arcane::math::dot(v0, Arcane::math::cross(v1, v2)));

FixedMatrix<1, 4> dy;
Real4 dy{};

dy(0,0) = (vertex1.z * (vertex3.x - vertex2.x) + vertex2.z * (vertex1.x - vertex3.x) + vertex3.z * (vertex2.x - vertex1.x)) / V6;
dy(0,1) = (vertex0.z * (vertex2.x - vertex3.x) + vertex2.z * (vertex3.x - vertex0.x) + vertex3.z * (vertex0.x - vertex2.x)) / V6;
dy(0,2) = (vertex0.z * (vertex3.x - vertex1.x) + vertex1.z * (vertex0.x - vertex3.x) + vertex3.z * (vertex1.x - vertex0.x)) / V6;
dy(0,3) = (vertex0.z * (vertex1.x - vertex2.x) + vertex1.z * (vertex2.x - vertex0.x) + vertex2.z * (vertex0.x - vertex1.x)) / V6;
dy[0] = (vertex1.z * (vertex3.x - vertex2.x) + vertex2.z * (vertex1.x - vertex3.x) + vertex3.z * (vertex2.x - vertex1.x)) / V6;
dy[1] = (vertex0.z * (vertex2.x - vertex3.x) + vertex2.z * (vertex3.x - vertex0.x) + vertex3.z * (vertex0.x - vertex2.x)) / V6;
dy[2] = (vertex0.z * (vertex3.x - vertex1.x) + vertex1.z * (vertex0.x - vertex3.x) + vertex3.z * (vertex1.x - vertex0.x)) / V6;
dy[3] = (vertex0.z * (vertex1.x - vertex2.x) + vertex1.z * (vertex2.x - vertex0.x) + vertex2.z * (vertex0.x - vertex1.x)) / V6;

return dy;
}
Expand All @@ -367,7 +367,7 @@ ARCCORE_HOST_DEVICE static inline FixedMatrix<1, 4> computeGradientYTetra4(CellL
*/
/*-------------------------------------------------------------------------*/

ARCCORE_HOST_DEVICE static inline FixedMatrix<1, 4> computeGradientZTetra4(CellLocalId cell_lid, const IndexedCellNodeConnectivityView& cn_cv, const Accelerator::VariableNodeReal3InView& in_node_coord)
ARCCORE_HOST_DEVICE static inline Real4 computeGradientZTetra4(CellLocalId cell_lid, const IndexedCellNodeConnectivityView& cn_cv, const Accelerator::VariableNodeReal3InView& in_node_coord)
{
Real3 vertex0 = in_node_coord[cn_cv.nodeId(cell_lid, 0)];
Real3 vertex1 = in_node_coord[cn_cv.nodeId(cell_lid, 1)];
Expand All @@ -381,12 +381,12 @@ ARCCORE_HOST_DEVICE static inline FixedMatrix<1, 4> computeGradientZTetra4(CellL
// 6 x Volume of tetrahedron
Real V6 = std::abs(Arcane::math::dot(v0, Arcane::math::cross(v1, v2)));

FixedMatrix<1, 4> dz;
Real4 dz{};

dz(0,0) = (vertex1.x * (vertex3.y - vertex2.y) + vertex2.x * (vertex1.y - vertex3.y) + vertex3.x * (vertex2.y - vertex1.y)) / V6;
dz(0,1) = (vertex0.x * (vertex2.y - vertex3.y) + vertex2.x * (vertex3.y - vertex0.y) + vertex3.x * (vertex0.y - vertex2.y)) / V6;
dz(0,2) = (vertex0.x * (vertex3.y - vertex1.y) + vertex1.x * (vertex0.y - vertex3.y) + vertex3.x * (vertex1.y - vertex0.y)) / V6;
dz(0,3) = (vertex0.x * (vertex1.y - vertex2.y) + vertex1.x * (vertex2.y - vertex0.y) + vertex2.x * (vertex0.y - vertex1.y)) / V6;
dz[0] = (vertex1.x * (vertex3.y - vertex2.y) + vertex2.x * (vertex1.y - vertex3.y) + vertex3.x * (vertex2.y - vertex1.y)) / V6;
dz[1] = (vertex0.x * (vertex2.y - vertex3.y) + vertex2.x * (vertex3.y - vertex0.y) + vertex3.x * (vertex0.y - vertex2.y)) / V6;
dz[2] = (vertex0.x * (vertex3.y - vertex1.y) + vertex1.x * (vertex0.y - vertex3.y) + vertex3.x * (vertex1.y - vertex0.y)) / V6;
dz[3] = (vertex0.x * (vertex1.y - vertex2.y) + vertex1.x * (vertex2.y - vertex0.y) + vertex2.x * (vertex0.y - vertex1.y)) / V6;

return dz;
};
Expand Down
Loading

0 comments on commit 743faa1

Please sign in to comment.