ACU-T:6108 ユーザー定義の抗力モデルを使用したAcuSolve - EDEMの双方向連成

前提条件

このチュートリアルでは、カスタムのユーザー定義抗力モデルを使用した双方向AcuSolve EDEM連成シミュレーションを実行するためのセットアッププロセスについて説明します。チュートリアルの最初に、UDFコードとコンパイルプロセスの概要を説明してから、シミュレーションのセットアップとポスト処理について説明します。すでにHyperMesh CFDEDEMを使用した経験があることを前提としていますが、その基本については、このチュートリアルのACU-T:1000 ユーザーインターフェース、およびACU-T:6100 Altair EDEMを使用した風力選別機での粒子分離 でも説明しています。

このチュートリアルを開始するには、本チュートリアルで使用されるファイルを作業ディレクトリにコピーしてください。

問題の説明

ここで解析する問題を以下の図に示します。このチュートリアルでは、Stokes流れとも呼ばれるクリープ流れにおける固体粒子上の抗力を計算するためのカスタムUDFを記述する方法を説明します。Stokes流れでは、一般的に流体速度が非常に小さいか、流体の粘性が非常に高く、粒子のレイノルズ数が非常に小さい(<<1)という特徴があり、慣性力は粘性力に比べて無視できるほど小さくなります。Stokes流れは、マイクロ流体デバイス、毛細血管の血液の流れ、静止流体での固体粒子の沈殿などで見られます。Stokes抗力則に従って、1粒子にかかる総抗力(圧力抗力とせん断応力抗力)は次のように与えられます:(1) F D = 3 π ε d p μ U MathType@MTEF@5@5@+= feaagKart1ev2aaatCvAUfeBSjuyZL2yd9gzLbvyNv2CaerbuLwBLn hiov2DGi1BTfMBaeXatLxBI9gBaerbd9wDYLwzYbItLDharqqtubsr 4rNCHbGeaGqiVu0Je9sqqrpepC0xbbL8F4rqqrFfpeea0xe9Lq=Jc9 vqaqpepm0xbba9pwe9Q8fs0=yqaqpepae9pg0FirpepeKkFr0xfr=x fr=xb9adbaqaaeGaciGaaiaabeqaamaabaabaaGcbaGaamOramaaBa aaleaacaWGebaabeaakiabg2da9iaaiodacqaHapaCcqaH1oqzcaWG KbWaaSbaaSqaaiaadchaaeqaaOGaeqiVd0Maamyvaaaa@418B@
ここで、 ε MathType@MTEF@5@5@+= feaagKart1ev2aqatCvAUfeBSjuyZL2yd9gzLbvyNv2CaerbuLwBLn hiov2DGi1BTfMBaeXatLxBI9gBaerbd9wDYLwzYbItLDharqqtubsr 4rNCHbGeaGqiVu0Je9sqqrpepC0xbbL8F4rqqrFfpeea0xe9Lq=Jc9 vqaqpepm0xbba9pwe9Q8fs0=yqaqpepae9pg0FirpepeKkFr0xfr=x fr=xb9adbaqaaeGaciGaaiaabeqaamaabaabaaGcbaGaeqyTdugaaa@379E@ はポロシティ、 d p MathType@MTEF@5@5@+= feaagKart1ev2aqatCvAUfeBSjuyZL2yd9gzLbvyNv2CaerbuLwBLn hiov2DGi1BTfMBaeXatLxBI9gBaerbd9wDYLwzYbItLDharqqtubsr 4rNCHbGeaGqiVu0Je9sqqrpepC0xbbL8F4rqqrFfpeea0xe9Lq=Jc9 vqaqpepm0xbba9pwe9Q8fs0=yqaqpepae9pg0FirpepeKkFr0xfr=x fr=xb9adbaqaaeGaciGaaiaabeqaamaabaabaaGcbaGaamizamaaBa aaleaacaWGWbaabeaaaaa@3801@ は粒子直径、 μ MathType@MTEF@5@5@+= feaagKart1ev2aqatCvAUfeBSjuyZL2yd9gzLbvyNv2CaerbuLwBLn hiov2DGi1BTfMBaeXatLxBI9gBaerbd9wDYLwzYbItLDharqqtubsr 4rNCHbGeaGqiVu0Je9sqqrpepC0xbbL8F4rqqrFfpeea0xe9Lq=Jc9 vqaqpepm0xbba9pwe9Q8fs0=yqaqpepae9pg0FirpepeKkFr0xfr=x fr=xb9adbaqaaeGaciGaaiaabeqaamaabaabaaGcbaGaeqiVd0gaaa@37AD@ は流体の動粘性係数、 U MathType@MTEF@5@5@+= feaagKart1ev2aqatCvAUfeBSjuyZL2yd9gzLbvyNv2CaerbuLwBLn hiov2DGi1BTfMBaeXatLxBI9gBaerbd9wDYLwzYbItLDharqqtubsr 4rNCHbGeaGqiVu0Je9sqqrpepC0xbbL8F4rqqrFfpeea0xe9Lq=Jc9 vqaqpepm0xbba9pwe9Q8fs0=yqaqpepae9pg0FirpepeKkFr0xfr=x fr=xb9adbaqaaeGaciGaaiaabeqaamaabaabaaGcbaGaamyvaaaa@36D1@ は相対速度です。


