Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026 #include <OpenFOAM/primitiveMesh.H>
00027
00028
00029
00030 bool Foam::primitiveMesh::checkEdgeLength
00031 (
00032 const bool report,
00033 const scalar reportLenSqr,
00034 labelHashSet* setPtr
00035 ) const
00036 {
00037 const pointField& points = this->points();
00038 const faceList& faces = this->faces();
00039
00040 scalar minLenSqr = sqr(GREAT);
00041 scalar maxLenSqr = -sqr(GREAT);
00042
00043 labelHashSet smallEdgeSet(nPoints()/100);
00044
00045 forAll(faces, faceI)
00046 {
00047 const face& f = faces[faceI];
00048
00049 forAll(f, fp)
00050 {
00051 label fp1 = f.fcIndex(fp);
00052
00053 scalar magSqrE = magSqr(points[f[fp]] - points[f[fp1]]);
00054
00055 if (magSqrE < reportLenSqr)
00056 {
00057 smallEdgeSet.insert(f[fp]);
00058 smallEdgeSet.insert(f[fp1]);
00059 }
00060
00061 minLenSqr = min(minLenSqr, magSqrE);
00062 maxLenSqr = max(maxLenSqr, magSqrE);
00063 }
00064 }
00065
00066 reduce(minLenSqr, minOp<scalar>());
00067 reduce(maxLenSqr, maxOp<scalar>());
00068
00069 label nSmall = smallEdgeSet.size();
00070 reduce(nSmall, sumOp<label>());
00071
00072 if (setPtr)
00073 {
00074 setPtr->transfer(smallEdgeSet);
00075 }
00076
00077 if (nSmall > 0)
00078 {
00079 if (report)
00080 {
00081 Info<< " *Edges too small, min/max edge length = "
00082 << sqrt(minLenSqr) << " " << sqrt(maxLenSqr)
00083 << ", number too small: " << nSmall << endl;
00084 }
00085
00086 return true;
00087 }
00088 else
00089 {
00090 if (report)
00091 {
00092 Info<< " Min/max edge length = "
00093 << sqrt(minLenSqr) << " " << sqrt(maxLenSqr)
00094 << " OK." << endl;
00095 }
00096
00097 return false;
00098 }
00099 }
00100
00101
00102