Soluções numéricas da equação de Blasius · (Liggett, 1994, p. 196) Sugere a seguinte...

7

Click here to load reader

Transcript of Soluções numéricas da equação de Blasius · (Liggett, 1994, p. 196) Sugere a seguinte...

Page 1: Soluções numéricas da equação de Blasius · (Liggett, 1994, p. 196) Sugere a seguinte alternativa para definir condições de contorno em h =0, ... Liggett, J. A. (1994). Fluid

Soluções numéricas da equação de Blasius

Nelson Luís [email protected]

2 de julho de 2009

Uma camada-limite laminar sobre uma placa plana sem gradiente de pressão longitudinal podeser resolvida com

f ′′′+12

f f ′′ = 0 (1)

sujeita às condições de contorno

f (0) = 0, f ′(0) = 0, f ′(∞) = 1 (2)

onde

f (η) =Ψ(x,y)U∞δ (x)

(3)

η =y

δ (x)(4)

e

δ (x) =√

νxU∞

. (5)

As condições 2 não configuram um problema de valor inicial clássico, mas sim um problema devalor de contorno. Mesmo assim, vale a pena a seguinte abordagem. A mudança de variáveis

u1 = f , u2 = f ′, u3 = f ′′, (6)

produz o seguinte sistema autônomo de equações diferenciais ordinárias:

ddη

u1u2u3

=

u2,u3,

−12u1u3

(7)

Este sistema pode agora ser resolvido com 3 condições iniciais

u1(0) = 0, u2(0) = 0, u3(0) = γ (8)

1

Page 2: Soluções numéricas da equação de Blasius · (Liggett, 1994, p. 196) Sugere a seguinte alternativa para definir condições de contorno em h =0, ... Liggett, J. A. (1994). Fluid

onde γ é um valor inicial arbitrário para f ′′(0). A solução de 7 pode ser obtida com o seguinteprograma em C:〈blasius.c〉≡

// --------------------------------------------------------------// blasius.c: tentativa de resolver a camada-limite laminar//// Nelson Luís Dias// 2002-06-05T00:00:00// 2009-07-02T08:43:57 atualizado para TT770 Teoria de Camadas-Limite// --------------------------------------------------------------#include <assert.h>#include <stdio.h>#include <stdlib.h>// --------------------------------------------------------------// rkvetor: uma implementação de um runge-kutta multidimensional//// Nelson Luís Dias// 20020528// 20020528// --------------------------------------------------------------void rkvetor(

long m, // número de equações diferenciais ordinárias do sistema == tamanho de ydouble xn, // ponto de avaliaçãodouble h, // passo que vou dardouble *yn, // valor atual da funçãovoid ff(long, double, double *, double *),double *ynew // novo valor da função

) {// --------------------------------------------------------------// variáveis// --------------------------------------------------------------long

i; // contadordouble

h2 = h/2.0, // h/2h3 = h/3.0, // h/3h6 = h/6.0 ; // h/6

double

*k1, // array

*k2, // array

*k3, // array

*k4, // array

*yaux ; // array auxiliar// -------------------------------------------------------------// aloca memória// -------------------------------------------------------------

k1 = (double *) calloc(m,sizeof(double));k2 = (double *) calloc(m,sizeof(double));k3 = (double *) calloc(m,sizeof(double));k4 = (double *) calloc(m,sizeof(double));yaux = (double *) calloc(m,sizeof(double));

// --------------------------------------------------------------// primeira chamada de ff// --------------------------------------------------------------

ff(m,xn,yn,k1);// -----------------------// mais uma linha de comentários// -----------------------

for ( i = 0 ; i < m ; i++ ) {yaux[i] = yn[i] + k1[i]*h2 ;

}// --------------------------------------------------------------// segunda chamada de ff// --------------------------------------------------------------

ff(m,xn+h2,yaux,k2);for ( i = 0 ; i < m ; i++ ) {

yaux[i] = yn[i] + k2[i]*h2 ;

2

Page 3: Soluções numéricas da equação de Blasius · (Liggett, 1994, p. 196) Sugere a seguinte alternativa para definir condições de contorno em h =0, ... Liggett, J. A. (1994). Fluid

}// --------------------------------------------------------------// terceira chamada de ff// --------------------------------------------------------------

ff(m,xn+h2,yaux,k3) ;for ( i = 0 ; i < m ; i++ ) {

yaux[i] = yn[i] + k3[i]*h ;}

// --------------------------------------------------------------// quarta e última chamda de ff// --------------------------------------------------------------

ff(m,xn+h,yaux,k4);// --------------------------------------------------------------// finalmente, avalia a função// --------------------------------------------------------------

for ( i = 0 ; i < m ; i++ ) {ynew[i] = yn[i] + k1[i]*h6 + k2[i]*h3 + k3[i]*h3 + k4[i]*h6 ;

}// --------------------------------------------------------------// desaloca memória// --------------------------------------------------------------

free(k1) ;free(k2) ;free(k3) ;free(k4) ;free(yaux) ;

// -------------------------------------------------------------// retorna// -------------------------------------------------------------

return ;}// -------------------------------------------------------------// aqui eu declaro o sistema de equações diferenciais na forma de uma function// -------------------------------------------------------------void blasius(long m, // o número de equações: deve ser sempre igual a 3!double t, // o instante de tempodouble *omega, // o vetor de velocidades angularesdouble *domdt // as derivadas) {// -------------------------------------------------------------// calcula as derivadas// -------------------------------------------------------------

