VBAで粒子法を勉強中

メッシュレスで数値解析できるという、粒子法に興味を持ち、勉強中です。 プログラムのスキルが無い為、ExcelとVBAでのプログラム作成を目指しています。

【SPH粒子法のプログラムをVBAで作ってみる】 4.初期設定モジュール

初期設定モジュール

 各パラメーターの読み込みや、配列の初期化を行うモジュールを記します。

 


'===========================
'初期化モジュール
'===========================
 
 Private Sub init(Particles() As Particle)

   Dim X As Double  '粒子のX位置
   Dim Y As Double  '粒子のY位置
   Dim d As Double  '粒子間隔
   Dim iP As Integer '粒子カウンタ
  
    MAX_LOOP = Range("最大ループ数").Value
    Pi = Range("円周率").Value
     
    H = Range("有効半径").Value
    SPH_PMASS = Range("粒子質量").Value

  
    SPH_INTSTIFF = Range("圧縮硬さ").Value
    SPH_EXTSTIFF = Range("境界圧縮硬さ").Value
    SPH_EXTDAMP = Range("境界速度減衰率").Value
    
    DT = Range("タイムステップ").Value
    RADIUS = Range("境界部粒子半径").Value
    EPSILON = Range("境界めりこみ判定").Value
      
    INITMIN.X = Range("水塊最小座標_X").Value
    INITMIN.Y = Range("水塊最小座標_Y").Value
    INITMAX.X = Range("水塊最大座標_X").Value
    INITMAX.Y = Range("水塊最大座標_Y").Value
    
    
    MIN.X = Range("境界最小座標_X").Value
    MIN.Y = Range("境界最小座標_Y").Value
    MAX.X = Range("境界最大座標_X").Value
    MAX.Y = Range("境界最大座標_Y").Value
    
    SPH_RESTDENSITY = Range("定常密度").Value
    SPH_PDIST = (SPH_PMASS / SPH_RESTDENSITY) ^ (1 / 3#)
    SPH_SIMSCALE = Range("スケール").Value
    SPH_VISC = Range("粘性係数").Value
    SPH_LIMIT = Range("上限速度").Value
  
    '----各カーネル係数を計算----
    '重み係数
    Poly6Kern = 4 / (Pi * H ^ 8)
    '3次元ではPoly6Kern = 315# / (64# * Pi * H ^ 9)
    
    '圧力係数
    SpikyKern = -30 / (Pi * H ^ 5)
    '3次元ではSpikyKern = -45# / (Pi * H ^ 6)
    
    '粘性係数(のラプラシアン)
    LapKern = 20 / (Pi * H ^ 5)
    '3次元ではLapKern = 45# / (Pi * H ^ 6)
    
    '---粒子間隔を設定---
    d = SPH_PDIST * 0.87 / SPH_SIMSCALE


'---粒子の位置・速度の初期値を設定---

iP = 0
Randomize
   
   For Y = INITMIN.Y To INITMAX.Y Step d
     For X = INITMIN.X To INITMAX.X Step d
         Particles(iP).r.X = X
         Particles(iP).r.Y = Y
         
         Particles(iP).r.X = Particles(iP).r.X - 0.05 + Rnd * 0.1 '揺らぎを与える
         Particles(iP).r.Y = Particles(iP).r.Y - 0.05 + Rnd * 0.1  '揺らぎを与える
         
         Particles(iP).V.X = 0
         Particles(iP).V.Y = 0
         
         iP = iP + 1
     Next X
  Next Y

'---粒子の数を保存---
nP = iP


End Sub


 沢山の変数がありますが、具体的な数値はエクセルのシートに範囲名も設定し、そのセルに記しています。この様にしておくと、各パラメータの設定がとてもやり易いです。エクセルVBAを使うメリットの1つです。

 各カーネル係数については、別途説明を試みたいと思います。

 また、参考にしたWEBページがありますので、これもその際にまとめて記します。

にほんブログ村 科学ブログ 技術・工学へ
にほんブログ村