|
[Sponsors] |
How to get access to normalVectors of specified faces in patch |
|
LinkBack | Thread Tools | Search this Thread | Display Modes |
April 27, 2012, 20:59 |
How to get access to normalVectors of specified faces in patch
|
#1 |
New Member
Tilo
Join Date: Mar 2011
Posts: 1
Rep Power: 0 |
Hi at all,
my aim is to calculate the averaged normal vector of specified regions of my surface. Therefore I tried the following: /************************************************** ************************************************** *****/ const fileName inputSTL = "plate3x3x0.6x0.6.stl"; // a plate is only a simple example, afterwards there will be curved surfaces triSurface surface(inputSTL); Field<point> pointsSTLlocal(surface.localPoints());//triSurface.localPoints(): return pointField of points in patch Foam::List<Foam::labelledTri> faceList(surface.localFaces());//triSurface.localFaces(): return patch faces addressing into local point list // Field<point> allNormalVectors(oberflaeche.faceNormals()); //triSurface.faceNormals(): return face normals for patch /* --> I had a try with the above line too, but I only could output every normalvektor of the whole patch, not for specified faces. */ forAll(faceList, i) { Info << "faceList[i][0]: " << faceList[i][0] << endl; Info << "faceList[i][1]: " << faceList[i][1] << endl; Info << "faceList[i][2]: " << faceList[i][2] << endl; triFace triangle(faceList[i][0], faceList[i][1], faceList[i][2]); Info << "triangle: " << triangle << endl; Info << "pointsSTLlocal[faceList[i][0]]: " << pointsSTLlocal[faceList[i][0]] << endl; Info << "pointsSTLlocal[faceList[i][1]]: " << pointsSTLlocal[faceList[i][1]] << endl; Info << "pointsSTLlocal[faceList[i][2]]: " << pointsSTLlocal[faceList[i][2]] << endl; label number = 3; List<point> liste(number); forAll(liste, iterator) { liste[iterator] = pointsSTLlocal[faceList[i][iterator]]; } Field<point> trianglePoints(liste); Info << "Field<point> trianglePoints.size(): " << trianglePoints.size() << endl; /* --> another try, but doesn't work too: Field<point> trianglePoints(); trianglePoints[0] = pointsSTLlocal[faceList[i][0]]; trianglePoints[1] = pointsSTLlocal[faceList[i][1]]; trianglePoints[2] = pointsSTLlocal[faceList[i][2]]; */ forAll(trianglePoints, j) { Info << "trianglePoints[j]: " << trianglePoints[j] << endl; } Foam::vector normalVector = vector::zero; // Info << "normalVector::zero: " << normalVector << endl; // I think here should be the problem, maybe something with the pointField must be wrong: normalVector = triangle.normal(trianglePoints); Info << "normalVector: " << normalVector << endl; /************************************************** ************************************************** *****/ After running the code I get the following error message: /************************************************** ************************************************** *****/ tilo@ubuntu:~/OpenFOAM/tilo-2.1.0/run/testSkript$ wclean tilo@ubuntu:~/OpenFOAM/tilo-2.1.0/run/testSkript$ wmake Making dependency list for source file testSkript.C SOURCE=testSkript.C ; g++ -m32 -Dlinux -DWM_DP -Wall -Wextra -Wno-unused-parameter -Wold-style-cast -O3 -DNoRepository -ftemplate-depth-100 - I/opt/openfoam210/src/surfMesh/lnInclude -I/opt/openfoam210/src/meshTools/lnInclude -I/opt/openfoam210/src/triSurface/lnInclude -DFULLDEBUG -g -O0 -IlnInclude -I. - I/opt/openfoam210/src/OpenFOAM/lnInclude -I/opt/openfoam210/src/OSspecific/POSIX/lnInclude -fPIC -c $SOURCE -o Make/linuxGccDPOpt/testSkript.o g++ -m32 -Dlinux -DWM_DP -Wall -Wextra -Wno-unused-parameter -Wold-style-cast -O3 -DNoRepository -ftemplate-depth-100 -I/opt/openfoam210/src/surfMesh/lnInclude - I/opt/openfoam210/src/meshTools/lnInclude -I/opt/openfoam210/src/triSurface/lnInclude -DFULLDEBUG -g -O0 -IlnInclude -I. -I/opt/openfoam210/src/OpenFOAM/lnInclude - I/opt/openfoam210/src/OSspecific/POSIX/lnInclude -fPIC -Xlinker --add-needed -Xlinker --no-as-needed Make/linuxGccDPOpt/testSkript.o - L/opt/openfoam210/platforms/linuxGccDPOpt/lib \ -lsurfMesh -ltriSurface -lmeshTools -lOpenFOAM -ldl -lm -o /home/tilo/OpenFOAM/tilo-2.1.0/platforms/linuxGccDPOpt/bin/testDelle tilo@ubuntu:~/OpenFOAM/tilo-2.1.0/run/testSkript$ testDelle faceList[i][0]: 0 faceList[i][1]: 1 faceList[i][2]: 2 triangle: (0 1 2) pointsSTLlocal[faceList[i][0]]: (0 0 0) pointsSTLlocal[faceList[i][1]]: (0.6 0 0) pointsSTLlocal[faceList[i][2]]: (0.6 0.6 0) Field<point> trianglePoints.size(): 3 trianglePoints[j]: (0 0 0) trianglePoints[j]: (0.6 0 0) trianglePoints[j]: (0.6 0.6 0) normalVector: (0 0 0.18) 1faceList[i][0]: 0 faceList[i][1]: 3 faceList[i][2]: 2 triangle: (0 3 2) pointsSTLlocal[faceList[i][0]]: (0 0 0) pointsSTLlocal[faceList[i][1]]: (0 0.6 0) pointsSTLlocal[faceList[i][2]]: (0.6 0.6 0) Field<point> trianglePoints.size(): 3 trianglePoints[j]: (0 0 0) trianglePoints[j]: (0 0.6 0) trianglePoints[j]: (0.6 0.6 0) --> FOAM FATAL ERROR: index 3 out of range 0 ... 2 From function UList<T>::checkIndex(const label) in file /opt/openfoam210/src/OpenFOAM/lnInclude/UListI.H at line 109. FOAM aborting #0 Foam::error:rintStack(Foam::Ostream&) in "/opt/openfoam210/platforms/linuxGccDPOpt/lib/libOpenFOAM.so" #1 Foam::error::abort() in "/opt/openfoam210/platforms/linuxGccDPOpt/lib/libOpenFOAM.so" #2 Foam::Ostream& Foam:perator<< <Foam::error>(Foam::Ostream&, Foam::errorManip<Foam::error>) at /opt/openfoam210/src/OpenFOAM/lnInclude/errorManip.H:85 #3 at /opt/openfoam210/src/OpenFOAM/lnInclude/UListI.H:113 #4 at /opt/openfoam210/src/OpenFOAM/lnInclude/UListI.H:200 #5 at /opt/openfoam210/src/OpenFOAM/lnInclude/triFaceI.H:187 #6 at testSkript.C:105 #7 __libc_start_main in "/lib/tls/i686/cmov/libc.so.6" #8 in "/home/tilo/OpenFOAM/tilo-2.1.0/platforms/linuxGccDPOpt/bin/testDelle" Abgebrochen tilo@ubuntu:~/OpenFOAM/tilo-2.1.0/run/testSkript$ /************************************************** ************************************************** *****/ As seen in the error message, the program starts in the right way (I hope so), but then an index-error appears. I thought that the "List<point> liste(number);" has the wrong size, but I think it couldn't be, because it is build new in every iteration. Maybe somebody can help me, or tell me how to get access to normal vectors of specified faces. Thanks in advance. |
|
Tags |
access, face, normal vector, trisurface |
|
|
Similar Threads | ||||
Thread | Thread Starter | Forum | Replies | Last Post |
[snappyHexMesh] No layers in a small gap | bobburnquist | OpenFOAM Meshing & Mesh Conversion | 6 | August 26, 2015 10:38 |
[snappyHexMesh] snappyHexMesh won't work - zeros everywhere! | sc298 | OpenFOAM Meshing & Mesh Conversion | 2 | March 27, 2011 22:11 |
[snappyHexMesh] external flow with snappyHexMesh | chelvistero | OpenFOAM Meshing & Mesh Conversion | 11 | January 15, 2010 20:43 |
[Gmsh] Import gmsh msh to Foam | adorean | OpenFOAM Meshing & Mesh Conversion | 24 | April 27, 2005 09:19 |
Multicomponent fluid | Andrea | CFX | 2 | October 11, 2004 06:12 |