外部関数定義部のデータ読み込み

 投稿者:ちゃとら  投稿日:2018年11月22日(木)20時16分38秒
  67才の初心者です。
昔を思い出して勉強させていただいています。
一つ教えてください。外部関数定義の中で少し多めのデータ読み込みがあります。外部関数を
呼び出すたびに、データの読み込みを繰り返します。一度、読み込んだらもう読み込まないで
済ますテクニックはありませんでしょうか。 よろしくお願いいたします。
 

Re: 外部関数定義部のデータ読み込み

 投稿者:白石和夫  投稿日:2018年11月23日(金)08時29分3秒
  > No.4568[元記事へ]

MODULEを利用するとできると思います。
https://decimalbasic.ninja-web.net/BASICHelp/html/basi5vtx.htm


100 DECLARE EXTERNAL FUNCTION m.f
110 FOR k=1 TO 10
120    PRINT f(k)
130 NEXT k
140 END
1000 MODULE m
1010 PUBLIC FUNCTION f
1020 DATA 10,20,30,40,50,60,70,80,90,100
1030 SHARE NUMERIC a(10)
1040 MAT READ a
1050 EXTERNAL FUNCTION f(x)
1060    LET f=a(x)
1070 END FUNCTION
1080 END MODULE

 

外部関数定義部のデータ読み込み

 投稿者:ちゃとら  投稿日:2018年11月23日(金)12時14分32秒
  白石様

 有り難うございます。早速試してみます。

 

外部関数定義部のデータ読み込み

 投稿者:ちゃとら  投稿日:2018年11月28日(水)11時32分52秒
  白石様
  ご提示頂いた参考プログラムを見ながら試していますが上手く出来ません。
  外部関数定義部のデータ読み込み部と、計算部を分けてshare 宣言をしているのですが
  変数、配列ともに共用されません。 今一度、tryして見ます。

 
 

Re: 外部関数定義部のデータ読み込み

 投稿者:しばっち  投稿日:2018年11月28日(水)23時28分31秒
  > No.4568[元記事へ]

ちゃとらさんへのお返事です。

> 一つ教えてください。外部関数定義の中で少し多めのデータ読み込みがあります。外部関数を
> 呼び出すたびに、データの読み込みを繰り返します。一度、読み込んだらもう読み込まないで
> 済ますテクニックはありませんでしょうか。 よろしくお願いいたします。


これは私流のやり方ですが、プログラムの流れを制御したい箇所にflag(旗)を使うと
簡単に制御できます。


ちゃとらさんのプログラムが、どんなプログラムなのかがわかりませんので

これは呼び出す側で制御する方法で、複数の箇所で呼び出す場合です。
SUB TEST(X,Y)の引数を一つ増やして、メインルーチン側で制御します。
(※引数 X,Yはここではダミーです)


要は制御したい部分をIF...THENとEND IFでくくってしまうことです。
ちゃとらさんの場合は、データの読み込み部に当たると思います。


PRINT "-------SUB TEST 呼び出し"
CALL TEST(X,Y,0) !'引数FLGの部分に0、又はそれ以外の数値を書きます


!'ここは何らかのプログラムが続きます。


PRINT "-------SUB TEST 呼び出し"
CALL TEST(X,Y,1) !'引数FLGの部分に0、又はそれ以外の数値を書きます
END

EXTERNAL  SUB TEST(X,Y,FLG)
IF FLG=0 THEN !'ここから制御したい部分が始まります


   PRINT "ABCDE"  !'何らかの処理


END IF
PRINT "12345"
END SUB


次はループ内で呼び出す場合です。ここでは、呼び出される側で制御します。
PUBLIC NUMERIC文で変数FLをグローバル変数宣言します。
すると、メインルーチンと外部副プログラムで共通になります。


PUBLIC NUMERIC FL !'グローバル変数FLの宣言
LET FL=0
FOR I=1 TO 5
   PRINT "------SUB TEST 呼び出し"
   CALL TEST(X,Y) !'ループ内での呼び出し
NEXT I

!'
!'ここは何らかのプログラムが続きます。
!'

LET FL=0 !'フラグをリセットする
PRINT "------SUB TEST 呼び出し"
CALL TEST(X,Y)
END

EXTERNAL  SUB TEST(X,Y)
IF FL=0 THEN  !'ここから制御したい部分が始まります


   PRINT "ABCDEF"  !'何らかの処理

   LET FL=1 !'フラグを立てる
END IF
PRINT "12345"
END SUB


また、フラグを使ってループ内で交互に実行させる等もできます。

LET FL=0
DO

!'ここは何らかのプログラムが続きます。

IF FL=0 THEN

PRINT "FL=0"  !'何らかの処理 1

ELSE

PRINT "FL<>0" !'何らかの処理 2

END IF
LET FL=1-FL !'フラグの切り替え(他にも FL=MOD(FL+1,2)、LET FL=BITXOR(FL,1) 等) ※変数FLが0,1,0,1,0,1...と繰り返す

!'ここは何らかのプログラムが続きます。

LOOP
END

他にもいろいろなやり方、書き方はあるかと思いますが、
とりあえずは、ご参考までに。
 

外部関数定義部のデータ読み込み

 投稿者:ちゃとら  投稿日:2018年11月29日(木)04時47分1秒
  しばっち様

  有り難うございます。試させていただきます。現在は数値変数はmodule内で共用されて
 いるのですが数値配列が共用出来ていない状況です。


 
 

Re: 外部関数定義部のデータ読み込み

 投稿者:白石和夫  投稿日:2018年11月29日(木)10時34分31秒
  > No.4571[元記事へ]

データの読み込み部を副プログラムで書くとしたら次のような形になります。
1030行でshare宣言した変数aがmodule mで共用になります。


100 DECLARE EXTERNAL FUNCTION m.f
110 DECLARE EXTERNAL SUB m.s
120 CALL s
130 FOR k=1 TO 10
140    PRINT f(k)
150 NEXT k
160 END
1000 MODULE m
1010 PUBLIC FUNCTION f
1020 PUBLIC SUB s
1030 SHARE NUMERIC a(10)
1040 EXTERNAL SUB s
1050    DATA 10,20,30,40,50,60,70,80,90,100
1060    MAT READ a
1070 END SUB
1080 EXTERNAL FUNCTION f(x)
1090    LET f=a(x)
1100 END FUNCTION
1110 END MODULE

 

外部関数定義部のデータ読み込み

 投稿者:ちゃとら  投稿日:2018年12月 1日(土)00時12分33秒
  白石様、しばっち様

  大切な御時間を割きお教えいただき有り難うございます。 しかし、未だできあがらずの状態です。

  お知恵を拝借させてください。

  本プログラムは配管の保温計算を行う物で、在職中はエクセルにて行っていました。ネットで日本原子力研究所のレポートで
 ”多成分混合気体の熱物性値”JAERI-M 92-131  1992年9月 を見つけ、今まで気体の物性値は日本機械学会の”伝熱工学資料”等の物性値表から
 単純に保管して求めていた物を近似計算式で求める方式に書き換えてみた物です。

  行番号1000~4980までが主計算、結果表示部で

  号番号5000~8440までが気体の物性値を計算する部分です。

   この、5010~6240 までが変数の定義、データの読み込み部になっています。ここの部分を1度読み込むだけにしたいと言うのが
  今取り組んでいる問題です。将来的にはこの保温計算をさらに別のプログラムに組み込みたいと考えています。従って、計算時間の
  無駄を少しでも減らしたいと思います。

   よろしくお願いいたします。 プログラムの入力はすべて書き込んでありますのでRUNさせるとすぐに結果を表示いたします。

主プログラムです。


