/*---------------------------------------------------------------------------*\
  ==  == ====== ====   ====    |
                    \\     ||  | Multiphase Code Repository by HZDR
  ======   //   ||  || ===//   | Website: https://doi.org/10.14278/rodare.767
  ||  ||  //    ||  // || \\   | License: GPL-3.0-or-later
  ==  == ====== ====   ==  ==  |
-------------------------------------------------------------------------------
License
    This file is part of the Multiphase Code Repository by HZDR.

    Copyright (C) 2025 by Helmholtz-Zentrum Dresden-Rossendorf e.V. (HZDR),
    Website: https://hzdr.de

    Multiphase Code Repository by HZDR is based on the free software for
    computational fluid dynamics (CFD) from the OpenFOAM Foundation.
    Copyright (C) 2025 by OpenFOAM Foundation, Website: https://openfoam.org

    If you are interested in which files are original OpenFOAM Foundation
    files, which OpenFOAM Foundation files were modified, and which files were
    newly created, see FILES.md.

    Multiphase Code Repository by HZDR 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.

    Multiphase Code Repository by HZDR 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 the Multiphase Code Repository by HZDR. If not, see
    <http://www.gnu.org/licenses/>.

InNamespace
    Foam::fvc

Description
    Provides functions to redistribute and collect information across several
    cell layers.

    spreadInterface:
      Redistributes a field (of type volField) by spreading the values
      from the position of maximum alpha in the direction of decreasing
      alpha gradient, when the difference between neighboring cell values
      exceeds alphaDiff; additionally returns information about where valid
      data is available via tmp<volScalarField>.

    integrateWallNormal:
      Computes the integrated field based on a weighing alpha field and
      distance from the wall, using an iterative integration algorithm inspired
      by spreadInterface. The computed integral is stored at the user-defined
      patch. This method can be used, for example, to compute the local film
      thickness by integrating the volume fraction in the wall-normal direction.

See also
    Foam::fvc::spread

SourceFiles
    addonFvcSpread.C

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

#ifndef addonFvcSpread_H
#define addonFvcSpread_H

#include "volFieldsFwd.H"

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

namespace Foam
{
namespace fvc
{
    template<class fieldType>
    tmp<volScalarField> spreadInterface
    (
        fieldType& field,
        const volScalarField& alpha,
        const label nLayers,
        const scalar alphaDiff = 0.2
    );

    tmp<volScalarField> integrateWallNormal
    (
        const volScalarField& field,
        const volScalarField& alpha,
        const label nLayers,
        const word patchName,
        const scalar alphaDiff = -1
    );
}
}


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

#ifdef NoRepository
    #include "addonFvcSpreadTemplates.C"
#endif

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

#endif

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