3次元SAWユニットセル解析

このチュートリアルでは、スクリプトで記述されたサンプルモデルを使って、そのスクリプトの各部分の意味について説明します。

このチュートリアルの主な内容です。

  • Symbolスクリプト言語に関する基本的事項
  • スクリプトで書かれたモデル形状を確認する方法
  • スクリプトの各部分の説明
  • X-Y-ZおよびI-J-K座標の仕組み
  • メッシュサイズを含む変数を変更する方法
  • モデルのメッシュラインを表示する方法

対応バージョン: OnScale 1.28.10

解析の概要

シングルポートを持つSAW(弾性表面波)フィルターの単一セルモデルを解析します。単一セルモデルで解析することで、デバイス性能を迅速に検討することができます。そのため、複雑な3次元形状での解析を行う事前検討として、非常に幅広く設計検討を行うことができます。

単一セルモデルは、圧電基板、及び基板上一対のアルミニウム電極から構成されています。 基板の材質はタンタル酸リチウム(LiTaO3)またはニオブ酸リチウム(LiNbO3)です。 チュートリアルでは、Yカットをシミュレートするように設定されており、Yカットを目的の角度に回転できます。 基本設計では1.3 µmピッチで使用し、1.5 GHzでせん断水平(SH)モードを生成します。

im2.png

単一セルモデルは、3次元SAWフィルターのセクションになります。 このモデルにより、SAWフィルターの重要なパラメータを検討することができます。

  • インピーダンス/アドミタンス
  • Sパラメーター
  • モード形状(調和解析)
  • エネルギーフロー分析

解析のワークフロー

チュートリアルのワークフローになります。

以下、スクリプトについて説明します。

Step1 - 解析モデルのダウンロード

解析モデルファイルをダウンロードします。

Download: SAW 3D Unit Cell

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関数の説明について

コマンドや関数の説明が必要な時は、マニュアルで確認することができます。マニュアルはスクリプト上から簡単に開くことができます。

  1. スクリプト内で意味を確認したいコマンド、関数をクリックします。
  2. メニュ―の Show Help for "Command Name" (Command Nameは、例えは#keycord)をクリックします。

3Dsawanalysttuto1.png

ヘルプが表示されます。

  1. コマンドの説明があります。
  2. コマンドの使用例を紹介しております。

3Dsawanalysttuto2.png

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'

これらの変数は、モデル形状を定義しております。

3Dsawanalysttuto4.png

モデル形状以外にも、解析に必要な変数が定義されています。

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 - 入力波形の指定

負荷条件を設定する前に、入力波形が必要です。波形の定義は、funcコマンドで行います。 OnScaleでは、広帯域性能と中心周波数の2.5倍を超える低いスペクトル漏れのため、リッカーウェーブレット(wvlt)時間関数の使用を推奨しています。
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つの電極の位置を示します。

mceclip2.png

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を出力さるための設定を行います。これは結果処理に必要なファイルです。詳細は以下のページをご参照下さい。

Model Outputs

設定は簡単です。

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 - クラウド上で解析実行

 モデルの設定が完了しましたので、クライド上で解析を実行します。

  1. Run on Cloudをクリックします。
  2. Estimateをクリックして計算で消費するコア時間(概算)を算出します。
  3. Runをクリックします。

mceclip3.png

計算終了後、解析結果ファイルをローカルマシンへダウンロードする必要があります。ダウンロードは結果処理を行うために必要です。シミュレーションが完了したら、クラウドストレージにアクセスして結果をダウンロードすると、結果を後処理する準備ができました。

  1. Storageをクリックします。
  2. Jobのプルダウンメニューからジョブ名を選択します。
  3. Downloadをクリックし、Download Allを選択します。
mceclip4.png

Step14 - 結果処理

結果処理はPost-processorで行います。

DesignerからPost-processorへGUIをスイッチ

アイコンをクリックして、Post-processorのGUIへスイッチします。 

mceclip2.png

解析結果のロード

File Explorerからflxhstファイルとflxdatoファイルをダブルクリックします。flxhstは時間履歴データ、flxdatoファイルは結果の可視化で使用します。

インピーダンス(グラフ)を作成します。作成方法については、以下のページをご参照下さい。作成方法はアドミタンスの場合とまったく同じです。

Extracting Electrical Impedance

mceclip6.png

同様に、Y方向変位のモード形状のコンター図、あるいはアニメーションを作成します。作成方法については、以下のページをご参照下さい。

Extracting and Viewing Mode Shapes

mceclip7.png

まとめ

このチュートリアルでは、スクリプトで記述されたサンプルモデルを使って、そのスクリプトの各部分の意味について説明しました。チュートリアルの内容やモデルファイル等が必要でしたら弊社サポートまでお問合せ下さい。