github.com/archlabjp/eeslism-go@v0.0.0-20231109122333-4bb7bfcdf292/eeslism/mcreflib.go (about) 1 //This file is part of EESLISM. 2 // 3 //Foobar is free software : you can redistribute itand /or modify 4 //it under the terms of the GNU General Public License as published by 5 //the Free Software Foundation, either version 3 of the License, or 6 //(at your option) any later version. 7 // 8 //Foobar is distributed in the hope that it will be useful, 9 //but WITHOUT ANY WARRANTY; without even the implied warranty of 10 //MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.See the 11 //GNU General Public License for more details. 12 // 13 //You should have received a copy of the GNU General Public License 14 //along with Foobar.If not, see < https://www.gnu.org/licenses/>. 15 16 /* mc_reflib.c */ 17 18 package eeslism 19 20 import ( 21 "bufio" 22 "math" 23 "os" 24 "strings" 25 ) 26 27 // 圧縮式冷凍機定格特性入力 28 // reflist.efl ファイルから読み取ります。 29 func Refcmpdat() []*RFCMP { 30 frf, err := os.Open("reflist.efl") 31 if err != nil { 32 Eprint(" file ", "reflist.efl") 33 } 34 35 Rfcmp := make([]*RFCMP, 0) 36 scanner := bufio.NewScanner(frf) 37 for scanner.Scan() { 38 line := scanner.Text() 39 if line == "*" { 40 break 41 } 42 43 fields := strings.Fields(line) 44 45 rfcmp := NewRFCMP() 46 rfcmp.name = fields[0] 47 rfcmp.cname = fields[1] 48 for i := 0; i < 4; i++ { 49 rfcmp.e[i], _ = readFloat(fields[i+2]) 50 } 51 for i := 0; i < 4; i++ { 52 rfcmp.d[i], _ = readFloat(fields[i+6]) 53 } 54 for i := 0; i < 4; i++ { 55 rfcmp.w[i], _ = readFloat(fields[i+10]) 56 } 57 rfcmp.Teo[0], _ = readFloat(fields[14]) 58 rfcmp.Teo[1], _ = readFloat(fields[15]) 59 rfcmp.Tco[0], _ = readFloat(fields[16]) 60 rfcmp.Tco[1], _ = readFloat(fields[17]) 61 rfcmp.Meff, _ = readFloat(fields[18]) 62 63 Rfcmp = append(Rfcmp, rfcmp) 64 } 65 66 frf.Close() 67 68 return Rfcmp 69 } 70 71 func NewRFCMP() *RFCMP { 72 Rf := new(RFCMP) 73 Rf.cname = "" 74 for j := 0; j < 4; j++ { 75 Rf.d[j] = 0.0 76 Rf.e[j] = 0.0 77 Rf.w[j] = 0.0 78 } 79 Rf.Meff = 0.0 80 Rf.name = "" 81 for j := 0; j < 2; j++ { 82 Rf.Tco[j] = 0.0 83 Rf.Teo[j] = 0.0 84 } 85 return Rf 86 } 87 88 /* ----------------------------------- */ 89 90 /* 冷凍機の蒸発温度と冷凍能力の一次式の係数 */ 91 92 func Compca(e, d *[4]float64, EGex float64, Teo [2]float64, Ta float64, Ho, He *float64) { 93 var Tc, Te float64 94 var Qo [2]float64 95 96 for i := 0; i < 2; i++ { 97 Te = Teo[i] 98 Tc = (d[0] + d[1]*Te + EGex*Ta) / (EGex - d[2] - d[3]*Te) 99 Qo[i] = e[0] + e[1]*Te + (e[2]+e[3]*Te)*Tc 100 } 101 *He = (Qo[0] - Qo[1]) / (Teo[1] - Teo[0]) 102 *Ho = Qo[0] + *He*Teo[0] 103 } 104 105 /* ------------------------------------------------------------ */ 106 107 /* ヒ-トポンプの凝縮温度と冷凍能力の一次式の係数 */ 108 109 func Compha(e, d *[4]float64, EGex float64, Tco [2]float64, Ta float64, Ho, He *float64) { 110 var Tc, Te float64 111 var Qo [2]float64 112 113 for i := 0; i < 2; i++ { 114 Tc = Tco[i] 115 Te = (e[0] + e[2]*Tc + EGex*Ta) / (EGex - e[1] - e[3]*Tc) 116 Qo[i] = d[0] + d[2]*Tc + (d[1]+d[3]*Tc)*Te 117 } 118 *He = (Qo[0] - Qo[1]) / (Tco[1] - Tco[0]) 119 *Ho = Qo[0] + *He*Tco[0] 120 } 121 122 /* --------------------------------------- */ 123 124 /* 冷凍機/ヒ-トポンプの軸動力の計算 */ 125 126 func Refpow(Rf *REFA, QP float64) float64 { 127 var W, Te, Tc float64 128 if math.Abs(QP) > 1.0 { 129 if Rf.Chmode == COOLING_SW { 130 Te = QP/(Rf.Cat.cool.eo*Rf.cG) + Rf.Tin 131 Tc = (QP - Rf.c_e[0] - Rf.c_e[1]*Te) / (Rf.c_e[2] + Rf.c_e[3]*Te) 132 W = Rf.c_w[0] + Rf.c_w[1]*Te + Rf.c_w[2]*Tc + Rf.c_w[3]*Te*Tc 133 } else if Rf.Chmode == HEATING_SW { 134 Tc = QP/(Rf.Cat.heat.eo*Rf.cG) + Rf.Tin 135 Te = (QP - Rf.h_d[0] - Rf.h_d[2]*Tc) / (Rf.h_d[1] + Rf.h_d[3]*Tc) 136 W = Rf.h_w[0] + Rf.h_w[1]*Te + Rf.h_w[2]*Tc + Rf.h_w[3]*Te*Tc 137 } 138 139 Rf.Te = Te 140 Rf.Tc = Tc 141 } else { 142 W = 0.0 143 } 144 145 return W 146 }