域有限差分法FDTD全解析:從核心原理到工程實(shí)踐)
做高頻電磁仿真的人幾乎繞不開時(shí)域有限差分法也就是大家常說的FDTD。你去看天線設(shè)計(jì)、微波器件優(yōu)化、電磁兼容評(píng)估甚至超材料研究凡是涉及寬頻帶響應(yīng)或者需要觀察場隨時(shí)間演化的問題FDTD往往是第一個(gè)被搬出來的工具。它的思路直白到讓人覺得這不就是把麥克斯韋方程組差分化然后一步步推嗎但真正把FDTD用順手的工程師都知道從Yee網(wǎng)格的構(gòu)造到PML邊界的設(shè)置每一個(gè)環(huán)節(jié)都有講究稍不注意就是仿真發(fā)散或者結(jié)果偏差大得離譜。這篇內(nèi)容我想把FDTD的底子完整梳理一遍從它為什么適合高頻電磁場仿真到網(wǎng)格、時(shí)間步長、邊界條件這些核心概念怎么理解再到工程實(shí)操中怎么建模、怎么設(shè)置監(jiān)視器、怎么排查報(bào)錯(cuò)。特別是很多人在軟件里遇到過can not open a connection to MATLAB和資源分配的問題這類環(huán)境問題看著小但卡起人來真要命我會(huì)把排查思路一并寫清楚。無論你是剛接觸電磁仿真的學(xué)生還是工作中需要快速上手FDTD的工程師這篇文章都對(duì)你適用。1. 為什么高頻電磁場仿真離不開FDTD1.1 FDTD的核心思想其實(shí)很樸素FDTD的全稱是Finite-Difference Time-Domain時(shí)域有限差分法。它的核心思想用一句話概括把麥克斯韋方程組中兩個(gè)旋度方程在時(shí)間和空間上做差分離散然后按照時(shí)間步一步步推進(jìn)算出電磁場在每個(gè)網(wǎng)格點(diǎn)上的值。這句話聽起來簡單但背后有著深刻的物理含義。麥克斯韋方程組描述的是電場和磁場相互激發(fā)的關(guān)系——變化的電場產(chǎn)生磁場變化的磁場產(chǎn)生電場。FDTD正好把這種你變我變的耦合關(guān)系用時(shí)間上的蛙跳格式表達(dá)出來先更新電場再用新電場更新磁場如此循環(huán)往復(fù)電磁波就在網(wǎng)格中一步步傳播開來。這種方式有一個(gè)天然的好處它不需要求解大型矩陣方程每一步的計(jì)算量只和相鄰網(wǎng)格相關(guān)。對(duì)比有限元法動(dòng)輒要組裝和求解稀疏矩陣FDTD的計(jì)算模式對(duì)內(nèi)存和并行計(jì)算都友好得多。實(shí)際用起來你就會(huì)發(fā)現(xiàn)FDTD跑同一個(gè)模型時(shí)內(nèi)存消耗基本是可以提前估算的運(yùn)行時(shí)間也大致能推算出來這種可預(yù)估性在工程排期里非常關(guān)鍵。項(xiàng)目做到后面要算參數(shù)掃描FDTD這種天然的時(shí)域算法配合傅里葉變換一次仿真就能拿到整個(gè)頻帶的結(jié)果效率優(yōu)勢(shì)非常明顯。1.2 FDTD和其他仿真方法的選型對(duì)比高頻電磁仿真這個(gè)領(lǐng)域方法選擇其實(shí)不少。除了FDTD之外常見的有有限元法FEM、矩量法MoM還有一些高頻近似方法。每種方法都有自己的地盤選錯(cuò)方法通常意味著要么算不動(dòng)要么算出來的東西根本不能用。方法數(shù)值原理優(yōu)勢(shì)劣勢(shì)適合場景FDTD時(shí)域有限差分寬帶一次算完、天然支持非線性、并行好網(wǎng)格量大、色散媒質(zhì)建模繁瑣天線、散射、EMC、超材料FEM頻域變分/加權(quán)殘差幾何適應(yīng)性強(qiáng)、精度高寬帶需要多頻點(diǎn)掃描、內(nèi)存大復(fù)雜結(jié)構(gòu)、各向異性媒質(zhì)、特征值問題MoM積分方程邊界離散金屬結(jié)構(gòu)效率極高介質(zhì)體處理困難、矩陣稠密金屬天線、RCS、PCB走線從上面這個(gè)對(duì)比就能看出來FDTD的優(yōu)勢(shì)集中在寬頻帶和時(shí)域響應(yīng)這兩個(gè)維度。比如你做微帶天線的S參數(shù)仿真若用頻域FEM得在frequencies列表里一個(gè)個(gè)設(shè)置頻點(diǎn)算完一個(gè)頻點(diǎn)再算下一個(gè)而FDTD只需要設(shè)置一個(gè)寬頻脈沖激勵(lì)源跑完一次就能得到寬頻范圍內(nèi)連續(xù)的S參數(shù)曲線再通過傅里葉變換把時(shí)域信號(hào)轉(zhuǎn)換到頻域。這種一次性獲取全部頻點(diǎn)的特性讓FDTD在設(shè)計(jì)初期驗(yàn)證階段特別好用。說一個(gè)我自己的體會(huì)如果只是算一個(gè)結(jié)構(gòu)單一、Q值又高的諧振器FDTD反而會(huì)吃虧因?yàn)楦逹結(jié)構(gòu)在時(shí)域里衰減得非常慢需要跑非常多的時(shí)間步才能收斂到頻域精度。這種場景還是老老實(shí)實(shí)用頻域方法更合適。FDTD不是萬能藥但它在多數(shù)高頻工程場景下是最順手的那把刀。1.3 典型的應(yīng)用領(lǐng)域高頻電磁場仿真中FDTD被用得最多的方向集中在以下幾個(gè)方面天線設(shè)計(jì)與優(yōu)化。微帶貼片天線、Vivaldi天線、陣列天線的S參數(shù)、方向圖、效率計(jì)算FDTD都能處理。電磁散射與RCS評(píng)估。目標(biāo)被雷達(dá)波照射后的散射場分布FDTD天然適合寬角、寬頻的掃掠。電磁兼容分析。PCB板級(jí)輻射、屏蔽效能、線纜耦合等問題的定性定量評(píng)估。超材料與周期結(jié)構(gòu)。SRR、開口環(huán)陣列這種周期單元的透射反射特性FDTD配合周期邊界條件做起來很高效。光電器件與納米光學(xué)。納米天線、等離激元結(jié)構(gòu)的近場增強(qiáng)效應(yīng)FDTD也是標(biāo)配工具。熟悉一個(gè)工具最好的方式就是把它放到真實(shí)場景里去解決問題。接下來我把FDTD底層這些核心概念講透這些概念你理解得越深用起來就越不會(huì)翻車。2. FDTD基礎(chǔ)核心概念編程與仿真前必須吃透的東西2.1 Yee網(wǎng)格的空間布局麥克斯韋方程組的天然坐標(biāo)FDTD把連續(xù)空間離散化的方式非常有講究這是1966年Kane Yee的經(jīng)典工作。Yee網(wǎng)格的核心設(shè)計(jì)是電場分量和磁場分量在空間位置上交錯(cuò)分布電場落在網(wǎng)格棱邊的中點(diǎn)磁場落在網(wǎng)格面的中心具體來說就是電場E的每個(gè)分量周圍繞著四個(gè)磁場H分量磁場H的每個(gè)分量周圍繞著四個(gè)電場E分量兩者在空間上正好錯(cuò)開半個(gè)網(wǎng)格長度。這種交錯(cuò)排布不是隨便設(shè)計(jì)的它直接對(duì)應(yīng)了法拉第電磁感應(yīng)定律和安培環(huán)路定律的積分形式。兩個(gè)旋度方程都涉及環(huán)量計(jì)算電場被磁場環(huán)繞、磁場被電場環(huán)繞用交錯(cuò)網(wǎng)格去離散正好讓每個(gè)環(huán)路積分都落在一圈相鄰分量上使得空間導(dǎo)數(shù)可以用中心差分近似精度直接達(dá)到二階。如果像教科書里樸素地想當(dāng)然把電場和磁場放在同一位置那差分格式會(huì)出現(xiàn)奇偶解耦和非物理的偽解仿真結(jié)果慘不忍睹。在主流商業(yè)軟件里網(wǎng)格劃分這個(gè)環(huán)節(jié)你已經(jīng)不需要自己寫Yee網(wǎng)格的代碼了但從底層理解這個(gè)布局能幫你搞清楚一件事為什么仿真文件里有些監(jiān)視器位置會(huì)有微小的偏移那是因?yàn)槟惴诺膱霰O(jiān)視器必須落在網(wǎng)格點(diǎn)上軟件有時(shí)會(huì)自動(dòng)吸附到最近的網(wǎng)格節(jié)點(diǎn)而電場和磁場的網(wǎng)格點(diǎn)位置本身就不一樣所以提取電場和磁場時(shí)監(jiān)視器位置可能會(huì)略有差異。這個(gè)現(xiàn)象我在帶新人時(shí)經(jīng)常提到很多人不理解以為是軟件bug。2.2 中心差分與蛙跳推進(jìn)時(shí)域迭代的基本盤FDTD的另一個(gè)精髓在于時(shí)間推進(jìn)方式??臻g上用中心差分近似時(shí)間上電場和磁場采用交替更新的策略從第n個(gè)時(shí)間步的電場出發(fā)計(jì)算第n1/2步的磁場再用新磁場計(jì)算第n1步的電場??雌饋硐袂嗤茉谒嫣S時(shí)左右腳交替點(diǎn)水所以叫蛙跳格式。時(shí)間導(dǎo)數(shù)的中心差分同樣能保證二階精度。每一步迭代只涉及相鄰網(wǎng)格之間的數(shù)據(jù)交換不需要任何全局矩陣的組裝和求逆。這意味著算法的核心循環(huán)體特別簡單非常適合并行化處理無論是多核CPU還是GPU加速性能都能接近線性擴(kuò)展。這也是為什么FDTD在商業(yè)軟件中幾乎都標(biāo)配了GPU加速選項(xiàng)。實(shí)際仿真中的很多參數(shù)配置都和這種推進(jìn)方式有關(guān)。比如你會(huì)在軟件界面看到仿真時(shí)間設(shè)置單位從某些軟件來看是femtoseconds或picoseconds這個(gè)設(shè)置本質(zhì)上是控制時(shí)間步數(shù)。時(shí)間步太長會(huì)發(fā)散太短又會(huì)浪費(fèi)計(jì)算資源這個(gè)問題恰好引出了穩(wěn)定性的約束條件。2.3 CFL穩(wěn)定性條件時(shí)間步長的上限紅線FDTD不是任意取時(shí)間步長都能穩(wěn)定推進(jìn)的。Courant, Friedrichs和Lewy三人提出過一個(gè)著名的穩(wěn)定性條件簡稱CFL條件。對(duì)于三維均勻網(wǎng)格這個(gè)條件可以寫成c * Δt 1 / sqrt(1/Δx^2 1/Δy^2 1/Δz^2)其中c是媒質(zhì)中的光速Δt是時(shí)間步長Δx、Δy、Δz是三個(gè)方向的空間網(wǎng)格尺寸。這個(gè)條件的物理含義很直觀在一個(gè)時(shí)間步內(nèi)電磁波傳播的距離不能超過一個(gè)網(wǎng)格對(duì)角線的一半。如果時(shí)間步長太大數(shù)值信息傳播速度超過物理波動(dòng)速度仿真就會(huì)指數(shù)發(fā)散場值漲到天文數(shù)字程序直接報(bào)錯(cuò)或者返回NaN。用一維均勻網(wǎng)格舉例若網(wǎng)格Δx 0.1 mm媒質(zhì)為真空c約等于3e8 m/s那么Δt不能超過 0.1e-3 / 3e8 ≈ 3.3e-13秒也就是0.33皮秒。實(shí)際工程中通常會(huì)取這個(gè)極限值的70%到90%作為安全余量留出數(shù)值色散的控制空間。商業(yè)軟件一般會(huì)自動(dòng)判斷時(shí)間步長不需要手動(dòng)設(shè)置但在定制開發(fā)或腳本中你得自己算否則踩了雷都不知道。2.4 PML完美匹配層怎么把無窮大空間裝進(jìn)有限網(wǎng)格FDTD的計(jì)算區(qū)域必然是有邊界的但實(shí)際物理空間是無限大的電磁波發(fā)射到邊界不應(yīng)該被反射回來。如果簡單地設(shè)置成理想導(dǎo)體邊界電場切向分量為零出射波會(huì)被全反射回來在計(jì)算區(qū)域里反復(fù)振蕩仿真結(jié)果完全失真。解決這個(gè)問題的經(jīng)典方案是Berenger在1994年提出的完美匹配層PML。PML的思想是在計(jì)算區(qū)域外圈加一層專門設(shè)計(jì)的虛擬媒質(zhì)層這層媒質(zhì)的阻抗和內(nèi)部區(qū)域完全匹配電磁波進(jìn)入PML后不會(huì)產(chǎn)生反射同時(shí)PML內(nèi)部具有強(qiáng)烈的損耗特性波在PML內(nèi)迅速衰減經(jīng)過十幾個(gè)網(wǎng)格后能量基本被吸收殆盡等效于實(shí)現(xiàn)了無反射截?cái)?。工程上你不需要自己?shí)現(xiàn)PML算法商業(yè)軟件都已內(nèi)置但你需要理解兩個(gè)關(guān)鍵點(diǎn)一是PML層數(shù)要足夠一般建議8到16層太少會(huì)導(dǎo)致邊界反射二是PML不適合放在非??拷鼜?qiáng)場源的位置因?yàn)榧?lì)源附近的倏逝場含有大量低頻分量進(jìn)入PML后可能會(huì)引起不期望的反射。所以建模時(shí)場源或目標(biāo)結(jié)構(gòu)距離邊界至少要留有半個(gè)波長以上的空間距離。2.5 激勵(lì)源的類型與設(shè)置原則FDTD仿真之所以能做到寬帶一次計(jì)算靠的就是激勵(lì)源的設(shè)計(jì)。最常用的是高斯脈沖和調(diào)制高斯脈沖。普通高斯脈沖在頻域上同樣是一個(gè)高斯形狀它的中心頻率是零這意味著能量集中在低頻。如果關(guān)心的是某個(gè)中心頻率附近的響應(yīng)最好用調(diào)制高斯脈沖它把高斯頻譜搬移到目標(biāo)頻率附近既能覆蓋感興趣的頻帶又能減少不必要的低頻能量浪費(fèi)。實(shí)際工程中還有一個(gè)常見的選擇是寬帶脈沖的頻譜寬度。脈沖越窄時(shí)域越尖銳頻域覆蓋越寬但脈沖過窄會(huì)導(dǎo)致數(shù)值色散誤差增加。一個(gè)經(jīng)驗(yàn)準(zhǔn)則是脈沖頻譜的高頻截止頻率大概選為目標(biāo)仿真頻率上限的1.5到2倍。比如天線仿真頻率到10GHz脈沖頻譜截止到15GHz或20GHz這樣既能保證10GHz處的結(jié)果準(zhǔn)確又不至于讓分辨率過大的網(wǎng)格壓力劇增。3. 實(shí)操過程從建模到仿真結(jié)果的關(guān)鍵環(huán)節(jié)3.1 幾何建模與網(wǎng)格劃分決定成敗的第一步實(shí)際軟件操作中第一步當(dāng)然是幾何建模。無論是導(dǎo)入CAD圖紙還是在軟件原生環(huán)境里畫結(jié)構(gòu)都涉及到網(wǎng)格劃分。網(wǎng)格尺寸的選擇對(duì)整個(gè)仿真的成敗起著決定性作用。網(wǎng)格太粗幾何細(xì)節(jié)丟失相位誤差累積諧振頻率偏移結(jié)果根本沒有參考價(jià)值。網(wǎng)格太細(xì)三個(gè)方向各加密一倍網(wǎng)格總數(shù)膨脹八倍內(nèi)存和時(shí)間消耗可能增長數(shù)十倍仿真根本跑不動(dòng)。經(jīng)驗(yàn)法則是最小網(wǎng)格尺寸取感興趣頻帶最高頻率對(duì)應(yīng)波長的十分之一到二十分之一對(duì)于精細(xì)結(jié)構(gòu)如微帶線寬度、貼片天線與地之間的介質(zhì)層厚度則需要單獨(dú)局部加密。這里給一個(gè)直觀的實(shí)例一個(gè)工作在5GHz的微帶貼片天線自由空間波長約60mm按十分之一波長算網(wǎng)格大約6mm介質(zhì)層厚度通常只有1.6mm所以垂直方向網(wǎng)格必須加密到0.2mm到0.4mm才夠用。這就是為什么FDTD模型里網(wǎng)格往往不是均勻的而是在關(guān)鍵區(qū)域局部加密。商業(yè)軟件中的自動(dòng)非均勻網(wǎng)格技術(shù)正是為了解決這個(gè)問題。設(shè)置網(wǎng)格時(shí)我會(huì)先用默認(rèn)網(wǎng)格跑一遍再看關(guān)鍵頻點(diǎn)處的S參數(shù)是否收斂如果有明顯誤差就逐步加密觀察結(jié)果變化直到變化在可接受范圍內(nèi)。這套網(wǎng)格無關(guān)性驗(yàn)證的流程每個(gè)做仿真的人都應(yīng)該養(yǎng)成習(xí)慣。3.2 邊界條件、材料參數(shù)與監(jiān)視器的正確配置邊界條件的設(shè)置在軟件界面里相對(duì)直觀通常就是選擇PML、周期邊界、Bloch邊界或者理想導(dǎo)體邊界。PML適用于輻射問題周期邊界適用于周期性結(jié)構(gòu)仿真。材料參數(shù)方面高頻仿真中損耗是不可忽略的。介電常數(shù)虛部會(huì)帶來介質(zhì)損耗電導(dǎo)率會(huì)帶來導(dǎo)體損耗。設(shè)置時(shí)要注意單位統(tǒng)一常規(guī)軟件里介電常數(shù)默認(rèn)是相對(duì)值但電導(dǎo)率可能默認(rèn)是S/m計(jì)算趨膚深度時(shí)很容易搞混。金屬材料在高頻下要關(guān)注表面粗糙度的影響這個(gè)細(xì)節(jié)在低頻不用管到了毫米波頻段影響就不小了。監(jiān)視器是數(shù)據(jù)提取的關(guān)鍵配置。時(shí)域監(jiān)視器記錄場值隨時(shí)間的變化頻域監(jiān)視器在仿真過程中持續(xù)累積傅里葉變換結(jié)果仿真結(jié)束時(shí)直接給出該頻點(diǎn)的頻域場分布。實(shí)際工程中端口S參數(shù)用端口監(jiān)視器提取遠(yuǎn)場方向圖需要先設(shè)置一個(gè)包圍結(jié)構(gòu)的三維頻域監(jiān)視器軟件會(huì)基于等效原理自動(dòng)外推遠(yuǎn)場。這塊我踩過一個(gè)坑監(jiān)視器設(shè)置區(qū)域太靠近邊界時(shí)由于PML吸收不完全提取到的場會(huì)包含微弱反射波干擾導(dǎo)致方向圖有虛假波紋后來把監(jiān)視器內(nèi)移了半個(gè)波長位置才解決。3.3 仿真步數(shù)與自動(dòng)終止條件的把控FDTD仿真時(shí)間的設(shè)置也是門學(xué)問。仿真時(shí)間太短低頻分量的響應(yīng)還沒完全建立傅里葉變換結(jié)果不準(zhǔn)甚至完全錯(cuò)誤仿真時(shí)間太長白白消耗計(jì)算資源。合理的做法是讓仿真一直運(yùn)行到計(jì)算區(qū)域內(nèi)電磁場能量衰減到足夠低的水平。主流軟件一般提供自動(dòng)終止功能設(shè)定一個(gè)能量衰減閾值比如默認(rèn)-30dB或-60dB。判斷標(biāo)準(zhǔn)是監(jiān)視器檢測(cè)到的最強(qiáng)場值衰減到峰值的一定比例以下就認(rèn)為仿真收斂。對(duì)于高Q結(jié)構(gòu)場衰減非常慢需要特別多的步數(shù)這種情況下如果確實(shí)需要高精度頻域結(jié)果不妨換成頻域求解器如果必須要用FDTD可以通過加大激勵(lì)脈沖的頻帶或者采用諧波激勵(lì)算法來加速收斂。運(yùn)行時(shí)間的預(yù)估也值得說一句總時(shí)間步數(shù)大致等于仿真總時(shí)長除以時(shí)間步長。而時(shí)間步長又由最小網(wǎng)格尺寸決定。所以網(wǎng)格越細(xì)每一步走的時(shí)間越短需要的總步數(shù)就越多。理解了這個(gè)鏈條你就知道為什么FDTD在過于細(xì)密的網(wǎng)格下會(huì)陷入算不起的困境。3.4 結(jié)果提取、S參數(shù)與遠(yuǎn)場的后處理細(xì)節(jié)仿真結(jié)束后數(shù)據(jù)后處理是整個(gè)流程的收口部分。S參數(shù)可以直接查看但這里的物理含義需要謹(jǐn)慎確認(rèn)S11是反射系數(shù)S21是插損或傳輸系數(shù)這些都是相對(duì)于端口參考阻抗歸一化的結(jié)果。高頻變壓器、功分器這類器件仿真時(shí)還涉及多端口去嵌入需要將參考面平移到實(shí)際關(guān)心的位置。遠(yuǎn)場方向圖的后處理同樣有講究。軟件外推遠(yuǎn)場默認(rèn)是三維全空間方向圖但工程上更關(guān)心特定切面的方向圖比如E面和H面。處理時(shí)要注意角度分辨率的設(shè)置太粗會(huì)漏掉副瓣太細(xì)會(huì)引入數(shù)值紋波。另外如果用FDTD算天線的增益務(wù)必確認(rèn)輸入功率的參考值很多增益偏低的仿真結(jié)果其實(shí)就是因?yàn)槎丝诠β蕷w一化設(shè)置不當(dāng)。后處理做完還需要一套驗(yàn)證手段確保結(jié)果可信。最常用的是網(wǎng)格無關(guān)性驗(yàn)證和能量守恒驗(yàn)證。能量守恒驗(yàn)證可以檢查S參數(shù)之和是否接近1無耗結(jié)構(gòu)如果S11和S21的功率和明顯大于1說明仿真有源項(xiàng)異?;驍?shù)值不穩(wěn)定需要回頭查激勵(lì)設(shè)置和邊界條件。4. 高頻問題排查MATLAB連接失敗與資源設(shè)置的實(shí)戰(zhàn)記錄4.1 can not open a connection to MATLAB的根因分析在做電磁仿真數(shù)據(jù)后處理時(shí)很多人習(xí)慣把FDTD的結(jié)果導(dǎo)到MATLAB里做二次分析。但軟件經(jīng)常報(bào)錯(cuò)can not open a connection to MATLAB第一次遇到時(shí)真叫人摸不著頭腦。這個(gè)報(bào)錯(cuò)的本質(zhì)是FDTD軟件通過MATLAB引擎接口跟本機(jī)的MATLAB進(jìn)程建立通信連接失敗。常見原因有這么幾類MATLAB版本超出了FDTD軟件的支持范圍。商業(yè)軟件對(duì)MATLAB版本有明確的兼容性列表版本太新或太舊都會(huì)導(dǎo)致連接庫不匹配。MATLAB引擎服務(wù)所需的動(dòng)態(tài)庫沒有正確注冊(cè)到系統(tǒng)環(huán)境中。防火墻或安全軟件攔截了兩個(gè)進(jìn)程之間的本地端口通信。MATLAB開啟了啟動(dòng)慢的現(xiàn)象超時(shí)自動(dòng)斷開。環(huán)境變量PATH里沒有包含MATLAB的engine目錄。排查時(shí)我會(huì)按下面的順序來確認(rèn)FDTD軟件版本對(duì)應(yīng)的MATLAB兼容版本通過官方文檔或軟件安裝目錄下的說明核對(duì)。檢查本機(jī)MATLAB是否能正常獨(dú)立啟動(dòng)。查看軟件設(shè)置的MATLAB路徑確保指向了正確的MATLAB安裝目錄。臨時(shí)關(guān)閉防火墻做一次測(cè)試排除網(wǎng)絡(luò)攔截原因。在MATLAB命令行里手動(dòng)執(zhí)行引擎啟動(dòng)測(cè)試確認(rèn)引擎模塊能正常加載。這個(gè)方法框架解決問題的時(shí)間一般在半小時(shí)以內(nèi)。如果確認(rèn)是版本兼容性問題最快速的方案是換用被支持的MATLAB版本或者用軟件自帶的腳本接口直接做數(shù)據(jù)導(dǎo)出繞開實(shí)時(shí)連接需求。4.2 resource資源設(shè)置內(nèi)存和計(jì)算資源的合理分配FDTD仿真吃內(nèi)存是出了名的。很多模型跑掛不是因?yàn)樗惴▎栴}而是內(nèi)存不足。運(yùn)行仿真前需要根據(jù)模型規(guī)模估算內(nèi)存需求總網(wǎng)格數(shù)乘以每個(gè)網(wǎng)格需要的變量字節(jié)數(shù)再乘以一定的系數(shù)。軟件中resource設(shè)置的核心參數(shù)包括參數(shù)作用建議內(nèi)存上限限制仿真進(jìn)程使用RAM的最大值留出系統(tǒng)內(nèi)存20%-30%給其他程序核心線程數(shù)決定并行計(jì)算使用的CPU核心數(shù)量與許可證和CPU核數(shù)匹配不是越多越好GPU加速使用顯卡進(jìn)行場更新計(jì)算顯存必須大于模型的內(nèi)存需求否則溢出網(wǎng)格內(nèi)存優(yōu)化通過壓縮技術(shù)減少內(nèi)存占用網(wǎng)格數(shù)很大時(shí)打開犧牲少量性能換取容量我實(shí)際項(xiàng)目中遇到最多的問題是用戶在開啟GPU加速時(shí)選了極大網(wǎng)格模型但顯卡顯存只有8GB結(jié)果仿真進(jìn)程直接崩潰。這時(shí)正確的做法是把模型拆成子區(qū)域或者改用CPU多核并行。資源設(shè)置的核心原則是內(nèi)存優(yōu)先于速度。FDTD跑得慢一點(diǎn)還能接受內(nèi)存溢出演算到一半崩潰才是最令人抓狂的。另外還要注意一個(gè)細(xì)節(jié)多核并行時(shí)線程數(shù)不是越大越好的。當(dāng)線程數(shù)超過物理核心數(shù)時(shí)線程切換開銷反而會(huì)讓仿真變慢。在設(shè)置資源時(shí)按CPU物理核心數(shù)配置線程數(shù)是比較穩(wěn)妥的選擇超線程帶來的增益在實(shí)際仿真中幾乎可以忽略。4.3 仿真發(fā)散、能量不守恒與PML反射的排查思路仿真發(fā)散是FDTD新手的噩夢(mèng)。場值越來越大直到溢出NaN。排查思路依次檢查三件事第一時(shí)間步長是否滿足CFL條件。雖然商業(yè)軟件會(huì)自動(dòng)確定時(shí)間步長但在某些特殊情況如自定義媒質(zhì)參數(shù)過小、網(wǎng)格嚴(yán)重畸變下軟件判定的時(shí)間步可能不夠嚴(yán)格。第二材料參數(shù)是否合法。負(fù)介電常數(shù)或負(fù)磁導(dǎo)率在高頻仿真里用于某些人工電磁材料建模但如果設(shè)置不當(dāng)會(huì)導(dǎo)致迭代不穩(wěn)定。第三激勵(lì)源是否有太陡峭的上升沿。脈沖源帶寬過大時(shí)高頻分量在粗網(wǎng)格上數(shù)值色散嚴(yán)重同樣會(huì)引起數(shù)值不穩(wěn)定性。能量不守恒往往和邊界反射有關(guān)。檢查方法很簡單在計(jì)算區(qū)域內(nèi)部距離邊界半個(gè)波長處各放一個(gè)平面監(jiān)視器比較入射波與反射波的能量比值。如果PML反射太大就調(diào)高PML層數(shù)或增大結(jié)構(gòu)與邊界的距離。4.4 仿真速度優(yōu)化的幾個(gè)實(shí)用技巧仿真速度優(yōu)化是很多人關(guān)心的點(diǎn)。我總結(jié)幾個(gè)成本最低見效最快的手段利用對(duì)稱性。如果模型幾何和激勵(lì)都有對(duì)稱面可以只仿真四分之一甚至八分之一模型網(wǎng)格量直接縮減到原來的四分之一到八分之一。合理設(shè)置仿真頻帶。激勵(lì)脈沖的頻帶只要覆蓋你關(guān)心的頻率范圍即可沒必要為超寬頻帶付出額外的網(wǎng)格代價(jià)。遠(yuǎn)場監(jiān)視器的使用策略。遠(yuǎn)場用三維頻域監(jiān)視器外推時(shí)內(nèi)存占用很高如果只關(guān)心特定切面某些軟件允許只計(jì)算指定角度的遠(yuǎn)場這樣可以在設(shè)置中省掉大量內(nèi)存。用腳本批量做參數(shù)掃描時(shí)將上一次的運(yùn)行結(jié)果作為下一次的初始場可以加速后續(xù)仿真收斂。對(duì)于多端口問題用一次激勵(lì)源加后處理的方式提取所有端口的響應(yīng)避免重復(fù)運(yùn)行多個(gè)仿真。這些技巧在項(xiàng)目任務(wù)重、時(shí)間緊的時(shí)候能幫你節(jié)省大量時(shí)間。5. 個(gè)人經(jīng)驗(yàn)FDTD這套方法怎么學(xué)才能少走彎路學(xué)了這么多年也踩了不少坑我對(duì)FDTD最深的體會(huì)是它是一門先能用、后能懂的技術(shù)。如果你還在學(xué)習(xí)階段我的建議是先用現(xiàn)成的軟件跑通一個(gè)標(biāo)準(zhǔn)例程比如矩形微帶天線仔細(xì)感受網(wǎng)格設(shè)置、仿真時(shí)長、邊界條件這些參數(shù)對(duì)結(jié)果的影響。跑通之后再回頭啃理論你會(huì)發(fā)現(xiàn)Yee網(wǎng)格、CFL條件和PML這些抽象概念都有了具象的落腳點(diǎn)。另外做仿真一定要培養(yǎng)懷疑結(jié)果的習(xí)慣。軟件給出的彩色云圖往往很漂亮但漂亮的圖不等于正確的結(jié)果。每跑完一個(gè)模型我都會(huì)做三件事看一眼S參數(shù)有沒有明顯違背物理常識(shí)的地方做一次網(wǎng)格加密對(duì)比確認(rèn)結(jié)果收斂用能量守恒或與解析解對(duì)比的方法校驗(yàn)準(zhǔn)確性。這三點(diǎn)做好了仿真結(jié)果的質(zhì)量就有基本保證。最后分享一個(gè)小技巧在提交大規(guī)模仿真任務(wù)之前先用粗網(wǎng)格跑一個(gè)快速版本確認(rèn)整體流程沒問題模型設(shè)置沒報(bào)錯(cuò)再加密網(wǎng)格提交正式任務(wù)。這樣做能避免因?yàn)閰?shù)設(shè)置錯(cuò)誤導(dǎo)致長時(shí)間仿真白跑的情況。時(shí)間就是成本仿真里的時(shí)間尤其如此。希望這篇內(nèi)容能幫你把FDTD的框架搭建起來后面遇到具體問題時(shí)不至于手足無措。