上邊界以1m/s速度朝x方向移動,其餘邊界皆為靜止。雷諾數(Reynold number)設定為10。
以PINNs為基礎求解PDE的步驟:設定幾何形狀設定物理現象所對應之PDE產生neural network solver。如果對應到Modulus,所使用的module與class分別為:CSG/STL(產生point cloud)、TrainDomain class與Solver class。問題與Modulus的對應如上圖所示。
使用Modulus解決LDC包含以下幾個步驟:
Step 1:Importing the required packages
Step 2:產生幾何形狀
可使用sample_boundary產生sample point,並使用var_to_vtk產生Paraview可顯示之.vtu檔。
Step 3:定義邊界條件與設定LDC所對應之PDE
Modulus solver的training data的來源為系統之BC與PDE,可由TrainDomain定義。另外,使用solver求解必須定義相關的loss function。
Boundary Condition:使用boundary_bc函數設定。
Equations to solve:考慮2D LDC,我們必須求解continuity equation與x,y方向的momentum equation。初始值為零表示不存在forcing/source項目。
Lambda_sympy表示loss function weighting。下圖可知在左上角與右上角有最大的不連續性,利用SDF(Signed Distance Field)設定可獲得較快的收斂與避免在邊界的不連續性。
Step 4:產生驗證資料
Modulus solver唯一基於物理條件之neural network solver,因此並不需要training data,但我們可以將CFD或其他solver的結果匯入為validating data。我們將OpenFOAM的計算結果以.csv方式匯入,視為solver的validation domain。
Step 5:建立Neural Network Solver
solver繼承Modulus內建的Solver Class,需要設定train_domain與val_domain。
LDC所遵循的PDE為Navier-Stokes方程式,Modulus已有內建,需要給定的參數為:dim=2(2D)、ν(kinematic viscosity)=0.01 m2/sec與ρ(密度)=1.0kg/m31.
Modulus預設的network包含6個hidden layer,每一個layer包含512個node。指定network的輸入為(x,y),輸出為(u,v,p)
Step 6:執行Neural Network Solver