wyprodukowane rozwiązania dla nieściśliwych Navier-Stokesa - jak znaleźć wolne od dywergencji pola prędkości?

10

W metodzie wytwarzanych rozwiązań (MMS) postuluje się dokładne rozwiązanie, zastępuje je w równaniach i oblicza odpowiedni termin źródłowy. Rozwiązanie służy następnie do weryfikacji kodu.

W przypadku nieściśliwych równań Naviera-Stokesa MMS łatwo prowadzi do (niezerowego) terminu źródłowego w równaniu ciągłości. Ale nie wszystkie kody dopuszczają terminy źródłowe w równaniach ciągłości, więc w przypadku tych kodów wystarczą tylko wyprodukowane rozwiązania z polami prędkości pozbawionymi rozbieżności. Znalazłem ten przykład dla domeny W ogólnych przypadkach 3D, w jaki sposób wytwarza się pole prędkości pozbawione rozbieżności?u 1Ω=[0,1]2

u1=cos(πx)sin(πy)u2=sin(πx)cos(πy)
Chris
źródło

Odpowiedzi:

7

Użyj funkcji strumienia wektorowego lub weź iloczyn krzyżowy dwóch gradientów. To znaczy:

u=×A
gdzie A to wybrane przez ciebie pole wektorowe, lub
u=f×g
gdzie f i g to dwa wybrane przez ciebie pola skalarne.

Trudno jest, aby obie prędkości były wolne od rozbieżności i określały warunki brzegowe, ale tak długo, jak długo twój kod pozwala ci ustawić dowolne funkcje dla twoich warunków brzegowych, powinieneś być OK.

ETA: Oczywiście twoje równanie pędu będzie musiało zaakceptować funkcję wymuszającą, ale zawsze czułem się lepiej wymuszając równanie pędu, niż dodając prawą stronę do równania ciągłości.

Bill Barth
źródło
Dzięki! (wymuszanie równania ciągłości występuje tylko w modelowaniu kawitacji, o ile mi wiadomo)
Chris
5

To nie jest ogólna odpowiedź, ale dla równań Naviera-Stokesa istnieją gotowe rozwiązania opisujące rzeczywisty przepływ. Na przykład pole przepływu Kovasznay jest popularnym wyborem:

http://link.springer.com/article/10.1007/BF00948290

Oryginalne odniesienie to: Kovasznay LIG, „Przepływ laminarny za dwuwymiarową siatką”. Proc. Cambridge Philos. Soc., Str. 44, 1948.

Wolfgang Bangerth
źródło
1948 (!) Nie zdawałem sobie sprawy, że to „prawdziwy przepływ”. Rozumiesz przez to, że można go zmierzyć w eksperymencie fizycznym (w przeciwieństwie do eksperymentu numerycznego)?
Chris
Tak mi się wydaje.
Wolfgang Bangerth
Nie. Jest to wyidealizowany przepływ w pewnej odległości za siatką. Ale nikt nie wie, jak wygląda siatka i najprawdopodobniej musi być wykonana z „bardzo miękkiego” materiału
Guido Kanschat
2

Tak zwykle robię.

Zdefiniuj funkcję usprawnienia:

Ψ=[ψxψyψz]

prędkość jest równa:

u=×Ψ=[ux=yψz-zψyuy=zψx-xψzuz=xψy-yψx].

Teraz możesz wybrać dowolną rozsądną presję uśrednioną na zero i skonstruować termin wymuszający.

Zamieszczam przykładowy kod SymPy dla i jednorodnych warunków brzegowych, cieszę się:Ω=[0,1]3)

 from sympy import *

 x,y,z = symbols('x y z')

 X = Matrix([[x],[y],[z]])

 psi = zeros(3,1)
 psi[0,0] = sin(2*pi*x)*y**2*(1-y)**2*z**2*(1-z)**2
 psi[2,0] = x**2*(1-x)**2*y**2*(1-y)**2*sin(2*pi*z)

 curl_psi = zeros(3,1)
 curl_psi[0] = diff(psi[2],X[1]) - diff(psi[1],X[2])
 curl_psi[1] = diff(psi[0],X[2]) - diff(psi[2],X[0])
 curl_psi[2] = diff(psi[1],X[0]) - diff(psi[0],X[1])
Nicola Cavallini
źródło