43 << typeName <<
" interpolation is only defined for vector fields" 57 using namespace constant::mathematical;
67 "volPointInterpolateWallModified(" + psi.
name() +
')',
93 psi.
name() +
"Extrapolated",
116 const face&
f = patch[patchFacei];
121 pointNormals[f[i]] +=
n;
122 pointCount[f[i]] += 1;
127 syncTools::syncPointList
135 syncTools::syncPointList
143 pointNormals /=
max(pointCount, small);
150 scalar maxVHatDotN = - vGreat;
154 if (isA<wallPolyPatch>(patch))
158 const label facei = patch.
start() + patchFacei;
159 const face&
f = patch[patchFacei];
161 for (
label i = 1; i < f.
size() - 1; ++ i)
173 const label pointi = tri[triPointI];
175 const vector& v = psip[pointi];
178 maxVHatDotN =
max(maxVHatDotN, vHatDotN);
183 const scalar
C = v &
n,
S = (v ^ a) & n;
185 const scalar theta =
atan2(C, - S);
187 theta0[pointi] =
max(theta0[pointi], theta);
188 theta1[pointi] =
min(theta1[pointi], theta +
pi);
198 Info<< typeName <<
": Maximum in-to-wall dot product before = " 199 << maxVHatDotN <<
endl;
202 syncTools::syncPointList
210 syncTools::syncPointList
229 if (isA<wallPolyPatch>(patch))
237 if (theta0[pointi] <= 0 && theta1[pointi] >= 0)
242 if (theta0[pointi] >= theta1[pointi])
249 theta0[pointi] > 0 ? theta0[pointi] : theta1[pointi];
251 const scalar
c =
cos(theta),
s =
sin(theta);
253 const scalar scale =
max(c, 0);
259 theta0[pointi] = theta1[pointi] = 0;
268 maxVHatDotN = - vGreat;
273 if (isA<wallPolyPatch>(patch))
277 const label facei = patch.
start() + patchFacei;
278 const face&
f = patch[patchFacei];
280 for (
label i = 1; i < f.
size() - 1; ++ i)
292 const label pointi = tri[triPointI];
294 const vector& v = psip[pointi];
297 maxVHatDotN =
max(maxVHatDotN, vHatDotN);
305 Info<< typeName <<
": Maximum in-to-wall dot product after = " 306 << maxVHatDotN <<
endl;
const polyBoundaryMesh & boundaryMesh() const
Return boundary mesh.
Graphite solid properties.
#define forAll(list, i)
Loop across all elements in list.
layerAndWeight max(const layerAndWeight &a, const layerAndWeight &b)
const word & name() const
Return name.
autoPtr< CompressibleMomentumTransportModel > New(const volScalarField &rho, const volVectorField &U, const surfaceScalarField &phi, const viscosity &viscosity)
errorManipArg< error, int > exit(error &err, const int errNo=1)
A face is a list of labels corresponding to mesh vertices.
#define FatalErrorInFunction
Report an error message using Foam::FatalError.
const Boundary & boundaryField() const
Return const-reference to the boundary field.
dimensionedSymmTensor sqr(const dimensionedVector &dv)
interpolationCellPointWallModified(const GeometricField< Type, fvPatchField, volMesh > &psi)
Construct from components.
void size(const label)
Override size to be inconsistent with allocated storage.
wordList patchTypes(nPatches)
Ostream & endl(Ostream &os)
Add newline and flush stream.
GeometricField< vector, pointPatchField, pointMesh > pointVectorField
Generic GeometricField class.
Generic dimensioned Type class.
const Time & time() const
Return the top-level database.
const dimensionedScalar c
Speed of light in a vacuum.
const labelList & meshPoints() const
Return labelList of mesh points in patch. They are constructed.
virtual const pointField & points() const
Return raw points.
const dimensionSet & dimensions() const
Return dimensions.
gmvFile<< "tracers "<< particles.size()<< nl;forAllConstIter(Cloud< passiveParticle >, particles, iter){ gmvFile<< iter().position().x()<< " ";}gmvFile<< nl;forAllConstIter(Cloud< passiveParticle >, particles, iter){ gmvFile<< iter().position().y()<< " ";}gmvFile<< nl;forAllConstIter(Cloud< passiveParticle >, particles, iter){ gmvFile<< iter().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))
Form normalised(const VectorSpace< Form, Cmpt, Ncmpts > &vs)
dimensionedScalar cos(const dimensionedScalar &ds)
static const Identity< scalar > I
static word timeName(const scalar, const int precision=curPrecision_)
Return time name of given scalar time.
tmp< fvMatrix< Type > > S(const Pair< tmp< volScalarField::Internal >> &, const GeometricField< Type, fvPatchField, volMesh > &)
A triangular face using a FixedList of labels corresponding to mesh vertices.
As interpolationCellPoint, but with the point field modified on wall faces.
const volScalarField & psi
virtual const labelList & faceOwner() const
Return face owner.
void write(std::ostream &os, const bool binary, List< floatScalar > &fField)
Write floats ascii or binary.
layerAndWeight min(const layerAndWeight &a, const layerAndWeight &b)
Storage and named access for the indices of a tet which is part of the decomposition of a cell...
const Field< PointType > & faceNormals() const
Return face normals for patch.
dimensionedScalar sin(const dimensionedScalar &ds)
dimensionedScalar atan2(const dimensionedScalar &x, const dimensionedScalar &y)
const Mesh & mesh() const
Return mesh.
void reduce(const List< UPstream::commsStruct > &comms, T &Value, const BinaryOp &bop, const int tag, const label comm)
Internal & ref()
Return a reference to the dimensioned internal field.
label size() const
Return the number of elements in the UPtrList.
Given cell centre values and point (vertex) values decompose into tetrahedra and linear interpolate w...
Mesh data needed to do the Finite Volume discretisation.
label start() const
Return start label of this patch in the polyMesh face list.
void correctBoundaryConditions()
Correct boundary field.
A class for managing temporary objects.
A patch is a list of labels that address the faces in the global face list.
IOobject defines the attributes of an object for which implicit objectRegistry management is supporte...