domdt[0] = omega[1] ;domdt[1] = omega[2] ;domdt[2] = -omega[0]*omega[2]/2.0 ;return ;

}// -------------------------------------------------------------// outros parâmetros da simulação// -------------------------------------------------------------#define deltat 0.1 // intervalo de tempo da simulação#define tmax 20.0 // tempo de simulação// -------------------------------------------------------------// pointers to pointers ...// -------------------------------------------------------------typedef double *vetor ;// -------------------------------------------------------------// aqui começa o programa principal// -------------------------------------------------------------int main(int argc, char* argv[]) {long

old, // índice do vetor de incógnitasnew, // idemit, // índice do tempont = tmax/deltat ; // número de intervalos de tempo de simulação

doublet ; // um instante de tempo qualquer

3

Page 4: Soluções numéricas da equação de Blasius · (Liggett, 1994, p. 196) Sugere a seguinte alternativa para definir condições de contorno em h =0, ... Liggett, J. A. (1994). Fluid

vetoromega[2] ;

// --------------------------------------------------------------// o único argumento de blasius é o valor inicial// --------------------------------------------------------------

assert (argc == 2) ;double gamma ;sscanf(argv[1],"%lf",&gamma) ;

// --------------------------------------------------------------// aloca memória para omega ;// --------------------------------------------------------------

omega[0] = (double *) calloc(3,sizeof(double));omega[1] = (double *) calloc(3,sizeof(double));

// --------------------------------------------------------------// inicializa omega// --------------------------------------------------------------

omega[0][0] = 0.0 ;omega[0][1] = 0.0 ;omega[0][2] = gamma ;

// --------------------------------------------------------------// imprime um cabeçalho// --------------------------------------------------------------

printf("#123456789012345678901234567890123456789012345678901234567890123456789\n");printf("# tempo f f\’ f\’\’ \n");printf("%15.8lf %12.6le %12.6le %12.6e\n",0.0,omega[0][0],omega[0][1],omega[0][2]);

// --------------------------------------------------------------// sem mais delongas, faço um loop no tempo// --------------------------------------------------------------

old = 0 ;new = 1 ;for ( it = 0 ; it < nt ; it++ ) {

t = it*deltat ;rkvetor(3,t,deltat,omega[old],blasius,omega[new]) ;

// -------------------------------------------------------------// imprime uma linha de simulação// -------------------------------------------------------------

printf("%15.8lf %+12.6e %+12.6e %+12.6e\n",t+deltat,omega[new][0],omega[new][1],omega[new][2]);

////// olá// -------------------------------------------------------------// troca os índices de old e new// -------------------------------------------------------------

old = new ;new = ! new ;

}return(0);

