github.com/archlabjp/eeslism-go@v0.0.0-20231109122333-4bb7bfcdf292/eeslism/eesyselmalc_s.go (about) 1 package eeslism 2 3 var idmrkc = []FliudType{ 4 AIRt_FLD, //'t' 空気(温度) 5 AIRx_FLD, //'x' 空気(湿度) 6 WATER_FLD, //'W' 水 7 } 8 9 // 機器使用データの割り付けおよびシステム要素から入力、出力要素の割り付け 10 func Elmalloc( 11 _Compnt []*COMPNT, 12 Eqcat *EQCAT, 13 Eqsys *EQSYS, 14 Elo *[]*ELOUT, 15 Eli *[]*ELIN, 16 ) { 17 var cmp []*COMPNT 18 var Hcc *HCC 19 var Boi *BOI 20 var Refa *REFA 21 var Coll *COLL 22 var Pipe *PIPE 23 var Stank *STANK 24 var Pump *PUMP 25 var Cnvrg []*COMPNT 26 var Flin []*FLIN 27 var Hcload []*HCLOAD 28 var Stheat *STHEAT 29 // var Elout []*ELOUT 30 // var Elin []*ELIN 31 var Thex *THEX 32 var PV *PV 33 var Desi *DESI 34 var Evac *EVAC 35 36 var i, ii, mm, neqp, ncat int 37 icv := 0 38 var name string 39 40 var Nvalv, NQmeas, NOMvav int 41 idTe := "EO" 42 idTo := "OE" 43 var idxe, idxo []ELIOType 44 45 cmp = _Compnt 46 47 *Elo = make([]*ELOUT, 0) 48 *Eli = make([]*ELIN, 0) 49 50 // eloIdx := 0 51 // elinIdx := 0 52 53 flinIdx := 0 54 hcloadIdx := 0 55 Cnvrg = Eqsys.Cnvrg 56 Flin = Eqsys.Flin 57 Hcload = Eqsys.Hcload 58 59 for _, Compnt := range _Compnt { 60 61 if Compnt.Eqptype != PV_TYPE { 62 Compnt.Elouts = make([]*ELOUT, 0) 63 Compnt.Elins = make([]*ELIN, 0) 64 } 65 66 name = Compnt.Name 67 neqp = Compnt.Neqp 68 ncat = Compnt.Ncat 69 70 c := Compnt.Eqptype 71 72 if SIMUL_BUILDG && c == ROOM_TYPE { 73 room := Compnt.Eqp.(*ROOM) 74 room.cmp = Compnt //逆参照の設定 75 76 id := idmrkc 77 for i := 0; i < 2; i++ { 78 Elout := NewElout() 79 Elout.Cmp = Compnt //逆参照の設定 80 Elout.Id = ELIOType(id[i]) 81 Elout.Fluid = FliudType(id[i]) 82 if i == 0 { 83 // 空気温度の流入経路の数 84 Elout.Ni = room.Nachr + room.Ntr + room.Nrp + room.Nasup 85 } else if i == 1 { 86 // 空気湿度の流入経路の数 87 Elout.Ni = room.Nachr + room.Nasup 88 } 89 Elout.Elins = NewElinSlice(Elout.Ni) 90 91 *Elo = append(*Elo, Elout) 92 *Eli = append(*Eli, Elout.Elins...) 93 94 Compnt.Elouts = append(Compnt.Elouts, Elout) 95 Compnt.Elins = append(Compnt.Elins, Elout.Elins...) 96 } 97 98 // 空気温度・湿度それぞれの流入経路の設定 99 room.elinasup = Compnt.Elouts[0].Elins[room.Nachr+room.Ntr+room.Nrp:] 100 room.elinasupx = Compnt.Elouts[1].Elins[room.Nachr:] 101 } else if SIMUL_BUILDG && c == RDPANEL_TYPE { 102 rdpnl := Compnt.Eqp.(*RDPNL) 103 rdpnl.cmp = Compnt 104 rdpnl.Tpi = 15.0 105 106 // 空気経路温度用 107 Elout_t := NewElout() 108 Elout_t.Cmp = Compnt 109 Elout_t.Id = ELIO_f 110 Elout_t.Ni = 1 + 1 + rdpnl.Ntrm[0] + rdpnl.Nrp[0] 111 if rdpnl.MC == 2 { 112 // 共用壁の場合 113 Elout_t.Ni += 1 + rdpnl.Ntrm[1] + rdpnl.Nrp[1] 114 } 115 Elout_t.Elins = make([]*ELIN, 0, Elout_t.Ni) 116 117 Elin := NewElin() 118 Elin.Id = ELIO_f 119 Elout_t.Elins = append(Elout_t.Elins, Elin) 120 121 for mm = 0; mm < rdpnl.MC; mm++ { 122 Elin := NewElin() 123 Elin.Id = ELIO_r 124 Elout_t.Elins = append(Elout_t.Elins, Elin) 125 126 for ii = 0; ii < rdpnl.Ntrm[mm]; ii++ { 127 Elin := NewElin() 128 Elin.Id = ELIO_r 129 Elout_t.Elins = append(Elout_t.Elins, Elin) 130 } 131 for ii = 0; ii < rdpnl.Nrp[mm]; ii++ { 132 Elin := NewElin() 133 Elin.Id = ELIO_f 134 Elout_t.Elins = append(Elout_t.Elins, Elin) 135 } 136 } 137 138 *Elo = append(*Elo, Elout_t) 139 *Eli = append(*Eli, Elout_t.Elins...) 140 141 // 空気経路湿度用 142 Elout_x := NewElout() 143 Elout_x.Cmp = Compnt 144 Elout_x.Id = ELIO_x 145 Elout_x.Ni = 1 146 Elout_x.Elins = make([]*ELIN, 0, Elout_x.Ni) 147 Elin.Id = ELIO_x 148 149 *Elo = append(*Elo, Elout_x) 150 *Eli = append(*Eli, Elout_x.Elins...) 151 152 Compnt.Elouts = append(Compnt.Elouts, Elout_t, Elout_x) 153 Compnt.Elins = append(Compnt.Elins, Elout_t.Elins...) 154 Compnt.Elins = append(Compnt.Elins, Elout_x.Elins...) 155 } else if c == DIVERG_TYPE || c == DIVGAIR_TYPE { 156 if c == DIVGAIR_TYPE { 157 Compnt.Airpathcpy = true 158 } else { 159 Compnt.Airpathcpy = false 160 } 161 162 Compnt.Nin = 1 163 164 // 分岐なので、入口は共通で1つ 165 Elin := NewElin() 166 Elin.Id = ELIO_i 167 *Eli = append(*Eli, Elin) 168 Compnt.Elins = append(Compnt.Elins, Elin) 169 170 // 出口は複数 171 for i := 0; i < Compnt.Nout; i++ { 172 Elout := NewElout() 173 Elout.Cmp = Compnt 174 Elout.Ni = Compnt.Nin 175 Elout.Elins = []*ELIN{Elin} //共通 176 Elout.Id = Compnt.Ido[i] 177 *Elo = append(*Elo, Elout) 178 Compnt.Elouts = append(Compnt.Elouts, Elout) 179 } 180 } else if c == CONVRG_TYPE || c == CVRGAIR_TYPE { 181 if c == CVRGAIR_TYPE { 182 Compnt.Airpathcpy = true 183 } else { 184 Compnt.Airpathcpy = false 185 } 186 187 Compnt.Nout = 1 188 189 Cnvrg[icv] = Compnt 190 icv++ 191 192 // 合流なので、出口は1つ 193 Elout := NewElout() 194 Elout.Id = ELIO_o 195 Elout.Cmp = Compnt 196 Elout.Ni = Compnt.Nin 197 Elout.Elins = make([]*ELIN, 0, Elout.Ni) 198 199 // 入口は複数 200 for i := 0; i < Compnt.Nin; i++ { 201 Elin := NewElin() 202 Elin.Id = Compnt.Idi[i] 203 Elout.Elins = append(Elout.Elins, Elin) 204 } 205 206 *Elo = append(*Elo, Elout) 207 *Eli = append(*Eli, Elout.Elins...) 208 Compnt.Elouts = append(Compnt.Elouts, Elout) 209 Compnt.Elins = append(Compnt.Elins, Elout.Elins...) 210 } else if c == HCCOIL_TYPE { 211 Hcc = Eqsys.Hcc[neqp] 212 Compnt.Eqp = Hcc 213 Hcc.Name = name 214 Hcc.Cmp = Compnt 215 Hcc.Cat = Eqcat.Hccca[ncat] 216 217 // 入口の数=出口の数 218 for i = 0; i < Compnt.Nout; i++ { 219 Elout := NewElout() 220 Elout.Cmp = Compnt 221 Elout.Ni = Compnt.Nin 222 Elout.Elins = Compnt.Elins 223 Elout.Id = Compnt.Ido[i] 224 225 Elin := NewElin() 226 Elin.Id = Compnt.Idi[i] 227 228 *Elo = append(*Elo, Elout) 229 *Eli = append(*Eli, Elout.Elins...) 230 Compnt.Elouts = append(Compnt.Elouts, Elout) 231 Compnt.Elins = append(Compnt.Elins, Elout.Elins...) 232 } 233 } else if c == HEXCHANGR_TYPE { 234 Hex := Eqsys.Hex[neqp] 235 Compnt.Eqp = Hex 236 Hex.Name = name 237 Hex.Cmp = Compnt 238 Hex.Cat = Eqcat.Hexca[ncat] 239 240 for i = 0; i < Compnt.Nout; i++ { 241 Elout := NewElout() 242 Elout.Cmp = Compnt 243 Elout.Ni = Compnt.Nin 244 Elout.Elins = Compnt.Elins 245 Elout.Id = Compnt.Ido[i] 246 247 Elin := NewElin() 248 Elin.Id = Compnt.Idi[i] 249 250 *Elo = append(*Elo, Elout) 251 *Eli = append(*Eli, Elout.Elins...) 252 Compnt.Elouts = append(Compnt.Elouts, Elout) 253 Compnt.Elins = append(Compnt.Elins, Elout.Elins...) 254 } 255 } else if c == BOILER_TYPE { 256 Boi = Eqsys.Boi[neqp] 257 Compnt.Eqp = Boi 258 Boi.Name = name 259 Boi.Cmp = Compnt 260 Boi.Cat = Eqcat.Boica[ncat] 261 262 Elout := NewElout() 263 Elout.Cmp = Compnt 264 Elout.Ni = Compnt.Nin 265 Elout.Elins = NewElinSlice(Elout.Ni) 266 267 *Elo = append(*Elo, Elout) 268 *Eli = append(*Eli, Elout.Elins...) 269 Compnt.Elouts = append(Compnt.Elouts, Elout) 270 Compnt.Elins = append(Compnt.Elins, Elout.Elins...) 271 } else if c == COLLECTOR_TYPE || c == ACOLLECTOR_TYPE { 272 Coll = Eqsys.Coll[neqp] 273 Compnt.Eqp = Coll 274 Coll.Name = name 275 Coll.Cmp = Compnt 276 Coll.Cat = Eqcat.Collca[ncat] 277 Coll.Ac = Compnt.Ac 278 279 if Coll.Cat.Type == COLLECTOR_PDT { 280 Elout := NewElout() 281 Elout.Cmp = Compnt 282 283 Elout.Ni = 1 284 Elout.Elins = NewElinSlice(Elout.Ni) 285 286 *Elo = append(*Elo, Elout) 287 *Eli = append(*Eli, Elout.Elins...) 288 Compnt.Elouts = append(Compnt.Elouts, Elout) 289 Compnt.Elins = append(Compnt.Elins, Elout.Elins...) 290 } else { 291 for i = 0; i < Compnt.Nout; i++ { 292 Elin := NewElin() 293 Elout := NewElout() 294 295 Elout.Cmp = Compnt 296 Elout.Id = ELIOType(idmrkc[i]) 297 Elin.Id = ELIOType(idmrkc[i]) 298 Elout.Ni = 1 299 Elout.Elins = []*ELIN{Elin} 300 301 *Elo = append(*Elo, Elout) 302 *Eli = append(*Eli, Elout.Elins...) 303 Compnt.Elouts = append(Compnt.Elouts, Elout) 304 Compnt.Elins = append(Compnt.Elins, Elout.Elins...) 305 } 306 } 307 } else if c == PV_TYPE { 308 PV = Eqsys.PVcmp[neqp] 309 Compnt.Eqp = PV 310 PV.Name = name 311 PV.Cmp = Compnt 312 PV.Cat = Eqcat.PVca[ncat] 313 PV.PVcap = Compnt.PVcap 314 PV.Area = Compnt.Area 315 } else if c == REFACOMP_TYPE { 316 Refa = Eqsys.Refa[neqp] 317 Compnt.Eqp = Refa 318 Refa.Name = name 319 Refa.Cmp = Compnt 320 Refa.Cat = Eqcat.Refaca[ncat] 321 322 Elout := NewElout() 323 Elout.Cmp = Compnt 324 Elout.Ni = Compnt.Nin 325 Elout.Elins = NewElinSlice(Elout.Ni) 326 327 *Elo = append(*Elo, Elout) 328 *Eli = append(*Eli, Elout.Elins...) 329 Compnt.Elouts = append(Compnt.Elouts, Elout) 330 Compnt.Elins = append(Compnt.Elins, Elout.Elins...) 331 } else if c == PUMP_TYPE { 332 Pump = Eqsys.Pump[neqp] 333 Compnt.Eqp = Pump 334 Pump.Name = name 335 Pump.Cmp = Compnt 336 Pump.Cat = Eqcat.Pumpca[ncat] 337 338 if Pump.Cat.pftype == PUMP_PF { 339 Elout := NewElout() 340 Elout.Cmp = Compnt 341 Elout.Elins = NewElinSlice(1) 342 Elout.Ni = 1 343 *Elo = append(*Elo, Elout) 344 *Eli = append(*Eli, Elout.Elins...) 345 Compnt.Elouts = append(Compnt.Elouts, Elout) 346 Compnt.Elins = append(Compnt.Elins, Elout.Elins...) 347 } else { 348 for i = 0; i < Compnt.Nout; i++ { 349 Elin := NewElin() 350 Elout := NewElout() 351 352 Elout.Cmp = Compnt 353 Elout.Id = ELIOType(idmrkc[i]) 354 Elin.Id = ELIOType(idmrkc[i]) 355 Elout.Elins = NewElinSlice(1) 356 Elout.Ni = 1 357 358 *Elo = append(*Elo, Elout) 359 *Eli = append(*Eli, Elout.Elins...) 360 Compnt.Elouts = append(Compnt.Elouts, Elout) 361 Compnt.Elins = append(Compnt.Elins, Elout.Elins...) 362 } 363 } 364 } else if c == PIPEDUCT_TYPE { 365 Pipe = Eqsys.Pipe[neqp] 366 Compnt.Eqp = Pipe 367 Pipe.Name = name 368 Pipe.Cmp = Compnt 369 Pipe.Cat = Eqcat.Pipeca[ncat] 370 371 if Pipe.Cat.Type == PIPE_PDT { 372 Elout := NewElout() 373 374 Elout.Cmp = Compnt 375 Elout.Elins = NewElinSlice(1) 376 Elout.Ni = 1 377 378 *Elo = append(*Elo, Elout) 379 *Eli = append(*Eli, Elout.Elins...) 380 Compnt.Elouts = append(Compnt.Elouts, Elout) 381 Compnt.Elins = append(Compnt.Elins, Elout.Elins...) 382 } else { 383 for i = 0; i < Compnt.Nout; i++ { 384 Elin := NewElin() 385 Elout := NewElout() 386 387 Elout.Cmp = Compnt 388 Elout.Id = ELIOType(idmrkc[i]) 389 Elin.Id = ELIOType(idmrkc[i]) 390 Elout.Elins = []*ELIN{Elin} 391 Elout.Ni = 1 392 393 *Elo = append(*Elo, Elout) 394 *Eli = append(*Eli, Elout.Elins...) 395 Compnt.Elouts = append(Compnt.Elouts, Elout) 396 Compnt.Elins = append(Compnt.Elins, Elout.Elins...) 397 } 398 } 399 } else if c == STANK_TYPE { 400 Stank = Eqsys.Stank[neqp] 401 Compnt.Eqp = Stank 402 Stank.Name = name 403 Stank.Cmp = Compnt 404 Stank.Cat = Eqcat.Stankca[ncat] 405 406 Stankmemloc("Stankmemloc", Stank) 407 408 Compnt.Nin = Stank.Nin 409 Compnt.Nout = Stank.Nin 410 Compnt.Idi = make([]ELIOType, Stank.Nin) 411 Compnt.Ido = make([]ELIOType, Stank.Nin) 412 413 // 入力は共通 414 Elins := NewElinSlice(Compnt.Nin) 415 for i := 0; i < Compnt.Nin; i++ { 416 Elins[i].Id = Stank.Pthcon[i] 417 Compnt.Idi[i] = Stank.Pthcon[i] 418 } 419 *Eli = append(*Eli, Elins...) 420 Compnt.Elins = append(Compnt.Elins, Elins...) 421 422 for i = 0; i < Compnt.Nout; i++ { 423 Elout := NewElout() 424 425 Elout.Cmp = Compnt 426 Elout.Ni = Compnt.Nin 427 Elout.Elins = Elins 428 Elout.Id = Stank.Pthcon[i] 429 Compnt.Ido[i] = Stank.Pthcon[i] 430 431 *Elo = append(*Elo, Elout) 432 Compnt.Elouts = append(Compnt.Elouts, Elout) 433 } 434 } else if c == FLIN_TYPE { 435 // 流入境界条件 436 Compnt.Eqp = Flin[flinIdx] 437 Flin[flinIdx].Cmp = Compnt 438 Flin[flinIdx].Name = name 439 440 flindat(Flin[flinIdx]) 441 442 elins := NewElinSlice(Compnt.Nout) 443 *Eli = append(*Eli, elins...) 444 445 for i = 0; i < Compnt.Nout; i++ { 446 Elout := NewElout() 447 Elout.Cmp = Compnt 448 Elout.Ni = Compnt.Nin 449 Elout.Elins = elins 450 //Elout.Elins = NewElinSlice(Elout.Ni) 451 Elout.Id = Compnt.Ido[i] 452 453 *Elo = append(*Elo, Elout) 454 Compnt.Elouts = append(Compnt.Elouts, Elout) 455 Compnt.Elins = append(Compnt.Elins, Elout.Elins...) 456 } 457 458 flinIdx++ 459 } else if c == HCLOAD_TYPE || 460 c == HCLOADW_TYPE || 461 c == RMAC_TYPE || 462 c == RMACD_TYPE { 463 // 仮想空調機 464 465 Compnt.Eqp = Hcload[hcloadIdx] 466 Hcload[hcloadIdx].Cmp = Compnt 467 Hcload[hcloadIdx].Name = name 468 469 // ルームエアコンの場合 470 if c == RMAC_TYPE { 471 Hcload[hcloadIdx].RMACFlg = 'Y' 472 473 // エアコンの機器スペックを読み込む 474 rmacdat(Hcload[hcloadIdx]) 475 } else if c == RMACD_TYPE { 476 Hcload[hcloadIdx].RMACFlg = 'y' 477 478 // エアコンの機器スペックを読み込む 479 rmacddat(Hcload[hcloadIdx]) 480 } 481 482 /*---- Roh Debug for a constant outlet humidity model of wet coil 2003/4/25 ----*/ 483 if Compnt.Ivparm != nil { 484 Hcload[hcloadIdx].RHout = *(Compnt.Ivparm) 485 } 486 487 if Compnt.Wetparm == "wet" { 488 Hcload[hcloadIdx].Wet = true // 湿りコイル(吹出相対湿度一定 489 } else { 490 Hcload[hcloadIdx].Wet = false // 吹出相対湿度は成り行き 491 } 492 493 // 空気のみの流入、流出 494 if c == HCLOAD_TYPE || c == RMAC_TYPE || c == RMACD_TYPE { 495 Hcload[hcloadIdx].Type = HCLoadType_D 496 Compnt.Nout = 2 497 Compnt.Nin = 2 498 } else { 499 // 空気+水の流入、流出 500 Hcload[hcloadIdx].Type = HCLoadType_W 501 Compnt.Nout = 3 502 Compnt.Nin = 3 503 } 504 505 // 空気の絶対湿度用経路コピーを行う 506 Compnt.Airpathcpy = true 507 for i := 0; i < Compnt.Nout; i++ { 508 Elout := NewElout() 509 510 Elout.Cmp = Compnt 511 Elout.Id = ELIOType(idmrkc[i]) 512 513 Elout.Ni = 1 514 //Elout.Ni = 2; 515 // 湿りコイル(吹出相対湿度一定)で出口絶対湿度の経路の場合 516 // 要素方程式の未知数は2つ(入口絶対湿度と出口温度) 517 if i == 1 && Hcload[hcloadIdx].Wet { 518 Elout.Ni = 2 519 } else if i == 2 && Hcload[hcloadIdx].Type == 'W' { 520 // 冷温水コイルで水側系統の場合 521 // 要素方程式の未知数は5個 522 // 水入口温度、空気入口温度、空気入口湿度 523 // 空気出口温度、空気出口湿度 524 Elout.Ni = 5 525 } 526 Elout.Elins = NewElinSlice(Elout.Ni) 527 528 for ii := 0; ii < Elout.Ni; ii++ { 529 Elout.Elins[ii].Id = Elout.Id 530 531 // 空気出口絶対湿度の計算の2つ目の変数は空気出口温度 532 if i == 1 && ii == 1 { 533 Elout.Elins[ii].Id = ELIO_ASTER 534 } 535 } 536 *Eli = append(*Eli, Elout.Elins...) 537 538 /***** printf("xxx Elmalloc xxx %s i=%d Elout.Ni=%d\n", 539 Hcload.name, i, Elout.Ni); *****/ 540 541 *Elo = append(*Elo, Elout) 542 543 Compnt.Elouts = append(Compnt.Elouts, Elout) 544 Compnt.Elins = append(Compnt.Elins, Elout.Elins...) 545 } 546 hcloadIdx++ 547 } else if c == VAV_TYPE || c == VWV_TYPE { 548 /*---- Satoh Debug VAV 2000/12/5 ----*/ 549 550 Compnt.Eqp = Eqsys.Vav[neqp] 551 Eqsys.Vav[neqp].Name = name 552 Eqsys.Vav[neqp].Cmp = Compnt 553 Eqsys.Vav[neqp].Cat = Eqcat.Vavca[ncat] 554 Compnt.Nin = 2 555 Compnt.Nout = 2 556 557 if Eqsys.Vav[neqp].Cat.Type == VAV_PDT { 558 Compnt.Airpathcpy = true 559 for i = 0; i < Compnt.Nout; i++ { 560 Elin := NewElin() 561 Elout := NewElout() 562 563 Elout.Cmp = Compnt 564 Elout.Id = ELIOType(idmrkc[i]) 565 Elin.Id = ELIOType(idmrkc[i]) 566 Elout.Elins = []*ELIN{Elin} 567 Elout.Ni = 1 568 569 *Elo = append(*Elo, Elout) 570 *Eli = append(*Eli, Elout.Elins...) 571 Compnt.Elouts = append(Compnt.Elouts, Elout) 572 Compnt.Elins = append(Compnt.Elins, Elout.Elins...) 573 } 574 } else { 575 Elin := NewElin() 576 Elout := NewElout() 577 Elout.Cmp = Compnt 578 Elout.Elins = []*ELIN{Elin} 579 Elout.Ni = 1 580 581 *Elo = append(*Elo, Elout) 582 *Eli = append(*Eli, Elout.Elins...) 583 Compnt.Elouts = append(Compnt.Elouts, Elout) 584 Compnt.Elins = append(Compnt.Elins, Elout.Elins...) 585 } 586 } else if c == STHEAT_TYPE { 587 // 電気蓄熱暖房器 588 589 Stheat = Eqsys.Stheat[neqp] 590 Compnt.Eqp = Stheat 591 Stheat.Name = name 592 Stheat.Cmp = Compnt 593 Stheat.Cat = Eqcat.Stheatca[ncat] 594 Compnt.Airpathcpy = true 595 Compnt.Nin = 2 596 Compnt.Nout = 2 597 598 for i = 0; i < Compnt.Nout; i++ { 599 Elin := NewElin() 600 Elout := NewElout() 601 602 Elout.Cmp = Compnt 603 Elout.Id = ELIOType(idmrkc[i]) 604 Elin.Id = ELIOType(idmrkc[i]) 605 Elout.Elins = []*ELIN{Elin} 606 Elout.Ni = 1 607 608 *Elo = append(*Elo, Elout) 609 *Eli = append(*Eli, Elout.Elins...) 610 Compnt.Elouts = append(Compnt.Elouts, Elout) 611 Compnt.Elins = append(Compnt.Elins, Elout.Elins...) 612 } 613 } else if c == DESI_TYPE { 614 // Satoh追加 デシカント槽 2013/10/23 615 616 Desi = Eqsys.Desi[neqp] 617 Compnt.Eqp = Desi 618 Desi.Name = name 619 Desi.Cmp = Compnt 620 Desi.Cat = Eqcat.Desica[ncat] 621 622 // 絶対湿度経路のコピー 623 Compnt.Airpathcpy = true 624 625 for i := 0; i < Compnt.Nout; i++ { 626 Elout := NewElout() 627 628 Elout.Cmp = Compnt 629 Elout.Id = ELIOType(idmrkc[i]) 630 Elout.Elins = NewElinSlice(2) 631 Elout.Elins[0].Id = ELIOType(idmrkc[i]) 632 633 // すべての出口状態計算のための変数は2つ(温度と湿度) 634 Elout.Ni = 2 635 636 *Elo = append(*Elo, Elout) 637 *Eli = append(*Eli, Elout.Elins...) 638 Compnt.Elouts = append(Compnt.Elouts, Elout) 639 Compnt.Elins = append(Compnt.Elins, Elout.Elins...) 640 } 641 } else if c == EVAC_TYPE { 642 // Satoh追加 気化冷却器 2013/10/26 643 644 Evac = Eqsys.Evac[neqp] 645 Compnt.Eqp = Evac 646 Evac.Name = name 647 Evac.Cmp = Compnt 648 Evac.Cat = Eqcat.Evacca[ncat] 649 650 // 機器の出入口数(Tdry, xdry, Twet, xwet) 651 Compnt.Nout = 4 652 Compnt.Nin = 4 653 654 // 絶対湿度経路のコピー 655 Compnt.Airpathcpy = true 656 657 // D:Tdry d:xdry V:Twet v:xwet 658 idd := [4]ELIOType{ 659 ELIO_D, ELIO_d, ELIO_V, ELIO_v, 660 } 661 for i = 0; i < Compnt.Nout; i++ { 662 Elout := NewElout() 663 Elout.Cmp = Compnt 664 Elout.Id = idd[i] 665 Elout.Elins = NewElinSlice(4) 666 // すべての出口状態計算のための変数は4つ(Wet、Dryの温度と湿度) 667 Elout.Ni = 4 668 // 出口状態計算のための変数分だけメモリを確保する 669 Elout.Elins[0].Id = idd[i] 670 671 *Elo = append(*Elo, Elout) 672 *Eli = append(*Eli, Elout.Elins...) 673 Compnt.Elouts = append(Compnt.Elouts, Elout) 674 Compnt.Elins = append(Compnt.Elins, Elout.Elins...) 675 } 676 } else if c == VALV_TYPE || c == TVALV_TYPE { 677 Valv := Eqsys.Valv[Nvalv] 678 Compnt.Eqp = Valv 679 Valv.Name = name 680 Valv.Cmp = Compnt 681 682 if Valv.Cmp.Valvcmp != nil { 683 Valv.Cmb = Valv.Cmp.Valvcmp 684 } 685 686 Nvalv++ 687 } else if c == OMVAV_TYPE { 688 // Satoh OMVAV 2010/12/16 689 690 OMvav := Eqsys.OMvav[NOMvav] 691 Compnt.Eqp = OMvav 692 OMvav.Name = name 693 OMvav.Cmp = Compnt 694 OMvav.Cat = Eqcat.OMvavca[ncat] 695 696 if OMvav.Cmp.Omparm != "" { 697 OMvavControl(OMvav, cmp) 698 } 699 700 NOMvav++ 701 } else if c == QMEAS_TYPE { 702 Qmeas := Eqsys.Qmeas[NQmeas] 703 Compnt.Eqp = Qmeas 704 Qmeas.Name = name 705 Qmeas.Cmp = Compnt 706 707 NQmeas++ 708 } else if c == THEX_TYPE { 709 Thex = Eqsys.Thex[neqp] 710 Compnt.Eqp = Thex 711 Thex.Name = name 712 Thex.Cmp = Compnt 713 Thex.Cat = Eqcat.Thexca[ncat] 714 Compnt.Airpathcpy = true 715 Compnt.Nout = 4 716 717 for i = 0; i < Compnt.Nout; i++ { 718 Elout := NewElout() 719 720 Elout.Cmp = Compnt 721 Elout.Id = Compnt.Ido[i] 722 //Elin.id = Compnt.idi[i] ; 723 724 if Thex.Cat.eh > 0.0 { 725 Elout.Ni = 5 726 idxe = []ELIOType{ 727 //"eE*Oo" 728 ELIO_e, ELIO_E, ELIO_ASTER, ELIO_O, ELIO_o, 729 } 730 idxo = []ELIOType{ 731 //"oO*Ee" 732 ELIO_o, ELIO_O, ELIO_ASTER, ELIO_E, ELIO_e, 733 } 734 } else { 735 Elout.Ni = 1 736 idxe = []ELIOType{ELIO_e} 737 idxo = []ELIOType{ELIO_o} 738 } 739 740 //Elout.fluid = AIR_FLD ; 741 742 if i == 0 || i == 2 { // 温度の経路(要素方程式の変数は2つ) 743 Elout.Ni = 2 744 } 745 746 Elout.Elins = NewElinSlice(Elout.Ni) 747 748 for ii = 0; ii < Elout.Ni; ii++ { 749 if i == 0 { 750 Elout.Elins[ii].Id = ELIOType(idTe[ii]) 751 } else if i == 2 { 752 Elout.Elins[ii].Id = ELIOType(idTo[ii]) 753 } else if i == 1 { 754 Elout.Elins[ii].Id = idxe[ii] 755 } else if i == 3 { 756 Elout.Elins[ii].Id = idxo[ii] 757 } 758 } 759 760 *Elo = append(*Elo, Elout) 761 *Eli = append(*Eli, Elout.Elins...) 762 Compnt.Elouts = append(Compnt.Elouts, Elout) 763 Compnt.Elins = append(Compnt.Elins, Elout.Elins...) 764 } 765 } else { 766 Errprint(1, "Elmalloc ", string(c)) 767 } 768 769 for i = 0; i < Compnt.Nout; i++ { 770 elop := Compnt.Elouts[i] 771 elop.Coeffin = make([]float64, elop.Ni) 772 } 773 } 774 775 // 上流の機器の出口の参照をクリアしておく 776 for i := range *Eli { 777 Elin := (*Eli)[i] 778 Elin.Upo = nil 779 Elin.Upv = nil 780 } 781 }