Sunteți pe pagina 1din 19

Nome: Alex Sano

Professor: João L. F. Azevedo


1◦ Semestre/2018 Data de Entrega: 02/04/2018
1 Descrição dos métodos e esquemas de solução
O trabalho aqui apresentado tem por objetivo solucionar a equação de Laplace em duas dimensões em coorde-
nadas cartesianas, escrita como,
φxx + φyy = 0 (1)
O processo utilizado de solução desta equação diferencial é conhecido como método de relaxação, onde através
de um processo iterativo (e testes de convergência dado um determinado critério) a equação 1 é solucionada.
Além disso, para realizar o processo de relaxação a equação diferencial é escrita da forma padrão de correção,
ou forma delta,
n
N Ci,j + Lφni,j = 0 (2)
sendo Lφni,j a discretização da equação diferencial escrita da seguinte forma,

Lφni,j = Axi φi−1,j − Bxi φi,j + Cxi φi+1,j (3)

1
Ax i =
(xi − xi−1 )(∆xi )
1
C xi =
(xi+1 − xi )(∆xi ) (4)
Bxi = Axi + Cxi
xi+1 − xi+1
∆xi =
2
n
e Ci,j a correção efetuada no potencial de velocidade.
Dado as equações 1 e 2, estas são resolvidas utilizando 5 esquemas de iterações diferentes. A seguir seguem
os esquiços da solução numérica adotados no programa,
Os operadores N associados aos esquemas de solução utilizando a equação 2 empregados no programa serão
demonstrados a seguir.
1. Jacobi (ou point-Jacobi)
2 2
NP J = − 2
− (5)
∆x ∆y 2
n
Com a seguinte configuração no programa para solução da correção Ci,j do potencial de velocidades,

n Lφi,j
Ci,j =   (6)
1 1
2 ∆xi 2
+ ∆yj 2

yj+1 − yj−1
∆yj = (7)
2
2. Gauss-Seidel (ou point-Gauss-Seidel)
1 1
Ex−1 − 2 + Ey−1 − 2
 
NP GS = (8)
∆x2 ∆y 2
n
Com a seguinte configuração no programa para solução da correção Ci,j do potencial de velocidades,

1 n
n
Ci,j = Lφi,j (∆xi ∆yj )2 +Ci−1,j
n
∆yj 2
2
 1
 (9)
n 2
+Ci,j−1 ∆xi
∆xi + ∆yj 2
2

3. SOR (Successive Overrelaxation)


   
1 −1 2 1 −1 2
NSOR = Ex − + Ey − (10)
∆x2 r ∆y 2 r
n
Com a seguinte configuração no programa para solução da correção Ci,j do potencial de velocidades,
r n
n
Ci,j = Lφi,j (∆xi ∆yj )2 +Ci−1,j
n
∆yj 2
2
 1
 (11)
n
+Ci,j−1 ∆xi 2
∆xi 2 + ∆yj 2

CC-297 - Projeto No. 1


Nome: Alex Sano
Professor: João L. F. Azevedo
1◦ Semestre/2018 Data de Entrega: 02/04/2018

1
Ex−1 − 2 + δ̃yy

NP LGS = 2
(12)
∆x
n
Com a seguinte configuração no programa para solução da correção Ci,j do potencial de velocidades,
n n n
AT j Ci,j−1 + BT j Ci,j + CT j Ci,j+1 = DT j (13)

AT j = Ayj
 
2
BT j = − Byj +
∆xi 2
(14)
CT j = Cyj
n
Ci−1,j
 
n
DT j = − Lφi,j +
∆xi 2

1
Ay j =
(yj − yj−1 )(∆yj )
1
Cyj =
(yj+1 − yj )(∆yj ) (15)
Byj = Ayj + Cyj
yj+1 − yj+1
∆yj =
2

4. SLOR (Successive Line Overrelaxation)


 
1 2 1
NP SLOR = Ex−1 − + δ̃yy (16)
∆x2 r r
n
Com a seguinte configuração no programa para solução da correção Ci,j do potencial de velocidades,

AT j = Ay j
 
2
BT j = − Byj +
∆xi 2
(17)
CT j = Cyj
n
Ci−1,j
 
n
DT j = −r Lφi,j +
∆xi 2

Os esquemas de solução apresentados anteriormente foram implementados em Fortran 90 , e estes resolvidos


através de passos iterativos para obter a convergência da solução. Vale ressaltar, que foram calculados alguns
casos de resíduos como: 1e − 5, 1e − 6 e 1e − 12, em conjunto com as pressões obtidas no campo de solução
sobre o perfil. Os resultados obtidos serão demonstrados no Capítulo 2, além disso, o programa implementado
segue no Apêndice A.

CC-297 - Projeto No. 1


Nome: Alex Sano
Professor: João L. F. Azevedo
1◦ Semestre/2018 Data de Entrega: 02/04/2018

