52 result[2*i + 1] =
b[i];
104 return a.
layer >
b.layer ? a :
b;
110 return a.
layer <
b.layer ? a :
b;
121 namespace fvMeshStitchers
131 void Foam::fvMeshStitchers::moving::conformCorrectMeshPhi
140 if (isA<nonConformalFvPatch>(phiBf[nccPatchi].patch()))
142 const nonConformalFvPatch& ncFvp =
143 refCast<const nonConformalFvPatch>(phiBf[nccPatchi].patch());
145 const label origPatchi = ncFvp.origPatchID();
146 const fvPatch& origFvp = ncFvp.origPatch();
149 ncFvp.polyFaces() - origFvp.start();
151 for (
label i = 0; i <= phi.nOldTimes(); ++ i)
153 phi.oldTime(i).boundaryFieldRef()[origPatchi] +=
156 phi.oldTime(i).boundaryField()[nccPatchi],
161 phi.oldTime(i).boundaryFieldRef()[nccPatchi] = 0;
168 void Foam::fvMeshStitchers::moving::createNonConformalCorrectMeshPhiGeometry
176 const labelList origPatchIDs = ncb.allOrigPatchIDs();
177 const labelList errorPatchIDs = ncb.allErrorPatchIDs();
181 const label origPatchi = origPatchIDs[i];
182 const polyPatch& origPp = mesh().boundaryMesh()[origPatchi];
184 const label errorPatchi = errorPatchIDs[i];
186 polyFacesBf[errorPatchi] =
189 SfSf.boundaryFieldRef()[errorPatchi] =
192 (rootVSmall*origPp.faceNormals())(),
193 (-rootVSmall*origPp.faceNormals())()
195 CfSf.boundaryFieldRef()[errorPatchi] =
196 repeat(origPp.faceCentres());
207 labelList bFaceNSet(mesh().nFaces() - mesh().nInternalFaces(), 0);
210 const fvPatch& fvp = mesh().boundary()[nccPatchi];
212 if (!isA<nonConformalCoupledFvPatch>(fvp))
continue;
214 const nonConformalCoupledFvPatch& nccFvp =
215 refCast<const nonConformalCoupledFvPatch>(fvp);
217 if (!nccFvp.owner())
continue;
219 forAll(nccFvp, nccPatchFacei)
223 mesh().polyFacesBf()[nccPatchi][nccPatchFacei]
224 - mesh().nInternalFaces()
233 ncb.ownerOrigBoundaryEdgeMeshEdge().size(),
236 forAll(ncb.ownerOrigBoundaryEdgeMeshEdge(), ownerOrigBoundaryEdgei)
238 const label meshEdgei =
239 ncb.ownerOrigBoundaryEdgeMeshEdge()[ownerOrigBoundaryEdgei];
241 forAll(mesh().edgeFaces()[meshEdgei], edgeFacei)
243 const label facei = mesh().edgeFaces()[meshEdgei][edgeFacei];
245 if (mesh().isInternalFace(facei))
continue;
247 const label bFacei = facei - mesh().nInternalFaces();
249 if (bFaceNSet[bFacei])
251 ownerOrigBoundaryEdgeNSet[ownerOrigBoundaryEdgei] += 1;
258 ncb.ownerOrigBoundaryEdgeMeshEdge(),
259 ownerOrigBoundaryEdgeNSet,
267 forAll(ncb.ownerOrigBoundaryEdgeMeshEdge(), ownerOrigBoundaryEdgei)
269 if (ownerOrigBoundaryEdgeNSet[ownerOrigBoundaryEdgei] < 2)
continue;
271 const label meshEdgei =
272 ncb.ownerOrigBoundaryEdgeMeshEdge()[ownerOrigBoundaryEdgei];
274 forAll(mesh().edgeFaces()[meshEdgei], edgeFacei)
276 const label facei = mesh().edgeFaces()[meshEdgei][edgeFacei];
278 set.insert(mesh().faceOwner()[facei]);
280 if (facei < mesh().nInternalFaces())
282 set.insert(mesh().faceNeighbour()[facei]);
291 void Foam::fvMeshStitchers::moving::unconformInternalFaceCorrectMeshPhi
297 mesh().magSf().boundaryField();
305 boolList bFaceIsOwnerOrig(mesh().nFaces() - mesh().nInternalFaces(),
false);
306 scalarList bFaceNccMagSf(mesh().nFaces() - mesh().nInternalFaces(),
Zero);
309 const fvPatch& fvp = mesh().boundary()[nccPatchi];
311 if (!isA<nonConformalCoupledFvPatch>(fvp))
continue;
313 const nonConformalCoupledFvPatch& nccFvp =
314 refCast<const nonConformalCoupledFvPatch>(fvp);
316 if (!nccFvp.owner())
continue;
318 forAll(nccFvp, nccPatchFacei)
321 nccFvp.polyFaces()[nccPatchFacei] - mesh().nInternalFaces();
323 bFaceIsOwnerOrig[bFacei] =
true;
324 bFaceNccMagSf[bFacei] += magSfBf[nccPatchi][nccPatchFacei];
337 fvMeshSubset subsetter(mesh());
338 subsetter.setLargeCellSubset(ownerCoupledCellSet());
339 const fvMesh& subMesh = subsetter.subMesh();
340 subMesh.deltaCoeffs();
343 const regionSplit subMeshRegions(subMesh);
344 const label subNRegions = subMeshRegions.nRegions();
347 labelList bFaceSubRegion(mesh().nFaces() - mesh().nInternalFaces(), -1);
348 forAll(subsetter.faceMap(), subFacei)
350 const label facei = subsetter.faceMap()[subFacei];
352 if (mesh().isInternalFace(facei))
continue;
354 const label bFacei = facei - mesh().nInternalFaces();
356 bFaceSubRegion[bFacei] =
357 subMeshRegions[subMesh.faceOwner()[subFacei]];
361 labelList subMeshRegionRefCells(subNRegions, -1);
366 forAll(subMeshRegions, subCelli)
368 subMeshRegionRefProcs[subMeshRegions[subCelli]] = proci;
370 reduce(subMeshRegionRefProcs, ListOp<minOp<label>>());
372 forAll(subMeshRegions, subCelli)
376 subMeshRegionRefProcs[subMeshRegions[subCelli]] == proci
377 && subMeshRegionRefCells[subMeshRegions[subCelli]] == -1
380 subMeshRegionRefCells[subMeshRegions[subCelli]] = subCelli;
392 synchronisedBoundaryField<scalar>(phiBf,
true, 0, 1)
396 scalarList regionPhiError(subNRegions, scalar(0));
400 const fvPatch& fvp = mesh().boundary()[nccPatchi];
402 if (!isA<nonConformalCoupledFvPatch>(fvp))
continue;
404 const nonConformalCoupledFvPatch& nccFvp =
405 refCast<const nonConformalCoupledFvPatch>(fvp);
407 if (!nccFvp.owner())
continue;
409 forAll(nccFvp, nccPatchFacei)
411 const label subRegioni =
414 mesh().polyFacesBf()[nccPatchi][nccPatchFacei]
415 - mesh().nInternalFaces()
418 regionPhiError[subRegioni] +=
419 syncPhiBf[nccPatchi][nccPatchFacei]
420 - phiBf[nccPatchi][nccPatchFacei];
422 regionMagSf[subRegioni] +=
423 magSfBf[nccPatchi][nccPatchFacei];
426 reduce(regionPhiError, ListOp<sumOp<scalar>>());
427 reduce(regionMagSf, ListOp<sumOp<scalar>>());
433 const fvPatch& fvp = mesh().boundary()[nccPatchi];
435 if (!isA<nonConformalCoupledFvPatch>(fvp))
continue;
437 const nonConformalCoupledFvPatch& nccFvp =
438 refCast<const nonConformalCoupledFvPatch>(fvp);
440 if (!nccFvp.owner())
continue;
442 forAll(nccFvp, nccPatchFacei)
444 const label subRegioni =
447 mesh().polyFacesBf()[nccPatchi][nccPatchFacei]
448 - mesh().nInternalFaces()
451 phiBf[nccPatchi][nccPatchFacei] =
452 syncPhiBf[nccPatchi][nccPatchFacei]
453 - magSfBf[nccPatchi][nccPatchFacei]
454 /regionMagSf[subRegioni]
455 *regionPhiError[subRegioni];
480 const label facei = subsetter.faceMap()[subFacei];
482 subPhi[subFacei] = phi[facei];
484 forAll(subPhi.boundaryField(), subPatchi)
486 const fvPatch& subFvp = subPhi.boundaryField()[subPatchi].patch();
488 forAll(subPhi.boundaryField()[subPatchi], subPatchFacei)
490 const label subFacei = subFvp.start() + subPatchFacei;
491 const label facei = subsetter.faceMap()[subFacei];
493 if (mesh().isInternalFace(facei))
495 const label s =
sign(subsetter.faceFlipMap()[subFacei]);
497 subPhi.boundaryFieldRef()[subPatchi][subPatchFacei] =
502 const label bFacei = facei - mesh().nInternalFaces();
505 mesh().polyBFacePatches()[bFacei];
507 mesh().polyBFacePatchFaces()[bFacei];
511 subPhi.boundaryFieldRef()[subPatchi][subPatchFacei] +=
512 phiBf[
patches[i]][patchFaces[i]];
522 - (subV - subV0)/subV
529 wordList MeshPhiPatchTypes(subMesh.boundary().size());
532 const fvPatch& subFvp = subMesh.boundary()[
patchi];
533 MeshPhiPatchTypes[
patchi] =
535 && !isA<internalFvPatch>(subFvp)
546 subMesh.time().name(),
554 subMesh.boundaryMesh().types()
557 subMesh.schemes().setFluxRequired(MeshPhi.name());
564 forAll(subMeshRegionRefCells, i)
566 MeshPhiEqn.setReference(subMeshRegionRefCells[i], 0);
583 DynamicList<labelPair> subChangedPatchAndFaces;
584 DynamicList<meshPhiPreCorrectInfo> subChangedFacePci;
585 DynamicList<meshPhiCorrectInfo> subChangedFaceCi;
588 List<meshPhiPreCorrectInfo> subInternalFacePci(subMesh.nInternalFaces());
589 List<List<meshPhiPreCorrectInfo>> subPatchFacePci
591 FvFaceCellWave<meshPhiPreCorrectInfo>::template
592 sizesListList<List<List<meshPhiPreCorrectInfo>>>
594 FvFaceCellWave<meshPhiPreCorrectInfo>::template
595 listListSizes(subMesh.boundary()),
596 meshPhiPreCorrectInfo()
599 List<meshPhiPreCorrectInfo> subCellPci(subMesh.nCells());
602 subChangedPatchAndFaces.clear();
603 subChangedFacePci.clear();
604 forAll(subMesh.boundary(), subPatchi)
606 const fvPatch& subFvp = subMesh.boundary()[subPatchi];
608 forAll(subFvp, subPatchFacei)
610 const label subFacei = subFvp.start() + subPatchFacei;
611 const label facei = subsetter.faceMap()[subFacei];
612 const label bFacei = facei - mesh().nInternalFaces();
614 if (bFacei >= 0 && bFaceIsOwnerOrig[bFacei])
616 subChangedPatchAndFaces.append({subPatchi, subPatchFacei});
617 subChangedFacePci.append
619 meshPhiPreCorrectInfo(0, bFaceNccMagSf[bFacei])
626 FvFaceCellWave<meshPhiPreCorrectInfo> preWave
633 preWave.setFaceInfo(subChangedPatchAndFaces, subChangedFacePci);
634 const label nWaveLayers =
635 preWave.iterate(subMesh.globalData().nTotalCells() + 1);
638 List<meshPhiCorrectInfo> subInternalFaceCi(subMesh.nInternalFaces());
639 List<List<meshPhiCorrectInfo>> subPatchFaceCi
641 FvFaceCellWave<meshPhiCorrectInfo>::template
642 sizesListList<List<List<meshPhiCorrectInfo>>>
644 FvFaceCellWave<meshPhiCorrectInfo>::template
645 listListSizes(subMesh.boundary()),
649 List<meshPhiCorrectInfo> subCellCi(subMesh.nCells());
654 (subV - subV0)/subMesh.time().deltaT()
659 meshPhiCorrectInfo::trackData td
670 for (
label waveLayeri = nWaveLayers - 1; waveLayeri >= 0; waveLayeri --)
673 const label faceLayeri = (waveLayeri + 1)*2;
676 subChangedPatchAndFaces.clear();
677 subChangedFaceCi.clear();
678 forAll(subInternalFacePci, subFacei)
680 if (subInternalFacePci[subFacei].layer() == faceLayeri)
682 subChangedPatchAndFaces.append({-1, subFacei});
683 subChangedFaceCi.append
685 subInternalFaceCi[subFacei].
valid(td)
686 ? subInternalFaceCi[subFacei]
691 forAll(subPatchFacePci, subPatchi)
693 forAll(subPatchFacePci[subPatchi], subPatchFacei)
697 subPatchFacePci[subPatchi][subPatchFacei].layer()
701 subChangedPatchAndFaces.append({subPatchi, subPatchFacei});
702 subChangedFaceCi.append
704 subPatchFaceCi[subPatchi][subPatchFacei].
valid(td)
705 ? subPatchFaceCi[subPatchi][subPatchFacei]
713 FvFaceCellWave<meshPhiCorrectInfo, meshPhiCorrectInfo::trackData>
wave
721 wave.setFaceInfo(subChangedPatchAndFaces, subChangedFaceCi);
726 forAll(subInternalFaceCi, subFacei)
728 subDeltaPhi.primitiveFieldRef()[subFacei] +=
729 subInternalFaceCi[subFacei].deltaPhi();
731 forAll(subPatchFacePci, subPatchi)
733 forAll(subPatchFacePci[subPatchi], subPatchFacei)
735 subDeltaPhi.boundaryFieldRef()[subPatchi][subPatchFacei] +=
736 subPatchFaceCi[subPatchi][subPatchFacei].deltaPhi();
745 phi[subsetter.faceMap()[subFacei]] =
746 subPhi[subFacei] + subDeltaPhi[subFacei];
757 forAll(subMesh.boundary(), subPatchi)
759 const label patchi = subsetter.patchMap()[subPatchi];
761 if (
patchi == -1)
continue;
763 const fvPatch& subFvp = subMesh.boundary()[subPatchi];
764 const fvPatch& fvp = mesh().boundary()[
patchi];
766 const bool coupled = subFvp.coupled();
768 forAll(subMesh.boundary()[subPatchi], subPatchFacei)
771 subsetter.faceMap()[subFvp.start() + subPatchFacei];
773 const label patchFacei = facei - fvp.start();
777 deltaPhiBf[
patchi][patchFacei] =
778 subPhi.boundaryField()[subPatchi][subPatchFacei]
779 + subDeltaPhi.boundaryField()[subPatchi][subPatchFacei]
780 - phiBf[
patchi][patchFacei];
784 deltaPhiBf[
patchi][patchFacei] =
785 subDeltaPhi.boundaryField()[subPatchi][subPatchFacei];
793 const fvPatch& fvp = mesh().boundary()[nccPatchi];
795 if (!isA<nonConformalCoupledFvPatch>(fvp))
continue;
797 const nonConformalCoupledFvPatch& nccFvp =
798 refCast<const nonConformalCoupledFvPatch>(fvp);
800 if (!nccFvp.owner())
continue;
802 const label origPatchi = nccFvp.origPatchID();
803 const fvPatch& origFvp = nccFvp.origPatch();
805 forAll(nccFvp, nccPatchFacei)
808 nccFvp.polyFaces()[nccPatchFacei] - mesh().nInternalFaces();
810 const label origPatchFacei =
811 nccFvp.polyFaces()[nccPatchFacei] - origFvp.start();
813 const scalar deltaPhi =
814 magSfBf[nccPatchi][nccPatchFacei]
815 /bFaceNccMagSf[bFacei]
816 *deltaPhiBf[origPatchi][origPatchFacei];
818 deltaPhiBf[nccPatchi][nccPatchFacei] = deltaPhi;
823 const fvPatch& fvp = mesh().boundary()[nccPatchi];
825 if (!isA<nonConformalCoupledFvPatch>(fvp))
continue;
827 const nonConformalCoupledFvPatch& nccFvp =
828 refCast<const nonConformalCoupledFvPatch>(fvp);
830 if (!nccFvp.owner())
continue;
832 const label origPatchi = nccFvp.origPatchID();
833 const fvPatch& origFvp = nccFvp.origPatch();
835 forAll(nccFvp, nccPatchFacei)
837 const label origPatchFacei =
838 nccFvp.polyFaces()[nccPatchFacei] - origFvp.start();
840 deltaPhiBf[origPatchi][origPatchFacei] = 0;
849 void Foam::fvMeshStitchers::moving::unconformErrorFaceCorrectMeshPhi
858 const labelList origPatchIDs = ncb.allOrigPatchIDs();
859 const labelList errorPatchIDs = ncb.allErrorPatchIDs();
863 PtrList<surfaceScalarField::Boundary> phiErrorbs(phi.nOldTimes() + 1);
864 for (
label i = 0; i <= phi.nOldTimes(); ++ i)
866 tmp<surfaceScalarField::Boundary> tphib =
867 synchronisedBoundaryField<scalar>(phi.oldTime(i).boundaryField());
875 phi.oldTime(i).boundaryField()
878 phiErrorbs[i] = phi.oldTime(i).boundaryField() - tphib();
880 phi.oldTime(i).boundaryFieldRef() = tphib;
887 const fvPatch& fvp = mesh().boundary()[nccPatchi];
889 if (isA<nonConformalCoupledFvPatch>(fvp))
891 const nonConformalCoupledFvPatch& nccFvp =
892 refCast<const nonConformalCoupledFvPatch>(fvp);
894 const label origPatchi = nccFvp.origPatchID();
895 const polyPatch& origPp = mesh().boundaryMesh()[origPatchi];
897 const label errorPatchi = nccFvp.errorPatchID();
899 forAll(nccFvp, nccPatchFacei)
901 const label origPatchFacei =
902 nccFvp.polyFaces()[nccPatchFacei] - origPp.start();
904 const label errorPatchFacei0 = 2*origPatchFacei;
905 const label errorPatchFacei1 = 2*origPatchFacei + 1;
907 for (
label i = 0; i <= phi.nOldTimes(); ++ i)
909 fvsPatchField<scalar>& phip =
910 phi.oldTime(i).boundaryFieldRef()[errorPatchi];
911 phip[errorPatchFacei0] +=
912 phiErrorbs[i][nccPatchi][nccPatchFacei]/2;
913 phip[errorPatchFacei1] +=
914 phiErrorbs[i][nccPatchi][nccPatchFacei]/2;
925 tmp<surfaceScalarField> tnccMeshMagUf =
933 tnccMeshMagUf.ref().boundaryFieldRef();
936 const fvPatch& fvp = mesh().boundary()[nccPatchi];
938 if (isA<nonConformalCoupledFvPatch>(fvp))
940 const nonConformalCoupledFvPatch& nccFvp =
941 refCast<const nonConformalCoupledFvPatch>(fvp);
943 const fvPatch& origFvp = nccFvp.origPatch();
945 forAll(nccFvp, nccPatchFacei)
947 const label origPatchFacei =
948 nccFvp.polyFaces()[nccPatchFacei]
952 origFvp.patch().faceCentres()[origPatchFacei];
954 origFvp.patch()[origPatchFacei]
955 .
centre(mesh().oldPoints());
957 tnccMeshMagUfb[nccPatchi][nccPatchFacei] =
958 mag(origC - origC0)/mesh().time().deltaTValue();
966 tnccMeshMagUfb.boundaryNeighbourField()()
971 conformalNccBoundaryField<scalar>(tnccMeshMagUfb)
973 tnccMeshMagUf.clear();
980 const label origPatchi = origPatchIDs[i];
981 const polyPatch& origPp = mesh().boundaryMesh()[origPatchi];
983 const label errorPatchi = errorPatchIDs[i];
985 forAll(origPp, origPatchFacei)
987 const label errorPatchFacei0 = 2*origPatchFacei;
988 const label errorPatchFacei1 = 2*origPatchFacei + 1;
993 mag(phi.boundaryField()[errorPatchi][errorPatchFacei0])
994 /
max(meshMagUfb[origPatchi][origPatchFacei], vSmall),
995 origPp.magFaceAreas()[origPatchFacei]
997 *origPp.faceNormals()[origPatchFacei];
999 fvsPatchField<vector>& Sfp =
1000 SfSf.boundaryFieldRef()[errorPatchi];
1001 Sfp[errorPatchFacei0] += errorSf;
1002 Sfp[errorPatchFacei1] -= errorSf;
1009 HashTable<volVectorField*>
fields(mesh().lookupClass<volVectorField>());
1016 const label origPatchi = origPatchIDs[i];
1022 isA<movingWallVelocityFvPatchVectorField>(origUp)
1023 || isA<movingWallSlipVelocityFvPatchVectorField>(origUp)
1026 const label errorPatchi = errorPatchIDs[i];
1031 new movingWallSlipVelocityFvPatchVectorField
1043 void Foam::fvMeshStitchers::moving::unconformCorrectMeshPhi
1045 const SurfaceFieldBoundary<label>& polyFacesBf,
1060 mesh().unconform(polyFacesBf, SfSf, CfSf);
1061 resizeFieldPatchFields(polyFacesBf, phi);
1065 for (
label i = 0; i <= phi.nOldTimes(); ++ i)
1067 phi.oldTime(i).boundaryFieldRef() =
1068 nonConformalBoundaryField<scalar>
1070 phi.oldTime(i).boundaryField(),
1071 phi.oldTime(i).boundaryField()
1084 mesh().foundObject<solutionControl>(solutionControl::typeName)
1085 && mesh().lookupObject<solutionControl>(solutionControl::typeName)
1086 .
dict().lookup<Switch>(
"correctMeshPhi")
1089 unconformInternalFaceCorrectMeshPhi(phi);
1094 unconformErrorFaceCorrectMeshPhi(polyFacesBf, SfSf, CfSf, phi);
#define forAll(list, i)
Loop across all elements in list.
#define forAllIter(Container, container, iter)
Iterate across all elements in the container object of type.
Macros for easy insertion into run-time selection tables.
static nonConformalBoundary & New(const polyMesh &mesh)
static const DimensionedField< Type, GeoMesh > & null()
Return a null DimensionedField.
static const char *const typeName
DimensionedField< Type, GeoMesh > Internal
Type of the internal field from which this GeometricField is derived.
GeometricBoundaryField< Type, PatchField, GeoMesh > Boundary
Type of the boundary field.
static tmp< GeometricField< Type, PatchField, GeoMesh > > New(const word &name, const Internal &, const PtrList< PatchField< Type >> &)
Return a temporary field constructed from name,.
PatchField< Type > Patch
Type of the patch field of which the Boundary is composed.
An Istream is an abstract base class for all input systems (streams, files, token lists etc)....
void size(const label)
Override size to be inconsistent with allocated storage.
An Ostream is an abstract base class for all output systems (streams, files, token lists,...
label size() const
Return the number of elements in the UList.
static int myProcNo(const label communicator=0)
Number of this process (starting from masterNo() = 0)
const Vector< Cmpt > & centre(const Foam::List< Vector< Cmpt >> &) const
Return *this (used for point which is a typedef to Vector<scalar>.
Mesh manipulator that uses the intersection provided by the cyclic non-conformal poly patches to crea...
static tmp< Field< Type > > fieldRMapSum(const Field< Type > &f, const label size, const labelUList &addr)
Reverse-map sum the values of a field.
Mesh stitcher for moving meshes.
moving(fvMesh &)
Construct from fvMesh.
virtual ~moving()
Destructor.
Mesh data needed to do the Finite Volume discretisation.
A zero-sized class without any storage. Used, for example, in HashSet.
static bool constraintType(const word &pt)
Return true if the given type is a constraint type.
Calculate the matrix for the laplacian of the field.
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.name(), cloud::prefix, mesh, IOobject::MUST_READ, IOobject::NO_WRITE))
const fvPatchList & patches
Info<< "Calculating turbulent flame speed field St\n"<< endl;volScalarField St(IOobject("St", runTime.name(), mesh, IOobject::NO_READ, IOobject::AUTO_WRITE), flameWrinkling->Xi() *Su);multivariateSurfaceInterpolationScheme< scalar >::fieldTable fields
bool valid(const PtrList< ModelType > &l)
addToRunTimeSelectionTable(fvMeshStitcher, stationary, fvMesh)
defineTypeNameAndDebug(stationary, 0)
label wave(const fvMesh &mesh, const List< labelPair > &changedPatchAndFaces, const label nCorrections, GeometricField< scalar, PatchField, GeoMesh > &distance, TrackingData &td, GeometricField< DataType, PatchField, GeoMesh > &... data)
Wave distance (and maybe additional) data from faces. If nCorrections is.
void surfaceIntegrate(Field< Type > &ivf, const SurfaceField< Type > &ssf)
tmp< fvMatrix< Type > > laplacian(const VolField< Type > &vf, const word &name)
dimensioned< scalar > dimensionedScalar
Dimensioned scalar obtained from generic dimensioned type.
List< word > wordList
A List of words.
List< label > labelList
A List of labels.
dimensionedScalar sign(const dimensionedScalar &ds)
intWM_LABEL_SIZE_t label
A label is an int32_t or int64_t as specified by the pre-processor macro WM_LABEL_SIZE.
fvMatrix< scalar > fvScalarMatrix
SurfaceField< scalar > surfaceScalarField
List< bool > boolList
Bool container classes.
List< scalar > scalarList
A List of scalars.
vector point
Point is a vector.
layerAndWeight min(const layerAndWeight &a, const layerAndWeight &b)
const dimensionSet dimTime
Vector< scalar > vector
A scalar version of the templated Vector.
void reduce(const List< UPstream::commsStruct > &comms, T &Value, const BinaryOp &bop, const int tag, const label comm)
const dimensionSet dimVolume
VolField< scalar > volScalarField
dimensioned< scalar > mag(const dimensioned< Type > &)
layerAndWeight max(const layerAndWeight &a, const layerAndWeight &b)
HashSet< label, Hash< label > > labelHashSet
A HashSet with label keys.
const dimensionSet dimVelocity
const dimensionSet dimArea
static const label labelMax
SurfaceField< vector > surfaceVectorField
labelList identityMap(const label len)
Create identity map (map[i] == i) of given length.
List< Type > repeat(const UList< Type > &a, const UList< Type > &b)
UList< label > labelUList
faceListList boundary(nPatches)
friend Ostream & operator<<(Ostream &os, const layerAndWeight &l)
static const layerAndWeight max
friend bool operator!=(const layerAndWeight &a, const layerAndWeight &b)
friend Istream & operator>>(Istream &is, layerAndWeight &l)
friend bool operator==(const layerAndWeight &a, const layerAndWeight &b)
static const layerAndWeight min