CFD Online Discussion Forums

CFD Online Discussion Forums (https://www.cfd-online.com/Forums/)
-   OpenFOAM Running, Solving & CFD (https://www.cfd-online.com/Forums/openfoam-solving/)
-   -   Permeability filling of container outlet condition (https://www.cfd-online.com/Forums/openfoam-solving/59002-permeability-filling-container-outlet-condition.html)

billy March 28, 2008 09:01

Can you attach your code?
 
Can you attach your code?

John Degenkolb June 2, 2014 12:21

selective outlet BC
 
1 Attachment(s)
Hi Foamers,

I'm trying to redo the boundary condition that Francesco created.
I copied and renamed the inletOutletFvPatchField boundary conditions to vapMembraneFvPatchField and tried costumize them.
My .C is:
Code:

#include "vapMembraneFvPatchField.H"

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

template<class Type>
Foam::vapMembraneFvPatchField<Type>::vapMembraneFvPatchField
(
    const fvPatch& p,
    const DimensionedField<Type, volMesh>& iF,
    const volScalarField& alphaMatrix
)
:
    mixedFvPatchField<Type>(p, iF),
  // original: phiName_("phi")

    alphaMatrixName_("alphaMatrix")

{
    this->refValue() = pTraits<Type>::zero;
    this->refGrad() = pTraits<Type>::zero;
    this->valueFraction() = 0.0;
}

template<class Type>
Foam::vapMembraneFvPatchField<Type>::vapMembraneFvPatchField
(
    const vapMembraneFvPatchField<Type>& ptf,
    const fvPatch& p,
    const DimensionedField<Type, volMesh>& iF,
    const fvPatchFieldMapper& mapper
)
:
    mixedFvPatchField<Type>(ptf, p, iF, mapper),
    phiName_(ptf.phiName_)
{}


template<class Type>
Foam::vapMembraneFvPatchField<Type>::vapMembraneFvPatchField
(
    const fvPatch& p,
    const DimensionedField<Type, volMesh>& iF,
    const dictionary& dict
)
:
    mixedFvPatchField<Type>(p, iF),
    phiName_(dict.lookupOrDefault<word>("phi", "phi"))
{
    this->refValue() = Field<Type>("inletValue", dict, p.size());

    if (dict.found("value"))
    {
        fvPatchField<Type>::operator=
        (
            Field<Type>("value", dict, p.size())
        );
    }
    else
    {
        fvPatchField<Type>::operator=(this->refValue());
    }

    this->refGrad() = pTraits<Type>::zero;
    this->valueFraction() = 0.0;
}


template<class Type>
Foam::vapMembraneFvPatchField<Type>::vapMembraneFvPatchField
(
    const vapMembraneFvPatchField<Type>& ptf
)
:
    mixedFvPatchField<Type>(ptf),
    phiName_(ptf.phiName_)
{}


template<class Type>
Foam::vapMembraneFvPatchField<Type>::vapMembraneFvPatchField
(
    const vapMembraneFvPatchField<Type>& ptf,
    const DimensionedField<Type, volMesh>& iF
)
:
    mixedFvPatchField<Type>(ptf, iF),
    phiName_(ptf.phiName_)
{}


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

template<class Type>
void Foam::vapMembraneFvPatchField<Type>::updateCoeffs()
{
    if (this->updated())
    {
        return;
    }


    const Field<scalar>& alphaMatrix =
        this->patch().template lookupPatchField<surfaceScalarField, scalar>
        (
            alphaMatrixName_
        );

    this->valueFraction() = 1.0 - alphaMatrix();


    mixedFvPatchField<Type>::updateCoeffs();
}


template<class Type>
void Foam::vapMembraneFvPatchField<Type>::write(Ostream& os) const
{
    fvPatchField<Type>::write(os);
    if (phiName_ != "phi")
    {
        os.writeKeyword("phi") << phiName_ << token::END_STATEMENT << nl;
    }
    this->refValue().writeEntry("inletValue", os);
    this->writeEntry("value", os);
}


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

template<class Type>
void Foam::vapMembraneFvPatchField<Type>::operator=
(
    const fvPatchField<Type>& ptf
)
{
    fvPatchField<Type>::operator=
    (
        this->valueFraction()*this->refValue()
        + (1 - this->valueFraction())*ptf
    );
}


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

And my .H file:
Code:


#ifndef vapMembraneFvPatchField_H
#define vapMembraneFvPatchField_H

#include "mixedFvPatchField.H"

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

namespace Foam
{

/*---------------------------------------------------------------------------*\
                  Class vapMembraneFvPatchField Declaration
\*---------------------------------------------------------------------------*/

template<class Type>
class vapMembraneFvPatchField
:
    public mixedFvPatchField<Type>
{

protected:

    // Protected data

        //- Name of flux field
        word phiName_;
           
            //- Name of the volume fraction field
            word alphaMatrixName_;
/*
        // by me, to avoid " class doesn not have any diled name "gamma_"
        word gamma_;
*/

public:

    //- Runtime type information
    TypeName("vapMembrane");


    // Constructors

        //- Construct from patch and internal field
        vapMembraneFvPatchField
        (
            const fvPatch&,
            const DimensionedField<Type, volMesh>&,
            const volScalarField& alphaMatrix

        );

        //- Construct from patch, internal field and dictionary
        vapMembraneFvPatchField
        (
            const fvPatch&,
            const DimensionedField<Type, volMesh>&,
            const dictionary&
        );

        //- Construct by mapping given vapMembraneFvPatchField onto a new patch
        vapMembraneFvPatchField
        (
            const vapMembraneFvPatchField<Type>&,
            const fvPatch&,
            const DimensionedField<Type, volMesh>&,
            const fvPatchFieldMapper&
        );

        //- Construct as copy
        vapMembraneFvPatchField
        (
            const vapMembraneFvPatchField<Type>&
        );

        //- Construct and return a clone
        virtual tmp<fvPatchField<Type> > clone() const
        {
            return tmp<fvPatchField<Type> >
            (
                new vapMembraneFvPatchField<Type>(*this)
            );
        }

        //- Construct as copy setting internal field reference
        vapMembraneFvPatchField
        (
            const vapMembraneFvPatchField<Type>&,
            const DimensionedField<Type, volMesh>&
        );

        //- Construct and return a clone setting internal field reference
        virtual tmp<fvPatchField<Type> > clone
        (
            const DimensionedField<Type, volMesh>& iF
        ) const
        {
            return tmp<fvPatchField<Type> >
            (
                new vapMembraneFvPatchField<Type>(*this, iF)
            );
        }


    // Member functions

        //- Update the coefficients associated with the patch field
        virtual void updateCoeffs();

        //- Write
        virtual void write(Ostream&) const;


    // Member operators

        virtual void operator=(const fvPatchField<Type>& pvf);
};


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

} // End namespace Foam

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

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

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

#endif

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

When I try to do wclean; wmake I get the following error:
Code:

peter@peter-HP-Compaq-nw8440-RZ646EC-ABD:~/OpenFOAM/peter-2.3.0/mySolvers/vapMembrane$ wclean; wmake
wmakeLnInclude: linking include files to ./lnInclude
Making dependency list for source file vapMembrane/vapMembraneFvPatchFields.C
SOURCE=vapMembrane/vapMembraneFvPatchFields.C ;  g++ -m32 -Dlinux -DWM_DP -Wall -Wextra -Wno-unused-parameter -Wold-style-cast -O3  -DNoRepository -ftemplate-depth-100 -I/opt/openfoam230/src/triSurface/lnInclude -I/opt/openfoam230/src/meshTools/lnInclude -I/opt/openfoam230/src/transportModels/twoPhaseMixture/lnInclude -I/opt/openfoam230/src/transportModels/incompressible/lnInclude -I/opt/openfoam230/src/transportModels/interfaceProperties/lnInclude -I/opt/openfoam230/src/finiteVolume/lnInclude -I/opt/openfoam230/src/meshTools/lnInclude -I/opt/openfoam230/src/fvOptions/lnInclude -I/opt/openfoam230/src/sampling/lnInclude -IlnInclude -I. -I/opt/openfoam230/src/OpenFOAM/lnInclude -I/opt/openfoam230/src/OSspecific/POSIX/lnInclude  -fPIC -c $SOURCE -o Make/linuxGccDPOpt/vapMembraneFvPatchFields.o
In file included from vapMembrane/vapMembraneFvPatchField.H:195:0,
                from vapMembrane/vapMembraneFvPatchFields.H:29,
                from vapMembrane/vapMembraneFvPatchFields.C:28:
vapMembrane/vapMembraneFvPatchField.C: In member function ‘virtual void Foam::vapMembraneFvPatchField<Type>::updateCoeffs()’:
vapMembrane/vapMembraneFvPatchField.C:133:47: error: no match for call to ‘(const Foam::Field<double>) ()’
    this->valueFraction() = 1.0 - alphaMatrix();
                                              ^
In file included from /opt/openfoam230/src/OpenFOAM/lnInclude/token.H:49:0,
                from /opt/openfoam230/src/OpenFOAM/lnInclude/UListIO.C:28,
                from /opt/openfoam230/src/OpenFOAM/lnInclude/UList.C:239,
                from /opt/openfoam230/src/OpenFOAM/lnInclude/UList.H:473,
                from /opt/openfoam230/src/OpenFOAM/lnInclude/List.H:43,
                from /opt/openfoam230/src/OpenFOAM/lnInclude/fileNameList.H:42,
                from /opt/openfoam230/src/OpenFOAM/lnInclude/OSspecific.H:39,
                from /opt/openfoam230/src/OpenFOAM/lnInclude/regIOobject.H:43,
                from /opt/openfoam230/src/OpenFOAM/lnInclude/GeometricField.H:42,
                from /opt/openfoam230/src/OpenFOAM/lnInclude/GeometricScalarField.H:38,
                from /opt/openfoam230/src/OpenFOAM/lnInclude/GeometricFields.H:34,
                from /opt/openfoam230/src/finiteVolume/lnInclude/volFields.H:37,
                from vapMembrane/vapMembraneFvPatchFields.C:26:
/opt/openfoam230/src/finiteVolume/lnInclude/fvPatchField.H: In instantiation of ‘static Foam::tmp<Foam::fvPatchField<Type> > Foam::fvPatchField<Type>::addpatchConstructorToTable<fvPatchFieldType>::New(const Foam::fvPatch&, const Foam::DimensionedField<Type, Foam::volMesh>&) [with fvPatchFieldType = Foam::vapMembraneFvPatchField<double>; Type = double]’:
/opt/openfoam230/src/finiteVolume/lnInclude/fvPatchField.H:120:9:  required from ‘Foam::fvPatchField<Type>::addpatchConstructorToTable<fvPatchFieldType>::addpatchConstructorToTable(const Foam::word&) [with fvPatchFieldType = Foam::vapMembraneFvPatchField<double>; Type = double]’
vapMembrane/vapMembraneFvPatchFields.C:38:1:  required from here
/opt/openfoam230/src/OpenFOAM/lnInclude/runTimeSelectionTables.H:76:66: error: no matching function for call to ‘Foam::vapMembraneFvPatchField<double>::vapMembraneFvPatchField(const Foam::fvPatch&, const Foam::DimensionedField<double, Foam::volMesh>&)’
            return autoPtr< baseType >(new baseType##Type parList);          \
                                                                  ^
/opt/openfoam230/src/finiteVolume/lnInclude/fvPatchField.H:120:9: note: in expansion of macro ‘declareRunTimeSelectionTable’
        declareRunTimeSelectionTable
        ^
/opt/openfoam230/src/OpenFOAM/lnInclude/runTimeSelectionTables.H:76:66: note: candidates are:
            return autoPtr< baseType >(new baseType##Type parList);          \
                                                                  ^
/opt/openfoam230/src/finiteVolume/lnInclude/fvPatchField.H:120:9: note: in expansion of macro ‘declareRunTimeSelectionTable’
        declareRunTimeSelectionTable
        ^
In file included from vapMembrane/vapMembraneFvPatchField.H:195:0,
                from vapMembrane/vapMembraneFvPatchFields.H:29,
                from vapMembrane/vapMembraneFvPatchFields.C:28:
vapMembrane/vapMembraneFvPatchField.C:105:1: note: Foam::vapMembraneFvPatchField<Type>::vapMembraneFvPatchField(const Foam::vapMembraneFvPatchField<Type>&, const Foam::DimensionedField<Type, Foam::volMesh>&) [with Type = double]
 Foam::vapMembraneFvPatchField<Type>::vapMembraneFvPatchField
 ^
vapMembrane/vapMembraneFvPatchField.C:105:1: note:  no known conversion for argument 1 from ‘const Foam::fvPatch’ to ‘const Foam::vapMembraneFvPatchField<double>&’
vapMembrane/vapMembraneFvPatchField.C:94:1: note: Foam::vapMembraneFvPatchField<Type>::vapMembraneFvPatchField(const Foam::vapMembraneFvPatchField<Type>&) [with Type = double]
 Foam::vapMembraneFvPatchField<Type>::vapMembraneFvPatchField
 ^
vapMembrane/vapMembraneFvPatchField.C:94:1: note:  candidate expects 1 argument, 2 provided
vapMembrane/vapMembraneFvPatchField.C:50:1: note: Foam::vapMembraneFvPatchField<Type>::vapMembraneFvPatchField(const Foam::vapMembraneFvPatchField<Type>&, const Foam::fvPatch&, const Foam::DimensionedField<Type, Foam::volMesh>&, const Foam::fvPatchFieldMapper&) [with Type = double]
 Foam::vapMembraneFvPatchField<Type>::vapMembraneFvPatchField
 ^
vapMembrane/vapMembraneFvPatchField.C:50:1: note:  candidate expects 4 arguments, 2 provided
vapMembrane/vapMembraneFvPatchField.C:64:1: note: Foam::vapMembraneFvPatchField<Type>::vapMembraneFvPatchField(const Foam::fvPatch&, const Foam::DimensionedField<Type, Foam::volMesh>&, const Foam::dictionary&) [with Type = double]
 Foam::vapMembraneFvPatchField<Type>::vapMembraneFvPatchField
 ^
vapMembrane/vapMembraneFvPatchField.C:64:1: note:  candidate expects 3 arguments, 2 provided
vapMembrane/vapMembraneFvPatchField.C:31:1: note: Foam::vapMembraneFvPatchField<Type>::vapMembraneFvPatchField(const Foam::fvPatch&, const Foam::DimensionedField<Type, Foam::volMesh>&, const volScalarField&) [with Type = double; Foam::volScalarField = Foam::GeometricField<double, Foam::fvPatchField, Foam::volMesh>]
 Foam::vapMembraneFvPatchField<Type>::vapMembraneFvPatchField
 ^
vapMembrane/vapMembraneFvPatchField.C:31:1: note:  candidate expects 3 arguments, 2 provided

I just pasted the first of the error message.
It seems that alphaMatrix, which should contain the volume fraction of liquid polymer, is not accessible. I'm running openfoam 2.3.0. Please find in attachment my alpha.matrix file which defines the volume fractions of liquid at t=0.

Thank you in advance for your help.
Peter


All times are GMT -4. The time now is 19:23.