You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
45 lines
1.7 KiB
45 lines
1.7 KiB
#pragma once
|
|
|
|
#include <Eigen/Eigen>
|
|
|
|
namespace da::sha {
|
|
|
|
// compute element stiffness matrix of 3D linear elastic material
|
|
// using 2-nd Gauss integration
|
|
// @input
|
|
// a, b, c: half size of element
|
|
// D : constitutive matrix, (6, 6)
|
|
// @output
|
|
// Ke : element matrix, (24, 24)
|
|
void ComputeKe(double a, double b, double c, const Eigen::Matrix<double, 6, 6> &D,
|
|
Eigen::Matrix<double, 24, 24> &Ke);
|
|
|
|
// compute element strain-displacement matrix B in 8 Gauss Points
|
|
// @input
|
|
// a, b, c: half size of element
|
|
// @output
|
|
// Be : element strain-displacement matrix, (6, 24)
|
|
void ComputeBe(double a, double b, double c, std::vector<Eigen::Matrix<double, 6, 24>> &Be);
|
|
|
|
// compute element shape function matrix in a given local point P
|
|
// @input
|
|
// P: given local point, in [-1, 1] * [-1, 1] * [-1, 1]
|
|
// @output
|
|
// N: shape function matrix N, (3, 24)
|
|
void ComputeN(const Eigen::RowVector3d &P, Eigen::Matrix<double, 3, 24> &N);
|
|
|
|
// compute element strain-displacement matrix B in a given local point P
|
|
// @input
|
|
// a, b, c: half size of element
|
|
// P: given local point, in [-1, 1] * [-1, 1] * [-1, 1]
|
|
// @output
|
|
// B: element strain-displacement matrix, (6, 24)
|
|
void ComputeB(double a, double b, double c, const Eigen::RowVector3d &P,
|
|
Eigen::Matrix<double, 6, 24> &B);
|
|
|
|
void ComputeNForTet(const Eigen::RowVector3d &P, const Eigen::Matrix<double, 4, 3> &X,
|
|
Eigen::Matrix<double, 3, 12> &N);
|
|
void ComputeBForTet(const Eigen::Matrix<double, 4, 3> &X, Eigen::Matrix<double, 6, 12> &B);
|
|
void ComputeKeForTet(const Eigen::Matrix<double, 4, 3> &X, const Eigen::Matrix<double, 6, 6> &D,
|
|
Eigen::Matrix<double, 12, 12> &Ke, double &Vol);
|
|
} // namespace da::sha
|
|
|