54 result[2*i + 1] =
b[i];
106 return a.
layer >
b.layer ? a :
b;
112 return a.
layer <
b.layer ? a :
b;
122 namespace fvMeshStitchers
132 void Foam::fvMeshStitchers::moving::conformCorrectMeshPhi
141 if (isA<nonConformalFvPatch>(phiBf[nccPatchi].patch()))
143 const nonConformalFvPatch& ncFvp =
144 refCast<const nonConformalFvPatch>(phiBf[nccPatchi].patch());
146 const label origPatchi = ncFvp.origPatchIndex();
147 const fvPatch& origFvp = ncFvp.origPatch();
149 for (
label i = 0; i <= phi.nOldTimes(
false); ++ i)
151 phi.oldTimeRef(i).boundaryFieldRef()[origPatchi] +=
154 phi.oldTime(i).boundaryField()[nccPatchi],
160 phi.oldTimeRef(i).boundaryFieldRef()[nccPatchi].clear();
167 void Foam::fvMeshStitchers::moving::createNonConformalCorrectMeshPhiGeometry
175 const labelList origPatchIndices = ncb.allOrigPatchIndices();
176 const labelList errorPatchIndices = ncb.allErrorPatchIndices();
178 forAll(errorPatchIndices, i)
180 const label origPatchi = origPatchIndices[i];
181 const polyPatch& origPp = mesh().boundaryMesh()[origPatchi];
183 const label errorPatchi = errorPatchIndices[i];
185 polyFacesBf[errorPatchi] =
188 SfSf.boundaryFieldRef()[errorPatchi] =
191 (rootVSmall*origPp.faceNormals())(),
192 (-rootVSmall*origPp.faceNormals())()
194 CfSf.boundaryFieldRef()[errorPatchi] =
195 repeat(origPp.faceCentres());
206 labelList bFaceNSet(mesh().nFaces() - mesh().nInternalFaces(), 0);
209 const fvPatch& fvp = mesh().boundary()[nccPatchi];
211 if (!isA<nonConformalCoupledFvPatch>(fvp))
continue;
213 const nonConformalCoupledFvPatch& nccFvp =
214 refCast<const nonConformalCoupledFvPatch>(fvp);
216 if (!nccFvp.owner())
continue;
218 forAll(nccFvp, nccPatchFacei)
222 mesh().polyFacesBf()[nccPatchi][nccPatchFacei]
223 - mesh().nInternalFaces()
232 ncb.ownerOrigBoundaryEdgeMeshEdge().size(),
235 forAll(ncb.ownerOrigBoundaryEdgeMeshEdge(), ownerOrigBoundaryEdgei)
237 const label meshEdgei =
238 ncb.ownerOrigBoundaryEdgeMeshEdge()[ownerOrigBoundaryEdgei];
240 forAll(mesh().edgeFaces()[meshEdgei], edgeFacei)
242 const label facei = mesh().edgeFaces()[meshEdgei][edgeFacei];
244 if (mesh().isInternalFace(facei))
continue;
246 const label bFacei = facei - mesh().nInternalFaces();
248 if (bFaceNSet[bFacei])
250 ownerOrigBoundaryEdgeNSet[ownerOrigBoundaryEdgei] += 1;
257 ncb.ownerOrigBoundaryEdgeMeshEdge(),
258 ownerOrigBoundaryEdgeNSet,
266 forAll(ncb.ownerOrigBoundaryEdgeMeshEdge(), ownerOrigBoundaryEdgei)
268 if (ownerOrigBoundaryEdgeNSet[ownerOrigBoundaryEdgei] < 2)
continue;
270 const label meshEdgei =
271 ncb.ownerOrigBoundaryEdgeMeshEdge()[ownerOrigBoundaryEdgei];
273 forAll(mesh().edgeFaces()[meshEdgei], edgeFacei)
275 const label facei = mesh().edgeFaces()[meshEdgei][edgeFacei];
277 set.insert(mesh().faceOwner()[facei]);
279 if (facei < mesh().nInternalFaces())
281 set.insert(mesh().faceNeighbour()[facei]);
290 void Foam::fvMeshStitchers::moving::unconformInternalFaceCorrectMeshPhi
296 mesh().magSf().boundaryField();
304 boolList bFaceIsOwnerOrig(mesh().nFaces() - mesh().nInternalFaces(),
false);
305 scalarList bFaceNccMagSf(mesh().nFaces() - mesh().nInternalFaces(),
Zero);
308 const fvPatch& fvp = mesh().boundary()[nccPatchi];
310 if (!isA<nonConformalCoupledFvPatch>(fvp))
continue;
312 const nonConformalCoupledFvPatch& nccFvp =
313 refCast<const nonConformalCoupledFvPatch>(fvp);
315 if (!nccFvp.owner())
continue;
317 forAll(nccFvp, nccPatchFacei)
320 nccFvp.polyFaces()[nccPatchFacei] - mesh().nInternalFaces();
322 bFaceIsOwnerOrig[bFacei] =
true;
323 bFaceNccMagSf[bFacei] += magSfBf[nccPatchi][nccPatchFacei];
336 fvMeshSubset subsetter(mesh());
337 subsetter.setLargeCellSubset(ownerCoupledCellSet());
338 const fvMesh& subMesh = subsetter.subMesh();
339 subMesh.deltaCoeffs();
342 const regionSplit subMeshRegions(subMesh);
343 const label subNRegions = subMeshRegions.nRegions();
346 labelList bFaceSubRegion(mesh().nFaces() - mesh().nInternalFaces(), -1);
347 forAll(subsetter.faceMap(), subFacei)
349 const label facei = subsetter.faceMap()[subFacei];
351 if (mesh().isInternalFace(facei))
continue;
353 const label bFacei = facei - mesh().nInternalFaces();
355 bFaceSubRegion[bFacei] =
356 subMeshRegions[subMesh.faceOwner()[subFacei]];
360 labelList subMeshRegionRefCells(subNRegions, -1);
365 forAll(subMeshRegions, subCelli)
367 subMeshRegionRefProcs[subMeshRegions[subCelli]] = proci;
369 reduce(subMeshRegionRefProcs, ListOp<minOp<label>>());
371 forAll(subMeshRegions, subCelli)
375 subMeshRegionRefProcs[subMeshRegions[subCelli]] == proci
376 && subMeshRegionRefCells[subMeshRegions[subCelli]] == -1
379 subMeshRegionRefCells[subMeshRegions[subCelli]] = subCelli;
395 scalarList regionPhiError(subNRegions, scalar(0));
399 const fvPatch& fvp = mesh().boundary()[nccPatchi];
401 if (!isA<nonConformalCoupledFvPatch>(fvp))
continue;
403 const nonConformalCoupledFvPatch& nccFvp =
404 refCast<const nonConformalCoupledFvPatch>(fvp);
406 if (!nccFvp.owner())
continue;
408 forAll(nccFvp, nccPatchFacei)
410 const label subRegioni =
413 mesh().polyFacesBf()[nccPatchi][nccPatchFacei]
414 - mesh().nInternalFaces()
417 regionPhiError[subRegioni] +=
418 syncPhiBf[nccPatchi][nccPatchFacei]
419 - phiBf[nccPatchi][nccPatchFacei];
421 regionMagSf[subRegioni] +=
422 magSfBf[nccPatchi][nccPatchFacei];
425 reduce(regionPhiError, ListOp<sumOp<scalar>>());
426 reduce(regionMagSf, ListOp<sumOp<scalar>>());
432 const fvPatch& fvp = mesh().boundary()[nccPatchi];
434 if (!isA<nonConformalCoupledFvPatch>(fvp))
continue;
436 const nonConformalCoupledFvPatch& nccFvp =
437 refCast<const nonConformalCoupledFvPatch>(fvp);
439 if (!nccFvp.owner())
continue;
441 forAll(nccFvp, nccPatchFacei)
443 const label subRegioni =
446 mesh().polyFacesBf()[nccPatchi][nccPatchFacei]
447 - mesh().nInternalFaces()
450 phiBf[nccPatchi][nccPatchFacei] =
451 syncPhiBf[nccPatchi][nccPatchFacei]
452 - magSfBf[nccPatchi][nccPatchFacei]
453 /regionMagSf[subRegioni]
454 *regionPhiError[subRegioni];
479 const label facei = subsetter.faceMap()[subFacei];
481 subPhi[subFacei] = phi[facei];
483 forAll(subPhi.boundaryField(), subPatchi)
485 const fvPatch& subFvp = subPhi.boundaryField()[subPatchi].patch();
487 forAll(subPhi.boundaryField()[subPatchi], subPatchFacei)
489 const label subFacei = subFvp.start() + subPatchFacei;
490 const label facei = subsetter.faceMap()[subFacei];
492 if (mesh().isInternalFace(facei))
494 const label s =
sign(subsetter.faceFlipMap()[subFacei]);
496 subPhi.boundaryFieldRef()[subPatchi][subPatchFacei] =
501 const label bFacei = facei - mesh().nInternalFaces();
504 mesh().polyBFacePatches()[bFacei];
506 mesh().polyBFacePatchFaces()[bFacei];
510 subPhi.boundaryFieldRef()[subPatchi][subPatchFacei] +=
511 phiBf[
patches[i]][patchFaces[i]];
521 - (subV - subV0)/subV
528 wordList MeshPhiPatchTypes(subMesh.boundary().size());
531 const fvPatch& subFvp = subMesh.boundary()[
patchi];
532 MeshPhiPatchTypes[
patchi] =
534 && !isA<internalFvPatch>(subFvp)
545 subMesh.time().name(),
553 subMesh.boundaryMesh().types()
556 subMesh.schemes().setFluxRequired(MeshPhi.name());
563 forAll(subMeshRegionRefCells, i)
565 MeshPhiEqn.setReference(subMeshRegionRefCells[i], 0);
582 DynamicList<labelPair> subChangedPatchAndFaces;
583 DynamicList<meshPhiPreCorrectInfo> subChangedFacePci;
584 DynamicList<meshPhiCorrectInfo> subChangedFaceCi;
587 List<meshPhiPreCorrectInfo> subInternalFacePci(subMesh.nInternalFaces());
588 List<List<meshPhiPreCorrectInfo>> subPatchFacePci
590 FvFaceCellWave<meshPhiPreCorrectInfo>::template
591 sizesListList<List<List<meshPhiPreCorrectInfo>>>
593 FvFaceCellWave<meshPhiPreCorrectInfo>::template
594 listListSizes(subMesh.boundary()),
595 meshPhiPreCorrectInfo()
598 List<meshPhiPreCorrectInfo> subCellPci(subMesh.nCells());
601 subChangedPatchAndFaces.clear();
602 subChangedFacePci.clear();
603 forAll(subMesh.boundary(), subPatchi)
605 const fvPatch& subFvp = subMesh.boundary()[subPatchi];
607 forAll(subFvp, subPatchFacei)
609 const label subFacei = subFvp.start() + subPatchFacei;
610 const label facei = subsetter.faceMap()[subFacei];
611 const label bFacei = facei - mesh().nInternalFaces();
613 if (bFacei >= 0 && bFaceIsOwnerOrig[bFacei])
615 subChangedPatchAndFaces.append({subPatchi, subPatchFacei});
616 subChangedFacePci.append
618 meshPhiPreCorrectInfo(0, bFaceNccMagSf[bFacei])
625 FvFaceCellWave<meshPhiPreCorrectInfo> preWave
632 preWave.setFaceInfo(subChangedPatchAndFaces, subChangedFacePci);
633 const label nWaveLayers =
634 preWave.iterate(subMesh.globalData().nTotalCells() + 1);
637 List<meshPhiCorrectInfo> subInternalFaceCi(subMesh.nInternalFaces());
638 List<List<meshPhiCorrectInfo>> subPatchFaceCi
640 FvFaceCellWave<meshPhiCorrectInfo>::template
641 sizesListList<List<List<meshPhiCorrectInfo>>>
643 FvFaceCellWave<meshPhiCorrectInfo>::template
644 listListSizes(subMesh.boundary()),
648 List<meshPhiCorrectInfo> subCellCi(subMesh.nCells());
653 (subV - subV0)/subMesh.time().deltaT()
658 meshPhiCorrectInfo::trackData td
669 for (
label waveLayeri = nWaveLayers - 1; waveLayeri >= 0; waveLayeri --)
672 const label faceLayeri = (waveLayeri + 1)*2;
675 subChangedPatchAndFaces.clear();
676 subChangedFaceCi.clear();
677 forAll(subInternalFacePci, subFacei)
679 if (subInternalFacePci[subFacei].layer() == faceLayeri)
681 subChangedPatchAndFaces.append({-1, subFacei});
682 subChangedFaceCi.append
684 subInternalFaceCi[subFacei].
valid(td)
685 ? subInternalFaceCi[subFacei]
690 forAll(subPatchFacePci, subPatchi)
692 forAll(subPatchFacePci[subPatchi], subPatchFacei)
696 subPatchFacePci[subPatchi][subPatchFacei].layer()
700 subChangedPatchAndFaces.append({subPatchi, subPatchFacei});
701 subChangedFaceCi.append
703 subPatchFaceCi[subPatchi][subPatchFacei].
valid(td)
704 ? subPatchFaceCi[subPatchi][subPatchFacei]
712 FvFaceCellWave<meshPhiCorrectInfo, meshPhiCorrectInfo::trackData>
wave
720 wave.setFaceInfo(subChangedPatchAndFaces, subChangedFaceCi);
725 forAll(subInternalFaceCi, subFacei)
727 subDeltaPhi.primitiveFieldRef()[subFacei] +=
728 subInternalFaceCi[subFacei].deltaPhi();
730 forAll(subPatchFacePci, subPatchi)
732 forAll(subPatchFacePci[subPatchi], subPatchFacei)
734 subDeltaPhi.boundaryFieldRef()[subPatchi][subPatchFacei] +=
735 subPatchFaceCi[subPatchi][subPatchFacei].deltaPhi();
744 phi[subsetter.faceMap()[subFacei]] =
745 subPhi[subFacei] + subDeltaPhi[subFacei];
756 forAll(subMesh.boundary(), subPatchi)
758 const label patchi = subsetter.patchMap()[subPatchi];
760 if (
patchi == -1)
continue;
762 const fvPatch& subFvp = subMesh.boundary()[subPatchi];
763 const fvPatch& fvp = mesh().boundary()[
patchi];
765 const bool coupled = subFvp.coupled();
767 forAll(subMesh.boundary()[subPatchi], subPatchFacei)
770 subsetter.faceMap()[subFvp.start() + subPatchFacei];
772 const label patchFacei = facei - fvp.start();
776 deltaPhiBf[
patchi][patchFacei] =
777 subPhi.boundaryField()[subPatchi][subPatchFacei]
778 + subDeltaPhi.boundaryField()[subPatchi][subPatchFacei]
779 - phiBf[
patchi][patchFacei];
783 deltaPhiBf[
patchi][patchFacei] =
784 subDeltaPhi.boundaryField()[subPatchi][subPatchFacei];
792 const fvPatch& fvp = mesh().boundary()[nccPatchi];
794 if (!isA<nonConformalCoupledFvPatch>(fvp))
continue;
796 const nonConformalCoupledFvPatch& nccFvp =
797 refCast<const nonConformalCoupledFvPatch>(fvp);
799 if (!nccFvp.owner())
continue;
801 const label origPatchi = nccFvp.origPatchIndex();
802 const fvPatch& origFvp = nccFvp.origPatch();
804 forAll(nccFvp, nccPatchFacei)
807 nccFvp.polyFaces()[nccPatchFacei] - mesh().nInternalFaces();
809 const label origPatchFacei =
810 nccFvp.polyFaces()[nccPatchFacei] - origFvp.start();
812 const scalar deltaPhi =
813 magSfBf[nccPatchi][nccPatchFacei]
814 /bFaceNccMagSf[bFacei]
815 *deltaPhiBf[origPatchi][origPatchFacei];
817 deltaPhiBf[nccPatchi][nccPatchFacei] = deltaPhi;
822 const fvPatch& fvp = mesh().boundary()[nccPatchi];
824 if (!isA<nonConformalCoupledFvPatch>(fvp))
continue;
826 const nonConformalCoupledFvPatch& nccFvp =
827 refCast<const nonConformalCoupledFvPatch>(fvp);
829 if (!nccFvp.owner())
continue;
831 const label origPatchi = nccFvp.origPatchIndex();
832 const fvPatch& origFvp = nccFvp.origPatch();
834 forAll(nccFvp, nccPatchFacei)
836 const label origPatchFacei =
837 nccFvp.polyFaces()[nccPatchFacei] - origFvp.start();
839 deltaPhiBf[origPatchi][origPatchFacei] = 0;
848 void Foam::fvMeshStitchers::moving::unconformErrorFaceCorrectMeshPhi
857 const labelList origPatchIndices = ncb.allOrigPatchIndices();
858 const labelList errorPatchIndices = ncb.allErrorPatchIndices();
862 PtrList<surfaceScalarField::Boundary> phiErrorbs(phi.nOldTimes(
false) + 1);
863 for (
label i = 0; i <= phi.nOldTimes(
false); ++ i)
865 tmp<surfaceScalarField::Boundary> tphib =
868 phi.oldTime(i).boundaryField()
877 phi.oldTime(i).boundaryField()
880 phiErrorbs[i] = phi.oldTime(i).boundaryField() - tphib();
882 phi.oldTimeRef(i).boundaryFieldRef() = tphib;
889 const fvPatch& fvp = mesh().boundary()[nccPatchi];
891 if (isA<nonConformalCoupledFvPatch>(fvp))
893 const nonConformalCoupledFvPatch& nccFvp =
894 refCast<const nonConformalCoupledFvPatch>(fvp);
896 const label origPatchi = nccFvp.origPatchIndex();
897 const polyPatch& origPp = mesh().boundaryMesh()[origPatchi];
899 const label errorPatchi = nccFvp.errorPatchIndex();
901 forAll(nccFvp, nccPatchFacei)
903 const label origPatchFacei =
904 nccFvp.polyFaces()[nccPatchFacei] - origPp.start();
906 const label errorPatchFacei0 = 2*origPatchFacei;
907 const label errorPatchFacei1 = 2*origPatchFacei + 1;
909 for (
label i = 0; i <= phi.nOldTimes(
false); ++ i)
911 fvsPatchField<scalar>& phip =
912 phi.oldTimeRef(i).boundaryFieldRef()[errorPatchi];
913 phip[errorPatchFacei0] +=
914 phiErrorbs[i][nccPatchi][nccPatchFacei]/2;
915 phip[errorPatchFacei1] +=
916 phiErrorbs[i][nccPatchi][nccPatchFacei]/2;
927 tmp<surfaceScalarField> tnccMeshMagUf =
935 tnccMeshMagUf.ref().boundaryFieldRef();
938 const fvPatch& fvp = mesh().boundary()[nccPatchi];
940 if (isA<nonConformalCoupledFvPatch>(fvp))
942 const nonConformalCoupledFvPatch& nccFvp =
943 refCast<const nonConformalCoupledFvPatch>(fvp);
945 const fvPatch& origFvp = nccFvp.origPatch();
947 forAll(nccFvp, nccPatchFacei)
949 const label origPatchFacei =
950 nccFvp.polyFaces()[nccPatchFacei]
954 origFvp.patch().faceCentres()[origPatchFacei];
956 origFvp.patch()[origPatchFacei]
957 .
centre(mesh().oldPoints());
959 tnccMeshMagUfb[nccPatchi][nccPatchFacei] =
960 mag(origC - origC0)/mesh().time().deltaTValue();
968 tnccMeshMagUfb.boundaryNeighbourField()()
975 tnccMeshMagUf.clear();
980 forAll(errorPatchIndices, i)
982 const label origPatchi = origPatchIndices[i];
983 const polyPatch& origPp = mesh().boundaryMesh()[origPatchi];
985 const label errorPatchi = errorPatchIndices[i];
987 forAll(origPp, origPatchFacei)
989 const label errorPatchFacei0 = 2*origPatchFacei;
990 const label errorPatchFacei1 = 2*origPatchFacei + 1;
995 mag(phi.boundaryField()[errorPatchi][errorPatchFacei0])
996 /
max(meshMagUfb[origPatchi][origPatchFacei], vSmall),
997 origPp.magFaceAreas()[origPatchFacei]
999 *origPp.faceNormals()[origPatchFacei];
1001 fvsPatchField<vector>& Sfp =
1002 SfSf.boundaryFieldRef()[errorPatchi];
1003 Sfp[errorPatchFacei0] += errorSf;
1004 Sfp[errorPatchFacei1] -= errorSf;
1010 void Foam::fvMeshStitchers::moving::unconformCorrectMeshPhi
1012 const SurfaceFieldBoundary<label>& polyFacesBf,
1027 mesh().unconform(polyFacesBf, SfSf, CfSf);
1030 for (
label i = 0; i <= phi.nOldTimes(
false); ++ i)
1033 boundaryFieldRefNoUpdate(phi.oldTime(i));
1035 forAll(polyFacesBf, ncPatchi)
1037 if (!isA<nonConformalFvPatch>(polyFacesBf[ncPatchi].patch()))
1039 phi0Bf[ncPatchi].map
1042 setSizeFieldMapper(polyFacesBf[ncPatchi].size())
1050 for (
label i = 0; i <= phi.nOldTimes(
false); ++ i)
1052 phi.oldTimeRef(i).boundaryFieldRef() =
1055 phi.oldTime(i).boundaryField(),
1056 phi.oldTime(i).boundaryField()
1069 mesh().foundObject<solutionControl>(solutionControl::typeName)
1070 && mesh().lookupObject<solutionControl>(solutionControl::typeName)
1071 .
dict().lookup<Switch>(
"correctMeshPhi")
1074 unconformInternalFaceCorrectMeshPhi(phi);
1079 unconformErrorFaceCorrectMeshPhi(polyFacesBf, SfSf, CfSf, phi);
#define forAll(list, i)
Loop across all elements in list.
Macros for easy insertion into run-time selection tables.
static nonConformalBoundary & New(const word &name, const polyMesh &mesh)
Construct and return the named DemandDrivenMeshObject.
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 >> &, const HashPtrTable< Source > &=HashPtrTable< Source >())
Return a temporary field constructed from name,.
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...
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
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)
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
dimensioned< scalar > dimensionedScalar
Dimensioned scalar obtained from generic dimensioned type.
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