coil_steam.py 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. import numpy as np
  2. try:
  3. import pymc as pm
  4. except:
  5. pass
  6. from ._base_components import BaseComponents
  7. class SteamCoilFs(BaseComponents):
  8. def __init__(self, name):
  9. super().__init__(name)
  10. @classmethod
  11. def model(
  12. cls,
  13. TinA,ToutA,FA,
  14. param,
  15. engine
  16. ):
  17. b1 = param['b1']
  18. b2 = param['b2']
  19. b3 = param['b3']
  20. Fs = b1 * (ToutA - TinA) * FA + b2 * TinA + b3
  21. return {'Fs':Fs}
  22. def prior(self):
  23. param = {
  24. 'b1': pm.HalfNormal(f'{self.name}_b1',sigma=10),
  25. 'b2': pm.Normal(f'{self.name}_b2',sigma=10),
  26. 'b3': pm.Normal(f'{self.name}_b3',sigma=10),
  27. }
  28. return param
  29. class SteamCoilFs2(BaseComponents):
  30. def __init__(self, name):
  31. super().__init__(name)
  32. @classmethod
  33. def model(cls,TinA,ToutA,FA,param,engine):
  34. b1 = param['b1']
  35. b2 = param['b2']
  36. FP = np.exp(b1 * (ToutA - TinA)*FA + b2)
  37. FUNC = cls.get_func_by_engine(engine)
  38. WHERE = FUNC['WHERE']
  39. LT = FUNC['LT']
  40. param_change_point = param['change_point']
  41. param_b1 = param['a1']
  42. param_b2 = param['a2']
  43. param_b3 = param['a3']
  44. param_Ps_change_point = param_b1 + param_b2 * param_change_point
  45. Fs = WHERE(
  46. LT(FP,param_Ps_change_point * param_change_point),
  47. get_root(param_b1,param_b2,FP),
  48. get_root(param_b1+(param_b2-param_b3)*param_change_point,param_b3,FP)
  49. )
  50. return {'FP':FP,'Fs':Fs}
  51. def prior(self):
  52. param = {
  53. 'b1' : pm.Normal(f'{self.name}_b1',mu=0.08,sigma=0.1,initval=0.08),
  54. 'b2' : pm.Normal(f'{self.name}_b2',mu=3.65,sigma=0.02,initval=3.65),
  55. 'change_point': pm.Normal(f'{self.name}_change_point',mu=104,sigma=1,initval=104),
  56. 'a1' : pm.Normal(f'{self.name}_a1',mu=17.5,sigma=1,initval=17.5),
  57. 'a2' : pm.Normal(f'{self.name}_a2',mu=0.2,sigma=0.1,initval=0.2),
  58. 'a3' : pm.Normal(f'{self.name}_a3',mu=1.5,sigma=0.1,initval=1.5),
  59. }
  60. return param
  61. class SteamCoil(BaseComponents):
  62. def __init__(self, name):
  63. super().__init__(name)
  64. @classmethod
  65. def model(
  66. cls,
  67. TinA,ToutA,FA,
  68. param,
  69. engine
  70. ):
  71. Fs = (ToutA - TinA) * FA
  72. return {'Fs':Fs}
  73. def prior(self):
  74. param = {}
  75. return param
  76. def get_root(b0,b1,FP):
  77. return (np.sqrt(b0**2+4*b1*FP)-b0)/(2*b1)