2 Resultados
1. Problema: t = 0.05 e U∞ = 1.00
(a) Resíduo: log10 |Lφni,j |max = 1e − 5
Para a resolução do problema seguem os gráficos a seguir.

101 −0.15
NPJ Caso de Referência
NPGS NPJ
NSOR NPGS
NLGS NSOR
100 NSLOR NLGS
−0.10
NSLOR

10−1
−0.05
log10 |L Φi,jn|max

−2
10

−Cp
+0.00

10−3

+0.05
10−4

+0.10
10−5

10−6 +0.15
0 500 1000 1500 2000 2500 3000 3500 4000 0 0.2 0.4 0.6 0.8 1
Iteração x/c

(a) Resíduos (b) Distribuição de pressão

Figura 1: Resultados para t = 0.05 e U∞ = 1.00; rSOR = 1.98; rSLOR = 1.95

Iso−potenciais − Resíduo = 1e−5


3
2 phi5

2
1.5

1
y

0.5
−1

0 −2
−2 −1 0 1 2 3
x

Figura 2: Iso-potenciais para t = 0.05 e U∞ = 1.00. Método de resolução SLOR

CC-297 - Projeto No. 1


Nome: Alex Sano
Professor: João L. F. Azevedo
1◦ Semestre/2018 Data de Entrega: 02/04/2018

(b) Resíduo: log10 |Lφni,j |max = 1e − 6


Para a resolução do problema seguem os gráficos a seguir.

102 −0.15
NPJ Caso de Referência
NPGS NPJ
NSOR NPGS
101 NLGS NSOR
NSLOR −0.10 NLGS
NSLOR
100

10−1 −0.05
log10 |L Φi,jn|max

10−2

−Cp
+0.00
10−3

10−4 +0.05

10−5
+0.10
−6
10

10−7 +0.15
0 1000 2000 3000 4000 5000 6000 7000 8000 9000 10000 0 0.2 0.4 0.6 0.8 1
Iteração x/c

(a) Resíduos (b) Distribuição de pressão

Figura 3: Resultados para t = 0.05 e U∞ = 1.00; rSOR = 1.98; rSLOR = 1.95

Iso−potenciais − Resíduo = 1e−6


3
2 phi5

2
1.5

1
y

0.5
−1

0 −2
−2 −1 0 1 2 3
x

Figura 4: Iso-potenciais para t = 0.05 e U∞ = 1.00. Método de resolução SLOR

CC-297 - Projeto No. 1


Nome: Alex Sano
Professor: João L. F. Azevedo
1◦ Semestre/2018 Data de Entrega: 02/04/2018

(c) Resíduo: log10 |Lφni,j |max = 1e − 12


Para a resolução do problema seguem os gráficos a seguir.

102 −0.15
NPJ Caso de Referência
NPGS NPJ
NSOR NPGS
100 NLGS NSOR
NSLOR −0.10 NLGS
NSLOR

10−2

−0.05
10−4
log10 |L Φi,jn|max

−Cp
10−6 +0.00

10−8
+0.05

−10
10

+0.10
10−12

10−14 +0.15
0 1000 2000 3000 4000 5000 6000 7000 8000 9000 10000 0 0.2 0.4 0.6 0.8 1
Iteração x/c

(a) Resíduos (b) Distribuição de pressão

Figura 5: Resultados para t = 0.05 e U∞ = 1.00; rSOR = 1.98; rSLOR = 1.95

Iso−potenciais − Resíduo = 1e−12


3
2 phi5

2
1.5

1
y

0.5
−1

0 −2
−2 −1 0 1 2 3
x

Figura 6: Iso-potenciais para t = 0.05 e U∞ = 1.00. Método de resolução SLOR

CC-297 - Projeto No. 1


Nome: Alex Sano
Professor: João L. F. Azevedo
1◦ Semestre/2018 Data de Entrega: 02/04/2018

2. Problema: t = 0.10 e U∞ = 1.00


(a) Resíduo: log10 |Lφni,j |max = 1e − 5
Para a resolução do problema seguem os gráficos a seguir.

102 −0.30
NPJ Caso de Referência
NPGS NPJ
NSOR NPGS
101 NLGS NSOR
NSLOR −0.20 NLGS
NSLOR

100

−0.10
10−1
log10 |L Φi,jn|max

−Cp
10−2 +0.00

10−3
+0.10

−4
10

+0.20
10−5

10−6 +0.30
0 1000 2000 3000 4000 5000 6000 7000 8000 9000 10000 0 0.2 0.4 0.6 0.8 1
Iteração x/c

(a) Resíduos (b) Distribuição de pressão

Figura 7: Resultados para t = 0.05 e U∞ = 1.00; rSOR = 1.98; rSLOR = 1.95

Iso−potenciais − Resíduo = 1e−5


3
2 phi5

2
1.5

1
y

0.5
−1

0 −2
−2 −1 0 1 2 3
x

Figura 8: Iso-potenciais para t = 0.05 e U∞ = 1.00. Método de resolução SLOR

