Go to the documentation of this file.
49 void Foam::blockEdges::projectEdge::findNearest
53 pointConstraint& constraint
61 List<pointConstraint> boundaryConstraint(1);
72 near = boundaryNear[0];
73 constraint = boundaryConstraint[0];
78 constraint = pointConstraint();
85 Foam::blockEdges::projectEdge::projectEdge
98 surfaces_.resize(
names.size());
101 surfaces_[i] = geometry_.findSurfaceID(
names[i]);
103 if (surfaces_[i] == -1)
106 <<
"Cannot find surface " <<
names[i] <<
" in geometry"
125 findNearest(start, near, constraint);
136 static label eIter = 0;
145 Info<<
"Writing lines from straight-line start points"
146 <<
" to projected points to " << debugStr().name() <<
endl;
151 auto&
points = tpoints.ref();
153 const scalar distSqr =
Foam::magSqr(lastPoint()-firstPoint());
163 constexpr label maxIter = 10;
166 constexpr scalar relTol = 0.1;
167 constexpr scalar absTol = 1
e-4;
169 scalar initialResidual = 0.0;
171 for (label iter = 0; iter < maxIter; iter++)
188 if (lambdas[0] < SMALL)
192 if (lambdas.last() > 1.0-SMALL)
194 points.last() = lastPoint();
209 projLambdas[0] = 0.0;
210 for (label i = 1; i <
points.size(); i++)
214 projLambdas /= projLambdas.last();
223 for (label i = 1; i <
points.size() - 1; i++)
225 interpolator.
valueWeights(lambdas[i], indices, weights);
230 predicted += weights[indexi]*
points[indices[indexi]];
232 residual[i] = predicted-
points[i];
235 scalar scalarResidual =
sum(
mag(residual));
239 Pout<<
"Iter:" << iter <<
" initialResidual:" << initialResidual
240 <<
" residual:" << scalarResidual <<
endl;
243 if (scalarResidual < absTol*0.5*lambdas.size())
249 initialResidual = scalarResidual;
251 else if (scalarResidual/initialResidual < relTol)
int debug
Static debugging option.
vectorField pointField
pointField is a vectorField.
Field< scalar > scalarField
Specialisation of Field<T> for scalar.
OFstream that keeps track of vertices.
A class for managing temporary objects.
static constexpr const zero Zero
Global zero (0)
Accumulates point constraints through successive applications of the applyConstraint function.
Ostream & endl(Ostream &os)
Add newline and flush stream.
prefixOSstream Pout
OSstream wrapped stdout (std::cout) with parallel prefix.
Define a curved edge that is parameterized for 0<lambda<1 between the start/end points.
const point & lastPoint() const
The location of the last point.
#define forAll(list, i)
Loop across all elements in list.
dimensioned< typename typeOfMag< Type >::type > magSqr(const dimensioned< Type > &dt)
#define NotImplemented
Issue a FatalErrorIn for a function not currently implemented.
defineTypeNameAndDebug(arcEdge, 0)
addToRunTimeSelectionTable(blockEdge, arcEdge, Istream)
An Istream is an abstract base class for all input systems (streams, files, token lists etc)....
messageStream Info
Information stream (stdout output on master, null elsewhere)
point linearPosition(const scalar lambda) const
The point position in the straight line.
A list of keyword definitions, which are a keyword followed by a number of values (eg,...
virtual bool valueWeights(const scalar t, labelList &indices, scalarField &weights) const
Calculate weights and indices to calculate t from samples.
dimensionedScalar lambda("lambda", dimTime/sqr(dimLength), laminarTransport)
Macros for easy insertion into run-time selection tables.
errorManipArg< error, int > exit(error &err, const int errNo=1)
void reset(autoPtr< T > &&other) noexcept
Delete managed object and set to new given pointer.
Pointer management similar to std::unique_ptr, with some additional methods and type checking.
line< point, const point & > linePointRef
A line using referred points.
const point & firstPoint() const
The location of the first point.
Container for searchableSurfaces. The collection is specified as a dictionary. For example,...
dimensioned< typename typeOfMag< Type >::type > mag(const dimensioned< Type > &dt)
virtual scalar length() const
The length of the edge.
const dimensionedScalar e
Elementary charge.
static tmp< T > New(Args &&... args)
Construct tmp of T with forwarding arguments.
dimensioned< Type > sum(const DimensionedField< Type, GeoMesh > &df)
virtual point position(const scalar) const
The point position corresponding to the curve parameter.
word name(const expressions::valueTypeCode typeCode)
A word representation of a valueTypeCode. Empty for INVALID.
#define FatalIOErrorInFunction(ios)
Report an error message using Foam::FatalIOError.
vector point
Point is a vector.
List< word > names(const UPtrList< T > &list, const UnaryMatchPredicate &matcher)
static void findNearest(const PtrList< searchableSurface > &, const labelList &surfacesToTest, const pointField &, const scalarField &nearestDistSqr, labelList &surfaces, List< pointIndexHit > &)
Find nearest. Return -1 (and a miss()) or surface and nearest.