diff --git a/src/Allwmake b/src/Allwmake index 128d4a9845..e9a922ab36 100755 --- a/src/Allwmake +++ b/src/Allwmake @@ -65,8 +65,6 @@ lagrangian/Allwmake $* postProcessing/Allwmake $* mesh/Allwmake $* -wmake $makeOption errorEstimation - fvAgglomerationMethods/Allwmake $* wmake $makeOption fvMotionSolver diff --git a/src/errorEstimation/Make/files b/src/errorEstimation/Make/files deleted file mode 100644 index ccfc723de0..0000000000 --- a/src/errorEstimation/Make/files +++ /dev/null @@ -1,9 +0,0 @@ -errorDrivenRefinement = errorDrivenRefinement -errorEstimate = errorEstimate -evaluateError = evaluateError - -$(evaluateError)/evaluateError.C -$(errorDrivenRefinement)/errorDrivenRefinement.C - -LIB = $(FOAM_LIBBIN)/liberrorEstimation - diff --git a/src/errorEstimation/Make/options b/src/errorEstimation/Make/options deleted file mode 100644 index a3458eaa3d..0000000000 --- a/src/errorEstimation/Make/options +++ /dev/null @@ -1,9 +0,0 @@ -EXE_INC = \ - -I$(LIB_SRC)/finiteVolume/lnInclude \ - -I$(LIB_SRC)/meshTools/lnInclude \ - -I$(LIB_SRC)/dynamicMesh/lnInclude - -LIB_LIBS = \ - -lfiniteVolume \ - -lmeshTools \ - -ldynamicMesh diff --git a/src/errorEstimation/errorDrivenRefinement/errorDrivenRefinement.C b/src/errorEstimation/errorDrivenRefinement/errorDrivenRefinement.C deleted file mode 100644 index fdc72e509e..0000000000 --- a/src/errorEstimation/errorDrivenRefinement/errorDrivenRefinement.C +++ /dev/null @@ -1,277 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 2004-2010 OpenCFD Ltd. - \\/ M anipulation | -------------------------------------------------------------------------------- -License - This file is part of OpenFOAM. - - OpenFOAM is free software: you can redistribute it and/or modify it - under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OpenFOAM is distributed in the hope that it will be useful, but WITHOUT - ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - for more details. - - You should have received a copy of the GNU General Public License - along with OpenFOAM. If not, see . - -\*---------------------------------------------------------------------------*/ - -#include "errorDrivenRefinement.H" -#include "polyTopoChanger.H" -#include "polyMesh.H" -#include "primitiveMesh.H" -#include "polyTopoChange.H" -#include "addToRunTimeSelectionTable.H" -#include "volFields.H" -#include "surfaceFields.H" -#include "evaluateError.H" -#include "fvc.H" -#include "mapPolyMesh.H" -#include "topoCellLooper.H" -#include "cellCuts.H" - -// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // - -namespace Foam -{ - defineTypeNameAndDebug(errorDrivenRefinement, 0); - addToRunTimeSelectionTable - ( - polyMeshModifier, - errorDrivenRefinement, - dictionary - ); -} - - -// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // - - -// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // - -// Construct from dictionary -Foam::errorDrivenRefinement::errorDrivenRefinement -( - const word& name, - const dictionary& dict, - const label index, - const polyTopoChanger& mme -) -: - polyMeshModifier(name, index, mme, false), - refinementEngine_(topoChanger().mesh(), true), - errorField_(dict.lookup("errorField")) -{} - - -// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * // - -Foam::errorDrivenRefinement::~errorDrivenRefinement() -{} - - -// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // - - -bool Foam::errorDrivenRefinement::changeTopology() const -{ - const Time& runTime = topoChanger().mesh().time(); - - if (runTime.foundObject(errorField_)) - { - if (debug) - { - Info<< "errorDrivenRefinement::changeTopology() : triggering topo" - << " change since found errorField " - << errorField_ << endl; - } - - return true; - } - else - { - if (debug) - { - Info<< "errorDrivenRefinement::changeTopology() : no topo" - << " change request from me since no errorField " - << errorField_ << endl; - } - - return false; - } -} - - -void Foam::errorDrivenRefinement::setRefinement(polyTopoChange& ref) const -{ - // Insert the coarsen/refinement instructions into the topological change - - if (debug) - { - Info<< "errorDrivenRefinement::setRefinement(polyTopoChange& ref)" - << endl; - } - - const polyMesh& mesh = topoChanger().mesh(); - - const Time& runTime = mesh.time(); - - if (debug) - { - Info<< "Looking up vector field with name " << errorField_ << endl; - } - const volVectorField& resError = - runTime.lookupObject(errorField_); - - const volScalarField magResError(Foam::mag(resError)); - - scalar min = Foam::min(magResError).value(); - scalar max = Foam::max(magResError).value(); - scalar avg = Foam::average(magResError).value(); - - if (debug) - { - Info<< "Writing magResError" << endl; - magResError.write(); - - Info<< "min:" << min << " max:" << max << " avg:" << avg << endl; - } - - // Get faces to remove and cells to refine based on error - evaluateError refPattern - ( - magResError, // Error on cells - resError, // Error vector on cells - fvc::interpolate(magResError), // Error on faces - refinementEngine_.getSplitFaces() // Current live split faces - ); - - - // Insert mesh refinement into polyTopoChange: - // - remove split faces - // - refine cells - - // Give 'hint' of faces to remove to cell splitter. - const labelList& candidates = refPattern.unsplitFaces(); - ////Hack:no unsplitting - //labelList candidates; - - labelList removedFaces(refinementEngine_.removeSplitFaces(candidates, ref)); - - // Now success will be for every candidates whether face has been removed. - // Protect cells using face from refinement. - - // List of protected cells - boolList markedCell(mesh.nCells(), false); - - forAll(removedFaces, i) - { - label faceI = removedFaces[i]; - - markedCell[mesh.faceOwner()[faceI]] = true; - - if (mesh.isInternalFace(faceI)) - { - markedCell[mesh.faceNeighbour()[faceI]] = true; - } - } - - // Repack list of cells to refine. - List refCells = refPattern.refCells(); - - label newRefCellI = 0; - - forAll(refCells, refCellI) - { - label cellI = refCells[refCellI].cellNo(); - - if (!markedCell[cellI] && (newRefCellI != refCellI)) - { - refCells[newRefCellI++] = refCells[refCellI]; - } - } - - if (debug) - { - Info<< "errorDrivenRefinement : shrinking refCells from " - << refCells.size() - << " to " << newRefCellI << endl; - } - - refCells.setSize(newRefCellI); - - // Determine cut pattern using topological cell walker - topoCellLooper cellWalker(mesh); - - cellCuts cuts(mesh, cellWalker, refCells); - - // Do actual splitting - refinementEngine_.setRefinement(cuts, ref); -} - - -// Has the responsability of moving my newly introduced points onto the right -// place. This is since the whole mesh might e.g. have been moved by another -// meshmodifier. So using preMotionPoints is hack for if I am only meshModifier. -// Good solution: -// - remember new point label of introduced point and vertices -// of edge it is created from (in setRefinement) -// - in here reposition point at correct position between current vertex -// position of edge endpoints. -void Foam::errorDrivenRefinement::modifyMotionPoints -( - pointField& motionPoints -) const -{ - if (debug) - { - Info<< "errorDrivenRefinement::modifyMotionPoints(*pointField&)" - << endl; - } -} - - -void Foam::errorDrivenRefinement::updateMesh(const mapPolyMesh& morphMap) -{ - // Mesh has changed topologically. Update local topological data - if (debug) - { - Info<< "errorDrivenRefinement::updateMesh" - << "(const mapPolyMesh& morphMap)" << endl; - } - refinementEngine_.updateMesh(morphMap); -} - - -void Foam::errorDrivenRefinement::write(Ostream& os) const -{ - os << nl << type() << nl; -} - - -void Foam::errorDrivenRefinement::writeDict(Ostream& os) const -{ - os << nl << name() << nl << token::BEGIN_BLOCK << nl - << " type " << type() - << token::END_STATEMENT << nl - << token::END_BLOCK << endl; -} - - -// * * * * * * * * * * * * * * * Member Operators * * * * * * * * * * * * * // - - -// * * * * * * * * * * * * * * * Friend Functions * * * * * * * * * * * * * // - - -// * * * * * * * * * * * * * * * Friend Operators * * * * * * * * * * * * * // - - -// ************************************************************************* // diff --git a/src/errorEstimation/errorDrivenRefinement/errorDrivenRefinement.H b/src/errorEstimation/errorDrivenRefinement/errorDrivenRefinement.H deleted file mode 100644 index cdc8f53943..0000000000 --- a/src/errorEstimation/errorDrivenRefinement/errorDrivenRefinement.H +++ /dev/null @@ -1,136 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 2004-2010 OpenCFD Ltd. - \\/ M anipulation | -------------------------------------------------------------------------------- -License - This file is part of OpenFOAM. - - OpenFOAM is free software: you can redistribute it and/or modify it - under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OpenFOAM is distributed in the hope that it will be useful, but WITHOUT - ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - for more details. - - You should have received a copy of the GNU General Public License - along with OpenFOAM. If not, see . - -Class - Foam::errorDrivenRefinement - -Description - Refines and coarsens based on error estimate. - -SourceFiles - errorDrivenRefinement.C - -\*---------------------------------------------------------------------------*/ - -#ifndef errorDrivenRefinement_H -#define errorDrivenRefinement_H - -#include "polyMeshModifier.H" -#include "undoableMeshCutter.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ - -// Forward declaration of classes - -/*---------------------------------------------------------------------------*\ - Class errorDrivenRefinement Declaration -\*---------------------------------------------------------------------------*/ - -class errorDrivenRefinement -: - public polyMeshModifier -{ - // Private data - - //- Refinement/coarsening engine - mutable undoableMeshCutter refinementEngine_; - - //- Name of volVectorField which contains error. - word errorField_; - - - // Private Member Functions - - //- Disallow default bitwise copy construct - errorDrivenRefinement(const errorDrivenRefinement&); - - //- Disallow default bitwise assignment - void operator=(const errorDrivenRefinement&); - - -public: - - //- Runtime type information - TypeName("errorDrivenRefinement"); - - - // Constructors - - //- Construct from dictionary - errorDrivenRefinement - ( - const word& name, - const dictionary& dict, - const label index, - const polyTopoChanger& mme - ); - - - //- Destructor - virtual ~errorDrivenRefinement(); - - - // Member Functions - - //- Check for topology change - virtual bool changeTopology() const; - - //- Insert the layer addition/removal instructions - // into the topological change - virtual void setRefinement(polyTopoChange&) const; - - //- Modify motion points to comply with the topological change - virtual void modifyMotionPoints(pointField& motionPoints) const; - - //- Force recalculation of locally stored data on topological change - virtual void updateMesh(const mapPolyMesh&); - - //- Write - virtual void write(Ostream&) const; - - //- Write dictionary - virtual void writeDict(Ostream&) const; - - - // Access - - //- Underlying mesh modifier - const undoableMeshCutter& refinementEngine() const - { - return refinementEngine_; - } -}; - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace Foam - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -#endif - -// ************************************************************************* // diff --git a/src/errorEstimation/errorEstimate/errorEstimate.C b/src/errorEstimation/errorEstimate/errorEstimate.C deleted file mode 100644 index d233c5d526..0000000000 --- a/src/errorEstimation/errorEstimate/errorEstimate.C +++ /dev/null @@ -1,1163 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 2004-2010 OpenCFD Ltd. - \\/ M anipulation | -------------------------------------------------------------------------------- -License - This file is part of OpenFOAM. - - OpenFOAM is free software: you can redistribute it and/or modify it - under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OpenFOAM is distributed in the hope that it will be useful, but WITHOUT - ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - for more details. - - You should have received a copy of the GNU General Public License - along with OpenFOAM. If not, see . - -\*---------------------------------------------------------------------------*/ - -#include "errorEstimate.H" -#include "zeroGradientFvPatchField.H" -#include "fixedValueFvPatchField.H" - -// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // - - -// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // - -template -Foam::wordList Foam::errorEstimate::errorBCTypes() const -{ - // Make the boundary condition type list - // Default types get over-ridden anyway - wordList ebct - ( - psi_.boundaryField().size(), - zeroGradientFvPatchField::typeName - ); - - forAll(psi_.boundaryField(), patchI) - { - if (psi_.boundaryField()[patchI].fixesValue()) - { - ebct[patchI] = fixedValueFvPatchField::typeName; - } - } - - return ebct; -} - - -// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // - -// Construct from components -template -Foam::errorEstimate::errorEstimate -( - const GeometricField& psi, - const dimensionSet& ds, - const Field& res, - const scalarField& norm -) -: - psi_(psi), - dimensions_(ds), - residual_(res), - normFactor_(norm) -{} - - -// Construct as copy -template -Foam::errorEstimate::errorEstimate(const Foam::errorEstimate& ee) -: - refCount(), - psi_(ee.psi_), - dimensions_(ee.dimensions_), - residual_(ee.residual_), - normFactor_(ee.normFactor_) -{} - - -// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * // - -template -Foam::errorEstimate::~errorEstimate() -{} - - -// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // - -template -Foam::tmp > -Foam::errorEstimate::residual() const -{ - tmp > tres - ( - new GeometricField - ( - IOobject - ( - "residual" + psi_.name(), - psi_.mesh().time().timeName(), - psi_.db(), - IOobject::NO_READ, - IOobject::NO_WRITE - ), - psi_.mesh(), - psi_.dimensions()/dimTime, - errorBCTypes() - ) - ); - - GeometricField& res = tres(); - - res.internalField() = residual_; - res.boundaryField() == pTraits::zero; - - res.correctBoundaryConditions(); - - return tres; -} - - -template -Foam::tmp Foam::errorEstimate::normFactor() const -{ - tmp tnormFactor - ( - new volScalarField - ( - IOobject - ( - "normFactor" + psi_.name(), - psi_.mesh().time().timeName(), - psi_.db(), - IOobject::NO_READ, - IOobject::NO_WRITE - ), - psi_.mesh(), - dimless/dimTime, - errorBCTypes() - ) - ); - - volScalarField& normFactor = tnormFactor(); - - normFactor.internalField() = normFactor_; - normFactor.boundaryField() == pTraits::zero; - - normFactor.correctBoundaryConditions(); - - return tnormFactor; -} - -template -Foam::tmp > -Foam::errorEstimate::error() const -{ - tmp > tresError - ( - new GeometricField - ( - IOobject - ( - "resError" + psi_.name(), - psi_.mesh().time().timeName(), - psi_.db(), - IOobject::NO_READ, - IOobject::NO_WRITE - ), - psi_.mesh(), - psi_.dimensions(), - errorBCTypes() - ) - ); - - GeometricField& resError = tresError(); - - resError.internalField() = residual_/normFactor_; - resError.boundaryField() == pTraits::zero; - - resError.correctBoundaryConditions(); - - return tresError; -} - -// * * * * * * * * * * * * * * * Member Operators * * * * * * * * * * * * * // - -template -void Foam::errorEstimate::operator=(const Foam::errorEstimate& rhs) -{ - // Check for assignment to self - if (this == &rhs) - { - FatalErrorIn - ( - "errorEstimate::operator=(const Foam::errorEstimate&)" - ) << "Attempted assignment to self" - << abort(FatalError); - } - - if (&psi_ != &(rhs.psi_)) - { - FatalErrorIn - ( - "errorEstimate::operator=(const errorEstimate&)" - ) << "different fields" - << abort(FatalError); - } - - residual_ = rhs.residual_; - normFactor_ = rhs.normFactor_; -} - - -template -void Foam::errorEstimate::operator=(const tmp >& teev) -{ - operator=(teev()); - teev.clear(); -} - - -template -void Foam::errorEstimate::negate() -{ - residual_.negate(); -} - - -template -void Foam::errorEstimate::operator+=(const errorEstimate& eev) -{ - checkMethod(*this, eev, "+="); - - dimensions_ += eev.dimensions_; - - residual_ += eev.residual_; - normFactor_ += eev.normFactor_; -} - - -template -void Foam::errorEstimate::operator+= -( - const tmp >& teev -) -{ - operator+=(teev()); - teev.clear(); -} - - -template -void Foam::errorEstimate::operator-=(const errorEstimate& eev) -{ - checkMethod(*this, eev, "+="); - - dimensions_ -= eev.dimensions_; - residual_ -= eev.residual_; - normFactor_ += eev.normFactor_; -} - - -template -void Foam::errorEstimate::operator-= -( - const tmp >& teev -) -{ - operator-=(teev()); - teev.clear(); -} - - -template -void Foam::errorEstimate::operator+= -( - const GeometricField& su -) -{ - checkMethod(*this, su, "+="); - residual_ -= su.internalField(); -} - - -template -void Foam::errorEstimate::operator+= -( - const tmp >& tsu -) -{ - operator+=(tsu()); - tsu.clear(); -} - - -template -void Foam::errorEstimate::operator-= -( - const GeometricField& su -) -{ - checkMethod(*this, su, "-="); - residual_ += su.internalField(); -} - - -template -void Foam::errorEstimate::operator-= -( - const tmp >& tsu -) -{ - operator-=(tsu()); - tsu.clear(); -} - - -template -void Foam::errorEstimate::operator+= -( - const dimensioned& su -) -{ - residual_ -= su; -} - - -template -void Foam::errorEstimate::operator-= -( - const dimensioned& su -) -{ - residual_ += su; -} - - -template -void Foam::errorEstimate::operator*= -( - const volScalarField& vsf -) -{ - dimensions_ *= vsf.dimensions(); - residual_ *= vsf.internalField(); - normFactor_ *= vsf.internalField(); -} - - -template -void Foam::errorEstimate::operator*= -( - const tmp& tvsf -) -{ - operator*=(tvsf()); - tvsf.clear(); -} - - -template -void Foam::errorEstimate::operator*= -( - const dimensioned& ds -) -{ - dimensions_ *= ds.dimensions(); - residual_ *= ds.value(); - normFactor_ *= ds.value(); -} - - -// * * * * * * * * * * * * * * * Friend Functions * * * * * * * * * * * * * // - -template -void Foam::checkMethod -( - const errorEstimate& ee1, - const errorEstimate& ee2, - const char* op -) -{ - if (&ee1.psi() != &ee2.psi()) - { - FatalErrorIn - ( - "checkMethod(const errorEstimate&, " - "const errorEstimate&)" - ) << "incompatible fields for operation " - << endl << " " - << "[" << ee1.psi().name() << "] " - << op - << " [" << ee2.psi().name() << "]" - << abort(FatalError); - } - - if (dimensionSet::debug && ee1.dimensions() != ee2.dimensions()) - { - FatalErrorIn - ( - "checkMethod(const errorEstimate&, " - "const errorEstimate&)" - ) << "incompatible dimensions for operation " - << endl << " " - << "[" << ee1.psi().name() << ee1.dimensions()/dimVolume << " ] " - << op - << " [" << ee2.psi().name() << ee2.dimensions()/dimVolume << " ]" - << abort(FatalError); - } -} - - -template -void Foam::checkMethod -( - const errorEstimate& ee, - const GeometricField& vf, - const char* op -) -{ - if (dimensionSet::debug && ee.dimensions()/dimVolume != vf.dimensions()) - { - FatalErrorIn - ( - "checkMethod(const errorEstimate&, " - "const GeometricField&)" - ) << "incompatible dimensions for operation " - << endl << " " - << "[" << ee.psi().name() << ee.dimensions()/dimVolume << " ] " - << op - << " [" << vf.name() << vf.dimensions() << " ]" - << abort(FatalError); - } -} - - -template -void Foam::checkMethod -( - const errorEstimate& ee, - const dimensioned& dt, - const char* op -) -{ - if (dimensionSet::debug && ee.dimensions()/dimVolume != dt.dimensions()) - { - FatalErrorIn - ( - "checkMethod(const errorEstimate&, const dimensioned&)" - ) << "incompatible dimensions for operation " - << endl << " " - << "[" << ee.psi().name() << ee.dimensions()/dimVolume << " ] " - << op - << " [" << dt.name() << dt.dimensions() << " ]" - << abort(FatalError); - } -} - - -// * * * * * * * * * * * * * * * Friend Operators * * * * * * * * * * * * * // - -namespace Foam -{ - -template -tmp > operator+ -( - const errorEstimate& A, - const errorEstimate& B -) -{ - checkMethod(A, B, "+"); - tmp > tC(new errorEstimate(A)); - tC() += B; - return tC; -} - - -template -tmp > operator+ -( - const tmp >& tA, - const errorEstimate& B -) -{ - checkMethod(tA(), B, "+"); - tmp > tC(tA.ptr()); - tC() += B; - return tC; -} - - -template -tmp > operator+ -( - const errorEstimate& A, - const tmp >& tB -) -{ - checkMethod(A, tB(), "+"); - tmp > tC(tB.ptr()); - tC() += A; - return tC; -} - - -template -tmp > operator+ -( - const tmp >& tA, - const tmp >& tB -) -{ - checkMethod(tA(), tB(), "+"); - tmp > tC(tA.ptr()); - tC() += tB(); - tB.clear(); - return tC; -} - - -template -tmp > operator- -( - const errorEstimate& A -) -{ - tmp > tC(new errorEstimate(A)); - tC().negate(); - return tC; -} - - -template -tmp > operator- -( - const tmp >& tA -) -{ - tmp > tC(tA.ptr()); - tC().negate(); - return tC; -} - - -template -tmp > operator- -( - const errorEstimate& A, - const errorEstimate& B -) -{ - checkMethod(A, B, "-"); - tmp > tC(new errorEstimate(A)); - tC() -= B; - return tC; -} - - -template -tmp > operator- -( - const tmp >& tA, - const errorEstimate& B -) -{ - checkMethod(tA(), B, "-"); - tmp > tC(tA.ptr()); - tC() -= B; - return tC; -} - - -template -tmp > operator- -( - const errorEstimate& A, - const tmp >& tB -) -{ - checkMethod(A, tB(), "-"); - tmp > tC(tB.ptr()); - tC() -= A; - tC().negate(); - return tC; -} - - -template -tmp > operator- -( - const tmp >& tA, - const tmp >& tB -) -{ - checkMethod(tA(), tB(), "-"); - tmp > tC(tA.ptr()); - tC() -= tB(); - tB.clear(); - return tC; -} - - -template -tmp > operator== -( - const errorEstimate& A, - const errorEstimate& B -) -{ - checkMethod(A, B, "=="); - return (A - B); -} - - -template -tmp > operator== -( - const tmp >& tA, - const errorEstimate& B -) -{ - checkMethod(tA(), B, "=="); - return (tA - B); -} - - -template -tmp > operator== -( - const errorEstimate& A, - const tmp >& tB -) -{ - checkMethod(A, tB(), "=="); - return (A - tB); -} - - -template -tmp > operator== -( - const tmp >& tA, - const tmp >& tB -) -{ - checkMethod(tA(), tB(), "=="); - return (tA - tB); -} - - -template -tmp > operator+ -( - const errorEstimate& A, - const GeometricField& su -) -{ - checkMethod(A, su, "+"); - tmp > tC(new errorEstimate(A)); - tC().res() -= su.internalField(); - return tC; -} - -template -tmp > operator+ -( - const tmp >& tA, - const GeometricField& su -) -{ - checkMethod(tA(), su, "+"); - tmp > tC(tA.ptr()); - tC().res() -= su.internalField(); - return tC; -} - -template -tmp > operator+ -( - const errorEstimate& A, - const tmp >& tsu -) -{ - checkMethod(A, tsu(), "+"); - tmp > tC(new errorEstimate(A)); - tC().res() -= tsu().internalField(); - tsu.clear(); - return tC; -} - - -template -tmp > operator+ -( - const tmp >& tA, - const tmp >& tsu -) -{ - checkMethod(tA(), tsu(), "+"); - tmp > tC(tA.ptr()); - tC().res() -= tsu().internalField(); - tsu.clear(); - return tC; -} - -template -tmp > operator+ -( - const GeometricField& su, - const errorEstimate& A -) -{ - checkMethod(A, su, "+"); - tmp > tC(new errorEstimate(A)); - tC().res() -= su.internalField(); - return tC; -} - -template -tmp > operator+ -( - const GeometricField& su, - const tmp >& tA -) -{ - checkMethod(tA(), su, "+"); - tmp > tC(tA.ptr()); - tC().res() -= su.internalField(); - return tC; -} - -template -tmp > operator+ -( - const tmp >& tsu, - const errorEstimate& A -) -{ - checkMethod(A, tsu(), "+"); - tmp > tC(new errorEstimate(A)); - tC().res() -= tsu().internalField(); - tsu.clear(); - return tC; -} - -template -tmp > operator+ -( - const tmp >& tsu, - const tmp >& tA -) -{ - checkMethod(tA(), tsu(), "+"); - tmp > tC(tA.ptr()); - tC().res() -= tsu().internalField(); - tsu.clear(); - return tC; -} - - -template -tmp > operator- -( - const errorEstimate& A, - const GeometricField& su -) -{ - checkMethod(A, su, "-"); - tmp > tC(new errorEstimate(A)); - tC().res() += su.internalField(); - return tC; -} - -template -tmp > operator- -( - const tmp >& tA, - const GeometricField& su -) -{ - checkMethod(tA(), su, "-"); - tmp > tC(tA.ptr()); - tC().res() += su.internalField(); - return tC; -} - -template -tmp > operator- -( - const errorEstimate& A, - const tmp >& tsu -) -{ - checkMethod(A, tsu(), "-"); - tmp > tC(new errorEstimate(A)); - tC().res() += tsu().internalField(); - tsu.clear(); - return tC; -} - -template -tmp > operator- -( - const tmp >& tA, - const tmp >& tsu -) -{ - checkMethod(tA(), tsu(), "-"); - tmp > tC(tA.ptr()); - tC().res() += tsu().internalField(); - tsu.clear(); - return tC; -} - - -template -tmp > operator- -( - const GeometricField& su, - const errorEstimate& A -) -{ - checkMethod(A, su, "-"); - tmp > tC(new errorEstimate(A)); - tC().negate(); - tC().res() -= su.internalField(); - return tC; -} - - -template -tmp > operator- -( - const GeometricField& su, - const tmp >& tA -) -{ - checkMethod(tA(), su, "-"); - tmp > tC(tA.ptr()); - tC().negate(); - tC().res() -= su.internalField(); - return tC; -} - -template -tmp > operator- -( - const tmp >& tsu, - const errorEstimate& A -) -{ - checkMethod(A, tsu(), "-"); - tmp > tC(new errorEstimate(A)); - tC().negate(); - tC().res() -= tsu().internalField(); - tsu.clear(); - return tC; -} - - -template -tmp > operator- -( - const tmp >& tsu, - const tmp >& tA -) -{ - checkMethod(tA(), tsu(), "-"); - tmp > tC(tA.ptr()); - tC().negate(); - tC().res() -= tsu().internalField(); - tsu.clear(); - return tC; -} - - -template -tmp > operator+ -( - const errorEstimate& A, - const dimensioned& su -) -{ - checkMethod(A, su, "+"); - tmp > tC(new errorEstimate(A)); - tC().res() -= su.value(); - return tC; -} - - -template -tmp > operator+ -( - const tmp >& tA, - const dimensioned& su -) -{ - checkMethod(tA(), su, "+"); - tmp > tC(tA.ptr()); - tC().res() -= su.value(); - return tC; -} - - -template -tmp > operator+ -( - const dimensioned& su, - const errorEstimate& A -) -{ - checkMethod(A, su, "+"); - tmp > tC(new errorEstimate(A)); - tC().res() -= su.value(); - return tC; -} - - -template -tmp > operator+ -( - const dimensioned& su, - const tmp >& tA -) -{ - checkMethod(tA(), su, "+"); - tmp > tC(tA.ptr()); - tC().res() -= su.value(); - return tC; -} - - -template -tmp > operator- -( - const errorEstimate& A, - const dimensioned& su -) -{ - checkMethod(A, su, "-"); - tmp > tC(new errorEstimate(A)); - tC().res() += su.value(); - return tC; -} - - -template -tmp > operator- -( - const tmp >& tA, - const dimensioned& su -) -{ - checkMethod(tA(), su, "-"); - tmp > tC(tA.ptr()); - tC().res() += su.value(); - return tC; -} - - -template -tmp > operator- -( - const dimensioned& su, - const errorEstimate& A -) -{ - checkMethod(A, su, "-"); - tmp > tC(new errorEstimate(A)); - tC().negate(); - tC().res() -= su.value(); - return tC; -} - - -template -tmp > operator- -( - const dimensioned& su, - const tmp >& tA -) -{ - checkMethod(tA(), su, "-"); - tmp > tC(tA.ptr()); - tC().negate(); - tC().res() -= su.value(); - return tC; -} - - -template -tmp > operator== -( - const errorEstimate& A, - const GeometricField& su -) -{ - checkMethod(A, su, "=="); - tmp > tC(new errorEstimate(A)); - tC().res() += su.internalField(); - return tC; -} - -template -tmp > operator== -( - const tmp >& tA, - const GeometricField& su -) -{ - checkMethod(tA(), su, "=="); - tmp > tC(tA.ptr()); - tC().res() += su.internalField(); - return tC; -} - -template -tmp > operator== -( - const errorEstimate& A, - const tmp >& tsu -) -{ - checkMethod(A, tsu(), "=="); - tmp > tC(new errorEstimate(A)); - tC().res() += tsu().internalField(); - tsu.clear(); - return tC; -} - -template -tmp > operator== -( - const tmp >& tA, - const tmp >& tsu -) -{ - checkMethod(tA(), tsu(), "=="); - tmp > tC(tA.ptr()); - tC().res() += tsu().internalField(); - tsu.clear(); - return tC; -} - - -template -tmp > operator== -( - const errorEstimate& A, - const dimensioned& su -) -{ - checkMethod(A, su, "=="); - tmp > tC(new errorEstimate(A)); - tC().res() += su.value(); - return tC; -} - - -template -tmp > operator== -( - const tmp >& tA, - const dimensioned& su -) -{ - checkMethod(tA(), su, "=="); - tmp > tC(tA.ptr()); - tC().res() += su.value(); - return tC; -} - - -template -tmp > operator* -( - const volScalarField& vsf, - const errorEstimate& A -) -{ - tmp > tC(new errorEstimate(A)); - tC() *= vsf; - return tC; -} - -template -tmp > operator* -( - const tmp& tvsf, - const errorEstimate& A -) -{ - tmp > tC(new errorEstimate(A)); - tC() *= tvsf; - return tC; -} - -template -tmp > operator* -( - const volScalarField& vsf, - const tmp >& tA -) -{ - tmp > tC(tA.ptr()); - tC() *= vsf; - return tC; -} - -template -tmp > operator* -( - const tmp& tvsf, - const tmp >& tA -) -{ - tmp > tC(tA.ptr()); - tC() *= tvsf; - return tC; -} - - -template -tmp > operator* -( - const dimensioned& ds, - const errorEstimate& A -) -{ - tmp > tC(new errorEstimate(A)); - tC() *= ds; - return tC; -} - - -template -tmp > operator* -( - const dimensioned& ds, - const tmp >& tA -) -{ - tmp > tC(tA.ptr()); - tC() *= ds; - return tC; -} - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace Foam - -// ************************************************************************* // diff --git a/src/errorEstimation/errorEstimate/errorEstimate.H b/src/errorEstimation/errorEstimate/errorEstimate.H deleted file mode 100644 index f41a99f257..0000000000 --- a/src/errorEstimation/errorEstimate/errorEstimate.H +++ /dev/null @@ -1,542 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 2004-2010 OpenCFD Ltd. - \\/ M anipulation | -------------------------------------------------------------------------------- -License - This file is part of OpenFOAM. - - OpenFOAM is free software: you can redistribute it and/or modify it - under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OpenFOAM is distributed in the hope that it will be useful, but WITHOUT - ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - for more details. - - You should have received a copy of the GNU General Public License - along with OpenFOAM. If not, see . - -Class - Foam::errorEstimate - -Description - Residual error estimation - -SourceFiles - errorEstimate.C - -\*---------------------------------------------------------------------------*/ - -#ifndef errorEstimate_H -#define errorEstimate_H - -#include "volFields.H" -#include "surfaceFields.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ - -/*---------------------------------------------------------------------------*\ - Class errorEstimate Declaration -\*---------------------------------------------------------------------------*/ - -template -class errorEstimate -: - public refCount -{ - // Private data - - // Reference to GeometricField - const GeometricField& psi_; - - //- Dimension set - dimensionSet dimensions_; - - //- Cell residual pointer - Field residual_; - - //- Normalisation factor - scalarField normFactor_; - - - // Private Member Functions - - //- Return boundary condition types for the error field - wordList errorBCTypes() const; - -public: - - // Static data members - - ClassName("errorEstimate"); - - - // Constructors - - //- Construct from components - errorEstimate - ( - const GeometricField& psi, - const dimensionSet& ds, - const Field& res, - const scalarField& norm - ); - - //- Construct as copy - errorEstimate(const errorEstimate&); - - - //- Destructor - ~errorEstimate(); - - - // Member Functions - - // Access - - //- Return field - const GeometricField& psi() const - { - return psi_; - } - - //- Return residual dimensions - const dimensionSet& dimensions() const - { - return dimensions_; - } - - // Raw residual (for calculus) - - Field& res() - { - return residual_; - } - - const Field& res() const - { - return residual_; - } - - - // Error Estimate - - //- Cell residual (volume intensive) - tmp > residual() const; - - //- Normalisation factor - tmp normFactor() const; - - //- Error estimate - tmp > error() const; - - - // Member Operators - - void operator=(const errorEstimate&); - void operator=(const tmp >&); - - void negate(); - - void operator+=(const errorEstimate&); - void operator+=(const tmp >&); - - void operator-=(const errorEstimate&); - void operator-=(const tmp >&); - - void operator+=(const GeometricField&); - void operator+=(const tmp >&); - - void operator-=(const GeometricField&); - void operator-=(const tmp >&); - - void operator+=(const dimensioned&); - void operator-=(const dimensioned&); - - void operator*=(const volScalarField&); - void operator*=(const tmp&); - - void operator*=(const dimensioned&); - - - // Friend Functions - - // Friend Operators -}; - - -// * * * * * * * * * * * * * * * Global functions * * * * * * * * * * * * * // - -template -void checkMethod -( - const errorEstimate&, - const errorEstimate&, - const char* -); - -template -void checkMethod -( - const errorEstimate&, - const GeometricField&, - const char* -); - -template -void checkMethod -( - const errorEstimate&, - const dimensioned&, - const char* -); - - -// * * * * * * * * * * * * * * * Global operators * * * * * * * * * * * * * // - -template -tmp > operator- -( - const errorEstimate& -); - -template -tmp > operator- -( - const tmp >& -); - -template -tmp > operator+ -( - const errorEstimate&, - const errorEstimate& -); - -template -tmp > operator+ -( - const tmp >&, - const errorEstimate& -); - -template -tmp > operator+ -( - const errorEstimate&, - const tmp >& -); - -template -tmp > operator+ -( - const tmp >&, - const tmp >& -); - -template -tmp > operator- -( - const errorEstimate&, - const errorEstimate& -); - -template -tmp > operator- -( - const tmp >&, - const errorEstimate& -); - -template -tmp > operator- -( - const errorEstimate&, - const tmp >& -); - -template -tmp > operator- -( - const tmp >&, - const tmp >& -); - -template -tmp > operator== -( - const errorEstimate&, - const errorEstimate& -); - -template -tmp > operator== -( - const tmp >&, - const errorEstimate& -); - -template -tmp > operator== -( - const errorEstimate&, - const tmp >& -); - -template -tmp > operator== -( - const tmp >&, - const tmp >& -); - -template -tmp > operator+ -( - const errorEstimate&, - const GeometricField& -); - -template -tmp > operator+ -( - const tmp >&, - const GeometricField& -); - -template -tmp > operator+ -( - const errorEstimate&, - const tmp >& -); - -template -tmp > operator+ -( - const tmp >&, - const tmp >& -); - -template -tmp > operator+ -( - const GeometricField&, - const errorEstimate& -); - -template -tmp > operator+ -( - const GeometricField&, - const tmp >& -); - -template -tmp > operator+ -( - const tmp >&, - const errorEstimate& -); - -template -tmp > operator+ -( - const tmp >&, - const tmp >& -); - -template -tmp > operator- -( - const errorEstimate&, - const GeometricField& -); - -template -tmp > operator- -( - const tmp >&, - const GeometricField& -); - -template -tmp > operator- -( - const errorEstimate&, - const tmp >& -); - -template -tmp > operator- -( - const tmp >&, - const tmp >& -); - -template -tmp > operator- -( - const GeometricField&, - const errorEstimate& -); - -template -tmp > operator- -( - const GeometricField&, - const tmp >& -); - -template -tmp > operator- -( - const tmp >&, - const errorEstimate& -); - -template -tmp > operator- -( - const tmp >&, - const tmp >& -); - -template -tmp > operator+ -( - const tmp >&, - const dimensioned& -); - -template -tmp > operator+ -( - const dimensioned&, - const tmp >& -); - -template -tmp > operator- -( - const tmp >&, - const dimensioned& -); - -template -tmp > operator- -( - const dimensioned&, - const tmp >& -); - -template -tmp > operator== -( - const errorEstimate&, - const GeometricField& -); - -template -tmp > operator== -( - const tmp >&, - const GeometricField& -); - -template -tmp > operator== -( - const errorEstimate&, - const tmp >& -); - -template -tmp > operator== -( - const tmp >&, - const tmp >& -); - -template -tmp > operator== -( - const errorEstimate&, - const dimensioned& -); - -template -tmp > operator== -( - const tmp >&, - const dimensioned& -); - - -template -tmp > operator* -( - const volScalarField&, - const errorEstimate& -); - -template -tmp > operator* -( - const volScalarField&, - const tmp >& -); - -template -tmp > operator* -( - const tmp&, - const errorEstimate& -); - -template -tmp > operator* -( - const tmp&, - const tmp >& -); - - -template -tmp > operator* -( - const dimensioned&, - const errorEstimate& -); - -template -tmp > operator* -( - const dimensioned&, - const tmp >& -); - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace Foam - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -#ifdef NoRepository -# include "errorEstimate.C" -#endif - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -#endif - -// ************************************************************************* // diff --git a/src/errorEstimation/errorEstimate/resError.H b/src/errorEstimation/errorEstimate/resError.H deleted file mode 100644 index 3632de5324..0000000000 --- a/src/errorEstimation/errorEstimate/resError.H +++ /dev/null @@ -1,43 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 2004-2010 OpenCFD Ltd. - \\/ M anipulation | -------------------------------------------------------------------------------- -License - This file is part of OpenFOAM. - - OpenFOAM is free software: you can redistribute it and/or modify it - under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OpenFOAM is distributed in the hope that it will be useful, but WITHOUT - ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - for more details. - - You should have received a copy of the GNU General Public License - along with OpenFOAM. If not, see . - -Namespace - Foam::resError - -Description - Namespace for residual error estimate operators. - -\*---------------------------------------------------------------------------*/ - -#ifndef resError_H -#define resError_H - -#include "resErrorDiv.H" -#include "resErrorLaplacian.H" -#include "resErrorSup.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -#endif - -// ************************************************************************* // diff --git a/src/errorEstimation/errorEstimate/resErrorDiv.C b/src/errorEstimation/errorEstimate/resErrorDiv.C deleted file mode 100644 index 1a8bf71c35..0000000000 --- a/src/errorEstimation/errorEstimate/resErrorDiv.C +++ /dev/null @@ -1,168 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 2004-2010 OpenCFD Ltd. - \\/ M anipulation | -------------------------------------------------------------------------------- -License - This file is part of OpenFOAM. - - OpenFOAM is free software: you can redistribute it and/or modify it - under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OpenFOAM is distributed in the hope that it will be useful, but WITHOUT - ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - for more details. - - You should have received a copy of the GNU General Public License - along with OpenFOAM. If not, see . - -\*---------------------------------------------------------------------------*/ - -#include "resErrorDiv.H" -#include "fvc.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace resError -{ - -template -tmp > -div -( - const surfaceScalarField& flux, - const GeometricField& vf -) -{ - const fvMesh& mesh = vf.mesh(); - - const scalarField& vols = mesh.V(); - const surfaceVectorField& faceCentres = mesh.Cf(); - const volVectorField& cellCentres = mesh.C(); - const fvPatchList& patches = mesh.boundary(); - const labelUList& owner = mesh.owner(); - const labelUList& neighbour = mesh.neighbour(); - - Field res(vols.size(), pTraits::zero); - scalarField aNorm(vols.size(), 0.0); - - // Get sign of flux - const surfaceScalarField signF(pos(flux)); - - // Calculate gradient of the solution - GeometricField - < - typename outerProduct::type, fvPatchField, volMesh - > - gradVf(fvc::grad(vf)); - - // Internal faces - forAll(owner, faceI) - { - // Calculate the centre of the face - const vector& curFaceCentre = faceCentres[faceI]; - - // Owner - vector ownD = curFaceCentre - cellCentres[owner[faceI]]; - - // Subtract convection - res[owner[faceI]] -= - ( - vf[owner[faceI]] - + (ownD & gradVf[owner[faceI]]) - )*flux[faceI]; - - aNorm[owner[faceI]] += signF[faceI]*flux[faceI]; - - // Neighbour - vector neiD = curFaceCentre - cellCentres[neighbour[faceI]]; - - // Subtract convection - res[neighbour[faceI]] += - ( - vf[neighbour[faceI]] - + (neiD & gradVf[neighbour[faceI]]) - )*flux[faceI]; - - aNorm[neighbour[faceI]] -= (1.0 - signF[faceI])*flux[faceI]; - } - - forAll(patches, patchI) - { - const vectorField& patchFaceCentres = - faceCentres.boundaryField()[patchI]; - - const scalarField& patchFlux = flux.boundaryField()[patchI]; - const scalarField& patchSignFlux = signF.boundaryField()[patchI]; - - const labelList& fCells = patches[patchI].faceCells(); - - forAll(fCells, faceI) - { - vector d = - patchFaceCentres[faceI] - cellCentres[fCells[faceI]]; - - // Subtract convection - res[fCells[faceI]] -= - ( - vf[fCells[faceI]] - + (d & gradVf[fCells[faceI]]) - )*patchFlux[faceI]; - - aNorm[fCells[faceI]] += patchSignFlux[faceI]*patchFlux[faceI]; - } - } - - res /= vols; - aNorm /= vols; - - return tmp > - ( - new errorEstimate - ( - vf, - flux.dimensions()*vf.dimensions(), - res, - aNorm - ) - ); -} - - -template -tmp > -div -( - const tmp& tflux, - const GeometricField& vf -) -{ - tmp > Div(resError::div(tflux(), vf)); - tflux.clear(); - return Div; -} - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace resError - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace Foam - -// ************************************************************************* // - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - diff --git a/src/errorEstimation/errorEstimate/resErrorDiv.H b/src/errorEstimation/errorEstimate/resErrorDiv.H deleted file mode 100644 index 67645a9726..0000000000 --- a/src/errorEstimation/errorEstimate/resErrorDiv.H +++ /dev/null @@ -1,80 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 2004-2010 OpenCFD Ltd. - \\/ M anipulation | -------------------------------------------------------------------------------- -License - This file is part of OpenFOAM. - - OpenFOAM is free software: you can redistribute it and/or modify it - under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OpenFOAM is distributed in the hope that it will be useful, but WITHOUT - ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - for more details. - - You should have received a copy of the GNU General Public License - along with OpenFOAM. If not, see . - -InNamespace - Foam::resError - -Description - Residual error estimate for the fv convection operators. - -SourceFiles - resErrorDiv.C - -\*---------------------------------------------------------------------------*/ - -#ifndef resErrorDiv_H -#define resErrorDiv_H - -#include "errorEstimate.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ - -namespace resError -{ - // Divergence terms - - template - tmp > div - ( - const surfaceScalarField&, - const GeometricField& - ); - - template - tmp > div - ( - const tmp&, - const GeometricField& - ); - -} // End namespace resError - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace Foam - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -#ifdef NoRepository -# include "resErrorDiv.C" -#endif - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -#endif - -// ************************************************************************* // diff --git a/src/errorEstimation/errorEstimate/resErrorLaplacian.C b/src/errorEstimation/errorEstimate/resErrorLaplacian.C deleted file mode 100644 index f0469851eb..0000000000 --- a/src/errorEstimation/errorEstimate/resErrorLaplacian.C +++ /dev/null @@ -1,292 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 2004-2010 OpenCFD Ltd. - \\/ M anipulation | -------------------------------------------------------------------------------- -License - This file is part of OpenFOAM. - - OpenFOAM is free software: you can redistribute it and/or modify it - under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OpenFOAM is distributed in the hope that it will be useful, but WITHOUT - ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - for more details. - - You should have received a copy of the GNU General Public License - along with OpenFOAM. If not, see . - -\*---------------------------------------------------------------------------*/ - -#include "resErrorLaplacian.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace resError -{ - -template -tmp > -laplacian -( - const GeometricField& vf -) -{ - surfaceScalarField Gamma - ( - IOobject - ( - "gamma", - vf.time().constant(), - vf.db(), - IOobject::NO_READ - ), - vf.mesh(), - dimensionedScalar("1", dimless, 1.0) - ); - - return resError::laplacian(Gamma, vf); -} - - -template -tmp > -laplacian -( - const dimensionedScalar& gamma, - const GeometricField& vf -) -{ - surfaceScalarField Gamma - ( - IOobject - ( - gamma.name(), - vf.time().timeName(), - vf.db(), - IOobject::NO_READ - ), - vf.mesh(), - gamma - ); - - return resError::laplacian(Gamma, vf); -} - - -template -tmp > -laplacian -( - const volScalarField& gamma, - const GeometricField& vf -) -{ - return resError::laplacian(fvc::interpolate(gamma), vf); -} - - -template -tmp > -laplacian -( - const tmp& tgamma, - const GeometricField& vf -) -{ - tmp > Laplacian(resError::laplacian(tgamma(), vf)); - tgamma.clear(); - return Laplacian; -} - - -template -tmp > -laplacian -( - const surfaceScalarField& gamma, - const GeometricField& vf -) -{ - const fvMesh& mesh = vf.mesh(); - - const scalarField& vols = mesh.V(); - const surfaceVectorField& Sf = mesh.Sf(); - const surfaceScalarField magSf(mesh.magSf()); - const fvPatchList& patches = mesh.boundary(); - const labelUList& owner = mesh.owner(); - const labelUList& neighbour = mesh.neighbour(); - - const surfaceScalarField& delta = - mesh.surfaceInterpolation::deltaCoeffs(); - - Field res(vols.size(), pTraits::zero); - scalarField aNorm(vols.size(), 0.0); - - // Calculate gradient of the solution - GeometricField - < - typename outerProduct::type, fvPatchField, volMesh - > - gradVf(fvc::grad(vf)); - - // Internal faces - forAll(owner, faceI) - { - // Owner - - // Subtract diffusion - res[owner[faceI]] -= - gamma[faceI]*(Sf[faceI] & gradVf[owner[faceI]]); - - aNorm[owner[faceI]] += delta[faceI]*gamma[faceI]*magSf[faceI]; - - // Neighbour - - // Subtract diffusion - res[neighbour[faceI]] += - gamma[faceI]*(Sf[faceI] & gradVf[neighbour[faceI]]); - - aNorm[neighbour[faceI]] += delta[faceI]*gamma[faceI]*magSf[faceI]; - - } - - forAll(patches, patchI) - { - const vectorField& patchSf = Sf.boundaryField()[patchI]; - const scalarField& patchMagSf = magSf.boundaryField()[patchI]; - const scalarField& patchGamma = gamma.boundaryField()[patchI]; - const scalarField& patchDelta = delta.boundaryField()[patchI]; - - const labelList& fCells = patches[patchI].faceCells(); - - forAll(fCells, faceI) - { - // Subtract diffusion - res[fCells[faceI]] -= - patchGamma[faceI]* - ( - patchSf[faceI] & gradVf[fCells[faceI]] - ); - - aNorm[fCells[faceI]] += - patchDelta[faceI]*patchGamma[faceI]*patchMagSf[faceI]; - } - } - - res /= vols; - aNorm /= vols; - - return tmp > - ( - new errorEstimate - ( - vf, - delta.dimensions()*gamma.dimensions()*magSf.dimensions() - *vf.dimensions(), - res, - aNorm - ) - ); -} - -template -tmp > -laplacian -( - const tmp& tgamma, - const GeometricField& vf -) -{ - tmp > tresError(resError::laplacian(tgamma(), vf)); - tgamma.clear(); - return tresError; -} - - -template -tmp > -laplacian -( - const volTensorField& gamma, - const GeometricField& vf -) -{ - const fvMesh& mesh = vf.mesh(); - - return resError::laplacian - ( - (mesh.Sf() & fvc::interpolate(gamma) & mesh.Sf()) - /sqr(mesh.magSf()), - vf - ); -} - -template -tmp > -laplacian -( - const tmp& tgamma, - const GeometricField& vf -) -{ - tmp > Laplacian = resError::laplacian(tgamma(), vf); - tgamma.clear(); - return Laplacian; -} - - -template -tmp > -laplacian -( - const surfaceTensorField& gamma, - const GeometricField& vf -) -{ - const fvMesh& mesh = vf.mesh(); - - return resError::laplacian - ( - (mesh.Sf() & gamma & mesh.Sf())/sqr(mesh.magSf()), - vf - ); -} - -template -tmp > -laplacian -( - const tmp& tgamma, - const GeometricField& vf -) -{ - tmp > Laplacian = resError::laplacian(tgamma(), vf); - tgamma.clear(); - return Laplacian; -} - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace resError - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace Foam - -// ************************************************************************* // - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - diff --git a/src/errorEstimation/errorEstimate/resErrorLaplacian.H b/src/errorEstimation/errorEstimate/resErrorLaplacian.H deleted file mode 100644 index ff60246f7e..0000000000 --- a/src/errorEstimation/errorEstimate/resErrorLaplacian.H +++ /dev/null @@ -1,134 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 2004-2010 OpenCFD Ltd. - \\/ M anipulation | -------------------------------------------------------------------------------- -License - This file is part of OpenFOAM. - - OpenFOAM is free software: you can redistribute it and/or modify it - under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OpenFOAM is distributed in the hope that it will be useful, but WITHOUT - ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - for more details. - - You should have received a copy of the GNU General Public License - along with OpenFOAM. If not, see . - -InNamespace - Foam::resError - -Description - Residual error estimate for the fv laplacian operators - -SourceFiles - resErrorLaplacian.C - -\*---------------------------------------------------------------------------*/ - -#ifndef resErrorLaplacian_H -#define resErrorLaplacian_H - -#include "errorEstimate.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ - -namespace resError -{ - // Laplacian terms - - template - tmp > laplacian - ( - const GeometricField& - ); - - template - tmp > laplacian - ( - const dimensionedScalar&, - const GeometricField& - ); - - template - tmp > laplacian - ( - const volScalarField&, - const GeometricField& - ); - - template - tmp > laplacian - ( - const tmp&, - const GeometricField& - ); - - template - tmp > laplacian - ( - const surfaceScalarField&, - const GeometricField& - ); - - template - tmp > laplacian - ( - const tmp&, - const GeometricField& - ); - - template - tmp > laplacian - ( - const volTensorField&, - const GeometricField& - ); - - template - tmp > laplacian - ( - const tmp&, - const GeometricField& - ); - - template - tmp > laplacian - ( - const surfaceTensorField&, - const GeometricField& - ); - - template - tmp > laplacian - ( - const tmp&, - const GeometricField& - ); -} - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace Foam - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -#ifdef NoRepository -# include "resErrorLaplacian.C" -#endif - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -#endif - -// ************************************************************************* // diff --git a/src/errorEstimation/errorEstimate/resErrorSup.C b/src/errorEstimation/errorEstimate/resErrorSup.C deleted file mode 100644 index 033821c78d..0000000000 --- a/src/errorEstimation/errorEstimate/resErrorSup.C +++ /dev/null @@ -1,130 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 2004-2010 OpenCFD Ltd. - \\/ M anipulation | -------------------------------------------------------------------------------- -License - This file is part of OpenFOAM. - - OpenFOAM is free software: you can redistribute it and/or modify it - under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OpenFOAM is distributed in the hope that it will be useful, but WITHOUT - ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - for more details. - - You should have received a copy of the GNU General Public License - along with OpenFOAM. If not, see . - -\*---------------------------------------------------------------------------*/ - -#include "resErrorSup.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace resError -{ - -template -tmp > -Sp -( - const volScalarField& sp, - GeometricField& vf -) -{ - return tmp > - ( - new errorEstimate - ( - vf, - sp.dimensions()*vf.dimensions(), - sp.internalField()*vf.internalField(), - scalarField(vf.internalField().size(), 0) - ) - ); -} - -template -tmp > -Sp -( - const tmp& tsp, - GeometricField& vf -) -{ - tmp > tee = resError::Sp(tsp(), vf); - tsp.clear(); - return tee; -} - - -template -tmp > -Sp -( - const dimensionedScalar& sp, - GeometricField& vf -) -{ - return tmp > - ( - new errorEstimate - ( - vf, - sp.dimensions()*vf.dimensions(), - sp.value()*vf.internalField(), - scalarField(vf.internalField().size(), 0) - ) - ); -} - - -template -tmp > -SuSp -( - const volScalarField& sp, - GeometricField& vf -) -{ - return Sp(sp, vf); -} - -template -tmp > -SuSp -( - const tmp& tsp, - GeometricField& vf -) -{ - tmp > tee = resError::SuSp(tsp(), vf); - tsp.clear(); - return tee; -} - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace resError - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace Foam - -// ************************************************************************* // - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - diff --git a/src/errorEstimation/errorEstimate/resErrorSup.H b/src/errorEstimation/errorEstimate/resErrorSup.H deleted file mode 100644 index 2f38382e99..0000000000 --- a/src/errorEstimation/errorEstimate/resErrorSup.H +++ /dev/null @@ -1,106 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 2004-2010 OpenCFD Ltd. - \\/ M anipulation | -------------------------------------------------------------------------------- -License - This file is part of OpenFOAM. - - OpenFOAM is free software: you can redistribute it and/or modify it - under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OpenFOAM is distributed in the hope that it will be useful, but WITHOUT - ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - for more details. - - You should have received a copy of the GNU General Public License - along with OpenFOAM. If not, see . - -InNamespace - Foam::resError - -Description - Residual error estimate for the fv source operators - -SourceFiles - resErrorSup.C - -\*---------------------------------------------------------------------------*/ - -#ifndef resErrorSup_H -#define resErrorSup_H - -#include "errorEstimate.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ - - -namespace resError -{ - // Implicit source - - template - tmp > Sp - ( - const volScalarField&, - const GeometricField& - ); - - template - tmp > Sp - ( - const tmp&, - const GeometricField& - ); - - - template - tmp > Sp - ( - const dimensionedScalar&, - const GeometricField& - ); - - - // Implicit/Explicit source depending on sign of coefficient - - template - tmp > SuSp - ( - const volScalarField&, - const GeometricField& - ); - - template - tmp > SuSp - ( - const tmp&, - const GeometricField& - ); - -} - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace Foam - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -#ifdef NoRepository -# include "resErrorSup.C" -#endif - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -#endif - -// ************************************************************************* // diff --git a/src/errorEstimation/evaluateError/evaluateError.C b/src/errorEstimation/evaluateError/evaluateError.C deleted file mode 100644 index 703118988a..0000000000 --- a/src/errorEstimation/evaluateError/evaluateError.C +++ /dev/null @@ -1,164 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 2004-2010 OpenCFD Ltd. - \\/ M anipulation | -------------------------------------------------------------------------------- -License - This file is part of OpenFOAM. - - OpenFOAM is free software: you can redistribute it and/or modify it - under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OpenFOAM is distributed in the hope that it will be useful, but WITHOUT - ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - for more details. - - You should have received a copy of the GNU General Public License - along with OpenFOAM. If not, see . - -\*---------------------------------------------------------------------------*/ - -#include "evaluateError.H" -#include "volFields.H" -#include "surfaceFields.H" -#include "refineCell.H" - - -// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // - -// Construct null -Foam::evaluateError::evaluateError() -: - unsplitFaces_(), - refCells_() -{} - - -// Construct from components -Foam::evaluateError::evaluateError -( - const volScalarField& cellError, - const volVectorField& gradTheta, - const surfaceScalarField& faceError, - const labelList& candidateFaces -) -: - unsplitFaces_(candidateFaces.size()), - refCells_() -{ - const polyMesh& mesh = cellError.mesh(); - - // picks up the error field and the gradient of the variable - // and appends lists of cells to refine/unrefine based on the width of - // standard deviation of the error distribution - - // calculate the average error - scalar avgError = cellError.average().value(); - - scalar squareError = sqr(cellError)().average().value(); - scalar deviation = sqrt(squareError - sqr(avgError)); - - Info<< "avgError:" << avgError - << " squareError:" << squareError - << " deviation:" << deviation - << endl; - - scalar ref = avgError + deviation; - scalar unref = avgError - deviation; - - Info<< "evaluateError : refinement criterion : " << ref << endl - << " unrefinement criterion : " << unref << endl; - - // Coarsen mesh first. - // Find out set of candidateFaces where error is above crit. - - // Construct to filter unrefinement pattern -// removeFaces faceRemover(mesh); - - // Keep track of unrefinement pattern. - boolList markedFace(mesh.nFaces(), false); - - label unsplitFaceI = 0; - - // Subset candidate faces and update refinement pattern interference pattern - forAll(candidateFaces, candidateFaceI) - { - label faceI = candidateFaces[candidateFaceI]; - - if (markedFace[faceI]) - { - Info<< "evaluateError : protected candidate face:" << faceI - << endl; - } - else - { -// if (faceError[faceI] < unref) - if (unsplitFaceI < (candidateFaces.size()/2 + 1)) - { - unsplitFaces_[unsplitFaceI++] = faceI; - -// faceRemover.markAffectedFaces(faceI, markedFace); - } - } - } - - unsplitFaces_.setSize(unsplitFaceI); - - // Now we have: - // -unsplitFaces_: all the faces that will be removed - // -markedFace : all the faces affected by this removal. - // From markedFace protect the cells using them. - - boolList markedCells(mesh.nCells(), false); - -// forAll(markedFace, faceI) -// { -// if (markedFace[faceI]) -// { -// markedCells[mesh.faceOwner()[faceI]] = true; -// -// if (mesh.isInternalFace(faceI)) -// { -// markedCells[mesh.faceNeighbour()[faceI]] = true; -// } -// } -// } - - // Select the cells that need to be split. - // Two pass: count first, select later. - - label refCellI = 0; - - forAll(cellError, cellI) - { - if ((cellError[cellI] > ref) && !markedCells[cellI]) - { - refCellI++; - } - } - - refCells_.setSize(refCellI); - - refCellI = 0; - - forAll(cellError, cellI) - { - if ((cellError[cellI] > ref) && !markedCells[cellI]) - { - refCells_[refCellI++] = refineCell(cellI, gradTheta[cellI]); - } - } - - Info<< "evaluateError : selected " << unsplitFaces_.size() - << " faces out of " << candidateFaces.size() << " for removal" << endl; - Info<< "evaluateError : selected " << refCells_.size() - << " cells out of " << cellError.size() << " for refinement" << endl; -} - - -// ************************************************************************* // diff --git a/src/errorEstimation/evaluateError/evaluateError.H b/src/errorEstimation/evaluateError/evaluateError.H deleted file mode 100644 index 2a96e884ea..0000000000 --- a/src/errorEstimation/evaluateError/evaluateError.H +++ /dev/null @@ -1,116 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 2004-2010 OpenCFD Ltd. - \\/ M anipulation | -------------------------------------------------------------------------------- -License - This file is part of OpenFOAM. - - OpenFOAM is free software: you can redistribute it and/or modify it - under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OpenFOAM is distributed in the hope that it will be useful, but WITHOUT - ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - for more details. - - You should have received a copy of the GNU General Public License - along with OpenFOAM. If not, see . - -Class - Foam::evaluateError - -Description - Foam::evaluateError - -SourceFiles - evaluateError.C - -\*---------------------------------------------------------------------------*/ - -#ifndef evaluateError_H -#define evaluateError_H - -#include "labelList.H" -#include "volFieldsFwd.H" -#include "surfaceFieldsFwd.H" - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ - -// Forward declaration of classes -class refineCell; - -/*---------------------------------------------------------------------------*\ - Class evaluateError Declaration -\*---------------------------------------------------------------------------*/ - -class evaluateError -{ - // Private data - - // splitFaces to remove. - labelList unsplitFaces_; - - // cells to refine. - List refCells_; - - - // Private Member Functions - - -public: - - // Constructors - - //- Construct null - evaluateError(); - - - //- Construct from error value, error direction. Determine faces to - // remove (out of candidate faces) and cells to refine (all cells): - // - // remove all faces where the (face)error is less than - // average - standard deviation - // refine all cells where the (cell)error is more than - // average + standard deviation. gradTheta is used to determine - // direction to refine in. - evaluateError - ( - const volScalarField& cellError, - const volVectorField& gradTheta, - const surfaceScalarField& faceError, - const labelList& candidateFaces - ); - - - // Member Functions - - const labelList& unsplitFaces() const - { - return unsplitFaces_; - } - - const List& refCells() const - { - return refCells_; - } -}; - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace Foam - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -#endif - -// ************************************************************************* //