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 }