github.com/archlabjp/eeslism-go@v0.0.0-20231109122333-4bb7bfcdf292/eeslism/blroomvar.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  /*  bl_roomvar.c  */
    17  
    18  package eeslism
    19  
    20  /* ------------------------------------- */
    21  
    22  /* 室間換気、放射パネルとシステム入力要素への割り付け */
    23  
    24  func Roomelm(Room []*ROOM, _Rdpnl []*RDPNL) {
    25  
    26  	for n := range Room {
    27  
    28  		room := Room[n]
    29  		compnt := room.cmp
    30  		var elin_idx = 0
    31  
    32  		for i := 0; i < room.Nachr; i++ {
    33  			var elin *ELIN = compnt.Elins[elin_idx]
    34  			var elinx *ELIN = compnt.Elins[elin_idx+compnt.Elouts[0].Ni]
    35  			var achr *ACHIR = room.achr[i]
    36  
    37  			cmp := achr.room.cmp
    38  
    39  			elin.Upo, elin.Upv = cmp.Elouts[0], cmp.Elouts[0]
    40  			elinx.Upo, elinx.Upv = cmp.Elouts[1], cmp.Elouts[1]
    41  
    42  			elin_idx++
    43  		}
    44  
    45  		for i := 0; i < room.Ntr; i++ {
    46  
    47  			var elin *ELIN = compnt.Elins[elin_idx]
    48  			trnx := room.trnx[i]
    49  
    50  			cmp := trnx.nextroom.cmp
    51  			elin.Upo, elin.Upv = cmp.Elouts[0], cmp.Elouts[0]
    52  
    53  			elin_idx++
    54  		}
    55  
    56  		for i := 0; i < room.Nrp; i++ {
    57  			var elin *ELIN = compnt.Elins[elin_idx]
    58  			rmpnl := room.rmpnl[i]
    59  
    60  			elip := rmpnl.pnl.cmp.Elins[0]
    61  
    62  			elin.Upo = elip.Upo
    63  
    64  			elin_idx++
    65  		}
    66  	}
    67  
    68  	for n := range _Rdpnl {
    69  		Rdpnl := _Rdpnl[n]
    70  		elin_idx := 1
    71  
    72  		for m := 0; m < Rdpnl.MC; m++ {
    73  			room := Rdpnl.rm[m]
    74  			elin := Rdpnl.cmp.Elins[elin_idx]
    75  			elin.Upo, elin.Upv = room.cmp.Elouts[0], room.cmp.Elouts[0]
    76  
    77  			for i := 0; i < Rdpnl.Ntrm[m]; i++ {
    78  				trnx := room.trnx[i]
    79  				elin := Rdpnl.cmp.Elins[elin_idx]
    80  
    81  				cmp := trnx.nextroom.cmp
    82  				elin.Upo, elin.Upv = cmp.Elouts[0], cmp.Elouts[0]
    83  
    84  				elin_idx++
    85  			}
    86  
    87  		}
    88  	}
    89  }
    90  
    91  /* -------------------------------  */
    92  
    93  /* 室、放射パネルのシステム方程式作成 */
    94  
    95  func Roomvar(_Room []*ROOM, _Rdpnl []*RDPNL) {
    96  	for i := range _Room {
    97  		Room := _Room[i]
    98  
    99  		compnt := Room.cmp
   100  		elout := compnt.Elouts[0]
   101  
   102  		elout.Coeffo = Room.RMt
   103  		elout.Co = Room.RMC
   104  
   105  		// 室間相互換気量
   106  		for j := 0; j < Room.Nachr; j++ {
   107  			Gvr := Ca * Room.achr[j].Gvr
   108  			elout.Coeffin[j] = -Gvr
   109  			elout.Coeffo += Gvr
   110  		}
   111  
   112  		// ARN
   113  		for j := 0; j < Room.Ntr; j++ {
   114  			elout.Coeffin[j+Room.Nachr] = -Room.ARN[j]
   115  		}
   116  
   117  		// RMP
   118  		for j := 0; j < Room.Nrp; j++ {
   119  			elout.Coeffin[j+Room.Nachr+Room.Ntr] = -Room.RMP[j]
   120  		}
   121  
   122  		// 流量
   123  		for j := 0; j < Room.Nasup; j++ {
   124  			G := Ca * compnt.Elins[j+Room.Nachr+Room.Ntr+Room.Nrp].Lpath.G
   125  			elout.Coeffin[j+Room.Nachr+Room.Ntr+Room.Nrp] = -G
   126  			elout.Coeffo += G
   127  		}
   128  
   129  		elout = compnt.Elouts[1]
   130  		elout.Coeffo = Room.RMx
   131  		elout.Co = Room.RMXC
   132  
   133  		// 室間相互換気量
   134  		for j := 0; j < Room.Nachr; j++ {
   135  			Gvr := Room.achr[j].Gvr
   136  			elout.Coeffin[j] = -Gvr
   137  			elout.Coeffo += Gvr
   138  		}
   139  
   140  		// 流量
   141  		for j := 0; j < Room.Nasup; j++ {
   142  			G := compnt.Elins[j+Room.Nachr+Room.Ntr+Room.Nrp+Room.Nachr].Lpath.G
   143  			elout.Coeffin[j+Room.Nachr] = -G
   144  			elout.Coeffo += G
   145  		}
   146  	}
   147  
   148  	for i := range _Rdpnl {
   149  		Rdpnl := _Rdpnl[i]
   150  
   151  		compnt := Rdpnl.cmp
   152  		G := compnt.Elouts[0].Lpath.G
   153  		cG := Spcheat(compnt.Elouts[0].Fluid) * G
   154  		compnt.Elouts[0].Coeffo = cG
   155  		compnt.Elouts[0].Co = Rdpnl.EPC
   156  
   157  		cfin := &compnt.Elouts[0].Coeffin[0]
   158  		if Rdpnl.sd[0].mw.wall.WallType == WallType_P {
   159  			// 通常の床暖房パネル
   160  			*cfin = Rdpnl.Epw - cG
   161  		} else {
   162  			// 屋根一体型空気集熱器
   163  			*cfin = -Rdpnl.Epw
   164  		}
   165  
   166  		off := 1
   167  		for m := 0; m < Rdpnl.MC; m++ {
   168  			cfin := &compnt.Elouts[0].Coeffin[off]
   169  			off++
   170  
   171  			*cfin = -Rdpnl.EPt[m]
   172  			for j := 0; j < Rdpnl.Ntrm[m]; j++ {
   173  				compnt.Elouts[0].Coeffin[off] = -Rdpnl.EPR[m][j]
   174  				off++
   175  			}
   176  
   177  			for j := 0; j < Rdpnl.Nrp[m]; j++ {
   178  				compnt.Elouts[0].Coeffin[off] = -Rdpnl.EPW[m][j]
   179  				off++
   180  			}
   181  		}
   182  
   183  		/* 空気系統湿度計算用ダミー */
   184  		elout := compnt.Elouts[1]
   185  		elout.Coeffo = G
   186  		elout.Co = 0.0
   187  		elout.Coeffin[0] = -G
   188  	}
   189  }