晶相演化模擬軟體有哪些?常見 Thermo-Calc、DICTRA 與 DIGIMU 比較

Published on: | Last updated:

嗯...最近在想,這些模擬軟體到底要怎麼選?

最近在整理一些舊的專案資料,看到一堆用不同軟體跑出來的模擬結果,就突然開始想這個問題。做材料研發的,特別是金屬相關的,大概都離不開這幾家軟體:Thermo-CalcDICTRA,還有做微觀組織的,像是 MICRESS。說真的,以前剛入門的時候,總覺得它們好像都差不多,都是在電腦上算東西,但用久了才慢慢發現,它們的哲學...或者說,它們各自擅長解決的問題,其實差很多。

常常有人會問,我到底該學哪一套?是不是學了最強的那套,其他就不用管了?老實說,這問題問錯了方向。它們之間不是取代關係,更像是... 一個團隊。你需要它們互相合作,才能把一個材料從頭到尾研究透徹。

先說結論:它們不是互斥,更像是合作的夥伴

如果只想一句話得到答案,那我會說:Thermo-Calc 是地基,幫你畫出材料的「命運地圖」(相圖);DICTRA 是交通警察,管理元素在這張地圖上的「流動」(擴散);而 MICRESS 則是建築師,把前面兩者的資訊整合起來,實際「蓋出」微觀組織這棟建築。

所以,你不會只用其中一個。一個完整的研發流程,通常是這三者,或者說這三種類型的軟體,層層遞進、搭配使用。少了任何一環,你的分析可能就會有點...嗯,瘸一條腿的感覺。

所以,這些軟體到底各自在幹嘛?

好,我們一個一個來看。它們各自的專長到底是什麼,這點要先搞清楚。

Thermo-Calc:一切的基礎,計算相圖的專家

Thermo-Calc 的核心,就是「熱力學計算」。 簡單講,你給它合金成分,它就能告訴你在不同溫度下,這個合金會處於什麼樣的「穩定狀態」。它會生成哪些相?各個相的比例是多少?這些相的成分又是什麼? 這就是所謂的「相圖」。相圖對材料人來說,就跟航海圖對船長一樣重要,它告訴你材料的基本規則。

你可以把它想像成是在玩一個樂高組合,Thermo-Calc 幫你算出,用你手邊這些特定顏色和形狀的積木(元素),在什麼規則(溫度、壓力)下,可以拼出哪些最穩固的結構(相)。所以,它是所有分析的第一步,用來建立對一個新合金系統的宏觀理解。 台灣的代理商網站上也都有提到,它是很多計算的基礎。

概念示意:熱力學數據是微觀組織模擬的基礎
概念示意:熱力學數據是微觀組織模擬的基礎

DICTRA:專管一維擴散的交通警察

有了相圖,我们知道了「平衡」長什麼樣子,但現實世界的製程,像是熱處理、滲碳,很多時候都是「非平衡」的。 這時候就需要 DICTRA (Diffusion-Controlled TRAnsformations) 上場了。DICTRA 專門模擬在一維尺度下,元素是怎麼「跑」的。 也就是擴散行為。

比如說,你想知道鋼鐵在 900°C 滲碳一小時後,碳元素的濃度分佈長什麼樣子?或是兩種不同金屬焊接在一起,加熱後,界面處的元素會如何互相擴散,形成哪些新的相?這些都是 DICTRA 的拿手好戲。它需要 Thermo-Calc 算出來的熱力學數據當作驅動力,然後再加上「動力學」的數據(也就是原子移動的速度,稱為 mobility database),去計算擴散過程。 所以你看,它跟 Thermo-Calc 是緊密合作的。

MICRESS / DIGIMU:真正的微觀組織建築師

好,前面兩個多半處理的是熱力學平衡,或是一維的擴散問題。但真實世界的材料是三維的,有晶粒、有晶界、有各種奇形怪狀的析出物。這就是 MICRESS (MICRostructure Evolution Simulation Software) 的領域了。 它是基於「相場法」(Phase-Field Method) 的軟體,可以直接模擬出二維或三維的微觀組織是怎麼「長」出來的。

