diff --git a/applications/solvers/incompressible/pimpleFoam/pEqn.H b/applications/solvers/incompressible/pimpleFoam/pEqn.H index 4799df09..83265f23 100644 --- a/applications/solvers/incompressible/pimpleFoam/pEqn.H +++ b/applications/solvers/incompressible/pimpleFoam/pEqn.H @@ -19,6 +19,16 @@ fvOptions.makeRelative(phiHbyA); adjustPhi(phiHbyA, U, p); +// Update the fixedFluxPressure BCs to ensure flux consistency +setSnGrad +( + p.boundaryField(), + ( + phiHbyA.boundaryField() + - fvOptions.relative(mesh.Sf().boundaryField() & U.boundaryField()) + )/(mesh.magSf().boundaryField()*rAUf.boundaryField()) +); + // Non-orthogonal pressure corrector loop while (pimple.correctNonOrthogonal()) { diff --git a/applications/solvers/incompressible/pimpleFoam/pimpleFoam.C b/applications/solvers/incompressible/pimpleFoam/pimpleFoam.C index de963fe3..61873f23 100644 --- a/applications/solvers/incompressible/pimpleFoam/pimpleFoam.C +++ b/applications/solvers/incompressible/pimpleFoam/pimpleFoam.C @@ -41,6 +41,7 @@ Description #include "fvIOoptionList.H" #include "IOporosityModelList.H" #include "IOMRFZoneList.H" +#include "fixedFluxPressureFvPatchScalarField.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // diff --git a/applications/utilities/parallelProcessing/redistributePar/loadOrCreateMesh.C b/applications/utilities/parallelProcessing/redistributePar/loadOrCreateMesh.C index 136dea38..aa792712 100644 --- a/applications/utilities/parallelProcessing/redistributePar/loadOrCreateMesh.C +++ b/applications/utilities/parallelProcessing/redistributePar/loadOrCreateMesh.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2012 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2012-2014 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -25,10 +25,19 @@ License #include "loadOrCreateMesh.H" #include "processorPolyPatch.H" +#include "processorCyclicPolyPatch.H" #include "Time.H" +#include "IOPtrList.H" // * * * * * * * * * * * * * * * Global Functions * * * * * * * * * * * * * // +namespace Foam +{ + defineTemplateTypeNameAndDebug(IOPtrList, 0); +} + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + // Read mesh if available. Otherwise create empty mesh with same non-proc // patches as proc0 mesh. Requires all processors to have all patches // (and in same order). @@ -48,11 +57,68 @@ Foam::autoPtr Foam::loadOrCreateMesh meshSubDir = io.name()/polyMesh::meshSubDir; } + + // Scatter master patches + PtrList patchEntries; + if (Pstream::master()) + { + // Read PtrList of dictionary as dictionary. + const word oldTypeName = IOPtrList::typeName; + const_cast(IOPtrList::typeName) = word::null; + IOPtrList dictList + ( + IOobject + ( + "boundary", + io.time().findInstance + ( + meshSubDir, + "boundary", + IOobject::MUST_READ + ), + meshSubDir, + io.db(), + IOobject::MUST_READ, + IOobject::NO_WRITE, + false + ) + ); + const_cast(IOPtrList::typeName) = oldTypeName; + // Fake type back to what was in field + const_cast(dictList.type()) = dictList.headerClassName(); + + patchEntries.transfer(dictList); + + // Send patches + for + ( + int slave=Pstream::firstSlave(); + slave<=Pstream::lastSlave(); + slave++ + ) + { + OPstream toSlave(Pstream::scheduled, slave); + toSlave << patchEntries; + } + } + else + { + // Receive patches + IPstream fromMaster(Pstream::scheduled, Pstream::masterNo()); + fromMaster >> patchEntries; + } + + + // Check who has a mesh const bool haveMesh = isDir(io.time().path()/io.instance()/meshSubDir); if (!haveMesh) { + bool oldParRun = Pstream::parRun(); + Pstream::parRun() = false; + + // Create dummy mesh. Only used on procs that don't have mesh. IOobject noReadIO(io); noReadIO.readOpt() = IOobject::NO_READ; @@ -65,6 +131,39 @@ Foam::autoPtr Foam::loadOrCreateMesh xferCopy(labelList()), false ); + + // Add patches + List patches(patchEntries.size()); + label nPatches = 0; + + forAll(patchEntries, patchI) + { + const entry& e = patchEntries[patchI]; + const word type(e.dict().lookup("type")); + const word& name = e.keyword(); + + if + ( + type != processorPolyPatch::typeName + && type != processorCyclicPolyPatch::typeName + ) + { + dictionary patchDict(e.dict()); + patchDict.set("nFaces", 0); + patchDict.set("startFace", 0); + + patches[patchI] = polyPatch::New + ( + name, + patchDict, + nPatches++, + dummyMesh.boundaryMesh() + ).ptr(); + } + } + patches.setSize(nPatches); + dummyMesh.addFvPatches(patches, false); // no parallel comms + // Add some dummy zones so upon reading it does not read them // from the undecomposed case. Should be done as extra argument to // regIOobject::readStream? @@ -106,6 +205,8 @@ Foam::autoPtr Foam::loadOrCreateMesh //Pout<< "Writing dummy mesh to " << dummyMesh.polyMesh::objectPath() // << endl; dummyMesh.write(); + + Pstream::parRun() = oldParRun; } //Pout<< "Reading mesh from " << io.objectPath() << endl; @@ -116,118 +217,57 @@ Foam::autoPtr Foam::loadOrCreateMesh // Sync patches // ~~~~~~~~~~~~ - if (Pstream::master()) + if (!Pstream::master() && haveMesh) { - // Send patches - for - ( - int slave=Pstream::firstSlave(); - slave<=Pstream::lastSlave(); - slave++ - ) + // Check master names against mine + + const polyBoundaryMesh& patches = mesh.boundaryMesh(); + + forAll(patchEntries, patchI) { - OPstream toSlave(Pstream::scheduled, slave); - toSlave << mesh.boundaryMesh(); - } - } - else - { - // Receive patches - IPstream fromMaster(Pstream::scheduled, Pstream::masterNo()); - PtrList patchEntries(fromMaster); + const entry& e = patchEntries[patchI]; + const word type(e.dict().lookup("type")); + const word& name = e.keyword(); - if (haveMesh) - { - // Check master names against mine - - const polyBoundaryMesh& patches = mesh.boundaryMesh(); - - forAll(patchEntries, patchI) + if (type == processorPolyPatch::typeName) { - const entry& e = patchEntries[patchI]; - const word type(e.dict().lookup("type")); - const word& name = e.keyword(); - - if (type == processorPolyPatch::typeName) - { - break; - } - - if (patchI >= patches.size()) - { - FatalErrorIn - ( - "createMesh(const Time&, const fileName&, const bool)" - ) << "Non-processor patches not synchronised." - << endl - << "Processor " << Pstream::myProcNo() - << " has only " << patches.size() - << " patches, master has " - << patchI - << exit(FatalError); - } - - if - ( - type != patches[patchI].type() - || name != patches[patchI].name() - ) - { - FatalErrorIn - ( - "createMesh(const Time&, const fileName&, const bool)" - ) << "Non-processor patches not synchronised." - << endl - << "Master patch " << patchI - << " name:" << type - << " type:" << type << endl - << "Processor " << Pstream::myProcNo() - << " patch " << patchI - << " has name:" << patches[patchI].name() - << " type:" << patches[patchI].type() - << exit(FatalError); - } + break; } - } - else - { - // Add patch - List patches(patchEntries.size()); - label nPatches = 0; - forAll(patchEntries, patchI) + if (patchI >= patches.size()) { - const entry& e = patchEntries[patchI]; - const word type(e.dict().lookup("type")); - const word& name = e.keyword(); - - if (type == processorPolyPatch::typeName) - { - break; - } - - //Pout<< "Adding patch:" << nPatches - // << " name:" << name << " type:" << type << endl; - - dictionary patchDict(e.dict()); - patchDict.remove("nFaces"); - patchDict.add("nFaces", 0); - patchDict.remove("startFace"); - patchDict.add("startFace", 0); - - patches[patchI] = polyPatch::New + FatalErrorIn ( - name, - patchDict, - nPatches++, - mesh.boundaryMesh() - ).ptr(); + "createMesh(const Time&, const fileName&, const bool)" + ) << "Non-processor patches not synchronised." + << endl + << "Processor " << Pstream::myProcNo() + << " has only " << patches.size() + << " patches, master has " + << patchI + << exit(FatalError); } - patches.setSize(nPatches); - mesh.addFvPatches(patches, false); // no parallel comms - //// Write empty mesh now we have correct patches - //meshPtr().write(); + if + ( + type != patches[patchI].type() + || name != patches[patchI].name() + ) + { + FatalErrorIn + ( + "createMesh(const Time&, const fileName&, const bool)" + ) << "Non-processor patches not synchronised." + << endl + << "Master patch " << patchI + << " name:" << type + << " type:" << type << endl + << "Processor " << Pstream::myProcNo() + << " patch " << patchI + << " has name:" << patches[patchI].name() + << " type:" << patches[patchI].type() + << exit(FatalError); + } } } diff --git a/src/dynamicMesh/polyTopoChange/polyTopoChange/refinementHistory.C b/src/dynamicMesh/polyTopoChange/polyTopoChange/refinementHistory.C index 1c7d63e6..8e9e844c 100644 --- a/src/dynamicMesh/polyTopoChange/polyTopoChange/refinementHistory.C +++ b/src/dynamicMesh/polyTopoChange/polyTopoChange/refinementHistory.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2014 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -649,22 +649,20 @@ void Foam::refinementHistory::countProc // Increment parent if whole splitCell moves to same processor if (splitCellNum[index] == 8) { - Pout<< "Moving " << splitCellNum[index] - << " cells originating from cell " << index - << " from processor " << Pstream::myProcNo() - << " to processor " << splitCellProc[index] - << endl; + if (debug) + { + Pout<< "Moving " << splitCellNum[index] + << " cells originating from cell " << index + << " from processor " << Pstream::myProcNo() + << " to processor " << splitCellProc[index] + << endl; + } label parent = splitCells_[index].parent_; if (parent >= 0) { - string oldPrefix = Pout.prefix(); - Pout.prefix() = " " + oldPrefix; - countProc(parent, newProcNo, splitCellProc, splitCellNum); - - Pout.prefix() = oldPrefix; } } } @@ -924,7 +922,10 @@ void Foam::refinementHistory::distribute(const mapDistributePolyMesh& map) forAll(newVisibleCells, i) { - visibleCells_[constructMap[i]] = newVisibleCells[i] + offset; + if (newVisibleCells[i] >= 0) + { + visibleCells_[constructMap[i]] = newVisibleCells[i] + offset; + } } } splitCells_.shrink(); diff --git a/src/finiteVolume/Make/files b/src/finiteVolume/Make/files index d7ea0f00..95f6101f 100644 --- a/src/finiteVolume/Make/files +++ b/src/finiteVolume/Make/files @@ -168,6 +168,7 @@ $(derivedFvPatchFields)/pressureInletOutletVelocity/pressureInletOutletVelocityF $(derivedFvPatchFields)/pressureInletUniformVelocity/pressureInletUniformVelocityFvPatchVectorField.C $(derivedFvPatchFields)/pressureInletVelocity/pressureInletVelocityFvPatchVectorField.C $(derivedFvPatchFields)/pressureNormalInletOutletVelocity/pressureNormalInletOutletVelocityFvPatchVectorField.C +$(derivedFvPatchFields)/fixedNormalInletOutletVelocity/fixedNormalInletOutletVelocityFvPatchVectorField.C $(derivedFvPatchFields)/rotatingPressureInletOutletVelocity/rotatingPressureInletOutletVelocityFvPatchVectorField.C $(derivedFvPatchFields)/rotatingTotalPressure/rotatingTotalPressureFvPatchScalarField.C $(derivedFvPatchFields)/rotatingWallVelocity/rotatingWallVelocityFvPatchVectorField.C diff --git a/src/finiteVolume/fields/fvPatchFields/derived/fixedFluxPressure/fixedFluxPressureFvPatchScalarField.H b/src/finiteVolume/fields/fvPatchFields/derived/fixedFluxPressure/fixedFluxPressureFvPatchScalarField.H index 2f43c694..b10b932b 100644 --- a/src/finiteVolume/fields/fvPatchFields/derived/fixedFluxPressure/fixedFluxPressureFvPatchScalarField.H +++ b/src/finiteVolume/fields/fvPatchFields/derived/fixedFluxPressure/fixedFluxPressureFvPatchScalarField.H @@ -53,7 +53,6 @@ SourceFiles #include "fvPatchFields.H" #include "fixedGradientFvPatchFields.H" -#include "Switch.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // diff --git a/src/finiteVolume/fields/fvPatchFields/derived/fixedNormalInletOutletVelocity/fixedNormalInletOutletVelocityFvPatchVectorField.C b/src/finiteVolume/fields/fvPatchFields/derived/fixedNormalInletOutletVelocity/fixedNormalInletOutletVelocityFvPatchVectorField.C new file mode 100644 index 00000000..f45f9893 --- /dev/null +++ b/src/finiteVolume/fields/fvPatchFields/derived/fixedNormalInletOutletVelocity/fixedNormalInletOutletVelocityFvPatchVectorField.C @@ -0,0 +1,218 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2014 OpenFOAM Foundation + \\/ 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 "fixedNormalInletOutletVelocityFvPatchVectorField.H" +#include "addToRunTimeSelectionTable.H" +#include "volFields.H" +#include "surfaceFields.H" + + +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +Foam::fixedNormalInletOutletVelocityFvPatchVectorField:: +fixedNormalInletOutletVelocityFvPatchVectorField +( + const fvPatch& p, + const DimensionedField& iF +) +: + directionMixedFvPatchVectorField(p, iF), + phiName_("phi"), + fixTangentialInflow_(true), + normalVelocity_ + ( + fvPatchVectorField::New("fixedValue", p, iF) + ) +{ + refValue() = vector::zero; + refGrad() = vector::zero; + valueFraction() = symmTensor::zero; +} + + +Foam::fixedNormalInletOutletVelocityFvPatchVectorField:: +fixedNormalInletOutletVelocityFvPatchVectorField +( + const fixedNormalInletOutletVelocityFvPatchVectorField& ptf, + const fvPatch& p, + const DimensionedField& iF, + const fvPatchFieldMapper& mapper +) +: + directionMixedFvPatchVectorField(ptf, p, iF, mapper), + phiName_(ptf.phiName_), + fixTangentialInflow_(ptf.fixTangentialInflow_), + normalVelocity_ + ( + fvPatchVectorField::New(ptf.normalVelocity(), p, iF, mapper) + ) +{} + + +Foam::fixedNormalInletOutletVelocityFvPatchVectorField:: +fixedNormalInletOutletVelocityFvPatchVectorField +( + const fvPatch& p, + const DimensionedField& iF, + const dictionary& dict +) +: + directionMixedFvPatchVectorField(p, iF), + phiName_(dict.lookupOrDefault("phi", "phi")), + fixTangentialInflow_(dict.lookup("fixTangentialInflow")), + normalVelocity_ + ( + fvPatchVectorField::New(p, iF, dict.subDict("normalVelocity")) + ) +{ + fvPatchVectorField::operator=(vectorField("value", dict, p.size())); + refValue() = normalVelocity(); + refGrad() = vector::zero; + valueFraction() = symmTensor::zero; +} + + +Foam::fixedNormalInletOutletVelocityFvPatchVectorField:: +fixedNormalInletOutletVelocityFvPatchVectorField +( + const fixedNormalInletOutletVelocityFvPatchVectorField& pivpvf +) +: + directionMixedFvPatchVectorField(pivpvf), + phiName_(pivpvf.phiName_), + fixTangentialInflow_(pivpvf.fixTangentialInflow_), + normalVelocity_(pivpvf.normalVelocity().clone()) +{} + + +Foam::fixedNormalInletOutletVelocityFvPatchVectorField:: +fixedNormalInletOutletVelocityFvPatchVectorField +( + const fixedNormalInletOutletVelocityFvPatchVectorField& pivpvf, + const DimensionedField& iF +) +: + directionMixedFvPatchVectorField(pivpvf, iF), + phiName_(pivpvf.phiName_), + fixTangentialInflow_(pivpvf.fixTangentialInflow_), + normalVelocity_(pivpvf.normalVelocity().clone()) +{} + + +// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // + +void Foam::fixedNormalInletOutletVelocityFvPatchVectorField::autoMap +( + const fvPatchFieldMapper& m +) +{ + directionMixedFvPatchVectorField::autoMap(m); + normalVelocity_->autoMap(m); +} + + +void Foam::fixedNormalInletOutletVelocityFvPatchVectorField::rmap +( + const fvPatchVectorField& ptf, + const labelList& addr +) +{ + directionMixedFvPatchVectorField::rmap(ptf, addr); + + const fixedNormalInletOutletVelocityFvPatchVectorField& fniovptf = + refCast(ptf); + + normalVelocity_->rmap(fniovptf.normalVelocity(), addr); +} + + +void Foam::fixedNormalInletOutletVelocityFvPatchVectorField::updateCoeffs() +{ + if (updated()) + { + return; + } + + normalVelocity_->evaluate(); + refValue() = normalVelocity(); + + valueFraction() = sqr(patch().nf()); + + if (fixTangentialInflow_) + { + const fvsPatchField& phip = + patch().lookupPatchField(phiName_); + + valueFraction() += neg(phip)*(I - valueFraction()); + } + + directionMixedFvPatchVectorField::updateCoeffs(); + directionMixedFvPatchVectorField::evaluate(); +} + + +void Foam::fixedNormalInletOutletVelocityFvPatchVectorField::write +( + Ostream& os +) +const +{ + fvPatchVectorField::write(os); + writeEntryIfDifferent(os, "phi", "phi", phiName_); + os.writeKeyword("fixTangentialInflow") + << fixTangentialInflow_ << token::END_STATEMENT << nl; + os.writeKeyword("normalVelocity") + << nl << indent << token::BEGIN_BLOCK << nl << incrIndent; + normalVelocity_->write(os); + os << decrIndent << indent << token::END_BLOCK << endl; + writeEntry("value", os); +} + + +// * * * * * * * * * * * * * * * Member Operators * * * * * * * * * * * * * // + +void Foam::fixedNormalInletOutletVelocityFvPatchVectorField::operator= +( + const fvPatchField& pvf +) +{ + tmp normalValue = transform(valueFraction(), refValue()); + tmp transformGradValue = transform(I - valueFraction(), pvf); + fvPatchField::operator=(normalValue + transformGradValue); +} + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + makePatchTypeField + ( + fvPatchVectorField, + fixedNormalInletOutletVelocityFvPatchVectorField + ); +} + +// ************************************************************************* // diff --git a/src/finiteVolume/fields/fvPatchFields/derived/fixedNormalInletOutletVelocity/fixedNormalInletOutletVelocityFvPatchVectorField.H b/src/finiteVolume/fields/fvPatchFields/derived/fixedNormalInletOutletVelocity/fixedNormalInletOutletVelocityFvPatchVectorField.H new file mode 100644 index 00000000..6d6bb2e7 --- /dev/null +++ b/src/finiteVolume/fields/fvPatchFields/derived/fixedNormalInletOutletVelocity/fixedNormalInletOutletVelocityFvPatchVectorField.H @@ -0,0 +1,248 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2014 OpenFOAM Foundation + \\/ 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::fixedNormalInletOutletVelocityFvPatchVectorField + +Group + grpInletletBoundaryConditions grpOutletBoundaryConditions + +Description + + This velocity inlet/outlet boundary condition combines a fixed normal + component obtained from the "normalVelocity" patchField supplied with a + fixed or zero-gradiented tangential component depending on the direction + of the flow and the setting of "fixTangentialInflow": + - Outflow: apply zero-gradient condition to tangential components + - Inflow: + - fixTangentialInflow is true + apply value provided by the normalVelocity patchField to the + tangential components + - fixTangentialInflow is false + apply zero-gradient condition to tangential components. + + \heading Patch usage + + \table + Property | Description | Required | Default value + phi | flux field name | no | phi + fixTangentialInflow | If true fix the tangential component for inflow | yes | + normalVelocity | patchField providing the normal velocity field | yes | + \endtable + + Example of the boundary condition specification: + \verbatim + myPatch + { + type fixedNormalInletOutletVelocity; + + fixTangentialInflow false; + normalVelocity + { + type oscillatingFixedValue; + refValue uniform (0 1 0); + offset (0 -1 0); + amplitude table + ( + ( 0 0) + ( 2 0.088) + ( 8 0.088) + ); + frequency constant 1; + } + + value uniform (0 0 0); + } + \endverbatim + +SourceFiles + fixedNormalInletOutletVelocityFvPatchVectorField.C + +\*---------------------------------------------------------------------------*/ + +#ifndef fixedNormalInletOutletVelocityFvPatchVectorField_H +#define fixedNormalInletOutletVelocityFvPatchVectorField_H + +#include "fvPatchFields.H" +#include "directionMixedFvPatchFields.H" +#include "Switch.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + +/*---------------------------------------------------------------------------*\ + Class fixedNormalInletOutletVelocityFvPatchVectorField Declaration +\*---------------------------------------------------------------------------*/ + +class fixedNormalInletOutletVelocityFvPatchVectorField +: + public directionMixedFvPatchVectorField +{ + // Private data + + //- Flux field name + word phiName_; + + //- Set true to fix the tangential component for inflow + Switch fixTangentialInflow_; + + //- BC which provided the normal component of the velocity + tmp normalVelocity_; + + +public: + + //- Runtime type information + TypeName("fixedNormalInletOutletVelocity"); + + + // Constructors + + //- Construct from patch and internal field + fixedNormalInletOutletVelocityFvPatchVectorField + ( + const fvPatch&, + const DimensionedField& + ); + + //- Construct from patch, internal field and dictionary + fixedNormalInletOutletVelocityFvPatchVectorField + ( + const fvPatch&, + const DimensionedField&, + const dictionary& + ); + + //- Construct by mapping given + // fixedNormalInletOutletVelocityFvPatchVectorField onto a new patch + fixedNormalInletOutletVelocityFvPatchVectorField + ( + const fixedNormalInletOutletVelocityFvPatchVectorField&, + const fvPatch&, + const DimensionedField&, + const fvPatchFieldMapper& + ); + + //- Construct as copy + fixedNormalInletOutletVelocityFvPatchVectorField + ( + const fixedNormalInletOutletVelocityFvPatchVectorField& + ); + + //- Construct and return a clone + virtual tmp clone() const + { + return tmp + ( + new fixedNormalInletOutletVelocityFvPatchVectorField(*this) + ); + } + + //- Construct as copy setting internal field reference + fixedNormalInletOutletVelocityFvPatchVectorField + ( + const fixedNormalInletOutletVelocityFvPatchVectorField&, + const DimensionedField& + ); + + //- Construct and return a clone setting internal field reference + virtual tmp clone + ( + const DimensionedField& iF + ) const + { + return tmp + ( + new fixedNormalInletOutletVelocityFvPatchVectorField(*this, iF) + ); + } + + + // Member functions + + // Access + + //- Return the name of phi + const word& phiName() const + { + return phiName_; + } + + //- Return reference to the name of phi to allow adjustment + word& phiName() + { + return phiName_; + } + + Switch fixTangentialInflow() const + { + return fixTangentialInflow_; + } + + //- Return the BC which provides the normal component of velocity + const fvPatchVectorField& normalVelocity() const + { + return normalVelocity_(); + } + + + // Mapping functions + + //- Map (and resize as needed) from self given a mapping object + virtual void autoMap + ( + const fvPatchFieldMapper& + ); + + //- Reverse map the given fvPatchField onto this fvPatchField + virtual void rmap + ( + const fvPatchVectorField&, + const labelList& + ); + + + //- Update the coefficients associated with the patch field + virtual void updateCoeffs(); + + //- Write + virtual void write(Ostream&) const; + + + // Member operators + + virtual void operator=(const fvPatchField& pvf); +}; + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace Foam + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/src/meshTools/AMIInterpolation/AMIInterpolation/AMIInterpolation.C b/src/meshTools/AMIInterpolation/AMIInterpolation/AMIInterpolation.C index 3dd2863e..cd586639 100644 --- a/src/meshTools/AMIInterpolation/AMIInterpolation/AMIInterpolation.C +++ b/src/meshTools/AMIInterpolation/AMIInterpolation/AMIInterpolation.C @@ -206,32 +206,40 @@ void Foam::AMIInterpolation::normaliseWeights ) { // Normalise the weights - wghtSum.setSize(wght.size()); + wghtSum.setSize(wght.size(), 0.0); label nLowWeight = 0; forAll(wght, faceI) { scalarList& w = wght[faceI]; - scalar denom = patchAreas[faceI]; - scalar s = sum(w); - scalar t = s/denom; - - if (conformal) + if (w.size()) { - denom = s; + scalar denom = patchAreas[faceI]; + + scalar s = sum(w); + scalar t = s/denom; + + if (conformal) + { + denom = s; + } + + forAll(w, i) + { + w[i] /= denom; + } + + wghtSum[faceI] = t; + + if (t < lowWeightTol) + { + nLowWeight++; + } } - - forAll(w, i) + else { - w[i] /= denom; - } - - wghtSum[faceI] = t; - - if (t < lowWeightTol) - { - nLowWeight++; + wghtSum[faceI] = 0; } } @@ -534,6 +542,7 @@ Foam::AMIInterpolation::AMIInterpolation const SourcePatch& srcPatch, const TargetPatch& tgtPatch, const faceAreaIntersect::triangulationMode& triMode, + const bool requireMatch, const interpolationMethod& method, const scalar lowWeightCorrection, const bool reverseTarget @@ -541,6 +550,7 @@ Foam::AMIInterpolation::AMIInterpolation : method_(method), reverseTarget_(reverseTarget), + requireMatch_(requireMatch), singlePatchProc_(-999), lowWeightCorrection_(lowWeightCorrection), srcAddress_(), @@ -564,6 +574,7 @@ Foam::AMIInterpolation::AMIInterpolation const TargetPatch& tgtPatch, const autoPtr& surfPtr, const faceAreaIntersect::triangulationMode& triMode, + const bool requireMatch, const interpolationMethod& method, const scalar lowWeightCorrection, const bool reverseTarget @@ -571,6 +582,7 @@ Foam::AMIInterpolation::AMIInterpolation : method_(method), reverseTarget_(reverseTarget), + requireMatch_(requireMatch), singlePatchProc_(-999), lowWeightCorrection_(lowWeightCorrection), srcAddress_(), @@ -654,6 +666,7 @@ Foam::AMIInterpolation::AMIInterpolation : method_(fineAMI.method_), reverseTarget_(fineAMI.reverseTarget_), + requireMatch_(fineAMI.requireMatch_), singlePatchProc_(fineAMI.singlePatchProc_), lowWeightCorrection_(-1.0), srcAddress_(), @@ -862,7 +875,8 @@ void Foam::AMIInterpolation::update srcMagSf_, tgtMagSf_, triMode_, - reverseTarget_ + reverseTarget_, + requireMatch_ ) ); @@ -978,7 +992,8 @@ void Foam::AMIInterpolation::update srcMagSf_, tgtMagSf_, triMode_, - reverseTarget_ + reverseTarget_, + requireMatch_ ) ); diff --git a/src/meshTools/AMIInterpolation/AMIInterpolation/AMIInterpolation.H b/src/meshTools/AMIInterpolation/AMIInterpolation/AMIInterpolation.H index a8193358..7dbacd9e 100644 --- a/src/meshTools/AMIInterpolation/AMIInterpolation/AMIInterpolation.H +++ b/src/meshTools/AMIInterpolation/AMIInterpolation/AMIInterpolation.H @@ -116,6 +116,10 @@ private: // that the orientation of the target patch should be reversed const bool reverseTarget_; + //- Flag to indicate that the two patches must be matched/an overlap + // exists between them + const bool requireMatch_; + //- Index of processor that holds all of both sides. -1 in all other // cases label singlePatchProc_; @@ -276,6 +280,7 @@ public: const SourcePatch& srcPatch, const TargetPatch& tgtPatch, const faceAreaIntersect::triangulationMode& triMode, + const bool requireMatch = true, const interpolationMethod& method = imFaceAreaWeight, const scalar lowWeightCorrection = -1, const bool reverseTarget = false @@ -288,6 +293,7 @@ public: const TargetPatch& tgtPatch, const autoPtr& surf, const faceAreaIntersect::triangulationMode& triMode, + const bool requireMatch = true, const interpolationMethod& method = imFaceAreaWeight, const scalar lowWeightCorrection = -1, const bool reverseTarget = false diff --git a/src/meshTools/AMIInterpolation/AMIInterpolation/AMIMethod/AMIMethod/AMIMethod.C b/src/meshTools/AMIInterpolation/AMIInterpolation/AMIMethod/AMIMethod/AMIMethod.C index eb9406c5..292d8167 100644 --- a/src/meshTools/AMIInterpolation/AMIInterpolation/AMIMethod/AMIMethod/AMIMethod.C +++ b/src/meshTools/AMIInterpolation/AMIInterpolation/AMIMethod/AMIMethod/AMIMethod.C @@ -98,6 +98,10 @@ bool Foam::AMIMethod::initialise ( "void Foam::AMIMethod::initialise" "(" + "labelListList&, " + "scalarListList&, " + "labelListList&, " + "scalarListList&, " "label&, " "label&" ")" @@ -129,14 +133,24 @@ bool Foam::AMIMethod::initialise if (!foundFace) { - FatalErrorIn - ( - "void Foam::AMIMethod::initialise" - "(" - "label&, " - "label&" - ")" - ) << "Unable to find initial target face" << abort(FatalError); + if (requireMatch_) + { + FatalErrorIn + ( + "void Foam::AMIMethod::initialise" + "(" + "labelListList&, " + "scalarListList&, " + "labelListList&, " + "scalarListList&, " + "label&, " + "label&" + ")" + ) << "Unable to find initial target face" + << abort(FatalError); + } + + return false; } } @@ -327,12 +341,14 @@ Foam::AMIMethod::AMIMethod const scalarField& srcMagSf, const scalarField& tgtMagSf, const faceAreaIntersect::triangulationMode& triMode, - const bool reverseTarget + const bool reverseTarget, + const bool requireMatch ) : srcPatch_(srcPatch), tgtPatch_(tgtPatch), reverseTarget_(reverseTarget), + requireMatch_(requireMatch), srcMagSf_(srcMagSf), tgtMagSf_(tgtMagSf), srcNonOverlap_(), diff --git a/src/meshTools/AMIInterpolation/AMIInterpolation/AMIMethod/AMIMethod/AMIMethod.H b/src/meshTools/AMIInterpolation/AMIInterpolation/AMIMethod/AMIMethod/AMIMethod.H index 673a695a..06afc1a2 100644 --- a/src/meshTools/AMIInterpolation/AMIInterpolation/AMIMethod/AMIMethod/AMIMethod.H +++ b/src/meshTools/AMIInterpolation/AMIInterpolation/AMIMethod/AMIMethod/AMIMethod.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2013 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2013-2014 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -85,6 +85,10 @@ protected: // that the orientation of the target patch should be reversed const bool reverseTarget_; + //- Flag to indicate that the two patches must be matched/an overlap + // exists between them + const bool requireMatch_; + //- Source face areas const scalarField& srcMagSf_; @@ -166,9 +170,18 @@ public: const scalarField& srcMagSf, const scalarField& tgtMagSf, const faceAreaIntersect::triangulationMode& triMode, - const bool reverseTarget + const bool reverseTarget, + const bool requireMatch ), - (srcPatch, tgtPatch, srcMagSf, tgtMagSf, triMode, reverseTarget) + ( + srcPatch, + tgtPatch, + srcMagSf, + tgtMagSf, + triMode, + reverseTarget, + requireMatch + ) ); //- Construct from components @@ -179,7 +192,8 @@ public: const scalarField& srcMagSf, const scalarField& tgtMagSf, const faceAreaIntersect::triangulationMode& triMode, - const bool reverseTarget + const bool reverseTarget, + const bool requireMatch ); //- Selector @@ -191,7 +205,8 @@ public: const scalarField& srcMagSf, const scalarField& tgtMagSf, const faceAreaIntersect::triangulationMode& triMode, - const bool reverseTarget + const bool reverseTarget, + const bool requireMatch ); diff --git a/src/meshTools/AMIInterpolation/AMIInterpolation/AMIMethod/AMIMethod/AMIMethodNew.C b/src/meshTools/AMIInterpolation/AMIInterpolation/AMIMethod/AMIMethod/AMIMethodNew.C index 39cc1d3f..d06294d5 100644 --- a/src/meshTools/AMIInterpolation/AMIInterpolation/AMIMethod/AMIMethod/AMIMethodNew.C +++ b/src/meshTools/AMIInterpolation/AMIInterpolation/AMIMethod/AMIMethod/AMIMethodNew.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2013 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2013-2014 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -35,7 +35,8 @@ Foam::AMIMethod::New const scalarField& srcMagSf, const scalarField& tgtMagSf, const faceAreaIntersect::triangulationMode& triMode, - const bool reverseTarget + const bool reverseTarget, + const bool requireMatch ) { if (debug) @@ -58,6 +59,7 @@ Foam::AMIMethod::New "const scalarField&, " "const scalarField&, " "const faceAreaIntersect::triangulationMode&, " + "const bool, " "const bool" ")" ) << "Unknown AMIMethod type " @@ -75,7 +77,8 @@ Foam::AMIMethod::New srcMagSf, tgtMagSf, triMode, - reverseTarget + reverseTarget, + requireMatch ) ); } diff --git a/src/meshTools/AMIInterpolation/AMIInterpolation/AMIMethod/directAMI/directAMI.C b/src/meshTools/AMIInterpolation/AMIInterpolation/AMIMethod/directAMI/directAMI.C index fa5d0b73..70673d31 100644 --- a/src/meshTools/AMIInterpolation/AMIInterpolation/AMIMethod/directAMI/directAMI.C +++ b/src/meshTools/AMIInterpolation/AMIInterpolation/AMIMethod/directAMI/directAMI.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2013 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2013-2014 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -106,7 +106,8 @@ Foam::directAMI::directAMI const scalarField& srcMagSf, const scalarField& tgtMagSf, const faceAreaIntersect::triangulationMode& triMode, - const bool reverseTarget + const bool reverseTarget, + const bool requireMatch ) : AMIMethod @@ -116,7 +117,8 @@ Foam::directAMI::directAMI srcMagSf, tgtMagSf, triMode, - reverseTarget + reverseTarget, + requireMatch ) {} diff --git a/src/meshTools/AMIInterpolation/AMIInterpolation/AMIMethod/directAMI/directAMI.H b/src/meshTools/AMIInterpolation/AMIInterpolation/AMIMethod/directAMI/directAMI.H index e7842ff9..dc273c79 100644 --- a/src/meshTools/AMIInterpolation/AMIInterpolation/AMIMethod/directAMI/directAMI.H +++ b/src/meshTools/AMIInterpolation/AMIInterpolation/AMIMethod/directAMI/directAMI.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2013 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2013-2014 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -102,7 +102,8 @@ public: const scalarField& srcMagSf, const scalarField& tgtMagSf, const faceAreaIntersect::triangulationMode& triMode, - const bool reverseTarget = false + const bool reverseTarget = false, + const bool requireMatch = true ); diff --git a/src/meshTools/AMIInterpolation/AMIInterpolation/AMIMethod/faceAreaWeightAMI/faceAreaWeightAMI.C b/src/meshTools/AMIInterpolation/AMIInterpolation/AMIMethod/faceAreaWeightAMI/faceAreaWeightAMI.C index 05dcd1e2..d9cfb840 100644 --- a/src/meshTools/AMIInterpolation/AMIInterpolation/AMIMethod/faceAreaWeightAMI/faceAreaWeightAMI.C +++ b/src/meshTools/AMIInterpolation/AMIInterpolation/AMIMethod/faceAreaWeightAMI/faceAreaWeightAMI.C @@ -482,6 +482,7 @@ Foam::faceAreaWeightAMI::faceAreaWeightAMI const scalarField& tgtMagSf, const faceAreaIntersect::triangulationMode& triMode, const bool reverseTarget, + const bool requireMatch, const bool restartUncoveredSourceFace ) : @@ -492,7 +493,8 @@ Foam::faceAreaWeightAMI::faceAreaWeightAMI srcMagSf, tgtMagSf, triMode, - reverseTarget + reverseTarget, + requireMatch ), restartUncoveredSourceFace_(restartUncoveredSourceFace) {} diff --git a/src/meshTools/AMIInterpolation/AMIInterpolation/AMIMethod/faceAreaWeightAMI/faceAreaWeightAMI.H b/src/meshTools/AMIInterpolation/AMIInterpolation/AMIMethod/faceAreaWeightAMI/faceAreaWeightAMI.H index d1a48a54..2d1b5520 100644 --- a/src/meshTools/AMIInterpolation/AMIInterpolation/AMIMethod/faceAreaWeightAMI/faceAreaWeightAMI.H +++ b/src/meshTools/AMIInterpolation/AMIInterpolation/AMIMethod/faceAreaWeightAMI/faceAreaWeightAMI.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2013 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2013-2014 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -144,6 +144,7 @@ public: const scalarField& tgtMagSf, const faceAreaIntersect::triangulationMode& triMode, const bool reverseTarget = false, + const bool requireMatch = true, const bool restartUncoveredSourceFace = true ); diff --git a/src/meshTools/AMIInterpolation/AMIInterpolation/AMIMethod/mapNearestAMI/mapNearestAMI.C b/src/meshTools/AMIInterpolation/AMIInterpolation/AMIMethod/mapNearestAMI/mapNearestAMI.C index be6f590f..59d8c5cd 100644 --- a/src/meshTools/AMIInterpolation/AMIInterpolation/AMIMethod/mapNearestAMI/mapNearestAMI.C +++ b/src/meshTools/AMIInterpolation/AMIInterpolation/AMIMethod/mapNearestAMI/mapNearestAMI.C @@ -183,7 +183,8 @@ Foam::mapNearestAMI::mapNearestAMI const scalarField& srcMagSf, const scalarField& tgtMagSf, const faceAreaIntersect::triangulationMode& triMode, - const bool reverseTarget + const bool reverseTarget, + const bool requireMatch ) : AMIMethod @@ -193,7 +194,8 @@ Foam::mapNearestAMI::mapNearestAMI srcMagSf, tgtMagSf, triMode, - reverseTarget + reverseTarget, + requireMatch ) {} diff --git a/src/meshTools/AMIInterpolation/AMIInterpolation/AMIMethod/mapNearestAMI/mapNearestAMI.H b/src/meshTools/AMIInterpolation/AMIInterpolation/AMIMethod/mapNearestAMI/mapNearestAMI.H index 0daf2666..86d8c615 100644 --- a/src/meshTools/AMIInterpolation/AMIInterpolation/AMIMethod/mapNearestAMI/mapNearestAMI.H +++ b/src/meshTools/AMIInterpolation/AMIInterpolation/AMIMethod/mapNearestAMI/mapNearestAMI.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2013 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2013-2014 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -116,7 +116,8 @@ public: const scalarField& srcMagSf, const scalarField& tgtMagSf, const faceAreaIntersect::triangulationMode& triMode, - const bool reverseTarget = false + const bool reverseTarget = false, + const bool requireMatch = true ); diff --git a/src/meshTools/AMIInterpolation/AMIInterpolation/AMIMethod/partialFaceAreaWeightAMI/partialFaceAreaWeightAMI.C b/src/meshTools/AMIInterpolation/AMIInterpolation/AMIMethod/partialFaceAreaWeightAMI/partialFaceAreaWeightAMI.C index ad0f6376..4eddbe63 100644 --- a/src/meshTools/AMIInterpolation/AMIInterpolation/AMIMethod/partialFaceAreaWeightAMI/partialFaceAreaWeightAMI.C +++ b/src/meshTools/AMIInterpolation/AMIInterpolation/AMIMethod/partialFaceAreaWeightAMI/partialFaceAreaWeightAMI.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2013 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2013-2014 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -63,7 +63,8 @@ partialFaceAreaWeightAMI const scalarField& srcMagSf, const scalarField& tgtMagSf, const faceAreaIntersect::triangulationMode& triMode, - const bool reverseTarget + const bool reverseTarget, + const bool requireMatch ) : faceAreaWeightAMI @@ -73,7 +74,8 @@ partialFaceAreaWeightAMI srcMagSf, tgtMagSf, triMode, - reverseTarget + reverseTarget, + requireMatch ) {} diff --git a/src/meshTools/AMIInterpolation/AMIInterpolation/AMIMethod/partialFaceAreaWeightAMI/partialFaceAreaWeightAMI.H b/src/meshTools/AMIInterpolation/AMIInterpolation/AMIMethod/partialFaceAreaWeightAMI/partialFaceAreaWeightAMI.H index 4fd0ea24..de8afcf0 100644 --- a/src/meshTools/AMIInterpolation/AMIInterpolation/AMIMethod/partialFaceAreaWeightAMI/partialFaceAreaWeightAMI.H +++ b/src/meshTools/AMIInterpolation/AMIInterpolation/AMIMethod/partialFaceAreaWeightAMI/partialFaceAreaWeightAMI.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2013 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2013-2014 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -93,7 +93,8 @@ public: const scalarField& srcMagSf, const scalarField& tgtMagSf, const faceAreaIntersect::triangulationMode& triMode, - const bool reverseTarget = false + const bool reverseTarget = false, + const bool requireMatch = true ); diff --git a/src/meshTools/AMIInterpolation/patches/cyclicACMI/cyclicACMIPolyPatch/cyclicACMIPolyPatch.C b/src/meshTools/AMIInterpolation/patches/cyclicACMI/cyclicACMIPolyPatch/cyclicACMIPolyPatch.C index f8fdacbd..426eb5ce 100644 --- a/src/meshTools/AMIInterpolation/patches/cyclicACMI/cyclicACMIPolyPatch/cyclicACMIPolyPatch.C +++ b/src/meshTools/AMIInterpolation/patches/cyclicACMI/cyclicACMIPolyPatch/cyclicACMIPolyPatch.C @@ -208,6 +208,8 @@ Foam::cyclicACMIPolyPatch::cyclicACMIPolyPatch tgtMask_(), updated_(false) { + AMIRequireMatch_ = false; + // Non-overlapping patch might not be valid yet so cannot determine // associated patchID } @@ -230,6 +232,8 @@ Foam::cyclicACMIPolyPatch::cyclicACMIPolyPatch tgtMask_(), updated_(false) { + AMIRequireMatch_ = false; + if (nonOverlapPatchName_ == name) { FatalIOErrorIn @@ -267,6 +271,8 @@ Foam::cyclicACMIPolyPatch::cyclicACMIPolyPatch tgtMask_(), updated_(false) { + AMIRequireMatch_ = false; + // Non-overlapping patch might not be valid yet so cannot determine // associated patchID } @@ -291,6 +297,8 @@ Foam::cyclicACMIPolyPatch::cyclicACMIPolyPatch tgtMask_(), updated_(false) { + AMIRequireMatch_ = false; + if (nonOverlapPatchName_ == name()) { FatalErrorIn @@ -328,7 +336,9 @@ Foam::cyclicACMIPolyPatch::cyclicACMIPolyPatch srcMask_(), tgtMask_(), updated_(false) -{} +{ + AMIRequireMatch_ = false; +} // * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * // diff --git a/src/meshTools/AMIInterpolation/patches/cyclicAMI/cyclicAMIPolyPatch/cyclicAMIPolyPatch.C b/src/meshTools/AMIInterpolation/patches/cyclicAMI/cyclicAMIPolyPatch/cyclicAMIPolyPatch.C index b8284d43..8c41bc6b 100644 --- a/src/meshTools/AMIInterpolation/patches/cyclicAMI/cyclicAMIPolyPatch/cyclicAMIPolyPatch.C +++ b/src/meshTools/AMIInterpolation/patches/cyclicAMI/cyclicAMIPolyPatch/cyclicAMIPolyPatch.C @@ -388,6 +388,7 @@ void Foam::cyclicAMIPolyPatch::resetAMI nbrPatch0, surfPtr(), faceAreaIntersect::tmMesh, + AMIRequireMatch_, AMIMethod, AMILowWeightCorrection_, AMIReverse_ @@ -501,6 +502,7 @@ Foam::cyclicAMIPolyPatch::cyclicAMIPolyPatch separationVector_(vector::zero), AMIPtr_(NULL), AMIReverse_(false), + AMIRequireMatch_(true), AMILowWeightCorrection_(-1.0), surfPtr_(NULL), surfDict_(fileName("surface")) @@ -530,6 +532,7 @@ Foam::cyclicAMIPolyPatch::cyclicAMIPolyPatch separationVector_(vector::zero), AMIPtr_(NULL), AMIReverse_(dict.lookupOrDefault("flipNormals", false)), + AMIRequireMatch_(true), AMILowWeightCorrection_(dict.lookupOrDefault("lowWeightCorrection", -1.0)), surfPtr_(NULL), surfDict_(dict.subOrEmptyDict("surface")) @@ -639,6 +642,7 @@ Foam::cyclicAMIPolyPatch::cyclicAMIPolyPatch separationVector_(pp.separationVector_), AMIPtr_(NULL), AMIReverse_(pp.AMIReverse_), + AMIRequireMatch_(pp.AMIRequireMatch_), AMILowWeightCorrection_(pp.AMILowWeightCorrection_), surfPtr_(NULL), surfDict_(pp.surfDict_) @@ -669,6 +673,7 @@ Foam::cyclicAMIPolyPatch::cyclicAMIPolyPatch separationVector_(pp.separationVector_), AMIPtr_(NULL), AMIReverse_(pp.AMIReverse_), + AMIRequireMatch_(pp.AMIRequireMatch_), AMILowWeightCorrection_(pp.AMILowWeightCorrection_), surfPtr_(NULL), surfDict_(pp.surfDict_) @@ -713,6 +718,7 @@ Foam::cyclicAMIPolyPatch::cyclicAMIPolyPatch separationVector_(pp.separationVector_), AMIPtr_(NULL), AMIReverse_(pp.AMIReverse_), + AMIRequireMatch_(pp.AMIRequireMatch_), AMILowWeightCorrection_(pp.AMILowWeightCorrection_), surfPtr_(NULL), surfDict_(pp.surfDict_) diff --git a/src/meshTools/AMIInterpolation/patches/cyclicAMI/cyclicAMIPolyPatch/cyclicAMIPolyPatch.H b/src/meshTools/AMIInterpolation/patches/cyclicAMI/cyclicAMIPolyPatch/cyclicAMIPolyPatch.H index c9c0055a..40cfc95e 100644 --- a/src/meshTools/AMIInterpolation/patches/cyclicAMI/cyclicAMIPolyPatch/cyclicAMIPolyPatch.H +++ b/src/meshTools/AMIInterpolation/patches/cyclicAMI/cyclicAMIPolyPatch/cyclicAMIPolyPatch.H @@ -56,7 +56,24 @@ class cyclicAMIPolyPatch private: - // Private data + // Private Member Functions + + //- Return normal of face at max distance from rotation axis + vector findFaceNormalMaxRadius(const pointField& faceCentres) const; + + void calcTransforms + ( + const primitivePatch& half0, + const pointField& half0Ctrs, + const vectorField& half0Areas, + const pointField& half1Ctrs, + const vectorField& half1Areas + ); + + +protected: + + // Protected data //- Name of other half mutable word nbrPatchName_; @@ -97,6 +114,9 @@ private: //- Flag to indicate that slave patch should be reversed for AMI const bool AMIReverse_; + //- Flag to indicate that patches should match/overlap + bool AMIRequireMatch_; + //- Low weight correction threshold for AMI const scalar AMILowWeightCorrection_; @@ -107,23 +127,6 @@ private: const dictionary surfDict_; - // Private Member Functions - - //- Return normal of face at max distance from rotation axis - vector findFaceNormalMaxRadius(const pointField& faceCentres) const; - - void calcTransforms - ( - const primitivePatch& half0, - const pointField& half0Ctrs, - const vectorField& half0Areas, - const pointField& half1Ctrs, - const vectorField& half1Areas - ); - - -protected: - // Protected Member Functions //- Reset the AMI interpolator diff --git a/src/meshTools/mappedPatches/mappedPolyPatch/mappedPatchBase.C b/src/meshTools/mappedPatches/mappedPolyPatch/mappedPatchBase.C index d4e15763..6ab8930a 100644 --- a/src/meshTools/mappedPatches/mappedPolyPatch/mappedPatchBase.C +++ b/src/meshTools/mappedPatches/mappedPolyPatch/mappedPatchBase.C @@ -836,6 +836,7 @@ void Foam::mappedPatchBase::calcAMI() const samplePolyPatch(), // nbrPatch0, surfPtr(), faceAreaIntersect::tmMesh, + true, AMIPatchToPatchInterpolation::imFaceAreaWeight, -1, AMIReverse_ diff --git a/src/meshTools/regionCoupled/patches/regionCoupledPolyPatch/regionCoupledBase.C b/src/meshTools/regionCoupled/patches/regionCoupledPolyPatch/regionCoupledBase.C index 224a104c..a18e83da 100644 --- a/src/meshTools/regionCoupled/patches/regionCoupledPolyPatch/regionCoupledBase.C +++ b/src/meshTools/regionCoupled/patches/regionCoupledPolyPatch/regionCoupledBase.C @@ -91,6 +91,7 @@ void Foam::regionCoupledBase::resetAMI() const nbrPatch0, surfPtr(), faceAreaIntersect::tmMesh, + true, AMIPatchToPatchInterpolation::imFaceAreaWeight, -1, AMIReverse_ diff --git a/src/regionModels/regionModel/regionModel/regionModel.C b/src/regionModels/regionModel/regionModel/regionModel.C index 5e147d22..46eae955 100644 --- a/src/regionModels/regionModel/regionModel/regionModel.C +++ b/src/regionModels/regionModel/regionModel/regionModel.C @@ -242,6 +242,7 @@ Foam::regionModels::regionModel::interRegionAMI p, nbrP, faceAreaIntersect::tmMesh, + true, AMIPatchToPatchInterpolation::imFaceAreaWeight, -1, flip @@ -284,6 +285,7 @@ Foam::regionModels::regionModel::interRegionAMI p, nbrP, faceAreaIntersect::tmMesh, + true, AMIPatchToPatchInterpolation::imFaceAreaWeight, -1, flip diff --git a/src/sampling/meshToMeshInterpolation/meshToMesh/meshToMesh.C b/src/sampling/meshToMeshInterpolation/meshToMesh/meshToMesh.C index eebb219a..2b2b7e97 100644 --- a/src/sampling/meshToMeshInterpolation/meshToMesh/meshToMesh.C +++ b/src/sampling/meshToMeshInterpolation/meshToMesh/meshToMesh.C @@ -419,6 +419,7 @@ Foam::meshToMesh::patchAMIs() const srcPP, tgtPP, faceAreaIntersect::tmMesh, + false, interpolationMethodAMI(method_), -1, true // flip target patch since patch normals are aligned diff --git a/src/thermophysicalModels/radiationModels/radiationModel/fvDOM/radiativeIntensityRay/radiativeIntensityRay.C b/src/thermophysicalModels/radiationModels/radiationModel/fvDOM/radiativeIntensityRay/radiativeIntensityRay.C index 28644026..f2bcf8a4 100644 --- a/src/thermophysicalModels/radiationModels/radiationModel/fvDOM/radiativeIntensityRay/radiativeIntensityRay.C +++ b/src/thermophysicalModels/radiationModels/radiationModel/fvDOM/radiativeIntensityRay/radiativeIntensityRay.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2014 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -270,7 +270,7 @@ void Foam::radiation::radiativeIntensityRay::addIntensity() forAll(ILambda_, lambdaI) { - I_ += absorptionEmission_.addIntensity(lambdaI, ILambda_[lambdaI]); + I_ += ILambda_[lambdaI]; } } diff --git a/src/thermophysicalModels/radiationModels/submodels/absorptionEmissionModel/absorptionEmissionModel/absorptionEmissionModel.C b/src/thermophysicalModels/radiationModels/submodels/absorptionEmissionModel/absorptionEmissionModel/absorptionEmissionModel.C index 563b4672..602bd3e9 100644 --- a/src/thermophysicalModels/radiationModels/submodels/absorptionEmissionModel/absorptionEmissionModel/absorptionEmissionModel.C +++ b/src/thermophysicalModels/radiationModels/submodels/absorptionEmissionModel/absorptionEmissionModel/absorptionEmissionModel.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2014 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -235,17 +235,6 @@ bool Foam::radiation::absorptionEmissionModel::isGrey() const } -Foam::tmp -Foam::radiation::absorptionEmissionModel::addIntensity -( - const label rayI, - const volScalarField& ILambda -) const -{ - return ILambda; -} - - void Foam::radiation::absorptionEmissionModel::correct ( volScalarField& a, diff --git a/src/thermophysicalModels/radiationModels/submodels/absorptionEmissionModel/absorptionEmissionModel/absorptionEmissionModel.H b/src/thermophysicalModels/radiationModels/submodels/absorptionEmissionModel/absorptionEmissionModel/absorptionEmissionModel.H index dc6c3777..902ebc18 100644 --- a/src/thermophysicalModels/radiationModels/submodels/absorptionEmissionModel/absorptionEmissionModel/absorptionEmissionModel.H +++ b/src/thermophysicalModels/radiationModels/submodels/absorptionEmissionModel/absorptionEmissionModel/absorptionEmissionModel.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2014 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -170,13 +170,6 @@ public: //- Flag for whether the absorption/emission is for a grey gas virtual bool isGrey() const; - //- Add radiative intensity for ray i - virtual tmp addIntensity - ( - const label rayI, - const volScalarField& ILambda - ) const; - //- Correct absorption coefficients virtual void correct ( diff --git a/src/thermophysicalModels/radiationModels/submodels/absorptionEmissionModel/wideBandAbsorptionEmission/wideBandAbsorptionEmission.C b/src/thermophysicalModels/radiationModels/submodels/absorptionEmissionModel/wideBandAbsorptionEmission/wideBandAbsorptionEmission.C index 230fb033..a1bf1cc0 100644 --- a/src/thermophysicalModels/radiationModels/submodels/absorptionEmissionModel/wideBandAbsorptionEmission/wideBandAbsorptionEmission.C +++ b/src/thermophysicalModels/radiationModels/submodels/absorptionEmissionModel/wideBandAbsorptionEmission/wideBandAbsorptionEmission.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2014 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -293,16 +293,6 @@ Foam::radiation::wideBandAbsorptionEmission::ECont(const label bandI) const return E; } -Foam::tmp -Foam::radiation::wideBandAbsorptionEmission::addIntensity -( - const label i, - const volScalarField& ILambda -) const -{ - return ILambda*(iBands_[i][1] - iBands_[i][0])/totalWaveLength_; -} - void Foam::radiation::wideBandAbsorptionEmission::correct ( diff --git a/src/thermophysicalModels/radiationModels/submodels/absorptionEmissionModel/wideBandAbsorptionEmission/wideBandAbsorptionEmission.H b/src/thermophysicalModels/radiationModels/submodels/absorptionEmissionModel/wideBandAbsorptionEmission/wideBandAbsorptionEmission.H index 1fe02beb..629fa173 100644 --- a/src/thermophysicalModels/radiationModels/submodels/absorptionEmissionModel/wideBandAbsorptionEmission/wideBandAbsorptionEmission.H +++ b/src/thermophysicalModels/radiationModels/submodels/absorptionEmissionModel/wideBandAbsorptionEmission/wideBandAbsorptionEmission.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2012 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2014 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -227,14 +227,7 @@ public: return iBands_[i]; } - //- Add contribution of ILambda to the total radiative intensity in - // direction i - tmp addIntensity - ( - const label i, - const volScalarField& ILambda - ) const; - + //- Correct rays void correct ( volScalarField& a_,