11 #ifndef __VOLUMEELEMENTFORCESANDSOURCESCORE_ONSIDE_HPP__
12 #define __VOLUMEELEMENTFORCESANDSOURCESCORE_ONSIDE_HPP__
14 using namespace boost::numeric;
25 using VolumeElementForcesAndSourcesCore::VolumeElementForcesAndSourcesCore;
34 inline const std::array<int, 4> &getFaceConnMap()
const;
44 inline const std::array<int, 8> &getTetConnMap()
const;
54 inline int getOppositeNode()
const;
69 inline int getSkeletonSense()
const;
76 inline int getFaceSideNumber()
const;
83 int getRule(
int order);
120 inline int getSkeletonSense()
const;
126 inline int getFaceSideNumber()
const;
128 inline bool getEdgeFace(
const int ee)
const;
146 inline auto getFTensor1Normal();
150 inline auto getFTensor1Tangent1();
154 inline auto getFTensor1Tangent2();
168 inline ublas::matrix_row<MatrixDouble> getNormalsAtGaussPts(
const int gg);
184 inline auto getFTensor1NormalsAtGaussPts();
199 const std::array<int, 4> &
200 VolumeElementForcesAndSourcesCoreOnSide::getFaceConnMap()
const {
204 const std::array<int, 8> &
205 VolumeElementForcesAndSourcesCoreOnSide::getTetConnMap()
const {
209 int VolumeElementForcesAndSourcesCoreOnSide::getOppositeNode()
const {
213 int VolumeElementForcesAndSourcesCoreOnSide::getFaceSense()
const {
214 return getSkeletonSense();
217 int VolumeElementForcesAndSourcesCoreOnSide::getSkeletonSense()
const {
221 int VolumeElementForcesAndSourcesCoreOnSide::getFaceSideNumber()
const {
222 return faceSideNumber;
226 VolumeElementForcesAndSourcesCoreOnSide::UserDataOperator::getFaceFE()
229 getVolumeFE()->sidePtrFE);
233 VolumeElementForcesAndSourcesCoreOnSide::UserDataOperator::getNormal() {
234 return getFaceFE()->nOrmal;
238 VolumeElementForcesAndSourcesCoreOnSide::UserDataOperator::getTangent1() {
239 return getFaceFE()->tangentOne;
243 VolumeElementForcesAndSourcesCoreOnSide::UserDataOperator::getTangent2() {
244 return getFaceFE()->tangentTwo;
248 VolumeElementForcesAndSourcesCoreOnSide::UserDataOperator::getVolumeFE()
253 int VolumeElementForcesAndSourcesCoreOnSide::UserDataOperator::
254 getFaceSense()
const {
255 return getSkeletonSense();
258 int VolumeElementForcesAndSourcesCoreOnSide::UserDataOperator::
259 getSkeletonSense()
const {
260 return getVolumeFE()->faceSense;
263 auto VolumeElementForcesAndSourcesCoreOnSide::UserDataOperator::
264 getFTensor1Normal() {
265 double *ptr = &*getNormal().data().begin();
269 auto VolumeElementForcesAndSourcesCoreOnSide::UserDataOperator::
270 getFTensor1Tangent1() {
271 double *ptr = &*getTangent1().data().begin();
275 auto VolumeElementForcesAndSourcesCoreOnSide::UserDataOperator::
276 getFTensor1Tangent2() {
277 double *ptr = &*getTangent2().data().begin();
281 inline auto VolumeElementForcesAndSourcesCoreOnSide::UserDataOperator::
282 getFTensor1NormalsAtGaussPts() {
283 double *ptr = &*getNormalsAtGaussPts().data().begin();
288 int VolumeElementForcesAndSourcesCoreOnSide::UserDataOperator::
289 getFaceSideNumber()
const {
290 return getVolumeFE()->faceSideNumber;
293 MatrixDouble &VolumeElementForcesAndSourcesCoreOnSide::UserDataOperator::
294 getNormalsAtGaussPts() {
295 return getFaceFE()->normalsAtGaussPts;
298 MatrixDouble &VolumeElementForcesAndSourcesCoreOnSide::UserDataOperator::
299 getFaceCoordsAtGaussPts() {
300 return getFaceFE()->coordsAtGaussPts;
303 bool VolumeElementForcesAndSourcesCoreOnSide::UserDataOperator::getEdgeFace(
304 const int ee)
const {
305 constexpr
bool edges_on_faces[6][4] = {{
true,
false,
false,
true},
306 {
false,
true,
false,
true},
307 {
false,
false,
true,
true},
308 {
true,
false,
true,
false},
309 {
true,
true,
false,
false},
310 {
false,
true,
true,
false}};
311 return edges_on_faces[ee][getFaceSideNumber()];
314 ublas::matrix_row<MatrixDouble> VolumeElementForcesAndSourcesCoreOnSide::
315 UserDataOperator::getNormalsAtGaussPts(
const int gg) {
316 return ublas::matrix_row<MatrixDouble>(getNormalsAtGaussPts(), gg);
329 template <
int SWITCH>
332 using VolumeElementForcesAndSourcesCoreOnSide::
333 VolumeElementForcesAndSourcesCoreOnSide;
342 #endif //__VOLUMEELEMENTFORCESANDSOURCESCORE_ONSIDE_HPP__