FEM: Mesh ViewProvider, add faces and edges of penta15
This commit is contained in:
parent
0c51820293
commit
0730b3a331
|
@ -884,16 +884,16 @@ void ViewProviderFEMMeshBuilder::createMesh(const App::Property* prop,
|
||||||
break;
|
break;
|
||||||
//penta15 volume
|
//penta15 volume
|
||||||
case 15:
|
case 15:
|
||||||
// face 1 = N1, N2, N3, N7, N8, N9
|
// face 1 = N1, N7, N2, N8, N3, N9
|
||||||
// face 2 = N4, N6, N5, N12, N11, N10
|
// face 2 = N4, N12, N6, N11, N5, N10
|
||||||
// face 3 = N1, N4, N5, N2, N13, N10, N14, N7
|
// face 3 = N1, N13, N4, N10, N5, N14, N2, N7
|
||||||
// face 4 = N2, N5, N6, N3, N14, N11, N15, N8
|
// face 4 = N2, N14, N5, N11, N6, N15, N3, N8
|
||||||
// face 5 = N3, N6, N4, N1, N15, N12, N13, N9
|
// face 5 = N3, N15, N6, N12, N4, N13, N1, N9
|
||||||
BndBox.Add(facesHelper[i++].set(6, aVol, aVol->GetID(), 1, aVol->GetNode(0), aVol->GetNode(1), aVol->GetNode(2), aVol->GetNode(6), aVol->GetNode(7), aVol->GetNode(8)));
|
BndBox.Add(facesHelper[i++].set(6, aVol, aVol->GetID(), 1, aVol->GetNode(0), aVol->GetNode(6), aVol->GetNode(1), aVol->GetNode(7), aVol->GetNode(2), aVol->GetNode(8)));
|
||||||
BndBox.Add(facesHelper[i++].set(6, aVol, aVol->GetID(), 2, aVol->GetNode(3), aVol->GetNode(5), aVol->GetNode(4), aVol->GetNode(11), aVol->GetNode(10), aVol->GetNode(9)));
|
BndBox.Add(facesHelper[i++].set(6, aVol, aVol->GetID(), 2, aVol->GetNode(3), aVol->GetNode(11), aVol->GetNode(5), aVol->GetNode(10), aVol->GetNode(4), aVol->GetNode(9)));
|
||||||
BndBox.Add(facesHelper[i++].set(8, aVol, aVol->GetID(), 3, aVol->GetNode(0), aVol->GetNode(3), aVol->GetNode(4), aVol->GetNode(1), aVol->GetNode(12), aVol->GetNode(9), aVol->GetNode(13), aVol->GetNode(6)));
|
BndBox.Add(facesHelper[i++].set(8, aVol, aVol->GetID(), 3, aVol->GetNode(0), aVol->GetNode(12), aVol->GetNode(3), aVol->GetNode(9), aVol->GetNode(4), aVol->GetNode(13), aVol->GetNode(1), aVol->GetNode(6)));
|
||||||
BndBox.Add(facesHelper[i++].set(8, aVol, aVol->GetID(), 4, aVol->GetNode(1), aVol->GetNode(4), aVol->GetNode(5), aVol->GetNode(2), aVol->GetNode(13), aVol->GetNode(9), aVol->GetNode(14), aVol->GetNode(7)));
|
BndBox.Add(facesHelper[i++].set(8, aVol, aVol->GetID(), 4, aVol->GetNode(1), aVol->GetNode(13), aVol->GetNode(4), aVol->GetNode(10), aVol->GetNode(5), aVol->GetNode(14), aVol->GetNode(2), aVol->GetNode(7)));
|
||||||
BndBox.Add(facesHelper[i++].set(8, aVol, aVol->GetID(), 5, aVol->GetNode(2), aVol->GetNode(5), aVol->GetNode(3), aVol->GetNode(0), aVol->GetNode(14), aVol->GetNode(11), aVol->GetNode(12), aVol->GetNode(8)));
|
BndBox.Add(facesHelper[i++].set(8, aVol, aVol->GetID(), 5, aVol->GetNode(2), aVol->GetNode(14), aVol->GetNode(5), aVol->GetNode(11), aVol->GetNode(3), aVol->GetNode(12), aVol->GetNode(0), aVol->GetNode(8)));
|
||||||
break;
|
break;
|
||||||
//hexa20 volume
|
//hexa20 volume
|
||||||
case 20:
|
case 20:
|
||||||
|
@ -1785,13 +1785,228 @@ void ViewProviderFEMMeshBuilder::createMesh(const App::Property* prop,
|
||||||
default: assert(0);
|
default: assert(0);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
// 15 nodes
|
||||||
|
case 15:
|
||||||
|
// penta15 volume, two 6-node triangles and three 8-node qudrangles
|
||||||
|
Base::Console().Log(" %f: Start build up triangle vector for 15 nodes object\n",Base::TimeInfo::diffTimeF(Start,Base::TimeInfo()));
|
||||||
|
Base::Console().Log(" NumNodes:%i\n",facesHelper[l].Element->NbNodes());
|
||||||
|
switch(facesHelper[l].FaceNo){
|
||||||
|
case 1: { // penta15 volume: face 1, 6-node triangle
|
||||||
|
Base::Console().Log(" %f: Start build up triangle vector for penta15 --> face1\n",Base::TimeInfo::diffTimeF(Start,Base::TimeInfo()));
|
||||||
|
Base::Console().Log(" NumNodes:%i\n",facesHelper[l].Element->NbNodes());
|
||||||
|
int nIdx0 = mapNodeIndex[facesHelper[l].Element->GetNode(0)];
|
||||||
|
int nIdx1 = mapNodeIndex[facesHelper[l].Element->GetNode(6)];
|
||||||
|
int nIdx2 = mapNodeIndex[facesHelper[l].Element->GetNode(1)];
|
||||||
|
int nIdx3 = mapNodeIndex[facesHelper[l].Element->GetNode(7)];
|
||||||
|
int nIdx4 = mapNodeIndex[facesHelper[l].Element->GetNode(2)];
|
||||||
|
int nIdx5 = mapNodeIndex[facesHelper[l].Element->GetNode(8)];
|
||||||
|
indices[index++] = nIdx5;
|
||||||
|
indices[index++] = nIdx0;
|
||||||
|
indices[index++] = nIdx1;
|
||||||
|
indices[index++] = SO_END_FACE_INDEX;
|
||||||
|
insEdgeVec(EdgeMap, nIdx5, nIdx0);
|
||||||
|
insEdgeVec(EdgeMap, nIdx0, nIdx1);
|
||||||
|
vFaceElementIdx[indexIdx++] = ElemFold(facesHelper[l].ElementNumber,0);
|
||||||
|
indices[index++] = nIdx1;
|
||||||
|
indices[index++] = nIdx2;
|
||||||
|
indices[index++] = nIdx3;
|
||||||
|
indices[index++] = SO_END_FACE_INDEX;
|
||||||
|
insEdgeVec(EdgeMap, nIdx1, nIdx2);
|
||||||
|
insEdgeVec(EdgeMap, nIdx2, nIdx3);
|
||||||
|
vFaceElementIdx[indexIdx++] = ElemFold(facesHelper[l].ElementNumber,0);
|
||||||
|
indices[index++] = nIdx3;
|
||||||
|
indices[index++] = nIdx4;
|
||||||
|
indices[index++] = nIdx5;
|
||||||
|
indices[index++] = SO_END_FACE_INDEX;
|
||||||
|
insEdgeVec(EdgeMap, nIdx3, nIdx4);
|
||||||
|
insEdgeVec(EdgeMap, nIdx4, nIdx5);
|
||||||
|
vFaceElementIdx[indexIdx++] = ElemFold(facesHelper[l].ElementNumber,0);
|
||||||
|
indices[index++] = nIdx1;
|
||||||
|
indices[index++] = nIdx3;
|
||||||
|
indices[index++] = nIdx5;
|
||||||
|
indices[index++] = SO_END_FACE_INDEX;
|
||||||
|
break; }
|
||||||
|
case 2: { // penta15 volume: face 2, 6-node triangle
|
||||||
|
int nIdx0 = mapNodeIndex[facesHelper[l].Element->GetNode(3)];
|
||||||
|
int nIdx1 = mapNodeIndex[facesHelper[l].Element->GetNode(11)];
|
||||||
|
int nIdx2 = mapNodeIndex[facesHelper[l].Element->GetNode(5)];
|
||||||
|
int nIdx3 = mapNodeIndex[facesHelper[l].Element->GetNode(10)];
|
||||||
|
int nIdx4 = mapNodeIndex[facesHelper[l].Element->GetNode(4)];
|
||||||
|
int nIdx5 = mapNodeIndex[facesHelper[l].Element->GetNode(9)];
|
||||||
|
indices[index++] = nIdx5;
|
||||||
|
indices[index++] = nIdx0;
|
||||||
|
indices[index++] = nIdx1;
|
||||||
|
indices[index++] = SO_END_FACE_INDEX;
|
||||||
|
insEdgeVec(EdgeMap, nIdx5, nIdx0);
|
||||||
|
insEdgeVec(EdgeMap, nIdx0, nIdx1);
|
||||||
|
vFaceElementIdx[indexIdx++] = ElemFold(facesHelper[l].ElementNumber,1);
|
||||||
|
indices[index++] = nIdx1;
|
||||||
|
indices[index++] = nIdx2;
|
||||||
|
indices[index++] = nIdx3;
|
||||||
|
indices[index++] = SO_END_FACE_INDEX;
|
||||||
|
insEdgeVec(EdgeMap, nIdx1, nIdx2);
|
||||||
|
insEdgeVec(EdgeMap, nIdx2, nIdx3);
|
||||||
|
vFaceElementIdx[indexIdx++] = ElemFold(facesHelper[l].ElementNumber,1);
|
||||||
|
indices[index++] = nIdx3;
|
||||||
|
indices[index++] = nIdx4;
|
||||||
|
indices[index++] = nIdx5;
|
||||||
|
indices[index++] = SO_END_FACE_INDEX;
|
||||||
|
insEdgeVec(EdgeMap, nIdx3, nIdx4);
|
||||||
|
insEdgeVec(EdgeMap, nIdx4, nIdx5);
|
||||||
|
vFaceElementIdx[indexIdx++] = ElemFold(facesHelper[l].ElementNumber,1);
|
||||||
|
indices[index++] = nIdx1;
|
||||||
|
indices[index++] = nIdx3;
|
||||||
|
indices[index++] = nIdx5;
|
||||||
|
indices[index++] = SO_END_FACE_INDEX;
|
||||||
|
break; }
|
||||||
|
case 3: { // penta15 volume: face 3, 8-node quadrangle
|
||||||
|
int nIdx0 = mapNodeIndex[facesHelper[l].Element->GetNode(0)];
|
||||||
|
int nIdx1 = mapNodeIndex[facesHelper[l].Element->GetNode(12)];
|
||||||
|
int nIdx2 = mapNodeIndex[facesHelper[l].Element->GetNode(3)];
|
||||||
|
int nIdx3 = mapNodeIndex[facesHelper[l].Element->GetNode(9)];
|
||||||
|
int nIdx4 = mapNodeIndex[facesHelper[l].Element->GetNode(4)];
|
||||||
|
int nIdx5 = mapNodeIndex[facesHelper[l].Element->GetNode(13)];
|
||||||
|
int nIdx6 = mapNodeIndex[facesHelper[l].Element->GetNode(1)];
|
||||||
|
int nIdx7 = mapNodeIndex[facesHelper[l].Element->GetNode(6)];
|
||||||
|
indices[index++] = nIdx7;
|
||||||
|
indices[index++] = nIdx0;
|
||||||
|
indices[index++] = nIdx1;
|
||||||
|
indices[index++] = SO_END_FACE_INDEX;
|
||||||
|
insEdgeVec(EdgeMap, nIdx7, nIdx0);
|
||||||
|
insEdgeVec(EdgeMap, nIdx0, nIdx1);
|
||||||
|
vFaceElementIdx[indexIdx++] = ElemFold(facesHelper[l].ElementNumber,2);
|
||||||
|
indices[index++] = nIdx1;
|
||||||
|
indices[index++] = nIdx2;
|
||||||
|
indices[index++] = nIdx3;
|
||||||
|
indices[index++] = SO_END_FACE_INDEX;
|
||||||
|
insEdgeVec(EdgeMap, nIdx1, nIdx2);
|
||||||
|
insEdgeVec(EdgeMap, nIdx2, nIdx3);
|
||||||
|
vFaceElementIdx[indexIdx++] = ElemFold(facesHelper[l].ElementNumber,2);
|
||||||
|
indices[index++] = nIdx3;
|
||||||
|
indices[index++] = nIdx4;
|
||||||
|
indices[index++] = nIdx5;
|
||||||
|
indices[index++] = SO_END_FACE_INDEX;
|
||||||
|
insEdgeVec(EdgeMap, nIdx3, nIdx4);
|
||||||
|
insEdgeVec(EdgeMap, nIdx4, nIdx5);
|
||||||
|
vFaceElementIdx[indexIdx++] = ElemFold(facesHelper[l].ElementNumber,2);
|
||||||
|
indices[index++] = nIdx5;
|
||||||
|
indices[index++] = nIdx6;
|
||||||
|
indices[index++] = nIdx7;
|
||||||
|
indices[index++] = SO_END_FACE_INDEX;
|
||||||
|
insEdgeVec(EdgeMap, nIdx5, nIdx6);
|
||||||
|
insEdgeVec(EdgeMap, nIdx6, nIdx7);
|
||||||
|
vFaceElementIdx[indexIdx++] = ElemFold(facesHelper[l].ElementNumber,2);
|
||||||
|
indices[index++] = nIdx7;
|
||||||
|
indices[index++] = nIdx1;
|
||||||
|
indices[index++] = nIdx3;
|
||||||
|
indices[index++] = SO_END_FACE_INDEX;
|
||||||
|
indices[index++] = nIdx3;
|
||||||
|
indices[index++] = nIdx5;
|
||||||
|
indices[index++] = nIdx7;
|
||||||
|
indices[index++] = SO_END_FACE_INDEX;
|
||||||
|
break; }
|
||||||
|
case 4: { // penta15 volume: face 4, 8-node quadrangle
|
||||||
|
int nIdx0 = mapNodeIndex[facesHelper[l].Element->GetNode(1)];
|
||||||
|
int nIdx1 = mapNodeIndex[facesHelper[l].Element->GetNode(13)];
|
||||||
|
int nIdx2 = mapNodeIndex[facesHelper[l].Element->GetNode(4)];
|
||||||
|
int nIdx3 = mapNodeIndex[facesHelper[l].Element->GetNode(10)];
|
||||||
|
int nIdx4 = mapNodeIndex[facesHelper[l].Element->GetNode(5)];
|
||||||
|
int nIdx5 = mapNodeIndex[facesHelper[l].Element->GetNode(14)];
|
||||||
|
int nIdx6 = mapNodeIndex[facesHelper[l].Element->GetNode(2)];
|
||||||
|
int nIdx7 = mapNodeIndex[facesHelper[l].Element->GetNode(7)];
|
||||||
|
indices[index++] = nIdx7;
|
||||||
|
indices[index++] = nIdx0;
|
||||||
|
indices[index++] = nIdx1;
|
||||||
|
indices[index++] = SO_END_FACE_INDEX;
|
||||||
|
insEdgeVec(EdgeMap, nIdx7, nIdx0);
|
||||||
|
insEdgeVec(EdgeMap, nIdx0, nIdx1);
|
||||||
|
vFaceElementIdx[indexIdx++] = ElemFold(facesHelper[l].ElementNumber,3);
|
||||||
|
indices[index++] = nIdx1;
|
||||||
|
indices[index++] = nIdx2;
|
||||||
|
indices[index++] = nIdx3;
|
||||||
|
indices[index++] = SO_END_FACE_INDEX;
|
||||||
|
insEdgeVec(EdgeMap, nIdx1, nIdx2);
|
||||||
|
insEdgeVec(EdgeMap, nIdx2, nIdx3);
|
||||||
|
vFaceElementIdx[indexIdx++] = ElemFold(facesHelper[l].ElementNumber,3);
|
||||||
|
indices[index++] = nIdx3;
|
||||||
|
indices[index++] = nIdx4;
|
||||||
|
indices[index++] = nIdx5;
|
||||||
|
indices[index++] = SO_END_FACE_INDEX;
|
||||||
|
insEdgeVec(EdgeMap, nIdx3, nIdx4);
|
||||||
|
insEdgeVec(EdgeMap, nIdx4, nIdx5);
|
||||||
|
vFaceElementIdx[indexIdx++] = ElemFold(facesHelper[l].ElementNumber,3);
|
||||||
|
indices[index++] = nIdx5;
|
||||||
|
indices[index++] = nIdx6;
|
||||||
|
indices[index++] = nIdx7;
|
||||||
|
indices[index++] = SO_END_FACE_INDEX;
|
||||||
|
insEdgeVec(EdgeMap, nIdx5, nIdx6);
|
||||||
|
insEdgeVec(EdgeMap, nIdx6, nIdx7);
|
||||||
|
vFaceElementIdx[indexIdx++] = ElemFold(facesHelper[l].ElementNumber,3);
|
||||||
|
indices[index++] = nIdx7;
|
||||||
|
indices[index++] = nIdx1;
|
||||||
|
indices[index++] = nIdx3;
|
||||||
|
indices[index++] = SO_END_FACE_INDEX;
|
||||||
|
indices[index++] = nIdx3;
|
||||||
|
indices[index++] = nIdx5;
|
||||||
|
indices[index++] = nIdx7;
|
||||||
|
indices[index++] = SO_END_FACE_INDEX;
|
||||||
|
break; }
|
||||||
|
case 5: { // penta15 volume: face 5, 8-node quadrangle
|
||||||
|
int nIdx0 = mapNodeIndex[facesHelper[l].Element->GetNode(2)];
|
||||||
|
int nIdx1 = mapNodeIndex[facesHelper[l].Element->GetNode(14)];
|
||||||
|
int nIdx2 = mapNodeIndex[facesHelper[l].Element->GetNode(5)];
|
||||||
|
int nIdx3 = mapNodeIndex[facesHelper[l].Element->GetNode(11)];
|
||||||
|
int nIdx4 = mapNodeIndex[facesHelper[l].Element->GetNode(3)];
|
||||||
|
int nIdx5 = mapNodeIndex[facesHelper[l].Element->GetNode(12)];
|
||||||
|
int nIdx6 = mapNodeIndex[facesHelper[l].Element->GetNode(0)];
|
||||||
|
int nIdx7 = mapNodeIndex[facesHelper[l].Element->GetNode(8)];
|
||||||
|
indices[index++] = nIdx7;
|
||||||
|
indices[index++] = nIdx0;
|
||||||
|
indices[index++] = nIdx1;
|
||||||
|
indices[index++] = SO_END_FACE_INDEX;
|
||||||
|
insEdgeVec(EdgeMap, nIdx7, nIdx0);
|
||||||
|
insEdgeVec(EdgeMap, nIdx0, nIdx1);
|
||||||
|
vFaceElementIdx[indexIdx++] = ElemFold(facesHelper[l].ElementNumber,4);
|
||||||
|
indices[index++] = nIdx1;
|
||||||
|
indices[index++] = nIdx2;
|
||||||
|
indices[index++] = nIdx3;
|
||||||
|
indices[index++] = SO_END_FACE_INDEX;
|
||||||
|
insEdgeVec(EdgeMap, nIdx1, nIdx2);
|
||||||
|
insEdgeVec(EdgeMap, nIdx2, nIdx3);
|
||||||
|
vFaceElementIdx[indexIdx++] = ElemFold(facesHelper[l].ElementNumber,4);
|
||||||
|
indices[index++] = nIdx3;
|
||||||
|
indices[index++] = nIdx4;
|
||||||
|
indices[index++] = nIdx5;
|
||||||
|
indices[index++] = SO_END_FACE_INDEX;
|
||||||
|
insEdgeVec(EdgeMap, nIdx3, nIdx4);
|
||||||
|
insEdgeVec(EdgeMap, nIdx4, nIdx5);
|
||||||
|
vFaceElementIdx[indexIdx++] = ElemFold(facesHelper[l].ElementNumber,4);
|
||||||
|
indices[index++] = nIdx5;
|
||||||
|
indices[index++] = nIdx6;
|
||||||
|
indices[index++] = nIdx7;
|
||||||
|
indices[index++] = SO_END_FACE_INDEX;
|
||||||
|
insEdgeVec(EdgeMap, nIdx5, nIdx6);
|
||||||
|
insEdgeVec(EdgeMap, nIdx6, nIdx7);
|
||||||
|
vFaceElementIdx[indexIdx++] = ElemFold(facesHelper[l].ElementNumber,4);
|
||||||
|
indices[index++] = nIdx7;
|
||||||
|
indices[index++] = nIdx1;
|
||||||
|
indices[index++] = nIdx3;
|
||||||
|
indices[index++] = SO_END_FACE_INDEX;
|
||||||
|
indices[index++] = nIdx3;
|
||||||
|
indices[index++] = nIdx5;
|
||||||
|
indices[index++] = nIdx7;
|
||||||
|
indices[index++] = SO_END_FACE_INDEX;
|
||||||
|
break; }
|
||||||
|
default: assert(0);
|
||||||
|
}
|
||||||
|
break;
|
||||||
// 20 nodes
|
// 20 nodes
|
||||||
case 20:
|
case 20:
|
||||||
// hexa20 volume, six 8-node qudrangles
|
// hexa20 volume, six 8-node qudrangles
|
||||||
Base::Console().Log(" %f: Start build up triangle vector for 20 nodes object\n",Base::TimeInfo::diffTimeF(Start,Base::TimeInfo()));
|
Base::Console().Log(" %f: Start build up triangle vector for 20 nodes object\n",Base::TimeInfo::diffTimeF(Start,Base::TimeInfo()));
|
||||||
Base::Console().Log(" NumNodes:%i\n",facesHelper[l].Element->NbNodes());
|
Base::Console().Log(" NumNodes:%i\n",facesHelper[l].Element->NbNodes());
|
||||||
switch(facesHelper[l].FaceNo){
|
switch(facesHelper[l].FaceNo){
|
||||||
case 1: { // hexa20 volume: face 1, 8-node quadrangle
|
case 1: { // hexa20 volume: face 1
|
||||||
Base::Console().Log(" %f: Start build up triangle vector for hexa20 --> face1\n",Base::TimeInfo::diffTimeF(Start,Base::TimeInfo()));
|
Base::Console().Log(" %f: Start build up triangle vector for hexa20 --> face1\n",Base::TimeInfo::diffTimeF(Start,Base::TimeInfo()));
|
||||||
Base::Console().Log(" NumNodes:%i\n",facesHelper[l].Element->NbNodes());
|
Base::Console().Log(" NumNodes:%i\n",facesHelper[l].Element->NbNodes());
|
||||||
int nIdx0 = mapNodeIndex[facesHelper[l].Element->GetNode(0)];
|
int nIdx0 = mapNodeIndex[facesHelper[l].Element->GetNode(0)];
|
||||||
|
|
Loading…
Reference in New Issue
Block a user