70 if (surfaces_[i] == -1)
73 <<
"Cannot find surface " << names[i] <<
" in geometry"
77 if (isA<searchableExtrudedCircle>(geometry_[surfaces_[i]]))
79 Info<<
type() <<
" : Using curved surface "
80 << geometry_[surfaces_[i]].name()
81 <<
" to predict starting points." <<
endl;
101 static label eIter = 0;
110 Info<<
"Writing lines from straight-line start points"
111 <<
" to projected points to " << debugStr().name() <<
endl;
116 auto&
points = tpoints.ref();
118 const scalar distSqr =
Foam::magSqr(lastPoint()-firstPoint());
130 if (isA<searchableExtrudedCircle>(geometry_[surfaces_[i]]))
133 refCast<const searchableExtrudedCircle>
135 geometry_[surfaces_[i]]
138 s.findParametricNearest
148 if (nearInfo[i].hit())
150 points[i] = nearInfo[i].hitPoint();
161 constexpr label maxIter = 10;
164 constexpr scalar relTol = 0.1;
165 constexpr scalar absTol = 1
e-4;
167 scalar initialResidual = 0.0;
169 for (label iter = 0; iter < maxIter; iter++)
186 if (lambdas[0] < SMALL)
190 if (lambdas.
last() > 1.0-SMALL)
192 points.last() = lastPoint();
207 projLambdas[0] = 0.0;
208 for (label i = 1; i <
points.size(); i++)
212 projLambdas /= projLambdas.
last();
221 for (label i = 1; i <
points.size() - 1; i++)
223 interpolator.
valueWeights(lambdas[i], indices, weights);
228 predicted += weights[indexi]*
points[indices[indexi]];
230 residual[i] = predicted-
points[i];
233 scalar scalarResidual =
sum(
mag(residual));
237 Pout<<
"Iter:" << iter <<
" initialResidual:" << initialResidual
238 <<
" residual:" << scalarResidual <<
endl;
241 if (scalarResidual < absTol*0.5*lambdas.
size())
247 initialResidual = scalarResidual;
249 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.
Defines the edge from the projection onto a surface (single surface) or intersection of two surfaces.
virtual scalar length() const
The length of the curve.
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.
static const complex max
complex (VGREAT,VGREAT)
Searching on edgeMesh with constant radius.
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.
gmvFile<< "tracers "<< particles.size()<< nl;for(const passiveParticle &p :particles){ gmvFile<< p.position().x()<< " ";}gmvFile<< nl;for(const passiveParticle &p :particles){ gmvFile<< p.position().y()<< " ";}gmvFile<< nl;for(const passiveParticle &p :particles){ gmvFile<< p.position().z()<< " ";}gmvFile<< nl;forAll(lagrangianScalarNames, i){ word name=lagrangianScalarNames[i];IOField< scalar > s(IOobject(name, runTime.timeName(), cloud::prefix, mesh, IOobject::MUST_READ, IOobject::NO_WRITE))
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)
fileName::Type type(const fileName &name, const bool followLink=true)
Return the file type: DIRECTORY or FILE, normally following symbolic links.
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)
#define forAll(list, i)
Loop across all elements in list.
Unit conversion functions.