sonnetが解析に使用するメモリ使用量の概算について解説します.メモリ消費はmatrix solveとmatrix fillに分けて考えます. Matrix solveに必要なメモリの節約にはCell Size Calculatorを使ってセルサイズを大きくすることが重要です. Matrix fillに必要なメモリは一般の回路では無視できます.しかし小型化されたアンテナの解析の場合にはmatrix fillに必要なメモリはmatrix solveに必要なメモリより多くなります.
Matrix solve
Matrix solveはその名の通り、連立方程式の求解です. この工程で必要なメモリのほとんどは連立方程式の係数行列の保存に使われます. 係数行列に必要なメモリの量は *1
です.ここに
- N:Number of Subsections
- サブセクションの数
- L:loss
- 損失項がある問題で2, 損失項がない問題では1
- SS:Symmetry Solver
- 0.5です. sonnet V9以前の Level2, 3, Lite, LitePLUS, では1でした.
- MS:Memory Saver
- memory saveをcheckした場合8、それ以外は16
サブセクションは整数個のセルをまとめて形成されます. いくつのセルをひとつのサブセクションにまとめるかは、次の点に配慮が必要です.
- 波長に対するサブセクションの大きさ
- デフォルトでは、サブセクションの大きさは1/20波長以下に設定されます.
- 導体の形状
- 円弧や斜めの形状、丸いvia、などは小さなサブセクションに設定されます.
- speed/memoryの設定
- この設定は通常中央に設定して下さい.その効果についてはこちらに説明してあります.
- Conformal mesh
- Professional版では、斜めや円弧の線路にConformal meshを指定すると巨大なサブセクションを使ってメモリ使用量を大幅に節約できます.
サブセクションをより効果的に制御する詳しい文書が別にあります.また、どんな場合もMatrix solveに必要なメモリの量を減らす最も重要な要素は セルの大きさをなるべく大きくすることです. そのためにCell Size Calculatorの使用を強くお勧めしています.
Matrix fill
Matrix fillは連立方程式の係数行列の各要素を決める工程です.小型アンテナの場合に Matrix fillの工程がMatrix solveの工程より多くのメモリを使うことがあります. Matrix fillの中でも特にフーリエ変換に必要なメモリが非常に大きくなる傾向があります. フーリエ変換に必要なメモリ量の概算は
例えば、セル数がx,y方向それぞれ1024だとすると、 Boxに含まれる全セル数は1024x1024=1048576、 Matrix fillに必要なメモリは 16777216=16MByte となります
一般の回路
一般の回路パターンでこれほどのセル数を使うと、 先にMatrix solveの限界到達するので このMatrix fillの限界を意識することはありません.
一般的なアンテナ
ダイポールアンテナやパッチアンテナでは、アンテナの大きさは1/2波長程度です. その周囲に1波長の空間を確保するとBoxの大きさは概ね2.5波長になります. これをx,y方向それぞれ1024に分割すると、 セルの大きさは1/500波長になります. これはほとんどのアンテナで十分な分解能です.
実際のプログラムの実行にはさらに少々のメモリが必要なので、 SonnetLiteの現実的な限界は768x768程度でしょう.この例では1/2波長ダイポールアンテナを768x768のセルに配置してあります. この場合のセルの大きさは0.0032波長、つまりアンテナ全長に対して0.6%で、十分すぎる分解能です.
極端に小さなアンテナ
例えば1/20波長程度まで小型化したアンテナについて考えて見ます.*2 周囲に1波長の空間を置くとして、解析Boxの大きさは概ね2.05波長になります. それをx,y方向それぞれに768に分割すると、 セルの大きさは0.0027波長、このセルサイズはアンテナ全長の5.4%で、あまり余裕ある分解能とは言えません. しかも悪いことに、こういった極端な小型アンテナでは多くの場合 微細な導体パターンを使ってリアクタンスを装荷したり、 そうでなくても帯域幅が非常に狭く、クリティカルな寸法精度を要求されるので、 アンテナ全長に対して5.4%の分解能では不足する場合が多いでしょう.
セル数(number of cells)の推奨値
セル数を2のN乗あるいは2^Nに設定すると解析時間が短くなります. この効果は アンテナのようにセル数が1000を超えるような場合に重要です. 一般の回路ではセル数が数百程度以下なので重要ではありません.
ある数字がセル数に適しているかを厳密に判定するには、素因数分解します. 1024=2^10ですが、1023=3*11*31, 1022=2*7*73, 1021=1021(素数です!). セル数を素因数分解したとき大きな素数を含むとmatrix fillに長い時間がかかります.
しかしセル数をいちいち素因数分解して判定するのは面倒です. 幸いなことにセル数に適した数値は画面解像度にも適しています.例えば私のPCは1024x800のディスプレイで、1024も800もセル数に適した数値です. 一般に画面解像度に使われる数字はセル数に適しています.
XGA | 1024× 768 |
---|---|
Quad-VGA | 1280× 960 |
SXGA (Super-XGA) | 1280×1024 |
SXGA+ | 1400×1050 |
UXGA (Ultra-XGA) | 1600×1200 |
QXGA (Quad-XGA) | 2048×1536 |
QUXGA (Quad-Ultra-XGA) | 3200×2400 |
QUXGA Wide | 3840×2400 |
これらの数値はすべてセル数に適しています.
- *1
- このメモリ使用量は連立方程式の解法に関する素朴な方法の場合には良く合いますが、 Sonnetの場合にはメモリ使用量と解析時間を節約する様々な工夫が 組み込まれているために実際の数値とは一致しない場合がほとんどです. 飽くまでメモリの使い方を理解するための原則ととらえてください.
- *2
- アンテナの大きさを1/20波長程度まで小型化すると、 アンテナの放射効率は極端に低下し、解析できても、現実のアンテナとしての動作は期待できません.