// -------------------------------------------------------------// último comentário do programa !// -------------------------------------------------------------}

4

Page 5: Soluções numéricas da equação de Blasius · (Liggett, 1994, p. 196) Sugere a seguinte alternativa para definir condições de contorno em h =0, ... Liggett, J. A. (1994). Fluid

Sucessivas rodadas de blasius.c produzem a seguinte tabela:

γ f ′(∞)

0.1 0.4490.2 0.7310.3 0.9340.4 1.132

0.35 1.0350.32 0.9750.33 0.995

0.335 1.0050.334 1.0030.333 1.001

0.3325 1.00080.3322 1.0002

1.0 2.085409

Se o processo todo estiver certo, então a última saída deve ter gerado o perfil de velocidade

f ′(η) =u

U∞

(9)

O seguinte script de gnuplot deve plotar o resultado:〈blasius.plt〉≡

set terminal postscript eps enhanced "Times-Roman" 18set xlabel ’{/Symbol h}’set ylabel ’{/Times-Italic u/U_{/Symbol \245}}’set output ’blasius.eps’set gridplot ’blasius.out’ using 1:3 notitle with lines lt 1 lw 2!epstopdf blasius.eps

5

Page 6: Soluções numéricas da equação de Blasius · (Liggett, 1994, p. 196) Sugere a seguinte alternativa para definir condições de contorno em h =0, ... Liggett, J. A. (1994). Fluid

O resultado pode ser visto na figura abaixo:

0

0.2

0.4

0.6

0.8

1

1.2

0 5 10 15 20

u/U

η

1 Uma alternativa(Liggett, 1994, p. 196) Sugere a seguinte alternativa para definir condições de contorno em η = 0,e consequentemente produzir um problema de valor inicial desde o início:

f = αg, (10)ξ = βη (11)

Agora, em ξ = η = 0, a derivada segunda de f (que nós acabamos de determinar por tentativa-e-erro acima) é f ′′(0) = γ . A derivada segunda de g em relação a ξ será

d2gdξ 2 =

ddξ

dgdξ

=d

dgdη

dξ=

ddξ

dgdη

=1β

d2gdη2

=1

β 2d2gdη2

=1

αβ 2d2gdη2

=1

αβ 2d2 fdη2 . (12)

6

Page 7: Soluções numéricas da equação de Blasius · (Liggett, 1994, p. 196) Sugere a seguinte alternativa para definir condições de contorno em h =0, ... Liggett, J. A. (1994). Fluid

Então,d2gdξ 2

∣∣∣∣0=

1αβ 2

d2 fdη2

∣∣∣∣0=

γ

αβ 2 . (13)

Agora, imponha γ/(αβ 2) = 1, de tal modo que d2g(0)/dξ 2 = 1.

dgdξ

=d( f /α)d(βη)

=1

αβ

d fdη

(14)

d2gdξ 2 =

1αβ 2

d2 fdη2 (15)

d3gdξ 3 =

1αβ 3

d3 fdη3 (16)

Voltando à equação diferencial original,

2 f ′′′+ f f ′′ = 0,

2αβ3g′′′+αgαβ

2g′′ = 0 (17)

É conveniente agora fazer α = β , de modo que a equação (17) torna-se

2g′′′+gg′′ = 0. (18)

Trata-se evidentemente da mesma equação de Blasius, porém com condições iniciais diferentes. Asua solução levará à obtenção do valor de α: de (14),

limξ→∞

dgdξ

=1

α2 limη→∞

d fdη

=1

α2 . (19)

Rodando blasius de novo com f ′′(0) = 1 (na verdade, g′′(0) = 1!), g′(∞) = 2.085409 (veja a úl-tima linha da tabela, convenientemente inserida à espera deste momento); α = 0.69247544534044858,e γ = α3 = 0.33205737835621146 = f ′′(0), o que concorda com nosso resultado anterior obtidopor tentativa-e-erro.

ReferênciasLiggett, J. A. (1994). Fluid Mechanics. McGraw-Hill, New York.

7