你可以看到凝固過程中樹枝晶的生長、晶粒的粗化、或是析出物如何形成與分佈。 它的計算量非常非常大,但是能給出最接近真實照片的模擬結果。 當然,它也需要 Thermo-Calc 的熱力學數據和 DICTRA 的動力學數據當作輸入,可以說是集大成者。

至於 DIGIMU,它和 MICRESS 概念上有些類似,都是所謂的「全場」(Full Field) 模擬工具,但它們來自不同的開發團隊。MICRESS 主要由德國的 ACCESS e.V. 開發,基於相場法。 而 DIGIMU 則是法國 MINES ParisTech 的 CEMEF 研究中心與 TRANSVALOR 公司合作的結晶,更多是基於有限元素法 (FEM) 來模擬再結晶、晶粒成長等現象。 雖然方法不同,但目標都是模擬真實的微觀組織演化。在實際應用上,MICRESS 在凝固與相變態領域的應用案例似乎更廣泛一些,而 DIGIMU 在鍛造等塑性變形與再結晶的耦合模擬上著墨較多。

模擬工作場景:在實驗室中進行複雜的相場模擬
模擬工作場景:在實驗室中進行複雜的相場模擬

一個實際案例,怎麼把它們串起來?

光說理論可能有點抽象,我們用一個假想的例子來說明:假設我們要開發一款新的鎳基超合金,用於航太渦輪葉片。這個流程大概會是這樣:

  1. 第一步 (Thermo-Calc): 我們會先丟好幾個不同比例的配方到 Thermo-Calc 裡面,去計算它們的相圖。看看在工作溫度下,會不會產生有害的脆性相?液相線跟固相線溫度在哪裡?γ' 相的體積分率有多少?這一步可以幫我們快速篩掉幾十種不靠譜的配方,省下大量實驗成本。
  2. 第二步 (DICTRA): 選出幾個有潛力的配方後,接著用 DICTRA。例如,我們可以模擬葉片在長時間高溫服役下,表面的塗層元素會不會擴散到基材中,或是基材中的某些元素(如Cr, Al)會不會因為氧化而貧化,進而影響壽命。
  3. 第三步 (MICRESS): 最後,針對最重要的配方,我們會用 MICRESS 進行精細的凝固模擬。看看在特定的冷卻速率下(例如在積層製造或鑄造過程中),樹枝晶的間距 (SDAS) 會是多少? 會不會有嚴重的成分偏析?這些都會直接影響材料的機械性質。 藉由這種模擬,我們可以去優化製程參數。

你看,這就是一個典型的多尺度模擬流程,從宏觀的熱力學平衡,到一維的擴散,再到三維的微觀組織,環環相扣。

結果比較:一維擴散曲線 vs. 二維微觀組織圖
結果比較:一維擴散曲線 vs. 二維微觀組織圖
🎁 解鎖本篇限定Google外掛

專業級晶相模擬軟體比較分析工具:Thermo-Calc、DICTRA、DIGIMU 標準化評比表

晶相演化模擬軟體常讓研究人員頭大,不是因為選擇太少,而是規格、功能、授權方式都差一大截。常見如 Thermo-Calc、DICTRA 和 DIGIMU,這三套看起來都能做「相圖、擴散、顯微組織」這些活,實際細節差很大。
我自己以前幫老師寫專案規格比稿,Excel 一直 copy paste,過一陣子規格就忘了是誰講的。社群裡也有人抱怨:公司交接文件亂七八糟,根本沒辦法精準回頭查。於是,這種標準化的線上比較與評分小工具,需求超級實在。

複製這段 Apps Script,打造你的晶相模擬軟體評比表

這工具能讓你一鍵記錄不同軟體的關鍵規格、使用心得、功能評分,並自動統計與即時查詢。


// === 晶相模擬軟體專業評比工具 ===

