/*---------------------------------------------------------------------------*\ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | \\ / A nd | www.openfoam.com \\/ M anipulation | ------------------------------------------------------------------------------- Copyright (C) 2016-2022 OpenCFD Ltd. ------------------------------------------------------------------------------- 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 "polyPatch.H" #include "Time.H" #include "zeroGradientFvPatchField.H" // * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // template bool Foam::functionObjects::zeroGradient::accept ( const GeometricField& input ) { const auto& patches = input.boundaryField(); forAll(patches, patchi) { if (!polyPatch::constraintType(patches[patchi].patch().patch().type())) { return true; } } return false; } template int Foam::functionObjects::zeroGradient::apply ( const word& inputName, int& state ) { typedef GeometricField VolFieldType; // State: return 0 (not-processed), -1 (skip), +1 ok // Already done, or not available if (state || !foundObject(inputName)) { return state; } const VolFieldType& input = lookupObject(inputName); if (!returnReduceOr(accept(input))) { state = -1; return state; } word outputName(resultName_); outputName.replace("@@", inputName); // Also save the field-type, just in case we want it later results_.set(outputName, VolFieldType::typeName); if (!foundObject(outputName)) { auto tzeroGrad = tmp::New ( IOobject ( outputName, time_.timeName(), mesh_, IOobject::NO_READ, IOobject::NO_WRITE ), mesh_, dimensioned(input.dimensions(), Zero), fvPatchFieldBase::zeroGradientType() ); store(outputName, tzeroGrad); } VolFieldType& output = lookupObjectRef(outputName); output = input; output.correctBoundaryConditions(); state = +1; return state; } // ************************************************************************* //