github.com/archlabjp/eeslism-go@v0.0.0-20231109122333-4bb7bfcdf292/eeslism/blroomday.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  /* roomday.c */
    17  
    18  package eeslism
    19  
    20  import (
    21  	"fmt"
    22  	"io"
    23  )
    24  
    25  var __Roomday_oldday = -999
    26  var __Roomday_oldMon = -999
    27  
    28  func Roomday(Mon int, Day int, Nday int, ttmm int, Rm []*ROOM, Rdp []*RDPNL, Simdayend int) {
    29  	Mo := Mon - 1
    30  	tt := ConvertHour(ttmm)
    31  
    32  	// 日集計
    33  	if Nday != __Roomday_oldday {
    34  		for i := range Rm {
    35  			Room := Rm[i]
    36  
    37  			svdyint(&Room.Trdy)
    38  			svdyint(&Room.xrdy)
    39  			svdyint(&Room.RHdy)
    40  			svdyint(&Room.Tsavdy)
    41  
    42  			R := Room.rmld
    43  			if R != nil {
    44  				qdyint(&R.Qdys)
    45  				qdyint(&R.Qdyl)
    46  				qdyint(&R.Qdyt)
    47  			}
    48  
    49  			for j := 0; j < Room.Nasup; j++ {
    50  				A := Room.Arsp[j]
    51  				qdyint(&A.Qdys)
    52  				qdyint(&A.Qdyl)
    53  				qdyint(&A.Qdyt)
    54  			}
    55  
    56  			for j := 0; j < Room.N; j++ {
    57  				Sd := Room.rsrf[j]
    58  				qdyint(&Sd.SQi)
    59  				svdyint(&Sd.Tsdy)
    60  			}
    61  		}
    62  
    63  		for i := range Rdp {
    64  			Rdpnl := Rdp[i]
    65  			svdyint(&Rdpnl.Tpody)
    66  			svdyint(&Rdpnl.Tpidy)
    67  			qdyint(&Rdpnl.Qdy)
    68  			qdyint(&Rdpnl.Scoldy)
    69  			svdyint(&Rdpnl.TPVdy)
    70  			qdyint(&Rdpnl.PVdy)
    71  		}
    72  
    73  		__Roomday_oldday = Nday
    74  	}
    75  
    76  	// 月集計
    77  	if Mon != __Roomday_oldMon {
    78  		//printf("リセット\n") ;
    79  		for i := range Rm {
    80  			Room := Rm[i]
    81  
    82  			svdyint(&Room.mTrdy)
    83  			svdyint(&Room.mxrdy)
    84  			svdyint(&Room.mRHdy)
    85  			svdyint(&Room.mTsavdy)
    86  
    87  			R := Room.rmld
    88  			if R != nil {
    89  				qdyint(&R.mQdys)
    90  				qdyint(&R.mQdyl)
    91  				qdyint(&R.mQdyt)
    92  			}
    93  
    94  			for j := 0; j < Room.Nasup; j++ {
    95  				A := Room.Arsp[j]
    96  				qdyint(&A.mQdys)
    97  				qdyint(&A.mQdyl)
    98  				qdyint(&A.mQdyt)
    99  			}
   100  
   101  			for j := 0; j < Room.N; j++ {
   102  				Sd := Room.rsrf[j]
   103  				qdyint(&Sd.mSQi)
   104  				svdyint(&Sd.mTsdy)
   105  			}
   106  		}
   107  
   108  		for i := range Rdp {
   109  			Rdpnl := Rdp[i]
   110  			svdyint(&Rdpnl.mTpody)
   111  			svdyint(&Rdpnl.mTpidy)
   112  			qdyint(&Rdpnl.mQdy)
   113  			qdyint(&Rdpnl.mScoldy)
   114  			svdyint(&Rdpnl.mTPVdy)
   115  			qdyint(&Rdpnl.mPVdy)
   116  		}
   117  
   118  		__Roomday_oldMon = Mon
   119  	}
   120  
   121  	// 日集計
   122  	for i := range Rm {
   123  		Room := Rm[i]
   124  		svdaysum(int64(ttmm), ON_SW, Room.Tr, &Room.Trdy)
   125  		svdaysum(int64(ttmm), ON_SW, Room.xr, &Room.xrdy)
   126  		svdaysum(int64(ttmm), ON_SW, Room.RH, &Room.RHdy)
   127  		svdaysum(int64(ttmm), ON_SW, Room.Tsav, &Room.Tsavdy)
   128  
   129  		R := Room.rmld
   130  		if R != nil {
   131  			qdaysum(int64(ttmm), ON_SW, R.Qs, &R.Qdys)
   132  			qdaysum(int64(ttmm), ON_SW, R.Ql, &R.Qdyl)
   133  			qdaysum(int64(ttmm), ON_SW, R.Qt, &R.Qdyt)
   134  		}
   135  		for j := 0; j < Room.Nasup; j++ {
   136  			A := Room.Arsp[j]
   137  			qdaysum(int64(ttmm), ON_SW, A.Qs, &A.Qdys)
   138  			qdaysum(int64(ttmm), ON_SW, A.Ql, &A.Qdyl)
   139  			qdaysum(int64(ttmm), ON_SW, A.Qt, &A.Qdyt)
   140  		}
   141  
   142  		for j := 0; j < Room.N; j++ {
   143  			Sd := Room.rsrf[j]
   144  			svdaysum(int64(ttmm), ON_SW, Sd.Ts, &Sd.Tsdy)
   145  			qdaysum(int64(ttmm), ON_SW, Sd.Qi, &Sd.SQi)
   146  		}
   147  	}
   148  
   149  	for i := range Rdp {
   150  		Rdpnl := Rdp[i]
   151  
   152  		svdaysum(int64(ttmm), Rdpnl.cmp.Control, Rdpnl.Tpo, &Rdpnl.Tpody)
   153  		svdaysum(int64(ttmm), Rdpnl.cmp.Control, Rdpnl.Tpi, &Rdpnl.Tpidy)
   154  		qdaysum(int64(ttmm), Rdpnl.cmp.Control, Rdpnl.Q, &Rdpnl.Qdy)
   155  		qdaysumNotOpe(int64(ttmm), Rdpnl.sd[0].Iwall*Rdpnl.sd[0].A, &Rdpnl.Scoldy)
   156  
   157  		control := OFF_SW
   158  		if Rdpnl.sd[0].PVwall.Power > 0. {
   159  			control = ON_SW
   160  		}
   161  
   162  		svdaysum(int64(ttmm), control, Rdpnl.sd[0].PVwall.TPV, &Rdpnl.TPVdy)
   163  		qdaysumNotOpe(int64(ttmm), Rdpnl.sd[0].PVwall.Power, &Rdpnl.PVdy)
   164  	}
   165  
   166  	// 月集計
   167  	//printf("Mon=%d Day=%d ttmm=%d\n", Mon, Day, ttmm ) ;
   168  	for i := range Rm {
   169  		Room := Rm[i]
   170  
   171  		svmonsum(Mon, Day, ttmm, ON_SW, Room.Tr, &Room.mTrdy, Nday, Simdayend)
   172  		svmonsum(Mon, Day, ttmm, ON_SW, Room.xr, &Room.mxrdy, Nday, Simdayend)
   173  		svmonsum(Mon, Day, ttmm, ON_SW, Room.RH, &Room.mRHdy, Nday, Simdayend)
   174  		svmonsum(Mon, Day, ttmm, ON_SW, Room.Tsav, &Room.mTsavdy, Nday, Simdayend)
   175  
   176  		R := Room.rmld
   177  		if R != nil {
   178  			qmonsum(Mon, Day, ttmm, ON_SW, R.Qs, &R.mQdys, Nday, Simdayend)
   179  			qmonsum(Mon, Day, ttmm, ON_SW, R.Ql, &R.mQdyl, Nday, Simdayend)
   180  			qmonsum(Mon, Day, ttmm, ON_SW, R.Qt, &R.mQdyt, Nday, Simdayend)
   181  		}
   182  		for j := 0; j < Room.Nasup; j++ {
   183  			A := Room.Arsp[j]
   184  			qmonsum(Mon, Day, ttmm, ON_SW, A.Qs, &A.mQdys, Nday, Simdayend)
   185  			qmonsum(Mon, Day, ttmm, ON_SW, A.Ql, &A.mQdyl, Nday, Simdayend)
   186  			qmonsum(Mon, Day, ttmm, ON_SW, A.Qt, &A.mQdyt, Nday, Simdayend)
   187  		}
   188  
   189  		for j := 0; j < Room.N; j++ {
   190  			Sd := Room.rsrf[j]
   191  			svmonsum(Mon, Day, ttmm, ON_SW, Sd.Ts, &Sd.mTsdy, Nday, Simdayend)
   192  			qmonsum(Mon, Day, ttmm, ON_SW, Sd.Qi, &Sd.mSQi, Nday, Simdayend)
   193  		}
   194  	}
   195  
   196  	for i := range Rdp {
   197  		Rdpnl := Rdp[i]
   198  
   199  		svmonsum(Mon, Day, ttmm, Rdpnl.cmp.Control, Rdpnl.Tpo, &Rdpnl.mTpody, Nday, Simdayend)
   200  		svmonsum(Mon, Day, ttmm, Rdpnl.cmp.Control, Rdpnl.Tpi, &Rdpnl.mTpidy, Nday, Simdayend)
   201  		qmonsum(Mon, Day, ttmm, Rdpnl.cmp.Control, Rdpnl.Q, &Rdpnl.mQdy, Nday, Simdayend)
   202  		qmonsumNotOpe(Mon, Day, ttmm, Rdpnl.sd[0].Iwall*Rdpnl.sd[0].A, &Rdpnl.mScoldy, Nday, Simdayend)
   203  
   204  		control := OFF_SW
   205  		if Rdpnl.sd[0].PVwall.Power > 0. {
   206  			control = ON_SW
   207  		}
   208  
   209  		svmonsum(Mon, Day, ttmm, control, Rdpnl.sd[0].PVwall.TPV, &Rdpnl.mTPVdy, Nday, Simdayend)
   210  		qmonsumNotOpe(Mon, Day, ttmm, Rdpnl.sd[0].PVwall.Power, &Rdpnl.mPVdy, Nday, Simdayend)
   211  
   212  		// 月・時刻のクロス集計
   213  		emtsum(Mon, Day, ttmm, control, Rdpnl.sd[0].PVwall.Power, &Rdpnl.mtPVdy[Mo][tt])
   214  	}
   215  }
   216  
   217  /* ------------------------------------------------------- */
   218  
   219  var __Rmdyprint_id int = 0
   220  
   221  func Rmdyprint(fo io.Writer, mrk string, Simc *SIMCONTL, mon, day int, Rm []*ROOM) {
   222  	if __Rmdyprint_id == 0 && len(Rm) > 0 {
   223  		__Rmdyprint_id++
   224  
   225  		ttldyprint(fo, mrk, Simc)
   226  		fmt.Fprintf(fo, "-cat\n")
   227  		fmt.Fprintf(fo, "%s %d\n", ROOM_TYPE, len(Rm))
   228  
   229  		for i := range Rm {
   230  			Room := Rm[i]
   231  
   232  			var Nload int
   233  			if Room.rmld != nil {
   234  				Nload = 24
   235  			} else {
   236  				Nload = 0
   237  			}
   238  
   239  			fmt.Fprintf(fo, " %s 5 %d 24 %d %d %d\n", Room.Name,
   240  				24+Nload+6*Room.Nasup+2*Room.Nrp,
   241  				Nload, 6*Room.Nasup, 2*Room.Nrp)
   242  		}
   243  		fmt.Fprintf(fo, "*\n#\n")
   244  	}
   245  
   246  	if __Rmdyprint_id == 1 && len(Rm) > 0 {
   247  		__Rmdyprint_id++
   248  
   249  		for i := range Rm {
   250  			Room := Rm[i]
   251  
   252  			fmt.Fprintf(fo, "%s_Ht H d %s_Tr T f %s_ttn h d %s_Trn t f %s_ttm h d %s_Trm t f\n",
   253  				Room.Name, Room.Name, Room.Name, Room.Name, Room.Name, Room.Name)
   254  			fmt.Fprintf(fo, "%s_Hx H d %s_xr X f %s_txn h d %s_xrn x f %s_txm h d %s_xrm x f\n",
   255  				Room.Name, Room.Name, Room.Name, Room.Name, Room.Name, Room.Name)
   256  			fmt.Fprintf(fo, "%s_Hr H d %s_RH R f %s_trn h d %s_RHn r f %s_trm h d %s_RHm r f\n",
   257  				Room.Name, Room.Name, Room.Name, Room.Name, Room.Name, Room.Name)
   258  			fmt.Fprintf(fo, "%s_Hs H d %s_Ts T f %s_tsn h d %s_Tsn t f %s_tsm h d %s_Tsm t f\n",
   259  				Room.Name, Room.Name, Room.Name, Room.Name, Room.Name, Room.Name)
   260  
   261  			if Room.rmld != nil {
   262  				fmt.Fprintf(fo, "%s_Hsh H d %s_Lsh Q f %s_Hsc H d %s_Lsc Q f ",
   263  					Room.Name, Room.Name, Room.Name, Room.Name)
   264  				fmt.Fprintf(fo, "%s_tsh h d %s_Lqsh q f %s_tsc h d %s_Lqsc q f\n",
   265  					Room.Name, Room.Name, Room.Name, Room.Name)
   266  
   267  				fmt.Fprintf(fo, "%s_Hlh H d %s_Llh Q f %s_Hlc H d %s_Llc Q f ",
   268  					Room.Name, Room.Name, Room.Name, Room.Name)
   269  				fmt.Fprintf(fo, "%s_tlh h d %s_Lqlh q f %s_tlc h d %s_Lqlc q f\n",
   270  					Room.Name, Room.Name, Room.Name, Room.Name)
   271  
   272  				fmt.Fprintf(fo, "%s_Hth H d %s_Lth Q f %s_Htc H d %s_Ltc Q f ",
   273  					Room.Name, Room.Name, Room.Name, Room.Name)
   274  				fmt.Fprintf(fo, "%s_tth h d %s_Lqth q f %s_ttc h d %s_Lqtc q f\n",
   275  					Room.Name, Room.Name, Room.Name, Room.Name)
   276  			}
   277  
   278  			if Room.Nasup > 0 {
   279  				for j := 0; j < Room.Nasup; j++ {
   280  					Ei := Room.cmp.Elins[Room.Nachr+Room.Nrp+j]
   281  
   282  					if Ei.Lpath == nil {
   283  						fmt.Fprintf(fo, "%s:%d_Qash Q f %s:%d_Qasc Q f ",
   284  							Room.Name, j, Room.Name, j)
   285  						fmt.Fprintf(fo, "%s:%d_Qalh Q f %s:%d_Qalc Q f ",
   286  							Room.Name, j, Room.Name, j)
   287  						fmt.Fprintf(fo, "%s:%d_Qath Q f %s:%d_Qatc Q f\n",
   288  							Room.Name, j, Room.Name, j)
   289  					} else {
   290  						fmt.Fprintf(fo, "%s:%s_Qash Q f %s:%s_Qasc Q f ",
   291  							Room.Name, Ei.Lpath.Name, Room.Name, Ei.Lpath.Name)
   292  						fmt.Fprintf(fo, "%s:%s_Qalh Q f %s:%s_Qalc Q f ",
   293  							Room.Name, Ei.Lpath.Name, Room.Name, Ei.Lpath.Name)
   294  						fmt.Fprintf(fo, "%s:%s_Qath Q f %s:%s_Qatc Q f\n",
   295  							Room.Name, Ei.Lpath.Name, Room.Name, Ei.Lpath.Name)
   296  					}
   297  				}
   298  			}
   299  			for j := 0; j < Room.Nrp; j++ {
   300  				rpnl := Room.rmpnl[j]
   301  				fmt.Fprintf(fo, "%s:%s_Qh Q f %s:%s_Qc Q f ", Room.Name, rpnl.pnl.Name,
   302  					Room.Name, rpnl.pnl.Name)
   303  			}
   304  			fmt.Fprintf(fo, "\n")
   305  		}
   306  	}
   307  
   308  	fmt.Fprintf(fo, "%02d %02d\n", mon, day)
   309  
   310  	for i := range Rm {
   311  		Room := Rm[i]
   312  
   313  		fmt.Fprintf(fo, "%1d %4.2f %1d %4.2f %1d %4.2f ",
   314  			Room.Trdy.Hrs, Room.Trdy.M, Room.Trdy.Mntime,
   315  			Room.Trdy.Mn, Room.Trdy.Mxtime, Room.Trdy.Mx)
   316  		fmt.Fprintf(fo, "%1d %5.4f %1d %5.4f %1d %5.4f\n",
   317  			Room.xrdy.Hrs, Room.xrdy.M, Room.xrdy.Mntime,
   318  			Room.xrdy.Mn, Room.xrdy.Mxtime, Room.xrdy.Mx)
   319  		fmt.Fprintf(fo, "%1d %2.0f %1d %2.0f %1d %2.0f ",
   320  			Room.RHdy.Hrs, Room.RHdy.M, Room.RHdy.Mntime,
   321  			Room.RHdy.Mn, Room.RHdy.Mxtime, Room.RHdy.Mx)
   322  		fmt.Fprintf(fo, "%1d %4.2f %1d %4.2f %1d %4.2f\n",
   323  			Room.Tsavdy.Hrs, Room.Tsavdy.M, Room.Tsavdy.Mntime,
   324  			Room.Tsavdy.Mn, Room.Tsavdy.Mxtime, Room.Tsavdy.Mx)
   325  
   326  		R := Room.rmld
   327  		if R != nil {
   328  			fmt.Fprintf(fo, "%1d %.2f ", R.Qdys.Hhr, R.Qdys.H)
   329  			fmt.Fprintf(fo, "%1d %.2f ", R.Qdys.Chr, R.Qdys.C)
   330  			fmt.Fprintf(fo, "%4d %2.0f ", R.Qdys.Hmxtime, R.Qdys.Hmx)
   331  			fmt.Fprintf(fo, "%4d %2.0f ", R.Qdys.Cmxtime, R.Qdys.Cmx)
   332  
   333  			fmt.Fprintf(fo, "%1d %.2f ", R.Qdyl.Hhr, R.Qdyl.H)
   334  			fmt.Fprintf(fo, "%1d %.2f ", R.Qdyl.Chr, R.Qdyl.C)
   335  			fmt.Fprintf(fo, "%4d %2.0f ", R.Qdyl.Hmxtime, R.Qdyl.Hmx)
   336  			fmt.Fprintf(fo, "%4d %2.0f ", R.Qdyl.Cmxtime, R.Qdyl.Cmx)
   337  
   338  			fmt.Fprintf(fo, "%1d %.2f ", R.Qdyt.Hhr, R.Qdyt.H)
   339  			fmt.Fprintf(fo, "%1d %.2f ", R.Qdyt.Chr, R.Qdyt.C)
   340  			fmt.Fprintf(fo, "%4d %2.0f ", R.Qdyt.Hmxtime, R.Qdyt.Hmx)
   341  			fmt.Fprintf(fo, "%4d %2.0f\n", R.Qdyt.Cmxtime, R.Qdyt.Cmx)
   342  		}
   343  		if Room.Nasup > 0 {
   344  			for j := 0; j < Room.Nasup; j++ {
   345  				A := Room.Arsp[j]
   346  				fmt.Fprintf(fo, "%3.1f %.2f ", A.Qdys.H, A.Qdys.C)
   347  				fmt.Fprintf(fo, "%3.1f %.2f ", A.Qdyl.H, A.Qdyl.C)
   348  				fmt.Fprintf(fo, "%3.1f %.2f ", A.Qdyt.H, A.Qdyt.C)
   349  			}
   350  			fmt.Fprintf(fo, "\n")
   351  		}
   352  		if Room.Nrp > 0 {
   353  			for j := 0; j < Room.Nrp; j++ {
   354  				rpnl := Room.rmpnl[j]
   355  				fmt.Fprintf(fo, "%.2f %.2f\n", -rpnl.pnl.Qdy.C, -rpnl.pnl.Qdy.H)
   356  			}
   357  		}
   358  		fmt.Fprintf(fo, "\n")
   359  	}
   360  }
   361  
   362  // 月集計結果の出力
   363  var __Rmmonprint_id int
   364  
   365  func Rmmonprint(fo io.Writer, mrk string, Simc *SIMCONTL, mon, day int, Rm []*ROOM) {
   366  
   367  	Nroom := len(Rm)
   368  
   369  	if __Rmmonprint_id == 0 && Nroom > 0 {
   370  		__Rmmonprint_id++
   371  
   372  		ttldyprint(fo, mrk, Simc)
   373  		fmt.Fprintf(fo, "-cat\n")
   374  		fmt.Fprintf(fo, "%s %d\n", ROOM_TYPE, Nroom)
   375  
   376  		for i := 0; i < Nroom; i++ {
   377  			Room := Rm[i]
   378  
   379  			var Nload int
   380  			if Room.rmld != nil {
   381  				Nload = 24
   382  			} else {
   383  				Nload = 0
   384  			}
   385  			fmt.Fprintf(fo, " %s 5 %d 24 %d %d %d\n", Room.Name,
   386  				24+Nload+6*Room.Nasup+2*Room.Nrp,
   387  				Nload, 6*Room.Nasup, 2*Room.Nrp)
   388  		}
   389  		fmt.Fprintf(fo, "*\n#\n")
   390  	}
   391  
   392  	if __Rmmonprint_id == 1 && Nroom > 0 {
   393  		__Rmmonprint_id++
   394  
   395  		for i := 0; i < Nroom; i++ {
   396  			Room := Rm[i]
   397  
   398  			fmt.Fprintf(fo, "%s_Ht H d %s_Tr T f %s_ttn h d %s_Trn t f %s_ttm h d %s_Trm t f\n",
   399  				Room.Name, Room.Name, Room.Name, Room.Name, Room.Name, Room.Name)
   400  			fmt.Fprintf(fo, "%s_Hx H d %s_xr X f %s_txn h d %s_xrn x f %s_txm h d %s_xrm x f\n",
   401  				Room.Name, Room.Name, Room.Name, Room.Name, Room.Name, Room.Name)
   402  			fmt.Fprintf(fo, "%s_Hr H d %s_RH R f %s_trn h d %s_RHn r f %s_trm h d %s_RHm r f\n",
   403  				Room.Name, Room.Name, Room.Name, Room.Name, Room.Name, Room.Name)
   404  			fmt.Fprintf(fo, "%s_Hs H d %s_Ts T f %s_tsn h d %s_Tsn t f %s_tsm h d %s_Tsm t f\n",
   405  				Room.Name, Room.Name, Room.Name, Room.Name, Room.Name, Room.Name)
   406  
   407  			if Room.rmld != nil {
   408  				fmt.Fprintf(fo, "%s_Hsh H d %s_Lsh Q f %s_Hsc H d %s_Lsc Q f ",
   409  					Room.Name, Room.Name, Room.Name, Room.Name)
   410  				fmt.Fprintf(fo, "%s_tsh h d %s_Lqsh q f %s_tsc h d %s_Lqsc q f\n",
   411  					Room.Name, Room.Name, Room.Name, Room.Name)
   412  
   413  				fmt.Fprintf(fo, "%s_Hlh H d %s_Llh Q f %s_Hlc H d %s_Llc Q f ",
   414  					Room.Name, Room.Name, Room.Name, Room.Name)
   415  				fmt.Fprintf(fo, "%s_tlh h d %s_Lqlh q f %s_tlc h d %s_Lqlc q f\n",
   416  					Room.Name, Room.Name, Room.Name, Room.Name)
   417  
   418  				fmt.Fprintf(fo, "%s_Hth H d %s_Lth Q f %s_Htc H d %s_Ltc Q f ",
   419  					Room.Name, Room.Name, Room.Name, Room.Name)
   420  				fmt.Fprintf(fo, "%s_tth h d %s_Lqth q f %s_ttc h d %s_Lqtc q f\n",
   421  					Room.Name, Room.Name, Room.Name, Room.Name)
   422  			}
   423  
   424  			if Room.Nasup > 0 {
   425  				for j := 0; j < Room.Nasup; j++ {
   426  					Ei := Room.cmp.Elins[Room.Nachr+Room.Nrp+j]
   427  
   428  					if Ei.Lpath == nil {
   429  						fmt.Fprintf(fo, "%s:%d_Qash Q f %s:%d_Qasc Q f ",
   430  							Room.Name, j, Room.Name, j)
   431  						fmt.Fprintf(fo, "%s:%d_Qalh Q f %s:%d_Qalc Q f ",
   432  							Room.Name, j, Room.Name, j)
   433  						fmt.Fprintf(fo, "%s:%d_Qath Q f %s:%d_Qatc Q f\n",
   434  							Room.Name, j, Room.Name, j)
   435  					} else {
   436  						fmt.Fprintf(fo, "%s:%s_Qash Q f %s:%s_Qasc Q f ",
   437  							Room.Name, Ei.Lpath.Name, Room.Name, Ei.Lpath.Name)
   438  						fmt.Fprintf(fo, "%s:%s_Qalh Q f %s:%s_Qalc Q f ",
   439  							Room.Name, Ei.Lpath.Name, Room.Name, Ei.Lpath.Name)
   440  						fmt.Fprintf(fo, "%s:%s_Qath Q f %s:%s_Qatc Q f\n",
   441  							Room.Name, Ei.Lpath.Name, Room.Name, Ei.Lpath.Name)
   442  					}
   443  				}
   444  			}
   445  			for j := 0; j < Room.Nrp; j++ {
   446  				rpnl := Room.rmpnl[j]
   447  				fmt.Fprintf(fo, "%s:%s_Qh Q f %s:%s_Qc Q f ", Room.Name, rpnl.pnl.Name,
   448  					Room.Name, rpnl.pnl.Name)
   449  			}
   450  			fmt.Fprintf(fo, "\n")
   451  		}
   452  	}
   453  
   454  	fmt.Fprintf(fo, "%02d %02d\n", mon, day)
   455  
   456  	for i := 0; i < Nroom; i++ {
   457  		Room := Rm[i]
   458  
   459  		fmt.Fprintf(fo, "%1d %4.2f %1d %4.2f %1d %4.2f ",
   460  			Room.mTrdy.Hrs, Room.mTrdy.M, Room.mTrdy.Mntime,
   461  			Room.mTrdy.Mn, Room.mTrdy.Mxtime, Room.mTrdy.Mx)
   462  		fmt.Fprintf(fo, "%1d %5.4f %1d %5.4f %1d %5.4f\n",
   463  			Room.mxrdy.Hrs, Room.mxrdy.M, Room.mxrdy.Mntime,
   464  			Room.mxrdy.Mn, Room.mxrdy.Mxtime, Room.mxrdy.Mx)
   465  		fmt.Fprintf(fo, "%1d %2.0f %1d %2.0f %1d %2.0f ",
   466  			Room.mRHdy.Hrs, Room.mRHdy.M, Room.mRHdy.Mntime,
   467  			Room.mRHdy.Mn, Room.mRHdy.Mxtime, Room.mRHdy.Mx)
   468  		fmt.Fprintf(fo, "%1d %4.2f %1d %4.2f %1d %4.2f\n",
   469  			Room.mTsavdy.Hrs, Room.mTsavdy.M, Room.mTsavdy.Mntime,
   470  			Room.mTsavdy.Mn, Room.mTsavdy.Mxtime, Room.mTsavdy.Mx)
   471  
   472  		R := Room.rmld
   473  		if R != nil {
   474  			fmt.Fprintf(fo, "%1d %3.1f ", R.mQdys.Hhr, R.mQdys.H)
   475  			fmt.Fprintf(fo, "%1d %3.1f ", R.mQdys.Chr, R.mQdys.C)
   476  			fmt.Fprintf(fo, "%4d %2.0f ", R.mQdys.Hmxtime, R.mQdys.Hmx)
   477  			fmt.Fprintf(fo, "%4d %2.0f ", R.mQdys.Cmxtime, R.mQdys.Cmx)
   478  
   479  			fmt.Fprintf(fo, "%1d %3.1f ", R.mQdyl.Hhr, R.mQdyl.H)
   480  			fmt.Fprintf(fo, "%1d %3.1f ", R.mQdyl.Chr, R.mQdyl.C)
   481  			fmt.Fprintf(fo, "%4d %2.0f ", R.mQdyl.Hmxtime, R.mQdyl.Hmx)
   482  			fmt.Fprintf(fo, "%4d %2.0f ", R.mQdyl.Cmxtime, R.mQdyl.Cmx)
   483  
   484  			fmt.Fprintf(fo, "%1d %3.1f ", R.mQdyt.Hhr, R.mQdyt.H)
   485  			fmt.Fprintf(fo, "%1d %3.1f ", R.mQdyt.Chr, R.mQdyt.C)
   486  			fmt.Fprintf(fo, "%4d %2.0f ", R.mQdyt.Hmxtime, R.mQdyt.Hmx)
   487  			fmt.Fprintf(fo, "%4d %2.0f\n", R.mQdyt.Cmxtime, R.mQdyt.Cmx)
   488  		}
   489  		if Room.Nasup > 0 {
   490  			for j := 0; j < Room.Nasup; j++ {
   491  				A := Room.Arsp[j]
   492  				fmt.Fprintf(fo, "%3.1f %3.1f ", A.mQdys.H, A.mQdys.C)
   493  				fmt.Fprintf(fo, "%3.1f %3.1f ", A.mQdyl.H, A.mQdyl.C)
   494  				fmt.Fprintf(fo, "%3.1f %3.1f ", A.mQdyt.H, A.mQdyt.C)
   495  			}
   496  			fmt.Fprintf(fo, "\n")
   497  		}
   498  		if Room.Nrp > 0 {
   499  			for j := 0; j < Room.Nrp; j++ {
   500  				rpnl := Room.rmpnl[j]
   501  				fmt.Fprintf(fo, "%3.1f %3.1f\n", -rpnl.pnl.mQdy.C, -rpnl.pnl.mQdy.H)
   502  			}
   503  		}
   504  		fmt.Fprintf(fo, "\n")
   505  	}
   506  }
   507  
   508  /* -------------------------------------------- */
   509  
   510  func paneldyprt(fo io.Writer, id int, _Rdpnl []*RDPNL) {
   511  	switch id {
   512  	case 0:
   513  		if len(_Rdpnl) > 0 {
   514  			fmt.Fprintf(fo, "%s %d\n", RDPANEL_TYPE, len(_Rdpnl))
   515  		}
   516  
   517  		for i := range _Rdpnl {
   518  			Rdpnl := _Rdpnl[i]
   519  			Wall := Rdpnl.sd[0].mw.wall
   520  
   521  			if Wall.WallType == WallType_P {
   522  				// 床暖房パネルの場合
   523  				fmt.Fprintf(fo, " %s 1 20\n", Rdpnl.Name)
   524  			} else if Rdpnl.sd[0].PVwallFlg {
   525  				//太陽電池一体型の場合
   526  				fmt.Fprintf(fo, " %s 1 36\n", Rdpnl.Name)
   527  			} else {
   528  				// その他
   529  				fmt.Fprintf(fo, " %s 1 28\n", Rdpnl.Name)
   530  			}
   531  		}
   532  		break
   533  
   534  	case 1:
   535  		for i := range _Rdpnl {
   536  			Rdpnl := _Rdpnl[i]
   537  			Wall := Rdpnl.sd[0].mw.wall
   538  
   539  			fmt.Fprintf(fo, "%s_Hto H d %s_To T f ", Rdpnl.Name, Rdpnl.Name)
   540  			fmt.Fprintf(fo, "%s_ttno h d %s_Ton t f %s_ttm h d %s_Tom t f ",
   541  				Rdpnl.Name, Rdpnl.Name, Rdpnl.Name, Rdpnl.Name)
   542  			fmt.Fprintf(fo, "%s_Ht H d %s_T T f ", Rdpnl.Name, Rdpnl.Name)
   543  			fmt.Fprintf(fo, "%s_ttn h d %s_Tn t f %s_ttm h d %s_Tm t f ",
   544  				Rdpnl.Name, Rdpnl.Name, Rdpnl.Name, Rdpnl.Name)
   545  			fmt.Fprintf(fo, "%s_Hh H d %s_Qh Q f %s_Hc H d %s_Qc Q f",
   546  				Rdpnl.Name, Rdpnl.Name, Rdpnl.Name, Rdpnl.Name)
   547  			fmt.Fprintf(fo, "%s_th h d %s_qh q f %s_tc h d %s_qc q f\n",
   548  				Rdpnl.Name, Rdpnl.Name, Rdpnl.Name, Rdpnl.Name)
   549  
   550  			if Wall.WallType == WallType_C {
   551  				fmt.Fprintf(fo, "%s_ScolHh H d %s_ScolQh Q f %s_ScolHc H d %s_ScolQc Q f",
   552  					Rdpnl.Name, Rdpnl.Name, Rdpnl.Name, Rdpnl.Name)
   553  				fmt.Fprintf(fo, "%s_Scolth h d %s_Scolqh q f %s_Scoltc h d %s_Scolqc q f\n",
   554  					Rdpnl.Name, Rdpnl.Name, Rdpnl.Name, Rdpnl.Name)
   555  
   556  				if Rdpnl.sd[0].PVwallFlg {
   557  					fmt.Fprintf(fo, "%s_PVHt H d %s_TPV T f ", Rdpnl.Name, Rdpnl.Name)
   558  					fmt.Fprintf(fo, "%s_PVttn h d %s_TPVn t f %s_PVttm h d %s_TPVm t f ",
   559  						Rdpnl.Name, Rdpnl.Name, Rdpnl.Name, Rdpnl.Name)
   560  					fmt.Fprintf(fo, "%s_PVH h d %s_E E f\n", Rdpnl.Name, Rdpnl.Name)
   561  				}
   562  			}
   563  		}
   564  		break
   565  
   566  	default:
   567  		for i := range _Rdpnl {
   568  			Rdpnl := _Rdpnl[i]
   569  			Wall := Rdpnl.sd[0].mw.wall
   570  
   571  			fmt.Fprintf(fo, "%1d %3.1f %1d %3.1f %1d %3.1f ",
   572  				Rdpnl.Tpody.Hrs, Rdpnl.Tpody.M, Rdpnl.Tpody.Mntime,
   573  				Rdpnl.Tpody.Mn, Rdpnl.Tpody.Mxtime, Rdpnl.Tpody.Mx)
   574  			fmt.Fprintf(fo, "%1d %3.1f %1d %3.1f %1d %3.1f ",
   575  				Rdpnl.Tpidy.Hrs, Rdpnl.Tpidy.M, Rdpnl.Tpidy.Mntime,
   576  				Rdpnl.Tpidy.Mn, Rdpnl.Tpidy.Mxtime, Rdpnl.Tpidy.Mx)
   577  			fmt.Fprintf(fo, "%1d %3.1f ", Rdpnl.Qdy.Hhr, Rdpnl.Qdy.H)
   578  			fmt.Fprintf(fo, "%1d %3.1f ", Rdpnl.Qdy.Chr, Rdpnl.Qdy.C)
   579  			fmt.Fprintf(fo, "%1d %2.0f ", Rdpnl.Qdy.Hmxtime, Rdpnl.Qdy.Hmx)
   580  			fmt.Fprintf(fo, "%1d %2.0f\n", Rdpnl.Qdy.Cmxtime, Rdpnl.Qdy.Cmx)
   581  
   582  			if Wall.WallType == WallType_C {
   583  				fmt.Fprintf(fo, "%1d %3.1f ", Rdpnl.Scoldy.Hhr, Rdpnl.Scoldy.H)
   584  				fmt.Fprintf(fo, "%1d %3.1f ", Rdpnl.Scoldy.Chr, Rdpnl.Scoldy.C)
   585  				fmt.Fprintf(fo, "%1d %2.0f ", Rdpnl.Scoldy.Hmxtime, Rdpnl.Scoldy.Hmx)
   586  				fmt.Fprintf(fo, "%1d %2.0f\n", Rdpnl.Scoldy.Cmxtime, Rdpnl.Scoldy.Cmx)
   587  
   588  				if Rdpnl.sd[0].PVwallFlg {
   589  					fmt.Fprintf(fo, "%1d %3.1f %1d %3.1f %1d %3.1f ",
   590  						Rdpnl.TPVdy.Hrs, Rdpnl.TPVdy.M, Rdpnl.TPVdy.Mntime,
   591  						Rdpnl.TPVdy.Mn, Rdpnl.TPVdy.Mxtime, Rdpnl.TPVdy.Mx)
   592  					fmt.Fprintf(fo, "%1d %.1f\n", Rdpnl.PVdy.Hhr, Rdpnl.PVdy.H)
   593  				}
   594  			}
   595  		}
   596  		break
   597  	}
   598  }
   599  
   600  func panelmonprt(fo io.Writer, id int, _Rdpnl []*RDPNL) {
   601  
   602  	switch id {
   603  	case 0:
   604  		if len(_Rdpnl) > 0 {
   605  			fmt.Fprintf(fo, "%s %d\n", RDPANEL_TYPE, len(_Rdpnl))
   606  		}
   607  
   608  		for i := range _Rdpnl {
   609  			Rdpnl := _Rdpnl[i]
   610  			Wall := Rdpnl.sd[0].mw.wall
   611  
   612  			if Wall.WallType == WallType_P {
   613  				fmt.Fprintf(fo, " %s 1 20\n", Rdpnl.Name)
   614  			} else {
   615  				if Rdpnl.sd[0].PVwallFlg {
   616  					fmt.Fprintf(fo, " %s 1 36\n", Rdpnl.Name)
   617  				} else {
   618  					fmt.Fprintf(fo, " %s 1 28\n", Rdpnl.Name)
   619  				}
   620  			}
   621  		}
   622  		break
   623  
   624  	case 1:
   625  		for i := range _Rdpnl {
   626  			Rdpnl := _Rdpnl[i]
   627  			Wall := Rdpnl.sd[0].mw.wall
   628  
   629  			fmt.Fprintf(fo, "%s_Hto H d %s_To T f ", Rdpnl.Name, Rdpnl.Name)
   630  			fmt.Fprintf(fo, "%s_ttno h d %s_Ton t f %s_ttm h d %s_Tom t f ",
   631  				Rdpnl.Name, Rdpnl.Name, Rdpnl.Name, Rdpnl.Name)
   632  			fmt.Fprintf(fo, "%s_Ht H d %s_T T f ", Rdpnl.Name, Rdpnl.Name)
   633  			fmt.Fprintf(fo, "%s_ttn h d %s_Tn t f %s_ttm h d %s_Tm t f ",
   634  				Rdpnl.Name, Rdpnl.Name, Rdpnl.Name, Rdpnl.Name)
   635  			fmt.Fprintf(fo, "%s_Hh H d %s_Qh Q f %s_Hc H d %s_Qc Q f",
   636  				Rdpnl.Name, Rdpnl.Name, Rdpnl.Name, Rdpnl.Name)
   637  			fmt.Fprintf(fo, "%s_th h d %s_qh q f %s_tc h d %s_qc q f\n",
   638  				Rdpnl.Name, Rdpnl.Name, Rdpnl.Name, Rdpnl.Name)
   639  
   640  			if Wall.WallType == WallType_C {
   641  				fmt.Fprintf(fo, "%s_ScolHh H d %s_ScolQh Q f %s_ScolHc H d %s_ScolQc Q f",
   642  					Rdpnl.Name, Rdpnl.Name, Rdpnl.Name, Rdpnl.Name)
   643  				fmt.Fprintf(fo, "%s_Scolth h d %s_Scolqh q f %s_Scoltc h d %s_Scolqc q f\n",
   644  					Rdpnl.Name, Rdpnl.Name, Rdpnl.Name, Rdpnl.Name)
   645  
   646  				if Rdpnl.sd[0].PVwallFlg {
   647  					fmt.Fprintf(fo, "%s_PVHt H d %s_TPV T f ", Rdpnl.Name, Rdpnl.Name)
   648  					fmt.Fprintf(fo, "%s_PVttn h d %s_TPVn t f %s_PVttm h d %s_TPVm t f ",
   649  						Rdpnl.Name, Rdpnl.Name, Rdpnl.Name, Rdpnl.Name)
   650  					fmt.Fprintf(fo, "%s_PVH h d %s_E E f\n", Rdpnl.Name, Rdpnl.Name)
   651  				}
   652  			}
   653  		}
   654  		break
   655  
   656  	default:
   657  		for i := range _Rdpnl {
   658  			Rdpnl := _Rdpnl[i]
   659  			Wall := Rdpnl.sd[0].mw.wall
   660  
   661  			fmt.Fprintf(fo, "%1d %3.1f %1d %3.1f %1d %3.1f ",
   662  				Rdpnl.mTpody.Hrs, Rdpnl.mTpody.M, Rdpnl.mTpody.Mntime,
   663  				Rdpnl.mTpody.Mn, Rdpnl.mTpody.Mxtime, Rdpnl.mTpody.Mx)
   664  			fmt.Fprintf(fo, "%1d %3.1f %1d %3.1f %1d %3.1f ",
   665  				Rdpnl.mTpidy.Hrs, Rdpnl.mTpidy.M, Rdpnl.mTpidy.Mntime,
   666  				Rdpnl.mTpidy.Mn, Rdpnl.mTpidy.Mxtime, Rdpnl.mTpidy.Mx)
   667  			fmt.Fprintf(fo, "%1d %3.1f ", Rdpnl.mQdy.Hhr, Rdpnl.mQdy.H)
   668  			fmt.Fprintf(fo, "%1d %3.1f ", Rdpnl.mQdy.Chr, Rdpnl.mQdy.C)
   669  			fmt.Fprintf(fo, "%1d %2.0f ", Rdpnl.mQdy.Hmxtime, Rdpnl.mQdy.Hmx)
   670  			fmt.Fprintf(fo, "%1d %2.0f\n", Rdpnl.mQdy.Cmxtime, Rdpnl.mQdy.Cmx)
   671  
   672  			if Wall.WallType == WallType_C {
   673  				fmt.Fprintf(fo, "%1d %3.1f ", Rdpnl.mScoldy.Hhr, Rdpnl.mScoldy.H)
   674  				fmt.Fprintf(fo, "%1d %3.1f ", Rdpnl.mScoldy.Chr, Rdpnl.mScoldy.C)
   675  				fmt.Fprintf(fo, "%1d %2.0f ", Rdpnl.mScoldy.Hmxtime, Rdpnl.mScoldy.Hmx)
   676  				fmt.Fprintf(fo, "%1d %2.0f\n", Rdpnl.mScoldy.Cmxtime, Rdpnl.mScoldy.Cmx)
   677  
   678  				if Rdpnl.sd[0].PVwallFlg {
   679  					fmt.Fprintf(fo, "%1d %3.1f %1d %3.1f %1d %3.1f ",
   680  						Rdpnl.mTPVdy.Hrs, Rdpnl.mTPVdy.M, Rdpnl.mTPVdy.Mntime,
   681  						Rdpnl.mTPVdy.Mn, Rdpnl.mTPVdy.Mxtime, Rdpnl.mTPVdy.Mx)
   682  					fmt.Fprintf(fo, "%1d %.1f\n", Rdpnl.mPVdy.Hhr, Rdpnl.mPVdy.H)
   683  				}
   684  			}
   685  		}
   686  		break
   687  	}
   688  }
   689  
   690  func panelmtprt(fo io.Writer, id int, Rdpnl []*RDPNL, Mo int, tt int) {
   691  	switch id {
   692  	case 0:
   693  		if len(Rdpnl) > 0 {
   694  			fmt.Fprintf(fo, "%s %d\n", RDPANEL_TYPE, len(Rdpnl))
   695  		}
   696  		for i := range Rdpnl {
   697  			Rdpnl := Rdpnl[i]
   698  			fmt.Fprintf(fo, " %s 1 1\n", Rdpnl.Name)
   699  		}
   700  	case 1:
   701  		for i := range Rdpnl {
   702  			Rdpnl := Rdpnl[i]
   703  			fmt.Fprintf(fo, "%s_E E f \n", Rdpnl.Name)
   704  		}
   705  	default:
   706  		for i := range Rdpnl {
   707  			Rdpnl := Rdpnl[i]
   708  			fmt.Fprintf(fo, " %.2f \n", Rdpnl.mtPVdy[Mo-1][tt-1].D*Cff_kWh)
   709  		}
   710  	}
   711  }