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  }