From 141e0d43cadf56cbbb0d62ca8a31c03821ceb274 Mon Sep 17 00:00:00 2001 From: "h.weller@opencfd.co.uk" <h.weller@opencfd.co.uk> Date: Tue, 24 Jun 2008 17:01:01 +0100 Subject: [PATCH] Fixed a bug introduced by maintaining the coupled patch fields in sliced fields. --- .../SlicedGeometricField/SlicedGeometricField.C | 17 ++++++++++------- .../SlicedGeometricField/SlicedGeometricField.H | 13 ++++++++----- .../fvMatrices/solvers/MULES/MULESTemplates.C | 16 ++++++++++++---- 3 files changed, 30 insertions(+), 16 deletions(-) diff --git a/src/OpenFOAM/fields/GeometricFields/SlicedGeometricField/SlicedGeometricField.C b/src/OpenFOAM/fields/GeometricFields/SlicedGeometricField/SlicedGeometricField.C index e86b9e9bb28..84ecd5d124f 100644 --- a/src/OpenFOAM/fields/GeometricFields/SlicedGeometricField/SlicedGeometricField.C +++ b/src/OpenFOAM/fields/GeometricFields/SlicedGeometricField/SlicedGeometricField.C @@ -35,12 +35,13 @@ template template<class> class SlicedPatchField, class GeoMesh > -Foam::tmp<Foam::FieldField<PatchField, Type> > +Foam::tmp<Foam::FieldField<PatchField, Type> > Foam::SlicedGeometricField<Type, PatchField, SlicedPatchField, GeoMesh>:: slicedBoundaryField ( const Mesh& mesh, - const Field<Type>& completeField + const Field<Type>& completeField, + const bool preserveCouples ) { tmp<FieldField<PatchField, Type> > 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<Type>& completeField + const Field<Type>& completeField, + const bool preserveCouples ) : GeometricField<Type, PatchField, GeoMesh> @@ -152,7 +154,7 @@ SlicedGeometricField mesh, ds, Field<Type>(), - 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<Type>& completeIField, - const Field<Type>& completeBField + const Field<Type>& completeBField, + const bool preserveCouples ) : GeometricField<Type, PatchField, GeoMesh> @@ -188,7 +191,7 @@ SlicedGeometricField mesh, ds, Field<Type>(), - 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 37eea9a3b58..18f9abe05cc 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<FieldField<PatchField, Type> > slicedBoundaryField ( const Mesh& mesh, - const Field<Type>& completeField + const Field<Type>& completeField, + const bool preserveCouples ); //- Disallow default bitwise copy construct @@ -111,7 +112,8 @@ public: const IOobject&, const Mesh&, const dimensionSet&, - const Field<Type>& completeField + const Field<Type>& 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<Type>& completeIField, - const Field<Type>& completeBField + const Field<Type>& completeBField, + const bool preserveCouples=true ); diff --git a/src/finiteVolume/fvMatrices/solvers/MULES/MULESTemplates.C b/src/finiteVolume/fvMatrices/solvers/MULES/MULESTemplates.C index e9e012a09d0..daded730b9b 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<scalar>(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<scalar> 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]); } -- GitLab