CC-297 - Projeto No. 1


Nome: Alex Sano
Professor: João L. F. Azevedo
1◦ Semestre/2018 Data de Entrega: 02/04/2018

(b) Resíduo: log10 |Lφni,j |max = 1e − 6


Para a resolução do problema seguem os gráficos a seguir.

102 −0.30
NPJ Caso de Referência
NPGS NPJ
NSOR NPGS
101 NLGS NSOR
NSLOR −0.20 NLGS
NSLOR
100

10−1 −0.10
log10 |L Φi,jn|max

10−2

−Cp
+0.00
10−3

10−4 +0.10

10−5
+0.20
−6
10

10−7 +0.30
0 1000 2000 3000 4000 5000 6000 7000 8000 9000 10000 0 0.2 0.4 0.6 0.8 1
Iteração x/c

(a) Resíduos (b) Distribuição de pressão

Figura 9: Resultados para t = 0.05 e U∞ = 1.00; rSOR = 1.98; rSLOR = 1.95

Iso−potenciais − Resíduo = 1e−6


3
2 phi5

2
1.5

1
y

0.5
−1

0 −2
−2 −1 0 1 2 3
x

Figura 10: Iso-potenciais para t = 0.05 e U∞ = 1.00. Método de resolução SLOR

CC-297 - Projeto No. 1


Nome: Alex Sano
Professor: João L. F. Azevedo
1◦ Semestre/2018 Data de Entrega: 02/04/2018

(c) Resíduo: log10 |Lφni,j |max = 1e − 12


Para a resolução do problema seguem os gráficos a seguir.

102 −0.30
NPJ Caso de Referência
NPGS NPJ
NSOR NPGS
100 NLGS NSOR
NSLOR −0.20 NLGS
NSLOR

10−2

−0.10
10−4
log10 |L Φi,jn|max

−Cp
10−6 +0.00

10−8
+0.10

−10
10

+0.20
10−12

10−14 +0.30
0 1000 2000 3000 4000 5000 6000 7000 8000 9000 10000 0 0.2 0.4 0.6 0.8 1
Iteração x/c

(a) Resíduos (b) Distribuição de pressão

Figura 11: Resultados para t = 0.05 e U∞ = 1.00; rSOR = 1.98; rSLOR = 1.95

Iso−potenciais − Resíduo = 1e−12


3
2 phi5

2
1.5

1
y

0.5
−1

0 −2
−2 −1 0 1 2 3
x

Figura 12: Iso-potenciais para t = 0.05 e U∞ = 1.00. Método de resolução SLOR

CC-297 - Projeto No. 1


Nome: Alex Sano
Professor: João L. F. Azevedo
1◦ Semestre/2018 Data de Entrega: 02/04/2018

3 Discussão dos Resultados


Este projeto teve por finalidade resolver a equação potencial bidimensional de Laplace através de métodos de
relaxação. Estes por sua vez, são resolvidos através de processos iterativos programados em linguagem Fortran
90 . A seguir serão listados alguns aspectos sobre a resolução do problema, dificuldades e observações.

1. Foi observado que para a resolução do problema a escrita e forma de implementar a equação da solução,
implicam diretamente no número de iterações para resolver o problema, por exemplo, os métodos SOR,
LGS e SLOR mudavam no número de iterações quando escritos de formas diferentes;
2. A ordem e estruturação dentro do laço do processo iterativo implica diretamente no resultado e consequen-
temente o resíduo, por exemplo, as condições de contorno quando estruturadas em determinadas posições
do programa podem fazer com que a resolução não tenha convergência;
3. No programa do Apêndice A para o projeto 1, as imposições das condições de contorno implícitas para
n
Ci,j não mudaram o número de iterações para cálculo do resíduo. Isso se deve pelo fato de inicialmente
n
tais condições já estarem impostas inicializando a matriz Ci,j como zero nos limites de U∞ , e como o
cálculo só foi realizado para pontos interiores a priori para i = 1, i = IM AX e j = JM AX a matriz já
estava inicializada como zeros;
n n
4. No método SOR, a implementação da condição de contorno Ci,1 = Ci,2 diverge o valor do resíduo. Não
está claro, se é um problema de implementação do programa, ou sequencia de solução numérica;
5. Em geral o método Point-Jacobi apresenta a convergência mais lenta em relação aos outros métodos, além
disso, apresenta problemas de divergência dos resultados quando o resíduo está entre 1e − 5 e 1e − 6. Isso
se deve ao fato do método não utilizar as informações ou características anteriores ao passo ou posição i
e/ou j de cálculo;
6. Os métodos que apresentam o menor número de iterações até 1e − 11 são os métodos SOR e SLOR, no
entanto ao se aproximarem a 1e − 12 o resíduo tende (na média) a se manter constante. Lembrando
que essa condição, depende do fator r de relaxação, pois alterando-o a convergência pode acelerar ou
desacelerar em relação ao número de iterações;
7. Os métodos Gauss-Seidel e Line-Gauss-Seidel, apesar de apresentarem uma convergência mais lenta em
relação aos métodos SOR e SLOR, o resíduo continua decrescendo em função das iterações. Isso se deve
ao fato de assumir r = 1, tais métodos convergirem lentamente ao valor de resíduo requerido;

