diff --git a/src/OpenFOAM/fields/GeometricFields/SlicedGeometricField/SlicedGeometricField.C b/src/OpenFOAM/fields/GeometricFields/SlicedGeometricField/SlicedGeometricField.C index e86b9e9bb2..84ecd5d124 100644 --- a/src/OpenFOAM/fields/GeometricFields/SlicedGeometricField/SlicedGeometricField.C +++ b/src/OpenFOAM/fields/GeometricFields/SlicedGeometricField/SlicedGeometricField.C @@ -35,12 +35,13 @@ template template class SlicedPatchField, class GeoMesh > -Foam::tmp > +Foam::tmp > Foam::SlicedGeometricField:: slicedBoundaryField ( const Mesh& mesh, - const Field& completeField + const Field& completeField, + const bool preserveCouples ) { tmp > tbf @@ -52,7 +53,7 @@ slicedBoundaryField forAll (mesh.boundary(), patchi) { - if (mesh.boundary()[patchi].coupled()) + if (preserveCouples && mesh.boundary()[patchi].coupled()) { // For coupled patched construct the correct patch field type bf.set @@ -143,7 +144,8 @@ SlicedGeometricField const IOobject& io, const Mesh& mesh, const dimensionSet& ds, - const Field& completeField + const Field& completeField, + const bool preserveCouples ) : GeometricField @@ -152,7 +154,7 @@ SlicedGeometricField mesh, ds, Field(), - slicedBoundaryField(mesh, completeField) + slicedBoundaryField(mesh, completeField, preserveCouples) ) { // Set the internalField to the slice of the complete field @@ -179,7 +181,8 @@ SlicedGeometricField const Mesh& mesh, const dimensionSet& ds, const Field& completeIField, - const Field& completeBField + const Field& completeBField, + const bool preserveCouples ) : GeometricField @@ -188,7 +191,7 @@ SlicedGeometricField mesh, ds, Field(), - slicedBoundaryField(mesh, completeBField) + slicedBoundaryField(mesh, completeBField, preserveCouples) ) { // Set the internalField to the slice of the complete field diff --git a/src/OpenFOAM/fields/GeometricFields/SlicedGeometricField/SlicedGeometricField.H b/src/OpenFOAM/fields/GeometricFields/SlicedGeometricField/SlicedGeometricField.H index 37eea9a3b5..18f9abe05c 100644 --- a/src/OpenFOAM/fields/GeometricFields/SlicedGeometricField/SlicedGeometricField.H +++ b/src/OpenFOAM/fields/GeometricFields/SlicedGeometricField/SlicedGeometricField.H @@ -28,11 +28,11 @@ Class Description Specialization of GeometricField which holds slices of given complete fields in a form that they act as a GeometricField. - + The destructor is wrapped to avoid deallocation of the storage of the complete fields when this is destroyed. - SlicedGeometricField can only be instantiated with a valid form of + SlicedGeometricField can only be instantiated with a valid form of SlicedPatchField to handle the slicing and storage deallocation of the boundary field. @@ -83,7 +83,8 @@ private: tmp > slicedBoundaryField ( const Mesh& mesh, - const Field& completeField + const Field& completeField, + const bool preserveCouples ); //- Disallow default bitwise copy construct @@ -111,7 +112,8 @@ public: const IOobject&, const Mesh&, const dimensionSet&, - const Field& completeField + const Field& completeField, + const bool preserveCouples=true ); //- Construct from components and separate fields to slice for the @@ -122,7 +124,8 @@ public: const Mesh&, const dimensionSet&, const Field& completeIField, - const Field& completeBField + const Field& completeBField, + const bool preserveCouples=true ); diff --git a/src/finiteVolume/fvMatrices/solvers/MULES/MULESTemplates.C b/src/finiteVolume/fvMatrices/solvers/MULES/MULESTemplates.C index e9e012a09d..daded730b9 100644 --- a/src/finiteVolume/fvMatrices/solvers/MULES/MULESTemplates.C +++ b/src/finiteVolume/fvMatrices/solvers/MULES/MULESTemplates.C @@ -55,6 +55,7 @@ void Foam::MULES::explicitSolve Info<< "MULES: Solving for " << psi.name() << endl; const fvMesh& mesh = psi.mesh(); + psi.correctBoundaryConditions(); surfaceScalarField phiBD = upwind(psi.mesh(), phi).flux(psi); @@ -76,7 +77,8 @@ void Foam::MULES::explicitSolve ), mesh, dimless, - allLambda + allLambda, + false // Use slices for the couples ); limiter @@ -183,7 +185,8 @@ void Foam::MULES::implicitSolve ), mesh, dimless, - allCoLambda + allCoLambda, + false // Use slices for the couples ); CoLambda == 1.0/max(CoCoeff*Cof, scalar(1)); @@ -205,7 +208,8 @@ void Foam::MULES::implicitSolve ), mesh, dimless, - allLambda + allLambda, + false // Use slices for the couples ); linear CDs(mesh); @@ -347,7 +351,8 @@ void Foam::MULES::limiter ), mesh, dimless, - allLambda + allLambda, + false // Use slices for the couples ); scalarField& lambdaIf = lambda; @@ -406,6 +411,9 @@ void Foam::MULES::limiter { label pfCelli = pFaceCells[pFacei]; + psiMaxn[pfCelli] = max(psiMaxn[pfCelli], psiPf[pFacei]); + psiMinn[pfCelli] = min(psiMinn[pfCelli], psiPf[pFacei]); + psiMaxn[pfCelli] = max(psiMaxn[pfCelli], psiPNf[pFacei]); psiMinn[pfCelli] = min(psiMinn[pfCelli], psiPNf[pFacei]); }