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
|