8. Os resultados de Cp para U∞ = 1.0 e t = 0.10 apesar de convergidos para determinados métodos, não
coincidiram com os resultados de referência, e até então não está claro a resposta para tal diferença;

CC-297 - Projeto No. 1


Nome: Alex Sano
Professor: João L. F. Azevedo
1◦ Semestre/2018 Data de Entrega: 02/04/2018

A Programa do Projeto 1 implementado em Fortran 90


!==========================================================================
! VARIÁVEIS GLOBAIS UTILIZADAS NA MALHA
!==========================================================================
module var_mesh
i m p l i c i t none
! ILE = INDICE I CORRESPONDENTE AO BORDO DE ATAQUE DO PERFIL
! ITE = INDICE I CORRESPONDENTE AO BORDO DE FUGA DO PERFIL
!IMAX = NÚMERO DE PONTOS NA DIREÇÃO X
!JMAX = NÚMERO DE PONTOS NA DIREÇÃO Y
! XSF = FATOR DE ESTIRAMENTO ("STRETCHING") DA MALHA PARA A DIREÇÃO X
! YSF = FATOR DE ESTIRAMENTO ("STRETCHING") DA MALHA PARA A DIREÇÃO Y
Integer , parameter : : dp = 8
Integer : : I , J , ILE , ITE , IMAX, JMAX
r e a l ( kInd = dp ) : : XSF, YSF, DX, EPS
r e a l ( kInd = dp ) , dImensIon ( : ) , a l l o c a t a b l e : : X, Y
r e a l ( kInd = dp ) , dImensIon ( : ) , a l l o c a t a b l e : : AX, BX, CX, AY, BY, CY
r e a l ( kInd = dp ) , dImensIon ( : ) , a l l o c a t a b l e : : DTX, DTY
end module var_mesh

!==========================================================================
! VARIÁVEIS GLOBAIS UTILIZADAS PARA SOLUÇÃO
!==========================================================================
module v a r _ s o l v e
use var_mesh
i m p l i c i t none
Integer : : SOL, IMAXL,JMAXL, CEPS
r e a l ( kInd = dp ) : : RLX
r e a l ( kInd = dp ) , dImension ( : , : ) , a l l o c a t a b l e : : PHI , C, LPHI
r e a l ( kind = dp ) , dimension ( : , : , : ) , a l l o c a t a b l e : : PHIN
r e a l ( kind = dp ) , dimension ( : ) , a l l o c a t a b l e : : PHIY
r e a l ( kInd = dp ) : : T, UINF
end module v a r _ s o l v e

!==========================================================================
!PROJETO 1 − PROGRAMA PRINCIPAL − ENTREGA 02/04/2018
!==========================================================================
program projeto1_data2018_03_26
use var_mesh
use v a r _ s o l v e
i m p l i c i t none
Integer : : CNUM, IT ,ITMAX, ITVALUE
r e a l ( kInd = dp ) : : XP, UC, VC, U, UJ1 , UJ2 , CP
r e a l ( kInd = dp ) , dImensIon ( : ) , a l l o c a t a b l e : : RESI

!==========================================================================
!DADOS DE ENTRADA
!==========================================================================
ILE = 11
ITE = 31
IMAX = 41
JMAX = 12
XSF = 1 . 2 5
YSF = 1 . 2 5

!==========================================================================
!CASOS
!==========================================================================
CNUM = 1 !ESCOLHER CASO 1 OU 2

CC-297 - Projeto No. 1


Nome: Alex Sano
Professor: João L. F. Azevedo
1◦ Semestre/2018 Data de Entrega: 02/04/2018

s e l e c t case (CNUM)
CASE( 1 )
T = 0.05
UINF = 1 . 0
CASE( 2 )
T = 0.10
UINF = 1 . 0
END SELECT

!==========================================================================
!CÁLCULO DA MALHA
!==========================================================================
c a l l cal_mesh ( )

!==========================================================================
!CÁLCULO DAS CONDIÇÕES DE CONTORNO INICIAIS
!==========================================================================
c a l l cal_bc ( )

!==========================================================================
!ITERACAO E SOLUÇÃO
!==========================================================================
! 1 − JACOBI
! 2 − GAUSS−SEIDEL
! 3 − SOR
! 4 − LINE−GAUSS−SEIDEL
! 5 − SLOR
WRITE( ∗ , 9 0 2 0 )
READ( ∗ , ∗ ) SOL