図 1.

シミュレーションの目的は、水柱中を落下する固体粒子の終端速度を計算することです。粒子の初期位置は、水柱の底面から4.8mmの位置です。Stokes流れでは、粒子は最初に重力によって加速され、流体の抗力は無視できます。流体中を粒子が移動すると、摩擦抗力が増加し、加速が時間とともに低下してゼロとなり、その後粒子は終端速度と呼ばれる一定の速度で移動します。

シミュレーションで使用される重要なパラメータを以下に示します:
表 1.
重要なシミュレーションのパラメータ
水の密度(kg/m3 1000
水の粘度(Pa s) 0.001
粒子の密度(kg/m3 1500
粒子の直径(m) 0.0001

AcuSolveユーザー定義関数(UDF)の概要

UDFのフォーマット

AcuSolve - EDEM双方向連成のカスタム抗力モデルのUDFの一般的なフォーマットを以下に示します。


図 2.

ヘッダーファイル

C言語のプログラムやその他の言語のプログラムを記述する際は、ヘッダーファイルのインクルードやマクロの定義など、プリプロセッサのディレクティブから開始するのが標準的な方法です。すべてのAcuSolve UDFに次の2つのヘッダーファイルが含まれる必要があります。
  • acusim.h: このヘッダーファイルには、AcuSolveや、stdio.hstring.hmath.hなどの標準Cヘッダーファイルによって使用される主なデータタイプが含まれます。AcuSolveで使用される一般的なデータタイプ
    a. Integer Type integer
    b. Real Type floating point
    c. String Type string
    d. Void Type void
  • udf.h: このヘッダーファイルには、UDF内のデータにアクセスするために必要なすべてのマクロと宣言が含まれます。

関数プロトタイプ

ヘッダーファイルが宣言されると、UDF_PROTOTYPE()マクロと、その引数としてユーザー関数の名前を使用して、ユーザー関数のプロトタイプを作成する必要があります(例: UDF_PROTOTYPE(usrStokesDrag))。

このユーザー関数名は、モデルのセットアップで指定した名前を同じにする必要があります。そうしないと、実行時エラーとなる可能性があります。ユーザー関数名は、Cでサポートされているものであれば何でも構いませんが、他のソルバーパラメータと区別するために、usrで始まる関数名を使用することをお勧めします。

関数定義

AcuSolve UDFの標準C関数のシンタックスは次のようになります:


図 3.

戻り値のタイプ

すべてのC関数には戻り値のタイプが必要です。抗力の値はoutVecを介してAcuSolveに戻されるため、戻り値には意味がなく、戻り値のタイプはVoidに設定する必要があります。

関数の引数

関数の引数には次のようなものが含まれます:
udfHd
さまざまなデータにアクセスするために必要な情報を含むポインター。サポートするすべてのルーチンでこの引数が必要となります。
outVec
ユーザー関数の結果ベクトル。入力では、この配列はすべてゼロとなります。このベクトルは力の情報をAcuSolveに戻すために使用されます。
nItems
これはoutVecの最初の次元で、入力する必要のある項目の数を指定します。呼び出しごとに1つの粒子の抗力を計算しているため、すべての抗力モデルユーザー関数でこの値は1となります。
vecDim
これはoutVecの2番目の次元で、特定のデータのベクトルの次元を指定します。この値は、戻されるデータのタイプに依存します。
抗力のユーザー関数
最小で3つの値(x、y、z成分)が必要です。オプションで、4つ目の値をAcuSolveに戻すこともできます(抗力係数)。
揚力のユーザー関数
3つの値(x、y、z成分)。
トルクのユーザー関数
3つの値(x、y、z成分)。

関数コード

変数:

変数は、データの特定のタイプを格納するために使用されます。このデータは単独の値でも、値の配列でも構いません。C言語では、プログラムで使用する前に、すべての変数を宣言する必要があります。宣言はプログラム内のどこでも行うことができますが、前もって必要なすべての変数を宣言すると、コードがより整理され、容易に理解できるようになります。Cで変数を宣言するシンタックスはDatatype variable_nameです。

Real volume ;

ここで、Realはデータタイプ、volumeは変数名です。

現在の例を含む多くのUDFでは、AcuSolveから、ソルバーによってすでに計算され、特定のメモリアドレスに格納されている一部のデータにアクセスする必要がある場合があります。このためには、要求されたデータのメモリアドレスを指すポインター変数を宣言する必要があります。たとえば、局所流体速度にアクセスする必要がある場合、すでにAcuSolveがその値を格納している場所のメモリアドレスを格納するポインター変数を宣言する必要があります。

Real* xVel ;

AcuSolveからのデータアクセス:

AcuSolveから粒子および流体データへのアクセスに使用されるルーチンは、udfGetEDEMData(udfHd, dataName)です。これはデータの配列を返し、配列の長さは要求されるデータのタイプに依存します。

たとえば、

粒子の体積にアクセスするには、まずポインター変数を宣言し、次のデータルーチンを使用する必要があります。

Real* vol ;

vol = udfGetEDEMData( udfHd, UDF_EDEM_PARTICLE_VOLUME) ;
注: volはポインター変数で、粒子体積の実際の値はvol[0]に格納されています。
すべてのAS-EDEMデータ名のリストを以下に示します。

長いUDFの場合、多くのポインター変数を使用すると混乱し、追跡が困難になる可能性があるため、これはできるだけ少なくし、値を別の変数に割り当てることをお勧めします。たとえば、Stokes抗力則 F D = 3 π ε d p μ U MathType@MTEF@5@5@+= feaagKart1ev2aaatCvAUfeBSjuyZL2yd9gzLbvyNv2CaerbuLwBLn hiov2DGi1BTfMBaeXatLxBI9gBaerbd9wDYLwzYbItLDharqqtubsr 4rNCHbGeaGqiVu0Je9sqqrpepC0xbbL8F4rqqrFfpeea0xe9Lq=Jc9 vqaqpepm0xbba9pwe9Q8fs0=yqaqpepae9pg0FirpepeKkFr0xfr=x fr=xb9adbaqaaeGaciGaaiaabeqaamaabaabaaGcbaGaamOramaaBa aaleaacaWGebaabeaakiabg2da9iaaiodacqaHapaCcqaH1oqzcaWG KbWaaSbaaSqaaiaadchaaeqaaOGaeqiVd0Maamyvaaaa@418B@ では、粒子の体積、流体のポロシティ、粘度、速度にアクセスする必要があります。scalarという名前のポインター変数を定義し、それが再帰的に体積、密度、ポロシティ、粘度などの必要なスカラー量を指すようにする一方で、その値を間にある別の変数に割り当てることができます。


図 4.
scalarという名前のポインターが宣言されたら、ユーザーはまず、それが粒子体積のデータ名を指すようにしました。次の行で、scalar[0]という値をvolという変数に割り当てました。次に、ポインターscalarを流れの粘度に変更し、scalar[0]をviscに割り当てました。
注: これは、プログラムを正しく記述する多くの方法のうちの1つにすぎません。
  • 抗力値を計算する:
すべての変数を宣言し、必要なデータにアクセスしたら、抗力則に基づいて力の値を計算する必要があります。ここで、0、1、2のインデックスは、それぞれx、y、z成分を示します。
  • 力のデータをAcuSolveに送信する:
力が計算されたら、outVec配列に入力する必要があります。これは効力のユーザー関数なので、少なくとも3つの値を戻す必要があります。オプションで、抗力係数を表す4つ目の値を設定することもできます。(この例では必要ありません。)


図 5.
完全なStokes抗力関数を以下に示します。


図 6.

全コード

#include "acusim.h"
#include "udf.h"
/*===========================================================================
 *
 * Prototype the function
 *
 *===========================================================================
 */
UDF_PROTOTYPE( usrStokesDrag ) ;
/*===========================================================================
 *
 * "stokesDrag":  calculate EDEM particle drag force based on the Stokes law
 *
 *  Arguments:
 *    udfHd     - opaque handle for accessing information
 *    outVec    - output vector
 *    nItems    - number of items in outVec (=1 in this case)
 *    vecDim    - vector dimension of outVec (=3 in this case)
 *
 *  Input file parameters:
 *    user_values = { } 
 *    user_strings = { "" }
 *
 *===========================================================================
 */
Void usrStokesDrag(	UdfHd	      udfHd,
			Real*	     outVec,
			Integer	     nItems,
			Integer	     vecDim )
{
    Real    beta ;
    Real    vol ;
    Real    visc ;
    Real    diam ;
    Real*   scalar ;
    Real*   flowVel ;
    Real*   particleVel ;
    Real    slipVel[3] ;
    Real    poros ;
/*---------------------------------------------------------------------------
 * Get particle and flow data at current particle location
 *---------------------------------------------------------------------------
 */
    scalar = udfGetEDEMData(	 udfHd,	UDF_EDEM_PARTICLE_VOLUME) ;
    vol = scalar[0] ;
    scalar = udfGetEDEMData(	 udfHd,	UDF_EDEM_FLOW_VISCOSITY	) ;
    visc = scalar[0] ;
    scalar = udfGetEDEMData(	 udfHd,	UDF_EDEM_FLOW_POROSITY	) ;
    poros = scalar[0] ;
    flowVel = udfGetEDEMData(	udfHd,	UDF_EDEM_FLOW_VELOCITY	) ;
    particleVel = udfGetEDEMData(   udfHd,	UDF_EDEM_PARTICLE_VELOCITY) ;
    if ( vol <= 0 ) {
	udfSetError( udfHd, "Error: EDEM particle volume"
			" should bigger than zero" ) ;
    }
/*---------------------------------------------------------------------------
 * Calculate drag
 *---------------------------------------------------------------------------
 */
    slipVel[0] = flowVel[0] - particleVel[0] ;
    slipVel[1] = flowVel[1] - particleVel[1] ;
    slipVel[2] = flowVel[2] - particleVel[2] ;
    diam = pow((6*vol/PI),0.333333333333);
    beta = 3*PI*visc*poros*diam ;
/*---------------------------------------------------------------------------
 * Push the drag force to AcuSolve 
 *---------------------------------------------------------------------------
 */
    outVec[0] = beta * slipVel[0] ;
    outVec[1] = beta * slipVel[1] ;
    outVec[2] = beta * slipVel[2] ;
} /* end of usrStokesDrag() */

使用可能なUDFルーチンの詳細については、AcuSolve User-Defined Functions Manualをご参照ください。

UDFのコンパイル

ソルバーがユーザー定義関数にアクセスできるようにするには、これらの関数をコンパイルして、共有ライブラリにリンクさせる必要があります。これらのライブラリは、ソルバー入力ファイルとともに、作業ディレクトリに配置する必要があります。

Windows

スタートメニューからAltair <solver version>を展開し、AcuSolve Cmd Promptを起動します。

ターミナルで、cdコマンドを実行し、モデルファイルとUDFスクリプトファイルがあるディレクトリに移動します。次のコマンドを実行して、UDFをコンパイルします:

acuMakeDll -src usrStokesDrag.c

Linux

コマンドラインプロンプトを開き、cdコマンドを実行してモデルファイルとUDFスクリプトがあるディレクトリに移動します。次のコマンドを実行します:

acuMakeLib -src usrStokesDrag.c

パート1 - AcuSolveシミュレーション

HyperMesh CFDの起動とHyperMeshデータベースのオープン

  1. WindowsのスタートメニューからStart > Altair <version> > HyperMesh CFDをクリックしてHyperMesh CFDを起動します。
  2. ホームツールのファイルツールグループから、Open Modelツールをクリックします。


    図 7.
    Open Fileダイアログが開きます。
  3. モデルファイルの保存先ディレクトリを参照します。HyperMeshファイルACU-T6108_sphere.hmを選択してOpenをクリックします。
    このディレクトリが作業ディレクトリになり、シミュレーションに関連するすべてのファイルがこの場所に保存されます。

形状の検証

Validateツールは、モデル全体をスキャンし、サーフェスおよびソリッド上でチェックを実行して、形状に不具合(フリーエッジ、閉じたシェル、交差、重複、スライバーなど)があればフラグ付けします。

シミュレーションの物理パートに集中するために、このチュートリアルの入力ファイルにはすでに検証済みの形状が含まれています。形状リボンのValidateアイコンの左上隅に青色のチェックマークが表示されていることを確認します。これは、形状が有効で、フロー設定に進めることを示しています。


図 8.

流れのセットアップ

一般的なシミュレーションパラメータの設定

  1. 流れリボンから Physicsツールをクリックします。


    図 9.
    Setupダイアログが開きます。
  2. Physics modelsの設定で、Multiphase flowラジオボタンを選択します。
  3. Multifluid typeをBidirectional EDEM Couplingに変更します。
  4. Eulerian materialドロップダウンメニューをクリックし、リストからMaterial Libraryを選択します。
    材料ライブラリに新しい材料モデルを作成できます。
  5. Material LibraryダイアログでEDEM 2 Way Multiphaseを選択し、My Materialタブに切り替えて、をクリックして新しい材料モデルを追加します。
  6. マクロダイアログで、左上隅にあるEDEM Bidirectional Materialをクリックして、名前をWater-Particleに変更します。
  7. Carrier fieldをWaterに設定します。
  8. Particle ShapeがSphericalに設定されていることを確認し、Drag modelをUser Functionに設定します。
  9. Drag modelドロップダウンの横のテーブルアイコンをクリックします。


    図 10.
  10. 新しいダイアログで、Functionの名前をusrStokesDragに設定します。
    注: ここで入力する関数名は、UDFのUDF_PROTOTPYEの名前と同じである必要があります。ユーザー関数の名前は、C言語でサポートされ、usrという文字で開始される任意の名前にすることができます。


    図 11.
  11. Escを押してダイアログを閉じます。
  12. Material ModelMaterial Libraryのダイアログを閉じます。
  13. Setupダイアログで、Eulerian MaterialをWater-Particleに設定します。
  14. Time step sizeを5e-05に、Final timeを0.015にそれぞれ設定します。
  15. Turbulence modelをLaminarに設定します。
    計算された粒子のレイノルズ数は0.3未満になります。これは、粘性力が慣性力を上回り、乱流効果を無視できるStokes領域です。
  16. Gravityが0, 0, -9.81に設定されていることを確認します。
  17. Pressure scaleをAbsoluteに設定します。


    図 12.
  18. Solver controls設定をクリックし、Minimum/Maximum stagger iterationsをそれぞれ2に設定します。


    図 13.
  19. ダイアログを閉じてモデルを保存します。

材料プロパティの割り当て

  1. 流れリボンから 材料ツールをクリックします。


    図 14.
  2. 材料としてWater-Particleが割り当てられているのを確認します。
    割り当てられていない場合は、形状をクリックして、マクロダイアログからWater-Particleを選択します。
  3. ガイドバーをクリックしてツールを終了します。

流れ境界条件の定義

  1. BoundariesグループでOutletツールをクリックします。


    図 15.
  2. モデリングウィンドウでモデルの上面(以下の図でハイライトされている部分)をクリックします。


    図 16.
  3. マクロダイアログHydrostatic pressureオプションを有効にして、Hydrostatic pressure originを(0, 0, 0.006)に設定します。
  4. ガイドバーをクリックします。
    注: デフォルトでは、すべてのサーフェスにすべりのない壁の条件が割り当てられています。
  5. モデルを保存します。

メッシュの生成

  1. メッシュリボンから Volumeツールをクリックします。


    図 17.
    Meshing Operations ダイアログが開きます。
  2. Meshing Operationsダイアログで、Mesh sizeをAverage Sizeに、Average element sizeを0.0005に設定します。
  3. Curvature-based surface refinementを非アクティブにして、Meshをクリックします。

節点出力の定義

メッシングが終了すると、自動的にソリューションリボンに移動します。

  1. ソリューションリボンから フィールドツールをクリックします。


    図 18.
    Field Outputダイアログが開きます。
  2. Write initial conditionsチェックボックスをアクティブにします。
  3. Write results at time step intervalチェックボックスをアクティブにします。
  4. Time step intervalを5に設定します。


    図 19.
  5. ダイアログを閉じてモデルを保存します。

パート2 - EDEMシミュレーション

WindowsのスタートメニューからStart > Altair > EDEM をクリックしてEDEMを起動します。

EDEMの入力デックを開く

  1. EDEMのCreatorタブで、File > Openに移動します。
  2. sphere.demファイルの保存先ディレクトリを参照し、これを開きます。
    これにより、形状と材料が読み込まれます。


    図 20.

EDEMモデルセットアップの確認

このチュートリアルでフォーカスする主な領域は、ユーザー定義の抗力モデルのセットアップと、双方向AcuSolve - EDEM連成シミュレーションのコンパイルプロセスです。したがって、簡潔にするため、入力ファイルとともに提供されるEDEMデータベースには、必要なすべてのセットアップが含まれています。

EDEMモデルのサマリー

直径0.0001mの球形粒子が、水柱の底面から0.0048mの位置に投入されます。粒子の密度は1500kg/m3で水より重いため、粒子は水柱中を自由に落下します。

シミュレーション設定の定義

  1. 左上隅のをクリックして、EDEMのSimulatorタブに移動します。
  2. Simulator Settingsタブで、Time Integration schemeをEulerに設定し、Auto Time Stepチェックボックスを無効にします。
  3. Fixed Time Stepには1e-6sを入力します。
    注: 一般的に、time step sizeには、DEMシミュレーションの安定性を確保するために、Rayleigh Time Stepの20~40%の値が推奨されます。DEM時間ステップは通常CFD時間ステップより数桁小さいため、CFD時間ステップごとに、DEMソルバーは複数回反復してCFDの時間に合わせます。したがって、AcuSolveEDEMの物理時間を確実に一致させるため、CFD時間ステップは、必ずDEM時間ステップの整数倍にする必要があります。
  4. Total Timeを0.015sに設定し、Target Save Intervalを0.00015sに設定します。
  5. Cell Sizeを2.5Rminに設定します。
  6. Selected EngineをCPU Solverに設定し、可用性に基づいてNumber of CPU Coresを設定します。


    図 21.
  7. シミュレーション設定の定義が完了したら、モデルを保存します。

連成シミュレーションの実行

  1. EDEMCoupling Serverをクリックして、連成サーバーを起動します。


    図 22.
    連成サーバーがアクティブになると、アイコンが変化します。


    図 23.
  2. HyperMesh CFDに戻ります。
  3. ソリューションリボンから 実行ツールをクリックします。


    図 24.
    Launch AcuSolveダイアログが開きます。
  4. Parallel processingオプションをIntel MPIに設定します。
  5. Number of processorsを6に設定します。
  6. Automatically define pressure referenceのチェックをオフにします。
  7. Default initial conditionsを拡張表示し、Pre-compute flowを非選択にし、velocity valuesを0に設定します。Pre-compute Turbulenceのチェックをオフにします。
  8. RunをクリックしてAcuSolveを起動します。


    図 25.

    AcuSolveの実行が開始されると、Run Statusダイアログが開きます。

  9. ダイアログでAcuSolve実行を右クリックし、View log fileを選択します。
    EDEMとの連成が成功すると、その情報が.logファイルに出力されます。


    図 26.

    シミュレーションが完了した後、実行時間のサマリーが.logファイルの末尾に出力されます。

結果の分析

  1. EDEMのシミュレーションの完了後、左上隅のをクリックして、EDEMのAnalystタブに移動します。
  2. Create Graphアイコンをクリックします。


    図 27.
  3. AnalystツリーでLineプロットを選択し、以下の図に示したとおりにX軸のパラメータが設定されていることを確認します。


    図 28.
  4. Y-axisタブをクリックし、Primary AttributeをVelocity、ComponentをMagnitudeAverage)に設定します。
  5. Create Graphをクリックします。


    図 29.
    粒子速度対時間のプロットが、プロットウィンドウに表示されます。


    図 30.

    予想通り、シミュレーションの最初に、粒子は重力によって速度ゼロから加速されます。粒子が移動し、周囲の流体を押しのけると、粒子に対する摩擦抗力が増加し、浮力と抗力の効果が組み合わされて、加速は0まで低下し、粒子は一定の速度で移動するようになります。これは粒子の終端速度と呼ばれ、この場合、予測される値は0.00274m/sで、解析解(0.002725m/s)と非常に近くなっています(誤差0.5%)。これは、クリープ流れの流体に起因する抗力の予測において、Stokes抗力則が非常に正確であることを示しています。

要約

このチュートリアルでは、双方向AcuSolve-EDEM連成のためのカスタムの抗力モデルを実装するため、C言語でユーザー定義関数を記述する方法を知ることができました。Stokes抗力則を使用して、水柱中を落下する球形粒子の終端速度を計算しました。このシミュレーション結果は、レイノルズ数の値が小さい流れでは、粒子上の抗力の予測においてStokes抗力則は非常に正確であることを示していました。