diff --git a/applications/utilities/preProcessing/viewFactorsGen/Allwmake b/applications/utilities/preProcessing/viewFactorsGen/Allwmake new file mode 100755 index 0000000000..f0d604d4e3 --- /dev/null +++ b/applications/utilities/preProcessing/viewFactorsGen/Allwmake @@ -0,0 +1,19 @@ +#!/bin/sh +cd "${0%/*}" || exit # Run from this directory +. ${WM_PROJECT_DIR:?}/wmake/scripts/AllwmakeParseArguments # (error catching) +. ${WM_PROJECT_DIR:?}/wmake/scripts/have_cgal + +#------------------------------------------------------------------------------ +unset COMP_FLAGS LINK_FLAGS + +if have_cgal +then + echo " found CGAL -- enabling CGAL support." +else + echo " did not find CGAL -- disabling CGAL functionality" + export COMP_FLAGS="-DNO_CGAL" +fi + +wmake $targetType + +#------------------------------------------------------------------------------ diff --git a/applications/utilities/preProcessing/viewFactorsGen/Make/options b/applications/utilities/preProcessing/viewFactorsGen/Make/options index 6ac3efad51..08e64c8a7d 100644 --- a/applications/utilities/preProcessing/viewFactorsGen/Make/options +++ b/applications/utilities/preProcessing/viewFactorsGen/Make/options @@ -1,7 +1,8 @@ -include $(GENERAL_RULES)/cgal +include $(GENERAL_RULES)/cgal-header-only EXE_INC = \ -Wno-old-style-cast \ + $(COMP_FLAGS) \ ${CGAL_INC} \ -DCGAL_HEADER_ONLY \ -I$(LIB_SRC)/finiteVolume/lnInclude \ diff --git a/applications/utilities/preProcessing/viewFactorsGen/searchingEngine.H b/applications/utilities/preProcessing/viewFactorsGen/searchingEngine.H index 667470d3f2..df38326ded 100644 --- a/applications/utilities/preProcessing/viewFactorsGen/searchingEngine.H +++ b/applications/utilities/preProcessing/viewFactorsGen/searchingEngine.H @@ -25,7 +25,7 @@ dict.add("mergeDistance", SMALL); labelList triSurfaceToAgglom(5*nFineFaces); -triSurface localSurface = triangulate +const triSurface localSurface = triangulate ( patches, includePatches, @@ -36,8 +36,6 @@ triSurface localSurface = triangulate ); -// CGAL surface - distributedTriSurfaceMesh surfacesMesh ( IOobject @@ -53,32 +51,7 @@ distributedTriSurfaceMesh surfacesMesh dict ); + triSurfaceToAgglom.resize(surfacesMesh.size()); surfacesMesh.setField(triSurfaceToAgglom); - -const pointField& pts = surfacesMesh.localPoints(); - -std::list triangles; - -for (const auto& triLocal : surfacesMesh.localFaces()) -{ - point p1l = pts[triLocal[0]]; - point p2l = pts[triLocal[1]]; - point p3l = pts[triLocal[2]]; - - Point p1(p1l[0], p1l[1], p1l[2]); - Point p2(p2l[0], p2l[1], p2l[2]); - Point p3(p3l[0], p3l[1], p3l[2]); - - Triangle tri(p1, p2, p3); - - if (tri.is_degenerate()) - { - std::cout << tri << std::endl; - } - triangles.push_back(tri); -} - -// constructs AABB tree -Tree tree(triangles.begin(), triangles.end()); diff --git a/applications/utilities/preProcessing/viewFactorsGen/searchingEngine_CGAL.H b/applications/utilities/preProcessing/viewFactorsGen/searchingEngine_CGAL.H new file mode 100644 index 0000000000..667470d3f2 --- /dev/null +++ b/applications/utilities/preProcessing/viewFactorsGen/searchingEngine_CGAL.H @@ -0,0 +1,84 @@ +Random rndGen(653213); + +// Determine mesh bounding boxes: +List meshBb +( + 1, + treeBoundBox + ( + boundBox(coarseMesh.points(), false) + ).extend(rndGen, 1e-3) +); + +// Dummy bounds dictionary +dictionary dict; +dict.add("bounds", meshBb); +dict.add +( + "distributionType", + distributedTriSurfaceMesh::distributionTypeNames_ + [ + distributedTriSurfaceMesh::FROZEN + ] +); +dict.add("mergeDistance", SMALL); + +labelList triSurfaceToAgglom(5*nFineFaces); + +triSurface localSurface = triangulate +( + patches, + includePatches, + finalAgglom, + triSurfaceToAgglom, + globalNumbering, + coarsePatches +); + + +// CGAL surface + +distributedTriSurfaceMesh surfacesMesh +( + IOobject + ( + "wallSurface.stl", + runTime.constant(), // directory + "triSurface", // instance + runTime, // registry + IOobject::NO_READ, + IOobject::NO_WRITE + ), + localSurface, + dict +); + +triSurfaceToAgglom.resize(surfacesMesh.size()); + +surfacesMesh.setField(triSurfaceToAgglom); + +const pointField& pts = surfacesMesh.localPoints(); + +std::list triangles; + +for (const auto& triLocal : surfacesMesh.localFaces()) +{ + point p1l = pts[triLocal[0]]; + point p2l = pts[triLocal[1]]; + point p3l = pts[triLocal[2]]; + + Point p1(p1l[0], p1l[1], p1l[2]); + Point p2(p2l[0], p2l[1], p2l[2]); + Point p3(p3l[0], p3l[1], p3l[2]); + + Triangle tri(p1, p2, p3); + + if (tri.is_degenerate()) + { + std::cout << tri << std::endl; + } + triangles.push_back(tri); +} + +// constructs AABB tree +Tree tree(triangles.begin(), triangles.end()); diff --git a/applications/utilities/preProcessing/viewFactorsGen/shootRays.H b/applications/utilities/preProcessing/viewFactorsGen/shootRays.H index c738784b79..a5f808c392 100644 --- a/applications/utilities/preProcessing/viewFactorsGen/shootRays.H +++ b/applications/utilities/preProcessing/viewFactorsGen/shootRays.H @@ -1,23 +1,35 @@ +// All rays expressed as start face (local) index end end face (global) +// Pre-size by assuming a certain percentage is visible. + + +if (Pstream::master()) +{ + Info<< "\nShooting rays using distributedTriSurfaceMesh (no CGAL support)" + << endl; +} + + + // Maximum length for dynamicList const label maxDynListLength ( - viewFactorDict.getOrDefault