modnum aula13 29mar...modelação)numérica2017 aula13,29/mar • advecção2d • projecto)#2))...
TRANSCRIPT
Modelação Numérica 2017
Aula 13, 29/Mar
• Advecção 2D
• Projecto #2
h2p://modnum.ucs.ciencias.ulisboa.pt
!"#$%&'()*+,"- ."#$%&/!0 1"#$%&/!0 2"#$%&34!! 2"#$%&34!1 2"#$%&34!. 5"#$%&34!2 5"#$%&34!0!"#$%& !'#$%& !(#$%& !(#$%& !(#$%& !)#$%& !)#$%&*! *+ ,-./01! ,-./01! ,-./01! ,-./01! ,-./01!+!#$%& ++#$%& +2#$%& +2#$%& +2#$%& +"#$%& +"#$%&*2 *" ,-./01+ ,-./01+ ,-./01+ ,-./01+ ,-./01++3#$%& !#45/60 +#45/60 +#45/60 +#45/60 2#45/60 2#45/6075/-5&58 *'9:;/0.0<= >?!1! >?!1! >?!1! >?!1! >?!1!)#45/60 3#45/60 @#45/60 @#45/60 @#45/60 !A#45/60 !A#45/60*( *) >?!1+ >?!1+ >?!1+ >?!1+ >?!1+!"#45/60 !'#45/60 !(#45/60 !(#45/60 !(#45/60 !)#45/60 !)#45/60*3 *@ >?!12 >?!12 >?!12 >?!12 >?!12
+A#45/609:!)BAA +!#45/60 ++#45/60 +2#45/60 +2#45/60 +2#45/60 +"#45/60 +"#45/60 CD/%E%-.56F%E>-./%G5:>?! *!A *!! >?!1" >?!1" >?!1" >?!1" >?!1"
+3#45/60 +@#45/60 2A#45/60 2A#45/60 2A#45/60 2!#45/60 2!#45/60*!+ *!29:;/0.0<=: >?+1! >?+1! >?+1! >?+1! >?+1!"#CH/ '#CH/ (#CH/ (#CH/ (#CH/ )#CH/ )#CH/*!" *!' >?+1+ >?+1+ >?+1+ >?+1+ >?+1+!!#CH/ !+#CH/ !2#CH/ !2#CH/ !2#CH/ !"#CH/ !"#CH/*!( ;IE<05 ;IE<05 ;IE<05 ;IE<05 ;IE<05 ;IE<05!3#CH/ !@#CH/ +A#CH/ +A#CH/ +A#CH/ +!#CH/ +!#CH/;IE<05 JK5:7KL-<K5E >?+12 >?+12 >?+12 >?+12 >?+12
+"#CH/9:!)BAA +'#CH/ +(#CH/ +)#CH/ +)#CH/ +)#CH/ +3#CH/ +3#CH/ CD/%E%-.56F%E>-./%G5:>?+ $%/K5M0 *!3 >?+1" >?+1" >?+1" >?+1" >?+1"
+#45K 2#45K "#45K "#45K "#45K '#45K '#45K*!@ *+A9:;/0.0<= >?21! >?21! >?21! >?21! >?21!@#45K !A#45K !!#45K !!#45K !!#45K !+#45K !+#45K*+! *++ >?21+ >?21+ >?21+ >?21+ >?21+!(#45K !)#45K !3#45K !3#45K !3#45K !@#45K !@#45K*+2 *+" >?212 >?212 >?212 >?212 >?212
++#45K9:!)BAA +2#45K +"#45K +'#45K +'#45K +'#45K +(#45K +(#45K CD/%E%-.56F%E>-./%G5:>?2 *+' *+( >?21" >?21" >?21" >?21" >?21"
2A#45K*+)
Diferenças finitas
• Diferenças avançadas:
• Diferenças retardadas:
• Diferenças centradas:
f(x0 +∆x)− f(x0 −∆x) = 2
�∂f
∂x
�
x=x0
∆x+2
3!
�∂3f
∂x3
�
x=x0
∆x3 + ...
�∂f
∂x
�
x=x0
=f(x0 +∆x)− f(x0 −∆x)− 2
3!
�∂3f∂x3
�
x=x0
∆x3 + ...
2∆x
=f(x0 +∆x)− f(x0 −∆x)
2∆x−
23!
�∂3f∂x3
�
x=x0
∆x3
2∆x+ ...
=f(x0 +∆x)− f(x0 −∆x)
2∆x−
1
3!
�∂3f
∂x3
�
x=x0
∆x2 + ...
=f(x0 +∆x)− f(x0 −∆x)
2∆x+O(∆x2)
(3)
�∂f
∂x
�
x=x0
=f(x0 +∆x)− f(x0)
∆x+O(∆x)
�∂f
∂x
�
x=x0
=f(x0)− f(x0 −∆x)
∆x+O(∆x)
�∂f
∂x
�
x=x0
=f(x0 +∆x)− f(x0 −∆x)
2∆x+O(∆x2)
2
f(x0 +∆x)− f(x0 −∆x) = 2
�∂f
∂x
�
x=x0
∆x+2
3!
�∂3f
∂x3
�
x=x0
∆x3 + ...
�∂f
∂x
�
x=x0
=f(x0 +∆x)− f(x0 −∆x)− 2
3!
�∂3f∂x3
�
x=x0
∆x3 + ...
2∆x
=f(x0 +∆x)− f(x0 −∆x)
2∆x−
23!
�∂3f∂x3
�
x=x0
∆x3
2∆x+ ...
=f(x0 +∆x)− f(x0 −∆x)
2∆x−
1
3!
�∂3f
∂x3
�
x=x0
∆x2 + ...
=f(x0 +∆x)− f(x0 −∆x)
2∆x+O(∆x2)
(3)
�∂f
∂x
�
x=x0
=f(x0 +∆x)− f(x0)
∆x+O(∆x)
�∂f
∂x
�
x=x0
=f(x0)− f(x0 −∆x)
∆x+O(∆x)
�∂f
∂x
�
x=x0
=f(x0 +∆x)− f(x0 −∆x)
2∆x+O(∆x2)
2
f(x0 +∆x)− f(x0 −∆x) = 2
�∂f
∂x
�
x=x0
∆x+2
3!
�∂3f
∂x3
�
x=x0
∆x3 + ...
�∂f
∂x
�
x=x0
=f(x0 +∆x)− f(x0 −∆x)− 2
3!
�∂3f∂x3
�
x=x0
∆x3 + ...
2∆x
=f(x0 +∆x)− f(x0 −∆x)
2∆x−
23!
�∂3f∂x3
�
x=x0
∆x3
2∆x+ ...
=f(x0 +∆x)− f(x0 −∆x)
2∆x−
1
3!
�∂3f
∂x3
�
x=x0
∆x2 + ...
=f(x0 +∆x)− f(x0 −∆x)
2∆x+O(∆x2)
(3)
�∂f
∂x
�
x=x0
=f(x0 +∆x)− f(x0)
∆x+O(∆x)
�∂f
∂x
�
x=x0
=f(x0)− f(x0 −∆x)
∆x+O(∆x)
�∂f
∂x
�
x=x0
=f(x0 +∆x)− f(x0 −∆x)
2∆x+O(∆x2)
2
!"#$%&'(")*+,-./0&)12332) ) ) )
4)
)
)
)*$56$) 0&5") .$7.$5$86&,95$) &5) #/:$.$8'&5) :/8/6&5) !"!#$!%!&;) *"6&.) <+$) $56&)$=7.$55(") 0"..$57"8#$) &") #$0%/>$) #&) .$06&) 6&8?$86$) &") 7"86") '(!)@) 6&%) 0",")&0/,&)#$50./6";)))A) $50"%B&) #$) +,) #$6$.,/8&#"),-6"#") 8+,-./0") $=/?$) &%?+,&5) 0"85/#$.&'C$5)7.->/&5D))
&E F.$0/5(") ).$%&0/"8&#&)0",)")$..")#$)&7."=/,&'("))GE 256&G/%/#&#$) )")$..")-)$56H>$%I)0E J"8>$.?K80/&) )&)5"%+'(")8+,-./0&)0"8>$.?$)7&.&)&)5"%+'(")&8&%L6/0&)
<+&8#") I))1$):".,&)?$8-./0&@)7"#$,)&/8#&)#$:/8/.95$)6.K5)6/7"5)#$)#/:$.$8'&5):/8/6&5D))!"#$%#&#'))
))()*#+&#&#')
)),)$*+#&#'-
))
))-
Aula passada
A aproximação é melhor quando Δx -‐> 0
As diferenças centradas dão uma aproximação mais exacta
yn+1 = yn +∆t
6(k1 + 2k2 + 2k3 + k4)
tn+1 = tn +∆t(4)
k1 = f (tn, yn)
k2 = f
�tn +
∆t
2, yn +
∆t
2k1
�
k3 = f
�tn +
∆t
2, yn +
∆t
2k2
�
k4 = f (tn +∆t, yn +∆t k3)
(5)
∂h
∂t= −u
∂h
∂x
∂h
∂t= −ux
∂h
∂x− uy
∂h
∂y
∂h
∂t= −u
∂h
∂x− v
∂h
∂y
∂h
∂t= −u
∂h
∂x− v
∂h
∂y=⇒
∂h
∂t= −
∂uh
∂x−
∂vh
∂y
∂h
∂t= −∇(�vh), �vh é o fluxo de h
3
Advecção 2D
1D:
2D: Outra notação:
yn+1 = yn +∆t
6(k1 + 2k2 + 2k3 + k4)
tn+1 = tn +∆t(4)
k1 = f (tn, yn)
k2 = f
�tn +
∆t
2, yn +
∆t
2k1
�
k3 = f
�tn +
∆t
2, yn +
∆t
2k2
�
k4 = f (tn +∆t, yn +∆t k3)
(5)
∂h
∂t= −u
∂h
∂x
∂h
∂t= −ux
∂h
∂x− uy
∂h
∂y
∂h
∂t= −u
∂h
∂x− v
∂h
∂y
∂h
∂t= −u
∂h
∂x− v
∂h
∂y=⇒
∂h
∂t= −
∂uh
∂x−
∂vh
∂y
∂h
∂t= −∇(�vh), �vh é o fluxo de h
3
Aula passada
Advecção 2D
yn+1 = yn +∆t
6(k1 + 2k2 + 2k3 + k4)
tn+1 = tn +∆t(4)
k1 = f (tn, yn)
k2 = f
�tn +
∆t
2, yn +
∆t
2k1
�
k3 = f
�tn +
∆t
2, yn +
∆t
2k2
�
k4 = f (tn +∆t, yn +∆t k3)
(5)
∂T
∂t= −u
∂T
∂x, u = const
∂T
∂t= −ux
∂T
∂x− uy
∂T
∂y
∂T
∂t= −u
∂T
∂x− v
∂T
∂y
3
yn+1 = yn +∆t
6(k1 + 2k2 + 2k3 + k4)
tn+1 = tn +∆t(4)
k1 = f (tn, yn)
k2 = f
�tn +
∆t
2, yn +
∆t
2k1
�
k3 = f
�tn +
∆t
2, yn +
∆t
2k2
�
k4 = f (tn +∆t, yn +∆t k3)
(5)
∂h
∂t= −u
∂h
∂x
∂h
∂t= −ux
∂h
∂x− uy
∂h
∂y
∂h
∂t= −u
∂h
∂x− v
∂h
∂y
∂h
∂t= −u
∂h
∂x− v
∂h
∂y=⇒
∂h
∂t= −
∂uh
∂x−
∂vh
∂y
∂h
∂t= −∇(�vh), �vh é o fluxo de h
3
yn+1 = yn +∆t
6(k1 + 2k2 + 2k3 + k4)
tn+1 = tn +∆t(4)
k1 = f (tn, yn)
k2 = f
�tn +
∆t
2, yn +
∆t
2k1
�
k3 = f
�tn +
∆t
2, yn +
∆t
2k2
�
k4 = f (tn +∆t, yn +∆t k3)
(5)
∂h
∂t= −u
∂h
∂x
∂h
∂t= −ux
∂h
∂x− uy
∂h
∂y
∂h
∂t= −u
∂h
∂x− v
∂h
∂y
∂h
∂t= −u
∂h
∂x− v
∂h
∂y=⇒
∂h
∂t= −
∂uh
∂x−
∂vh
∂y
∂h
∂t= −∇(�uh), �vh é o fluxo de h
3
Esta forma é usável em duas condições:
• u, v = constante (advecção linear) • (fluído incompressível)
yn+1 = yn +∆t
6(k1 + 2k2 + 2k3 + k4)
tn+1 = tn +∆t(4)
k1 = f (tn, yn)
k2 = f
�tn +
∆t
2, yn +
∆t
2k1
�
k3 = f
�tn +
∆t
2, yn +
∆t
2k2
�
k4 = f (tn +∆t, yn +∆t k3)
(5)
∂h
∂t= −u
∂h
∂x
∂h
∂t= −ux
∂h
∂x− uy
∂h
∂y
∂h
∂t= −u
∂h
∂x− v
∂h
∂y
∂h
∂t= −u
∂h
∂x− v
∂h
∂y=⇒
∂h
∂t= −
∂uh
∂x−
∂vh
∂y
∂h
∂t= −∇(�uh), �vh é o fluxo de h
∂u
∂x+
∂u
∂y= 0
3
Aula passada
Advecção 2D
yn+1 = yn +∆t
6(k1 + 2k2 + 2k3 + k4)
tn+1 = tn +∆t(4)
k1 = f (tn, yn)
k2 = f
�tn +
∆t
2, yn +
∆t
2k1
�
k3 = f
�tn +
∆t
2, yn +
∆t
2k2
�
k4 = f (tn +∆t, yn +∆t k3)
(5)
∂T
∂t= −u
∂T
∂x, u = const
∂T
∂t= −ux
∂T
∂x− uy
∂T
∂y
∂T
∂t= −u
∂T
∂x− v
∂T
∂y
3
yn+1 = yn +∆t
6(k1 + 2k2 + 2k3 + k4)
tn+1 = tn +∆t(4)
k1 = f (tn, yn)
k2 = f
�tn +
∆t
2, yn +
∆t
2k1
�
k3 = f
�tn +
∆t
2, yn +
∆t
2k2
�
k4 = f (tn +∆t, yn +∆t k3)
(5)
∂h
∂t= −u
∂h
∂x
∂h
∂t= −ux
∂h
∂x− uy
∂h
∂y
∂h
∂t= −u
∂h
∂x− v
∂h
∂y
∂h
∂t= −u
∂h
∂x− v
∂h
∂y=⇒
∂h
∂t= −
∂uh
∂x−
∂vh
∂y
∂h
∂t= −∇(�vh), �vh é o fluxo de h
3
Diferença avançada no
tempo
Diferença centrada no espaço em x
Diferença centrada no espaço em y
yn+1 = yn +∆t
6(k1 + 2k2 + 2k3 + k4)
tn+1 = tn +∆t(4)
k1 = f (tn, yn)
k2 = f
�tn +
∆t
2, yn +
∆t
2k1
�
k3 = f
�tn +
∆t
2, yn +
∆t
2k2
�
k4 = f (tn +∆t, yn +∆t k3)
(5)
∂h
∂t= −u
∂h
∂x
∂h
∂t= −ux
∂h
∂x− uy
∂h
∂y
∂h
∂t= −u
∂h
∂x− v
∂h
∂y
∂h
∂t= −u
∂h
∂x− v
∂h
∂y=⇒
∂h
∂t= −
∂uh
∂x−
∂vh
∂y
∂h
∂t= −∇(�uh), �vh é o fluxo de h
∂u
∂x+
∂u
∂y= 0
hn+1k,j − hnk,j
∆t= −
unk+1,jhnk+1,j − unk−1,jh
nk−1,j
2∆x−
vnk,j+1hnk,j+1 − vnk,j−1h
nk,j−1
2∆y
hn+1k,j − hnk,j = −∆t
unk+1,jhnk+1,j − unk−1,jh
nk−1,j
2∆x−∆t
vnk,j+1hnk,j+1 − vnk,j−1h
nk,j−1
2∆y
hn+1k,j = hnk,j −∆t
unk+1,jhnk+1,j − unk−1,jh
nk−1,j
2∆x−∆t
vnk,j+1hnk,j+1 − vnk,j−1h
nk,j−1
2∆y
hn+1k,j =
1
4(hnk−1,j+hnk+1,j+hnk,j−1+hnk,j+1)−∆t
unk+1,jhnk+1,j − unk−1,jh
nk−1,j
2∆x−∆t
vnk,j+1hnk,j+1 − vnk,j−1h
nk,j−1
2∆y
3
DiscreSzação no esquema de Lax:
Aula passada
Advecção 2D
yn+1 = yn +∆t
6(k1 + 2k2 + 2k3 + k4)
tn+1 = tn +∆t(4)
k1 = f (tn, yn)
k2 = f
�tn +
∆t
2, yn +
∆t
2k1
�
k3 = f
�tn +
∆t
2, yn +
∆t
2k2
�
k4 = f (tn +∆t, yn +∆t k3)
(5)
∂T
∂t= −u
∂T
∂x, u = const
∂T
∂t= −ux
∂T
∂x− uy
∂T
∂y
∂T
∂t= −u
∂T
∂x− v
∂T
∂y
3
yn+1 = yn +∆t
6(k1 + 2k2 + 2k3 + k4)
tn+1 = tn +∆t(4)
k1 = f (tn, yn)
k2 = f
�tn +
∆t
2, yn +
∆t
2k1
�
k3 = f
�tn +
∆t
2, yn +
∆t
2k2
�
k4 = f (tn +∆t, yn +∆t k3)
(5)
∂h
∂t= −u
∂h
∂x
∂h
∂t= −ux
∂h
∂x− uy
∂h
∂y
∂h
∂t= −u
∂h
∂x− v
∂h
∂y
∂h
∂t= −u
∂h
∂x− v
∂h
∂y=⇒
∂h
∂t= −
∂uh
∂x−
∂vh
∂y
∂h
∂t= −∇(�vh), �vh é o fluxo de h
3
yn+1 = yn +∆t
6(k1 + 2k2 + 2k3 + k4)
tn+1 = tn +∆t(4)
k1 = f (tn, yn)
k2 = f
�tn +
∆t
2, yn +
∆t
2k1
�
k3 = f
�tn +
∆t
2, yn +
∆t
2k2
�
k4 = f (tn +∆t, yn +∆t k3)
(5)
∂h
∂t= −u
∂h
∂x
∂h
∂t= −ux
∂h
∂x− uy
∂h
∂y
∂h
∂t= −u
∂h
∂x− v
∂h
∂y
∂h
∂t= −u
∂h
∂x− v
∂h
∂y=⇒
∂h
∂t= −
∂uh
∂x−
∂vh
∂y
∂h
∂t= −∇(�uh), �vh é o fluxo de h
∂u
∂x+
∂u
∂y= 0
hn+1k,j − hnk,j
∆t= −
unk+1,jhnk+1,j − unk−1,jh
nk−1,j
2∆x−
vnk,j+1hnk,j+1 − vnk,j−1h
nk,j−1
2∆y
hn+1k,j − hnk,j = −∆t
unk+1,jhnk+1,j − unk−1,jh
nk−1,j
2∆x−∆t
vnk,j+1hnk,j+1 − vnk,j−1h
nk,j−1
2∆y
hn+1k,j = hnk,j −∆t
unk+1,jhnk+1,j − unk−1,jh
nk−1,j
2∆x−∆t
vnk,j+1hnk,j+1 − vnk,j−1h
nk,j−1
2∆y
hn+1k,j =
1
4(hnk−1,j+hnk+1,j+hnk,j−1+hnk,j+1)−∆t
unk+1,jhnk+1,j − unk−1,jh
nk−1,j
2∆x−∆t
vnk,j+1hnk,j+1 − vnk,j−1h
nk,j−1
2∆y
3
DiscreSzação no esquema de Lax:
t=n:
y
x
k,j k+1,j k-‐1,j
k,j+1
k,j-‐1
Δx Δy
Aula passada
Advecção 2D
yn+1 = yn +∆t
6(k1 + 2k2 + 2k3 + k4)
tn+1 = tn +∆t(4)
k1 = f (tn, yn)
k2 = f
�tn +
∆t
2, yn +
∆t
2k1
�
k3 = f
�tn +
∆t
2, yn +
∆t
2k2
�
k4 = f (tn +∆t, yn +∆t k3)
(5)
∂T
∂t= −u
∂T
∂x, u = const
∂T
∂t= −ux
∂T
∂x− uy
∂T
∂y
∂T
∂t= −u
∂T
∂x− v
∂T
∂y
3
yn+1 = yn +∆t
6(k1 + 2k2 + 2k3 + k4)
tn+1 = tn +∆t(4)
k1 = f (tn, yn)
k2 = f
�tn +
∆t
2, yn +
∆t
2k1
�
k3 = f
�tn +
∆t
2, yn +
∆t
2k2
�
k4 = f (tn +∆t, yn +∆t k3)
(5)
∂h
∂t= −u
∂h
∂x
∂h
∂t= −ux
∂h
∂x− uy
∂h
∂y
∂h
∂t= −u
∂h
∂x− v
∂h
∂y
∂h
∂t= −u
∂h
∂x− v
∂h
∂y=⇒
∂h
∂t= −
∂uh
∂x−
∂vh
∂y
∂h
∂t= −∇(�vh), �vh é o fluxo de h
3
yn+1 = yn +∆t
6(k1 + 2k2 + 2k3 + k4)
tn+1 = tn +∆t(4)
k1 = f (tn, yn)
k2 = f
�tn +
∆t
2, yn +
∆t
2k1
�
k3 = f
�tn +
∆t
2, yn +
∆t
2k2
�
k4 = f (tn +∆t, yn +∆t k3)
(5)
∂h
∂t= −u
∂h
∂x
∂h
∂t= −ux
∂h
∂x− uy
∂h
∂y
∂h
∂t= −u
∂h
∂x− v
∂h
∂y
∂h
∂t= −u
∂h
∂x− v
∂h
∂y=⇒
∂h
∂t= −
∂uh
∂x−
∂vh
∂y
∂h
∂t= −∇(�uh), �vh é o fluxo de h
∂u
∂x+
∂u
∂y= 0
hn+1k,j − hnk,j
∆t= −
unk+1,jhnk+1,j − unk−1,jh
nk−1,j
2∆x−
vnk,j+1hnk,j+1 − vnk,j−1h
nk,j−1
2∆y
hn+1k,j − hnk,j = −∆t
unk+1,jhnk+1,j − unk−1,jh
nk−1,j
2∆x−∆t
vnk,j+1hnk,j+1 − vnk,j−1h
nk,j−1
2∆y
hn+1k,j = hnk,j −∆t
unk+1,jhnk+1,j − unk−1,jh
nk−1,j
2∆x−∆t
vnk,j+1hnk,j+1 − vnk,j−1h
nk,j−1
2∆y
hn+1k,j =
1
4(hnk−1,j+hnk+1,j+hnk,j−1+hnk,j+1)−∆t
unk+1,jhnk+1,j − unk−1,jh
nk−1,j
2∆x−∆t
vnk,j+1hnk,j+1 − vnk,j−1h
nk,j−1
2∆y
3
DiscreSzação no esquema de Lax:
t=n+1:
y
x
k,j k+1,j k-‐1,j
k,j+1
k,j-‐1
Δx Δy
Aula passada
yn+1 = yn +∆t
6(k1 + 2k2 + 2k3 + k4)
tn+1 = tn +∆t(4)
k1 = f (tn, yn)
k2 = f
�tn +
∆t
2, yn +
∆t
2k1
�
k3 = f
�tn +
∆t
2, yn +
∆t
2k2
�
k4 = f (tn +∆t, yn +∆t k3)
(5)
∂h
∂t= −u
∂h
∂x
∂h
∂t= −ux
∂h
∂x− uy
∂h
∂y
∂h
∂t= −u
∂h
∂x− v
∂h
∂y
∂h
∂t= −u
∂h
∂x− v
∂h
∂y=⇒
∂h
∂t= −
∂uh
∂x−
∂vh
∂y
∂h
∂t= −∇(�uh), �vh é o fluxo de h
∂u
∂x+
∂u
∂y= 0
hn+1k,j − hnk,j
∆t= −
unk+1,jhnk+1,j − unk−1,jh
nk−1,j
2∆x−
vnk,j+1hnk,j+1 − vnk,j−1h
nk,j−1
2∆y
hn+1k,j − hnk,j = −∆t
unk+1,jhnk+1,j − unk−1,jh
nk−1,j
2∆x−∆t
vnk,j+1hnk,j+1 − vnk,j−1h
nk,j−1
2∆y
hn+1k,j = hnk,j −∆t
unk+1,jhnk+1,j − unk−1,jh
nk−1,j
2∆x−∆t
vnk,j+1hnk,j+1 − vnk,j−1h
nk,j−1
2∆y
hn+1k,j =
1
4(hnk−1,j+hnk+1,j+hnk,j−1+hnk,j+1)−∆t
unk+1,jhnk+1,j − unk−1,jh
nk−1,j
2∆x−∆t
vnk,j+1hnk,j+1 − vnk,j−1h
nk,j−1
2∆y
3
Advecção 2D
yn+1 = yn +∆t
6(k1 + 2k2 + 2k3 + k4)
tn+1 = tn +∆t(4)
k1 = f (tn, yn)
k2 = f
�tn +
∆t
2, yn +
∆t
2k1
�
k3 = f
�tn +
∆t
2, yn +
∆t
2k2
�
k4 = f (tn +∆t, yn +∆t k3)
(5)
∂T
∂t= −u
∂T
∂x, u = const
∂T
∂t= −ux
∂T
∂x− uy
∂T
∂y
∂T
∂t= −u
∂T
∂x− v
∂T
∂y
3
yn+1 = yn +∆t
6(k1 + 2k2 + 2k3 + k4)
tn+1 = tn +∆t(4)
k1 = f (tn, yn)
k2 = f
�tn +
∆t
2, yn +
∆t
2k1
�
k3 = f
�tn +
∆t
2, yn +
∆t
2k2
�
k4 = f (tn +∆t, yn +∆t k3)
(5)
∂h
∂t= −u
∂h
∂x
∂h
∂t= −ux
∂h
∂x− uy
∂h
∂y
∂h
∂t= −u
∂h
∂x− v
∂h
∂y
∂h
∂t= −u
∂h
∂x− v
∂h
∂y=⇒
∂h
∂t= −
∂uh
∂x−
∂vh
∂y
∂h
∂t= −∇(�vh), �vh é o fluxo de h
3
DiscreSzação no esquema de Lax:
Aula passada
10
Advecção 2D
yn+1 = yn +∆t
6(k1 + 2k2 + 2k3 + k4)
tn+1 = tn +∆t(4)
k1 = f (tn, yn)
k2 = f
�tn +
∆t
2, yn +
∆t
2k1
�
k3 = f
�tn +
∆t
2, yn +
∆t
2k2
�
k4 = f (tn +∆t, yn +∆t k3)
(5)
∂T
∂t= −u
∂T
∂x, u = const
∂T
∂t= −ux
∂T
∂x− uy
∂T
∂y
∂T
∂t= −u
∂T
∂x− v
∂T
∂y
3
# -*- coding: utf-8 -*-"""Created on Tue Feb 14 12:17:30 2017
@author: susana"""
import matplotlib.pyplot as pltimport numpy as npfrom mpl_toolkits.mplot3d import Axes3Dfrom matplotlib import cm
plt.rcParams['figure.figsize'] = 10, 6
#%% Parâmetros
# discretizaçãont=2000; nx=101; ny=101 # número de pontos no tempo e espaço (x e y)passo=10; # intervalo ebtre figurasdx=1000.; dy=1000.; # espaçamento dos pontos no espaço (x e y)x = np.arange(0,nx)*dx # vector de pontos no espaço (x)y = np.arange(0,ny)*dy # vector de pontos no espaço (y)
xmin=min(x); xmax=max(x) # valor mínimo e máximo do vector xymin=min(y); ymax=max(y) # valor mínimo e máximo do vector y
xx=np.zeros([nx,ny]) # matriz 2D de valores x (posição em x)yy=np.zeros([nx,ny]) # matriz 2D de valores y (posição em y)for ix in range(nx): for iy in range(ny): xx[ix,iy] = x[ix] yy[ix,iy] = y[iy]
1# estaçãoixStation = nx-2 # posição da estação, coordenada xiyStation = ny/2 # posição da estação, coordenada yhStation = np.zeros(nt) # valores da variável h na estação
# velocidadesuspeed=10 # velocidade de propagação da direcção x vspeed=0 # velocidade de propagação da direcção y ws = np.sqrt(uspeed**2 + vspeed**2) # velocidade de propagação total
dt = 0.68 * dx / ws # espaçamento entre pontos no tempodt2dx = dt/(2*dx) # dt/(2 dx)dt2dy = dt/(2*dy) # dt/(2 dy)
courant = ws*dt/dx # número de courant
u = uspeed * np.ones([nx,ny]) # matriz de velocidades (x)uP = np.zeros([nx,ny]) # matriz de velocidades futuras (x)uP[:] = u[:] # inicialização da matriz de velocidades futuras (x)
v = vspeed * np.ones([nx,ny]) # matriz de velocidades (y)vP = np.zeros([nx,ny]) # matriz de velocidades futuras (y)vP[:] = v[:] # inicialização da matriz de velocidades futuras (y)
#%% Definição de h inicial (perturbação/sinal a propagar/advectar)
hJUMP=10 # amplitude inicial do sinalxJUMP=(xmax+xmin)/2. # localização inicial (em x) do sinal (= valor médio/central do vector x)LxJUMP=10.*dx # largura inicial do sinal (x)yJUMP=(ymax+ymin)/2. # localização inicial (em y) do sinal (= valor médio/central do vector y)LyJUMP=1000.*dy # largura inicial do sinal (y)
2
Aula passada
# estaçãoixStation = nx-2 # posição da estação, coordenada xiyStation = ny/2 # posição da estação, coordenada yhStation = np.zeros(nt) # valores da variável h na estação
# velocidadesuspeed=10 # velocidade de propagação da direcção x vspeed=0 # velocidade de propagação da direcção y ws = np.sqrt(uspeed**2 + vspeed**2) # velocidade de propagação total
dt = 0.68 * dx / ws # espaçamento entre pontos no tempodt2dx = dt/(2*dx) # dt/(2 dx)dt2dy = dt/(2*dy) # dt/(2 dy)
courant = ws*dt/dx # número de courant
u = uspeed * np.ones([nx,ny]) # matriz de velocidades (x)uP = np.zeros([nx,ny]) # matriz de velocidades futuras (x)uP[:] = u[:] # inicialização da matriz de velocidades futuras (x)
v = vspeed * np.ones([nx,ny]) # matriz de velocidades (y)vP = np.zeros([nx,ny]) # matriz de velocidades futuras (y)vP[:] = v[:] # inicialização da matriz de velocidades futuras (y)
#%% Definição de h inicial (perturbação/sinal a propagar/advectar)
hJUMP=10 # amplitude inicial do sinalxJUMP=(xmax+xmin)/2. # localização inicial (em x) do sinal (= valor médio/central do vector x)LxJUMP=10.*dx # largura inicial do sinal (x)yJUMP=(ymax+ymin)/2. # localização inicial (em y) do sinal (= valor médio/central do vector y)LyJUMP=1000.*dy # largura inicial do sinal (y)
2
# -*- coding: utf-8 -*-"""Created on Tue Feb 14 12:17:30 2017
@author: susana"""
import matplotlib.pyplot as pltimport numpy as npfrom mpl_toolkits.mplot3d import Axes3Dfrom matplotlib import cm
plt.rcParams['figure.figsize'] = 10, 6
#%% Parâmetros
# discretizaçãont=2000; nx=101; ny=101 # número de pontos no tempo e espaço (x e y)passo=10; # intervalo ebtre figurasdx=1000.; dy=1000.; # espaçamento dos pontos no espaço (x e y)x = np.arange(0,nx)*dx # vector de pontos no espaço (x)y = np.arange(0,ny)*dy # vector de pontos no espaço (y)
xmin=min(x); xmax=max(x) # valor mínimo e máximo do vector xymin=min(y); ymax=max(y) # valor mínimo e máximo do vector y
xx=np.zeros([nx,ny]) # matriz 2D de valores x (posição em x)yy=np.zeros([nx,ny]) # matriz 2D de valores y (posição em y)for ix in range(nx): for iy in range(ny): xx[ix,iy] = x[ix] yy[ix,iy] = y[iy]
1
11
Advecção 2D
yn+1 = yn +∆t
6(k1 + 2k2 + 2k3 + k4)
tn+1 = tn +∆t(4)
k1 = f (tn, yn)
k2 = f
�tn +
∆t
2, yn +
∆t
2k1
�
k3 = f
�tn +
∆t
2, yn +
∆t
2k2
�
k4 = f (tn +∆t, yn +∆t k3)
(5)
∂T
∂t= −u
∂T
∂x, u = const
∂T
∂t= −ux
∂T
∂x− uy
∂T
∂y
∂T
∂t= −u
∂T
∂x− v
∂T
∂y
3
Estação
Sinal na estação
Aula passada
yn+1 = yn +∆t
6(k1 + 2k2 + 2k3 + k4)
tn+1 = tn +∆t(4)
k1 = f (tn, yn)
k2 = f
�tn +
∆t
2, yn +
∆t
2k1
�
k3 = f
�tn +
∆t
2, yn +
∆t
2k2
�
k4 = f (tn +∆t, yn +∆t k3)
(5)
∂h
∂t= −u
∂h
∂x
∂h
∂t= −ux
∂h
∂x− uy
∂h
∂y
∂h
∂t= −u
∂h
∂x− v
∂h
∂y
∂h
∂t= −u
∂h
∂x− v
∂h
∂y=⇒
∂h
∂t= −
∂uh
∂x−
∂vh
∂y
∂h
∂t= −∇(�uh), �vh é o fluxo de h
∂u
∂x+
∂u
∂y= 0
hn+1k,j − hnk,j
∆t= −
unk+1,jhnk+1,j − unk−1,jh
nk−1,j
2∆x−
vnk,j+1hnk,j+1 − vnk,j−1h
nk,j−1
2∆y
hn+1k,j − hnk,j = −∆t
unk+1,jhnk+1,j − unk−1,jh
nk−1,j
2∆x−∆t
vnk,j+1hnk,j+1 − vnk,j−1h
nk,j−1
2∆y
hn+1k,j = hnk,j −∆t
unk+1,jhnk+1,j − unk−1,jh
nk−1,j
2∆x−∆t
vnk,j+1hnk,j+1 − vnk,j−1h
nk,j−1
2∆y
hn+1k,j =
1
4(hnk−1,j+hnk+1,j+hnk,j−1+hnk,j+1)−∆t
unk+1,jhnk+1,j − unk−1,jh
nk−1,j
2∆x−∆t
vnk,j+1hnk,j+1 − vnk,j−1h
nk,j−1
2∆y
3
Advecção 2D
yn+1 = yn +∆t
6(k1 + 2k2 + 2k3 + k4)
tn+1 = tn +∆t(4)
k1 = f (tn, yn)
k2 = f
�tn +
∆t
2, yn +
∆t
2k1
�
k3 = f
�tn +
∆t
2, yn +
∆t
2k2
�
k4 = f (tn +∆t, yn +∆t k3)
(5)
∂T
∂t= −u
∂T
∂x, u = const
∂T
∂t= −ux
∂T
∂x− uy
∂T
∂y
∂T
∂t= −u
∂T
∂x− v
∂T
∂y
3
iyStation = ny/2 # posição da estação, coordenada yhStation = np.zeros(nt) # valores da variável h na estação
# velocidadesuspeed=10 # velocidade de propagação da direcção x vspeed=0 # velocidade de propagação da direcção y ws = np.sqrt(uspeed**2 + vspeed**2) # velocidade de propagação total
dt = 0.68 * dx / ws # espaçamento entre pontos no tempodt2dx = dt/(2*dx) # dt/(2 dx)dt2dy = dt/(2*dy) # dt/(2 dy)
courant = ws*dt/dx # número de courant
u = uspeed * np.ones([nx,ny]) # matriz de velocidades (x)uP = np.zeros([nx,ny]) # matriz de velocidades futuras (x)uP[:] = u[:] # inicialização da matriz de velocidades futuras (x)
v = vspeed * np.ones([nx,ny]) # matriz de velocidades (y)vP = np.zeros([nx,ny]) # matriz de velocidades futuras (y)vP[:] = v[:] # inicialização da matriz de velocidades futuras (y)
#%% Definição de h inicial (perturbação/sinal a propagar/advectar)
hJUMP=10 # amplitude inicial do sinalxJUMP=(xmax+xmin)/2. # localização inicial (em x) do sinal (= valor médio/central do vector x)LxJUMP=10.*dx # largura inicial do sinal (x)yJUMP=(ymax+ymin)/2. # localização inicial (em y) do sinal (= valor médio/central do vector y)LyJUMP=2000.*dy # largura inicial do sinal (y)
# perturbação/sinal inicial:h = hJUMP*np.exp(-((xx-xJUMP)/LxJUMP)**2 - ((yy-yJUMP)/LyJUMP)**2)hP = np.zeros([nx,ny]) # sinal no passo temporal seguinte
2
Aula passada
hStation[0] = h[ixStation, iyStation] # localização da estação (x,y)
# plotplt.close()plt.rcParams['figure.figsize'] = 8, 6
# plt.contourf(xx,yy,h)plt.pcolor(xx,yy,h) # figura 2D do sinal inicialplt.clim(0,10) # limites da barra de corescb=plt.colorbar()cb.set_label(u'Amplitude da perturbação') # legenda da barra de cores
# marcar a estação com um ponto brancoplt.scatter(xx[ixStation, iyStation], yy[ixStation, iyStation], c='w', edgecolors='w')
plt.xlabel(u'Posição x (m)')plt.ylabel(u'Posição y (m)')plt.title(u'Perturbação t=0 s')
plt.savefig('fig/advection2d-lax-t0.png')
#%% Implementação do método LAX, propagar o sinal no tempo
for it in range(1,nt): hu = h*u hv = h*v # Avançar o sinal em todo o domínio excepto nas fronteiras for ix in range(1,nx-1): for iy in range(1,ny-1): hP[ix,iy] = (h[ix-1,iy] + h[ix+1,iy] + h[ix,iy-1] + h[ix,iy+1])/4. \ - dt2dx * (hu[ix+1,iy] - hu[ix-1,iy]) \
3
Advecção 2D
iyStation = ny/2 # posição da estação, coordenada yhStation = np.zeros(nt) # valores da variável h na estação
# velocidadesuspeed=10 # velocidade de propagação da direcção x vspeed=0 # velocidade de propagação da direcção y ws = np.sqrt(uspeed**2 + vspeed**2) # velocidade de propagação total
dt = 0.68 * dx / ws # espaçamento entre pontos no tempodt2dx = dt/(2*dx) # dt/(2 dx)dt2dy = dt/(2*dy) # dt/(2 dy)
courant = ws*dt/dx # número de courant
u = uspeed * np.ones([nx,ny]) # matriz de velocidades (x)uP = np.zeros([nx,ny]) # matriz de velocidades futuras (x)uP[:] = u[:] # inicialização da matriz de velocidades futuras (x)
v = vspeed * np.ones([nx,ny]) # matriz de velocidades (y)vP = np.zeros([nx,ny]) # matriz de velocidades futuras (y)vP[:] = v[:] # inicialização da matriz de velocidades futuras (y)
#%% Definição de h inicial (perturbação/sinal a propagar/advectar)
hJUMP=10 # amplitude inicial do sinalxJUMP=(xmax+xmin)/2. # localização inicial (em x) do sinal (= valor médio/central do vector x)LxJUMP=10.*dx # largura inicial do sinal (x)yJUMP=(ymax+ymin)/2. # localização inicial (em y) do sinal (= valor médio/central do vector y)LyJUMP=2000.*dy # largura inicial do sinal (y)
# perturbação/sinal inicial:h = hJUMP*np.exp(-((xx-xJUMP)/LxJUMP)**2 - ((yy-yJUMP)/LyJUMP)**2)hP = np.zeros([nx,ny]) # sinal no passo temporal seguinte
2
yn+1 = yn +∆t
6(k1 + 2k2 + 2k3 + k4)
tn+1 = tn +∆t(4)
k1 = f (tn, yn)
k2 = f
�tn +
∆t
2, yn +
∆t
2k1
�
k3 = f
�tn +
∆t
2, yn +
∆t
2k2
�
k4 = f (tn +∆t, yn +∆t k3)
(5)
∂h
∂t= −u
∂h
∂x
∂h
∂t= −ux
∂h
∂x− uy
∂h
∂y
∂h
∂t= −u
∂h
∂x− v
∂h
∂y
∂h
∂t= −u
∂h
∂x− v
∂h
∂y=⇒
∂h
∂t= −
∂uh
∂x−
∂vh
∂y
∂h
∂t= −∇(�uh), �vh é o fluxo de h
∂u
∂x+
∂u
∂y= 0
hn+1k,j − hnk,j
∆t= −
unk+1,jhnk+1,j − unk−1,jh
nk−1,j
2∆x−
vnk,j+1hnk,j+1 − vnk,j−1h
nk,j−1
2∆y
hn+1k,j − hnk,j = −∆t
unk+1,jhnk+1,j − unk−1,jh
nk−1,j
2∆x−∆t
vnk,j+1hnk,j+1 − vnk,j−1h
nk,j−1
2∆y
hn+1k,j = hnk,j −∆t
unk+1,jhnk+1,j − unk−1,jh
nk−1,j
2∆x−∆t
vnk,j+1hnk,j+1 − vnk,j−1h
nk,j−1
2∆y
hn+1k,j =
1
4(hnk−1,j+hnk+1,j+hnk,j−1+hnk,j+1)−∆t
unk+1,jhnk+1,j − unk−1,jh
nk−1,j
2∆x−∆t
vnk,j+1hnk,j+1 − vnk,j−1h
nk,j−1
2∆y
h = h0e−�
x−x0Lx
�2−�
y−y0Ly
�2
3
Advecção 2D
yn+1 = yn +∆t
6(k1 + 2k2 + 2k3 + k4)
tn+1 = tn +∆t(4)
k1 = f (tn, yn)
k2 = f
�tn +
∆t
2, yn +
∆t
2k1
�
k3 = f
�tn +
∆t
2, yn +
∆t
2k2
�
k4 = f (tn +∆t, yn +∆t k3)
(5)
∂h
∂t= −u
∂h
∂x
∂h
∂t= −ux
∂h
∂x− uy
∂h
∂y
∂h
∂t= −u
∂h
∂x− v
∂h
∂y
∂h
∂t= −u
∂h
∂x− v
∂h
∂y=⇒
∂h
∂t= −
∂uh
∂x−
∂vh
∂y
∂h
∂t= −∇(�uh), �vh é o fluxo de h
∂u
∂x+
∂u
∂y= 0
hn+1k,j − hnk,j
∆t= −
unk+1,jhnk+1,j − unk−1,jh
nk−1,j
2∆x−
vnk,j+1hnk,j+1 − vnk,j−1h
nk,j−1
2∆y
hn+1k,j − hnk,j = −∆t
unk+1,jhnk+1,j − unk−1,jh
nk−1,j
2∆x−∆t
vnk,j+1hnk,j+1 − vnk,j−1h
nk,j−1
2∆y
hn+1k,j = hnk,j −∆t
unk+1,jhnk+1,j − unk−1,jh
nk−1,j
2∆x−∆t
vnk,j+1hnk,j+1 − vnk,j−1h
nk,j−1
2∆y
hn+1k,j =
1
4(hnk−1,j+hnk+1,j+hnk,j−1+hnk,j+1)−∆t
unk+1,jhnk+1,j − unk−1,jh
nk−1,j
2∆x−∆t
vnk,j+1hnk,j+1 − vnk,j−1h
nk,j−1
2∆y
h = h0e−�
x−x0Lx
�2−�
y−y0Ly
�2
3
Lx=10, Ly=10 Lx=10, Ly=20
Lx=10, Ly=100 Lx=10, Ly=1000
Advecção 2D
# perturbação/sinal inicial:h = hJUMP*np.exp(-((xx-xJUMP)/LxJUMP)**2 - ((yy-yJUMP)/LyJUMP)**2)hP = np.zeros([nx,ny]) # sinal no passo temporal seguintehStation[0] = h[ixStation, iyStation] # localização da estação (x,y)
# plotplt.close()plt.rcParams['figure.figsize'] = 8, 6
# plt.contourf(xx,yy,h)plt.pcolor(xx,yy,h) # figura 2D do sinal inicialplt.clim(0,10) # limites da barra de corescb=plt.colorbar()cb.set_label(u'Amplitude da perturbação') # legenda da barra de cores
# marcar a estação com um ponto brancoplt.scatter(xx[ixStation, iyStation], yy[ixStation, iyStation], c='w', edgecolors='w')
plt.xlabel(u'Posição x (m)')plt.ylabel(u'Posição y (m)')plt.title(u'Perturbação t=0 s')
plt.savefig('fig/advection2d-lax-t0.png')
#%% plot3D
fig = plt.figure()ax = plt.axes(projection='3d')
surf=ax.plot_surface(xx,yy,h, rstride=2, cstride=10, cmap=cm.jet) # figura 2D do sinal inicialax.set_zlim(0,10)
3fig.colorbar(surf, shrink=0.5)
ax.set_xlabel(u'Posição x (m)')ax.set_ylabel(u'Posição y (m)')ax.set_zlabel(u'Amplitude')ax.set_title(u'Perturbação t=0 s')
plt.savefig('fig3d/advection2d-lax-t0.png')
#%% Implementação do método LAX, propagar o sinal no tempo
for it in range(1,nt): hu = h*u hv = h*v # Avançar o sinal em todo o domínio excepto nas fronteiras for ix in range(1,nx-1): for iy in range(1,ny-1): hP[ix,iy] = (h[ix-1,iy] + h[ix+1,iy] + h[ix,iy-1] + h[ix,iy+1])/4. \ - dt2dx * (hu[ix+1,iy] - hu[ix-1,iy]) \ - dt2dy * (hv[ix,iy+1] - hv[ix,iy-1])
# Condições fronteira cíclicas em x for iy in range(1,ny-1): ix=0 hP[ix,iy] = (h[nx-1,iy] + h[ix+1,iy] + h[ix,iy-1] + h[ix,iy+1])/4. \ - dt2dx * (hu[ix+1,iy] - hu[nx-1,iy]) \ - dt2dy * (hv[ix,iy+1] - hv[ix,iy-1]) ix=nx-1 hP[ix,iy] = (h[ix-1,iy] + h[0,iy] + h[ix,iy-1] + h[ix,iy+1])/4. \ - dt2dx * (hu[0,iy] - hu[ix-1,iy]) \
4
hStation[0] = h[ixStation, iyStation] # localização da estação (x,y)
# plotplt.close()plt.rcParams['figure.figsize'] = 8, 6
# plt.contourf(xx,yy,h)plt.pcolor(xx,yy,h) # figura 2D do sinal inicialplt.clim(0,10) # limites da barra de corescb=plt.colorbar()cb.set_label(u'Amplitude da perturbação') # legenda da barra de cores
# marcar a estação com um ponto brancoplt.scatter(xx[ixStation, iyStation], yy[ixStation, iyStation], c='w', edgecolors='w')
plt.xlabel(u'Posição x (m)')plt.ylabel(u'Posição y (m)')plt.title(u'Perturbação t=0 s')
plt.savefig('fig/advection2d-lax-t0.png')
#%% Implementação do método LAX, propagar o sinal no tempo
for it in range(1,nt): hu = h*u hv = h*v # Avançar o sinal em todo o domínio excepto nas fronteiras for ix in range(1,nx-1): for iy in range(1,ny-1): hP[ix,iy] = (h[ix-1,iy] + h[ix+1,iy] + h[ix,iy-1] + h[ix,iy+1])/4. \ - dt2dx * (hu[ix+1,iy] - hu[ix-1,iy]) \
3 - dt2dy * (hv[ix,iy+1] - hv[ix,iy-1])
# Condições fronteira cíclicas em x for iy in range(1,ny-1): ix=0 hP[ix,iy] = (h[nx-1,iy] + h[ix+1,iy] + h[ix,iy-1] + h[ix,iy+1])/4. \ - dt2dx * (hu[ix+1,iy] - hu[nx-1,iy]) \ - dt2dy * (hv[ix,iy+1] - hv[ix,iy-1]) ix=nx-1 hP[ix,iy] = (h[ix-1,iy] + h[0,iy] + h[ix,iy-1] + h[ix,iy+1])/4. \ - dt2dx * (hu[0,iy] - hu[ix-1,iy]) \ - dt2dy * (hv[ix,iy+1] - hv[ix,iy-1])
# # Condições fronteira abertas em x # hP[0,iy]=hP[1,iy] # hP[nx-1,iy]=hP[nx-2,iy]
# Condições fronteira cíclicas em y for ix in range(1,nx-1): iy=0 hP[ix,iy] = (h[ix-1,iy] + h[ix+1,iy] + h[ix,ny-1] + h[ix,iy+1])/4. \ - dt2dx * (hu[ix+1,iy] - hu[ix-1,iy]) \ - dt2dy * (hv[ix,iy+1] - hv[ix,ny-1]) iy=ny-1 hP[ix,iy] = (h[ix-1,iy] + h[ix+1,iy] + h[ix,iy-1] + h[ix,0])/4. \ - dt2dx * (hu[ix+1,iy] - hu[ix-1,iy]) \ - dt2dy * (hv[ix,0] - hv[ix,iy-1])
# # Condições fronteira abertas em y # hP[ix,0]=hP[ix,1] # hP[ix,ny-1]=hP[ix,ny-2]
4
yn+1 = yn +∆t
6(k1 + 2k2 + 2k3 + k4)
tn+1 = tn +∆t(4)
k1 = f (tn, yn)
k2 = f
�tn +
∆t
2, yn +
∆t
2k1
�
k3 = f
�tn +
∆t
2, yn +
∆t
2k2
�
k4 = f (tn +∆t, yn +∆t k3)
(5)
∂h
∂t= −u
∂h
∂x
∂h
∂t= −ux
∂h
∂x− uy
∂h
∂y
∂h
∂t= −u
∂h
∂x− v
∂h
∂y
∂h
∂t= −u
∂h
∂x− v
∂h
∂y=⇒
∂h
∂t= −
∂uh
∂x−
∂vh
∂y
∂h
∂t= −∇(�uh), �vh é o fluxo de h
∂u
∂x+
∂u
∂y= 0
hn+1k,j − hnk,j
∆t= −
unk+1,jhnk+1,j − unk−1,jh
nk−1,j
2∆x−
vnk,j+1hnk,j+1 − vnk,j−1h
nk,j−1
2∆y
hn+1k,j − hnk,j = −∆t
unk+1,jhnk+1,j − unk−1,jh
nk−1,j
2∆x−∆t
vnk,j+1hnk,j+1 − vnk,j−1h
nk,j−1
2∆y
hn+1k,j = hnk,j −∆t
unk+1,jhnk+1,j − unk−1,jh
nk−1,j
2∆x−∆t
vnk,j+1hnk,j+1 − vnk,j−1h
nk,j−1
2∆y
hn+1k,j =
1
4(hnk−1,j+hnk+1,j+hnk,j−1+hnk,j+1)−∆t
unk+1,jhnk+1,j − unk−1,jh
nk−1,j
2∆x−∆t
vnk,j+1hnk,j+1 − vnk,j−1h
nk,j−1
2∆y
3
yn+1 = yn +∆t
6(k1 + 2k2 + 2k3 + k4)
tn+1 = tn +∆t(4)
k1 = f (tn, yn)
k2 = f
�tn +
∆t
2, yn +
∆t
2k1
�
k3 = f
�tn +
∆t
2, yn +
∆t
2k2
�
k4 = f (tn +∆t, yn +∆t k3)
(5)
∂h
∂t= −u
∂h
∂x
∂h
∂t= −ux
∂h
∂x− uy
∂h
∂y
∂h
∂t= −u
∂h
∂x− v
∂h
∂y
∂h
∂t= −u
∂h
∂x− v
∂h
∂y=⇒
∂h
∂t= −
∂uh
∂x−
∂vh
∂y
∂h
∂t= −∇(�vh), �vh é o fluxo de h
3
Advecção 2D
yn+1 = yn +∆t
6(k1 + 2k2 + 2k3 + k4)
tn+1 = tn +∆t(4)
k1 = f (tn, yn)
k2 = f
�tn +
∆t
2, yn +
∆t
2k1
�
k3 = f
�tn +
∆t
2, yn +
∆t
2k2
�
k4 = f (tn +∆t, yn +∆t k3)
(5)
∂T
∂t= −u
∂T
∂x, u = const
∂T
∂t= −ux
∂T
∂x− uy
∂T
∂y
∂T
∂t= −u
∂T
∂x− v
∂T
∂y
3
yn+1 = yn +∆t
6(k1 + 2k2 + 2k3 + k4)
tn+1 = tn +∆t(4)
k1 = f (tn, yn)
k2 = f
�tn +
∆t
2, yn +
∆t
2k1
�
k3 = f
�tn +
∆t
2, yn +
∆t
2k2
�
k4 = f (tn +∆t, yn +∆t k3)
(5)
∂h
∂t= −u
∂h
∂x
∂h
∂t= −ux
∂h
∂x− uy
∂h
∂y
∂h
∂t= −u
∂h
∂x− v
∂h
∂y
∂h
∂t= −u
∂h
∂x− v
∂h
∂y=⇒
∂h
∂t= −
∂uh
∂x−
∂vh
∂y
∂h
∂t= −∇(�vh), �vh é o fluxo de h
3
yn+1 = yn +∆t
6(k1 + 2k2 + 2k3 + k4)
tn+1 = tn +∆t(4)
k1 = f (tn, yn)
k2 = f
�tn +
∆t
2, yn +
∆t
2k1
�
k3 = f
�tn +
∆t
2, yn +
∆t
2k2
�
k4 = f (tn +∆t, yn +∆t k3)
(5)
∂h
∂t= −u
∂h
∂x
∂h
∂t= −ux
∂h
∂x− uy
∂h
∂y
∂h
∂t= −u
∂h
∂x− v
∂h
∂y
∂h
∂t= −u
∂h
∂x− v
∂h
∂y=⇒
∂h
∂t= −
∂uh
∂x−
∂vh
∂y
∂h
∂t= −∇(�uh), �vh é o fluxo de h
∂u
∂x+
∂u
∂y= 0
hn+1k,j − hnk,j
∆t= −
unk+1,jhnk+1,j − unk−1,jh
nk−1,j
2∆x−
vnk,j+1hnk,j+1 − vnk,j−1h
nk,j−1
2∆y
hn+1k,j − hnk,j = −∆t
unk+1,jhnk+1,j − unk−1,jh
nk−1,j
2∆x−∆t
vnk,j+1hnk,j+1 − vnk,j−1h
nk,j−1
2∆y
hn+1k,j = hnk,j −∆t
unk+1,jhnk+1,j − unk−1,jh
nk−1,j
2∆x−∆t
vnk,j+1hnk,j+1 − vnk,j−1h
nk,j−1
2∆y
hn+1k,j =
1
4(hnk−1,j+hnk+1,j+hnk,j−1+hnk,j+1)−∆t
unk+1,jhnk+1,j − unk−1,jh
nk−1,j
2∆x−∆t
vnk,j+1hnk,j+1 − vnk,j−1h
nk,j−1
2∆y
3
DiscreSzação no esquema de Lax:
t=n:
y
x
k,j k+1,j k-‐1,j
k,j+1
k,j-‐1
Δx Δy
yn+1 = yn +∆t
6(k1 + 2k2 + 2k3 + k4)
tn+1 = tn +∆t(4)
k1 = f (tn, yn)
k2 = f
�tn +
∆t
2, yn +
∆t
2k1
�
k3 = f
�tn +
∆t
2, yn +
∆t
2k2
�
k4 = f (tn +∆t, yn +∆t k3)
(5)
∂h
∂t= −u
∂h
∂x
∂h
∂t= −ux
∂h
∂x− uy
∂h
∂y
∂h
∂t= −u
∂h
∂x− v
∂h
∂y
∂h
∂t= −u
∂h
∂x− v
∂h
∂y=⇒
∂h
∂t= −
∂uh
∂x−
∂vh
∂y
∂h
∂t= −∇(�uh), �vh é o fluxo de h
∂u
∂x+
∂u
∂y= 0
hn+1k,j − hnk,j
∆t= −
unk+1,jhnk+1,j − unk−1,jh
nk−1,j
2∆x−
vnk,j+1hnk,j+1 − vnk,j−1h
nk,j−1
2∆y
hn+1k,j − hnk,j = −∆t
unk+1,jhnk+1,j − unk−1,jh
nk−1,j
2∆x−∆t
vnk,j+1hnk,j+1 − vnk,j−1h
nk,j−1
2∆y
hn+1k,j = hnk,j −∆t
unk+1,jhnk+1,j − unk−1,jh
nk−1,j
2∆x−∆t
vnk,j+1hnk,j+1 − vnk,j−1h
nk,j−1
2∆y
hn+1k,j =
1
4(hnk−1,j+hnk+1,j+hnk,j−1+hnk,j+1)−∆t
unk+1,jhnk+1,j − unk−1,jh
nk−1,j
2∆x−∆t
vnk,j+1hnk,j+1 − vnk,j−1h
nk,j−1
2∆y
3
- dt2dy * (hv[ix,iy+1] - hv[ix,iy-1])
# Condições fronteira cíclicas em x for iy in range(1,ny-1): ix=0 hP[ix,iy] = (h[nx-1,iy] + h[ix+1,iy] + h[ix,iy-1] + h[ix,iy+1])/4. \ - dt2dx * (hu[ix+1,iy] - hu[nx-1,iy]) \ - dt2dy * (hv[ix,iy+1] - hv[ix,iy-1]) ix=nx-1 hP[ix,iy] = (h[ix-1,iy] + h[0,iy] + h[ix,iy-1] + h[ix,iy+1])/4. \ - dt2dx * (hu[0,iy] - hu[ix-1,iy]) \ - dt2dy * (hv[ix,iy+1] - hv[ix,iy-1])
# # Condições fronteira abertas em x # hP[0,iy]=hP[1,iy] # hP[nx-1,iy]=hP[nx-2,iy]
# Condições fronteira cíclicas em y for ix in range(1,nx-1): iy=0 hP[ix,iy] = (h[ix-1,iy] + h[ix+1,iy] + h[ix,ny-1] + h[ix,iy+1])/4. \ - dt2dx * (hu[ix+1,iy] - hu[ix-1,iy]) \ - dt2dy * (hv[ix,iy+1] - hv[ix,ny-1]) iy=ny-1 hP[ix,iy] = (h[ix-1,iy] + h[ix+1,iy] + h[ix,iy-1] + h[ix,0])/4. \ - dt2dx * (hu[ix+1,iy] - hu[ix-1,iy]) \ - dt2dy * (hv[ix,0] - hv[ix,iy-1])
# # Condições fronteira abertas em y # hP[ix,0]=hP[ix,1] # hP[ix,ny-1]=hP[ix,ny-2]
4
yn+1 = yn +∆t
6(k1 + 2k2 + 2k3 + k4)
tn+1 = tn +∆t(4)
k1 = f (tn, yn)
k2 = f
�tn +
∆t
2, yn +
∆t
2k1
�
k3 = f
�tn +
∆t
2, yn +
∆t
2k2
�
k4 = f (tn +∆t, yn +∆t k3)
(5)
∂h
∂t= −u
∂h
∂x
∂h
∂t= −ux
∂h
∂x− uy
∂h
∂y
∂h
∂t= −u
∂h
∂x− v
∂h
∂y
∂h
∂t= −u
∂h
∂x− v
∂h
∂y=⇒
∂h
∂t= −
∂uh
∂x−
∂vh
∂y
∂h
∂t= −∇(�uh), �vh é o fluxo de h
∂u
∂x+
∂u
∂y= 0
hn+1k,j − hnk,j
∆t= −
unk+1,jhnk+1,j − unk−1,jh
nk−1,j
2∆x−
vnk,j+1hnk,j+1 − vnk,j−1h
nk,j−1
2∆y
hn+1k,j − hnk,j = −∆t
unk+1,jhnk+1,j − unk−1,jh
nk−1,j
2∆x−∆t
vnk,j+1hnk,j+1 − vnk,j−1h
nk,j−1
2∆y
hn+1k,j = hnk,j −∆t
unk+1,jhnk+1,j − unk−1,jh
nk−1,j
2∆x−∆t
vnk,j+1hnk,j+1 − vnk,j−1h
nk,j−1
2∆y
hn+1k,j =
1
4(hnk−1,j+hnk+1,j+hnk,j−1+hnk,j+1)−∆t
unk+1,jhnk+1,j − unk−1,jh
nk−1,j
2∆x−∆t
vnk,j+1hnk,j+1 − vnk,j−1h
nk,j−1
2∆y
3
# Condições fronteira nos cantos ix=0; ixm=nx-1; ixp=1 iy=0; iym=ny-1; iyp=1 hP[ix,iy] = 1./4. * (h[ixm,iy] + h[ixp,iy] + h[ix,iym] + h[ix,iyp]) \ - dt2dx * (hu[ixp,iy] - hu[ixm,iy]) \ - dt2dy * (hv[ix,iyp] - hv[ix,iym])
ix=nx-1; ixm=nx-2; ixp=0 iy=0; iym=ny-1; iyp=1 hP[ix,iy] = 1./4. * (h[ixm,iy] + h[ixp,iy] + h[ix,iym] + h[ix,iyp]) \ - dt2dx * (hu[ixp,iy] - hu[ixm,iy]) \ - dt2dy * (hv[ix,iyp] - hv[ix,iym])
ix=0; ixm=nx-1; ixp=1 iy=ny-1; iym=ny-2; iyp=0 hP[ix,iy] = 1./4. * (h[ixm,iy] + h[ixp,iy] + h[ix,iym] + h[ix,iyp]) \ - dt2dx * (hu[ixp,iy] - hu[ixm,iy]) \ - dt2dy * (hv[ix,iyp] - hv[ix,iym])
ix=nx-1; ixm=nx-2; ixp=0 iy=ny-1; iym=ny-2; iyp=0 hP[ix,iy] = 1./4. * (h[ixm,iy] + h[ixp,iy] + h[ix,iym] + h[ix,iyp]) \ - dt2dx * (hu[ixp,iy] - hu[ixm,iy]) \ - dt2dy * (hv[ix,iyp] - hv[ix,iym])
# # Condições fronteira abertas nos cantos # hP[0,0]=hP[1,1] # hP[0,ny-1]=hP[1,ny-2] # hP[nx-1,0]=hP[nx-2,1] # hP[nx-1,ny-1]=hP[nx-2,ny-2] # actualizar o sinal
5
yn+1 = yn +∆t
6(k1 + 2k2 + 2k3 + k4)
tn+1 = tn +∆t(4)
k1 = f (tn, yn)
k2 = f
�tn +
∆t
2, yn +
∆t
2k1
�
k3 = f
�tn +
∆t
2, yn +
∆t
2k2
�
k4 = f (tn +∆t, yn +∆t k3)
(5)
∂h
∂t= −u
∂h
∂x
∂h
∂t= −ux
∂h
∂x− uy
∂h
∂y
∂h
∂t= −u
∂h
∂x− v
∂h
∂y
∂h
∂t= −u
∂h
∂x− v
∂h
∂y=⇒
∂h
∂t= −
∂uh
∂x−
∂vh
∂y
∂h
∂t= −∇(�uh), �vh é o fluxo de h
∂u
∂x+
∂u
∂y= 0
hn+1k,j − hnk,j
∆t= −
unk+1,jhnk+1,j − unk−1,jh
nk−1,j
2∆x−
vnk,j+1hnk,j+1 − vnk,j−1h
nk,j−1
2∆y
hn+1k,j − hnk,j = −∆t
unk+1,jhnk+1,j − unk−1,jh
nk−1,j
2∆x−∆t
vnk,j+1hnk,j+1 − vnk,j−1h
nk,j−1
2∆y
hn+1k,j = hnk,j −∆t
unk+1,jhnk+1,j − unk−1,jh
nk−1,j
2∆x−∆t
vnk,j+1hnk,j+1 − vnk,j−1h
nk,j−1
2∆y
hn+1k,j =
1
4(hnk−1,j+hnk+1,j+hnk,j−1+hnk,j+1)−∆t
unk+1,jhnk+1,j − unk−1,jh
nk−1,j
2∆x−∆t
vnk,j+1hnk,j+1 − vnk,j−1h
nk,j−1
2∆y
3
# Condições fronteira nos cantos ix=0; ixm=nx-1; ixp=1 iy=0; iym=ny-1; iyp=1 hP[ix,iy] = 1./4. * (h[ixm,iy] + h[ixp,iy] + h[ix,iym] + h[ix,iyp]) \ - dt2dx * (hu[ixp,iy] - hu[ixm,iy]) \ - dt2dy * (hv[ix,iyp] - hv[ix,iym])
ix=nx-1; ixm=nx-2; ixp=0 iy=0; iym=ny-1; iyp=1 hP[ix,iy] = 1./4. * (h[ixm,iy] + h[ixp,iy] + h[ix,iym] + h[ix,iyp]) \ - dt2dx * (hu[ixp,iy] - hu[ixm,iy]) \ - dt2dy * (hv[ix,iyp] - hv[ix,iym])
ix=0; ixm=nx-1; ixp=1 iy=ny-1; iym=ny-2; iyp=0 hP[ix,iy] = 1./4. * (h[ixm,iy] + h[ixp,iy] + h[ix,iym] + h[ix,iyp]) \ - dt2dx * (hu[ixp,iy] - hu[ixm,iy]) \ - dt2dy * (hv[ix,iyp] - hv[ix,iym])
ix=nx-1; ixm=nx-2; ixp=0 iy=ny-1; iym=ny-2; iyp=0 hP[ix,iy] = 1./4. * (h[ixm,iy] + h[ixp,iy] + h[ix,iym] + h[ix,iyp]) \ - dt2dx * (hu[ixp,iy] - hu[ixm,iy]) \ - dt2dy * (hv[ix,iyp] - hv[ix,iym])
# # Condições fronteira abertas nos cantos # hP[0,0]=hP[1,1] # hP[0,ny-1]=hP[1,ny-2] # hP[nx-1,0]=hP[nx-2,1] # hP[nx-1,ny-1]=hP[nx-2,ny-2] # actualizar o sinal
5 h[:]=hP[:] # Fazer figuras com as soluções, de 10 em 10 passos no tempo if (it+1)%passo==0:# if it<3*passo: plt.close() plt.rcParams['figure.figsize'] = 8, 6 # plt.contourf(xx,yy,h) plt.pcolor(xx,yy,h) plt.clim(0,10) cb=plt.colorbar() cb.set_label(u'Amplitude da perturbação') plt.scatter(xx[ixStation, iyStation], yy[ixStation, iyStation], c='w', edgecolors='w') plt.xlabel(u'Posição x (m)') plt.ylabel(u'Posição y (m)') plt.title(u'Perturbação t='+ str(it*dt) +' s') plt.savefig('fig/advection2d-lax-t'+ str(it) +'.png') # guardar o sinal na estação hStation[it] = h[ixStation, iyStation]
# figura com a evolução do sinal na estação plt.close()plt.rcParams['figure.figsize'] = 8, 6plt.plot(np.arange(0,nt)*dt/60., hStation)
plt.ylabel(u'Amplitude')plt.xlabel(u'Tempo (min)')plt.title(u'Estação ix='+ str(ixStation) +', iy='+ str(iyStation) +', courant='+ str(courant))plt.savefig('advection2d-lax-station-courant'+ str(courant) +'.png')
6
yn+1 = yn +∆t
6(k1 + 2k2 + 2k3 + k4)
tn+1 = tn +∆t(4)
k1 = f (tn, yn)
k2 = f
�tn +
∆t
2, yn +
∆t
2k1
�
k3 = f
�tn +
∆t
2, yn +
∆t
2k2
�
k4 = f (tn +∆t, yn +∆t k3)
(5)
∂h
∂t= −u
∂h
∂x
∂h
∂t= −ux
∂h
∂x− uy
∂h
∂y
∂h
∂t= −u
∂h
∂x− v
∂h
∂y
∂h
∂t= −u
∂h
∂x− v
∂h
∂y=⇒
∂h
∂t= −
∂uh
∂x−
∂vh
∂y
∂h
∂t= −∇(�uh), �vh é o fluxo de h
∂u
∂x+
∂u
∂y= 0
hn+1k,j − hnk,j
∆t= −
unk+1,jhnk+1,j − unk−1,jh
nk−1,j
2∆x−
vnk,j+1hnk,j+1 − vnk,j−1h
nk,j−1
2∆y
hn+1k,j − hnk,j = −∆t
unk+1,jhnk+1,j − unk−1,jh
nk−1,j
2∆x−∆t
vnk,j+1hnk,j+1 − vnk,j−1h
nk,j−1
2∆y
hn+1k,j = hnk,j −∆t
unk+1,jhnk+1,j − unk−1,jh
nk−1,j
2∆x−∆t
vnk,j+1hnk,j+1 − vnk,j−1h
nk,j−1
2∆y
hn+1k,j =
1
4(hnk−1,j+hnk+1,j+hnk,j−1+hnk,j+1)−∆t
unk+1,jhnk+1,j − unk−1,jh
nk−1,j
2∆x−∆t
vnk,j+1hnk,j+1 − vnk,j−1h
nk,j−1
2∆y
3
Advecção 2D, Lax
yn+1 = yn +∆t
6(k1 + 2k2 + 2k3 + k4)
tn+1 = tn +∆t(4)
k1 = f (tn, yn)
k2 = f
�tn +
∆t
2, yn +
∆t
2k1
�
k3 = f
�tn +
∆t
2, yn +
∆t
2k2
�
k4 = f (tn +∆t, yn +∆t k3)
(5)
∂T
∂t= −u
∂T
∂x, u = const
∂T
∂t= −ux
∂T
∂x− uy
∂T
∂y
∂T
∂t= −u
∂T
∂x− v
∂T
∂y
3
yn+1 = yn +∆t
6(k1 + 2k2 + 2k3 + k4)
tn+1 = tn +∆t(4)
k1 = f (tn, yn)
k2 = f
�tn +
∆t
2, yn +
∆t
2k1
�
k3 = f
�tn +
∆t
2, yn +
∆t
2k2
�
k4 = f (tn +∆t, yn +∆t k3)
(5)
∂h
∂t= −u
∂h
∂x
∂h
∂t= −ux
∂h
∂x− uy
∂h
∂y
∂h
∂t= −u
∂h
∂x− v
∂h
∂y
∂h
∂t= −u
∂h
∂x− v
∂h
∂y=⇒
∂h
∂t= −
∂uh
∂x−
∂vh
∂y
∂h
∂t= −∇(�uh), �vh é o fluxo de h
∂u
∂x+
∂u
∂y= 0
hn+1k,j − hnk,j
∆t= −
unk+1,jhnk+1,j − unk−1,jh
nk−1,j
2∆x−
vnk,j+1hnk,j+1 − vnk,j−1h
nk,j−1
2∆y
hn+1k,j − hnk,j = −∆t
unk+1,jhnk+1,j − unk−1,jh
nk−1,j
2∆x−∆t
vnk,j+1hnk,j+1 − vnk,j−1h
nk,j−1
2∆y
hn+1k,j = hnk,j −∆t
unk+1,jhnk+1,j − unk−1,jh
nk−1,j
2∆x−∆t
vnk,j+1hnk,j+1 − vnk,j−1h
nk,j−1
2∆y
hn+1k,j =
1
4(hnk−1,j+hnk+1,j+hnk,j−1+hnk,j+1)−∆t
unk+1,jhnk+1,j − unk−1,jh
nk−1,j
2∆x−∆t
vnk,j+1hnk,j+1 − vnk,j−1h
nk,j−1
2∆y
3
Advecção 2D, Lax
yn+1 = yn +∆t
6(k1 + 2k2 + 2k3 + k4)
tn+1 = tn +∆t(4)
k1 = f (tn, yn)
k2 = f
�tn +
∆t
2, yn +
∆t
2k1
�
k3 = f
�tn +
∆t
2, yn +
∆t
2k2
�
k4 = f (tn +∆t, yn +∆t k3)
(5)
∂T
∂t= −u
∂T
∂x, u = const
∂T
∂t= −ux
∂T
∂x− uy
∂T
∂y
∂T
∂t= −u
∂T
∂x− v
∂T
∂y
3
yn+1 = yn +∆t
6(k1 + 2k2 + 2k3 + k4)
tn+1 = tn +∆t(4)
k1 = f (tn, yn)
k2 = f
�tn +
∆t
2, yn +
∆t
2k1
�
k3 = f
�tn +
∆t
2, yn +
∆t
2k2
�
k4 = f (tn +∆t, yn +∆t k3)
(5)
∂h
∂t= −u
∂h
∂x
∂h
∂t= −ux
∂h
∂x− uy
∂h
∂y
∂h
∂t= −u
∂h
∂x− v
∂h
∂y
∂h
∂t= −u
∂h
∂x− v
∂h
∂y=⇒
∂h
∂t= −
∂uh
∂x−
∂vh
∂y
∂h
∂t= −∇(�uh), �vh é o fluxo de h
∂u
∂x+
∂u
∂y= 0
hn+1k,j − hnk,j
∆t= −
unk+1,jhnk+1,j − unk−1,jh
nk−1,j
2∆x−
vnk,j+1hnk,j+1 − vnk,j−1h
nk,j−1
2∆y
hn+1k,j − hnk,j = −∆t
unk+1,jhnk+1,j − unk−1,jh
nk−1,j
2∆x−∆t
vnk,j+1hnk,j+1 − vnk,j−1h
nk,j−1
2∆y
hn+1k,j = hnk,j −∆t
unk+1,jhnk+1,j − unk−1,jh
nk−1,j
2∆x−∆t
vnk,j+1hnk,j+1 − vnk,j−1h
nk,j−1
2∆y
hn+1k,j =
1
4(hnk−1,j+hnk+1,j+hnk,j−1+hnk,j+1)−∆t
unk+1,jhnk+1,j − unk−1,jh
nk−1,j
2∆x−∆t
vnk,j+1hnk,j+1 − vnk,j−1h
nk,j−1
2∆y
3
Advecção 2D, Lax
yn+1 = yn +∆t
6(k1 + 2k2 + 2k3 + k4)
tn+1 = tn +∆t(4)
k1 = f (tn, yn)
k2 = f
�tn +
∆t
2, yn +
∆t
2k1
�
k3 = f
�tn +
∆t
2, yn +
∆t
2k2
�
k4 = f (tn +∆t, yn +∆t k3)
(5)
∂T
∂t= −u
∂T
∂x, u = const
∂T
∂t= −ux
∂T
∂x− uy
∂T
∂y
∂T
∂t= −u
∂T
∂x− v
∂T
∂y
3
yn+1 = yn +∆t
6(k1 + 2k2 + 2k3 + k4)
tn+1 = tn +∆t(4)
k1 = f (tn, yn)
k2 = f
�tn +
∆t
2, yn +
∆t
2k1
�
k3 = f
�tn +
∆t
2, yn +
∆t
2k2
�
k4 = f (tn +∆t, yn +∆t k3)
(5)
∂h
∂t= −u
∂h
∂x
∂h
∂t= −ux
∂h
∂x− uy
∂h
∂y
∂h
∂t= −u
∂h
∂x− v
∂h
∂y
∂h
∂t= −u
∂h
∂x− v
∂h
∂y=⇒
∂h
∂t= −
∂uh
∂x−
∂vh
∂y
∂h
∂t= −∇(�uh), �vh é o fluxo de h
∂u
∂x+
∂u
∂y= 0
hn+1k,j − hnk,j
∆t= −
unk+1,jhnk+1,j − unk−1,jh
nk−1,j
2∆x−
vnk,j+1hnk,j+1 − vnk,j−1h
nk,j−1
2∆y
hn+1k,j − hnk,j = −∆t
unk+1,jhnk+1,j − unk−1,jh
nk−1,j
2∆x−∆t
vnk,j+1hnk,j+1 − vnk,j−1h
nk,j−1
2∆y
hn+1k,j = hnk,j −∆t
unk+1,jhnk+1,j − unk−1,jh
nk−1,j
2∆x−∆t
vnk,j+1hnk,j+1 − vnk,j−1h
nk,j−1
2∆y
hn+1k,j =
1
4(hnk−1,j+hnk+1,j+hnk,j−1+hnk,j+1)−∆t
unk+1,jhnk+1,j − unk−1,jh
nk−1,j
2∆x−∆t
vnk,j+1hnk,j+1 − vnk,j−1h
nk,j−1
2∆y
3
Advecção 2D, Lax
yn+1 = yn +∆t
6(k1 + 2k2 + 2k3 + k4)
tn+1 = tn +∆t(4)
k1 = f (tn, yn)
k2 = f
�tn +
∆t
2, yn +
∆t
2k1
�
k3 = f
�tn +
∆t
2, yn +
∆t
2k2
�
k4 = f (tn +∆t, yn +∆t k3)
(5)
∂T
∂t= −u
∂T
∂x, u = const
∂T
∂t= −ux
∂T
∂x− uy
∂T
∂y
∂T
∂t= −u
∂T
∂x− v
∂T
∂y
3
Equação de advecção (linear, 1D)
• Trata-‐se de um método de 1a ordem no tempo e 2a ordem no espaço.
• A solução depende de condições fronteira espaciais. Vamos definir a solução num domínio espacial finito:
• Vamos considerar dois casos:
• Condições cíclicas (periódicas): • Condições “abertas”:
∂T
∂t= −u
∂T
∂x, u = const
∂T
∂t= K
∂2T
∂x2, K = const
∂2V
∂x2+
∂2V
∂y2= f(x, y)
∂2T
∂x2+
∂2T
∂y2= 0
∂2u
∂t2= c2
�∂2u
∂x2+
∂2u
∂y2
�
1
f(x0 +∆x)− f(x0 −∆x) = 2
�∂f
∂x
�
x=x0
∆x+2
3!
�∂3f
∂x3
�
x=x0
∆x3 + ...
�∂f
∂x
�
x=x0
=f(x0 +∆x)− f(x0 −∆x)− 2
3!
�∂3f∂x3
�
x=x0
∆x3 + ...
2∆x
=f(x0 +∆x)− f(x0 −∆x)
2∆x−
23!
�∂3f∂x3
�
x=x0
∆x3
2∆x+ ...
=f(x0 +∆x)− f(x0 −∆x)
2∆x−
1
3!
�∂3f
∂x3
�
x=x0
∆x2 + ...
=f(x0 +∆x)− f(x0 −∆x)
2∆x+O(∆x2)
(3)
�∂f
∂x
�
x=x0
=f(x0 +∆x)− f(x0)
∆x+O(∆x)
�∂f
∂x
�
x=x0
=f(x0)− f(x0 −∆x)
∆x+O(∆x)
�∂f
∂x
�
x=x0
=f(x0 +∆x)− f(x0 −∆x)
2∆x+O(∆x2)
Tn+1k − Tn
k
∆t= −u
Tnk+1 − Tn
k−1
2∆x⇒ Tn+1
k = Tnk − u∆t
Tnk+1 − Tn
k−1
2∆x
2
f(x0 +∆x)− f(x0 −∆x) = 2
�∂f
∂x
�
x=x0
∆x+2
3!
�∂3f
∂x3
�
x=x0
∆x3 + ...
�∂f
∂x
�
x=x0
=f(x0 +∆x)− f(x0 −∆x)− 2
3!
�∂3f∂x3
�
x=x0
∆x3 + ...
2∆x
=f(x0 +∆x)− f(x0 −∆x)
2∆x−
23!
�∂3f∂x3
�
x=x0
∆x3
2∆x+ ...
=f(x0 +∆x)− f(x0 −∆x)
2∆x−
1
3!
�∂3f
∂x3
�
x=x0
∆x2 + ...
=f(x0 +∆x)− f(x0 −∆x)
2∆x+O(∆x2)
(3)
�∂f
∂x
�
x=x0
=f(x0 +∆x)− f(x0)
∆x+O(∆x)
�∂f
∂x
�
x=x0
=f(x0)− f(x0 −∆x)
∆x+O(∆x)
�∂f
∂x
�
x=x0
=f(x0 +∆x)− f(x0 −∆x)
2∆x+O(∆x2)
Tn+1k − Tn
k
∆t= −u
Tnk+1 − Tn
k−1
2∆x⇒ Tn+1
k = Tnk − u∆t
Tnk+1 − Tn
k−1
2∆x
x ∈ [0, Lx] =⇒ xk = (k − 1)∆x, k = 1, ..., N
x0 = xN , xN+1 = x
∂T
∂x= 0, emx = x1, x = xN
2
f(x0 +∆x)− f(x0 −∆x) = 2
�∂f
∂x
�
x=x0
∆x+2
3!
�∂3f
∂x3
�
x=x0
∆x3 + ...
�∂f
∂x
�
x=x0
=f(x0 +∆x)− f(x0 −∆x)− 2
3!
�∂3f∂x3
�
x=x0
∆x3 + ...
2∆x
=f(x0 +∆x)− f(x0 −∆x)
2∆x−
23!
�∂3f∂x3
�
x=x0
∆x3
2∆x+ ...
=f(x0 +∆x)− f(x0 −∆x)
2∆x−
1
3!
�∂3f
∂x3
�
x=x0
∆x2 + ...
=f(x0 +∆x)− f(x0 −∆x)
2∆x+O(∆x2)
(3)
�∂f
∂x
�
x=x0
=f(x0 +∆x)− f(x0)
∆x+O(∆x)
�∂f
∂x
�
x=x0
=f(x0)− f(x0 −∆x)
∆x+O(∆x)
�∂f
∂x
�
x=x0
=f(x0 +∆x)− f(x0 −∆x)
2∆x+O(∆x2)
Tn+1k − Tn
k
∆t= −u
Tnk+1 − Tn
k−1
2∆x⇒ Tn+1
k = Tnk − u∆t
Tnk+1 − Tn
k−1
2∆x
x ∈ [0, Lx] =⇒ xk = (k − 1)∆x, k = 1, ..., N
x0 = xN , xN+1 = x1
∂T
∂x= 0, emx = x1, x = xN
2
f(x0 +∆x)− f(x0 −∆x) = 2
�∂f
∂x
�
x=x0
∆x+2
3!
�∂3f
∂x3
�
x=x0
∆x3 + ...
�∂f
∂x
�
x=x0
=f(x0 +∆x)− f(x0 −∆x)− 2
3!
�∂3f∂x3
�
x=x0
∆x3 + ...
2∆x
=f(x0 +∆x)− f(x0 −∆x)
2∆x−
23!
�∂3f∂x3
�
x=x0
∆x3
2∆x+ ...
=f(x0 +∆x)− f(x0 −∆x)
2∆x−
1
3!
�∂3f
∂x3
�
x=x0
∆x2 + ...
=f(x0 +∆x)− f(x0 −∆x)
2∆x+O(∆x2)
(3)
�∂f
∂x
�
x=x0
=f(x0 +∆x)− f(x0)
∆x+O(∆x)
�∂f
∂x
�
x=x0
=f(x0)− f(x0 −∆x)
∆x+O(∆x)
�∂f
∂x
�
x=x0
=f(x0 +∆x)− f(x0 −∆x)
2∆x+O(∆x2)
Tn+1k − Tn
k
∆t= −u
Tnk+1 − Tn
k−1
2∆x⇒ Tn+1
k = Tnk − u∆t
Tnk+1 − Tn
k−1
2∆x
x ∈ [0, Lx] =⇒ xk = (k − 1)∆x, k = 1, ..., N
x0 = xN , xN+1 = x1
∂T
∂x= 0, emx = x1, x = xN
2
yn+1 = yn +∆t
6(k1 + 2k2 + 2k3 + k4)
tn+1 = tn +∆t(4)
k1 = f (tn, yn)
k2 = f
�tn +
∆t
2, yn +
∆t
2k1
�
k3 = f
�tn +
∆t
2, yn +
∆t
2k2
�
k4 = f (tn +∆t, yn +∆t k3)
(5)
∂h
∂t= −u
∂h
∂x
∂h
∂t= −ux
∂h
∂x− uy
∂h
∂y
∂h
∂t= −u
∂h
∂x− v
∂h
∂y
∂h
∂t= −u
∂h
∂x− v
∂h
∂y=⇒
∂h
∂t= −
∂uh
∂x−
∂vh
∂y
∂h
∂t= −∇(�uh), �vh é o fluxo de h
∂u
∂x+
∂u
∂y= 0
hn+1k,j − hnk,j
∆t= −
unk+1,jhnk+1,j − unk−1,jh
nk−1,j
2∆x−
vnk,j+1hnk,j+1 − vnk,j−1h
nk,j−1
2∆y
hn+1k,j − hnk,j = −∆t
unk+1,jhnk+1,j − unk−1,jh
nk−1,j
2∆x−∆t
vnk,j+1hnk,j+1 − vnk,j−1h
nk,j−1
2∆y
hn+1k,j = hnk,j −∆t
unk+1,jhnk+1,j − unk−1,jh
nk−1,j
2∆x−∆t
vnk,j+1hnk,j+1 − vnk,j−1h
nk,j−1
2∆y
hn+1k,j =
1
4(hnk−1,j+hnk+1,j+hnk,j−1+hnk,j+1)−∆t
unk+1,jhnk+1,j − unk−1,jh
nk−1,j
2∆x−∆t
vnk,j+1hnk,j+1 − vnk,j−1h
nk,j−1
2∆y
3
- dt2dy * (hv[ix,iy+1] - hv[ix,iy-1])
# Condições fronteira cíclicas em x for iy in range(1,ny-1): ix=0 hP[ix,iy] = (h[nx-1,iy] + h[ix+1,iy] + h[ix,iy-1] + h[ix,iy+1])/4. \ - dt2dx * (hu[ix+1,iy] - hu[nx-1,iy]) \ - dt2dy * (hv[ix,iy+1] - hv[ix,iy-1]) ix=nx-1 hP[ix,iy] = (h[ix-1,iy] + h[0,iy] + h[ix,iy-1] + h[ix,iy+1])/4. \ - dt2dx * (hu[0,iy] - hu[ix-1,iy]) \ - dt2dy * (hv[ix,iy+1] - hv[ix,iy-1])
# # Condições fronteira abertas em x # hP[0,iy]=hP[1,iy] # hP[nx-1,iy]=hP[nx-2,iy]
# Condições fronteira cíclicas em y for ix in range(1,nx-1): iy=0 hP[ix,iy] = (h[ix-1,iy] + h[ix+1,iy] + h[ix,ny-1] + h[ix,iy+1])/4. \ - dt2dx * (hu[ix+1,iy] - hu[ix-1,iy]) \ - dt2dy * (hv[ix,iy+1] - hv[ix,ny-1]) iy=ny-1 hP[ix,iy] = (h[ix-1,iy] + h[ix+1,iy] + h[ix,iy-1] + h[ix,0])/4. \ - dt2dx * (hu[ix+1,iy] - hu[ix-1,iy]) \ - dt2dy * (hv[ix,0] - hv[ix,iy-1])
# # Condições fronteira abertas em y # hP[ix,0]=hP[ix,1] # hP[ix,ny-1]=hP[ix,ny-2]
4
yn+1 = yn +∆t
6(k1 + 2k2 + 2k3 + k4)
tn+1 = tn +∆t(4)
k1 = f (tn, yn)
k2 = f
�tn +
∆t
2, yn +
∆t
2k1
�
k3 = f
�tn +
∆t
2, yn +
∆t
2k2
�
k4 = f (tn +∆t, yn +∆t k3)
(5)
∂h
∂t= −u
∂h
∂x
∂h
∂t= −ux
∂h
∂x− uy
∂h
∂y
∂h
∂t= −u
∂h
∂x− v
∂h
∂y
∂h
∂t= −u
∂h
∂x− v
∂h
∂y=⇒
∂h
∂t= −
∂uh
∂x−
∂vh
∂y
∂h
∂t= −∇(�uh), �vh é o fluxo de h
∂u
∂x+
∂u
∂y= 0
hn+1k,j − hnk,j
∆t= −
unk+1,jhnk+1,j − unk−1,jh
nk−1,j
2∆x−
vnk,j+1hnk,j+1 − vnk,j−1h
nk,j−1
2∆y
hn+1k,j − hnk,j = −∆t
unk+1,jhnk+1,j − unk−1,jh
nk−1,j
2∆x−∆t
vnk,j+1hnk,j+1 − vnk,j−1h
nk,j−1
2∆y
hn+1k,j = hnk,j −∆t
unk+1,jhnk+1,j − unk−1,jh
nk−1,j
2∆x−∆t
vnk,j+1hnk,j+1 − vnk,j−1h
nk,j−1
2∆y
hn+1k,j =
1
4(hnk−1,j+hnk+1,j+hnk,j−1+hnk,j+1)−∆t
unk+1,jhnk+1,j − unk−1,jh
nk−1,j
2∆x−∆t
vnk,j+1hnk,j+1 − vnk,j−1h
nk,j−1
2∆y
3
# Condições fronteira nos cantos ix=0; ixm=nx-1; ixp=1 iy=0; iym=ny-1; iyp=1 hP[ix,iy] = 1./4. * (h[ixm,iy] + h[ixp,iy] + h[ix,iym] + h[ix,iyp]) \ - dt2dx * (hu[ixp,iy] - hu[ixm,iy]) \ - dt2dy * (hv[ix,iyp] - hv[ix,iym])
ix=nx-1; ixm=nx-2; ixp=0 iy=0; iym=ny-1; iyp=1 hP[ix,iy] = 1./4. * (h[ixm,iy] + h[ixp,iy] + h[ix,iym] + h[ix,iyp]) \ - dt2dx * (hu[ixp,iy] - hu[ixm,iy]) \ - dt2dy * (hv[ix,iyp] - hv[ix,iym])
ix=0; ixm=nx-1; ixp=1 iy=ny-1; iym=ny-2; iyp=0 hP[ix,iy] = 1./4. * (h[ixm,iy] + h[ixp,iy] + h[ix,iym] + h[ix,iyp]) \ - dt2dx * (hu[ixp,iy] - hu[ixm,iy]) \ - dt2dy * (hv[ix,iyp] - hv[ix,iym])
ix=nx-1; ixm=nx-2; ixp=0 iy=ny-1; iym=ny-2; iyp=0 hP[ix,iy] = 1./4. * (h[ixm,iy] + h[ixp,iy] + h[ix,iym] + h[ix,iyp]) \ - dt2dx * (hu[ixp,iy] - hu[ixm,iy]) \ - dt2dy * (hv[ix,iyp] - hv[ix,iym])
# # Condições fronteira abertas nos cantos # hP[0,0]=hP[1,1] # hP[0,ny-1]=hP[1,ny-2] # hP[nx-1,0]=hP[nx-2,1] # hP[nx-1,ny-1]=hP[nx-2,ny-2] # actualizar o sinal
5