github.com/archlabjp/eeslism-go@v0.0.0-20231109122333-4bb7bfcdf292/eeslism/mcqmeas.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  /*  mcqmeas.c  */
    17  
    18  /*  QMEAS */
    19  
    20  package eeslism
    21  
    22  import (
    23  	"fmt"
    24  	"io"
    25  )
    26  
    27  // 出入り口温湿度の割り当て
    28  
    29  func Qmeaselm(Qmeas []*QMEAS) {
    30  	for _, qmeas := range Qmeas {
    31  		PlistTh := qmeas.PlistTh
    32  		N := qmeas.Nelmh
    33  		Pelm := PlistTh.Pelm[N]
    34  		if N > 0 && (Pelm.Cmp.Eqptype != DIVERG_TYPE) && (Pelm.Cmp.Eqptype != DIVGAIR_TYPE) {
    35  			Pelm = PlistTh.Pelm[N-1]
    36  			qmeas.Th = &Pelm.Out.Sysv
    37  
    38  			if PlistTh.Plistx != nil {
    39  				qmeas.Plistxh = PlistTh.Plistx
    40  				Plist := qmeas.Plistxh
    41  				Pelm = Plist.Pelm[N-1]
    42  				qmeas.Xh = &Pelm.Out.Sysv
    43  			}
    44  		} else {
    45  			Pelm = PlistTh.Pelm[1]
    46  			var sysvin *float64
    47  
    48  			if Pelm.Out != nil {
    49  				sysvin = &Pelm.Out.Elins[0].Sysvin
    50  			} else {
    51  				sysvin = &Pelm.In.Sysvin
    52  			}
    53  
    54  			qmeas.Th = sysvin
    55  
    56  			if PlistTh.Plistx != nil {
    57  				qmeas.Plistxh = PlistTh.Plistx
    58  				Pelm = qmeas.Plistxh.Pelm[1]
    59  
    60  				if Pelm.Out != nil {
    61  					qmeas.Xh = &Pelm.Out.Elins[0].Sysvin
    62  				} else {
    63  					qmeas.Xh = &Pelm.In.Sysvin
    64  				}
    65  			}
    66  		}
    67  
    68  		PlistTc := qmeas.PlistTc
    69  		N = qmeas.Nelmc
    70  		Pelm = PlistTc.Pelm[N]
    71  		if N > 0 && (Pelm.Cmp.Eqptype != DIVERG_TYPE) && (Pelm.Cmp.Eqptype != DIVGAIR_TYPE) {
    72  			Pelm = PlistTc.Pelm[N-1]
    73  			qmeas.Tc = &Pelm.Out.Sysv
    74  
    75  			if PlistTc.Plistx != nil {
    76  				qmeas.Plistxc = PlistTc.Plistx
    77  				Plist := qmeas.Plistxc
    78  				Pelm = Plist.Pelm[N-1]
    79  				qmeas.Xc = &Pelm.Out.Sysv
    80  			}
    81  		} else {
    82  			Pelm = PlistTc.Pelm[1]
    83  			var sysvin *float64
    84  
    85  			if Pelm.Out != nil {
    86  				sysvin = &Pelm.Out.Elins[0].Sysvin
    87  			} else {
    88  				sysvin = &Pelm.In.Sysvin
    89  			}
    90  
    91  			qmeas.Tc = sysvin
    92  
    93  			if PlistTc.Plistx != nil {
    94  				qmeas.Plistxc = PlistTc.Plistx
    95  				Pelm = qmeas.Plistxc.Pelm[1]
    96  
    97  				if Pelm.Out != nil {
    98  					qmeas.Xc = &Pelm.Out.Elins[0].Sysvin
    99  				} else {
   100  					qmeas.Xc = &Pelm.In.Sysvin
   101  				}
   102  			}
   103  		}
   104  	}
   105  }
   106  
   107  func Qmeasene(Qmeas []*QMEAS) {
   108  	for _, qmeas := range Qmeas {
   109  		PG := qmeas.PlistG
   110  		Ph := qmeas.PlistTh
   111  		Pc := qmeas.PlistTc
   112  
   113  		if PG.Control != OFF_SW && Ph.Control != OFF_SW && Pc.Control != OFF_SW {
   114  			qmeas.Qs = Spcheat(PG.Mpath.Fluid) * *qmeas.G * (*qmeas.Th - *qmeas.Tc)
   115  
   116  			if qmeas.Plistxc != nil {
   117  				qmeas.Ql = Ro * *qmeas.G * (*qmeas.Xh - *qmeas.Xc)
   118  			} else {
   119  				qmeas.Ql = 0.0
   120  			}
   121  
   122  			qmeas.Qt = qmeas.Qs + qmeas.Ql
   123  		} else {
   124  			qmeas.Qs = 0.0
   125  			qmeas.Ql = 0.0
   126  			qmeas.Qt = 0.0
   127  		}
   128  	}
   129  }
   130  
   131  func Qmeasprint(fo io.Writer, id int, Qmeas []*QMEAS) {
   132  	for _, qmeas := range Qmeas {
   133  		el := qmeas.Cmp.Elouts[0]
   134  
   135  		switch id {
   136  		case 0:
   137  			if len(Qmeas) > 0 {
   138  				fmt.Fprintf(fo, "%s %d\n", QMEAS_TYPE, len(Qmeas))
   139  			}
   140  			if qmeas.Plistxc != nil && qmeas.Plistxh != nil {
   141  				fmt.Fprintf(fo, " %s 1 9\n", qmeas.Name)
   142  			} else {
   143  				fmt.Fprintf(fo, " %s 1 5\n", qmeas.Name)
   144  			}
   145  		case 1:
   146  			if qmeas.Plistxc != nil && qmeas.Plistxh != nil {
   147  				fmt.Fprintf(fo, "%s_ce c c %s_G m f %s_Th t f %s_Tc t f %s_xh t f %s_xc t f\n",
   148  					qmeas.Name, qmeas.Name, qmeas.Name, qmeas.Name, qmeas.Name, qmeas.Name)
   149  				fmt.Fprintf(fo, "%s_Qs q f %s_Ql q f %s_Qt q f\n",
   150  					qmeas.Name, qmeas.Name, qmeas.Name)
   151  			} else {
   152  				fmt.Fprintf(fo, "%s_ce c c %s_G m f %s_Th t f %s_Tc t f\n",
   153  					qmeas.Name, qmeas.Name, qmeas.Name, qmeas.Name)
   154  				fmt.Fprintf(fo, "%s_Qt q f\n", qmeas.Name)
   155  			}
   156  		default:
   157  			if qmeas.Plistxc != nil && qmeas.Plistxh != nil {
   158  				fmt.Fprintf(fo, "%c %6.4g %4.1f %4.1f %.3f %.3f ",
   159  					el.Control, *qmeas.G, *qmeas.Th, *qmeas.Tc, *qmeas.Xh, *qmeas.Xc)
   160  				fmt.Fprintf(fo, "%.0f %.0f %.0f\n",
   161  					qmeas.Qs, qmeas.Ql, qmeas.Qt)
   162  			} else {
   163  				fmt.Fprintf(fo, "%c %6.4g %4.1f %4.1f ",
   164  					el.Control, *qmeas.G, *qmeas.Th, *qmeas.Tc)
   165  				fmt.Fprintf(fo, "%.0f\n", qmeas.Qt)
   166  			}
   167  		}
   168  	}
   169  }
   170  
   171  func Qmeasdyint(Qmeas []*QMEAS) {
   172  	for _, qmeas := range Qmeas {
   173  		svdyint(&qmeas.Tcdy)
   174  		svdyint(&qmeas.Thdy)
   175  		svdyint(&qmeas.xcdy)
   176  		svdyint(&qmeas.xhdy)
   177  
   178  		qdyint(&qmeas.Qdys)
   179  		qdyint(&qmeas.Qdyl)
   180  		qdyint(&qmeas.Qdyt)
   181  	}
   182  }
   183  
   184  func Qmeasmonint(Qmeas []*QMEAS) {
   185  	for _, qmeas := range Qmeas {
   186  		svdyint(&qmeas.mTcdy)
   187  		svdyint(&qmeas.mThdy)
   188  		svdyint(&qmeas.mxcdy)
   189  		svdyint(&qmeas.mxhdy)
   190  
   191  		qdyint(&qmeas.mQdys)
   192  		qdyint(&qmeas.mQdyl)
   193  		qdyint(&qmeas.mQdyt)
   194  	}
   195  }
   196  
   197  func Qmeasday(Mon, Day, ttmm int, Qmeas []*QMEAS, Nday, SimDayend int) {
   198  	for _, qmeas := range Qmeas {
   199  		// 日次集計
   200  		svdaysum(int64(ttmm), qmeas.PlistG.Control, *qmeas.Th, &qmeas.Thdy) // 温度
   201  		svdaysum(int64(ttmm), qmeas.PlistG.Control, *qmeas.Tc, &qmeas.Tcdy) // 温度
   202  
   203  		if qmeas.Xh != nil {
   204  			svdaysum(int64(ttmm), qmeas.PlistG.Control, *qmeas.Xh, &qmeas.xhdy) // 出口湿度
   205  		}
   206  
   207  		if qmeas.Xc != nil {
   208  			svdaysum(int64(ttmm), qmeas.PlistG.Control, *qmeas.Xc, &qmeas.xcdy) // 入口湿度
   209  		}
   210  
   211  		qdaysum(int64(ttmm), qmeas.PlistG.Control, qmeas.Qs, &qmeas.Qdys) // 流量
   212  		qdaysum(int64(ttmm), qmeas.PlistG.Control, qmeas.Ql, &qmeas.Qdyl) // 湿度流量
   213  		qdaysum(int64(ttmm), qmeas.PlistG.Control, qmeas.Qt, &qmeas.Qdyt) // 総熱量
   214  
   215  		// 月次集計
   216  		svmonsum(Mon, Day, ttmm, qmeas.PlistG.Control, *qmeas.Th, &qmeas.mThdy, Nday, SimDayend) // 温度
   217  		svmonsum(Mon, Day, ttmm, qmeas.PlistG.Control, *qmeas.Tc, &qmeas.mTcdy, Nday, SimDayend) // 温度
   218  
   219  		if qmeas.Xh != nil {
   220  			svmonsum(Mon, Day, ttmm, qmeas.PlistG.Control, *qmeas.Xh, &qmeas.mxhdy, Nday, SimDayend) // 出口湿度
   221  		}
   222  
   223  		if qmeas.Xc != nil {
   224  			svmonsum(Mon, Day, ttmm, qmeas.PlistG.Control, *qmeas.Xc, &qmeas.mxcdy, Nday, SimDayend) // 入口湿度
   225  		}
   226  
   227  		qmonsum(Mon, Day, ttmm, qmeas.PlistG.Control, qmeas.Qs, &qmeas.mQdys, Nday, SimDayend) // 流量
   228  		qmonsum(Mon, Day, ttmm, qmeas.PlistG.Control, qmeas.Ql, &qmeas.mQdyl, Nday, SimDayend) // 湿度流量
   229  		qmonsum(Mon, Day, ttmm, qmeas.PlistG.Control, qmeas.Qt, &qmeas.mQdyt, Nday, SimDayend) // 総熱量
   230  	}
   231  }
   232  
   233  func Qmeasdyprt(fo io.Writer, id int, Qmeas []*QMEAS) {
   234  	for _, qmeas := range Qmeas {
   235  		switch id {
   236  		case 0:
   237  			if len(Qmeas) > 0 {
   238  				fmt.Fprintf(fo, "%s %d\n", QMEAS_TYPE, len(Qmeas))
   239  			}
   240  			if qmeas.Plistxc != nil && qmeas.Plistxh != nil {
   241  				fmt.Fprintf(fo, " %s 1 24\n", qmeas.Name)
   242  			} else {
   243  				fmt.Fprintf(fo, " %s 1 8\n", qmeas.Name)
   244  			}
   245  		case 1:
   246  			if qmeas.Plistxc != nil && qmeas.Plistxh != nil {
   247  				fmt.Fprintf(fo, "%s_Hhs H d %s_Qsh Q f %s_Hcs H d %s_Qsc Q f\n",
   248  					qmeas.Name, qmeas.Name, qmeas.Name, qmeas.Name)
   249  				fmt.Fprintf(fo, "%s_ths h d %s_qsh q f %s_tcs h d %s_qsc q f\n",
   250  					qmeas.Name, qmeas.Name, qmeas.Name, qmeas.Name)
   251  				fmt.Fprintf(fo, "%s_Hhl H d %s_Qlh Q f %s_Hcl H d %s_Qlc Q f\n",
   252  					qmeas.Name, qmeas.Name, qmeas.Name, qmeas.Name)
   253  				fmt.Fprintf(fo, "%s_thl h d %s_qlh q f %s_tcl h d %s_qlc q f\n",
   254  					qmeas.Name, qmeas.Name, qmeas.Name, qmeas.Name)
   255  			}
   256  			fmt.Fprintf(fo, "%s_Hht H d %s_Qth Q f %s_Hct H d %s_Qtc Q f\n",
   257  				qmeas.Name, qmeas.Name, qmeas.Name, qmeas.Name)
   258  			fmt.Fprintf(fo, "%s_tht h d %s_qth q f %s_tct h d %s_qtc q f\n\n",
   259  				qmeas.Name, qmeas.Name, qmeas.Name, qmeas.Name)
   260  		default:
   261  			if qmeas.Plistxc != nil && qmeas.Plistxh != nil {
   262  				fmt.Fprintf(fo, "%1d %3.1f ", qmeas.Qdys.Hhr, qmeas.Qdys.H)
   263  				fmt.Fprintf(fo, "%1d %3.1f ", qmeas.Qdys.Chr, qmeas.Qdys.C)
   264  				fmt.Fprintf(fo, "%1d %2.0f ", qmeas.Qdys.Hmxtime, qmeas.Qdys.Hmx)
   265  				fmt.Fprintf(fo, "%1d %2.0f\n", qmeas.Qdys.Cmxtime, qmeas.Qdys.Cmx)
   266  
   267  				fmt.Fprintf(fo, "%1d %3.1f ", qmeas.Qdyl.Hhr, qmeas.Qdyl.H)
   268  				fmt.Fprintf(fo, "%1d %3.1f ", qmeas.Qdyl.Chr, qmeas.Qdyl.C)
   269  				fmt.Fprintf(fo, "%1d %2.0f ", qmeas.Qdyl.Hmxtime, qmeas.Qdyl.Hmx)
   270  				fmt.Fprintf(fo, "%1d %2.0f\n", qmeas.Qdyl.Cmxtime, qmeas.Qdyl.Cmx)
   271  			}
   272  
   273  			fmt.Fprintf(fo, "%1d %3.1f ", qmeas.Qdyt.Hhr, qmeas.Qdyt.H)
   274  			fmt.Fprintf(fo, "%1d %3.1f ", qmeas.Qdyt.Chr, qmeas.Qdyt.C)
   275  			fmt.Fprintf(fo, "%1d %2.0f ", qmeas.Qdyt.Hmxtime, qmeas.Qdyt.Hmx)
   276  			fmt.Fprintf(fo, "%1d %2.0f\n", qmeas.Qdyt.Cmxtime, qmeas.Qdyt.Cmx)
   277  		}
   278  	}
   279  }
   280  
   281  func Qmeasmonprt(fo io.Writer, id int, Qmeas []*QMEAS) {
   282  	for _, qmeas := range Qmeas {
   283  		switch id {
   284  		case 0:
   285  			if len(Qmeas) > 0 {
   286  				fmt.Fprintf(fo, "%s %d\n", QMEAS_TYPE, len(Qmeas))
   287  			}
   288  			if qmeas.Plistxc != nil && qmeas.Plistxh != nil {
   289  				fmt.Fprintf(fo, " %s 1 24\n", qmeas.Name)
   290  			} else {
   291  				fmt.Fprintf(fo, " %s 1 8\n", qmeas.Name)
   292  			}
   293  		case 1:
   294  			if qmeas.Plistxc != nil && qmeas.Plistxh != nil {
   295  				fmt.Fprintf(fo, "%s_Hhs H d %s_Qsh Q f %s_Hcs H d %s_Qsc Q f\n",
   296  					qmeas.Name, qmeas.Name, qmeas.Name, qmeas.Name)
   297  				fmt.Fprintf(fo, "%s_ths h d %s_qsh q f %s_tcs h d %s_qsc q f\n",
   298  					qmeas.Name, qmeas.Name, qmeas.Name, qmeas.Name)
   299  				fmt.Fprintf(fo, "%s_Hhl H d %s_Qlh Q f %s_Hcl H d %s_Qlc Q f\n",
   300  					qmeas.Name, qmeas.Name, qmeas.Name, qmeas.Name)
   301  				fmt.Fprintf(fo, "%s_thl h d %s_qlh q f %s_tcl h d %s_qlc q f\n",
   302  					qmeas.Name, qmeas.Name, qmeas.Name, qmeas.Name)
   303  			}
   304  			fmt.Fprintf(fo, "%s_Hht H d %s_Qth Q f %s_Hct H d %s_Qtc Q f\n",
   305  				qmeas.Name, qmeas.Name, qmeas.Name, qmeas.Name)
   306  			fmt.Fprintf(fo, "%s_tht h d %s_qth q f %s_tct h d %s_qtc q f\n\n",
   307  				qmeas.Name, qmeas.Name, qmeas.Name, qmeas.Name)
   308  		default:
   309  			if qmeas.Plistxc != nil && qmeas.Plistxh != nil {
   310  				fmt.Fprintf(fo, "%1d %3.1f ", qmeas.mQdys.Hhr, qmeas.mQdys.H)
   311  				fmt.Fprintf(fo, "%1d %3.1f ", qmeas.mQdys.Chr, qmeas.mQdys.C)
   312  				fmt.Fprintf(fo, "%1d %2.0f ", qmeas.mQdys.Hmxtime, qmeas.mQdys.Hmx)
   313  				fmt.Fprintf(fo, "%1d %2.0f\n", qmeas.mQdys.Cmxtime, qmeas.mQdys.Cmx)
   314  
   315  				fmt.Fprintf(fo, "%1d %3.1f ", qmeas.mQdyl.Hhr, qmeas.mQdyl.H)
   316  				fmt.Fprintf(fo, "%1d %3.1f ", qmeas.mQdyl.Chr, qmeas.mQdyl.C)
   317  				fmt.Fprintf(fo, "%1d %2.0f ", qmeas.mQdyl.Hmxtime, qmeas.mQdyl.Hmx)
   318  				fmt.Fprintf(fo, "%1d %2.0f\n", qmeas.mQdyl.Cmxtime, qmeas.mQdyl.Cmx)
   319  			}
   320  
   321  			fmt.Fprintf(fo, "%1d %3.1f ", qmeas.mQdyt.Hhr, qmeas.mQdyt.H)
   322  			fmt.Fprintf(fo, "%1d %3.1f ", qmeas.mQdyt.Chr, qmeas.mQdyt.C)
   323  			fmt.Fprintf(fo, "%1d %2.0f ", qmeas.mQdyt.Hmxtime, qmeas.mQdyt.Hmx)
   324  			fmt.Fprintf(fo, "%1d %2.0f\n", qmeas.mQdyt.Cmxtime, qmeas.mQdyt.Cmx)
   325  		}
   326  	}
   327  }