1000 DECLARE EXTERNAL SUB airpro         ! 混合気体の物性値計算
1010 DIM pipe(19,4)                      ! 配管サイズの設定
1020 DIM ps(4)                           ! 配管サイズ番号
1030 DIM ins$(10)                        ! 保温材名称
1040 DIM insm(4,2)                       ! 1,2層目保温材番号
1050 DIM insth(4,3)                      ! 1,2層目保温厚さ、全厚
1060 DIM ins(10,3)                       ! 保温材番号順の熱伝導率データ
1070 DIM facek(4)                        ! 保温表面温度  K
1080 DIM airdat(4,8)                     ! 各保温表面温度  K と外気の平均温度に於ける気体物性値
1090 DIM midt(4,2)
1100 DIM t(4)                            ! 仮2層保温中間温度
1110 DIM kekka(4,14)                     ! 計算結果
1120 DIM Rth(4,4)                        ! 熱抵抗
1130 REM **********************************************************************
1140 MAT READ pipe(19,4)              ! 配管サイズの設定
1150 MAT READ ins$(10)                ! 保温材名称
1160 MAT READ ins(10,3)               ! 保温材データの設定
1170 REM ******************************************
1180 REM LET q=0
1190 REM INPUT PROMPT "配管ライン名称      ":name$
1200 LET name$="pi"
1210 REM INPUT PROMPT "保 持 温 度     (C')":maint
1220 LET maint=200
1230 REM INPUT PROMPT "外 気 温 度    (C')":ambi
1240 LET ambi=0
1250 REM INPUT PROMPT "風       速    (m/s)":wv
1260 LET wv=10
1270 REM INPUT PROMPT "設 計 裕 度         ":df
1280 LET df=1.3
1290 REM INPUT PROMPT "効       率         ":eff
1300 LET eff=0.95
1310 PRINT "   番号   配管 (A)    番号   配管 (A)    番号   配管 (A)"
1320 PRINT "    1       15         7       65         14     200 "
1330 PRINT "    2       20         8       80         15     250 "
1340 PRINT "    3       25         9       90         16     300 "
1350 PRINT "    4       32        10      100         17     350 "
1360 PRINT "    5       40        11      125         18     400 "
1370 PRINT "    6       50        12      150         19     450 "
1380 LET pn=1
1390 REM INPUT PROMPT "配管 1  番号        ":ps(1)
1400 LET ps(1)=10                                ! 仮の値
1410 REM INPUT PROMPT "配管 2  番号 無い場合は 0":ps(2)
1420 LET ps(2)=12                                ! 仮の値
1430 LET pn=2
1440 IF ps(2)=0 THEN
1450    LET ps(2)=ps(1)
1460    LET ps(3)=ps(1)
1470    LET ps(4)=ps(1)
1480    LET pn=1
1490 END IF
1500 IF pn=2 THEN
1510    REM INPUT PROMPT "配管 3  番号 無い場合は 0":ps(3)
1520    LET ps(3)=14                                ! 仮の値
1530    LET pn=3
1540    IF ps(3)=0 THEN
1550       LET ps(3)=ps(1)
1560       LET ps(4)=ps(1)
1570       LET pn=2
1580    END IF
1590 END IF
1600 IF pn=3 THEN
1610    REM INPUT PROMPT "配管 4  番号 無い場合は 0":ps(4)
1620    LET ps(4)=16                                ! 仮の値  配管4種類にしています。
1630    LET pn=4                                    ! pn=4 の条件に設定
1640    IF ps(4)=0 THEN
1650       LET ps(4)=ps(1)
1660       LET pn=3
1670    END IF
1680 END IF
1690 PRINT "    bangou   kigou         λ0        λ1       λ3        "
1700 PRINT "       1     clc13-300   0.04070   1.28E-04       0        "
1710 PRINT "       2     clc13-800   0.05550   2.05E-05   1.93E- 7     "
1720 PRINT "       3     clc22-300   0.05350   1.16E-04       0        "
1730 PRINT "       4     clc22-800   0.06120   3.38E-05   1.95E-07     "
1740 PRINT "       5     gwc         0.03330   1.21E-04   6.56E-07     "
1750 PRINT "       6     T#1260      0.11000   -1.40E-04  2.60E-07     "
1760 PRINT "       7     rwc100      0.03140   1.74E-04       0        "
1770 PRINT "       8     rwc600      0.04070   1.16E-04   7.67E-07     "
1780 PRINT "       9     T#5120      0.02470   1.014E-04  7.55E-08     "
1790 IF pn=1 THEN
1800    LET insmn=1
1810    INPUT PROMPT "配管1  1層目 保温材番号,厚みmm":insm(1,1),insth(1,1)
1820    INPUT PROMPT "配管 1  2層目 保温材番号,厚みmm 無い場合は ”0,0”":insm(1,2),insth(1,2)
1830    IF insm(1,2)=0 THEN
1840       LET insmn=0
1850       LET insm(1,2)=insm(1,1)
1860       LET insth(1,2)=0
1870    END IF
1880    LET insm(2,1)=insm(1,1)
1890    LET insth(2,1)=insth(1,1)
1900    LET insm(2,2)=insm(1,2)
1910    LET insth(2,2)=insth(1,2)
1920    LET insm(3,1)=insm(1,1)
1930    LET insth(3,1)=insth(1,1)
1940    LET insm(3,2)=insm(1,2)
1950    LET insth(3,2)=insth(1,2)
1960    LET insm(4,1)=insm(1,1)
1970    LET insth(4,1)=insth(1,1)
1980    LET insm(4,2)=insm(1,2)
1990    LET insth(4,2)=insth(1,2)
2000 END IF
2010 IF pn=2 THEN
2020    LET insmn=1
2030    INPUT PROMPT "配管1  1層目 保温材番号,厚みmm":insm(1,1),insth(1,1)
2040    INPUT PROMPT "配管 1  2層目 保温材番号,厚みmm 無い場合は”0,0”":insm(1,2),insth(1,2)
2050    IF insm(1,2)=0 THEN
2060       LET insmn=0
2070       LET insm(1,2)=insm(1,1)
2080       LET insth(1,2)=0
2090    END IF
2100    LET insmn=1
2110    INPUT PROMPT "配管 2  1層目 保温材番号,厚みmm":insm(2,1),insth(2,1)
2120    INPUT PROMPT "配管 2  2層目 保温材番号,厚みmm 無い場合は”0,0”":insm(2,2),insth(2,2)
2130    IF insm(2,2)=0 THEN
2140       LET insmn=0
2150       LET insm(2,2)=insm(2,1)
2160       LET insth(2,2)=0
2170    END IF
2180    LET insm(3,1)=insm(1,1)
2190    LET insth(3,1)=insth(1,1)
2200    LET insm(3,2)=insm(1,2)
2210    LET insth(3,2)=insth(1,2)
2220    LET insm(4,1)=insm(1,1)
2230    LET insth(4,1)=insth(1,1)
2240    LET insm(4,2)=insm(1,2)
2250    LET insth(4,2)=insth(1,2)
2260 END IF
2270 IF pn=3 THEN
2280    LET insmn=1
2290    INPUT PROMPT "配管1  1層目 保温材番号,厚みmm":insm(1,1),insth(1,1)
2300    INPUT PROMPT "配管 1  2層目 保温材番号,厚みmm 無い場合は”0,0”":insm(1,2),insth(1,2)
2310    IF insm(1,2)=0 THEN
2320       LET insmn=0
2330       LET insm(1,2)=insm(1,1)
2340       LET insth(1,2)=0
2350    END IF
2360    LET insmn=1
2370    INPUT PROMPT "配管 2  1層目 保温材番号,厚みmm":insm(2,1),insth(2,1)
2380    INPUT PROMPT "配管 2  2層目 保温材番号,厚みmm 無い場合は”0,0”":insm(2,2),insth(2,2)
2390    IF insm(2,2)=0 THEN
2400       LET insmn=0
2410       LET insm(2,2)=insm(2,1)
2420       LET insth(2,2)=0
2430    END IF
2440    LET insmn=1
2450    INPUT PROMPT "配管 3  1層目 保温材番号,厚みmm":insm(3,1),insth(3,1)
2460    INPUT PROMPT "配管 3  2層目 保温材番号,厚みmm 無い場合は”0,0”":insm(3,2),insth(3,2)
2470    IF insm(3,2)=0 THEN
2480       LET insmn=0
2490       LET insm(3,2)=insm(3,1)
2500       LET insth(3,2)=0
2510    END IF
2520    LET insm(4,1)=insm(1,1)
2530    LET insth(4,1)=insth(1,1)
2540    LET insm(4,2)=insm(1,2)
2550    LET insth(4,2)=insth(1,2)
2560 END IF
2570 IF pn=4 THEN
2580    LET insmn=1
2590    REM INPUT PROMPT "配管1  1層目 保温材番号,厚みmm":insm(1,1),insth(1,1)
2600    LET insm(1,1)=1
2610    LET insth(1,1)=65
2620    REM INPUT PROMPT "配管 1  2層目 保温材番号,厚みmm 無い場合は”0,0”":insm(1,2),insth(1,2)
2630    LET insm(1,2)=0
2640    LET insth(1,2)=0
2650    IF insm(1,2)=0 THEN
2660       LET insmn=0
2670       LET insm(1,2)=insm(1,1)
2680       LET insth(1,2)=0
2690    END IF
2700    LET insmn=1
2710    REM INPUT PROMPT "配管 2  1層目 保温材番号,厚みmm":insm(2,1),insth(2,1)
2720    LET insm(2,1)=1
2730    LET insth(2,1)=75
2740    REM INPUT PROMPT "配管 2  2層目 保温材番号,厚みmm 無い場合は”0,0”":insm(2,2),insth(2,2)
2750    LET insm(2,2)=0
2760    LET insth(2,2)=0
2770    IF insm(2,2)=0 THEN
2780       LET insmn=0
2790       LET insm(2,2)=insm(2,1)
2800       LET insth(2,2)=0
2810    END IF
2820    LET insmn=1
2830    REM INPUT PROMPT "配管 3  1層目 保温材番号,厚みmm":insm(3,1),insth(3,1)
2840    LET insm(3,1)=1
2850    LET insth(3,1)=75
2860    REM INPUT PROMPT "配管 3  2層目 保温材番号,厚みmm 無い場合は”0,0”":insm(3,2),insth(3,2)
2870    LET insm(3,2)=1
2880    LET insth(3,2)=15
2890    IF insm(3,2)=0 THEN
2900       LET insmn=0
2910       LET insm(3,2)=insm(3,1)
2920       LET insth(3,2)=0
2930    END IF
2940    LET insmn=1
2950    REM INPUT PROMPT "配管 4  1層目 保温材番号,厚みmm":insm(4,1),insth(4,1)
2960    LET insm(4,1)=1
2970    LET insth(4,1)=75
2980    REM INPUT PROMPT "配管 4  2層目 保温材番号,厚みmm 無い場合は”0,0”":insm(4,2),insth(4,2)
2990    LET insm(4,2)=1
3000    LET insth(4,2)=25
3010    IF insm(4,2)=0 THEN
3020       LET insmn=0
3030       LET insm(4,2)=insm(4,1)
3040       LET insth(4,2)=0
3050    END IF
3060 END IF
3070 REM ********** 初期温度の設定 **********
3080 LET face1 = ambi+273+0.1
3090 FOR i=1 TO 4
3100    LET facek(i)=face1                                ! 仮保温表面温度
3110    LET t(i)=(maint+(facek(i)-273))/2                ! 仮2層保温中間温度
3120 NEXT i
3130 REM ********** 保温材熱伝導率の計算  **************************
3140 FOR i=1 TO 4
3150    LET t1=(maint+t(i))/2
3160    LET t2=(t(i)+(facek(i)-273))/2
3170    LET x=1
3180    DO
3190       REM ********** 空気物性値の計算  ****************************
3200       CALL airpro(facek(i)-273,k2,k3,k4,k5,k6,k7,k8)
3210       LET airdat(i,2)=k2         !  比重          kg/m^3
3220       LET airdat(i,3)=k3         !  比熱          kJ/kgK
3230       LET airdat(i,4)=k4         !  粘性係数      μPa・S
3240       LET airdat(i,5)=k5         !  動粘性係数    mm^2/S
3250       LET airdat(i,6)=k6         !  熱伝導率      mW/mK
3260       LET airdat(i,7)=k7         !  温度伝導率    mm^2/S
3270       LET airdat(i,8)=k8         !  プラントル数
3280       LET d0=pipe(ps(i),4)                                                                  ! 保温材内径
3290       LET d1=pipe(ps(i),4)+2*insth(i,1)/1000                                                ! 1層目保温材外径
3300       LET d2=pipe(ps(i),4)+2*insth(i,1)/1000+2*insth(i,2)/1000                              ! 2層目保温材外径
3310       LET t1=(maint+t(i))/2                                                                 ! 1層目保温平均温度
3320       LET c1=(maint^2+maint*t(i)+t(i)^2)/3                                                  ! 熱伝導率計算係数
3330       LET r1=(ins(insm(i,1),1)+ins(insm(i,1),2)*t1+ins(insm(i,1),3)*c1 )                    ! 保温材熱伝導率
3340       LET Rth(i,1)=1/(2*PI*r1)*LOG(d1/d0)                                                   ! 1層目保温層熱抵抗
3350       LET t2=(t(i)+(facek(i)-273))/2                                                        ! 2層目保温平均温度
3360       LET c2=(t(i)^2+t(i)*(facek(i)-273)+(facek(i)-273)^2)/3                                ! 熱伝導率計算係数
3370       LET r2=(ins(insm(i,2),1)+ins(insm(i,2),2)*t2+ins(insm(i,2),3)*c2 )                    ! 保温材熱伝導率
3380       LET Rth(i,2)=1/(2*PI*r2)*LOG(d2/d1)
3390       LET re=wv*3600*d2/(airdat(i,5)*3600/1000000)
3400       LET ac=1.12*(0.373*re^0.5+0.057*re^(2/3))*airdat(i,8)^(1/3)*airdat(i,6)/1000/d2
3410       LET ar=0.8*5.67E-8*(faceK(i)^4-(ambi+273)^4)/(facek(i)-(ambi+273))
3420       LET Rth(i,3)=1/(PI*d2*(ac+ar))
3430       LET Rth(i,4)=Rth(i,1)+Rth(i,2)+Rth(i,3)
3440       LET hloss=(maint-ambi)/Rth(i,4)
3450       LET fk=hloss*Rth(i,3)+ambi+273
3460       LET faceK(i) = fk
3470       LET t(i)=hloss*(Rth(i,2)+Rth(i,3))+ambi
3480       LET x=x+1
3490    LOOP WHILE X<=20
3500    LET kekka(i,1)=t1
3510    LET kekka(i,2)=c1
3520    LET kekka(i,3)=r1
3530    LET kekka(i,4)=t2
3540    LET kekka(i,5)=c2
3550    LET kekka(i,6)=r2
3560    LET kekka(i,7)=re
3570    LET kekka(i,8)=ac
3580    LET kekka(i,9)=ar
3590    LET kekka(i,10)=fk
3600    LET kekka(i,11)=t(i)
3610    LET kekka(i,12)=d0
3620    LET kekka(i,13)=d1
3630    LET kekka(i,14)=d2
3640 NEXT i
3650 REM *********************** 計算結果の表示  ***********************
3660 PLOT TEXT ,AT 0.1,0.95:"配管ライン名称      "
3670 PLOT TEXT ,AT 0.35,0.95: name$
3680 PLOT TEXT ,AT 0.1,0.92:"保 持 温 度     (C')"
3690 PLOT TEXT ,AT 0.35,0.92: STR$(maint)
3700 PLOT TEXT ,AT 0.1,0.89:"外 気 温 度     (C')"
3710 PLOT TEXT ,AT 0.35,0.89: STR$(ambi)
3720 PLOT TEXT ,AT 0.5,0.95:"風       速    (m/s)"
3730 PLOT TEXT ,AT 0.75,0.95: STR$(wv)
3740 PLOT TEXT ,AT 0.5,0.92:"設 計 裕 度         "
3750 PLOT TEXT ,AT 0.75,0.92: STR$(df)
3760 PLOT TEXT ,AT 0.5,0.89:"効       率         "
3770 PLOT TEXT ,AT 0.75,0.89: STR$(eff)
3780 PLOT TEXT ,AT 0.25,0.85:"配管サイズ"
3790 PLOT TEXT ,AT 0.40,0.85:"保温層"
3800 PLOT TEXT ,AT 0.50,0.85:"保温材"
3810 PLOT TEXT ,AT 0.60,0.85:"保温厚さ"
3820 PLOT TEXT ,AT 0.15,0.82:"配管  1"
3830 PLOT TEXT ,AT 0.28,0.82,USING"###": pipe(ps(1),1)
3840 PLOT TEXT ,AT 0.40,0.82:"1層目"
3850 PLOT TEXT ,AT 0.49,0.82:ins$(insm(1,1))
3860 PLOT TEXT ,AT 0.62,0.82,USING"###":insth(1,1)
3870 LET ygyou =0.82
3880 IF insth(1,2)<>0 THEN LET ygyou=ygyou-0.02
3890 IF insth(1,2)<>0 THEN PLOT TEXT ,AT 0.40,ygyou :"2層目"
3900 IF insth(1,2)<>0 THEN PLOT TEXT ,AT 0.49,ygyou :ins$(insm(1,2))
3910 IF insth(1,2)<>0 THEN PLOT TEXT ,AT 0.62,ygyou ,USING"###":insth(1,2)
3920 IF pn => 2 THEN LET ygyou=ygyou-0.02
3930 IF pn => 2 THEN PLOT TEXT ,AT 0.15,ygyou :"配管  2"
3940 IF pn => 2 THEN PLOT TEXT ,AT 0.28,ygyou ,USING"###": pipe(ps(2),1)
3950 IF pn => 2 THEN PLOT TEXT ,AT 0.40,ygyou :"1層目"
3960 IF pn => 2 THEN PLOT TEXT ,AT 0.49,ygyou :ins$(insm(2,1))
3970 IF pn => 2 THEN PLOT TEXT ,AT 0.62,ygyou ,USING"###":insth(2,1)
3980 IF pn => 2 AND insth(2,2)<>0 THEN LET ygyou =ygyou-0.02
3990 IF pn => 2 AND insth(2,2)<>0 THEN PLOT TEXT ,AT 0.40,ygyou :"2層目"
4000 IF pn => 2 AND insth(2,2)<>0 THEN PLOT TEXT ,AT 0.49,ygyou :ins$(insm(2,2))
4010 IF pn => 2 AND insth(2,2)<>0 THEN PLOT TEXT ,AT 0.62,ygyou ,USING"###":insth(2,2)
4020 IF pn => 3 THEN LET ygyou=ygyou-0.02
4030 IF pn => 3 THEN PLOT TEXT ,AT 0.15,ygyou:"配管  3"
4040 IF pn => 3 THEN PLOT TEXT ,AT 0.28,ygyou,USING"###": pipe(ps(3),1)
4050 IF pn => 3 THEN PLOT TEXT ,AT 0.40,ygyou:"1層目"
4060 IF pn => 3 THEN PLOT TEXT ,AT 0.49,ygyou:ins$(insm(3,1))
4070 IF pn => 3 THEN PLOT TEXT ,AT 0.62,ygyou,USING"###":insth(3,1)
4080 IF pn => 3 AND insth(3,2)<>0 THEN LET ygyou=ygyou-0.02
4090 IF pn => 3 AND insth(3,2)<>0 THEN PLOT TEXT ,AT 0.40,ygyou:"2層目"
4100 IF pn => 3 AND insth(3,2)<>0 THEN PLOT TEXT ,AT 0.49,ygyou:ins$(insm(3,2))
4110 IF pn => 3 AND insth(3,2)<>0 THEN PLOT TEXT ,AT 0.62,ygyou,USING"###":insth(3,2)
4120 IF pn = 4 THEN LET ygyou=ygyou-0.02
4130 IF pn = 4 THEN PLOT TEXT ,AT 0.15,ygyou:"配管  4"
4140 IF pn = 4 THEN PLOT TEXT ,AT 0.28,ygyou,USING"###": pipe(ps(4),1)
4150 IF pn = 4 THEN PLOT TEXT ,AT 0.40,ygyou:"1層目"
4160 IF pn = 4 THEN PLOT TEXT ,AT 0.49,ygyou:ins$(insm(4,1))
4170 IF pn = 4 THEN PLOT TEXT ,AT 0.62,ygyou,USING"###":insth(4,1)
4180 IF pn = 4  AND insth(4,2)<>0 THEN LET ygyou=ygyou-0.02
4190 IF pn = 4  AND insth(4,2)<>0 THEN PLOT TEXT ,AT 0.40,ygyou:"2層目"
4200 IF pn = 4  AND insth(4,2)<>0 THEN PLOT TEXT ,AT 0.49,ygyou:ins$(insm(4,2))
4210 IF pn = 4  AND insth(4,2)<>0 THEN PLOT TEXT ,AT 0.62,ygyou,USING"###":insth(4,2)
4220 LET ygyou=ygyou-0.02*2
4230 PLOT TEXT ,AT 0.25,ygyou:"保温筒内径   保温筒外径     Re      αc     αr      α    "
4240 LET ygyou=ygyou-0.02
4250 PLOT TEXT ,AT 0.15,ygyou:"配管  1"
4260 PLOT TEXT ,AT 0.27,ygyou,USING"%.###        %.###     ######    ###.#    ##.#     ###.# ":kekka(1,12),kekka(1,13),kekka(1,7),kekka(1,8),kekka(1,9),kekka(1,8)+kekka(1,9)
4270 IF insth(1,2)<>0 THEN  LET ygyou=ygyou-0.02
4280 IF insth(1,2)<>0 THEN  PLOT TEXT ,AT 0.27,ygyou,USING"%.###        %.###":kekka(1,13),kekka(1,14)
4290 IF pn => 2 THEN LET ygyou=ygyou-0.02
4300 IF pn => 2 THEN PLOT TEXT ,AT 0.15,ygyou:"配管  2"
4310 IF pn => 2 THEN PLOT TEXT ,AT 0.27,ygyou,USING"%.###        %.###     ######    ###.#    ##.#     ###.# ":kekka(2,12),kekka(2,13),kekka(2,7),kekka(2,8),kekka(2,9),kekka(2,8)+kekka(2,9)
4320 IF pn => 2 AND insth(2,2)<> 0 THEN LET ygyou=ygyou-0.02
4330 IF pn => 2 AND insth(2,2)<> 0 THEN PLOT TEXT ,AT 0.27,ygyou,USING"%.###        %.###":kekka(2,13),kekka(2,14)
4340 IF pn => 3 THEN LET ygyou=ygyou-0.02
4350 IF pn => 3 THEN PLOT TEXT ,AT 0.15,ygyou:"配管  3"
4360 IF pn => 3 THEN PLOT TEXT ,AT 0.27,ygyou,USING"%.###        %.###     ######    ###.#    ##.#     ###.# ":kekka(3,12),kekka(3,13),kekka(3,7),kekka(3,8),kekka(3,9),kekka(3,8)+kekka(3,9)
4370 IF pn => 3 AND insth(3,2)<>0 THEN LET ygyou=ygyou-0.02
4380 IF pn => 3 AND insth(3,2)<>0 THEN PLOT TEXT ,AT 0.27,ygyou,USING"%.###        %.###":kekka(3,13),kekka(3,14)
4390 IF pn = 4 THEN LET ygyou=ygyou-0.02
4400 IF pn = 4 THEN PLOT TEXT ,AT 0.15,ygyou:"配管  4"
4410 IF pn = 4 THEN PLOT TEXT ,AT 0.27,ygyou,USING"%.###        %.###     ######    ###.#    ##.#     ###.# ":kekka(4,12),kekka(4,13),kekka(4,7),kekka(4,8),kekka(4,9),kekka(4,8)+kekka(4,9)
4420 IF pn = 4 AND insth(4,2)<>0 THEN LET ygyou=ygyou-0.02
4430 IF pn = 4 AND insth(4,2)<>0 THEN PLOT TEXT ,AT 0.27,ygyou,USING"%.###        %.###":kekka(4,13),kekka(4,14)
4440 LET ygyou=ygyou-0.02*3
4450 PLOT TEXT ,AT 0.25,ygyou:"  Rth1    Rth2    Rth3     Rth     hloss     Pr      θmid      θf"
4460 LET ygyou=ygyou-0.02
4470 PLOT TEXT ,AT 0.25,ygyou:"                          C'm/W     W/m      W/m       C'        C' "
4480 LET ygyou=ygyou-0.02
4490 PLOT TEXT ,AT 0.15,ygyou:"配管  1"
4500 PLOT TEXT ,AT 0.26,ygyou,USING"##.##   ##.##    %.##    ##.##    ###.#    ###.#    ###.#    ###.#    ##.##":Rth(1,1),Rth(1,2),Rth(1,3),Rth(1,4),(maint-ambi)/Rth(1,4),(maint-ambi)/Rth(1,4)*df/eff,kekka(1,11),kekka(1,10)-273
4510 LET ygyou=ygyou-0.02
4520 IF pn => 2 THEN PLOT TEXT ,AT 0.15,ygyou:"配管  2"
4530 IF pn => 2 THEN PLOT TEXT ,AT 0.26,ygyou,USING"##.##   ##.##    %.##    ##.##    ###.#    ###.#    ###.#    ###.#    ##.##":Rth(2,1),Rth(2,2),Rth(2,3),Rth(2,4),(maint-ambi)/Rth(2,4),(maint-ambi)/Rth(2,4)*df/eff,kekka(2,11),kekka(2,10)-273
4540 LET ygyou=ygyou-0.02
4550 IF pn => 3 THEN PLOT TEXT ,AT 0.15,ygyou:"配管  3"
4560 IF pn => 3 THEN PLOT TEXT ,AT 0.26,ygyou,USING"##.##   ##.##    %.##    ##.##    ###.#    ###.#    ###.#    ###.#    ##.##":Rth(3,1),Rth(3,2),Rth(3,3),Rth(3,4),(maint-ambi)/Rth(3,4),(maint-ambi)/Rth(3,4)*df/eff,kekka(3,11),kekka(3,10)-273
4570 LET ygyou=ygyou-0.02
4580 IF pn = 4 THEN PLOT TEXT ,AT 0.15,ygyou:"配管  4"
4590 IF pn = 4 THEN PLOT TEXT ,AT 0.26,ygyou,USING"##.##   ##.##    %.##    ##.##    ###.#    ###.#    ###.#    ###.#    ##.##":Rth(4,1),Rth(4,2),Rth(4,3),Rth(4,4),(maint-ambi)/Rth(4,4),(maint-ambi)/Rth(4,4)*df/eff,kekka(4,11),kekka(4,10)-273
4600 REM ********** 配管データ **********
4610 REM  si     d2        t      di
4620 DATA 15 , 0.0217 , 0.0028 , 0.034
4630 DATA 20 , 0.0272 , 0.0029 , 0.034
4640 DATA 25 , 0.034  , 0.0034 , 0.0427
4650 DATA 32 , 0.0427 , 0.0036 , 0.0486
4660 DATA 40 , 0.0486 , 0.0037 , 0.0605
4670 DATA 50 , 0.0605 , 0.0039 , 0.0763
4680 DATA 65 , 0.0763 , 0.0052 , 0.0891
4690 DATA 80 , 0.0891 , 0.0055 , 0.1016
4700 DATA 90 , 0.1016 , 0.0057 , 0.1143
4710 DATA 100, 0.1143 , 0.0060 , 0.1398
4720 DATA 125, 0.1398 , 0.0066 , 0.1652
4730 DATA 150, 0.1652 , 0.0071 , 0.1910
4740 DATA 200, 0.2163 , 0.0082 , 0.2419
4750 DATA 250, 0.2674 , 0.0093 , 0.2930
4760 DATA 300, 0.3185 , 0.0103 , 0.3370
4770 DATA 350, 0.3556 , 0.0111 , 0.3810
4780 DATA 400, 0.4064 , 0.0127 , 0.4320
4790 DATA 450, 0.4572 , 0.0143 , 0.4830
4800 DATA 500, 0.5080 , 0.0151 , 0.5330
4810 REM *********************************
4820 REM ********** 保温材データ **********
4830 DATA clc13-300 , clc13-800 , clc22-300 , clc22-800 , gwc
4840 DATA Ts1260    , rwc100    , rwc600    , Ts5120    , daipa
4850 REM ********** 保温材熱伝導率 **********
4860 REM     r1         r2         r3
4870 DATA 0.04070 , 1.28E-04 , 0
4880 DATA 0.05550 , 2.05E-05 , 1.93E-07
4890 DATA 0.05350 , 1.16E-04 , 0
4900 DATA 0.06120 , 3.38E-05 , 1.95E-07
4910 DATA 0.03330 , 1.21E-04 , 6.56E-07
4920 DATA 0.11000 , -1.40E-04, 2.60E-07
4930 DATA 0.03140 , 1.74E-04 , 0
4940 DATA 0.04070 , 1.16E-04 , 7.67E-07
4950 DATA 0.02470 , 1.14E-04 , 7.55E-08
4960 DATA 0.05550 , 2.05E-05 , 1.93E-07
4970 REM ***********************************
4980 END
 

