laplaceFilter.C 4.34 KB
Newer Older
1 2 3 4
/*---------------------------------------------------------------------------*\
  =========                 |
  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
   \\    /   O peration     |
OpenFOAM bot's avatar
OpenFOAM bot committed
5
    \\  /    A nd           | www.openfoam.com
6
     \\/     M anipulation  |
OpenFOAM bot's avatar
OpenFOAM bot committed
7
-------------------------------------------------------------------------------
OpenFOAM bot's avatar
OpenFOAM bot committed
8
    Copyright (C) 2011-2017 OpenFOAM Foundation
9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57
-------------------------------------------------------------------------------
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 <http://www.gnu.org/licenses/>.

\*---------------------------------------------------------------------------*/

#include "laplaceFilter.H"
#include "addToRunTimeSelectionTable.H"
#include "calculatedFvPatchFields.H"
#include "fvm.H"
#include "fvc.H"

// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //

namespace Foam
{
    defineTypeNameAndDebug(laplaceFilter, 0);
    addToRunTimeSelectionTable(LESfilter, laplaceFilter, dictionary);
}


// * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //

Foam::laplaceFilter::laplaceFilter(const fvMesh& mesh, scalar widthCoeff)
:
    LESfilter(mesh),
    widthCoeff_(widthCoeff),
    coeff_
    (
        IOobject
        (
            "laplaceFilterCoeff",
            mesh.time().timeName(),
            mesh
        ),
        mesh,
58
        dimensionedScalar(dimLength*dimLength, Zero),
59 60 61
        calculatedFvPatchScalarField::typeName
    )
{
62
    coeff_.ref() = pow(mesh.V(), 2.0/3.0)/widthCoeff_;
63 64 65 66 67 68
}


Foam::laplaceFilter::laplaceFilter(const fvMesh& mesh, const dictionary& bd)
:
    LESfilter(mesh),
69 70
    widthCoeff_
    (
71
        bd.optionalSubDict(type() + "Coeffs").get<scalar>("widthCoeff")
72
    ),
73 74 75 76 77 78 79 80 81
    coeff_
    (
        IOobject
        (
            "laplaceFilterCoeff",
            mesh.time().timeName(),
            mesh
        ),
        mesh,
82
        dimensionedScalar(dimLength*dimLength, Zero),
83 84 85
        calculatedFvPatchScalarField::typeName
    )
{
86
    coeff_.ref() = pow(mesh.V(), 2.0/3.0)/widthCoeff_;
87 88 89 90 91 92 93
}


// * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //

void Foam::laplaceFilter::read(const dictionary& bd)
{
94
    bd.optionalSubDict(type() + "Coeffs").readEntry("widthCoeff", widthCoeff_);
95 96 97 98 99 100 101 102 103 104
}


// * * * * * * * * * * * * * * * Member Operators  * * * * * * * * * * * * * //

Foam::tmp<Foam::volScalarField> Foam::laplaceFilter::operator()
(
    const tmp<volScalarField>& unFilteredField
) const
{
105 106
    correctBoundaryConditions(unFilteredField);

107 108 109 110 111 112 113 114 115 116 117 118 119 120
    tmp<volScalarField> filteredField =
        unFilteredField() + fvc::laplacian(coeff_, unFilteredField());

    unFilteredField.clear();

    return filteredField;
}


Foam::tmp<Foam::volVectorField> Foam::laplaceFilter::operator()
(
    const tmp<volVectorField>& unFilteredField
) const
{
121 122
    correctBoundaryConditions(unFilteredField);

123 124 125 126 127 128 129 130 131 132 133 134 135 136
    tmp<volVectorField> filteredField =
        unFilteredField() + fvc::laplacian(coeff_, unFilteredField());

    unFilteredField.clear();

    return filteredField;
}


Foam::tmp<Foam::volSymmTensorField> Foam::laplaceFilter::operator()
(
    const tmp<volSymmTensorField>& unFilteredField
) const
{
137 138
    correctBoundaryConditions(unFilteredField);

139 140 141 142 143 144 145 146 147 148 149 150 151 152
    tmp<volSymmTensorField> filteredField =
        unFilteredField() + fvc::laplacian(coeff_, unFilteredField());

    unFilteredField.clear();

    return filteredField;
}


Foam::tmp<Foam::volTensorField> Foam::laplaceFilter::operator()
(
    const tmp<volTensorField>& unFilteredField
) const
{
153 154
    correctBoundaryConditions(unFilteredField);

155 156 157 158 159 160 161 162 163 164
    tmp<volTensorField> filteredField =
        unFilteredField() + fvc::laplacian(coeff_, unFilteredField());

    unFilteredField.clear();

    return filteredField;
}


// ************************************************************************* //