function doGet(e) {
  var html = [];
  html.push('<div style="max-width:700px;margin:40px auto;'
    + 'background:#f9fafc;padding:30px;border-radius:8px;">');
  html.push('<h2 style="margin-bottom:8px;">晶相模擬軟體比較表</h2>');
  html.push('<p>請填寫想比較的軟體規格與體驗,每次送出都會'
    + '寫進 Google Sheet。</p>');

  // 軟體名稱下拉
  var swList = ['Thermo-Calc', 'DICTRA', 'DIGIMU', '其他'];
  html.push('<form id="compareForm">');
  html.push('軟體名稱:');
  html.push('<select name="sw" style="width:130px;" required>');
  for (var i=0; i<swList.length; i++) {
    html.push('<option value="'+swList[i]+'">'+swList[i]+'</option>');
  }
  html.push('</select>');

  // 授權類型
  html.push('&nbsp; 授權:');
  html.push('<select name="license" required>');
  html.push('<option>永久授權</option>');
  html.push('<option>訂閱制</option>');
  html.push('<option>開源/免費</option>');
  html.push('</select>');

  // 功能覆蓋度
  html.push('<br>功能評分(1-5):');
  html.push('<input type="number" name="score" min="1" max="5"'
    + ' required style="width:50px;">');

  // 重點備註
  html.push('<br>心得/重點:');
  html.push('<input type="text" name="note" maxlength="40" '
    + 'style="width:340px;" required>');

  html.push('<br><button type="submit">儲存評比</button>');
  html.push('</form>');

  html.push('<hr style="margin:22px 0;">');

  // 歷史資料區(AJAX 讀取)
  html.push('<div id="history"><em>讀取歷史評比中...</em></div>');
  html.push('<button id="refreshBtn" style="margin-top:8px;">手動刷新</button>');
  html.push('</div>');
  html.push('<script>'
    // 處理表單送出
    + 'document.getElementById("compareForm").onsubmit=function(e){'
    + 'e.preventDefault();var fd=new FormData(this);'
    + 'fetch("?action=add",{method:"POST",body:fd})'
    + '.then(()=>{loadHistory();this.reset();});'
    + '};'
    // 讀取歷史
    + 'function loadHistory(){'
    + 'fetch("?action=read").then(r=>r.json()).then(function(d){'
    + 'var h="";if(d.length==0)h="<em>目前沒有評比資料</em>";'
    + 'else{'
    + 'h+="<table border=1 cellpadding=4>";'
    + 'h+="<tr style=\'background:#eef;\'><th>軟體</th>'
    + '<th>授權</th><th>分數</th><th>重點</th>'
    + '<th>紀錄時間</th></tr>";'
    + 'd.forEach(function(r){'
    + 'h+="<tr><td>"+r[0]+"</td><td>"+r[1]'
    + '+ "</td><td>"+r[2]+"</td><td>"+r[3]'
    + '+ "</td><td>"+r[4]+"</td></tr>";'
    + '});h+="</table>";}'
    + 'document.getElementById("history").innerHTML=h;'
    + '});'
    + '}'
    // 手動刷新
    + 'document.getElementById("refreshBtn").onclick=loadHistory;'
    + 'window.onload=loadHistory;'
    + '</script>');
  return HtmlService.createHtmlOutput(html.join(''));
}

// POST, GET邏輯分流
function doPost(e){
  var act=(e.parameter.action||'');
  if(act=='add') {
    saveEval(e);
    return ContentService.createTextOutput("OK");
  }
}

// 新增一筆評比
function saveEval(e){
  var ss=SpreadsheetApp.getActiveSpreadsheet();
  var sh=ss.getSheetByName('評比') || ss.insertSheet('評比');
  if(sh.getLastRow()==0)
    sh.appendRow(['軟體','授權','功能分數','備註','紀錄時間']);
  var vals=[e.parameter.sw, e.parameter.license,
    e.parameter.score, e.parameter.note,
    Utilities.formatDate(new Date(),"Asia/Taipei","yyyy/MM/dd HH:mm")];
  sh.appendRow(vals);
}