! WRITE( ∗ , 9 0 3 0 )
! READ( ∗ , ∗ ) CEPS
!
! SELECT CASE(CEPS)
! CASE( 1 )
! EPS = 1E−5
! CASE( 2 )
! EPS = 1E−6
! CASE( 3 )
! EPS = 1E−7
! CASE( 4 )
! EPS = 1E−8
! CASE( 5 )
! EPS = 1E−9
! ENDSELECT

! SOL = 1
EPS = 1E−5
ITMAX = 10000
SELECT CASE(SOL)
CASE( 1 )
RLX = 1 !NAO POSSUI r
OPEN( 1 0 0 2 , FILE = ’ npj_xc_cp . dat ’ )
OPEN( 1 0 0 5 , f I l e = " res_npj . dat " )
OPEN( 1 0 0 6 , f I l e = ’ phi_npj . dat ’ )

CASE( 2 )
RLX = 1 !NAO POSSUI r
OPEN( 1 0 0 2 , FILE = ’ npgs_xc_cp . dat ’ )
OPEN( 1 0 0 5 , f I l e = " res_npgs . dat " )

CC-297 - Projeto No. 1


Nome: Alex Sano
Professor: João L. F. Azevedo
1◦ Semestre/2018 Data de Entrega: 02/04/2018

OPEN( 1 0 0 6 , f I l e = ’ phi_npgs . dat ’ )

CASE( 3 )
RLX = 1 . 9 8
OPEN( 1 0 0 2 , FILE = ’ nsor_xc_cp . dat ’ )
OPEN( 1 0 0 5 , f I l e = " r e s _ n s o r . dat " )
OPEN( 1 0 0 6 , f I l e = ’ phi_nsor . dat ’ )

CASE( 4 )
RLX = 1 !NAO POSSUI r
OPEN( 1 0 0 2 , FILE = ’ nlgs_xc_cp . dat ’ )
OPEN( 1 0 0 5 , f I l e = " r e s _ n l g s . dat " )
OPEN( 1 0 0 6 , f I l e = ’ p h i _ n l g s . dat ’ )

CASE( 5 )
RLX = 1 . 9 5
OPEN( 1 0 0 2 , FILE = ’ nslor_xc_cp . dat ’ )
OPEN( 1 0 0 5 , f I l e = " r e s _ n s l o r . dat " )
OPEN( 1 0 0 6 , f I l e = ’ p h i _ n s l o r . dat ’ )

END SELECT
IMAXL = 2
JMAXL = 2

ALLOCATE( RESI (ITMAX) )


RESI ( 1 ) = 1

DO IT = 2 ,ITMAX

DO I = 1 ,IMAX
PHIN( IT −1, I , 1 ) = PHIN( IT −1, I , 2 ) − (Y( 2 ) − Y( 1 ) ) ∗ UINF∗PHIY( I )
END DO

PHIN( IT , : , : ) = PHIN( IT − 1 , : , : )

DO J = 2 ,JMAX−1
DO I = 2 ,IMAX−1
LPHI ( I , J ) = AX( I ) ∗PHIN( IT −1, I −1,J ) − &
BX( I ) ∗PHIN( IT −1, I , J ) + &
CX( I ) ∗PHIN( IT −1, I +1,J ) + &
AY( J ) ∗PHIN( IT −1, I , J−1) − &
BY( J ) ∗PHIN( IT −1, I , J ) + &
CY( J ) ∗PHIN( IT −1, I , J+1)
ENDDO
ENDDO

DO J = 2 ,JMAX−1
DO I = 2 ,IMAX−1
IF (ABS( LPHI ( I , J ) ) .GT.ABS( LPHI (IMAXL,JMAXL) ) ) THEN
IMAXL = I
JMAXL = J
ENDIF
ENDDO
ENDDO

RESI ( IT ) = ABS( LPHI (IMAXL,JMAXL) )

IF ( IT .EQ. 2 ) THEN
WRITE( 1 0 0 5 , ∗ ) 1 , RESI ( IT )
END IF

CC-297 - Projeto No. 1


Nome: Alex Sano
Professor: João L. F. Azevedo
1◦ Semestre/2018 Data de Entrega: 02/04/2018

WRITE( 1 0 0 5 , ∗ ) IT , RESI ( IT )
IF ( RESI ( IT)<EPS) THEN
ITVALUE = IT
EXIT
ENDIF

SELECT CASE(SOL)
CASE( 1 )
CALL NPJ ( )
CASE( 2 )
CALL NPGS( )
CASE( 3 )
CALL NSOR( )
CASE( 4 )
CALL NLGS( )
CASE( 5 )
CALL NSLOR( )
END SELECT

DO J = 1 ,JMAX
DO I = 1 ,IMAX
PHIN( IT , I , J ) = PHIN( IT −1, I , J ) + C( I , J )
END DO
END DO

WRITE( ∗ , ∗ ) IT , RESI ( IT )
ENDDO

WRITE( ∗ , 9 0 0 0 )
DO I = ILE , ITE
XP = X( I )

