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);
101 bool operatorImplCalled =
false;
130 inline int getSkeletonSense()
const;
136 inline int getFaceSideNumber()
const;
138 inline bool getEdgeFace(
const int ee)
const;
156 inline auto getFTensor1Normal();
160 inline auto getFTensor1Tangent1();
164 inline auto getFTensor1Tangent2();
178 inline ublas::matrix_row<MatrixDouble> getNormalsAtGaussPts(
const int gg);
194 inline auto getFTensor1NormalsAtGaussPts();
209 const std::array<int, 4> &
210 VolumeElementForcesAndSourcesCoreOnSide::getFaceConnMap()
const {
214 const std::array<int, 8> &
215 VolumeElementForcesAndSourcesCoreOnSide::getTetConnMap()
const {
219 int VolumeElementForcesAndSourcesCoreOnSide::getOppositeNode()
const {
223 int VolumeElementForcesAndSourcesCoreOnSide::getFaceSense()
const {
224 return getSkeletonSense();
227 int VolumeElementForcesAndSourcesCoreOnSide::getSkeletonSense()
const {
231 int VolumeElementForcesAndSourcesCoreOnSide::getFaceSideNumber()
const {
232 return faceSideNumber;
236 VolumeElementForcesAndSourcesCoreOnSide::UserDataOperator::getFaceFE()
239 getVolumeFE()->sidePtrFE);
243 VolumeElementForcesAndSourcesCoreOnSide::UserDataOperator::getNormal() {
244 return getFaceFE()->nOrmal;
248 VolumeElementForcesAndSourcesCoreOnSide::UserDataOperator::getTangent1() {
249 return getFaceFE()->tangentOne;
253 VolumeElementForcesAndSourcesCoreOnSide::UserDataOperator::getTangent2() {
254 return getFaceFE()->tangentTwo;
258 VolumeElementForcesAndSourcesCoreOnSide::UserDataOperator::getVolumeFE()
263 int VolumeElementForcesAndSourcesCoreOnSide::UserDataOperator::
264 getFaceSense()
const {
265 return getSkeletonSense();
268 int VolumeElementForcesAndSourcesCoreOnSide::UserDataOperator::
269 getSkeletonSense()
const {
270 return getVolumeFE()->faceSense;
273 auto VolumeElementForcesAndSourcesCoreOnSide::UserDataOperator::
274 getFTensor1Normal() {
275 double *ptr = &*getNormal().data().begin();
279 auto VolumeElementForcesAndSourcesCoreOnSide::UserDataOperator::
280 getFTensor1Tangent1() {
281 double *ptr = &*getTangent1().data().begin();
285 auto VolumeElementForcesAndSourcesCoreOnSide::UserDataOperator::
286 getFTensor1Tangent2() {
287 double *ptr = &*getTangent2().data().begin();
291 inline auto VolumeElementForcesAndSourcesCoreOnSide::UserDataOperator::
292 getFTensor1NormalsAtGaussPts() {
293 double *ptr = &*getNormalsAtGaussPts().data().begin();
298 int VolumeElementForcesAndSourcesCoreOnSide::UserDataOperator::
299 getFaceSideNumber()
const {
300 return getVolumeFE()->faceSideNumber;
303 MatrixDouble &VolumeElementForcesAndSourcesCoreOnSide::UserDataOperator::
304 getNormalsAtGaussPts() {
305 return getFaceFE()->normalsAtGaussPts;
308 MatrixDouble &VolumeElementForcesAndSourcesCoreOnSide::UserDataOperator::
309 getFaceCoordsAtGaussPts() {
310 return getFaceFE()->coordsAtGaussPts;
313 bool VolumeElementForcesAndSourcesCoreOnSide::UserDataOperator::getEdgeFace(
314 const int ee)
const {
315 constexpr
bool edges_on_faces[6][4] = {{
true,
false,
false,
true},
316 {
false,
true,
false,
true},
317 {
false,
false,
true,
true},
318 {
true,
false,
true,
false},
319 {
true,
true,
false,
false},
320 {
false,
true,
true,
false}};
321 return edges_on_faces[ee][getFaceSideNumber()];
324 ublas::matrix_row<MatrixDouble> VolumeElementForcesAndSourcesCoreOnSide::
325 UserDataOperator::getNormalsAtGaussPts(
const int gg) {
326 return ublas::matrix_row<MatrixDouble>(getNormalsAtGaussPts(), gg);
339 template <
int SWITCH>
342 using VolumeElementForcesAndSourcesCoreOnSide::
343 VolumeElementForcesAndSourcesCoreOnSide;
352 #endif //__VOLUMEELEMENTFORCESANDSOURCESCORE_ONSIDE_HPP__