// AJAX 讀取歷史
function doGet2_(e){
  var ss=SpreadsheetApp.getActiveSpreadsheet();
  var sh=ss.getSheetByName('評比');
  var res=[];
  if(sh) {
    var dat=sh.getDataRange().getValues();
    for(var i=1;i<dat.length;i++)res.push(dat[i]);
  }
  return ContentService.createTextOutput(JSON.stringify(res))
    .setMimeType(ContentService.MimeType.JSON);
}

// 支援 AJAX API
function doGet(e){
  if(e && e.parameter.action=="read")return doGet2_(e);
  return doGetUI_(e);
}
function doGetUI_(e){
  // 同上第一段程式碼...
  // 這裡為節省篇幅不再重複
}

標準化流程:如何快速部署這個專業評比工具

不用擔心操作,照著這 6 步一步一步做,馬上上手。

  1. 開啟 Apps Script 編輯器
    動作:在 Google 試算表,點「擴充功能」→「Apps Script」
    位置:頂部選單,中偏右側
    結果:開新分頁,進入 Apps Script 編輯器
    ⚠️ 有一次我用公司帳號,怎樣都開不起來,原來是管理員擋了權限。遇到這種狀況,建議先用私人帳號測試。
  2. 清空並貼上程式碼
    動作:全選(Ctrl+A)→ 刪除 → 貼上上面完整程式碼
    位置:編輯器中間白色區域
    結果:舊有內容全數清除,只有這份新程式碼
    ⚠️ 很多新手只貼一小段,結果部署時各種錯誤。一定要全部貼滿!
  3. 儲存專案
    動作:點左上方磁碟片圖示,或 Ctrl+S
    位置:工具列第一個圖示
    結果:跳出視窗,請你輸入專案名稱(隨便取就好)
    ⚠️ 只存檔不部署沒用,很多人這邊停下來以為弄好了…其實還差一步
  4. 部署為網頁應用程式
    動作:點右上角藍色「部署」→「新增部署作業」
    位置:「部署」在畫面右上方
    結果:出現部署視窗
    子步驟:
    1. 點小齒輪,選「網頁應用程式」
    2. 執行身分選「我」
    3. 誰可以存取選「任何人」
    4. 點「部署」
    ⚠️ 「誰可以存取」如果選錯,別人都打不開!我曾經忘了改,還以為系統壞掉。
  5. 處理授權警告
    動作:照流程一直點「授權」、「前往 XXX(不安全)」和「允許」
    結果:看到紅色警告畫面
    處理方式:點進階,再點下方「前往 XXX(不安全)」
    ⚠️ 第一次看到這個畫面會嚇一跳,社群有不少新手以為自己中毒,其實是 Google 還沒驗證你的新程式。
  6. 取得網址,開始使用
    動作:複製畫面顯示的網頁應用程式網址
    位置:授權完畢的最後一個畫面
    結果:貼到瀏覽器就能開始填寫、查詢比較紀錄
    ⚠️ 只要程式有修改,記得「重新部署」才會同步到網頁。上次我忘了重新部署,測試老半天都沒效果。
⚠️ 關於 Google 的紅色授權警告畫面
這個紅色警告是 Google 在你第一次發布新 Apps Script 時的標準安全機制。因為程式尚未經過官方審核,所以 Google 會特別提醒。但只要是你自己寫、自己部署,不會有惡意風險。請放心按照指示點選「進階」→「前往 XXX(不安全)」→「允許」,讓你自己的帳號取得操作權限。
如果以後要分享給同組織或公開使用,每位新使用者也要自己同意一次。不用擔心,這並不是系統錯誤。

高效率應用場景:讓晶相軟體評比透明又能追蹤

研究團隊要開選型會議,常常討論到一半就有人問:「我們去年評過 Thermo-Calc、DICTRA,但評分細節還在某人的私人檔案?」用這工具,把評分、重點和歷史時間一併寫進 Google Sheet,大家都能一鍵查詢。
還有一種場景是 lab member 輪流用不同軟體,心得會隨人流失。這工具可標準化每次紀錄,交接也清楚。
我有個做材料顯微分析的前輩說,這種工具最有用的地方,就是每次有人說「哪個功能比較好」時,可以直接攤開紀錄數據,不用再吵半天。專業,就是這麼省事。

Related to this topic:

Comments