UJ1 = (PHIN(ITVALUE, I +1 ,1) − PHIN(ITVALUE, I − 1 , 1 ) ) / (X( I +1) − X( I −1))


UJ2 = (PHIN(ITVALUE, I +1 ,2) − PHIN(ITVALUE, I − 1 , 2 ) ) / (X( I +1) − X( I −1))

UC = ( UJ1 + UJ2 ) / 2 E0
VC = UINF∗PHIY( I )
U = SQRT(UC∗∗2E0 + VC∗∗2E0 )
CP = ( 1 − (U/UINF) ∗ ∗ 2 E0 )

WRITE( ∗ , 9 0 1 0 ) I , XP, U,−CP


WRITE( 1 0 0 2 , ∗ ) XP,CP
ENDDO

OPEN( 1 0 0 3 , f I l e = ’ p h i . dat ’ )
DO I = 1 ,IMAX
WRITE( 1 0 0 3 , ∗ ) ( PHI ( I , J ) , J=1,JMAX)
END DO

! OPEN( 1 0 0 4 , f I l e = ’ l p h i . dat ’ )
! DO I = 1 ,IMAX
! WRITE( 1 0 0 4 , ∗ ) ( LPHI( I , J ) , J=1,JMAX)
! END DO

DO I = 1 ,IMAX
DO J = 1 ,JMAX
WRITE( 1 0 0 6 , ∗ )X( I ) ,Y( J ) , PHI ( I , J )
END DO
WRITE( 1 0 0 6 , ∗ ) ! Linha "Dummy" para p l o t a r no g n u p l o t
END DO

CC-297 - Projeto No. 1


Nome: Alex Sano
Professor: João L. F. Azevedo
1◦ Semestre/2018 Data de Entrega: 02/04/2018

DEALLOCATE(X,DTX)
DEALLOCATE(Y,DTY)
DEALLOCATE( PHI , LPHI , PHIN)

9000 format ( / / 4X, ’ I ’ , 9X, ’X/ c ’ , 1 2X, ’U ’ , 1 3X, ’Cp ’ )


9010 format ( 3X, I3 , 3 F15 . 5 )
9020 format ( / / 1X, ’ Esquemas ␣ de ␣ i t e r a ç ã o : ’ // &
2x , ’ 1 ␣−␣NPJ ’ / &
2x , ’ 2 ␣−␣NGS ’ / &
2x , ’ 3 ␣−␣NSOR ’ / &
2x , ’ 4 ␣−␣NLGS ’ / &
2x , ’ 5 ␣−␣NSLOR ’ / &
2x , ’ S e l e c i o n e ␣um␣ dos ␣ esquemas : ’ , $ )

9030 format ( / / 1X, ’ Res í duo : ’ // &


2x , ’ 1 ␣−␣ 1 e−5 ’ / &
2x , ’ 2 ␣−␣ 1 e−6 ’ / &
2x , ’ 3 ␣−␣ 1 e−7 ’ / &
2x , ’ 4 ␣−␣ 1 e−8 ’ / &
2x , ’ 5 ␣−␣ 1 e−9 ’ / &
2x , ’ S e l e c i o n e ␣um␣ dos ␣ c r i t é r i o s : ’ , $ )

END PROGRAM projeto1_data2018_03_26

!==========================================================================
!CALCULO DA MALHA
!==========================================================================
subroutine cal_mesh ( )
use var_mesh
i m p l i c i t none

!=========================================================================
!XGRID
!=========================================================================
a l l o c a t e (X(IMAX) )
a l l o c a t e (DTX(IMAX) )

DX = 1E0 / ( ITE − ILE )

DO I = ILE , ITE
X( I ) = ( I − ILE ) ∗DX
END DO

DO I = ITE+1,IMAX
X( I ) = X( I −1) + (X( I −1) − X( I −2))∗XSF
END DO

DO I = ILE −1 ,1 , −1
X( I ) = X( I +1) + (X( I +1) − X( I +2))∗XSF
END DO

DO I = 2 ,IMAX−1
DTX( I ) = (X( I +1) − X( I −1))/2
ENDDO

OPEN( 1 0 0 0 , FILE = ’ x g r i d . dat ’ )


DO I = 1 , IMAX
WRITE( 1 0 0 0 , ∗ ) X( I )
END DO

!=========================================================================

CC-297 - Projeto No. 1


Nome: Alex Sano
Professor: João L. F. Azevedo
1◦ Semestre/2018 Data de Entrega: 02/04/2018

!YGRID
!=========================================================================
a l l o c a t e (Y(JMAX) )
a l l o c a t e (DTY(JMAX) )
Y( 1 ) = −DX/2
Y( 2 ) = +DX/2

DO J = 3 ,JMAX
Y( J ) = Y( J−1) + (Y( J−1) − Y( J −2))∗YSF
END DO

DO J = 2 ,JMAX−1
DTY( J ) = (Y( J+1) − Y( J −1))/2
ENDDO

