16 Jacobian(
const Eigen::VectorXd& nodeValues,
const Eigen::MatrixXd& derivativeShapeFunctions)
18 const int interpolationDimension = derivativeShapeFunctions.cols();
19 const int numNodes = derivativeShapeFunctions.rows();
20 const int globalDimension = nodeValues.rows() / numNodes;
21 if (interpolationDimension == globalDimension)
23 switch (globalDimension)
29 mInvJacobian = jacobian.inverse();
30 mDetJacobian = jacobian.determinant();
37 mInvJacobian = jacobian.inverse();
38 mDetJacobian = jacobian.determinant();
45 mInvJacobian = jacobian.inverse();
46 mDetJacobian = jacobian.determinant();
51 else if (globalDimension == interpolationDimension + 1)
53 switch (globalDimension)
59 mNormal = Eigen::Vector2d(jacobian(1, 0), -jacobian(0, 0)).normalized();
60 extendedJacobian.col(0) = jacobian;
61 extendedJacobian.col(1) = mNormal;
63 mInvJacobian = extendedJacobian.inverse().block<1, 2>(0, 0);
64 mDetJacobian = -extendedJacobian.determinant();
71 mNormal = (jacobian.col(0)).cross(jacobian.col(1)).normalized();
72 extendedJacobian.col(0) = jacobian.col(0);
73 extendedJacobian.col(1) = jacobian.col(1);
74 extendedJacobian.col(2) = mNormal;
76 mInvJacobian = extendedJacobian.inverse().block<2, 3>(0, 0);
78 mDetJacobian = extendedJacobian.determinant();
84 "Global dimension should be 2 or 3 for codimension 1 objects, got: " +
85 std::to_string(globalDimension) +
".");
92 "Jacobian only implemented for interpolationDimension equal to globaldimension or one " 94 "InterpolationDimension: " +
95 std::to_string(interpolationDimension) +
"\n" +
96 "GlobalDimension: " + std::to_string(globalDimension));
102 return global *
Inv();
117 if (mJacobian.cols() != (mJacobian.rows() - 1))
120 "Normal not available for elements with SpaceDimension - LocalDimension != 1");
131 template <
int TSpaceDim,
int TLocalDim>
133 const Eigen::MatrixXd& derivativeShapeFunctions)
135 const int numShapes = derivativeShapeFunctions.rows();
136 auto nodeBlockCoordinates =
137 Eigen::Map<Eigen::Matrix<double, TSpaceDim, Eigen::Dynamic>>(nodeValues.data(), TSpaceDim, numShapes);
Base class for all exceptions thrown in NuTo.
Definition: Exception.h:9
Definition: Jacobian.h:10
const Dynamic3by3 & Inv() const
Definition: Jacobian.h:105
const Dynamic3by1 & Normal() const
Definition: Jacobian.h:115
Eigen::MatrixXd TransformDerivativeShapeFunctions(const Eigen::MatrixXd &global) const
Definition: Jacobian.h:100
double Det() const
Definition: Jacobian.h:125
const Dynamic3by3 & Get() const
Definition: Jacobian.h:110
Definition: Exception.h:6
Jacobian(const Eigen::VectorXd &nodeValues, const Eigen::MatrixXd &derivativeShapeFunctions)
Definition: Jacobian.h:16