COMSOL主要用cpu來執行計算,多核心的要求高於時脈。
記憶體越大越穩定能執行更大的專案,大約是150萬個自由度以下,要求16GB內存,300萬個自由度以下為32GB內存,依此類推。建議至少16GB。
硬碟建議用SSD存放應用程式並且夠大即可,由於COMSOL專案不會太大,不包含結果資料的專案大約100Mb以下,所以不需要大空間儲存專案。如果專案結果極大,則有需要大空間硬碟儲存,可以用HDD就足夠,不過儲存和開啟的時間會很久。
不需要高效顯卡,除非模型過於複雜,有支援專業繪圖卡。
https://cn.comsol.com/system-requirements
https://cn.comsol.com/support/knowledgebase/866
http://cn.comsol.com/blogs/much-memory-needed-solve-large-comsol-models/
開啟安裝檔
打開"COMSOL Multiphysics 5.6.0.401 Full Win-Linux-macOS"資料夾。
打開"COMSOL_5.6.0.401_DVD.iso"
進入"COMSOL56"的虛擬光碟中,打開"setup.exe"
安裝檔設定
選擇操作語言,按"下一步 >"
點選"新的COMSOL安裝"
點選"我接受同意條款"
回到"COMSOL Multiphysics 5.6.0.401 Full Win-Linux-macOS"的資料夾
打開"Crack"資料夾,這裡的"readme_windows.txt"可以參考。
找到"LMCOMSOL_Multiphysics_SSQ.lic",確認它的路徑。
回到COMSOL安裝檔,這裡要求輸入"授權資訊",點選"授權格式"旁邊的下拉表格,選擇"授權檔"。
點選"瀏覽"
找到"LMCOMSOL_Multiphysics_SSQ.lic"檔,並按下"open"。
回到安裝檔頁面,按"下一步 >"
選擇安裝內容,預設為全部,選好後按"下一步 >"
來到選項,不要勾選 "安裝後更新檢查" 和 "啟動自動更新"。按"下一步 >"
即時連結,不要勾選任何選項,按"下一步 >"
確定安裝選項,點選"安裝",開始安裝。
COMSOL開啟頁面預設為新增模擬的畫面
- 點選"模型精靈"
- 選擇空間維度
依需求選擇空間維度,其中"2D軸對稱"和"1D軸對稱"如下圖所示
- 選擇物理量
如果要做聲波在空氣中傳遞,且聲源是壓電材料,選擇"結構力學"->"電磁-結構交互作用"->"壓電效應"->"壓電效應-固體",雙擊左鍵或按"新增"即可增加物理量。
- 選擇好物理量,按"研究"。如果有少選或需要增加物理量,設定好後仍可修改。
- 選擇研究,以聲波來說,常用的有"時間相依"、"頻遇"、"穩態"。
雙擊要的研究或是按下方的完成,及設定完成了!
在COMSOL中,有實體的模擬要有"模型"、"材料"、"網格"、"物理量"、"研究"和"結果"。彼此間相互影響,不過COMSOL的設計可以方便查找問題。
上圖為COMSOL主要的工作視窗,最左邊是"模型建立器"。這裡包含模擬中所有資訊,就像是編譯器中的project管理區。在COMSOL中,每個設定的參數是由"模型建立器"中由上而下逐一建成,比如全域定義中有定義的參數,下面的設定中皆可使用。
畫面中間是設定參數的地方,先選取"模型建立器"中要設定的參數,比如"幾何"
(模型的造型),在這可以設定幾何的單位等等。換成其他選項會顯示可改變的參數,是設定COMSOL主要工作區。
最右邊為"圖形"區,將顯示模擬的視覺化結果,包含3D、2D繪圖、圖表等。在繪製模型時會顯示在此區域。
訊息、計算資訊、表格的顯示區域。要注意,COMSOL中輸出的 "表格" 會出現在這裡。
功能區。和office中上面那一欄是一樣的功能。要新增物理量、新增幾何、新增網格、輸出圖形等等,這裡可以找到。也可以在"模型建立器"中對要修改的地方按右鍵有相同的功能。
一個COMSOL模擬必須包含"模型,並且能往格化"、"材料"、"物理量"、"研究",最後生成"結果"。這裡給個簡單的範例。
https://www.youtube.com/watch?v=4uOOXLdzMgU&t=1789s
可以搭配這個影片一起學,不過前面1/4是廣告和最基礎的COMSOL教學,看一遍就好,皮托科技的影片都有這問題。
這個範例是我自己寫的,建立在線性聲波在空氣中傳遞的模擬。在空間中心有一個聲源,隨時間傳播,撞擊到牆面會被吸收。
檔案名稱"1 點聲源_空盒_空氣_牆面反射_teaching.mph"
在COMSOL官網上,有其他人或是官方釋出的範例。有已設定好的COMSOL project檔和解釋的pdf。這個pdf很重要,它包含從新增檔案開始建立模擬到最後結果的製作流程,可以完全按照範例中的步驟做出一模一樣的結果。許多技巧和設定可以從中學習。不過有些非官方的範例沒有詳解,要自己在專案中一一檢查設定。
直接在Google中輸入關鍵字,並包含"COMSOL"即可找到相關範例,這裡搜尋"comsol piezoelectric receiver and transmitter"可以找到以下網頁
https://www.comsol.com/model/modeling-piezoelectric-devices-as-both-transmitters-and-receivers-71111
https://www.comsol.com/blogs/how-to-model-piezoelectric-devices-as-both-transmitters-and-receivers/
我是參考這個範例做出壓電材料與聲波傳遞的模擬。非常重要。
點選"Download the application files"可以找到以下檔案
選擇對應的COMSOL版本,其中".mph"是COMSOL project檔,下載後用COMSOL開啟即可操作。不過這裡的PDF檔是這個專案的簡介,並沒有附上詳解,下面我會做出這個專案的詳解。
在COMSOL中以安裝部分官方範例,在COMSOL軟體中可以找到。
- 進到COMSOL中,點選"檔案"->"應用資料庫"。
- 進來後即可看到內建的範例檔,以物理量分類。
- 左下方包含"開啟"和"PDF文件",分別是COMSOL專案和PDF詳解。
這裡模擬壓電元件釋放聲波在空氣中傳遞,打到一牆面後反射回來,並由另一個壓電元件接收聲波。參考以下範例修改而來,在參考範例中,一的壓電元件在水中釋放聲波,打到牆面後反射並由同一顆壓電元件接收聲波。這裡附上我製作的2D模擬詳解,可按照相同的步驟做出來。
檔案名稱"2 壓電材料_聲波傳遞_2D_反射體_壓電接收_teaching.mph"
建立新的COMSOL專案,點選模型精靈
在空間維度中選擇"2D"
物理量點選"聲波">"聲固交互作用">"聲壓電交互作用,暫態",選好後按"研究"。
研究選擇"一般研究">"時間相依",選號後按"完成"。
進到工作區塊,首先設定幾何的參數,將單位改成"mm"毫米。
點選上方工具列中的"幾何"
點選"矩形",新增矩形
設定矩形的名稱,在"標籤"的欄位改成"Transmitter"
設定矩形的大小,在"尺寸與外型"下有"寬度"和"高度"的欄位,分別輸入"寬度:4","高度:1"。單位為預設單位,所以不用修改。需要修改可以在數字後面加上[m]即可將單位換成公尺。
設定矩形的位置,在"位置"下設定"以角落為起點",在"x"欄位輸入"212",在"y"欄位輸入"-1"。
這樣就完成"Transmitter"的造型設定了,按下"建立所有物件",可以在右側"圖形"中看到結果。
接著設定"Receiver",這裡可以用COMSOL的"重複"功能,複製一個相同的矩形。到"模型建立器"中滑鼠指著"Transmitter"的矩形按右鍵,點選"重複"。
這樣就會生成一模一樣的矩形。被稱作"Transmitter 1"
首先將"標籤"改成"Receiver"。
這裡設定兩個壓電元件大小相同,因此不需要改變大小參數。
修改Receiver的位置,"x"設定成"188","y"一樣是"-1"。
按下"建立所有物件"即可生成Receiver的造型,不過你可能看到下列情況。
已經按下"建立所有物件",但是旁邊的圖形沒有改變。其實COMSOL已經生成另一個矩形了,只是沒有在畫面裡,在"圖形"視窗中點"縮放置視窗大小",就是紅框中的按鈕。就可以看到兩個矩形了!
接著設定反射的牆面"Reflector",在"幾何"中點選"矩形"。
將標籤改成"Reflector"。
在"尺寸與外觀"中修改尺寸,寬度設定成"40",高度設定成"5"。
將"位置"改成,x設成"180",y設成"930"。
按下"建立所有物件"和"縮放置視窗大小"檢查圖形是否相符。
接著設定環境,新增一個"矩形",並將標籤改成"Enviroment"。
設定"Enviroment"的尺寸,寬度:400,高度:1000。
設定"Enviroment"的位置,x:0,y:-40。
往下滑點選"層",這裡新增"完美匹配層",用來優化模擬同時將矩形的邊界設為不反射壁。
點開後在"層1"的後面設定厚度的地方輸入"20",將下面"左層"、"右層"、"下層"和"上層"全部勾選。按下"建立所有物件",就可以得到下面的圖形了。
接著設定每個物件的"材料",首先點選上方工具列中的"材料"。
點選"新增材料"。會看到右邊出現"新增材料"的視窗。
點選"內建",雙擊"Air"即可新增air材料。
雙擊"Alumin"新增材料
在"新增材料"視窗內第一欄是搜尋欄位,在搜尋欄輸入"pzt"按下"搜尋"或鍵盤"Enter"。選擇"內建"下的"Lead Zirconate Tianate(PZT-5H)"。這個是壓電元件的材料。
新增好材料後,將"新增材料"的視窗關閉,點選"新增材料"視窗右上的"x"。
在"模型建立器"中點選"材料"下的"Air"。
修改"Air"的區域,在"幾何本體選擇區"中點選掃把圖案的按鈕,稱作"清除選擇"。可以看到下面框框中的數字消失,同時"選擇區"的欄位變成"手動"。
點選"圖形"中中間的區域和邊邊上的矩形,這裡設定成"Air"的區域,對應選擇區的的數字,這些數字代表每個區域的代號。
接著在"模型建立器"中,點選"材料">"Alumin"。
在"圖形"中點選上方薄片狀的矩形。可能沒辦法直接選取到,可以在指標只在矩形上時滾動滑鼠滾輪,來選擇到。
接著在"模型建立器"中點選"材料">"Lead Zirconate Tianate(PZT-5H)"。
在"圖形"中點選下方兩個小矩形,點不到先將畫面放大,在圖形上方的選項中點選"放大方塊",拉選下面的區域即可放大。
設定"完美匹配層",在"模型建立器"中找到"定義",點選"定義"展開。
滑鼠只到"定義",按右鍵>點選"完美匹配層"。
進來後如下圖
到右邊的"圖形"中,點選邊邊上所有的矩形。這樣就設定完成"完美匹配層"
以上完成設定模型與材料,接著設定物理量。
首先要先增加兩個物理量,分別是"固體力學"、"靜電"和"電路"。要多這兩個物理量是用來區分"Transmitter"和"Receiver"的特性。
在上方工具列中點選"物理量"。
點選"新增物理量"。和"新增材料"一樣,會在右邊出現"新增物理量"的視窗。
在"結構力學">雙擊"固體力學"來新增。會在"模型建立器"中出現"固體力學2"
在"AC/DC">雙擊"電路",新增電路。
在"AC/DC">"電廠與電流">雙擊"靜電"。
新增好物理量後,將"新增物理量"的視窗關閉
在"模型建立器"中找到"電路",將"電路"拖移到"固體力學2"上方。
設定每個物理量作用的區域,在"模型建立器"中依次點開每個物理量來設定。
首先點選"聲押,暫態(actd)"。
在"區域選擇區"中點選"清除選項",再選擇中間和邊邊的矩形。如圖。
回到"模型建立器"點選"固體力學(solid)"
在"區域選擇區"中點選"清除選項",放大向方的區域,點選右邊的小矩形。
回到"模型建立器"點選"靜電(es)"
在"區域選擇區"中點選"清除選項",放大向方的區域,點選右邊的小矩形。
回到"模型建立器"點選"固體力學2(solid2)"
在"區域選擇區"中點選"清除選項",放大向方的區域,點選左邊的小矩形。
回到"模型建立器"點選"靜電2(es2)"
在"區域選擇區"中點選"清除選項",放大向方的區域,點選左邊的小矩形。
回到"模型建立器"點選"聲押,暫態(actd)"展開,點選"暫態壓力聲場模型 1",確認"模型輸入">溫度是"用戶自訂"。
回到"模型建立器"點選"固體力學(solid)"展開,點選"線性彈性材料1",檢查"模型輸入">"體積參考溫度"設定成"用戶自訂"。
點選"固體力學">"壓電材料",確認"模型輸入">"體積參考溫度"設定成"用戶自訂"。
點選上方工具列的"物理量">點開"邊界">點選"低反射邊界"。
這時候沒辦法選取邊界,先回到"模型建立器">"多重物理量">"聲-結構邊界1(asb1)"
在"選取邊界"中點選"清除選擇",點選右邊矩形上邊,如圖
回到"固體力學1">"低反射邊界1",點選右邊矩形下邊,如圖
到"模型建立器"中點選"靜電(es)"展開,對"靜電(es)"按右鍵,點選"接地",點選右邊的矩形的下邊,如圖。
對"靜電(es)"按右鍵,點選"終端",點選右邊矩形的上邊,在"終端"中設定"終端名稱",設定成"2","終端類型"改成"電路"。如圖
到"模型建立器"中點選"電路"展開。
上方的工具列會變成"電路",從中點選"電壓源"
在設定>"元件參數">"來源類型"設定成"正弦來源"
將"電壓Vsrc"設定成"100exp(-((t-1.5T0)/(T0/2))^2)",頻率設定成"f0"。 請回到編輯版本中複製函數。
將"接點連接"設定成"p:1","n:0",如圖
到上方工具列,點選"電阻",阻值設定成預設值"1000[Ω]"
設定"接點連接"設定成"p:1","n:2",如圖
在上方工具列,點選"外部I-終端"。
"節點名稱"設定成"2","外部終端""V"設定成"終端電壓(es/term1)"。
接著設定"固體力學2"和"靜電2"。是"Receiver"的特性。
到"模型建立器"中點選"固體力學2"展開
點選"線性彈性材料1">"模型輸入">"體積參考溫度"設定成"用戶自訂"。
指標對"固體力學2"按右鍵>"材料模型">點選"壓電材料"
將"模型輸入">"體積參考溫度"設定成"用戶自訂"
點選"圖形"中左邊的矩形
指標對"固體力學2"按右鍵>"更多">點選"低反射邊界"
點選"圖形"中左邊矩形的下邊
指標對"固體力學2"按右鍵>點選"滾動"。這個步驟是關鍵,有加入壓電元件才會隨聲波震盪。
點選"圖形"中左邊矩形的下邊
到"模型建立器"點選"靜電2(es2)"展開
指標對"靜電2(es2)"按右鍵>點選"電荷守恆,壓電"
點選"圖形"中左邊的矩形
指標對"靜電2(es2)"按右鍵>點選"接地"
點選"圖形"中左邊矩形的下邊
指標對"靜電2(es2)"按右鍵>點選"浮動電位"
點選"圖形"中左邊矩形的上邊
到"模型建立器"點選"多重物理量"展開
指標對"多重物理量"按右鍵>點選"聲-結構邊界"
在"耦合介面"中,將"結構"改成"固體力學2(solid2)"。再到"圖形"選左邊矩形的上邊。
指標對"多重物理量"按右鍵>點選"壓電效應"
在"耦合介面"中,將"固體力學"改成"固體力學2(solid2)",將"靜電"改成"靜電2(es2)"。會看到左邊的矩形被選取起來。
這裡要回去設定"參數",在"模型建立器">"全域定義">"參數"。
參數值參考下圖輸入值
接著設定"網格",在"模型建立器"中點選"網格"
指標對"網格"按右鍵>點選"映射"
這時會新增"尺寸"和"映射",先點選"尺寸","元素尺寸"勾選"自訂"。
在"元素尺寸參數">"最大元素尺寸"設定成"air_cp/fmax"
在"元素尺寸參數">"最小元素尺寸"設定成"0.06"
點選"映射1">"區域選擇區">"幾何實際等級"改成"區域"、"手動"
在"圖形"中點選兩個小矩形,也就是壓電元件。
指標對"映射1"按右鍵>點選"尺寸"
"元素尺寸"改成"自訂",勾選"最大元素尺寸"設定成"min(1[mm]/3,pzt_cs/fmax/5)"
指標對"網格"按右鍵>點選"任意三角形"
點選"任意三角形">"區域選擇區">"幾何實際等級"改成"區域"、"手動"
在"圖形"中選取中間區域和"Reflector"的矩形。
指標對"網格"按右鍵>點選"映射"
指標對"映射2"按右鍵>點選"分布"
點選"圖形"中左和右邊的上邊,如圖
在"分布">"有限元素數"改成"2"。
按下"建立全部",來建立網格。
到"模型建立器">"研究1">"步驟1:時間相依"
到上方工具列,點選"研究"
點選"顯示預設求解器"
點擊"解1(sol1)"展開>點選"時間相依求解器"
點選"時間步階"展開>將"方法"改成"廣義alpha"
"由求解器解決的步階"改成"手動",將"時間步階"改成"min(1/(60fmax),min(1/(60fmax),1/(60*fmax)))"(*要打出來)
按下"計算"就可以等COMSOL計算了,這個範例大概算10多分鐘。
接下來加入"探針",追蹤壓電元件的電壓與變形。回到"模型建立器">"單元件1">"定義"
對"定義"按右鍵,點選"探針">"邊界探針"
"探針類型"改成"積分"
"來源端選擇">"清除選擇">放大"圖形"下方區域>點選左邊矩形的下邊。
在"表示式"旁邊點選"取代表示式"
點選"單元件">"靜電2">"浮動電位">點選"es2.fp1.V0-浮動電位-V"
修改"標籤",改成"Receiver voltage"
在"模型建立器"中,對"Receiver voltage"按右鍵>點選"重複"
將標籤"Receiver voltage 1"改成"Transmitter voltage"
在"來源端選擇">"清除選擇",在"圖形"中點選右邊矩形的上邊。
在"表示式"點選"取代表示式"
點選"單元件">"靜電">"終端">"es.V0_2-終端電壓-V"
到"模型建立器"中對"定義"按右鍵>"探針">點選"區域探針"
將標籤換成"Receiver volumn"
探針類型改成"積分"
"來源端選擇">"清除選擇">點選"圖形"中左邊矩形。
"表示式">點選"取代表示式"
"單元件1">"固體力學2">"應變">"solid2.evol-體積應變"
往下滑到"表單和視窗設定">點擊旁邊的"+"號按鈕。這步驟三個探針都要有,不然圖表會擠在同一張。
再次到"研究1">修改"研究設定">"時間單位"改成"ms","輸出次數"改成"range(0,0.1,2)"。
按下"計算"開始計算,等待結果
計算完成後會看到以下畫面,自動跳到第一項結果。
點選"聲壓(actd)"
點選上方工具列中的"動畫">"播放器"
聲波傳遞不太清楚,往下滑,點擊"進階",取消勾選"畫格間的比例同步化"
按下"圖形"中的"播放"鍵,即可修改動畫。
到資料夾中,開啟"壓電材料_聲波傳遞_2D_反射體_壓電接收_完成版.mph"比較結果是否相符。
3D模擬中的網格同樣是3D的,因此在做完"映射"後,要加上"掃描"產生立體的網格。只做"映射"代表只完成立體物件表面的網格。
- 首先繪製"圓柱",和2D一樣繪製"Transmitter"、"Receiver"、"Reflector"和"Enviroment",如圖
- 和2D一樣設定好"物理量",後設定"網格"
- 在2D中,我們對"壓電元件"和"完美匹配層"做"映射",同樣的在3D中也做"映射"。
- 其中對"完美匹配層"的"分布"設定比較多,分別要設定4個地方。
- 第一個是外圈由內向外的網格數,上下兩個外圈格數會同步,如果不放心可以上下都選擇起來,要選擇的地方如圖。
- 第二個是外圈的厚度的網格數,一樣上下格數同步。
- 第三是是外圈一圈的格數,這裡要注意,設定的網格數是1/4圈中的網格數,所以這裡設定網格數是"12",但一圈的總網格數是"48"
- 第四是圓柱高上的網格數
- 最後新增"掃描",並設定"掃描"的區域和"映射"的區域相同,按下"建立網格"沒有報錯就完成了!!
在建立模擬時最常發生問題的地方是"網格"和"研究"下面會說明
網格的目是給COMSOL一個分割區域,就像是做微積分一樣,在進行計算時依照每個網格的大小來當作一次計算距離參數。所以網格越大,得到的結果誤差越大。
建立網格時最常遇到"網格不匹配"或"來源與目的網格不匹配"。造成的原因有兩種。
- 兩個不同網格設定的物體太靠近,這時COMSOL沒辦法插入網格來配對兩套不同的網格,因此跳出"網格不匹配"的錯誤。解決辦法是回到"幾何",將兩個物件的距離拉遠,或是將其中一邊的網格設定成"任意四面體"或"任意三角形",由COMSOL來消除不匹配的網格。
- 設定映射時,將相連的網格設定成不同參數,造成"來源與目的的網格不匹配"。將映射參數不同的地方調成相同即可。
研究是COMSOL進行計算的地方,因此到這邊沒有錯誤就表示模擬能正常運行,有錯誤一定是前面或研究步驟中有錯誤。
常見的錯誤有"缺少網格"、"結果沒有收斂"、"時間順序不能往前"等等
- "缺少網格"通常是在做3D模擬時沒有做"掃描"或是沒有加入"任意四面體",造成區域中沒有網格,因此無法進行計算。
- "結果沒有收斂"通常是參數設定問題,可能是給予的輸入值過大、研究的時間範圍太大等等,導致數值超過COMSOL模擬的上限,解決辦法有修改"單位"、修改參數、修改時間範圍來縮小數值。造成的原因如同設定浮點數時給予超過浮點數的範圍導致溢位,COMSOL有保護機制避免溢位發生。
- "時間順序不能往前"顧名思義,在設置時間範圍時結束時間小於起始時間或間格時間導致。
前面有提到,COMSOL模擬的空間維度是一開始就設定好了,不能中間更改,因此要手動從頭製作3D模擬。目前已製作出來,但是要達到3公尺長的範圍太大,需要更多記憶體的電腦才跑得動。
檔案名稱"壓電材料_聲波傳遞_3D圓柱_2D延伸_1公尺_3D目前進度.mph"
數值模擬,"廣義alpha"
COMSOL模擬中為了將快計算速度,改由"廣義alpha(Generalized alpha method)"去跑數值模擬,至於詳細的運算方式還不太了解。
https://opensees.berkeley.edu/wiki/index.php/Generalized_Alpha_Method
https://www.youtube.com/watch?v=wUsTSm-DY1g
COMSOL優化計算,直接求解與迭代器求解
直接求解計算較快速,記憶體需求大,但不精確;反之迭代器求解精確,記憶體需求較低,但花更多時間。需要了解原理。
http://cn.comsol.com/blogs/solutions-linear-systems-equations-direct-iterative-solvers/
目前想法是使用3個Tx來建立聲波建設性干涉範圍,因此設計三個Tx同步發出聲波,將建設性干涉形成的強聲波區去貼近TP的觀測範圍。在4個角落上各放一個Rx,來接收聲波,4個Rx的接收範圍盡量不要重疊,來分辨物體在畫面中的位置。