OPEN( 1 0 0 1 , FILE = ’ y g r i d . dat ’ )


DO J = 1 , JMAX
WRITE( 1 0 0 1 , ∗ ) Y( J )
END DO

!=========================================================================
! COEFICIENTES PARA CALCULAR LPHI
!=========================================================================
ALLOCATE(AX(IMAX) ,BX(IMAX) ,CX(IMAX) )
ALLOCATE(AY(JMAX) ,BY(JMAX) ,CY(JMAX) )

DO I = 2 ,IMAX−1
AX( I ) = 1 / ( (X( I ) − X( I −1))∗DTX( I ) )
CX( I ) = 1 / ( (X( I +1) − X( I ) ) ∗DTX( I ) )
BX( I ) = AX( I ) + CX( I )
ENDDO

DO J = 2 ,JMAX−1
AY( J ) = 1 / ( (Y( J ) − Y( J −1))∗DTY( J ) )
CY( J ) = 1 / ( (Y( J+1) − Y( J ) ) ∗DTY( J ) )
BY( J ) = AY( J ) + CY( J )
ENDDO

RETURN
end subroutIne cal_mesh

!==========================================================================
!CONDIÇÕES DE CONTORNO
!==========================================================================
subroutIne cal_bc ( )
use var_mesh
use v a r _ s o l v e

ALLOCATE( PHI (IMAX,JMAX) )


ALLOCATE(PHIN(ITMAX,IMAX,JMAX) )
ALLOCATE( LPHI (IMAX,JMAX) )
ALLOCATE(PHIY(IMAX) )
ALLOCATE(C(IMAX,JMAX) )

PHI ( : , : ) = 0
PHIY ( : ) = 0
PHIN ( 1 , : , : ) = 0
LPHI ( : , : ) = 0
C( : , : ) = 0

CC-297 - Projeto No. 1


Nome: Alex Sano
Professor: João L. F. Azevedo
1◦ Semestre/2018 Data de Entrega: 02/04/2018

DO I = 1 ,IMAX
PHI ( I , : ) = UINF∗X( I )
END DO

DO I = ILE , ITE
PHIY( I ) = 2∗T∗ ( 1 − 2∗X( I ) )
END DO

PHIN ( 1 , : , : ) = PHI ( : , : )

RETURN
end subroutIne cal_bc

!==========================================================================
! JACOBI (OU POINT−JACOBI)
!==========================================================================
subroutIne NPJ ( )
use var_mesh
use v a r _ s o l v e

DO J = 2 ,JMAX−1
DO I = 2 ,IMAX−1
C( I , J ) = LPHI ( I , J ) / ( 2 ∗ ( 1 / (DTX( I ) ∗ ∗ 2 ) + 1 / (DTY( J ) ∗ ∗ 2 ) ) )
END DO
END DO

RETURN
END SUBROUTINE NPJ

!==========================================================================
!GAUSS_SEIDEL (OU POINT−GAUSS_SEIDEL)
!==========================================================================
subroutIne NPGS( )
use var_mesh
use v a r _ s o l v e

DO J = 2 ,JMAX−1
DO I = 2 ,IMAX−1
C( I , J ) = ( LPHI ( I , J ) ∗ (DTX( I ) ∗DTY( J ) ) ∗ ∗ 2 + &
C( I −1,J ) ∗DTY( J ) ∗ ∗ 2 + &
C( I , J −1)∗DTX( I ) ∗ ∗ 2 ) ∗ &
(RLX/ 2 ) ∗ 1 / (DTX( I ) ∗ ∗ 2 + DTY( J ) ∗ ∗ 2 )
END DO
END DO

RETURN
END SUBROUTINE NPGS

!==========================================================================
!SOR (SUCCESSIVE OVERRELAXATION)
!==========================================================================
subroutIne NSOR( )
use var_mesh
use v a r _ s o l v e

DO J = 2 ,JMAX−1
DO I = 2 ,IMAX−1
C( I , J ) = ( LPHI ( I , J ) ∗ (DTX( I ) ∗DTY( J ) ) ∗ ∗ 2 + &
C( I −1,J ) ∗DTY( J ) ∗ ∗ 2 + &
C( I , J −1)∗DTX( I ) ∗ ∗ 2 ) ∗ &
(RLX/ 2 ) ∗ 1 / (DTX( I ) ∗ ∗ 2 + DTY( J ) ∗ ∗ 2 )

CC-297 - Projeto No. 1


Nome: Alex Sano
Professor: João L. F. Azevedo
1◦ Semestre/2018 Data de Entrega: 02/04/2018

END DO
END DO

DO I = 1 ,IMAX
C( I ,JMAX) = 0
!A i m p o s i ç ão d e s s a c o n d i ç ão de c o n t o r n o e x p l o d e a m a t r i z
! C( I , 1 ) = C( I , 2 )
ENDDO

