第二篇 在Win10系統上配置有限元框架FEniCS
第二篇 在Win10系統上配置有限元框架FEniCS
這篇介紹本來是應該放在基礎篇的,但是這個有限元框架真的神TM難裝。我弄了一週才弄好,雖然同時有上課寫論文什麼的,總歸花了我不少時間。配置過程也遇到了特別多的問題,而且有些問題目前也只能不了了之,所以放在實戰篇希望能與大家交流,更希望有大佬看到可以帶飛一下QAQ
關於有限元分析和FEniCS
首先先放一下有限元分析的WIKI和FEniCS的官網:
https://en.wikipedia.org/wiki/Finite_element_method
https://fenicsproject.org/
我對有限元分析的理解就是解偏微分方程(組)。我主要是希望利用它來做一些流體計算(CFD),並且利用FEniCS的伴隨演算法(adjoint)庫。目前我用的adjoint是自己寫的,計算效率比較低,Cost Function的下降也比較慢,希望移植到FEniCS上可以獲得更好的效果。這裡面有大量的數學概念,如果讀者希望瞭解需要自己先做一下功課,至少把WIKI看了。當然如果你對我現在說的東西完全是一頭霧水,那我覺得你沒有必要學這個,反正也用不到。在我的文章發表後,我也會把程式碼什麼的放上來大家交流交流,或者當作一個adjoint的例子,目前在投稿階段,敬請期待。關於有限元分析,還有一個非常好用的程式包ANSYS,可以不需要碼程式碼在windows系統上直接操作,下次在這個部落格裡放一個例子作為bonus(室內PM模擬)。
(偽)在Win10下配置FEniCS
為什麼說是“偽”配置呢?因為FEniCS是不能直接在Windows系統下安裝的,除非從source code開始編譯,後面我們也會說這個辦法,不過是在Linux上嘗試的,並且沒有成功。首先我們需要在Win10下安裝一個Ubuntu的子系統,然後再在Ubuntu下安裝FEniCS。安裝子系統的方法是從Microsoft官網上摘下來的:https://docs.microsoft.com/en-us/windows/wsl/install-win10
啟用子系統
以管理員許可權(右鍵->以管理員身份執行)PowerShell,找不到就用微軟小娜搜一下。然後鍵入,回車:
Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux
然後會需要你重啟一下電腦。
下載Ubuntu
這一步同樣非常傻瓜 ,只用在應用商店(Microsoft Store)搜尋Linux安裝Ubuntu就可以了。
這裡需要選擇第一個,第一次開啟Ubuntu會花上幾分鐘,等得太久可以敲敲回車試試,然後會需要你設定使用者名稱和密碼等。
安裝FEniCS
在Ubuntu的命令列視窗輸入一下命令:
sudo apt-get install software-properties-common
sudo add-apt-repository ppa:fenics-packages/fenics
sudo apt-get update
sudo apt-get install --no-install-recommends fenics
就可以了,然後為了方便測試和使用,建議再安裝一下ipython3
sudo apt-get ipython3
如果想使用adjoint也可以用同樣的辦法安裝pip3,然後用pip3 install安裝 dolfin-adjoint,Ubuntu自帶了vim可以用於編輯,當然你也可以在windows下編輯好,然後存到子系統路徑下。子系統的根路徑預設在:
C:\Users\使用者名稱\AppData\Local\lxss
然後我們可以在命令列視窗開啟ipython3,並且按照
http://www.dolfin-adjoint.org/en/latest/documentation/tutorial.html#dolfin-adjoint-tutorial
測試一下
如果遇到這樣的錯誤:
ImportError: No module named 'fenics'
ImportError: No module named 'dolfin'
可以試試到python3下執行試試
Linux下安裝dolfin遇到的報錯
這部分報錯是通過source code編譯安裝FEniCS時遇到的,與上面的東西無關。
這個報錯我一直也沒有解決,之前的報錯可以通過選擇適當的gcc, icc, cmake, boost, petsc, slepc的版本解決,或者通過管理員許可權解決。直到最後一部安裝dolfin時,輸入:
pip install .
返回報錯:
"PETSc was configured with one OpenMPI mpi.h version but now appears to be compiling using a different OpenMPI mpi.h version"
我在各種交流平臺上搜了很久,也嘗試了各種編譯器也沒有能解決這個問題。