Ir ao conteúdo

Posts recomendados

Postado

enho 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:

Citar


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.

Postado

Talvez a ambiguidade seja porque no código do arquivo atmBoundaryLayerInletTemperatureFvPatchScalarField.c o compilador não sabe a qual namespace T() pertence. Ao invés de chamá-la simplesmente

 

T(patch().Cf())

 

tente chamá-la pelo nemespace completo pra ver o que acontece:

atmBoundaryLayer::T(patch().Cf())
  • Curtir 2
Postado

Caro V!OLADOR!

 

Uma solução direta, simples, mas certeira. Meu problema, creio, que se sentiu VIOLADO, se me permite a brincadeira com esse trocadilho. Assim que mandei compilar, o erro "caiu por terra" e uma nova condição de contorno à um problema de simulação numérica de escoamento de fluidos pôde ser implementada. Meu mestrado então está praticamente salvo com isso.

 

Agradeço enormemente, visto que não conseguia sair desse erro.

  • Curtir 1
Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!