wheel3.py 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188
  1. import numpy as np
  2. try:
  3. import pymc as pm
  4. except:
  5. pass
  6. from ._base_components import BaseComponents
  7. from ..tools.enthalpy import (
  8. get_Dew_from_HumRatio,
  9. get_HumRatio_from_Tdb_and_RH,
  10. get_RH_from_Tdb_and_Hr,
  11. )
  12. class WheelS3(BaseComponents):
  13. def __init__(self, name):
  14. super().__init__(name)
  15. @classmethod
  16. def model(
  17. cls,
  18. TinP,HinP,FP,
  19. TinR,HinR,FR,
  20. TinC,HinC,FC,
  21. engine : str,
  22. param : dict,
  23. ):
  24. FUNC = cls.get_func_by_engine(engine)
  25. EXP = FUNC['EXP']
  26. beta_P1 = param['beta_P1']
  27. beta_P2 = param['beta_P2']
  28. beta_P3 = param['beta_P3']
  29. beta_P4 = param['beta_P4']
  30. beta_P5 = param['beta_P5']
  31. beta_P6 = param['beta_P6']
  32. beta_P7 = param['beta_P7']
  33. beta_P8 = param['beta_P8']
  34. beta_C1 = param['beta_C1']
  35. beta_C2 = param['beta_C2']
  36. beta_C3 = param['beta_C3']
  37. beta_C4 = param['beta_C4']
  38. RinP = get_RH_from_Tdb_and_Hr(TinP,HinP,engine)
  39. # RinC = get_RH_from_Tdb_and_Hr(TinC,HinC,engine)
  40. # 处理侧
  41. HdiffP = (
  42. beta_P1 * RinP ** beta_P4
  43. * HinP
  44. * (TinR + beta_P6 * TinC + beta_P7 * TinP)
  45. * EXP(-beta_P5 * FP)
  46. + beta_P8 * FR
  47. + beta_P2
  48. ) / 1000
  49. WdiffP = HdiffP * FP
  50. HoutP = HinP - HdiffP
  51. DoutP = get_Dew_from_HumRatio(HoutP,engine)
  52. Q_lat_P = WdiffP * cls.CONSTANT['h_ads']
  53. Q_sen_P = beta_P3 * (TinR - TinP) * FP
  54. TdiffP = (Q_lat_P + Q_sen_P) / (FP * cls.CONSTANT['c_p_air'])
  55. ToutP = TinP + TdiffP
  56. # 冷却侧
  57. TdiffC = beta_C1 * EXP(-beta_C2 * EXP(-beta_C3 * (TinR - TinC))) * EXP(-beta_C4 * FC)
  58. ToutC = TinC + TdiffC
  59. HdiffC = 0
  60. WdiffC = HdiffC * FC
  61. HoutC = HinC - HdiffC
  62. DoutC = get_Dew_from_HumRatio(HoutC,engine)
  63. Q_total_C = TdiffC * FC * cls.CONSTANT['c_p_air']
  64. # 再生侧
  65. WdiffR = WdiffP + WdiffC
  66. HoutR = (HinR * FR + WdiffR) / FR
  67. DoutR = get_Dew_from_HumRatio(HoutR,engine)
  68. Q_total_R = Q_lat_P + Q_sen_P + Q_total_C
  69. TdiffR = Q_total_R / (FR * cls.CONSTANT['c_p_air'])
  70. ToutR = TinR - TdiffR
  71. return {
  72. 'ToutP':ToutP,'HoutP':HoutP,'DoutP':DoutP,'FP':FP,
  73. 'ToutR':ToutR,'HoutR':HoutR,'DoutR':DoutR,'FR':FR,
  74. 'ToutC':ToutC,'HoutC':HoutC,'DoutC':DoutC,'FC':FC,
  75. }
  76. def prior(self):
  77. param = {
  78. 'beta_P1': pm.TruncatedNormal(f'{self.name}_beta_P1',mu=5,sigma=10,initval=5,lower=0),
  79. 'beta_P2': pm.Normal(f'{self.name}_beta_P2',sigma=1,initval=0),
  80. 'beta_P3': pm.TruncatedNormal(f'{self.name}_beta_P3',mu=1,sigma=2,initval=1.5,lower=0),
  81. 'beta_P4': pm.HalfNormal(f'{self.name}_beta_P4',sigma=1,initval=0.1),
  82. 'beta_P5': pm.TruncatedNormal(f'{self.name}_beta_P5',mu=5,sigma=2,initval=5,lower=0),
  83. 'beta_P6': pm.Normal(f'{self.name}_beta_P6',mu=0,sigma=1,initval=0),
  84. 'beta_P7': pm.Normal(f'{self.name}_beta_P7',mu=0,sigma=1,initval=0),
  85. 'beta_P8': pm.Normal(f'{self.name}_beta_P8',mu=1,sigma=10,initval=1),
  86. 'beta_C1': pm.TruncatedNormal(f'{self.name}_beta_C1',mu=60,sigma=10,initval=60,lower=10),
  87. 'beta_C2': pm.TruncatedNormal(f'{self.name}_beta_C2',mu=30,sigma=10,initval=30,lower=1),
  88. 'beta_C3': pm.TruncatedNormal(f'{self.name}_beta_C3',mu=0.05,sigma=0.1,initval=0.05,lower=0),
  89. 'beta_C4': pm.TruncatedNormal(f'{self.name}_beta_C4',mu=1,sigma=1,initval=1,lower=0),
  90. }
  91. return param
  92. class WheelS3V3(BaseComponents):
  93. def __init__(self, name):
  94. super().__init__(name)
  95. @classmethod
  96. def model(
  97. cls,
  98. TinP,HinP,FP,
  99. TinR,HinR,FR,
  100. TinC,HinC,FC,
  101. engine : str,
  102. param : dict,
  103. ):
  104. FUNC = cls.get_func_by_engine(engine)
  105. EXP = FUNC['EXP']
  106. beta_P1 = param['beta_P1']
  107. beta_P2 = param['beta_P2']
  108. beta_P3 = param['beta_P3']
  109. beta_P4 = param['beta_P4']
  110. beta_P5 = param['beta_P5']
  111. beta_P6 = param['beta_P6']
  112. beta_P7 = param['beta_P7']
  113. beta_C1 = param['beta_C1']
  114. beta_C2 = param['beta_C2']
  115. beta_C3 = param['beta_C3']
  116. RinP = get_RH_from_Tdb_and_Hr(TinP,HinP,engine)
  117. RinC = get_RH_from_Tdb_and_Hr(TinC,HinC,engine)
  118. # 处理侧
  119. HdiffP = (
  120. beta_P1 * RinP ** beta_P4
  121. * HinP
  122. * (TinR + beta_P6 * TinC + beta_P7 * TinP)
  123. * EXP(-beta_P5 * FP)
  124. + beta_P2
  125. ) / 1000
  126. WdiffP = HdiffP * FP
  127. HoutP = HinP - HdiffP
  128. DoutP = get_Dew_from_HumRatio(HoutP,engine)
  129. Q_lat_P = WdiffP * cls.CONSTANT['h_ads']
  130. Q_sen_P = beta_P3 * (TinR - TinP) * FP
  131. TdiffP = (Q_lat_P + Q_sen_P) / (FP * cls.CONSTANT['c_p_air'])
  132. ToutP = TinP + TdiffP
  133. # 冷却侧
  134. TdiffC = beta_C1 * RinC ** beta_C2 * TinR + beta_C3
  135. ToutC = TinC + TdiffC
  136. HdiffC = 0
  137. WdiffC = HdiffC * FC
  138. HoutC = HinC - HdiffC
  139. DoutC = get_Dew_from_HumRatio(HoutC,engine)
  140. Q_total_C = TdiffC * FC * cls.CONSTANT['c_p_air']
  141. # 再生侧
  142. WdiffR = WdiffP + WdiffC
  143. HoutR = (HinR * FR + WdiffR) / FR
  144. DoutR = get_Dew_from_HumRatio(HoutR,engine)
  145. Q_total_R = Q_lat_P + Q_sen_P + Q_total_C
  146. TdiffR = Q_total_R / (FR * cls.CONSTANT['c_p_air'])
  147. ToutR = TinR - TdiffR
  148. return {
  149. 'ToutP':ToutP,'HoutP':HoutP,'DoutP':DoutP,'FP':FP,
  150. 'ToutR':ToutR,'HoutR':HoutR,'DoutR':DoutR,'FR':FR,
  151. 'ToutC':ToutC,'HoutC':HoutC,'DoutC':DoutC,'FC':FC,
  152. }
  153. def prior(self):
  154. param = {
  155. 'beta_P1': pm.TruncatedNormal(f'{self.name}_beta_P1',mu=5,sigma=10,initval=5,lower=0),
  156. 'beta_P2': pm.Normal(f'{self.name}_beta_P2',sigma=1,initval=0),
  157. 'beta_P3': pm.TruncatedNormal(f'{self.name}_beta_P3',mu=1,sigma=2,initval=1.5,lower=0),
  158. 'beta_P4': pm.HalfNormal(f'{self.name}_beta_P4',sigma=1,initval=0.1),
  159. 'beta_P5': pm.TruncatedNormal(f'{self.name}_beta_P5',mu=5,sigma=2,initval=5,lower=0),
  160. 'beta_P6': pm.Normal(f'{self.name}_beta_P6',mu=0,sigma=1,initval=0),
  161. 'beta_P7': pm.Normal(f'{self.name}_beta_P7',mu=0,sigma=1,initval=0),
  162. 'beta_C1': pm.TruncatedNormal(f'{self.name}_beta_C1',mu=0.5,sigma=1,initval=0.5,lower=0),
  163. 'beta_C2': pm.TruncatedNormal(f'{self.name}_beta_C2',mu=0.3,sigma=1,initval=0.3,lower=0),
  164. 'beta_C3': pm.Normal(f'{self.name}_beta_C3',mu=0,sigma=10,initval=0),
  165. }
  166. return param