diff --git a/src/mesh/autoMesh/autoHexMesh/meshRefinement/meshRefinementGapRefine.C b/src/mesh/autoMesh/autoHexMesh/meshRefinement/meshRefinementGapRefine.C index cd9cd153db11a604643e76d3da5f598c86139003..8b05d6f39cd9912ff2a0e11bd0e8188b0d9cf170 100644 --- a/src/mesh/autoMesh/autoHexMesh/meshRefinement/meshRefinementGapRefine.C +++ b/src/mesh/autoMesh/autoHexMesh/meshRefinement/meshRefinementGapRefine.C @@ -881,7 +881,7 @@ Foam::label Foam::meshRefinement::generateRays || (mode == volumeType::INSIDE && s < -SMALL) ) { - //// Use vector through cell centre + //// Use single vector through cell centre //vector n(v/(magV+ROOTVSMALL)); // //start.append(cc); @@ -893,32 +893,83 @@ Foam::label Foam::meshRefinement::generateRays //gapSize2.append(nearGap); - // Shoot some rays through the cell centre - // X-direction: + //// Shoot some rays through the cell centre + //// X-direction: + //start.append(cc); + //end.append(cc+nearGap*vector(1, 0, 0)); + //gapSize.append(nearGap); + // + //start2.append(cc); + //end2.append(cc-nearGap*vector(1, 0, 0)); + //gapSize2.append(nearGap); + // + //// Y-direction: + //start.append(cc); + //end.append(cc+nearGap*vector(0, 1, 0)); + //gapSize.append(nearGap); + // + //start2.append(cc); + //end2.append(cc-nearGap*vector(0, 1, 0)); + //gapSize2.append(nearGap); + // + //// Z-direction: + //start.append(cc); + //end.append(cc+nearGap*vector(0, 0, 1)); + //gapSize.append(nearGap); + // + //start2.append(cc); + //end2.append(cc-nearGap*vector(0, 0, 1)); + //gapSize2.append(nearGap); + + + // 3 axes aligned with normal + + // Use vector through cell centre + vector n(v/(magV+ROOTVSMALL)); + + // Get second vector. Make sure it is sufficiently perpendicular + vector e2(1, 0, 0); + scalar s = (e2 & n); + if (mag(s) < 0.9) + { + e2 -= s*n; + } + else + { + e2 = vector(0, 1, 0); + e2 -= (e2 & n)*n; + } + e2 /= mag(e2); + + // Third vector + vector e3 = n ^ e2; + + + // Rays in first direction start.append(cc); - end.append(cc+nearGap*vector(1, 0, 0)); + end.append(cc+nearGap*n); gapSize.append(nearGap); start2.append(cc); - end2.append(cc-nearGap*vector(1, 0, 0)); + end2.append(cc-nearGap*n); gapSize2.append(nearGap); - // Y-direction: + // Rays in second direction start.append(cc); - end.append(cc+nearGap*vector(0, 1, 0)); + end.append(cc+nearGap*e2); gapSize.append(nearGap); start2.append(cc); - end2.append(cc-nearGap*vector(0, 1, 0)); + end2.append(cc-nearGap*e2); gapSize2.append(nearGap); - // Z-direction: + // Rays in third direction start.append(cc); - end.append(cc+nearGap*vector(0, 0, 1)); + end.append(cc+nearGap*e3); gapSize.append(nearGap); start2.append(cc); - end2.append(cc-nearGap*vector(0, 0, 1)); + end2.append(cc-nearGap*e3); gapSize2.append(nearGap); } }