外部関数定義部のデータ読み込み

 投稿者:ちゃとら  投稿日:2018年12月 1日(土)00時15分28秒
  多成分気体の熱物性値を計算する部分のプログラムです。


4990 REM *****************************************************************
5000 EXTERNAL SUB airpro(k,rho7,cp7,mu7,nu7,lambda7,alpha7,pr7)
5010 REM SET WINDOW 0,1.0,0,1.0
5020 LET n=6                     !対象気体数      6種類  N2,O2,CO2,CO,He,Air
5030 REM TK                      !絶対温度    K
5040 REM Pa                      !圧力  パスカル
5050 DIM rho(n+1)                !各気体の密度
5060 DIM CP(n+1)                 !  〃    定圧比熱
5070 DIM CVv(n+1)                !  〃    定容比熱
5080 DIM CPO(n+1)                !  〃    定圧分子熱
5090 DIM n$(n)                   !気体名称    N2  ,  O2  ,  CO2  ,  CO  ,  He  ,  Air
5100 DIM mwp(n)                  !質量分率    重量%
5110 DIM mw(n)                   !分子量      molecular weight
5120 REM Mave                    !平均モル質量
5130 DIM Xmol(n+1)               !モル数
5140 DIM Xmolb(n)                !モル分率(体積分率)
5150 DIM mu(n+1)                 !粘性係数
5160 DIM phi(n,n)                !粘性係数計算係数
5170 DIM phix(n,n)
5180 DIM nu(n+1)                 !動粘性係数
5190 DIM alpha(n+1)              !温度伝導率
5200 DIM Pr(n+1)                 !プラントル数
5210 DIM kk(n)
5220 DIM lambda(n+1)             !熱伝導率
5230 DIM Tc(n)                   !臨界温度    critical temperature
5240 DIM Pc(n)                   !臨界圧力    critical pressure
5250 DIM zeta(n)                 !偏心因子
5260 DIM Ac0(n)                  !Ac0         定圧分子熱の推算式に於ける係数
5270 DIM Bc0(n)                  !Bc0              〃              〃
5280 DIM Cc0(n)                  !Cc0              〃              〃
5290 DIM Dc0(n)                  !Dc0              〃              〃
5300 DIM Ac1(n)                  !Ac1         定圧比熱の推算式に於ける係数
5310 DIM Bc1(n)                  !Bc1              〃              〃
5320 DIM Cc1(n)                  !Cc1              〃              〃
5330 DIM Dc1(n)                  !Dc1              〃              〃
5340 DIM Ac2(n)                  !Ac2         定容比熱の推算式に於ける係数
5350 DIM Bc2(n)                  !Bc2              〃              〃
5360 DIM Cc2(n)                  !Cc2              〃              〃
5370 DIM Dc2(n)                  !Dc2              〃              〃
5380 DIM shiguma (n)             !σ          各成分気体の特性直径
5390 DIM epsilonk(n)            !ε/k        各成分気体の特性エネルギー
5400 DIM ohmv(6)                 !Ωv         粘性の衝突積分
5410 DIM ohmd(8)                 !Ωd         拡散の衝突積分
5420 REM *******************************************************************
5430 REM *           定数の読み込み                                        *
5440 REM *******************************************************************
5450 FOR i=1 TO n
5460    READ n$(i)
5470 NEXT i
5480 FOR i=1 TO n
5490    READ mw(i)
5500 NEXT i
5510 FOR i=1 TO n
5520    READ Tc(i)
5530 NEXT i
5540 FOR i=1 TO n
5550    READ Pc(i)
5560 NEXT i
5570 FOR i=1 TO n
5580    READ zeta(i)
5590 NEXT i
5600 FOR i=1 TO n
5610    READ Ac0(i)
5620 NEXT i
5630 FOR i=1 TO n
5640    READ Bc0(i)
5650    LET Bc0(i)=Bc0(i)*1E-2
5660 NEXT i
5670 FOR i=1 TO n
5680    READ Cc0(i)
5690    LET Cc0(i)=Cc0(i)*1E-6
5700 NEXT i
5710 FOR i=1 TO n
5720    READ Dc0(n)
5730    LET Dc0(i)=Dc0(i)*1E-9
5740 NEXT i
5750 FOR i=1 TO n
5760    READ Ac1(i)
5770 NEXT i
5780 FOR i=1 TO n
5790    READ Bc1(i)
5800    LET Bc1(i)=Bc1(i)*1E-4
5810 NEXT i
5820 FOR i=1 TO n
5830    READ Cc1(i)
5840    LET Cc1(i)=Cc1(i)*1E-8
5850 NEXT i
5860 FOR i=1 TO n
5870    READ Dc1(i)
5880    LET Dc1(i)=Dc1(i)*1E-12
5890 NEXT i
5900 FOR i=1 TO n
5910    READ Ac2(i)
5920 NEXT i
5930 FOR i=1 TO n
5940    READ Bc2(i)
5950    LET Bc2(i)=Bc2(i)*1E-4
5960 NEXT I
5970 FOR i=1 TO n
5980    READ Cc2(i)
5990    LET Cc2(i)=Cc2(i)*1E-8
6000 NEXT i
6010 FOR i=1 TO n
6020    READ Dc2(i)
6030    LET Dc2(i)=Dc2(i)*1E-12
6040 NEXT i
6050 FOR i=1 TO n
6060    READ shiguma(i)
6070 NEXT i
6080 FOR i=1 TO n
6090    READ epsilonk(i)
6100 NEXT i
6110 READ Av
6120 READ Bv
6130 READ Cv
6140 READ Dv
6150 READ Ev
6160 READ Fv
6170 READ Ad
6180 READ Bd
6190 READ Cd
6200 READ Dd
6210 READ Ed
6220 READ Fd
6230 READ Gd
6240 READ Hd
6250 REM *****************************************************
6260 REM *     各気体の質量分率=重量%を入力                *
6270 REM *****************************************************
6280 REM PRINT"各気体の重量%を入力してください"
6290 REM DO WHILE mwp(1)+mwp(2)+mwp(3)+mwp(4)+mwp(5)+mwp(6)<>100
6300 REM    INPUT PROMPT"N2 , O2 , CO2 , CO , He , Air":mwp(1),mwp(2),mwp(3),mwp(4),mwp(5),mwp(6)
6310 REM LOOP
6320 LET mwp(1)=0
6330 LET mwp(2)=0
6340 LET mwp(3)=0
6350 LET mwp(4)=0
6360 LET mwp(5)=0
6370 LET mwp(6)=100
6380 LET Mkongou=0
6390 FOR i=1 TO n
6400    IF mwp(i)<>0 THEN
6410       LET Mkongou=(mwp(i)/100/mw(i))+Mkongou
6420    END IF
6430 NEXT i
6440 LET Mkongou=1/Mkongou                                    ! 混合気体の分子量
6450 FOR i = 1 TO n
6460    IF mwp(i)<>0 THEN
6470       LET Xmolb(i)=Mkongou/mw(i)*mwp(i)                  ! 体積分率の計算
6480    END IF
6490 NEXT i
6500 FOR i=1 TO n
6510    LET Xmol(i)=mwp(i)/mw(i)
6520 NEXT i
6530 REM *****************************************************
6540 REM *     圧力、温度の設定                              *
6550 REM *****************************************************
6560 REM PRINT"計算条件  温度(℃) , 圧力を指示してください。"
6570 REM INPUT PROMPT"    T  C'   ,    P  atm      ":T,Patm      !T  C' : T  ℃      P  atm  : P 気圧
6580 LET T=k
6590 LET Patm=1.0
6600 LET TK=T+273.15                                         !TK    :  絶対温度  K
6610 LET Pa=Patm*101325                                      !Pa    :  パスカル
6620 REM PRINT TK ;"K  " ; TK-273.15;"C'  ";Pa;"Pa  "
6630 REM *****************************************************
6640 REM *     密度の計算  kg/m^3                            *
6650 REM *****************************************************
6660 LET rho(n+1)=0
6670 FOR i=1 TO n
6680    LET rho(i)=Pa*mw(i)/8.314/TK/1000
6690    LET rho(n+1)=rho(i)*Xmolb(i)/100+rho(n+1)
6700 NEXT i
6710 LET rho7=rho(n+1)
6720 REM *****************************************************
6730 REM *    定圧比熱の計算   KJ/kgK                        *
6740 REM *****************************************************
6750 LET CP(n+1)=0
6760 FOR i=1 TO n
6770    IF i=5 THEN
6780       LET CP(i)=5193/1000
6790    ELSE
6800       LET CP(i)=Ac1(i)+Bc1(i)*TK+Cc1(i)*TK^2+Dc1(i)*TK^3
6810    END IF
6820    LET CP0=CP(i)*Xmolb(i)/100+CP0
6830 NEXT i
6840 REM PRINT CP0
6850 REM LET Mmix=0
6860 REM FOR i=1 TO n
6870 REM    LET Mmix=mw(i)*Xmolb(i)/100+Mmix
6880 REM NEXT i
6890 REM PRINT Mmix
6900 LET CP(n+1)=CP0
6910 LET cp7=cp(n+1)
6920 REM ****************************************************
6930 REM *    粘性率の計算     Pa・s                        *
6940 REM ****************************************************
6950 FOR i=1 TO  n
6960    LET tdot=TK/epsilonk(i)
6970    IF i=5 THEN
6980       IF  TK>1100 THEN
6990          LET visc =Av/tdot^Bv
7000       ELSE
7010          LET visc=Av/tdot^Bv+Cv/EXP(Dv*tdot)
7020       END IF
7030       LET mu(i)=26.69*SQR(mw(i)*TK)/shiguma(i)^2/visc*1E-7*1E6
7040    ELSE
7050       LET ohmv(i)=(Av/tdot^Bv+Cv/EXP(Dv*tdot)+Ev/EXP(Fv*tdot))
7060       LET mu(i)=26.69*SQR(mw(i)*TK)/shiguma(i)^2/ohmv(I)*1E-7*1E6
7070    END IF
7080 NEXT i
7090 LET mu(n+1)=0
7100 FOR i=1 TO n
7110    FOR j=1 TO n
7120       IF mwp(j)<>0 THEN
7130          IF mwp(i)<>0 THEN
7140             LET phi(i,j)=(1+(mu(i)/mu(j))^0.5*(mw(j)/mw(i))^0.25)^2/(8*(1+mw(i)/mw(j)))^0.5
7150          END IF
7160       END IF
7170    NEXT j
7180 NEXT i
7190 LET ZZ=0
7200 FOR i=1 TO n
7210    IF mwp(i)<>0 THEN
7220       LET Z=0
7230       FOR j= 1 TO n
7240          IF mwp(j)<>0 THEN
7250             LET Z=Z+xmolb(j)*phi(i,j)
7260          END IF
7270       NEXT j
7280       LET ZZ=ZZ+Xmolb(i)*mu(i)/Z
7290    END IF
7300 NEXT i
7310 LET mu(n+1)=ZZ
7320 LET mu7=mu(n+1)
7330 REM ***************************************************
7340 REM *    熱伝導率の計算  mW/mK                        *
7350 REM ***************************************************
7360 FOR i=1 TO n
7370    LET CVv(i)=Ac2(i)+Bc2(i)*TK+Cc2(i)*TK^2+Dc2(i)*TK^3
7380    LET tdot=TK/epsilonk(i)
7390    IF i=5 THEN
7400       LET CVv(i)=3114
7410       IF  TK > 1100 THEN
7420          LET Ohmvh=Av/tdot^Bv
7430       ELSE
7440          LET ohmvh=Av/tdot^Bv+Cv/EXP(Dv*tdot)
7450       END IF
7460       LET lambdahe=2.669*SQR(mw(i)*TK)/shiguma(i)^2/ohmvh*1E-7*1E6
7470       LET lambda(i)=(1.32*CVv(i)*mw(i)*0.001/4.186+3.52)*lambdahe/mw(i)*4.186*10
7480    ELSE
7490       LET lambda(i)=(1.32*CVv(i)*mw(i)/4.186+3.52)*mu(i)/mw(i)*4.186
7500    END IF
7510 NEXT i
7520 LET lambda(n+1)=0
7530 FOR i=1 TO n
7540    FOR j=1 TO n
7550       IF mwp(j)<>0 THEN
7560          IF mwp(i)<>0 THEN
7570             LET phi(i,j)=(1+(lambda(i)/lambda(j))^0.5*(mw(j)/mw(i))^0.25)^2/(8*(1+mw(i)/mw(j)))^0.5
7580          END IF
7590       END IF
7600    NEXT j
7610 NEXT i
7620 LET ZZ=0
7630 FOR i=1 TO n
7640    IF mwp(i)<>0 THEN
7650       LET Z=0
7660       FOR j= 1 TO n
7670          IF mwp(j)<>0 THEN
7680             LET Z=Z+xmolb(j)*phi(i,j)
7690          END IF
7700       NEXT j
7710       LET ZZ=ZZ+Xmolb(i)*lambda(i)/Z
7720    END IF
7730 NEXT i
7740 LET lambda(n+1)=ZZ
7750 LET lambda7=lambda(n+1)
7760 REM *************************************************
7770 REM *    動粘性係数    mm^2/s                       *
7780 REM *************************************************
7790 FOR i= 1TO n+1
7800    IF rho(i)<>0 THEN
7810       LET nu(i)=mu(i)/rho(i)
7820    END IF
7830 NEXT i
7840 LET nu7=nu(n+1)
7850 REM *************************************************
7860 REM *    温度伝導率    mm^2/s                       *
7870 REM *************************************************
7880 FOR i=1 TO n+1
7890    IF Rho(i)<> 0 THEN
7900       LET alpha(i)=lambda(i)/rho(i)/CP(I)
7910    END IF
7920 NEXT i
7930 LET alpha7=alpha(n+1)
7940 REM *************************************************
7950 REM *    プラントル数                                   *
7960 REM *************************************************
7970 FOR i=1TO n+1
7980    IF alpha(i)<>0 THEN
7990       LET Pr(i)=nu(i)/alpha(i)
8000    END IF
8010 NEXT i
8020 LET pr7=pr(n+1)
8030 REM *************************************************
8040 REM *    計算結果  打ち出し                         *
8050 REM *************************************************
8060 REM PLOT TEXT ,AT 0.05,0.95 ,USING "温度、圧力           絶対温度  ---%.# K    摂氏  ---%.# ℃      圧力  -%.##MPa           ":TK,T,Pa/1000000
8070 REM PLOT TEXT ,AT 0.05,0.90:"                       N2         O2        CO2         CO         He        Air "
8080 REM PLOT TEXT ,AT 0.05,0.88 ,USING "質量分率     ##    ---%.#     ---%.#     ---%.#     ---%.#     ---%.#     ---%.#   ":"%",mwp(1),mwp(2),mwp(3),mwp(4),mwp(5),mwp(6)
8090 REM PLOT TEXT ,AT 0.05,0.86 ,USING "モル数    n mol    ---%.##    ---%.##    ---%.##    ---%.##    ---%.##    ---%.##":Xmol(1),Xmol(2),Xmol(3),Xmol(4),Xmol(5),Xmol(6)
8100 REM PLOT TEXT ,AT 0.05,0.84 ,USING "体積分率     ##    ---%.##    ---%.##    ---%.##    ---%.##    ---%.##    ---%.##":"%",Xmolb(1),Xmolb(2),Xmolb(3),Xmolb(4),Xmolb(5),Xmolb(6)
8110 REM PLOT TEXT ,AT 0.05,0.80 ,USING "混合気体分子量       ---%.##":Mkongou
8120 REM PLOT TEXT ,AT 0.05,0.76: "                       N2         O2        CO2         CO         He         Air        Mix"
8130 REM PLOT TEXT ,AT 0.05,0.74 ,USING "密度  ######         -%.####    -%.####    -%.####    -%.####    -%.####    -%.####    -%.####":"kg/m^3",rho(1),rho(2),rho(3),rho(4),rho(5),rho(6),rho(n+1)
8140 REM PLOT TEXT ,AT 0.05,0.72 ,USING "定圧比熱  ######     -%.####    -%.####    -%.####    -%.####    -%.####    -%.####    -%.####":"KJ/kgK",CP(1),CP(2),CP(3),CP(4),CP(5),CP(6),CP(n+1)
8150 REM PLOT TEXT ,AT 0.05,0.70 ,USING "粘性率の計算 ###### --%.##     --%.##     --%.##     --%.##     --%.##     --%.##      --%.##":"uPa.s",mu(1),mu(2),mu(3),mu(4),mu(5),mu(6),mu(n+1)
8160 REM PLOT TEXT ,AT 0.05,0.68 ,USING "動粘性係数 #####   ---%.##    ---%.##    ---%.##    ---%.##    ---%.##    ---%.##    ---%.##":"mm2/s",nu(1),nu(2),nu(3),nu(4),nu(5),nu(6),nu(n+1)
8170 REM PLOT TEXT ,AT 0.05,0.66 ,USING "熱伝導率  #####    ---%.##    ---%.##    ---%.##    ---%.##    ---%.##    ---%.##    ---%.##":"mW/mK",lambda(1),lambda(2),lambda(3),lambda(4),lambda(5),lambda(6),lambda(n+1)
8180 REM PLOT TEXT ,AT 0.05,0.64 ,USING "温度伝導率  #####  ---%.##    ---%.##    ---%.##    ---%.##    ---%.##    ---%.##    ---%.##":"mm2/s",alpha(1),alpha(2),alpha(3),alpha(4),alpha(5),alpha(6),alpha(n+1)
8190 REM PLOT TEXT ,AT 0.05,0.62 ,USING "プラントル数             -%.####    -%.####    -%.####    -%.####    -%.####    -%.####    -%.####":Pr(1),Pr(2),Pr(3),Pr(4),Pr(5),Pr(6),Pr(n+1)
8200 REM       N2        O2        CO2       CO        He        Air
8210 DATA      N2   ,    O2   ,    CO2  ,    CO   ,    He   ,    Air
8220 DATA  28.0134  ,31.999   ,44.010   ,28.010   ,4.0026   ,28.964   !molecular weight 分子量
8230 DATA    126.2  ,154.6    ,304.2    ,132.9    ,5.19     ,132.5    !Tc               臨界温度    K
8240 DATA     33.5  ,50.1     ,72.8     ,34.5     ,2.24     ,37.2     !Pc               臨界圧力    atm  760mmhg  101325Pa
8250 DATA    0.040  ,0.021    ,0.225    ,0.049    ,-0.387   ,0        !ζ   zeta        偏心因子
8260 DATA    7.440  ,6.713    ,4.728    ,7.373    ,0        ,0        !Ac0              定圧分子熱の推算式に於ける係数
8270 DATA   -0.324  ,-8.79E-5 ,1.754    ,-0.307   ,0        ,0        !Bc0(×10^-2)          〃              〃
8280 DATA    6.400  ,4.170    ,-13.38   ,6.662    ,0        ,0        !Cc0(×10^-6)          〃              〃
8290 DATA   -2.790  ,-2.544   ,4.097    ,-3.037   ,0        ,0        !Dc0(×10^-9)          〃              〃
8300 DATA  0.938314 ,0.817026 ,0.618542 ,0.929207 ,0        ,0.905673 !Ac1              定圧比熱の推算式に於ける係数
8310 DATA  2.95732  ,3.87124  ,9.43157  ,3.43656  ,0        ,3.10391  !Bc1(×10^-4)          〃              〃
8320 DATA -7.31507  ,-14.1476 ,-39.2290 ,-10.0711 ,0        ,-8.59483 !Cc1(×10^-8)          〃              〃
8330 DATA  5.81796  ,19.9678  ,54.4078  ,10.1493  ,0        ,8.56212  !Dc1(×10^-12)         〃              〃
8340 DATA  0.656848 ,0.547045 ,0.396046 ,0.641668 ,0        ,0.625027 !Ac2              定容比熱の推算式に於ける係数
8350 DATA  2.46015  ,4.12982  ,10.5300  ,3.13564  ,0        ,2.89050  !Bc2(×10^-4)          〃              〃
8360 DATA -3.16796  ,-16.1964 ,-48.3891 ,-7.57080 ,0        ,-6.76530 !Cc2(×10^-8)          〃              〃
8370 DATA -3.91928  ,24.6892  ,75.8699  ,4.29183  ,0        ,4.17504  !Dc2(×10^-12)         〃              〃
8380 DATA  3.798    ,3.467    ,3.941    ,3.690    ,2.551    ,3.711    !σ               各成分気体の特性直径
8390 DATA  71.4     ,106.7    ,195.2    ,91.7     ,10.22    ,78.6     !ε/k                     と特性エネルギー
8400 REM     Av        Bv        Cv        Dv        Ev        Fv      Ωv              粘性の衝突積分
8410 DATA  1.16145  ,0.14874  ,0.52487  ,0.77320  ,2.16178  ,2.43787  !
8420 REM     Ad        Bd        Cd        Dd        Ed        Fd        Gd        Hd         !Ωd    拡散の衝突積分
8430 DATA  1.06036  ,0.15610  ,0.19300  ,0.47635  ,1.03587  ,1.52996   ,1.76474  ,3.89411     !
8440 END sub

 

