Ir para conteúdo
Fórum Script Brasil
  • 0

Referência ambígua


deliobs

Pergunta

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 para o comentário
Compartilhar em outros sites

0 respostass a esta questão

Posts Recomendados

Até agora não há respostas para essa pergunta

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...