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  }