Jump to content
Fórum Script Brasil
  • 0

Referência ambígua


deliobs
 Share

Question

Tenho dúvidas sobre o erro de ambiguidade. Como ele se dá?

Eu estou tentando modificar um código de um simulador numérico de escoamento de fluidos (OpenFOAM), por meio da inserção de uma variável que me dê uma nova condição de contorno na variável de temperatura.

Ao compilar o código recebo a seguinte mensagem de erro:

In constructor ‘Foam::atmBoundaryLayerInletTemperatureFvPatchScalarField::atmBoundaryLayerInletTemperatureFvPatchScalarField(const Foam::fvPatch&, const Foam::DimensionedField<double, Foam::volMesh>&, const Foam::dictionary&)’:
RAS/derivedFvPatchFields/atmBoundaryLayerInletTemperature/atmBoundaryLayerInletTemperatureFvPatchScalarField.C:61:26: error: reference to ‘T’ is ambiguous

A variável T é declarada no arquivo atmBoundaryLayer.H conforme o código:

tmp<scalarField> T(const vectorField& p) const;

Como uma função membro para avaliação da temperatura na classe atmBoundaryLayer.

No arquivo atmBoundaryLayer.C eu utilizou a função de acordo com o seguinte código:

    tmp<scalarField> atmBoundaryLayer::T(const vectorField& p) const
    {
        if (L_ < 0)        //Atmosfera instável
        {
            return Tstar_/kappa_*(log(((zDir_ & p) + z0_)/z0_) - (2*log(1/2*(1 + sqrt(1 - 16*(zDir_ & p)/L_)))));
        }
        if (L_ > 0)        //Atmosfera estável
        {
            return Tstar_/kappa_*(log(((zDir_ & p) + z0_)/z0_) - (5*(zDir_ & p)/L_));
        }
        if (L_ == 0)    //Atmosfera neutra
        {
            return Tstar_/kappa_*log(((zDir_ & p) + z0_)/z0_);
        }
    }

Quando eu introduzir a condição de contorno de temperatura na simulação, o farei para uma fronteira do sistema do seguinte modo.

    faceXPos
    {
        type            atmBoundaryLayerInletTemperature;
        flowDir        ( -1 0 0 );
        zDir            ( 0 0 1 );
        kappa         0.41;
        Uref            4;
        Tref            303;
        Zref            5;
        z0               uniform 1.75;
        zGround     uniform 0.05;
        L                0;
        value         uniform 303; }

O nome atmBoundaryLayerInletTemperature, pode ser reconhecido graças a seguinte a linha, implementada no arquivo atmBoundaryLayerInletTemperatureFvPatchScalarField.H

    class atmBoundaryLayerInletTemperatureFvPatchScalarField
    :
        public fixedValueFvPatchScalarField,
        public atmBoundaryLayer
    {

    public:

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

.

.

.

Essa biblioteca será incluída no arquivo atmBoundaryLayerInletTemperatureFvPatchScalarField.C e a variável T será novamente implementada conforme a seguinte linha:

    atmBoundaryLayerInletTemperatureFvPatchScalarField::
    atmBoundaryLayerInletTemperatureFvPatchScalarField
    (
        const fvPatch& p,
        const DimensionedField<scalar, volMesh>& iF,
        const dictionary& dict
    )
    :
        fixedValueFvPatchScalarField(p, iF),
        atmBoundaryLayer(patch().Cf(), dict)
    {
        scalarField::operator=(T(patch().Cf()));
    }

Caso alguém possa me ajudar ficaria agradecido.

Link to comment
Share on other sites

0 answers to this question

Recommended Posts

There have been no answers to this question yet

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

  • Forum Statistics

    • Total Topics
      149.6k
    • Total Posts
      646.2k
×
×
  • Create New...