DO J = 1 ,JMAX
C( 1 , J ) = 0
C(IMAX, J ) = 0
ENDDO

RETURN
END SUBROUTINE NSOR

!==========================================================================
! LINE−GAUSS−SEIDEL
!==========================================================================
subroutine NLGS( )
use var_mesh
use v a r _ s o l v e

r e a l ( kind = dp ) , dimension ( : ) , a l l o c a t a b l e : : AT, BT, CT, DT, CJP , DJP


ALLOCATE(AT(JMAX) ,BT(JMAX) ,CT(JMAX) ,DT(JMAX) , CJP(JMAX) ,DJP(JMAX) )

DO I = 2 ,IMAX−1
DO J = 2 ,JMAX−1
AT( J ) = AY( J )
BT( J ) = −(2/(DTX( I ) ∗ ∗ 2 ) + BY( J ) )
CT( J ) = CY( J )
DT( J ) = −(LPHI ( I , J ) + C( I −1,J ) / (DTX( I ) ∗ ∗ 2 ) )
ENDDO

!=========================================================================
!THOMAS
!=========================================================================
! CJP( 1 ) = CT( 1 ) /BT( 1 )
DO J = 2 ,JMAX−1
CJP( J ) = CT( J ) / (BT( J ) − AT( J ) ∗CJP( J −1))
ENDDO

! DJP( 1 ) = DT( 1 ) /BT( 1 )


DO J = 2 ,JMAX
DJP( J ) = (DT( J ) − AT( J ) ∗DJP( J −1))/ &
(BT( J ) − AT( J ) ∗CJP( J −1))
ENDDO

C( I ,JMAX−1) = DJP(JMAX)
DO J = JMAX−1 ,1 , −1
C( I , J ) = DJP( J ) − CJP( J ) ∗C( I , J+1)
ENDDO
ENDDO

DO I = 1 ,IMAX
C( I ,JMAX) = 0
C( I , 1 ) = C( I , 2 )
ENDDO

DO J = 1 ,JMAX

CC-297 - Projeto No. 1


Nome: Alex Sano
Professor: João L. F. Azevedo
1◦ Semestre/2018 Data de Entrega: 02/04/2018

C( 1 , J ) = 0
C(IMAX, J ) = 0
ENDDO

RETURN
END SUBROUTINE NLGS

!==========================================================================
!SLOR
!==========================================================================
subroutine NSLOR( )
use var_mesh
use v a r _ s o l v e

r e a l ( kind = dp ) , dimension ( : ) , a l l o c a t a b l e : : AT, BT, CT, DT, CJP , DJP


ALLOCATE(AT(JMAX) ,BT(JMAX) ,CT(JMAX) ,DT(JMAX) , CJP(JMAX) ,DJP(JMAX) )

DO I = 2 ,IMAX−1
DO J = 2 ,JMAX−1
AT( J ) = AY( J )
BT( J ) = −(2/(DTX( I ) ∗ ∗ 2 ) + BY( J ) )
CT( J ) = CY( J )
DT( J ) = −RLX∗ ( LPHI ( I , J ) + C( I −1,J ) / (DTX( I ) ∗ ∗ 2 ) )
ENDDO

!=========================================================================
!THOMAS
!=========================================================================
! CJP( 1 ) = CT( 1 ) /BT( 1 )
DO J = 2 ,JMAX−1
CJP( J ) = CT( J ) / (BT( J ) − AT( J ) ∗CJP( J −1))
ENDDO

! DJP( 1 ) = DT( 1 ) /BT( 1 )


DO J = 2 ,JMAX
DJP( J ) = (DT( J ) − AT( J ) ∗DJP( J −1))/ &
(BT( J ) − AT( J ) ∗CJP( J −1))
ENDDO

C( I ,JMAX−1) = DJP(JMAX)
DO J = JMAX−1 ,1 , −1
C( I , J ) = DJP( J ) − CJP( J ) ∗C( I , J+1)
ENDDO
ENDDO

! OPEN( 1 0 1 3 , f I l e = ’C1 . dat ’ )


! DO I = 1 ,IMAX
! WRITE( 1 0 1 3 , ∗ ) (C( I , J ) , J=1,JMAX)
! END DO

DO I = 1 ,IMAX
C( I ,JMAX) = 0
C( I , 1 ) = C( I , 2 )
ENDDO

DO J = 1 ,JMAX
C( 1 , J ) = 0
C(IMAX, J ) = 0
ENDDO

! OPEN( 1 0 1 4 , f I l e = ’C2 . dat ’ )

CC-297 - Projeto No. 1


Nome: Alex Sano
Professor: João L. F. Azevedo
1◦ Semestre/2018 Data de Entrega: 02/04/2018

! DO I = 1 ,IMAX
! WRITE( 1 0 1 4 , ∗ ) (C( I , J ) , J=1,JMAX)
! END DO

RETURN
END SUBROUTINE NSLOR

CC-297 - Projeto No. 1

S-ar putea să vă placă și