Skip to content
Snippets Groups Projects
processorFvPatch.C 4.15 KiB
Newer Older
  • Learn to ignore specific revisions
  • /*---------------------------------------------------------------------------*\
      =========                 |
      \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
       \\    /   O peration     |
    
    OpenFOAM bot's avatar
    OpenFOAM bot committed
        \\  /    A nd           | www.openfoam.com
    
         \\/     M anipulation  |
    
    -------------------------------------------------------------------------------
    
    OpenFOAM bot's avatar
    OpenFOAM bot committed
        Copyright (C) 2011-2014 OpenFOAM Foundation
    
        Copyright (C) 2019 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 <http://www.gnu.org/licenses/>.
    
    
    \*---------------------------------------------------------------------------*/
    
    #include "processorFvPatch.H"
    #include "addToRunTimeSelectionTable.H"
    #include "transformField.H"
    
    
    // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
    
        defineTypeNameAndDebug(processorFvPatch, 0);
        addToRunTimeSelectionTable(fvPatch, processorFvPatch, polyPatch);
    }
    
    
    
    // * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * * //
    
    
    void Foam::processorFvPatch::makeWeights(scalarField& w) const
    
    {
        if (Pstream::parRun())
        {
            // The face normals point in the opposite direction on the other side
            scalarField neighbFaceCentresCn
            (
                (
    
    mattijs's avatar
    mattijs committed
                    procPolyPatch_.neighbFaceAreas()
                   /(mag(procPolyPatch_.neighbFaceAreas()) + VSMALL)
    
    mattijs's avatar
    mattijs committed
                  procPolyPatch_.neighbFaceCentres()
                - procPolyPatch_.neighbFaceCellCentres())
    
            w = neighbFaceCentresCn
               /((nf()&coupledFvPatch::delta()) + neighbFaceCentresCn);
    
    Foam::tmp<Foam::vectorField> Foam::processorFvPatch::delta() const
    
    {
        if (Pstream::parRun())
        {
    
    mattijs's avatar
    mattijs committed
            // To the transformation if necessary
            if (parallel())
    
    mattijs's avatar
    mattijs committed
                return
    
                    coupledFvPatch::delta()
    
    mattijs's avatar
    mattijs committed
                  - (
                        procPolyPatch_.neighbFaceCentres()
                      - procPolyPatch_.neighbFaceCellCentres()
                    );
            }
            else
            {
                return
    
                    coupledFvPatch::delta()
    
    mattijs's avatar
    mattijs committed
                  - transform
                    (
                        forwardT(),
    
    mattijs's avatar
    mattijs committed
                        (
    
    mattijs's avatar
    mattijs committed
                            procPolyPatch_.neighbFaceCentres()
                          - procPolyPatch_.neighbFaceCellCentres()
                        )
                    );
    
    mattijs's avatar
    mattijs committed
        else
        {
    
            return coupledFvPatch::delta();
    
    mattijs's avatar
    mattijs committed
        }
    
    Foam::tmp<Foam::labelField> Foam::processorFvPatch::interfaceInternalField
    
    ) const
    {
        return patchInternalField(internalData);
    }
    
    
    
    Foam::tmp<Foam::labelField> Foam::processorFvPatch::interfaceInternalField
    (
        const labelUList& internalData,
        const labelUList& faceCells
    ) const
    {
        return patchInternalField(internalData, faceCells);
    }
    
    
    
    void Foam::processorFvPatch::initInternalFieldTransfer
    
    (
        const Pstream::commsTypes commsType,
    
    ) const
    {
        send(commsType, patchInternalField(iF)());
    }
    
    
    
    void Foam::processorFvPatch::initInternalFieldTransfer
    (
        const Pstream::commsTypes commsType,
        const labelUList& iF,
        const labelUList& faceCells
    ) const
    {
        send(commsType, interfaceInternalField(iF, faceCells)());
    }
    
    
    
    Foam::tmp<Foam::labelField> Foam::processorFvPatch::internalFieldTransfer
    
    (
        const Pstream::commsTypes commsType,
    
    ) const
    {
        return receive<label>(commsType, this->size());
    }
    
    
    // ************************************************************************* //