49void Foam::blockEdges::projectEdge::findNearest
53 pointConstraint& constraint
61 List<pointConstraint> boundaryConstraint(1);
72 near = boundaryNear[0];
73 constraint = boundaryConstraint[0];
78 constraint = pointConstraint();
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)
Macros for easy insertion into run-time selection tables.
#define addToRunTimeSelectionTable(baseType, thisType, argNames)
Add to construction table with typeName as the key.
An Istream is an abstract base class for all input systems (streams, files, token lists etc)....
void resize(const label len)
Adjust allocated size of list.
OFstream that keeps track of vertices.
static autoPtr< Time > New()
Construct (dummy) Time - no functionObjects or libraries.
void size(const label n)
Older name for setAddressableSize.
T & last()
Return the last element of the list.
Pointer management similar to std::unique_ptr, with some additional methods and type checking.
void reset(autoPtr< T > &&other) noexcept
Delete managed object and set to new given pointer.
Define a curved edge that is parameterized for 0<lambda<1 between the start/end points.
point linearPosition(const scalar lambda) const
The point position in the straight line.
const point & lastPoint() const
The location of the last point.
const point & firstPoint() const
The location of the first point.
Defines the edge from the projection onto a surface (single surface) or intersection of two surfaces.
virtual scalar length() const
The length of the edge.
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.
Accumulates point constraints through successive applications of the applyConstraint function.
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.
Container for searchableSurfaces. The collection is specified as a dictionary. For example,...
label findSurfaceID(const word &name) const
Find index of surface. Return -1 if not found.
A class for managing temporary objects.
#define defineTypeNameAndDebug(Type, DebugSwitch)
Define the typeName and debug information.
#define NotImplemented
Issue a FatalErrorIn for a function not currently implemented.
#define FatalIOErrorInFunction(ios)
Report an error message using Foam::FatalIOError.
line< point, const point & > linePointRef
A line using referred points.
dimensioned< Type > sum(const DimensionedField< Type, GeoMesh > &df)
messageStream Info
Information stream (stdout output on master, null elsewhere)
vectorField pointField
pointField is a vectorField.
Field< scalar > scalarField
Specialisation of Field<T> for scalar.
Ostream & endl(Ostream &os)
Add newline and flush stream.
dimensioned< typename typeOfMag< Type >::type > mag(const dimensioned< Type > &dt)
static constexpr const zero Zero
Global zero (0)
word name(const expressions::valueTypeCode typeCode)
A word representation of a valueTypeCode. Empty for INVALID.
prefixOSstream Pout
OSstream wrapped stdout (std::cout) with parallel prefix.
errorManipArg< error, int > exit(error &err, const int errNo=1)
dimensioned< typename typeOfMag< Type >::type > magSqr(const dimensioned< Type > &dt)
dimensionedScalar lambda("lambda", dimTime/sqr(dimLength), laminarTransport)
#define forAll(list, i)
Loop across all elements in list.