このチュートリアルでは、スクリプトで記述されたサンプルモデルを使って、そのスクリプトの各部分の意味について説明します。
このチュートリアルの主な内容です。
- Symbolスクリプト言語に関する基本的事項
- スクリプトで書かれたモデル形状を確認する方法
- スクリプトの各部分の説明
- X-Y-ZおよびI-J-K座標の仕組み
- メッシュサイズを含む変数を変更する方法
- モデルのメッシュラインを表示する方法
対応バージョン: OnScale 1.28.10
解析の概要
シングルポートを持つSAW(弾性表面波)フィルターの単一セルモデルを解析します。単一セルモデルで解析することで、デバイス性能を迅速に検討することができます。そのため、複雑な3次元形状での解析を行う事前検討として、非常に幅広く設計検討を行うことができます。
単一セルモデルは、圧電基板、及び基板上一対のアルミニウム電極から構成されています。 基板の材質はタンタル酸リチウム(LiTaO3)またはニオブ酸リチウム(LiNbO3)です。 チュートリアルでは、Yカットをシミュレートするように設定されており、Yカットを目的の角度に回転できます。 基本設計では1.3 µmピッチで使用し、1.5 GHzでせん断水平(SH)モードを生成します。
単一セルモデルは、3次元SAWフィルターのセクションになります。 このモデルにより、SAWフィルターの重要なパラメータを検討することができます。
- インピーダンス/アドミタンス
- Sパラメーター
- モード形状(調和解析)
- エネルギーフロー分析
解析のワークフロー
チュートリアルのワークフローになります。
以下、スクリプトについて説明します。
Step1 - 解析モデルのダウンロード
解析モデルファイルをダウンロードします。
Step2 - Symbol言語の基本事項
解析モデルを説明する前に、Symbol言語の基本的な機能について説明します。
Symbol言語とは、OnScale開発者によって開発された特殊なスクリプト言語です。PythonやMatlabスクリプトを使った経験があれば、理解しやすい言語となっております。
シンボル言語では、変数はコマンドsymbによって定義されます。以下、例を示します。
symb freqint = 1.5e9 symb vel = 3800.
変数名の前に「$」を追加してすることで、スクリプト内で使用できます。例では、波長は以前に定義した2つの変数から計算されます
symb wavelength = $vel / $freqint
行頭の前に「c」を追加することで、行をコメントアウトします。コメントを記入した場合は、コメントの前に「/ *」を入れてください。
c Define frequency and meshing symb freqint = 1.5e9 /* frequency of interest symb vel = 3800. /* minimum velocity
コメントアウト行、及びコメントは緑色で表示されます。コメントを入れることで、スクリプトの可読性が向上します。
SymbolコマンドとOnScale関数の説明について
コマンドや関数の説明が必要な時は、マニュアルで確認することができます。マニュアルはスクリプト上から簡単に開くことができます。
- スクリプト内で意味を確認したいコマンド、関数をクリックします。
- メニュ―の Show Help for "Command Name" (Command Nameは、例えは#keycord)をクリックします。
ヘルプが表示されます。
- コマンドの説明があります。
- コマンドの使用例を紹介しております。
Step3 - スクリプトの開始
OnScale Analystモードのスクリプトは、常に次のコマンドで始まります。コマンドの詳細は、コメントとして記載しております。
c The adds a title and description to output files titl saw_unit_3D 3D Unit Cell Model of SAW Filter c Use all cores on machine mp omp * * c No restart file rest no
Step4 - モデルパラメーターの定義
解析モデル内では、いくつかのキーとなる変数が定義されています。Desingerのみを使う場合は、スクリプト内でユーザ定義した変数をみることはできません、スクリプトを開いたときのみ確認することができます。(スクリプトは.flxinpファイルにて保存されています)
解析モデルでユーザー定義されている変数です。
c Thicknesses symb subs_thk = 7.5e-6 /* substrate thickness symbx elec_thk = 200.e-9 /* electrode thickness c IDT symb fin_pitch = 1.30e-6 /* finger pitch symbx aratio = 0.60 /* metalization aspect ratio symb fin_width = $fin_pitch * $aratio /* finger width symb fin_gap = $fin_pitch - $fin_width /* finger gap symb nfing = 100 /* pairs symb fin_len = 50.e-6 /* finger length c Active material text piezo_mat = 'lt' /* piezo material: 'lt' for LiTaO3, or 'lno' for LiNb03 symb cut_ang = 42. /* rotated y-cut angle c Calculations symb ascal = $nfing * $fin_len / $box symb fin_width2 = $fin_width / 2. symb fin_gap2 = $fin_gap / 2. symb fin_len2 = $fin_len / 2. symb fin_pitch = ( $fin_width + $fin_gap ) * 2. symb simtime = $ncycles / $freqint /* total runtime of the model text piezo_struc = '$(piezo_mat)struc'
これらの変数は、モデル形状を定義しております。
モデル形状以外にも、解析に必要な変数が定義されています。
c Define frequency and meshing symb freqint = 1.5e9 /* frequency of interest symb vel = 3800. /* minimum velocity symb nelem = 20 /* number of elements per wavelength symb wavelength = $vel / $freqint /* calculate wavelength symb box = $wavelength / $nelem /* calculate box size for model symb freqdamp = $freqint /* damping frequency, used in damping models c Runtime symb ncycles = 2500 /* run model for N cycles symb nloops = 10 /* plot model to screen this many times symb tfact = 0.80 /* set time stability factor - default 0.8 c EBond symb nbondopt = 1 /* activate periodic electric boundaries
上記の例は、メッシュサイズを指定するために、周波数とメッシュ設定が使用されています。詳細については、Model Inputs & Meshingの記事をご参照下さい。
Step5 - X-Y-ZおよびI-J-K座標の仕組み
OnScaleでは、2つの座標系を使用しています。
- X-Y-Z座標系: 形状を定義するための座標系
- I-J-K座標系: グリッドの位置を指定する座標系
X-Y-Z座標系の定義は次のようになります。
c Define keypoints in x symb #keycord x 1 0. $fin_gap2 $fin_width $fin_gap $fin_width $fin_gap2 symb #get { idx } rootmax x c Define keypoints in y symb #keycord y 1 0. $box symb #get { jdx } rootmax y c Define keypoints in z symb #keycord z 1 0. $subs_thk $elec_thk symb #get { kdx } rootmax z
I-J-K座標系の定義は次のようになります。
c Define i keypoints symb #keyindx i 1 $idx 1 $box symb indgrd = $i$idx /* store maximum i value - ie. number of nodes in i c Define j keypoints symb #keyindx j 1 $jdx 1 $box symb jndgrd = $j$jdx /* store maximum j value - ie. number of nodes in j c Define k keypoints symb #keyindx k 1 $kdx 1 $box symb kndgrd = $k$kdx /* store maximum j value - ie. number of nodes in j c List symbols symb #list
116行~129行には、ノード, メッシュ, メッシュ数をコンソール出力するためのスクリプトを記載しております。
Step6 - メッシュ・形状の定義サイズの指定
次に紹介する2つのコマンドは必須です。gridコマンドは、メッシュ内のノードの数、メッシュ数を計算し、
c Create grid
grid $indgrd $jndgrd $kndgrd
Geomは、グリッドのノード座標を定義するために使用されます。
c Assign geometry, shortened version
geom keypnt $idx $jdx $kdx
Step7 - 材料物性の定義・設定
材料物性については、Materials & Geometryの記事を参照してください。最後にメッシュの適切な領域にマテリアルを割り当ててジオメトリの設定が完了します。領域の割り当ては、Step5でキーポイントを作成することで簡単になります。
c Read material file
symb #read saw.prjmat
c Assign materials to grid
site
/* Void all of grid
regn void /* initialise all elements by assigning void material
/* Layers
regn $piezo_mat * * * * $k1 $k2
regn $piezo_struc * * * * $k1 $k1+1
/* Electrodes
regn alum1 $i2 $i3 * * $k2 $k3
regn alum2 $i4 $i5 * * $k2 $k3
end
* *を使用すると、その方向の最初のキーポイントから最後のキーポイントまでマテリアルが割り当てられます。サブのコマンドの意味やパラメータの目的については、 コマンドレファレンス(Step 2で説明)。
Step8 - 境界条件の設定
材料物性を割り当てられたので、境界条件を指定します。
c Define external boundary conditions
boun
side zmin absr
side zmax free
end
c Periodic boundaries
bond
defn bperx nchk
cors $i1 $i1 * * * *
fine $indgrd $indgrd * * * *
defn bpery nchk
cors * * $j1 $j1 * *
fine * * $j2 $j2 * *
end
境界条件はBOUNコマンドを使用して定義されます。このチュートリアルでは周期境界を使用しているため、BONDコマンドを使って、周期境界条件を設定します。周期境界は、領域の両端に対して指定し、お互いに平行である必要があります。
Step9 - 入力波形の指定
c Define drive function, can be accessed using 'func' argument
func wvlt $freqint 1.
Step10 - 電極の設定
圧電の負荷はPIEZコマンドを使って定義します。メッシュ領域を使って、圧電負荷の場所が指定されます。またここでも周期境界を定義する必要があります。
c Define piezo solve
piez
/* Define electric window
wndo * * * * $k1 $k2
/* IDT Inner
defn idt1 $ascal
node $i2 $i3 * * $k2 $k2
bc idt1 volt func
/* IDT Outer
defn idt2 $ascal
node $i4 $i5 * * $k2 $k2
bc idt2 grnd
side 1 periodic
side 3 periodic
/* Set solver
slvr pard
end
定義された2つの電極の位置を示します。
Step11 - 計算結果出力の設定
OnScaleの時間履歴データは、モデル内の特定のノード/メッシュについてのデータです。
OnScaleは計算されたデータ配列のいずれかを一連のタイムヒストリーとして生成できます。以下のコード出力行 idt1に接続された入力波形とその電極の電圧と電荷「vq」をvqiに変更して電流を出力することもできます。
モード形状は、ハーモニックアナリシスにより算出します。指定された周波数でDFTを実行することにより挙動を抽出します。これは、変位のデータフィールドに対しても実行できます。モード形状の詳細については、Mode Shape Normalisationを参照してください 。
c Time histories to store
pout
hist func /* #1 Drive function
histname electrode vq idt1 /* #2 - #5 Voltage and charge on each electrode
end
c Mode shapes
shap
twnd $simtime hann righ 1.
freq $freqint
data ydsp
end
Step12 - モデル実行と解析結果の出力
モデルを実行する前に、PRCSコマンドを発行する必要があります。 タイムステップと時間安定性係数の詳細については、リンクされた記事を参照してください。
Is there anyway to speed-up my model?
c Time stability factor
time * * $tfact
c Process model, including setting time step
prcs
解析を実行するために、時間刻み、解析の実時間、およびタイムステップの観点からのシミュレーション時間です。 シミュレーション時間をすでに定義しており、prcsを呼び出すとタイムステップが計算されます。これを変数に格納し、それを使用してタイムステップ(nexec)の観点からシミュレーション時間を計算するだけです。 Nexec2は、すぐに触れるランタイムグラフィックループに使用されます
c Set up run parameters
symb #get { step } timestep /* store timestep size in variable 'step'
symb nexec = $simtime / $step /* simulation time in terms of timesteps
symb nexec2 = $nexec / $nloops /* number of executions in a loop
ループを実行する前に、プロットの設定をします。
c Set up graphics
grph
nvew 2 2 /* two plotting windows
end
これはループを実行するオプション的なやり方で、do loopを使わないdo loopと似ています。この手順は、PROCコマンドを使用して何度も呼び出すことができるスクリプトの一部です。 ここでは、nexec2を使用します。これは、単純なタイムステップでのシミュレーション時間を、表示するループの数で割ったものです。
c Define run/plot procedure
proc plot save
c Run model for some time
exec $nexec2
c Plot current state of model
grph
plot yvel /* plot acoustic velocity in y
plot 3 /* plot charge on top electrode
end
end$ proc /* end of proc
最後に、ファイル.flxdatoを出力さるための設定を行います。これは結果処理に必要なファイルです。詳細は以下のページをご参照下さい。
設定は簡単です。
c Output shape data
data
out modl /* Outputs model geometry
out shap/all /* Outputs all requested mode shapes
end
モデルで使用されているすべてのシンボル変数を出力することで、ユーザーは使用されている設定を理解したり、変数を結果処理用のスクリプト内で読み取ったりすることができます。ダウンロードしたファイル内では出力させていませんが、ユーザーは自由に追加することが可能です。
c save symbols to file for later use
symb #get { label } jobname /* get model job name
symb #save $label.symb /* save symbol file
c end of input file
stop
Step13 - クラウド上で解析実行
モデルの設定が完了しましたので、クライド上で解析を実行します。
- Run on Cloudをクリックします。
- Estimateをクリックして計算で消費するコア時間(概算)を算出します。
- Runをクリックします。
計算終了後、解析結果ファイルをローカルマシンへダウンロードする必要があります。ダウンロードは結果処理を行うために必要です。シミュレーションが完了したら、クラウドストレージにアクセスして結果をダウンロードすると、結果を後処理する準備ができました。
- Storageをクリックします。
- Jobのプルダウンメニューからジョブ名を選択します。
- Downloadをクリックし、Download Allを選択します。
Step14 - 結果処理
結果処理はPost-processorで行います。
DesignerからPost-processorへGUIをスイッチ
アイコンをクリックして、Post-processorのGUIへスイッチします。
解析結果のロード
File Explorerからflxhstファイルとflxdatoファイルをダブルクリックします。flxhstは時間履歴データ、flxdatoファイルは結果の可視化で使用します。
インピーダンス(グラフ)を作成します。作成方法については、以下のページをご参照下さい。作成方法はアドミタンスの場合とまったく同じです。
Extracting Electrical Impedance
同様に、Y方向変位のモード形状のコンター図、あるいはアニメーションを作成します。作成方法については、以下のページをご参照下さい。
Extracting and Viewing Mode Shapes
まとめ
このチュートリアルでは、スクリプトで記述されたサンプルモデルを使って、そのスクリプトの各部分の意味について説明しました。チュートリアルの内容やモデルファイル等が必要でしたら弊社サポートまでお問合せ下さい。