流体プロパティ テーブルの手動生成
流体プロパティ テーブル
流体プロパティ テーブルは、Two-Phase Fluid Properties (2P) ブロックに基本入力を与えます。米国標準技術局による REFPROP ソフトウェアまたは CoolProp ソフトウェアがインストールされている場合、関数 twoPhaseFluidTables
を使用してこのテーブルを自動的に生成できます。他のソースから流体プロパティを取得した場合も、MATLAB® スクリプトを使用してテーブルを生成できます。このチュートリアルでは、流体の温度テーブルを生成するためのスクリプトを作成する方法を説明します。
テーブルは、離散化された圧力と正規化された内部エネルギーでの流体プロパティを示さなければなりません。圧力がテーブルの列に、正規化された内部エネルギーがテーブルの行に対応しなければなりません。圧力と正規化された内部エネルギーを独立変数として設定すると、液相と蒸気相のプロパティ テーブルを、MATLAB 行列を使用して、独立した四角形のグリッドで指定できます。
次の図は、圧力-比内部エネルギー空間 (左) と、圧力-正規化された内部エネルギー空間 (右) における、2 つの流体プロパティ グリッドを示します。圧力-比内部エネルギーのグリッド上で流体プロパティ テーブルを取得した場合、そのグリッドを圧力-正規化された内部エネルギーの同等のグリッドに変換しなければなりません。このチュートリアルでは、MATLAB スクリプトを作成してこの変換を処理します。
プロパティ テーブルの生成手順
このチュートリアルで作成する MATLAB スクリプトでは、次のタスクを実行します。
次元と、圧力-比内部エネルギー ドメインを含む、プロパティ テーブルの条件を定義。
圧力-正規化された内部エネルギー空間に四角形のグリッドを作成。
グリッドを圧力-比内部エネルギー空間にマッピング。
圧力-比内部エネルギー グリッドで流体プロパティを取得。
プロパティ テーブルを生成する前に
流体プロパティ データを圧力-比内部エネルギー空間から取得しなければなりません。方法としては、直接計算、独自のデータベース、サードパーティのソースなどがあります。このチュートリアルでは、4 つの MATLAB 関数を作成して、プロパティ データ例を作成します。実際のアプリケーションでは、これらの関数を、実際のプロパティ データにアクセスするために記述された同等の関数で置き換えなければなりません。
流体プロパティ関数の作成
以下の MATLAB 関数を作成します。これらの関数により、このチュートリアルで使用するプロパティ データ例が提供されます。関数ファイルが MATLAB パス上にあることを確認してください。以下に示す関数名とコードを使用します。
名前 —
liquidTemperature
function T = liquidTemperature(u, p) % Returns artificial temperature data as a function % of specific internal energy and pressure. T = 300 + 0.2*u - 0.08*p;
名前 —
vaporTemperature
function T = vaporTemperature(u, p) % Returns artificial temperature data as a function % of specific internal energy and pressure. T = -1000 + 0.6*u + 5*p;
名前 —
saturatedLiquidInternalEnergy
function u = saturatedLiquidInternalEnergy(p) % Returns artificial data for saturated liquid specific % internal energy as a function of pressure. u = sqrt(p)*400 + 150;
名前 —
saturatedVaporInternalEnergy
function u = saturatedVaporInternalEnergy(p) % Returns artificial data for saturated vapor specific % internal energy as a function of pressure. u = -3*p.^2 + 40*p + 2500;
プロパティ テーブル条件の設定
新しい MATLAB スクリプトを開始します。流体プロパティ データ例を生成するために作成した MATLAB 関数と同じフォルダーにこのスクリプトを保存します。スクリプト内で、プロパティ テーブルの条件を定義します。そのためには、テーブルの次元と圧力-比内部エネルギーの有効範囲に関する次のコードを入力します。
% Number of rows in the liquid property tables mLiquid = 25; % Number of rows in the vapor property tables mVapor = 25; % Number of columns in the liquid and vapor property tables n = 60; % Minimum specific internal energy, kJ/kg uMin = 30; % Maximum specific internal energy, kJ/kg uMax = 4000; % Minimum pressure, MPa pMin = 0.01; % Maximum pressure, MPa pMax = 15; % Store minimum and maximum values in structure fluidTables fluidTables.uMin = uMin; fluidTables.uMax = uMax; fluidTables.pMin = pMin; fluidTables.pMax = pMax;
圧力-正規化された内部エネルギー グリッドの作成
圧力および正規化された内部エネルギーのベクトルをグリッドに定義します。これらのベクトルは、各グリッド点に関連付けられる、離散化された圧力と正規化された内部エネルギーの値を提供します。この例では広い範囲の圧力を検討するため、圧力ベクトルは対数的に等間隔になっています。ただし、使用するデータに適した任意の間隔を使用できます。MATLAB スクリプトに次のコードを追加します。
% Pressure vector, logarithmically spaced fluidTables.p = logspace(log10(pMin), log10(pMax), n); % Normalized internal energy vectors, linearly spaced fluidTables.liquid.unorm = linspace(-1, 0, mLiquid)'; fluidTables.vapor.unorm = linspace(1, 2, mVapor)';
グリッドの圧力-比内部エネルギー空間へのマッピング
飽和液体と蒸気の比内部エネルギーを、圧力の関数として取得します。飽和内部エネルギーを使用すると、正規化された内部エネルギーのベクトルを、比内部エネルギー空間の同等のベクトルにマッピングできます。MATLAB スクリプトに次のコードを追加します。
% Initialize the saturation internal energies of the liquid and vapor phases fluidTables.liquid.u_sat = zeros(1, n); fluidTables.vapor.u_sat = zeros(1, n); % Obtain the saturation internal energies at the pressure vector values for j = 1 : n fluidTables.liquid.u_sat(j) = saturatedLiquidInternalEnergy(fluidTables.p(j)); fluidTables.vapor.u_sat(j) = saturatedVaporInternalEnergy(fluidTables.p(j)); end
saturatedLiquidInternalEnergy
saturatedVaporInternalEnergy
正規化された内部エネルギーのベクトルを、同等の比内部エネルギーのベクトルにマッピングします。MATLAB スクリプトに次のコードを追加します。
% Map pressure-specific internal energy grid onto % pressure-normalized internal energy space fluidTables.liquid.u = (fluidTables.liquid.unorm + 1)*... (fluidTables.liquid.u_sat - uMin) + uMin; fluidTables.vapor.u = (fluidTables.vapor.unorm - 2)*... (uMax - fluidTables.vapor.u_sat) + uMax;
グリッド点での流体プロパティの取得
これで、流体プロパティを各グリッド点で取得できるようになりました。以下のコードは、液相と蒸気相の温度テーブルを生成する方法を示します。同様のアプローチを使用して、残りの流体プロパティ テーブルを生成します。MATLAB スクリプトに次のコードを追加します。
% Obtain temperature tables for the liquid and vapor phases for j = 1 : n for i = 1 : mLiquid fluidTables.liquid.T(i,j) = ... liquidTemperature(fluidTables.liquid.u(i,j), fluidTables.p(j)); end for i = 1 : mVapor fluidTables.vapor.T(i,j) = ... vaporTemperature(fluidTables.vapor.u(i,j), fluidTables.p(j)); end end
このコードは、データ例を生成するために記述された 2 つの関数を呼び出します。このコードを実際のアプリケーションで使用する前に、実際のデータにアクセス可能な同等の式で関数を置き換えなければなりません。置き換えなければならない関数は以下のとおりです。
liquidTemperature
vaporTemperature
生成された温度テーブルを表示するには、まずスクリプトを実行します。次に、MATLAB コマンド プロンプトで「fluidTables
」と入力します。MATLAB に構造体配列 fluidTables
の内容がリストされます。
fluidTables = uMin: 30 uMax: 4000 pMin: 0.0100 pMax: 15 p: [1x20 double] liquid: [1x1 struct] vapor: [1x1 struct]
サブ構造体 liquid
に格納されたプロパティ テーブルをリストするには、MATLAB コマンド プロンプトで fluidTables.liquid
と入力します。
305.9992 305.9988 305.9983 305.9975 ... 309.5548 309.7430 309.9711 310.2475 ... 313.1103 313.4872 313.9440 314.4976 ... 316.6659 317.2314 317.9169 318.747 ... ...
グリッドの可視化
圧力-正規化された内部エネルギー空間で元のグリッドを可視化するには、MATLAB コマンド プロンプトで次のコードを入力します。
% Define p and unorm matrices with the grid % point coordinates pLiquid = repmat(fluidTables.p, mLiquid, 1); pVapor = repmat(fluidTables.p, mVapor, 1); unormLiquid = repmat(fluidTables.liquid.unorm, 1, n); unormVapor = repmat(fluidTables.vapor.unorm, 1, n); % Plot grid figure; hold on; plot(unormLiquid, pLiquid, 'b.'); plot(unormVapor, pVapor, 'b.'); plot(zeros(1, n), fluidTables.p, 'k-'); plot(ones(1, n), fluidTables.p, 'k-'); hold off; set(gca, 'yscale', 'log'); xlabel('Normalized Internal Energy'); ylabel('Pressure'); title('Grid in Normalized Internal Energy');
圧力-正規化された内部エネルギー グリッドの Figure が開きます。
変換されたグリッドを圧力-比内部エネルギー空間で可視化するには、MATLAB コマンド プロンプトで次のコードを入力します。
% Define horizontal and vertical axes % Plot grid figure; hold on; plot(fluidTables.liquid.u, pLiquid, 'b.'); plot(fluidTables.vapor.u, pVapor, 'b.'); plot(fluidtables.liquid.u_sat, fluidTables.p, 'k-'); plot(fluidtables.vapor.u_sat, fluidTables.p, 'k-'); hold off; set(gca, 'yscale', 'log'); xlabel('Specific Internal Energy'); ylabel('Pressure'); title('Grid in Specific Internal Energy');
圧力-比内部エネルギー グリッドの Figure が開きます。