(57)【特許請求の範囲】
【請求項１】
ＦＯＲＴＲＡＮにより記述された冷媒の熱物性の算出プログラム内に、オブジェクト指向型言語により記述されたプログラムから渡された冷媒の構成要素の数を表す整数と冷媒の種類を表す整数からなる冷媒のデータ形式を、前記ＦＯＲＴＲＡＮにより記述された冷媒の熱物性プログラムの冷媒の種類を表す文字配列からなるデータの形式に変更してメモリにセットする手順をコンピュータに実行させる初期化ルーチンを有し、
この初期化ルーチンは、前記構成要素の数を表す整数に基づいて、その数に等しい前記文字配列を生成し、前記構成要素の数を表す整数と前記冷媒の種類を表す整数に基づいて、前記文字配列に冷媒の種類を表す文字列を代入することによりオブジェクト指向型言語により記述されたプログラムから渡された冷媒のデータを、ＦＯＲＴＲＡＮにより記述された冷媒の熱物性プログラムで処理できるようにしたことを特徴とする冷媒の熱物性の算出プログラム。
【請求項２】
ＦＯＲＴＲＡＮにより記述された冷媒の熱物性の算出プログラム内にオブジェクト指向型言語であるＣ＋＋により記述されたプログラムから渡された冷媒の構成要素の数を表す整数と冷媒の種類を表す整数からなる冷媒のデータ形式を、前記ＦＯＲＴＲＡＮにより記述された冷媒の熱物性プログラムの冷媒の種類を表す文字配列からなるデータの形式に変更してメモリにセットする初期化ルーチンを有し、
この初期化ルーチンは、前記構成要素の数を表す整数に基づいて、その数に等しい前記文字配列を生成し、前記構成要素の数を表す整数と前記冷媒の種類を表す整数に基づいて、前記文字配列に冷媒の種類を表す文字列を代入することによりＣ＋＋により記述されたプログラムからＦＯＲＴＲＡＮにより記述された冷媒の熱物性の算出プログラムの初期化ルーチンが呼出されて、Ｃ＋＋により記述された前記プログラムから渡された冷媒の構成要素の数を表す整数と冷媒の種類を表す整数からなる冷媒のデータ形式を、前記ＦＯＲＴＲＡＮにより記述された冷媒の熱物性プログラムの冷媒の種類を表す文字配列からなるデータの形式に変更してメモリにセットし、
Ｃ＋＋により記述された前記プログラムによりＦＯＲＴＲＡＮにより記述された冷媒の熱物性の算出を行うサブルーチンが呼出されて、メモリにセットされた前記データに基づいての算出計算を行うことを特徴とする請求項１記載の冷媒の熱物性の算出プログラム。
【請求項３】
Ｃ＋＋により記述されたプログラムから呼出し可能なダイナミックリンクライブラリとして構成されたことを特徴とする請求項２記載の冷媒の熱物性の算出プログラム。
【請求項４】
プログラム内に記述されたサブルーチン(関数)の宣言文をは、請求項２記載の冷媒の熱物性の算出プログラム内のサブルーチン(関数)を宣言する宣言文として構成され、この宣言文はＦＯＲＴＲＡＮでのデータ形式をＣ＋＋で取扱うことができる形式に変更してメモリにセットするサブルーチンの宣言文として構成され、ＦＯＲＴＲＡＮから返されたデータをＣ＋＋で受け取ることを特徴とする熱交換量を演算するためのシミュレーションプログラム。
【請求項５】
ＦＯＲＴＲＡＮにより記述された冷媒の熱物性の算出プログラム内に設けた初期化ルーチンにＣ＋＋から入力した冷媒の構成要素の数を表す整数と冷媒の種類を表す整数からなる冷媒のデータを渡し、
この初期化ルーチンは、前記構成要素の数を表す整数に基づいて、その数に等しい前記文字配列を生成し、前記構成要素の数を表す整数と前記冷媒の種類を表す整数に基づいて、前記文字配列に冷媒の種類を表す文字列を代入することにより前記ＦＯＲＴＲＡＮにより記述された冷媒の熱物性プログラムの冷媒の種類を表す文字配列からなるデータの形式に変更してメモリにセットし、前記冷媒の熱物性の算出プログラム内の算出ルーチンを呼出してメモリにセットされたデータに基づいて計算を行わせることを特徴とする請求項４記載の熱交換量を演算するためのシミュレーションプログラム。
【請求項６】
請求項１乃至請求項５のいずれか１つに記載のプログラムを記録した記録媒体。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、ＦＯＲＴＲＡＮなどの手続き指向型言語で記述された冷媒の熱物性の算出プログラムを、Ｃ＋＋で記述された熱交換量のシミュレーションプログラムにより関数として呼出して利用するプログラムに関するものである。
【０００２】
【従来の技術】
従来、冷媒の熱物性の算出プログラムとしては、米国のNIST(National Institute Standard
Technology、国家標準・技術研究所)で作成されたREFPROPがもっとも多用されており、このREFPROPは、手続き指向型言語であるＦＯＲＴＲＡＮで記述されたプログラムである。REFPROPの発祥当時、学術計算プログラムのほとんどは、ＦＯＲＴＲＡＮで記述されていたため、REFPROPも例外ではなくＦＯＲＴＲＡＮで記述されていた。そして、現在も従来のプログラムの継承の問題や実行速度の有利さなどの理由から、ＦＯＲＴＲＡＮによる記述のまま、現在のバージョン(Ｖ７．０)まで更新されている。
【０００３】
また、昨今、コンピュータのプログラムの主流は、旧来の手続き指向型言語からオブジェクト指向型言語へと移行してきている。Ｃ＋＋などのオブジェクト指向型言語は、レコード(インスタンス)を、引数(事象)や引数に対するメソッド(処理方法)とともにクラスに定義し、クラスに定義されたメソッドによりレコードを処理するという点で手続き指向型言語とは相違し、計算方法(メソッド)などが変更になった場合、または、新たな事象による影響を追加する場合でも、クラス定義を変更または追加するだけで、基幹プログラムを変更する必要がないという特徴を持つ。このような場合、手続き指向型言語では、基幹プログラムに記述された処理をルーチンを変更、ひいては基幹プログラムを変更しなければならない。
また、Ｃ＋＋などのオブジェクト指向型言語は、共通の引数をスーパー(上位)クラスとして定義し、スーパークラスで定義された引数を有する複数のサブ(下位)クラスで引用することができる。さらに、前記スーパークラスとして、具体的なレコードを持たず、引数やメソッドのみからなる抽象クラスを定義することもできる。
【０００４】
例えば、冷凍サイクルの熱交換量のシミュレーションプログラムをオブジェクト指向型言語により記述する場合、本願の出願人がすでに出願した特願２００３−１００７００号に記載したように、熱交換量に関係する各構成要素をクラスとして定義する。また、各クラス(構成要素)に択一的な複数の要因が想定される場合、例えば、圧縮機クラスのように圧縮機の種類によってメソッドが相違するような場合には、共通の事象(引数)のみを抽出したスーパークラスで圧縮機クラスを定義し、そのサブクラスとして圧縮機の種類別のクラスを定義する。
【０００５】
【発明が解決しようとする課題】
上述のような状況の中で、Ｃ＋＋などのオブジェクト指向型言語とＦＯＲＴＲＡＮなどの手続き指向型言語とでは、データの形式、データの取扱い形式(データ伝達形式、データ蓄積形式)、コンパイラの記述法が相違する。例えば、関数を呼出す場合、Ｃ＋＋では、基本的には、引数として値を渡すが、ＦＯＲＴＲＡＮでは、引数を格納したアドレスを示すポインタで値を引き渡すという相違がある。また、データの形式としては、文字列について、Ｃ＋＋では、任意の長さの文字列に終端を表すコードを付加して取り扱われるが、ＦＯＲＴＲＡＮでは、文字列を固定の長さに宣言して取り扱われ、文字列の終端を表すコードは付加されない。但し、Ｃ＋＋では、単一の文字については文字整数として表され文字列の終端を表すコードは付加されない。また、Ｃ＋＋の文字列では、複数の要素からなる１個の配列の要素１個に１個の文字を割り当て、配列の最後の要素に終端を表すコードを割り当て、この１個の配列により１連の文字列を表している。したがって、ＦＯＲＴＲＡＮの形式で表された文字列は、Ｃ＋＋では文字列として認識することはできないし、逆に、Ｃ＋＋の形式で表された文字列は、ＦＯＲＴＲＡＮでは文字列として認識することはできない。
さらに、関数名がコンパイルによって多少変更されるが、Ｃ＋＋とＦＯＲＴＲＡＮとでは、その変更のしかたが相違する。
これらの相違からＣ＋＋により記述されたプログラムから、ＦＯＲＴＲＡＮで記述されたプログラム(関数)を呼出すことは困難であるという問題点があった。したがって、REFPROPを利用するためには、開発の点で不利な面が多い手続き指向型言語によるプログラムによらなければならないという問題点があった。
【０００６】
【課題を解決するための手段】
本発明は、以上のような問題点を解決するためになされたもので、ＦＯＲＴＲＡＮにより記述された冷媒の熱物性の算出プログラム内に、オブジェクト指向型言語であるＣ＋＋により記述されたプログラムから渡された冷媒の構成要素の数を表す整数と冷媒の種類を表す整数からなる冷媒のデータ形式を、前記ＦＯＲＴＲＡＮにより記述された冷媒の熱物性プログラムの冷媒の種類を表す文字配列からなるデータの形式に変更してメモリにセットする初期化ルーチンを有し、この初期化ルーチンは、前記構成要素の数を表す整数に基づいて、その数に等しい前記文字配列を生成し、前記構成要素の数を表す整数と前記冷媒の種類を表す整数に基づいて、前記文字配列に冷媒の種類を表す文字列を代入することによりＣ＋＋により記述されたプログラムからＦＯＲＴＲＡＮにより記述された冷媒の熱物性の算出プログラムの前期初期化ルーチンが呼出されて、Ｃ＋＋により記述された前記プログラムから渡された冷媒の構成要素の数を表す整数と冷媒の種類を表す整数からなる冷媒のデータ形式を、前記ＦＯＲＴＲＡＮにより記述された冷媒の熱物性プログラムの冷媒の種類を表す文字配列からなるデータの形式に変更してメモリにセットし、
Ｃ＋＋により記述された前記プログラムによりＦＯＲＴＲＡＮにより記述された冷媒の熱物性の算出を行うサブルーチンが呼出されて、形式および取扱い形式が変更されてメモリにセットされたデータに基づいて計算を行うダイナミックライブラリとして構成する。
また、熱交換量を演算するためのシミュレーションプログラム内に記述されたサブルーチン(関数)の宣言文は、前記冷媒の熱物性の算出を行うダイナミックリンクライブラリ内のサブルーチン(関数)を宣言する宣言文として構成され、この宣言文はＦＯＲＴＲＡＮでのデータ形式をＣ＋＋で取扱うことができる形式に変更して利用するサブルーチンの宣言文として構成される。
【０００７】
【発明の実施の形態】
本発明の一実施形態例として、前出の本願の出願人がすでに出願した熱交換量のシミュレーションプログラムの構成方法に適用する場合について説明する。
まず、図３に基づいて、熱交換量のシミュレーションプログラムの全体の構成を簡単に説明する。この図３において、冷凍サイクル（Ａ０１）は、冷凍サイクル構成部品クラス（Ａ０２）を集約して構成されている。この冷凍サイクル構成部品クラス（Ａ０２）と相互作用する動作流体クラスとして、空気クラス（Ａ０３）と冷媒クラス（Ａ０４）が定義されている。また、構成部品を断熱材で覆う場合も考慮して、冷凍サイクル構成部品クラス（Ａ０２）は、断熱材クラス（Ａ０５）を集約して構成されている。さらに、冷凍サイクル構成部品クラス（Ａ０２）の継承クラスとして、圧縮機クラス（Ａ０６）、管クラス（Ａ０７）、熱交換器クラス（Ａ０８）が定義されている。
【０００８】
前記圧縮機クラス（Ａ０６）は、圧縮機の種類の違いなどを反映させるために抽象クラスとして宣言され、この圧縮機クラス（Ａ０６）の性質を継承した圧縮機の種類ごとのレシプロ式クラス（Ａ０９）、スクロール式クラス（Ａ１０）、ロータリー式クラス（Ａ１１）がサブクラスとして定義されている。
同様に、管クラス（Ａ０７）も抽象クラスとして宣言され、管の種類別の直管クラス（Ａ１２）、曲がり管クラス（Ａ１３）などがサブクラスとして定義されている。
【０００９】
このようにして定義されたクラスごとに、そのクラスにおいて起こる現象を計算する関数がメソッドとして実装されている。例えば、圧縮機クラス（Ａ０６）には、出口冷媒状態を計算する関数と、流体を圧縮する場合の放熱量を計算する関数がメソッドとして実装されている。他のクラスにおいても、それぞれのクラスにおいて生じる現象に基づいたメソッドが実装されている。
【００１０】
次に、以上で説明した構成のうち、本願の発明による冷媒クラス（Ａ０４）について詳述する。まず、プログラムの作成について説明する。
プログラムの作成は、(１)ＦＯＲＴＲＡＮで記述された冷媒の熱物性の算出プログラムREFPROPに入力したデータをＣ＋＋の形式からＦＯＲＴＲＡＮの形式に変更するためのプログラムの変更を加えてコンパイルし、Ｃ＋＋で呼出すことができるダイナミックリンクライブラリ(ＤＬＬ)を作成することと、(２)Ｃ＋＋で記述した熱交換量のシミュレーションプログラム内に、(１)で作成したＤＬＬ内のサブルーチンにより処理を行う冷媒クラス（Ａ０４）を作成し、ＦＯＲＴＲＡＮで算出された値(データ)をＦＯＲＴＲＡＮの形式からＣ＋＋の形式に変更するためのプログラムを作成する。
以下、これらを詳細に説明する。
【００１１】
(１)データの形式をＣ＋＋の形式からＦＯＲＴＲＡＮの形式に変更するプログラムとするために、ＦＯＲＴＲＡＮで記述された冷媒の熱物性の算出プログラムであるREFPROPに変更を加えてコンパイルし、Ｃ＋＋で呼出すことができるダイナミックリンクライブラリを作成する方法を説明する。
[1]まず、文字配列からＦＯＲＴＲＡＮの整数配列に引数を変更して初期化するための次のサブルーチンを、REFPROPのsetup()bodyの外側に付加する。
subroutine INITIAL(NC,RNUM,IERR,HERR)
!DEC$ ATTRIBUTES DLLEXPORT::INITIAL
parameter (ncmax=5)     !max number of components in mixture
integer nc,rnum,ierr
character *3 hrf
character*80 hfmix,hfiles(ncmax)
character*255 herr
if (nc .EQ. 1) then
if (rnum .EQ. 22) then
hfiles(1)='.\fluids\R22.fld'
else if (rnum .EQ. 32) then
hfiles(1)='.\fluids\R32.fld'
else if (rnum .EQ. 125) then
hfiles(1)='.\fluids\R125.fld'
else if (rnum .EQ. 134) then
hfiles(1)='.\fluids\R134.fld'
else
ierr=-1
herr='Number of refrigerant is wrong!'
return
endif
else if (nc .EQ. 2 .AND. rnum .EQ. 410) then
hfiles(1)='.\fluids\R32.fld'
hfiles(2)='.\fluids\R125.fld'
else if (nc .EQ. 3 .AND. rnum .EQ. 407) then
hfiles(1)='.\fluids\R32.fld'
hfiles(2)='.\fluids\R125.fld'
hfiles(3)='.\fluids\R134a.fld'
else
ierr=-2
herr='Number of mixture is wrong!'
endif
hfmix='.\fluids\HMX.bnc'
hrf='IIR'
call SETUP(nc,hfiles,hfmix,hrf,ierr,herr)
end
このプログラムは、図２に示す流れ図をＦＯＲＴＲＡＮ言語で記述したものである。このプログラム中、NCは冷媒の構成要素の数である。単一の冷媒の場合は1であり、２種類の冷媒が混合されている場合は2であり、３種類の冷媒が混合されている場合は3であり、以下同様に冷媒を構成する冷媒の種類の数を整数で表す。RNUMは冷媒の種類を表す値である。例えば、冷媒がR２２である場合は22、Ｒ３２である場合は32、Ｒ１２５である場合は125、Ｒ１３４ａである場合は134、Ｒ３２とＲ１２５の混合である場合は410、Ｒ３２とＲ１２５とＲ１３４ａの混合である場合には407であり、REFPROP内で定義されている冷媒を適当な整数で表す値である。
【００１２】
[2]ダミーARGUMENTSの名前に変更して、REFPROPのコンパイル構造に加える。
例えば、REFPROPの中には、TQFLSH()という次のサブルーチンがある。
Subroutine
TQFLSH(t,q,kq,p,D,DI,Dv,x,y,e,cv,cp,w,ierr,herr)
implicit double
precision(a-h,o-z)
implicit
integer(i-k,m,n)
中略
RETURN
end        !subroutine TQFLSH
このサブルーチンの第１行目(サブルーチンの宣言)の直後に次の注釈文１行を追加する。
!DEC$ATTRIBUTES
DLLEXPORT::TQFLSH
ただし、第１行目の宣言文の引数は、次のようにすべて大文字に変更する。
Subroutine
TQFLSH(T,Q,KQ,P,D,DI,DV,X,Y,E,CV,CP,W,IERR,HERR)
Ｃ＋＋による熱交換量のシミュレーションプログラムから呼出すREFPROP内の他のサブルーチンについても、第１行目の直後に、対応するサブルーチン名の同様の注釈文１行を追加する。
【００１３】
[3]前述の[1]および[2]の変更を加えたREFPROPのソースをコンパイルおよびリンクし、Ｃ＋＋から呼出し可能な実行ファイルであるNISTDLL.DLLを作成する。
【００１４】
(２)データの形式をＦＯＲＴＲＡＮの形式からＣ＋＋の形式に変更するプログラムとするために、Ｃ＋＋で記述した熱交換量のシミュレーションプログラム内に、(１)で作成したNISTDLL.DLL内の関数(サブルーチン)により処理を行う冷媒クラス（Ａ０４）を作成する方法を説明する。
[1]まず、Ｃ＋＋で記述した熱交換量のシミュレーションプログラム内の関数宣言に、REFPROP内のサブルーチンを宣言する次の宣言文１行を追加する。
extern“C”_declspec(dllimport) void _stdcall TQFLSH SUBNAME (arguments);
また、データの形式をＦＯＲＴＲＡＮの形式からＣ＋＋の形式に変更する方法は次の変換を通して行う。
Integer->int&
Real->double&
Character->char*
Integer array->int XX[]
Real array->double XX[]
ここで、XXは、変数名を意味する。
具体的には、熱交換量のシミュレーションプログラム中の宣言文
subroutine TQFLSH(T,Q,Z,KQ,P,D,DI,DV,X,Y,E,H,S,CV,CP,W,IERR,HERR)
を、
extern "C" _declspec(dllimport) void stdcall TQFLSH(const double &T, const double & Q,const double &Z[], const double &KQ, double &P ,double &D,     double &DL,     double &DV,     double &X[], double &Y[], double &E, double &H, double &S, double &CV, double &CP, double &W,   int &IERR, chr*HERR,      int HERR_LEN);
に書き換えて、データ形式を変更する。
[2]前述の[1]の変更を加えた熱交換量のシミュレーションプログラムのソースをコンパイルおよびリンクしてシミュレーションプログラムの実行ファイルを作成する。
【００１５】
次に、以上で作成した熱交換量のシミュレーションプログラムからNISTDLL.DLL内の関数を呼出すことにより、冷媒クラス（Ａ０４）の熱交換量のシミュレーションを行う作用について説明する。
図１に示すように、まず、冷媒の構成要素の数(以下、冷媒構成要素数と呼ぶ)NCと冷媒の種類を表す値(以下、冷媒種類値と呼ぶ)RNUMを整数変数で入力する。次に、データの初期化のために、前述の(１)の[1]でREFPROPに付加した初期化サブルーチンINITIALを呼出し、冷媒構成要素数NCと冷媒種類値RNUMに基づくデータの初期化を行いセットする。次に、NISTDLL.DLL内のサブルーチンを呼出して冷媒の熱物性の算出結果を得る。
【００１６】
次に、データの初期化の作用を図２に基づいて詳細に説明する。
NISTDLL.DLLのサブルーチンINITIALは、冷媒構成要素数NCおよび冷媒種類値RNUMの入力を受けて、まず冷媒構成要素数NCの値が1であるか否かを判定する。YESである場合は、冷媒種類値RNUMが22であるか否かを判定し、YESである場合は、NISTDLL.DLL(REFPROP)が冷媒の種類を参照する１つ目の変数であるHFILE(1)に'R22.FLD'の文字列を格納する。NOである場合には、冷媒種類値RNUMが32であるか否かを判定し、YESである場合は、前記変数HFILE(1)に'R32,FLD'の文字列を格納する。以下、同様に、冷媒種類値RNUMが、125か134であるか否かを判定して、該当する冷媒種類を表す文字列を前記変数HFILE(1)に格納する。冷媒種類値RNUMが、22,32,125,134のどれにも該当しなかった場合には、冷媒種類RNUMが不正である旨の警告情報をセット、すなわち、変数ierrに-1を代入し、変数herrに'Number of defrigerant is
wrong!'の文字列を代入する。
【００１７】
次に、前述の冷媒構成要素数NCが1でなかった場合は、冷媒構成要素数NCが2であって冷媒種類値RNUMが410であるか否かを判定し、YESである場合は、前記変数HFILE(1)に'R32.FLD'を格納するとともに、NISTDLL.DLL(REFPROP)が冷媒の種類を参照する２つ目の変数であるHFILE(2)に'R125.FLD'の文字列を格納する。
NOである場合には、冷媒構成要素数NCが3であって冷媒種類値RNUMが407であるか否かを判定し、YESである場合は、前記変数HFILE(1)に'R32.FLD'を前記変数HFILE(2)に'R125.FLD'の文字列を格納するするとともに、NISTDLL.DLL(REFPROP)が冷媒の種類を参照する３つ目の変数であるHFILE(3)に'R134a.FLD'の文字列を格納する。
さらに、NOである場合には、冷媒構成要素数NCまたは冷媒種類RNUMが不正である旨の警告情報をセット、すなわち、変数ierrに-2を代入し、変数herrに'Number of mixture is wrong!'の文字列を代入する。
冷媒構成要素数NCと冷媒種類値RNUMの判定が終了したら、NISTDLL.DLLのSETUPモジュールを呼出して、nc(冷媒要素数), hfiles(冷媒種類値), hrf(固定文字列‘IIR’), ierr(エラー番号), herr(エラーメッセージ)の値を必要なメモリ内にセットする。
このようにして、Ｃ＋＋の形式のデータをＦＯＲＴＲＡＮの形式のデータに変更する。
【００１８】
データをメモリ内にセットしたら、NISTDLL.DLL内のサブルーチン(関数)を呼出して計算を行い、RNUMに対応する冷媒の熱物性の算出結果を得る。
【００１９】
以上の実施例では、冷媒としてＲ２２、Ｒ３２、Ｒ１２５、Ｒ１３４、Ｒ４１０およびＲ４０７の熱物性の算出が必要な場合の例であって、REFPROPに付加するINITIALプログラムに、必要に応じ他の種類の冷媒の判定を追加することもできる。ただし、REFPROPにその追加しようとする冷媒の熱物性の算出を行えるように、データまたはサブルーチンが組み込まれているか、あるいは組み込む必要がある。
【００２０】
以上の実施例では、米国のNISTのREFPROPをＣ＋＋から呼出す構成について説明したが、本発明はこれに限られるものではなく、Ｃ＋＋言語により記述されたプログラムから、ＦＯＲＴＲＡＮ言語により記述されたプログラムを呼出す場合に応用できるものである。
【００２１】
【発明の効果】
本発明は、以上のように構成することにより、ＣまたはＣ＋＋により記述されたプログラムから、ＦＯＲＴＲＡＮで記述されたプログラム(関数)を呼出すことができるので、従来のＦＯＲＴＲＡＮによる優れたプログラムを、移植などの大きな手間をかけることなくＣ＋＋によるプログラムから利用することができるという効果を有するものである。
【図面の簡単な説明】
【図１】  本発明により、REFPROPのサブルーチンを呼出す場合の概要を示す流れ図である。
【図２】  図１におけるREFPROPに付加するサブルーチンINITIALを示す流れ図である。
【図３】  本出願人がすでに提案した熱交換量のシミュレーションプログラムを示すブロック図である。
【図１】
0004529368.tif 000002
【図２】
0004529368.tif 000003
【図３】
0004529368.tif 000004