Re: 外部関数定義部のデータ読み込み

 投稿者:nagram  投稿日:2018年12月 1日(土)08時42分15秒
  > No.4576[元記事へ]

ちゃとらさんへのお返事です。

次のようにモジュールを利用すれば可能です。
モジュール本体では配列の宣言は数値定数でしか出来ないことに注意が必要です。
もし外部副プログラムairpro内でnがn=6より大きな値をとる可能性があるならば、共用される配列を十分大きな数値定数でshare宣言しておく必要があります。

修正箇所は次の(A)~(D)です。
(A) 1000行の外部副プログラム宣言にモジュール名を含める(仮にaaとする)。
1000 DECLARE EXTERNAL SUB aa.airpro         ! 混合気体の物性値計算

(B) data文の読込みを外部副プログラムからモジュール本体に移動する。
5000行のexternal-sub行を6250行の手前に移動します。
6245 EXTERNAL SUB airpro(k,rho7,cp7,mu7,nu7,lambda7,alpha7,pr7)   ! 5000行から移動

(C) 5000行以降をmoduleに組込む。
     外部副プログラムairproをpublic宣言する。
     配列や変数をshare宣言する。
     8200行~8430行のdata文をモジュール本体に移動する。
5000行~5420行の手前までを、次のように修正します。
5000 MODULE aa     ! モジュール名aa
5005 PUBLIC SUB airpro
5010 REM SET WINDOW 0,1.0,0,1.0
5015 SHARE NUMERIC n
5020 LET n=6                     !対象気体数      6種類  N2,O2,CO2,CO,He,Air
5030 REM TK                      !絶対温度    K
5040 REM Pa                      !圧力  パスカル
5050 SHARE NUMERIC rho(7)                !各気体の密度
5060 SHARE NUMERIC CP(7)                 !  〃    定圧比熱
5070 SHARE NUMERIC CVv(7)                !  〃    定容比熱
5080 SHARE NUMERIC CPO(7)                !  〃    定圧分子熱
5090 SHARE STRING n$(6)                   !気体名称    N2  ,  O2  ,  CO2  ,  CO  ,  He  ,  Air
5100 SHARE NUMERIC mwp(6)                  !質量分率    重量%
5110 SHARE NUMERIC mw(6)                   !分子量      molecular weight
5120 REM Mave                    !平均モル質量
5130 SHARE NUMERIC Xmol(7)               !モル数
5140 SHARE NUMERIC Xmolb(6)                !モル分率(体積分率)
5150 SHARE NUMERIC mu(7)                 !粘性係数
5160 SHARE NUMERIC phi(6,6)                !粘性係数計算係数
5170 SHARE NUMERIC phix(6,6)
5180 SHARE NUMERIC nu(7)                 !動粘性係数
5190 SHARE NUMERIC alpha(7)              !温度伝導率
5200 SHARE NUMERIC Pr(7)                 !プラントル数
5210 SHARE NUMERIC kk(6)
5220 SHARE NUMERIC lambda(7)             !熱伝導率
5230 SHARE NUMERIC Tc(6)                   !臨界温度    critical temperature
5240 SHARE NUMERIC Pc(6)                   !臨界圧力    critical pressure
5250 SHARE NUMERIC zeta(6)                 !偏心因子
5260 SHARE NUMERIC Ac0(6)                  !Ac0         定圧分子熱の推算式に於ける係数
5270 SHARE NUMERIC Bc0(6)                  !Bc0              〃              〃
5280 SHARE NUMERIC Cc0(6)                  !Cc0              〃              〃
5290 SHARE NUMERIC Dc0(6)                  !Dc0              〃              〃
5300 SHARE NUMERIC Ac1(6)                  !Ac1         定圧比熱の推算式に於ける係数
5310 SHARE NUMERIC Bc1(6)                  !Bc1              〃              〃
5320 SHARE NUMERIC Cc1(6)                  !Cc1              〃              〃
5330 SHARE NUMERIC Dc1(6)                  !Dc1              〃              〃
5340 SHARE NUMERIC Ac2(6)                  !Ac2         定容比熱の推算式に於ける係数
5350 SHARE NUMERIC Bc2(6)                  !Bc2              〃              〃
5360 SHARE NUMERIC Cc2(6)                  !Cc2              〃              〃
5370 SHARE NUMERIC Dc2(6)                  !Dc2              〃              〃
5380 SHARE NUMERIC shiguma (6)             !σ          各成分気体の特性直径
5390 SHARE NUMERIC epsilonk(6)            !ε/k        各成分気体の特性エネルギー
5400 SHARE NUMERIC ohmv(6)                 !Ωv         粘性の衝突積分
5410 SHARE NUMERIC ohmd(8)                 !Ωd         拡散の衝突積分
5415 SHARE NUMERIC Av,Bv,Cv,Dv,Ev,Fv,Ad,Bd,Cd,Dd,Ed,Fd,Gd,Hd
     ! 元8200行~8430行のdata文
     REM       N2        O2        CO2       CO        He        Air
     DATA      N2   ,    O2   ,    CO2  ,    CO   ,    He   ,    Air
     DATA  28.0134  ,31.999   ,44.010   ,28.010   ,4.0026   ,28.964   !molecular weight 分子量
     DATA    126.2  ,154.6    ,304.2    ,132.9    ,5.19     ,132.5    !Tc               臨界温度    K
     DATA     33.5  ,50.1     ,72.8     ,34.5     ,2.24     ,37.2     !Pc               臨界圧力    atm  760mmhg  101325Pa
     DATA    0.040  ,0.021    ,0.225    ,0.049    ,-0.387   ,0        !ζ   zeta        偏心因子
     DATA    7.440  ,6.713    ,4.728    ,7.373    ,0        ,0        !Ac0              定圧分子熱の推算式に於ける係数
     DATA   -0.324  ,-8.79E-5 ,1.754    ,-0.307   ,0        ,0        !Bc0(×10^-2)          〃              〃
     DATA    6.400  ,4.170    ,-13.38   ,6.662    ,0        ,0        !Cc0(×10^-6)          〃              〃
     DATA   -2.790  ,-2.544   ,4.097    ,-3.037   ,0        ,0        !Dc0(×10^-9)          〃              〃
     DATA  0.938314 ,0.817026 ,0.618542 ,0.929207 ,0        ,0.905673 !Ac1              定圧比熱の推算式に於ける係数
     DATA  2.95732  ,3.87124  ,9.43157  ,3.43656  ,0        ,3.10391  !Bc1(×10^-4)          〃              〃
     DATA -7.31507  ,-14.1476 ,-39.2290 ,-10.0711 ,0        ,-8.59483 !Cc1(×10^-8)          〃              〃
     DATA  5.81796  ,19.9678  ,54.4078  ,10.1493  ,0        ,8.56212  !Dc1(×10^-12)         〃              〃
     DATA  0.656848 ,0.547045 ,0.396046 ,0.641668 ,0        ,0.625027 !Ac2              定容比熱の推算式に於ける係数
     DATA  2.46015  ,4.12982  ,10.5300  ,3.13564  ,0        ,2.89050  !Bc2(×10^-4)          〃              〃
     DATA -3.16796  ,-16.1964 ,-48.3891 ,-7.57080 ,0        ,-6.76530 !Cc2(×10^-8)          〃              〃
     DATA -3.91928  ,24.6892  ,75.8699  ,4.29183  ,0        ,4.17504  !Dc2(×10^-12)         〃              〃
     DATA  3.798    ,3.467    ,3.941    ,3.690    ,2.551    ,3.711    !σ               各成分気体の特性直径
     DATA  71.4     ,106.7    ,195.2    ,91.7     ,10.22    ,78.6     !ε/k                     と特性エネルギー
     REM     Av        Bv        Cv        Dv        Ev        Fv      Ωv              粘性の衝突積分
     DATA  1.16145  ,0.14874  ,0.52487  ,0.77320  ,2.16178  ,2.43787  !
     REM     Ad        Bd        Cd        Dd        Ed        Fd        Gd        Hd         !Ωd    拡散の衝突積分
     DATA  1.06036  ,0.15610  ,0.19300  ,0.47635  ,1.03587  ,1.52996   ,1.76474  ,3.89411     !
     ! この次の行が5420行

(D) 8440行のend-sub行の次にend-module行を挿入する。
8450 END MODULE
 

外部関数定義部のデータ読み込み

 投稿者:ちゃとら  投稿日:2018年12月 1日(土)13時01分39秒
  nagram 様

  早速のご教示有り難うございます。

  今後もよろしくお願いいたします。

  白石様,しばっち様お手数を掛けました。御礼申し上げます。

  動作を確認しまして改めたご報告いたします。



 

外部関数定義部のデータ読み込み

 投稿者:ちゃとら  投稿日:2018年12月 1日(土)18時18分16秒
  nagram 様、白石様、しばっち様

  皆様のおかげで思った通りの動作に書き換える事が出来ました。
  有り難うございました。
  今後とも勉強させていただきますのでよろしくお願いいたします。
 

戻る