github.com/archlabjp/eeslism-go@v0.0.0-20231109122333-4bb7bfcdf292/eeslism/blrmprint.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 /* rmprint.c */ 17 18 package eeslism 19 20 import ( 21 "fmt" 22 "io" 23 ) 24 25 /* ---------------------------------------------------------------- */ 26 /* 室内表面温度の出力 */ 27 28 var __Rmsfprint_ic int 29 30 func Rmsfprint(fo io.Writer, title string, Mon, Day int, time float64, Room []*ROOM, Sd []*RMSRF) { 31 if __Rmsfprint_ic == 0 { 32 __Rmsfprint_ic++ 33 34 var n int 35 for i := range Room { 36 Rm := Room[i] 37 if Rm.sfpri { 38 n++ 39 } 40 } 41 42 fmt.Fprintf(fo, "%s;\n %d\n", title, n) 43 fmt.Fprint(fo, "Mo\tNd\ttime\t") 44 45 for i := range Room { 46 Rm := Room[i] 47 if Rm.sfpri { 48 fmt.Fprintf(fo, "%s\t", Rm.Name) 49 50 for n := 0; n < Rm.N; n++ { 51 S := Sd[Rm.Brs+n] 52 if S.Name == "" { 53 fmt.Fprintf(fo, "%d-%c_Ts\t", n-Rm.Brs, S.ble) 54 } else { 55 fmt.Fprintf(fo, "%s_Ts\t", S.Name) 56 } 57 } 58 } 59 } 60 fmt.Fprint(fo, "\n") 61 } 62 fmt.Fprintf(fo, "%d\t%d\t%.2f\t", Mon, Day, time) 63 64 for i := range Room { 65 Rm := Room[i] 66 if Rm.sfpri { 67 fmt.Fprint(fo, "\t") 68 69 for n := 0; n < Rm.N; n++ { 70 S := Sd[Rm.Brs+n] 71 fmt.Fprintf(fo, "%.1f\t", S.Ts) 72 } 73 } 74 } 75 fmt.Fprint(fo, "\n") 76 } 77 78 /* ---------------------------------------------------------------- */ 79 /* 室内表面熱流の出力 */ 80 81 var __Rmsfqprint_ic int 82 83 func Rmsfqprint(fo io.Writer, title string, Mon, Day int, time float64, Room []*ROOM, Sd []*RMSRF) { 84 if __Rmsfqprint_ic == 0 { 85 __Rmsfqprint_ic++ 86 87 var n int 88 for i := range Room { 89 Rm := Room[i] 90 if Rm.sfpri { 91 n++ 92 } 93 } 94 95 fmt.Fprintf(fo, "%s;\n %d\n", title, n) 96 fmt.Fprint(fo, "Mo\tNd\ttime\t") 97 98 for i := range Room { 99 Rm := Room[i] 100 if Rm.sfpri { 101 fmt.Fprintf(fo, "%s\t", Rm.Name) 102 103 for n := 0; n < Rm.N; n++ { 104 S := Sd[Rm.Brs+n] 105 if S.Name == "" { 106 fmt.Fprintf(fo, "%d-%c_Qc\t%d-%c_Qr\t%d-%c_RS\t%d-%c_Qi\t%d-%c_RSsol\t%d-%c_RSli\t%d-%c_tsol\t%d-%c_asol\t%d-%c_rn\t", 107 n, S.ble, n, S.ble, n, S.ble, 108 n, S.ble, n, S.ble, n, S.ble, n, S.ble, n, S.ble, n, S.ble) 109 } else { 110 fmt.Fprintf(fo, "%s_Qc\t%s_Qr\t%s_RS\t%s_Qi\t%s_RSsol\t%s_RSli\t%s_tsol\t%s_asol\t%s_rn\t", 111 S.Name, S.Name, S.Name, S.Name, S.Name, S.Name, S.Name, S.Name, S.Name) 112 } 113 } 114 } 115 } 116 fmt.Fprint(fo, "\n") 117 } 118 fmt.Fprintf(fo, "%d\t%d\t%.2f\t", Mon, Day, time) 119 120 for i := range Room { 121 Rm := Room[i] 122 if Rm.sfpri { 123 fmt.Fprint(fo, "\t") 124 125 // 2003/9/10 表面熱取得を負とするために短波長成分RSの符号を変更した。 126 for n := 0; n < Rm.N; n++ { 127 S := Sd[Rm.Brs+n] 128 fmt.Fprintf(fo, "%.4e\t%.4e\t%.4e\t%.4e\t%.4e\t%.4e\t%.4e\t%.4e\t%.4e\t", S.Qc, S.Qr, 129 -S.RS*S.A, S.Qi, -S.RSsol*S.A, -S.RSli*S.A, S.Qgt, S.Qga, S.Qrn) 130 } 131 } 132 } 133 fmt.Fprint(fo, "\n") 134 } 135 136 /* ---------------------------------------------------------------- */ 137 /* 室内表面熱伝達率の出力 */ 138 139 var __Rmsfaprint_ic int 140 141 func Rmsfaprint(fo io.Writer, title string, Mon, Day int, time float64, Room []*ROOM, Sd []*RMSRF) { 142 if __Rmsfaprint_ic == 0 { 143 __Rmsfaprint_ic++ 144 145 var n int 146 for i := range Room { 147 Rm := Room[i] 148 if Rm.sfpri { 149 n++ 150 } 151 } 152 153 fmt.Fprintf(fo, "%s;\n %d\n", title, n) 154 fmt.Fprint(fo, "Mo\tNd\ttime\t") 155 156 for i := range Room { 157 Rm := Room[i] 158 if Rm.sfpri { 159 fmt.Fprintf(fo, "%s\t", Rm.Name) 160 161 for nn := 0; nn < Rm.N; nn++ { 162 S := Sd[Rm.Brs+nn] 163 if S.Name == "" { 164 fmt.Fprintf(fo, "%d-%c_K\t%d-%c_alc\t%d-%c_alr\t", 165 n-Rm.Brs, S.ble, n-Rm.Brs, S.ble, n-Rm.Brs, S.ble) 166 } else { 167 fmt.Fprintf(fo, "%s_K\t%s_alc\t%s_alr\t", 168 S.Name, S.Name, S.Name) 169 } 170 } 171 } 172 } 173 fmt.Fprint(fo, "\n") 174 } 175 fmt.Fprintf(fo, "%d\t%d\t%.2f\t", Mon, Day, time) 176 177 for i := range Room { 178 Rm := Room[i] 179 if Rm.sfpri { 180 fmt.Fprint(fo, "\t") 181 182 for nn := 0; nn < Rm.N; nn++ { 183 S := Sd[Rm.Brs+nn] 184 fmt.Fprintf(fo, "%.3g\t%.3g\t%.3g\t", S.K, S.alic, S.alir) 185 } 186 } 187 } 188 fmt.Fprint(fo, "\n") 189 } 190 191 /* 日積算壁体貫流熱取得の出力 */ 192 var __Dysfprint_ic int 193 194 func Dysfprint(fo io.Writer, title string, Mon, Day int, Room []*ROOM) { 195 if __Dysfprint_ic == 0 { 196 __Dysfprint_ic++ 197 198 var n int 199 for i := range Room { 200 Rm := Room[i] 201 if Rm.sfpri { 202 n++ 203 } 204 } 205 206 fmt.Fprintf(fo, "%s;\n %d\n", title, n) 207 fmt.Fprint(fo, "Mo\tNd\t") 208 209 for i := range Room { 210 Rm := Room[i] 211 if Rm.sfpri { 212 fmt.Fprintf(fo, "%s\t", Rm.Name) 213 214 for n := 0; n < Rm.N; n++ { 215 Sd := Rm.rsrf[n] 216 if Sd.Name == "" { 217 fmt.Fprintf(fo, "%d-%c_Ts\t%d-%c_Tsmax\t%d-%c_Tsmin\t%d-%c_Qih\t%d-%c_Qic\t", 218 n, Sd.ble, n, Sd.ble, n, Sd.ble, n, Sd.ble, n, Sd.ble) 219 } else { 220 fmt.Fprintf(fo, "%s_Ts\t%s_Tsmax\t%s_Tsmin\t%s_Qih\t%s_Qic\t", 221 Sd.Name, Sd.Name, Sd.Name, Sd.Name, Sd.Name) 222 } 223 } 224 } 225 } 226 fmt.Fprint(fo, "\n") 227 } 228 229 fmt.Fprintf(fo, "%d\t%d\t", Mon, Day) 230 231 for i := range Room { 232 Rm := Room[i] 233 if Rm.sfpri { 234 fmt.Fprint(fo, "\t") 235 236 for n := 0; n < Rm.N; n++ { 237 Sd := Rm.rsrf[n] 238 fmt.Fprintf(fo, "%.2f\t%.2f\t%.2f\t%.3g\t%.3g\t", 239 Sd.Tsdy.M, Sd.Tsdy.Mx, Sd.Tsdy.Mn, Sd.SQi.H, Sd.SQi.C) 240 } 241 } 242 } 243 244 fmt.Fprint(fo, "\n") 245 } 246 247 /* ---------------------------------------------------------------- */ 248 249 /* 日よけの影面積の出力 */ 250 251 var __Shdprint_ic int 252 253 func Shdprint(fo io.Writer, title string, Mon, Day int, time float64, Sd []*RMSRF) { 254 if __Shdprint_ic == 0 { 255 __Shdprint_ic++ 256 257 var m int 258 for i := range Sd { 259 Sdd := Sd[i] 260 if Sdd.shdpri && Sdd.sb >= 0 { 261 m++ 262 } 263 } 264 265 fmt.Fprintf(fo, "%s;\n %d\n", title, m) 266 267 for i := range Sd { 268 Sdd := Sd[i] 269 if Sdd.shdpri && Sdd.sb >= 0 { 270 fmt.Fprintf(fo, "%s\t%d:%s\n", Sdd.room.Name, i-Sdd.room.Brs, Sdd.Name) 271 } 272 } 273 } 274 275 fmt.Fprintf(fo, "%d\t%d\t%.2f\t", Mon, Day, time) 276 277 for i := range Sd { 278 Sdd := Sd[i] 279 if Sdd.shdpri && Sdd.sb >= 0 { 280 fmt.Fprintf(fo, "%.2f\t", Sdd.Fsdworg) 281 } 282 } 283 284 fmt.Fprint(fo, "\n") 285 } 286 287 /* ---------------------------------------------------------------- */ 288 289 /* 壁体内部温度の出力 */ 290 291 var __Wallprint_ic int 292 293 func Wallprint(fo io.Writer, title string, Mon, Day int, time float64, Sd []*RMSRF) { 294 if __Wallprint_ic == 0 { 295 __Wallprint_ic++ 296 var m int 297 for i := range Sd { 298 Sdd := Sd[i] 299 if Sdd.wlpri && Sdd.wd >= 0 { 300 m++ 301 } 302 } 303 304 fmt.Fprintf(fo, "%s;\n %d\n", title, m) 305 306 for i := range Sd { 307 Sdd := Sd[i] 308 if Sdd.wlpri && Sdd.wd >= 0 { 309 fmt.Fprintf(fo, "%s\t%d-%c:%s\t%d\n", Sdd.room.Name, i-Sdd.room.Brs, Sdd.ble, Sdd.Name, Sdd.mw.M) 310 } 311 } 312 } 313 314 fmt.Fprintf(fo, "%d\t%d\t%.2f\t", Mon, Day, time) 315 316 for i := range Sd { 317 Sdd := Sd[i] 318 if Sdd.wlpri && Sdd.wd >= 0 { 319 Mw := Sdd.mw 320 321 // 室内が壁体0側の場合 322 if Sdd.mwside == RMSRFMwSideType_i { 323 for m := 0; m < Mw.M; m++ { 324 fmt.Fprintf(fo, "\t%.2f", Mw.Tw[m]) 325 } 326 } else { // 室内が壁体M側の場合 327 for m := Mw.M - 1; m >= 0; m-- { 328 fmt.Fprintf(fo, "\t%.2f", Mw.Tw[m]) 329 } 330 } 331 332 fmt.Fprint(fo, "\t") 333 } 334 } 335 336 fmt.Fprint(fo, "\n") 337 } 338 339 /* ---------------------------------------------------------------- */ 340 341 /* 潜熱蓄熱材の状態値の出力 */ 342 var __PCMprint_ic int 343 344 func PCMprint(fo io.Writer, title string, Mon, Day int, time float64, Sd []*RMSRF) { 345 var Sdd *RMSRF 346 var pcmstate *PCMSTATE 347 348 if __PCMprint_ic == 0 { 349 __PCMprint_ic++ 350 351 Sdd = Sd[0] 352 m := 0 353 for i := range Sd { 354 if Sdd.pcmpri && Sdd.wd >= 0 { 355 m += Sdd.Npcm 356 } 357 Sdd = Sd[i] 358 } 359 360 fmt.Fprintf(fo, "%s;\n %d\n", title, m) 361 362 for i := range Sd { 363 Sdd := Sd[i] 364 if Sdd.mwside == RMSRFMwSideType_i { 365 if Sdd.pcmpri && Sdd.wd >= 0 { 366 for m := 0; m < Sdd.mw.M; m++ { 367 pcmstate = Sdd.pcmstate[m] 368 if pcmstate != nil && pcmstate.Name != nil { 369 fmt.Fprintf(fo, "%s\t%d-%c:%s\t%s\tTpcm\tcp\tLamda\n", Sdd.room.Name, i-Sdd.room.Brs, Sdd.ble, Sdd.Name, *pcmstate.Name) 370 } 371 } 372 } 373 } 374 } 375 } 376 377 fmt.Fprintf(fo, "%d\t%d\t%.2f\t", Mon, Day, time) 378 379 for _, Sdd := range Sd { 380 if Sdd.pcmpri && Sdd.wd >= 0 { 381 Mw := Sdd.mw 382 383 if Sdd.mwside == RMSRFMwSideType_i { 384 for j := 0; j < Mw.M; j++ { 385 pcmstate = Sdd.pcmstate[j] 386 if pcmstate != nil && pcmstate.Name != nil { 387 fmt.Fprintf(fo, "\t%.3f\t%.3f\t%.3f\t%.0f\t%.0f\t%.4g\t%.4g", 388 pcmstate.TempPCMNodeL, pcmstate.TempPCMNodeR, 389 pcmstate.TempPCMave, pcmstate.CapmL, pcmstate.CapmR, 390 pcmstate.LamdaL, pcmstate.LamdaR) 391 } 392 } 393 } 394 395 fmt.Fprintf(fo, "\t") 396 } 397 } 398 399 fmt.Fprintf(fo, "\n") 400 } 401 402 /* ---------------------------------------------------------------- */ 403 404 /* 日射、室内熱取得の出力 */ 405 406 var __Qrmprint_ic int 407 408 func Qrmprint(fo io.Writer, title string, Mon, Day int, time float64, Room []*ROOM, Qrm []*QRM) { 409 if __Qrmprint_ic == 0 { 410 __Qrmprint_ic++ 411 412 // 日射、室内発熱取得出力指定の部屋数を数える 413 var n int 414 for i := range Room { 415 Rm := Room[i] 416 if Rm.eqpri { 417 n++ 418 } 419 } 420 421 fmt.Fprintf(fo, "%s;\n %d\n", title, n) 422 fmt.Fprint(fo, "Mo\tNd\ttt\t") 423 424 key := []string{"tsol", "asol", "arn", "hums", "light", "apls", 425 "huml", "apll", "Qeqp", "Qfun", "Qis", "Qil", "Qsto", "Qstol", "AE", "AG"} 426 427 for _, Rm := range Room { 428 if Rm.eqpri { 429 for j := range key { 430 fmt.Fprintf(fo, "%s_%s\t", Rm.Name, key[j]) 431 } 432 } 433 } 434 435 fmt.Fprint(fo, "\n") 436 } 437 438 fmt.Fprintf(fo, "%d\t%d\t%.2f\t", Mon, Day, time) 439 440 for i, Rm := range Room { 441 if Rm.eqpri { 442 Q := Qrm[i] 443 fmt.Fprintf(fo, "%.5g\t%.5g\t%.5g\t%.5g\t%.5g\t%.5g\t%.5g\t%.5g\t%.5g\t%.5g\t%.5g\t%.5g\t", 444 Q.Tsol, Q.Asol, Q.Arn, Q.Hums, Q.Light, Q.Apls, Q.Huml, Q.Apll, Q.Qeqp, Rm.QM, Q.Qinfs, Q.Qinfl) 445 fmt.Fprintf(fo, "%.5g\t%.5g\t", Q.Qsto, Q.Qstol) 446 fmt.Fprintf(fo, "%.5g\t%.5g\t", Q.AE, Q.AG) 447 } 448 } 449 450 fmt.Fprint(fo, "\n") 451 } 452 453 /* ---------------------------------------------------------------- */ 454 455 /* 日射、室内熱取得の出力 */ 456 457 var __Dyqrmprint_ic int 458 459 func Dyqrmprint(fo io.Writer, title string, Mon int, Day int, Room []*ROOM, Trdav []float64, Qrmd []*QRM) { 460 if __Dyqrmprint_ic == 0 { 461 __Dyqrmprint_ic++ 462 463 var n int 464 465 for i := range Room { 466 Rm := Room[i] 467 if Rm.eqpri { 468 n++ 469 } 470 } 471 472 fmt.Fprintf(fo, "%s;\n %d\n", title, n) 473 fmt.Fprintf(fo, "Mo\tNd\t") 474 475 key := [16]string{"Tr", "tsol", "asol", "arn", "hums", "light", "apls", 476 "huml", "apll", "Qeqp", "Qis", "Qil", "Qsto", "Qstol", "AE", "AG"} 477 478 for i := range Room { 479 Rm := Room[i] 480 if Rm.eqpri { 481 for j := 0; j < 16; j++ { 482 fmt.Fprintf(fo, "%s_%s\t", Rm.Name, key[j]) 483 } 484 } 485 } 486 487 fmt.Fprintf(fo, "\n") 488 } 489 490 fmt.Fprintf(fo, "%d\t%d\t", Mon, Day) 491 492 for i := range Room { 493 if Room[i].eqpri { 494 Q := Qrmd[i] 495 fmt.Fprintf(fo, 496 "%.1f\t%.4g\t%.4g\t%.4g\t%.4g\t%.4g\t%.4g\t%.4g\t%.4g\t%.4g\t%.4g\t%.4g\t%.4g\t%.4g\t%.4g\t%.4g\t", 497 Trdav[i], Q.Tsol, Q.Asol, Q.Arn, Q.Hums, Q.Light, Q.Apls, Q.Huml, Q.Apll, 498 Q.Qeqp, Q.Qinfs, Q.Qinfl, Q.Qsto, Q.Qstol, Q.AE, Q.AG) 499 } 500 } 501 502 fmt.Fprintf(fo, "\n") 503 } 504 505 /* ---------------------------------------------------------------- */ 506 507 var __Qrmsum_oldday int 508 509 func Qrmsum(Day int, _Room []*ROOM, Qrm []*QRM, Trdav []float64, Qrmd []*QRM) { 510 if Day != __Qrmsum_oldday { 511 for i := range _Room { 512 Q := Qrmd[i] 513 T := &Trdav[i] 514 515 *T = 0.0 516 Q.Tsol = 0.0 517 Q.Asol = 0.0 518 Q.Arn = 0.0 519 Q.Hums = 0.0 520 Q.Light = 0.0 521 Q.Apls = 0.0 522 Q.Huml = 0.0 523 Q.Apll = 0.0 524 Q.Qeqp = 0.0 525 Q.Qinfl = 0.0 526 Q.Qinfs = 0.0 527 Q.Qsto = 0.0 528 Q.Qstol = 0.0 529 Q.AE = 0.0 530 Q.AG = 0.0 531 } 532 __Qrmsum_oldday = Day 533 } 534 535 for i := range _Room { 536 Q := Qrmd[i] 537 Qr := Qrm[i] 538 T := &Trdav[i] 539 Room := _Room[i] 540 541 scale := DTM / 3600.0 542 543 *T += Room.Tr * scale / 24.0 544 Q.Tsol += Qr.Tsol * scale 545 Q.Asol += Qr.Asol * scale 546 Q.Arn += Qr.Arn * scale 547 Q.Hums += Qr.Hums * scale 548 Q.Light += Qr.Light * scale 549 Q.Apls += Qr.Apls * scale 550 Q.Huml += Qr.Huml * scale 551 Q.Apll += Qr.Apll * scale 552 Q.Qinfs += Qr.Qinfs * scale 553 Q.Qinfl += Qr.Qinfl * scale 554 Q.Qeqp += Qr.Qeqp * scale 555 Q.Qsto += Qr.Qsto * scale 556 Q.Qstol += Qr.Qstol * scale 557 Q.AE += Qr.AE * scale 558 Q.AG += Qr.AG * scale 559 } 560 }