github.com/archlabjp/eeslism-go@v0.0.0-20231109122333-4bb7bfcdf292/eeslism/eepthprt.go (about)

     1  package eeslism
     2  
     3  import (
     4  	"fmt"
     5  	"io"
     6  )
     7  
     8  var __Pathprint_id int
     9  
    10  // 経路に沿ったシステム要素の出力
    11  func Pathprint(fo io.Writer, title string, mon int, day int, time float64, _Mpath []*MPATH) {
    12  	// ** ヘッダーの出力 **
    13  	if __Pathprint_id == 0 {
    14  		__Pathprint_id++
    15  		fmt.Fprintf(fo, "%s ;\n", title)
    16  		fmt.Fprintf(fo, "%d\n", len(_Mpath))
    17  
    18  		// 経路のループ
    19  		for _, Mpath := range _Mpath {
    20  			// 経路名、種別、流体種別、末端経路数を出力
    21  			fmt.Fprintf(fo, "%s %c %c %d\n", Mpath.Name, Mpath.Type, Mpath.Fluid, len(Mpath.Plist))
    22  
    23  			if Mpath.Plist[0].Pelm[0].Ci == ELIO_IN {
    24  				fmt.Fprint(fo, " >")
    25  			}
    26  
    27  			// 末端経路のループ
    28  			for _, Pli := range Mpath.Plist {
    29  				// 末端経路の名前を出力
    30  				if Pli.Name != "" {
    31  					fmt.Fprintf(fo, "%s", Pli.Name)
    32  				} else {
    33  					fmt.Fprint(fo, "?")
    34  				}
    35  
    36  				// 末端経路の種別と機器要素数を出力
    37  				// T: ,C: , B:
    38  				// b:合流, c:分岐, i:流入境界, o: 流出境界
    39  				fmt.Fprintf(fo, " %c %d\n", rune(Pli.Type), len(Pli.Pelm))
    40  
    41  				// 専用要素が '>' の場合はコンポーネント名を出力
    42  				if Pli.Pelm[0].Ci == ELIO_IN {
    43  					fmt.Fprintf(fo, " %s", Pli.Pelm[0].Cmp.Name)
    44  				}
    45  
    46  				// 各要素のコンポーネント名を出力
    47  				for _, Pelm := range Pli.Pelm {
    48  					fmt.Fprintf(fo, " %s", Pelm.Cmp.Name)
    49  				}
    50  				fmt.Fprint(fo, "\n")
    51  			}
    52  		}
    53  	}
    54  
    55  	// ** 状態表示 **
    56  
    57  	fmt.Fprintf(fo, "%02d %02d %5.2f\n", mon, day, time)
    58  
    59  	// 経路のループ
    60  	for _, Mpath := range _Mpath {
    61  		// 連立方程式の答えの出力形式
    62  		fm := get_format_by_fluidtype(Mpath.Fluid)
    63  
    64  		// 経路の制御情報Control
    65  		fmt.Fprintf(fo, "[%c]", get_control_sw_rune(Mpath.Control))
    66  
    67  		// 末端経路のループ
    68  		for _, Pli := range Mpath.Plist {
    69  
    70  			// 末端経路の流量Gと制御情報Control
    71  			fmt.Fprintf(fo, " %5.3g %c: ", Pli.G, get_control_sw_rune(Pli.Control))
    72  
    73  			if Pli.Pelm[0].Ci == ELIO_IN {
    74  				fmt.Fprintf(fo, fm, Pli.Pelm[0].In.Sysvin)
    75  			}
    76  
    77  			// 末端経路内の機器のループ
    78  			for _, Pelm := range Pli.Pelm {
    79  				if Pelm.Out != nil {
    80  					// 連立方程式の答え
    81  					fmt.Fprintf(fo, fm, Pelm.Out.Sysv)
    82  
    83  					// 機器出口の制御情報
    84  					fmt.Fprintf(fo, " %c ", get_control_sw_rune(Pelm.Out.Control))
    85  				}
    86  			}
    87  			fmt.Fprint(fo, "\n")
    88  		}
    89  	}
    90  	fmt.Fprintf(fo, " ;\n")
    91  }
    92  
    93  func get_format_by_fluidtype(fluid_type FliudType) string {
    94  	if fluid_type == AIRx_FLD {
    95  		return "%6.4f"
    96  	}
    97  	return "%4.1f"
    98  }
    99  
   100  // 制御情報を印字用文字列に変換する
   101  // 不適切な状態であった場合は '?' を返す
   102  func get_control_sw_rune(control ControlSWType) rune {
   103  	var c = rune(control)
   104  	if c == 0 {
   105  		c = '?'
   106  	}
   107  	return c
   108  }