回答:
ベクトルストリーム関数を使用するか、2つの勾配の外積をとります。つまり、 で、\ boldsymbol {A}は選択したベクトルフィールド、または \ boldsymbol {u} = \ nabla f \ times \ nabla g で、fとg選択する2つのスカラーフィールドです。
速度に発散のないことと境界条件を規定することはどちらも難しいですが、コードで境界条件に任意の関数を設定できる限り、問題はありません。
ETA:もちろん、運動量方程式は強制関数を受け入れる必要がありますが、連続方程式に右辺を追加するよりも、常に運動量方程式を強制する方が良いと感じています。
これは一般的な答えではありませんが、ナビエストークス方程式の場合、実際の流れを説明する製造されたソリューションがあります。たとえば、Kovasznayフローフィールドは一般的な選択肢です。
http://link.springer.com/article/10.1007/BF00948290
元の参照:Kovasznay LIG、「2次元グリッドの背後の層流」。手続き ケンブリッジ・フィロス。Soc。、page 44、1948。
それが私が普段やっていることです。
ストリームライン関数を定義します。
速度は次と等しい:
これで、適切なゼロ平均圧力を選択して、強制項を作成できます。
SymPyサンプルコードと均一な境界条件を投稿します。お楽しみください。
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])