From f40b5826d8ccd4615ed675292d87972c45f3ffeb Mon Sep 17 00:00:00 2001 From: Nicolas Marsic <nicolas.marsic@gmail.com> Date: Wed, 9 Oct 2013 11:13:21 +0000 Subject: [PATCH] Correcting a bug + mapUVWtoABC: now coherent with mapABCtoUVW --- FunctionSpace/ReferenceSpace.cpp | 28 +++++++++++++++++----------- 1 file changed, 17 insertions(+), 11 deletions(-) diff --git a/FunctionSpace/ReferenceSpace.cpp b/FunctionSpace/ReferenceSpace.cpp index b0dca7e3d3..7898a4caac 100644 --- a/FunctionSpace/ReferenceSpace.cpp +++ b/FunctionSpace/ReferenceSpace.cpp @@ -549,6 +549,9 @@ correctQuadFaceNodeIdx(size_t faceId, refIdx++; } + if(refIdx == 4) + throw Exception("Error in correctQuadFaceNodeIdx: vertex 0 not found"); + // Get opposite Node size_t opposite = refFaceNodeIdx[faceId][(refIdx + 2) % 4]; @@ -604,7 +607,7 @@ void ReferenceSpace::mapFromABCtoUVW(const MElement& element, // Get Index Permutation const size_t permutationIdx = getPermutationIdx(element); - // UVW node coordinate + // UVW node coordinate in ABC double** uvwNode = new double*[nVertex]; for(size_t i = 0; i < nVertex; i++) @@ -614,13 +617,13 @@ void ReferenceSpace::mapFromABCtoUVW(const MElement& element, element.getNode(i, uvwNode[UVWtoABCIndex[permutationIdx][i]][0], uvwNode[UVWtoABCIndex[permutationIdx][i]][1], - uvwNode[UVWtoABCIndex[permutationIdx][0]][2]); + uvwNode[UVWtoABCIndex[permutationIdx][i]][2]); // ABC (order 1) grad shape functions double* phiABC = new double[nVertex]; element.getShapeFunctions(a, b, c, phiABC, 1); - // Map From UVW to UVW // + // Map From ABC to UVW // uvw[0] = 0; for(size_t i = 0; i < nVertex; i++) uvw[0] += uvwNode[i][0] * phiABC[i]; @@ -661,34 +664,37 @@ void ReferenceSpace::mapFromABCtoXYZ(const MElement& element, void ReferenceSpace::mapFromUVWtoABC(const MElement& element, double u, double v, double w, double abc[3]) const{ - // ABC node coordinate + // Element Permutation Index + const size_t permutationIdx = getPermutationIdx(element); + + // ABC node coordinate in UVW double** abcNode = new double*[nVertex]; for(size_t i = 0; i < nVertex; i++) abcNode[i] = new double[3]; for(size_t i = 0; i < nVertex; i++) - element.getNode(i, abcNode[i][0], abcNode[i][1], abcNode[i][2]); + element.getNode(i, + abcNode[ABCtoUVWIndex[permutationIdx][i]][0], + abcNode[ABCtoUVWIndex[permutationIdx][i]][1], + abcNode[ABCtoUVWIndex[permutationIdx][i]][2]); // UVW (order 1) shape functions double* phiUVW = new double[nVertex]; element.getShapeFunctions(u, v, w, phiUVW, 1); - // Element Permutation Index - const size_t permutationIdx = getPermutationIdx(element); - // Map From UVW to ABC abc[0] = 0; for(size_t i = 0; i < nVertex; i++) - abc[0] += abcNode[i][0] * phiUVW[ABCtoUVWIndex[permutationIdx][i]]; + abc[0] += abcNode[i][0] * phiUVW[i]; abc[1] = 0; for(size_t i = 0; i < nVertex; i++) - abc[1] += abcNode[i][1] * phiUVW[ABCtoUVWIndex[permutationIdx][i]]; + abc[1] += abcNode[i][1] * phiUVW[i]; abc[2] = 0; for(size_t i = 0; i < nVertex; i++) - abc[2] += abcNode[i][2] * phiUVW[ABCtoUVWIndex[permutationIdx][i]]; + abc[2] += abcNode[i][2] * phiUVW[i]; // Free delete[] phiUVW; -- GitLab