49void Foam::blockEdges::projectEdge::findNearest
72 near = boundaryNear[0];
73 constraint = boundaryConstraint[0];
85Foam::blockEdges::projectEdge::projectEdge
103 if (surfaces_[i] == -1)
106 <<
"Cannot find surface " <<
names[i] <<
" in geometry"
124 pointConstraint constraint;
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++)
175 List<pointConstraint> constraints(lambdas.
size());
188 if (lambdas[0] < SMALL)
192 if (lambdas.
last() > 1.0-SMALL)
194 points.last() = lastPoint();
201 debugStr().writeLine(start[i],
points[i]);
209 projLambdas[0] = 0.0;
210 for (label i = 1; i <
points.size(); i++)
214 projLambdas /= projLambdas.last();
216 linearInterpolationWeights interpolator(projLambdas);
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)
262 debugStr().writeLine(
points[i], predicted);
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)....
A 1D array of objects of type <T>, where the size of the vector is known and used for subscript bound...
void resize(const label len)
Adjust allocated size of list.
An OFstream that keeps track of vertices and provides convenience output methods for OBJ files.
void size(const label n)
Older name for setAddressableSize.
T & last()
Access last element of the list, position [size()-1].
Pointer management similar to std::unique_ptr, with some additional methods and type checking.
void reset(T *p=nullptr) 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.
blockEdge(const pointField &points, const label from, const label to)
Construct from components.
point linearPosition(const scalar lambda) const
The point position in the straight line.
const point & lastPoint() const
The location of the last point.
label start() const noexcept
Index of start (first) 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.
virtual point position(const scalar) const
The point position corresponding to the curve parameter.
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.
static tmp< T > New(Args &&... args)
Construct tmp with forwarding arguments.
#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.
A namespace for various blockEdge types.
Namespace for handling debugging switches.
List< word > wordList
List of word.
List< label > labelList
A List of labels.
messageStream Info
Information stream (stdout output on master, null elsewhere).
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)
Field< vector > vectorField
Specialisation of Field<T> for vector.
IOerror FatalIOError
Error stream (stdout output on all processes), with additional 'FOAM FATAL IO ERROR' header text and ...
vector point
Point is a vector.
dimensioned< Type > sum(const DimensionedField< Type, GeoMesh > &f1, const label comm)
static constexpr const zero Zero
Global zero (0).
word name(const expressions::valueTypeCode typeCode)
A word representation of a valueTypeCode. Empty for expressions::valueTypeCode::INVALID.
prefixOSstream Pout
OSstream wrapped stdout (std::cout) with parallel prefix.
vectorField pointField
pointField is a vectorField.
errorManipArg< error, int > exit(error &err, const int errNo=1)
List< scalar > scalarList
List of scalar.
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.