processpi 0.2.0.4__tar.gz → 0.2.2__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (600) hide show
  1. {processpi-0.2.0.4 → processpi-0.2.2}/PKG-INFO +4 -3
  2. {processpi-0.2.0.4 → processpi-0.2.2}/README.md +3 -2
  3. processpi-0.2.2/processpi/__main__.py +5 -0
  4. {processpi-0.2.0.4 → processpi-0.2.2}/processpi/calculations/engine.py +7 -0
  5. processpi-0.2.2/processpi/calculations/heat_transfer/__init__.py +92 -0
  6. {processpi-0.2.0.4 → processpi-0.2.2}/processpi/calculations/heat_transfer/conduction_heat_loss.py +1 -1
  7. {processpi-0.2.0.4 → processpi-0.2.2}/processpi/calculations/heat_transfer/convection_heat_loss.py +1 -1
  8. {processpi-0.2.0.4 → processpi-0.2.2}/processpi/calculations/heat_transfer/crossflow_tube.py +2 -0
  9. processpi-0.2.2/processpi/calculations/heat_transfer/heat_exchanger.py +167 -0
  10. {processpi-0.2.0.4 → processpi-0.2.2}/processpi/calculations/heat_transfer/heat_exchanger_area.py +3 -1
  11. processpi-0.2.2/processpi/calculations/heat_transfer/hx_kern.py +285 -0
  12. {processpi-0.2.0.4 → processpi-0.2.2}/processpi/calculations/heat_transfer/lmtd.py +15 -2
  13. {processpi-0.2.0.4 → processpi-0.2.2}/processpi/calculations/mass_transfer/distillation_stage_count.py +22 -8
  14. {processpi-0.2.0.4 → processpi-0.2.2}/processpi/calculations/reaction_engineering/catalyst_activity.py +1 -1
  15. {processpi-0.2.0.4 → processpi-0.2.2}/processpi/calculations/reaction_engineering/reaction_rate.py +2 -2
  16. processpi-0.2.2/processpi/cli.py +13 -0
  17. processpi-0.2.2/processpi/components/_112trichloroethane.py +57 -0
  18. processpi-0.2.2/processpi/components/_11dibromoethane.py +57 -0
  19. processpi-0.2.2/processpi/components/_11dichloroethane.py +57 -0
  20. processpi-0.2.2/processpi/components/_11dichloropropane.py +57 -0
  21. processpi-0.2.2/processpi/components/_11difluoroethane.py +95 -0
  22. processpi-0.2.2/processpi/components/_11dimethoxyethane.py +57 -0
  23. processpi-0.2.2/processpi/components/_11dimethylcyclohexane.py +57 -0
  24. processpi-0.2.2/processpi/components/_123trimethylbenzene.py +57 -0
  25. processpi-0.2.2/processpi/components/_124tetrahydronaphthalene.py +57 -0
  26. processpi-0.2.2/processpi/components/_124trimethylbenzene.py +57 -0
  27. processpi-0.2.2/processpi/components/_12butadiene.py +57 -0
  28. processpi-0.2.2/processpi/components/_12butanediol.py +74 -0
  29. processpi-0.2.2/processpi/components/_12dibromoethane.py +57 -0
  30. processpi-0.2.2/processpi/components/_12dichloroethane.py +57 -0
  31. processpi-0.2.2/processpi/components/_12dichloropropane.py +57 -0
  32. processpi-0.2.2/processpi/components/_12difluoroethane.py +57 -0
  33. processpi-0.2.2/processpi/components/_12dimethoxypropane.py +57 -0
  34. processpi-0.2.2/processpi/components/_12propyleneglycol.py +57 -0
  35. processpi-0.2.2/processpi/components/_135trinitrobenzene.py +57 -0
  36. processpi-0.2.2/processpi/components/_13butadiene.py +57 -0
  37. processpi-0.2.2/processpi/components/_13butanediol.py +74 -0
  38. processpi-0.2.2/processpi/components/_14dioxane.py +57 -0
  39. processpi-0.2.2/processpi/components/_1butanol.py +57 -0
  40. processpi-0.2.2/processpi/components/_1butene.py +57 -0
  41. processpi-0.2.2/processpi/components/_1butyne.py +57 -0
  42. processpi-0.2.2/processpi/components/_1chloropropane.py +57 -0
  43. processpi-0.2.2/processpi/components/_1decanol.py +57 -0
  44. processpi-0.2.2/processpi/components/_1decene.py +57 -0
  45. processpi-0.2.2/processpi/components/_1decyne.py +57 -0
  46. processpi-0.2.2/processpi/components/_1heptanol.py +57 -0
  47. processpi-0.2.2/processpi/components/_1heptene.py +57 -0
  48. processpi-0.2.2/processpi/components/_1heptyne.py +57 -0
  49. processpi-0.2.2/processpi/components/_1hexanol.py +57 -0
  50. processpi-0.2.2/processpi/components/_1hexene.py +57 -0
  51. processpi-0.2.2/processpi/components/_1hexyne.py +57 -0
  52. processpi-0.2.2/processpi/components/_1methylcyclohexanol.py +57 -0
  53. processpi-0.2.2/processpi/components/_1methylcyclopentene.py +57 -0
  54. processpi-0.2.2/processpi/components/_1nonanol.py +57 -0
  55. processpi-0.2.2/processpi/components/_1nonene.py +57 -0
  56. processpi-0.2.2/processpi/components/_1nonyne.py +57 -0
  57. processpi-0.2.2/processpi/components/_1octanol.py +57 -0
  58. processpi-0.2.2/processpi/components/_1octene.py +57 -0
  59. processpi-0.2.2/processpi/components/_1octyne.py +57 -0
  60. processpi-0.2.2/processpi/components/_1pentanol.py +57 -0
  61. processpi-0.2.2/processpi/components/_1pentene.py +57 -0
  62. processpi-0.2.2/processpi/components/_1pentyne.py +57 -0
  63. processpi-0.2.2/processpi/components/_1propanol.py +65 -0
  64. processpi-0.2.2/processpi/components/_1undecanol.py +57 -0
  65. processpi-0.2.2/processpi/components/_2233tetramethylbutane.py +57 -0
  66. processpi-0.2.2/processpi/components/_224trimethylpentane.py +57 -0
  67. processpi-0.2.2/processpi/components/_233trimethylpentane.py +57 -0
  68. processpi-0.2.2/processpi/components/_23dimethylbutane.py +57 -0
  69. processpi-0.2.2/processpi/components/_23dimethylpentane.py +57 -0
  70. processpi-0.2.2/processpi/components/_246trinitrotoluene.py +57 -0
  71. processpi-0.2.2/processpi/components/_2butanol.py +57 -0
  72. processpi-0.2.2/processpi/components/_2chloropropane.py +57 -0
  73. processpi-0.2.2/processpi/components/_2ethylbutanoicacid.py +57 -0
  74. processpi-0.2.2/processpi/components/_2ethylhexanoicacid.py +57 -0
  75. processpi-0.2.2/processpi/components/_2heptanol.py +57 -0
  76. processpi-0.2.2/processpi/components/_2heptanone.py +57 -0
  77. processpi-0.2.2/processpi/components/_2hexanol.py +57 -0
  78. processpi-0.2.2/processpi/components/_2hexanone.py +57 -0
  79. processpi-0.2.2/processpi/components/_2hexyne.py +57 -0
  80. processpi-0.2.2/processpi/components/_2methyl1butene.py +57 -0
  81. processpi-0.2.2/processpi/components/_2methyl1butene3yne.py +57 -0
  82. processpi-0.2.2/processpi/components/_2methyl2butene.py +57 -0
  83. processpi-0.2.2/processpi/components/_2methyl2propanol.py +57 -0
  84. processpi-0.2.2/processpi/components/_2methylbutane.py +57 -0
  85. processpi-0.2.2/processpi/components/_2methylbutanoicacid.py +57 -0
  86. processpi-0.2.2/processpi/components/_2methyloctanoicacid.py +57 -0
  87. processpi-0.2.2/processpi/components/_2methylpentane.py +57 -0
  88. processpi-0.2.2/processpi/components/_2methylpropane.py +57 -0
  89. processpi-0.2.2/processpi/components/_2methylpropene.py +57 -0
  90. processpi-0.2.2/processpi/components/_2nonanol.py +57 -0
  91. processpi-0.2.2/processpi/components/_2octanol.py +57 -0
  92. processpi-0.2.2/processpi/components/_2octanone.py +57 -0
  93. processpi-0.2.2/processpi/components/_2pentanol.py +57 -0
  94. processpi-0.2.2/processpi/components/_2pentanone.py +57 -0
  95. processpi-0.2.2/processpi/components/_2pentylmercaptan.py +57 -0
  96. processpi-0.2.2/processpi/components/_2pentyne.py +57 -0
  97. processpi-0.2.2/processpi/components/_2propanol.py +57 -0
  98. processpi-0.2.2/processpi/components/_2propylmercaptan.py +57 -0
  99. processpi-0.2.2/processpi/components/_3heptanone.py +57 -0
  100. processpi-0.2.2/processpi/components/_3hexanone.py +57 -0
  101. processpi-0.2.2/processpi/components/_3hexyne.py +57 -0
  102. processpi-0.2.2/processpi/components/_3methyl12butadiene.py +57 -0
  103. processpi-0.2.2/processpi/components/_3methyl1butanol.py +57 -0
  104. processpi-0.2.2/processpi/components/_3methyl1butyne.py +57 -0
  105. processpi-0.2.2/processpi/components/_3methylcyclopentene.py +57 -0
  106. processpi-0.2.2/processpi/components/_3octanone.py +57 -0
  107. processpi-0.2.2/processpi/components/_3pentanone.py +57 -0
  108. processpi-0.2.2/processpi/components/__init__.py +719 -0
  109. processpi-0.2.2/processpi/components/acetaldehyde.py +60 -0
  110. processpi-0.2.2/processpi/components/acetamide.py +58 -0
  111. processpi-0.2.2/processpi/components/acetic_anhydride.py +58 -0
  112. {processpi-0.2.0.4 → processpi-0.2.2}/processpi/components/aceticacid.py +6 -0
  113. {processpi-0.2.0.4 → processpi-0.2.2}/processpi/components/acetone.py +6 -0
  114. processpi-0.2.2/processpi/components/acetonitrile.py +57 -0
  115. processpi-0.2.2/processpi/components/acetylene.py +57 -0
  116. processpi-0.2.2/processpi/components/acrolein.py +57 -0
  117. {processpi-0.2.0.4 → processpi-0.2.2}/processpi/components/acrylicacid.py +6 -0
  118. processpi-0.2.2/processpi/components/acrylonitrile.py +58 -0
  119. {processpi-0.2.0.4 → processpi-0.2.2}/processpi/components/air.py +20 -0
  120. processpi-0.2.2/processpi/components/alphamethylstyrene.py +57 -0
  121. {processpi-0.2.0.4 → processpi-0.2.2}/processpi/components/ammonia.py +32 -7
  122. processpi-0.2.2/processpi/components/anisole.py +57 -0
  123. processpi-0.2.2/processpi/components/argon.py +57 -0
  124. processpi-0.2.2/processpi/components/base.py +365 -0
  125. processpi-0.2.2/processpi/components/benzamide.py +57 -0
  126. {processpi-0.2.0.4 → processpi-0.2.2}/processpi/components/benzene.py +12 -3
  127. processpi-0.2.2/processpi/components/benzenethiol.py +57 -0
  128. {processpi-0.2.0.4 → processpi-0.2.2}/processpi/components/benzoicacid.py +7 -1
  129. processpi-0.2.2/processpi/components/benzonitrile.py +57 -0
  130. processpi-0.2.2/processpi/components/benzophenone.py +57 -0
  131. processpi-0.2.2/processpi/components/benzylalcohol.py +57 -0
  132. processpi-0.2.2/processpi/components/benzylethylether.py +57 -0
  133. processpi-0.2.2/processpi/components/benzylmercaptan.py +57 -0
  134. processpi-0.2.2/processpi/components/biphenyl.py +57 -0
  135. {processpi-0.2.0.4 → processpi-0.2.2}/processpi/components/bromine.py +6 -0
  136. processpi-0.2.2/processpi/components/bromobenzene.py +57 -0
  137. processpi-0.2.2/processpi/components/bromoethane.py +57 -0
  138. processpi-0.2.2/processpi/components/bromomethane.py +57 -0
  139. {processpi-0.2.0.4 → processpi-0.2.2}/processpi/components/butane.py +6 -0
  140. processpi-0.2.2/processpi/components/butylacetate.py +57 -0
  141. processpi-0.2.2/processpi/components/butylbenzene.py +57 -0
  142. processpi-0.2.2/processpi/components/butylmercaptan.py +57 -0
  143. processpi-0.2.2/processpi/components/butyraldehyde.py +57 -0
  144. processpi-0.2.2/processpi/components/butyricacid.py +57 -0
  145. processpi-0.2.2/processpi/components/butyronitrile.py +57 -0
  146. {processpi-0.2.0.4 → processpi-0.2.2}/processpi/components/carbondioxide.py +6 -0
  147. processpi-0.2.2/processpi/components/carbondisulfide.py +57 -0
  148. processpi-0.2.2/processpi/components/carbonmonoxide.py +54 -0
  149. {processpi-0.2.0.4 → processpi-0.2.2}/processpi/components/carbontetrachloride.py +7 -1
  150. processpi-0.2.2/processpi/components/carbontetrafluoride.py +57 -0
  151. {processpi-0.2.0.4 → processpi-0.2.2}/processpi/components/chlorine.py +7 -0
  152. {processpi-0.2.0.4 → processpi-0.2.2}/processpi/components/chlorobenzene.py +7 -1
  153. processpi-0.2.2/processpi/components/chloroethane.py +57 -0
  154. {processpi-0.2.0.4 → processpi-0.2.2}/processpi/components/chloroform.py +7 -1
  155. {processpi-0.2.0.4 → processpi-0.2.2}/processpi/components/chloromethane.py +7 -1
  156. processpi-0.2.2/processpi/components/cis12dimethylcyclohexane.py +57 -0
  157. processpi-0.2.2/processpi/components/cis2butene.py +57 -0
  158. processpi-0.2.2/processpi/components/cis2methylcyclohexanol.py +57 -0
  159. processpi-0.2.2/processpi/components/cumene.py +57 -0
  160. {processpi-0.2.0.4 → processpi-0.2.2}/processpi/components/cyanogen.py +7 -1
  161. processpi-0.2.2/processpi/components/cyclobutane.py +57 -0
  162. processpi-0.2.2/processpi/components/cyclohexane.py +82 -0
  163. processpi-0.2.2/processpi/components/cyclohexanol.py +57 -0
  164. processpi-0.2.2/processpi/components/cyclohexanone.py +57 -0
  165. processpi-0.2.2/processpi/components/cyclohexene.py +57 -0
  166. processpi-0.2.2/processpi/components/cyclohexylmercaptan.py +57 -0
  167. processpi-0.2.2/processpi/components/cyclopentane.py +57 -0
  168. processpi-0.2.2/processpi/components/cyclopentene.py +57 -0
  169. processpi-0.2.2/processpi/components/cyclopropane.py +57 -0
  170. processpi-0.2.2/processpi/components/decanal.py +57 -0
  171. processpi-0.2.2/processpi/components/decane.py +57 -0
  172. processpi-0.2.2/processpi/components/decanoicacid.py +57 -0
  173. processpi-0.2.2/processpi/components/decylmercaptan.py +57 -0
  174. processpi-0.2.2/processpi/components/deuterium.py +57 -0
  175. processpi-0.2.2/processpi/components/dibromomethane.py +57 -0
  176. processpi-0.2.2/processpi/components/dibutylether.py +57 -0
  177. processpi-0.2.2/processpi/components/dichloromethane.py +57 -0
  178. processpi-0.2.2/processpi/components/diethanolamine.py +57 -0
  179. processpi-0.2.2/processpi/components/diethylamine.py +57 -0
  180. processpi-0.2.2/processpi/components/diethylether.py +57 -0
  181. processpi-0.2.2/processpi/components/diethylsulfide.py +57 -0
  182. processpi-0.2.2/processpi/components/difluoromethane.py +57 -0
  183. processpi-0.2.2/processpi/components/diisopropylamine.py +57 -0
  184. processpi-0.2.2/processpi/components/diisopropylether.py +57 -0
  185. processpi-0.2.2/processpi/components/diisopropylketone.py +57 -0
  186. processpi-0.2.2/processpi/components/dimethylacetylene.py +57 -0
  187. processpi-0.2.2/processpi/components/dimethylamine.py +57 -0
  188. processpi-0.2.2/processpi/components/dimethyldisulfide.py +57 -0
  189. processpi-0.2.2/processpi/components/dimethylether.py +57 -0
  190. processpi-0.2.2/processpi/components/dimethylphthalate.py +57 -0
  191. processpi-0.2.2/processpi/components/dimethylsilane.py +57 -0
  192. processpi-0.2.2/processpi/components/dimethylsulfide.py +57 -0
  193. processpi-0.2.2/processpi/components/dimethylsulfoxide.py +57 -0
  194. processpi-0.2.2/processpi/components/dimethylterephthalate.py +57 -0
  195. processpi-0.2.2/processpi/components/diphenylether.py +57 -0
  196. processpi-0.2.2/processpi/components/dipropylamine.py +57 -0
  197. processpi-0.2.2/processpi/components/dodecane.py +57 -0
  198. processpi-0.2.2/processpi/components/eicosane.py +57 -0
  199. processpi-0.2.2/processpi/components/ethane.py +52 -0
  200. {processpi-0.2.0.4 → processpi-0.2.2}/processpi/components/ethanol.py +6 -0
  201. {processpi-0.2.0.4 → processpi-0.2.2}/processpi/components/ethylacetate.py +23 -3
  202. processpi-0.2.2/processpi/components/ethylamine.py +57 -0
  203. processpi-0.2.2/processpi/components/ethylbenzene.py +57 -0
  204. processpi-0.2.2/processpi/components/ethylbenzoate.py +57 -0
  205. processpi-0.2.2/processpi/components/ethylbutyrate.py +57 -0
  206. processpi-0.2.2/processpi/components/ethylcyclohexane.py +57 -0
  207. processpi-0.2.2/processpi/components/ethylcyclopentane.py +57 -0
  208. {processpi-0.2.0.4 → processpi-0.2.2}/processpi/components/ethylene.py +22 -2
  209. processpi-0.2.2/processpi/components/ethylenediamine.py +57 -0
  210. processpi-0.2.2/processpi/components/ethyleneglycol.py +57 -0
  211. processpi-0.2.2/processpi/components/ethyleneimine.py +57 -0
  212. processpi-0.2.2/processpi/components/ethyleneoxide.py +57 -0
  213. processpi-0.2.2/processpi/components/ethylformate.py +57 -0
  214. processpi-0.2.2/processpi/components/ethylhexylether.py +57 -0
  215. processpi-0.2.2/processpi/components/ethylisopropylether.py +57 -0
  216. processpi-0.2.2/processpi/components/ethylisopropylketone.py +57 -0
  217. processpi-0.2.2/processpi/components/ethylmercaptan.py +57 -0
  218. processpi-0.2.2/processpi/components/ethylpropionate.py +57 -0
  219. processpi-0.2.2/processpi/components/ethylpropylether.py +57 -0
  220. processpi-0.2.2/processpi/components/ethyltrichlorosilane.py +57 -0
  221. {processpi-0.2.0.4 → processpi-0.2.2}/processpi/components/fluorine.py +6 -0
  222. {processpi-0.2.0.4 → processpi-0.2.2}/processpi/components/fluorobenzene.py +6 -0
  223. processpi-0.2.2/processpi/components/fluoroethane.py +57 -0
  224. processpi-0.2.2/processpi/components/fluoromethane.py +57 -0
  225. processpi-0.2.2/processpi/components/formaldehyde.py +57 -0
  226. processpi-0.2.2/processpi/components/formamide.py +57 -0
  227. {processpi-0.2.0.4 → processpi-0.2.2}/processpi/components/formicacid.py +6 -0
  228. processpi-0.2.2/processpi/components/furan.py +57 -0
  229. {processpi-0.2.0.4 → processpi-0.2.2}/processpi/components/gas.py +9 -0
  230. processpi-0.2.2/processpi/components/helium.py +101 -0
  231. processpi-0.2.2/processpi/components/heptadecane.py +57 -0
  232. processpi-0.2.2/processpi/components/heptanal.py +57 -0
  233. processpi-0.2.2/processpi/components/heptane.py +96 -0
  234. processpi-0.2.2/processpi/components/heptanoicacid.py +57 -0
  235. processpi-0.2.2/processpi/components/heptylmercaptan.py +57 -0
  236. processpi-0.2.2/processpi/components/hexadecane.py +57 -0
  237. processpi-0.2.2/processpi/components/hexanal.py +57 -0
  238. processpi-0.2.2/processpi/components/hexane.py +57 -0
  239. processpi-0.2.2/processpi/components/hexanoicacid.py +57 -0
  240. processpi-0.2.2/processpi/components/hexylmercaptan.py +57 -0
  241. processpi-0.2.2/processpi/components/hydrazine.py +57 -0
  242. processpi-0.2.2/processpi/components/hydrogen.py +95 -0
  243. processpi-0.2.2/processpi/components/hydrogenbromide.py +57 -0
  244. processpi-0.2.2/processpi/components/hydrogenchloride.py +84 -0
  245. processpi-0.2.2/processpi/components/hydrogencyanide.py +83 -0
  246. processpi-0.2.2/processpi/components/hydrogenfluoride.py +57 -0
  247. processpi-0.2.2/processpi/components/hydrogensulfide.py +102 -0
  248. {processpi-0.2.0.4 → processpi-0.2.2}/processpi/components/inorganic_liquid.py +7 -0
  249. processpi-0.2.2/processpi/components/isobutyricacid.py +57 -0
  250. processpi-0.2.2/processpi/components/isopropylamine.py +57 -0
  251. processpi-0.2.2/processpi/components/malonicacid.py +57 -0
  252. processpi-0.2.2/processpi/components/mcresol.py +57 -0
  253. processpi-0.2.2/processpi/components/mdichlorobenzene.py +57 -0
  254. processpi-0.2.2/processpi/components/methacrylicacid.py +57 -0
  255. processpi-0.2.2/processpi/components/methane.py +101 -0
  256. {processpi-0.2.0.4 → processpi-0.2.2}/processpi/components/methanol.py +6 -0
  257. processpi-0.2.2/processpi/components/methylacetate.py +57 -0
  258. processpi-0.2.2/processpi/components/methylacetylene.py +57 -0
  259. processpi-0.2.2/processpi/components/methylacrylate.py +57 -0
  260. processpi-0.2.2/processpi/components/methylamine.py +57 -0
  261. processpi-0.2.2/processpi/components/methylbenzoate.py +57 -0
  262. processpi-0.2.2/processpi/components/methylbutylether.py +57 -0
  263. processpi-0.2.2/processpi/components/methylbutylsulfide.py +57 -0
  264. processpi-0.2.2/processpi/components/methylbutyrate.py +57 -0
  265. processpi-0.2.2/processpi/components/methylchlorosilane.py +57 -0
  266. processpi-0.2.2/processpi/components/methylcyclohexane.py +57 -0
  267. processpi-0.2.2/processpi/components/methylcyclopentane.py +57 -0
  268. processpi-0.2.2/processpi/components/methyldichlorosilane.py +57 -0
  269. processpi-0.2.2/processpi/components/methylethylether.py +57 -0
  270. processpi-0.2.2/processpi/components/methylethylketone.py +57 -0
  271. processpi-0.2.2/processpi/components/methylethylsulfide.py +57 -0
  272. processpi-0.2.2/processpi/components/methylformate.py +57 -0
  273. processpi-0.2.2/processpi/components/methylisobutylether.py +57 -0
  274. processpi-0.2.2/processpi/components/methylisobutylketone.py +57 -0
  275. processpi-0.2.2/processpi/components/methylisocyanate.py +57 -0
  276. processpi-0.2.2/processpi/components/methylisopropylether.py +57 -0
  277. processpi-0.2.2/processpi/components/methylisopropylketone.py +57 -0
  278. processpi-0.2.2/processpi/components/methylisopropylsulfide.py +57 -0
  279. processpi-0.2.2/processpi/components/methylmercaptan.py +57 -0
  280. processpi-0.2.2/processpi/components/methylmethacrylate.py +57 -0
  281. processpi-0.2.2/processpi/components/methylpentylether.py +57 -0
  282. processpi-0.2.2/processpi/components/methylpropionate.py +57 -0
  283. processpi-0.2.2/processpi/components/methylpropylether.py +57 -0
  284. processpi-0.2.2/processpi/components/methylpropylsulfide.py +57 -0
  285. processpi-0.2.2/processpi/components/methylsilane.py +57 -0
  286. processpi-0.2.2/processpi/components/methyltertbutylether.py +57 -0
  287. processpi-0.2.2/processpi/components/methylvinylether.py +57 -0
  288. processpi-0.2.2/processpi/components/mxylene.py +57 -0
  289. processpi-0.2.2/processpi/components/naphthalene.py +57 -0
  290. processpi-0.2.2/processpi/components/neon.py +99 -0
  291. processpi-0.2.2/processpi/components/nitricoxide.py +104 -0
  292. processpi-0.2.2/processpi/components/nitroethane.py +57 -0
  293. processpi-0.2.2/processpi/components/nitrogen.py +84 -0
  294. processpi-0.2.2/processpi/components/nitrogentrifluoride.py +57 -0
  295. processpi-0.2.2/processpi/components/nitromethane.py +57 -0
  296. processpi-0.2.2/processpi/components/nitrousoxide.py +86 -0
  297. processpi-0.2.2/processpi/components/nmethylacetamide.py +57 -0
  298. processpi-0.2.2/processpi/components/nndimethylformamide.py +57 -0
  299. processpi-0.2.2/processpi/components/nonadecane.py +57 -0
  300. processpi-0.2.2/processpi/components/nonanal.py +57 -0
  301. processpi-0.2.2/processpi/components/nonane.py +57 -0
  302. processpi-0.2.2/processpi/components/nonanoicacid.py +57 -0
  303. processpi-0.2.2/processpi/components/nonylmercaptan.py +57 -0
  304. processpi-0.2.2/processpi/components/ocresol.py +57 -0
  305. processpi-0.2.2/processpi/components/octadecane.py +57 -0
  306. processpi-0.2.2/processpi/components/octanal.py +57 -0
  307. processpi-0.2.2/processpi/components/octane.py +57 -0
  308. processpi-0.2.2/processpi/components/octanoicacid.py +57 -0
  309. processpi-0.2.2/processpi/components/octylmercaptan.py +57 -0
  310. processpi-0.2.2/processpi/components/odichlorobenzene.py +57 -0
  311. {processpi-0.2.0.4 → processpi-0.2.2}/processpi/components/oil.py +12 -3
  312. {processpi-0.2.0.4 → processpi-0.2.2}/processpi/components/organic_liquid.py +12 -3
  313. processpi-0.2.2/processpi/components/oterphenyl.py +57 -0
  314. processpi-0.2.2/processpi/components/oxalicacid.py +57 -0
  315. processpi-0.2.2/processpi/components/oxygen.py +86 -0
  316. processpi-0.2.2/processpi/components/oxylene.py +57 -0
  317. processpi-0.2.2/processpi/components/ozone.py +86 -0
  318. processpi-0.2.2/processpi/components/pcresol.py +57 -0
  319. processpi-0.2.2/processpi/components/pdichlorobenzene.py +57 -0
  320. processpi-0.2.2/processpi/components/pentadecane.py +57 -0
  321. processpi-0.2.2/processpi/components/pentanal.py +57 -0
  322. processpi-0.2.2/processpi/components/pentane.py +57 -0
  323. processpi-0.2.2/processpi/components/pentanoicacid.py +57 -0
  324. processpi-0.2.2/processpi/components/pentylmercaptan.py +57 -0
  325. processpi-0.2.2/processpi/components/phenanthrene.py +57 -0
  326. processpi-0.2.2/processpi/components/phenol.py +84 -0
  327. processpi-0.2.2/processpi/components/phenylisocyanate.py +57 -0
  328. processpi-0.2.2/processpi/components/phthalicanhydride.py +57 -0
  329. processpi-0.2.2/processpi/components/propadiene.py +57 -0
  330. processpi-0.2.2/processpi/components/propane.py +101 -0
  331. processpi-0.2.2/processpi/components/propenylcyclohexene.py +57 -0
  332. processpi-0.2.2/processpi/components/propionaldehyde.py +57 -0
  333. processpi-0.2.2/processpi/components/propionicacid.py +81 -0
  334. processpi-0.2.2/processpi/components/propionitrile.py +57 -0
  335. processpi-0.2.2/processpi/components/propylacetate.py +57 -0
  336. processpi-0.2.2/processpi/components/propylamine.py +57 -0
  337. processpi-0.2.2/processpi/components/propylbenzene.py +57 -0
  338. processpi-0.2.2/processpi/components/propylene.py +57 -0
  339. processpi-0.2.2/processpi/components/propylformate.py +57 -0
  340. processpi-0.2.2/processpi/components/propylmercaptan.py +57 -0
  341. processpi-0.2.2/processpi/components/pxylene.py +57 -0
  342. processpi-0.2.2/processpi/components/quinone.py +57 -0
  343. processpi-0.2.2/processpi/components/sebutylmercaptan.py +57 -0
  344. processpi-0.2.2/processpi/components/silicontetrafluoride.py +57 -0
  345. {processpi-0.2.0.4 → processpi-0.2.2}/processpi/components/steam.py +26 -4
  346. processpi-0.2.2/processpi/components/styrene.py +81 -0
  347. processpi-0.2.2/processpi/components/succinicacid.py +57 -0
  348. processpi-0.2.2/processpi/components/sulfurdioxide.py +84 -0
  349. processpi-0.2.2/processpi/components/sulfurhexafluoride.py +57 -0
  350. processpi-0.2.2/processpi/components/sulfurtrioxide.py +57 -0
  351. processpi-0.2.2/processpi/components/terephthalicacid.py +57 -0
  352. processpi-0.2.2/processpi/components/tetradecane.py +57 -0
  353. processpi-0.2.2/processpi/components/tetrahydrofuran.py +57 -0
  354. processpi-0.2.2/processpi/components/tetrahydrothiophene.py +57 -0
  355. processpi-0.2.2/processpi/components/thiophene.py +57 -0
  356. {processpi-0.2.0.4 → processpi-0.2.2}/processpi/components/toluene.py +11 -2
  357. processpi-0.2.2/processpi/components/trans12dimethylcyclohexane.py +57 -0
  358. processpi-0.2.2/processpi/components/trans2butene.py +57 -0
  359. processpi-0.2.2/processpi/components/trans2methylcyclohexanol.py +57 -0
  360. processpi-0.2.2/processpi/components/tridecane.py +57 -0
  361. processpi-0.2.2/processpi/components/triethylamine.py +57 -0
  362. processpi-0.2.2/processpi/components/trimethylamine.py +57 -0
  363. processpi-0.2.2/processpi/components/undecane.py +57 -0
  364. {processpi-0.2.0.4 → processpi-0.2.2}/processpi/components/vapor.py +9 -0
  365. processpi-0.2.2/processpi/components/vinylacetate.py +57 -0
  366. processpi-0.2.2/processpi/components/vinylacetylene.py +57 -0
  367. processpi-0.2.2/processpi/components/vinylchloride.py +57 -0
  368. processpi-0.2.2/processpi/components/vinyltrichlorosilane.py +57 -0
  369. {processpi-0.2.0.4 → processpi-0.2.2}/processpi/components/water.py +25 -0
  370. processpi-0.2.2/processpi/equipment/__init__.py +23 -0
  371. processpi-0.2.2/processpi/equipment/base.py +120 -0
  372. processpi-0.2.2/processpi/equipment/distillation/__init__.py +6 -0
  373. processpi-0.2.2/processpi/equipment/distillation/column.py +643 -0
  374. processpi-0.2.2/processpi/equipment/distillation/engine.py +105 -0
  375. processpi-0.2.2/processpi/equipment/distillation/hydraulics.py +97 -0
  376. processpi-0.2.2/processpi/equipment/distillation/mccabe_thiele.py +101 -0
  377. processpi-0.2.2/processpi/equipment/distillation/results.py +110 -0
  378. processpi-0.2.2/processpi/equipment/distillation/shortcut.py +212 -0
  379. processpi-0.2.2/processpi/equipment/distillation/vle.py +289 -0
  380. processpi-0.2.2/processpi/equipment/heatexchangers/__init__.py +20 -0
  381. processpi-0.2.2/processpi/equipment/heatexchangers/base.py +1305 -0
  382. processpi-0.2.2/processpi/equipment/heatexchangers/bell_delaware.py +31 -0
  383. processpi-0.2.2/processpi/equipment/heatexchangers/condenser.py +383 -0
  384. processpi-0.2.2/processpi/equipment/heatexchangers/datasheet.py +385 -0
  385. processpi-0.2.2/processpi/equipment/heatexchangers/double_pipe.py +520 -0
  386. processpi-0.2.2/processpi/equipment/heatexchangers/engine.py +759 -0
  387. processpi-0.2.2/processpi/equipment/heatexchangers/evaporator.py +1080 -0
  388. processpi-0.2.2/processpi/equipment/heatexchangers/reboiler.py +103 -0
  389. processpi-0.2.2/processpi/equipment/heatexchangers/shell_and_tube.py +3618 -0
  390. processpi-0.2.2/processpi/equipment/heatexchangers/standards.py +1273 -0
  391. processpi-0.2.2/processpi/equipment/pressure_vessel.py +2425 -0
  392. processpi-0.2.2/processpi/integration/flowsheet.py +181 -0
  393. processpi-0.2.2/processpi/pipelines/engine.py +2555 -0
  394. {processpi-0.2.0.4 → processpi-0.2.2}/processpi/pipelines/fittings.py +12 -4
  395. {processpi-0.2.0.4 → processpi-0.2.2}/processpi/pipelines/network.py +57 -10
  396. {processpi-0.2.0.4 → processpi-0.2.2}/processpi/pipelines/pipelineresults.py +114 -17
  397. processpi-0.2.2/processpi/pipelines/pipes.py +325 -0
  398. {processpi-0.2.0.4 → processpi-0.2.2}/processpi/pipelines/piping_costs.py +1 -1
  399. processpi-0.2.2/processpi/pipelines/standards.py +685 -0
  400. {processpi-0.2.0.4 → processpi-0.2.2}/processpi/streams/material.py +20 -1
  401. {processpi-0.2.0.4 → processpi-0.2.2}/processpi/units/area.py +3 -3
  402. {processpi-0.2.0.4 → processpi-0.2.2}/processpi/units/base.py +9 -3
  403. {processpi-0.2.0.4 → processpi-0.2.2}/processpi/units/density.py +1 -1
  404. {processpi-0.2.0.4 → processpi-0.2.2}/processpi/units/diameter.py +4 -4
  405. {processpi-0.2.0.4 → processpi-0.2.2}/processpi/units/dimensionless.py +3 -3
  406. {processpi-0.2.0.4 → processpi-0.2.2}/processpi/units/heat_flow.py +3 -3
  407. {processpi-0.2.0.4 → processpi-0.2.2}/processpi/units/heat_flux.py +3 -3
  408. {processpi-0.2.0.4 → processpi-0.2.2}/processpi/units/heat_of_vaporization.py +1 -1
  409. {processpi-0.2.0.4 → processpi-0.2.2}/processpi/units/heat_transfer_coefficient.py +3 -3
  410. {processpi-0.2.0.4 → processpi-0.2.2}/processpi/units/length.py +1 -1
  411. {processpi-0.2.0.4 → processpi-0.2.2}/processpi/units/mass.py +3 -3
  412. {processpi-0.2.0.4 → processpi-0.2.2}/processpi/units/mass_flowrate.py +3 -3
  413. {processpi-0.2.0.4 → processpi-0.2.2}/processpi/units/molar_flowrate.py +3 -3
  414. {processpi-0.2.0.4 → processpi-0.2.2}/processpi/units/power.py +1 -1
  415. {processpi-0.2.0.4 → processpi-0.2.2}/processpi/units/pressure.py +19 -8
  416. {processpi-0.2.0.4 → processpi-0.2.2}/processpi/units/specific_heat.py +10 -10
  417. {processpi-0.2.0.4 → processpi-0.2.2}/processpi/units/strings.py +4 -0
  418. {processpi-0.2.0.4 → processpi-0.2.2}/processpi/units/thermal_conductivity.py +3 -3
  419. {processpi-0.2.0.4 → processpi-0.2.2}/processpi/units/thermal_resistance.py +3 -3
  420. {processpi-0.2.0.4 → processpi-0.2.2}/processpi/units/velocity.py +2 -2
  421. {processpi-0.2.0.4 → processpi-0.2.2}/processpi/units/viscosity.py +2 -2
  422. {processpi-0.2.0.4 → processpi-0.2.2}/processpi/units/volume.py +3 -3
  423. {processpi-0.2.0.4 → processpi-0.2.2}/processpi/units/volumetric_flowrate.py +3 -3
  424. {processpi-0.2.0.4 → processpi-0.2.2}/processpi.egg-info/PKG-INFO +4 -3
  425. processpi-0.2.2/processpi.egg-info/SOURCES.txt +549 -0
  426. processpi-0.2.2/processpi.egg-info/entry_points.txt +2 -0
  427. {processpi-0.2.0.4 → processpi-0.2.2}/pyproject.toml +34 -38
  428. {processpi-0.2.0.4 → processpi-0.2.2}/setup.py +8 -8
  429. processpi-0.2.2/tests/test_bell_delaware_hx.py +112 -0
  430. processpi-0.2.2/tests/test_bell_delaware_taborek.py +256 -0
  431. processpi-0.2.2/tests/test_component_data_followups.py +365 -0
  432. processpi-0.2.2/tests/test_component_example_fixes.py +200 -0
  433. processpi-0.2.2/tests/test_component_hx_data.py +118 -0
  434. processpi-0.2.2/tests/test_component_vp_formulas.py +99 -0
  435. processpi-0.2.2/tests/test_components_exports.py +76 -0
  436. processpi-0.2.2/tests/test_crash_regressions.py +119 -0
  437. processpi-0.2.2/tests/test_distillation_column.py +387 -0
  438. processpi-0.2.2/tests/test_distillation_engine.py +86 -0
  439. processpi-0.2.2/tests/test_distillation_shortcut.py +214 -0
  440. processpi-0.2.2/tests/test_distillation_stage_count.py +44 -0
  441. processpi-0.2.2/tests/test_engine_network.py +93 -0
  442. processpi-0.2.2/tests/test_heatexchanger_engine_dispatch.py +129 -0
  443. processpi-0.2.2/tests/test_heatexchanger_flowsheet.py +243 -0
  444. processpi-0.2.2/tests/test_heatexchanger_fluid_assignment.py +446 -0
  445. processpi-0.2.2/tests/test_heatexchanger_tabular_result.py +63 -0
  446. processpi-0.2.2/tests/test_heatexchanger_type_selection.py +140 -0
  447. processpi-0.2.2/tests/test_hx_calculation_aliases.py +277 -0
  448. processpi-0.2.2/tests/test_hx_correlations.py +469 -0
  449. processpi-0.2.2/tests/test_hx_datasheet.py +33 -0
  450. processpi-0.2.2/tests/test_hx_design_phase_change_service.py +306 -0
  451. processpi-0.2.2/tests/test_hx_diagnostics.py +378 -0
  452. processpi-0.2.2/tests/test_hx_ft_correction_factor.py +212 -0
  453. processpi-0.2.2/tests/test_hx_hydraulic_verdict.py +220 -0
  454. processpi-0.2.2/tests/test_hx_rating_phase_change.py +266 -0
  455. processpi-0.2.2/tests/test_hx_shell_side_geometry.py +274 -0
  456. processpi-0.2.2/tests/test_hx_small_fixes.py +159 -0
  457. processpi-0.2.2/tests/test_hx_summary.py +244 -0
  458. processpi-0.2.2/tests/test_hx_tube_selector.py +145 -0
  459. processpi-0.2.2/tests/test_hx_u_basis.py +409 -0
  460. processpi-0.2.2/tests/test_hx_viscosity_temperature.py +80 -0
  461. processpi-0.2.2/tests/test_hx_warnings.py +185 -0
  462. processpi-0.2.2/tests/test_import_hygiene.py +60 -0
  463. processpi-0.2.2/tests/test_integration_flowsheet_ports.py +70 -0
  464. processpi-0.2.2/tests/test_missing_compounds.py +333 -0
  465. processpi-0.2.2/tests/test_network.py +89 -0
  466. processpi-0.2.2/tests/test_phase_above_critical.py +52 -0
  467. processpi-0.2.2/tests/test_pipe_schedule_table.py +123 -0
  468. processpi-0.2.2/tests/test_pipeline_api_fixes.py +115 -0
  469. processpi-0.2.2/tests/test_pipeline_diameters.py +337 -0
  470. processpi-0.2.2/tests/test_pipeline_engine_cleanup.py +108 -0
  471. processpi-0.2.2/tests/test_pipeline_fitting_losses.py +274 -0
  472. processpi-0.2.2/tests/test_pipeline_graph_network.py +849 -0
  473. {processpi-0.2.0.4 → processpi-0.2.2}/tests/test_pipeline_network.py +13 -13
  474. processpi-0.2.2/tests/test_pipeline_network_sizing.py +365 -0
  475. processpi-0.2.2/tests/test_pipeline_network_solver.py +176 -0
  476. processpi-0.2.2/tests/test_pipeline_sizing.py +116 -0
  477. processpi-0.2.2/tests/test_pressure_vessel.py +66 -0
  478. processpi-0.2.2/tests/test_pressure_vessel_asme_formulas.py +229 -0
  479. processpi-0.2.2/tests/test_pressure_vessel_engine.py +196 -0
  480. processpi-0.2.2/tests/test_shell_tube_kern_bell_workflow.py +89 -0
  481. processpi-0.2.2/tests/test_stream_state_properties.py +186 -0
  482. processpi-0.2.2/tests/test_unit_system.py +235 -0
  483. processpi-0.2.2/tests/test_vapor_placeholder.py +127 -0
  484. processpi-0.2.2/tests/test_variables.py +110 -0
  485. processpi-0.2.0.4/processpi/calculations/heat_transfer/__init__.py +0 -59
  486. processpi-0.2.0.4/processpi/components/__init__.py +0 -40
  487. processpi-0.2.0.4/processpi/components/base.py +0 -204
  488. processpi-0.2.0.4/processpi/components/carbonmonoxide.py +0 -28
  489. processpi-0.2.0.4/processpi/components/cyclohexene.py +0 -17
  490. processpi-0.2.0.4/processpi/components/ethane.py +0 -27
  491. processpi-0.2.0.4/processpi/equipment/__init__.py +0 -21
  492. processpi-0.2.0.4/processpi/equipment/absorber.py +0 -67
  493. processpi-0.2.0.4/processpi/equipment/base.py +0 -57
  494. processpi-0.2.0.4/processpi/equipment/batch.py +0 -39
  495. processpi-0.2.0.4/processpi/equipment/compressor.py +0 -80
  496. processpi-0.2.0.4/processpi/equipment/cstr.py +0 -41
  497. processpi-0.2.0.4/processpi/equipment/decanter.py +0 -61
  498. processpi-0.2.0.4/processpi/equipment/distillation.py +0 -82
  499. processpi-0.2.0.4/processpi/equipment/flash.py +0 -84
  500. processpi-0.2.0.4/processpi/equipment/heater_cooler.py +0 -103
  501. processpi-0.2.0.4/processpi/equipment/heatexchangers/__init__.py +0 -7
  502. processpi-0.2.0.4/processpi/equipment/heatexchangers/base.py +0 -129
  503. processpi-0.2.0.4/processpi/equipment/heatexchangers/examples.py +0 -116
  504. processpi-0.2.0.4/processpi/equipment/heatexchangers/mechanical/__init__.py +0 -53
  505. processpi-0.2.0.4/processpi/equipment/heatexchangers/mechanical/basic_params.py +0 -83
  506. processpi-0.2.0.4/processpi/equipment/heatexchangers/mechanical/bell_method.py +0 -101
  507. processpi-0.2.0.4/processpi/equipment/heatexchangers/mechanical/classification.py +0 -66
  508. processpi-0.2.0.4/processpi/equipment/heatexchangers/mechanical/condenser.py +0 -262
  509. processpi-0.2.0.4/processpi/equipment/heatexchangers/mechanical/double_pipe.py +0 -633
  510. processpi-0.2.0.4/processpi/equipment/heatexchangers/mechanical/evaporator.py +0 -263
  511. processpi-0.2.0.4/processpi/equipment/heatexchangers/mechanical/kern_method.py +0 -112
  512. processpi-0.2.0.4/processpi/equipment/heatexchangers/mechanical/reboiler.py +0 -288
  513. processpi-0.2.0.4/processpi/equipment/heatexchangers/mechanical/shell_tube.py +0 -686
  514. processpi-0.2.0.4/processpi/equipment/heatexchangers/mechanical.py +0 -20
  515. processpi-0.2.0.4/processpi/equipment/heatexchangers/simulation.py +0 -186
  516. processpi-0.2.0.4/processpi/equipment/heatexchangers/standards.py +0 -118
  517. processpi-0.2.0.4/processpi/equipment/heatexchangers/utils.py +0 -1
  518. processpi-0.2.0.4/processpi/equipment/heatexchangers_.py +0 -155
  519. processpi-0.2.0.4/processpi/equipment/mixer.py +0 -54
  520. processpi-0.2.0.4/processpi/equipment/pfr.py +0 -44
  521. processpi-0.2.0.4/processpi/equipment/pumps.py +0 -92
  522. processpi-0.2.0.4/processpi/equipment/splitter.py +0 -41
  523. processpi-0.2.0.4/processpi/equipment/stripper.py +0 -67
  524. processpi-0.2.0.4/processpi/equipment/turbine.py +0 -81
  525. processpi-0.2.0.4/processpi/equipment/valves.py +0 -112
  526. processpi-0.2.0.4/processpi/integration/flowsheet.py +0 -150
  527. processpi-0.2.0.4/processpi/pipelines/engine.py +0 -1736
  528. processpi-0.2.0.4/processpi/pipelines/pipes.py +0 -162
  529. processpi-0.2.0.4/processpi/pipelines/standards.py +0 -715
  530. processpi-0.2.0.4/processpi.egg-info/SOURCES.txt +0 -188
  531. processpi-0.2.0.4/tests/test_engine_network.py +0 -111
  532. processpi-0.2.0.4/tests/test_network.py +0 -79
  533. processpi-0.2.0.4/tests/test_variables.py +0 -93
  534. {processpi-0.2.0.4 → processpi-0.2.2}/LICENSE +0 -0
  535. {processpi-0.2.0.4 → processpi-0.2.2}/processpi/__init__.py +0 -0
  536. {processpi-0.2.0.4 → processpi-0.2.2}/processpi/calculations/__init__.py +0 -0
  537. {processpi-0.2.0.4 → processpi-0.2.2}/processpi/calculations/base.py +0 -0
  538. {processpi-0.2.0.4 → processpi-0.2.2}/processpi/calculations/fluids/__init__.py +0 -0
  539. {processpi-0.2.0.4 → processpi-0.2.2}/processpi/calculations/fluids/flow_type.py +0 -0
  540. {processpi-0.2.0.4 → processpi-0.2.2}/processpi/calculations/fluids/friction_factor_colebrookwhite.py +0 -0
  541. {processpi-0.2.0.4 → processpi-0.2.2}/processpi/calculations/fluids/optimium_pipe_dia.py +0 -0
  542. {processpi-0.2.0.4 → processpi-0.2.2}/processpi/calculations/fluids/pressure_drop_darcy.py +0 -0
  543. {processpi-0.2.0.4 → processpi-0.2.2}/processpi/calculations/fluids/pressure_drop_fanning.py +0 -0
  544. {processpi-0.2.0.4 → processpi-0.2.2}/processpi/calculations/fluids/pressure_drop_hazen_williams.py +0 -0
  545. {processpi-0.2.0.4 → processpi-0.2.2}/processpi/calculations/fluids/pump_power.py +0 -0
  546. {processpi-0.2.0.4 → processpi-0.2.2}/processpi/calculations/fluids/reynolds_number.py +0 -0
  547. {processpi-0.2.0.4 → processpi-0.2.2}/processpi/calculations/fluids/velocity.py +0 -0
  548. {processpi-0.2.0.4 → processpi-0.2.2}/processpi/calculations/heat_transfer/biot.py +0 -0
  549. {processpi-0.2.0.4 → processpi-0.2.2}/processpi/calculations/heat_transfer/boiling_chen.py +0 -0
  550. {processpi-0.2.0.4 → processpi-0.2.2}/processpi/calculations/heat_transfer/combined_modes.py +0 -0
  551. {processpi-0.2.0.4 → processpi-0.2.2}/processpi/calculations/heat_transfer/condensation.py +0 -0
  552. {processpi-0.2.0.4 → processpi-0.2.2}/processpi/calculations/heat_transfer/condensation_dropwise.py +0 -0
  553. {processpi-0.2.0.4 → processpi-0.2.2}/processpi/calculations/heat_transfer/condensation_nusselt.py +0 -0
  554. {processpi-0.2.0.4 → processpi-0.2.2}/processpi/calculations/heat_transfer/fourier.py +0 -0
  555. {processpi-0.2.0.4 → processpi-0.2.2}/processpi/calculations/heat_transfer/fourierlaw.py +0 -0
  556. {processpi-0.2.0.4 → processpi-0.2.2}/processpi/calculations/heat_transfer/grashof.py +0 -0
  557. {processpi-0.2.0.4 → processpi-0.2.2}/processpi/calculations/heat_transfer/newton_cooling.py +0 -0
  558. {processpi-0.2.0.4 → processpi-0.2.2}/processpi/calculations/heat_transfer/ntu.py +0 -0
  559. {processpi-0.2.0.4 → processpi-0.2.2}/processpi/calculations/heat_transfer/nusselt.py +0 -0
  560. {processpi-0.2.0.4 → processpi-0.2.2}/processpi/calculations/heat_transfer/overall_u.py +0 -0
  561. {processpi-0.2.0.4 → processpi-0.2.2}/processpi/calculations/heat_transfer/peclet.py +0 -0
  562. {processpi-0.2.0.4 → processpi-0.2.2}/processpi/calculations/heat_transfer/prandtl.py +0 -0
  563. {processpi-0.2.0.4 → processpi-0.2.2}/processpi/calculations/heat_transfer/radial_cylinder.py +0 -0
  564. {processpi-0.2.0.4 → processpi-0.2.2}/processpi/calculations/heat_transfer/radiation_blackbody.py +0 -0
  565. {processpi-0.2.0.4 → processpi-0.2.2}/processpi/calculations/heat_transfer/radiation_exchange.py +0 -0
  566. {processpi-0.2.0.4 → processpi-0.2.2}/processpi/calculations/heat_transfer/radiation_greybody.py +0 -0
  567. {processpi-0.2.0.4 → processpi-0.2.2}/processpi/calculations/heat_transfer/radiation_viewfactor.py +0 -0
  568. {processpi-0.2.0.4 → processpi-0.2.2}/processpi/calculations/heat_transfer/resistance.py +0 -0
  569. {processpi-0.2.0.4 → processpi-0.2.2}/processpi/calculations/heat_transfer/reyleigh.py +0 -0
  570. {processpi-0.2.0.4 → processpi-0.2.2}/processpi/calculations/heat_transfer/rohsenow_boiling.py +0 -0
  571. {processpi-0.2.0.4 → processpi-0.2.2}/processpi/calculations/heat_transfer/stefan_boltzmann.py +0 -0
  572. {processpi-0.2.0.4 → processpi-0.2.2}/processpi/calculations/mass_transfer/__init__.py +0 -0
  573. {processpi-0.2.0.4 → processpi-0.2.2}/processpi/calculations/mass_transfer/drying_rate.py +0 -0
  574. {processpi-0.2.0.4 → processpi-0.2.2}/processpi/calculations/reaction_engineering/__init__.py +0 -0
  575. {processpi-0.2.0.4 → processpi-0.2.2}/processpi/calculations/reaction_engineering/residence_time.py +0 -0
  576. {processpi-0.2.0.4 → processpi-0.2.2}/processpi/calculations/thermodynamics/__init__.py +0 -0
  577. {processpi-0.2.0.4 → processpi-0.2.2}/processpi/calculations/thermodynamics/enthalpy_change.py +0 -0
  578. {processpi-0.2.0.4 → processpi-0.2.2}/processpi/calculations/thermodynamics/entropy_change.py +0 -0
  579. {processpi-0.2.0.4 → processpi-0.2.2}/processpi/calculations/thermodynamics/heat_of_vaporization.py +0 -0
  580. {processpi-0.2.0.4 → processpi-0.2.2}/processpi/components/constants.py +0 -0
  581. {processpi-0.2.0.4 → processpi-0.2.2}/processpi/constants.py +0 -0
  582. {processpi-0.2.0.4 → processpi-0.2.2}/processpi/integration/__init__.py +0 -0
  583. {processpi-0.2.0.4 → processpi-0.2.2}/processpi/pipelines/__init__.py +0 -0
  584. {processpi-0.2.0.4 → processpi-0.2.2}/processpi/pipelines/base.py +0 -0
  585. {processpi-0.2.0.4 → processpi-0.2.2}/processpi/pipelines/design_rules.py +0 -0
  586. {processpi-0.2.0.4 → processpi-0.2.2}/processpi/pipelines/equipment.py +0 -0
  587. {processpi-0.2.0.4 → processpi-0.2.2}/processpi/pipelines/insulation.py +0 -0
  588. {processpi-0.2.0.4 → processpi-0.2.2}/processpi/pipelines/materials.py +0 -0
  589. {processpi-0.2.0.4 → processpi-0.2.2}/processpi/pipelines/nozzle.py +0 -0
  590. {processpi-0.2.0.4 → processpi-0.2.2}/processpi/pipelines/pumps.py +0 -0
  591. {processpi-0.2.0.4 → processpi-0.2.2}/processpi/pipelines/selection.py +0 -0
  592. {processpi-0.2.0.4 → processpi-0.2.2}/processpi/pipelines/vessel.py +0 -0
  593. {processpi-0.2.0.4 → processpi-0.2.2}/processpi/streams/__init__.py +0 -0
  594. {processpi-0.2.0.4 → processpi-0.2.2}/processpi/streams/energy.py +0 -0
  595. {processpi-0.2.0.4 → processpi-0.2.2}/processpi/units/__init__.py +0 -0
  596. {processpi-0.2.0.4 → processpi-0.2.2}/processpi/units/temperature.py +0 -0
  597. {processpi-0.2.0.4 → processpi-0.2.2}/processpi.egg-info/dependency_links.txt +0 -0
  598. {processpi-0.2.0.4 → processpi-0.2.2}/processpi.egg-info/requires.txt +0 -0
  599. {processpi-0.2.0.4 → processpi-0.2.2}/processpi.egg-info/top_level.txt +0 -0
  600. {processpi-0.2.0.4 → processpi-0.2.2}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: processpi
3
- Version: 0.2.0.4
3
+ Version: 0.2.2
4
4
  Summary: Python toolkit for chemical engineering simulations, equipment design, and unit conversions
5
5
  Home-page: https://processpi.org
6
6
  Author: Raviteja Varma Nadimpalli
@@ -182,8 +182,8 @@ from processpi.components import Water, Ethanol
182
182
  water = Water()
183
183
  ethanol = Ethanol()
184
184
 
185
- print(f"Water density: {water.density()} kg/m3")
186
- print(f"Ethanol viscosity: {ethanol.viscosity()} Pa·s")
185
+ print(f"Water density: {water.density()}")
186
+ print(f"Ethanol viscosity: {ethanol.viscosity()}")
187
187
  ```
188
188
 
189
189
  ⚠ **Note**: Component data is for educational/demo purposes only. Extended property support is in progress.
@@ -200,6 +200,7 @@ from processpi.units import VolumetricFlowRate, Diameter, Length
200
200
 
201
201
  # Define pipe and fluid
202
202
  pipe = Pipe(
203
+ name="Main Pipe",
203
204
  internal_diameter=Diameter(50, "mm"),
204
205
  length=Length(10, "m")
205
206
  )
@@ -135,8 +135,8 @@ from processpi.components import Water, Ethanol
135
135
  water = Water()
136
136
  ethanol = Ethanol()
137
137
 
138
- print(f"Water density: {water.density()} kg/m3")
139
- print(f"Ethanol viscosity: {ethanol.viscosity()} Pa·s")
138
+ print(f"Water density: {water.density()}")
139
+ print(f"Ethanol viscosity: {ethanol.viscosity()}")
140
140
  ```
141
141
 
142
142
  ⚠ **Note**: Component data is for educational/demo purposes only. Extended property support is in progress.
@@ -153,6 +153,7 @@ from processpi.units import VolumetricFlowRate, Diameter, Length
153
153
 
154
154
  # Define pipe and fluid
155
155
  pipe = Pipe(
156
+ name="Main Pipe",
156
157
  internal_diameter=Diameter(50, "mm"),
157
158
  length=Length(10, "m")
158
159
  )
@@ -0,0 +1,5 @@
1
+ from .cli import main
2
+
3
+
4
+ if __name__ == "__main__":
5
+ main()
@@ -12,10 +12,12 @@ from processpi.units import * # Import all unit classes
12
12
  # Import all calculation classes for the registry. This makes them available to the engine.
13
13
  from processpi.calculations.fluids.velocity import FluidVelocity
14
14
  from processpi.calculations.fluids.reynolds_number import ReynoldsNumber
15
+ from processpi.calculations.fluids.flow_type import TypeOfFlow
15
16
  from processpi.calculations.fluids.friction_factor_colebrookwhite import ColebrookWhite
16
17
  from processpi.calculations.fluids.pressure_drop_darcy import PressureDropDarcy
17
18
  from processpi.calculations.fluids.pressure_drop_fanning import PressureDropFanning
18
19
  from processpi.calculations.fluids.pressure_drop_hazen_williams import PressureDropHazenWilliams
20
+ from processpi.equipment.pressure_vessel import PressureVessel
19
21
  # Add more imports here as you implement new calculations
20
22
  # from processpi.calculations.fluids.pressure_drop import PressureDrop
21
23
  # from processpi.calculations.heat_transfer import HeatTransfer
@@ -59,6 +61,9 @@ class CalculationEngine:
59
61
  "reynolds_number": ReynoldsNumber,
60
62
  "re": ReynoldsNumber,
61
63
  "reynoldsnumber": ReynoldsNumber,
64
+ "type_of_flow": TypeOfFlow,
65
+ "flow_type": TypeOfFlow,
66
+ "flow_regime": TypeOfFlow,
62
67
  "colebrook_white": ColebrookWhite,
63
68
  "friction_factor_colebrookwhite": ColebrookWhite,
64
69
  "friction_factor": ColebrookWhite,
@@ -68,6 +73,8 @@ class CalculationEngine:
68
73
  "pressure_drop": PressureDropDarcy,
69
74
  "pressure_drop_fanning": PressureDropFanning,
70
75
  "pressure_drop_hazen_williams": PressureDropHazenWilliams,
76
+ "pressure_vessel": PressureVessel,
77
+ "vessel_design": PressureVessel,
71
78
 
72
79
  # Add more mappings as new calculations are added
73
80
  # "pressure_drop": PressureDrop,
@@ -0,0 +1,92 @@
1
+ from .biot import BiotNumber
2
+ from .combined_modes import ConductionConvectionCombined
3
+ from .condensation import CondensingVapourFilm
4
+ from .condensation_dropwise import DropwiseCondensation
5
+ from .condensation_nusselt import NusseltCondensation
6
+ from .conduction_heat_loss import ConductionHeatLoss
7
+ from .convection_heat_loss import ConvectionHeatLoss
8
+ from .crossflow_tube import CrossFlowSingleTube
9
+ from .fourier import FourierNumber
10
+ from .fourierlaw import FourierLaw
11
+ from .heat_exchanger import (
12
+ ConvectiveCoefficient,
13
+ DarcyPressureDrop,
14
+ KernNusselt,
15
+ LatentHeatDuty,
16
+ ReynoldsFromProperties,
17
+ SensibleHeatDuty,
18
+ )
19
+ from .heat_exchanger_area import HeatExchangerArea
20
+ from .hx_kern import (
21
+ ConvectiveH,
22
+ DarcyDrop,
23
+ DittusBoelter,
24
+ KernShellNu,
25
+ LatentDuty,
26
+ Reynolds,
27
+ SensibleDuty,
28
+ ShellDiameterEstimate,
29
+ TubeCountFromArea,
30
+ )
31
+ from .lmtd import LMTD
32
+ from .newton_cooling import NewtonCooling
33
+ from .ntu import NTUHeatExchanger
34
+ from .nusselt import NusseltNumber
35
+ from .overall_u import OverallHeatTransferCoefficient
36
+ from .peclet import PecletNumber
37
+ from .prandtl import PrandtlNumber
38
+ from .radial_cylinder import RadialHeatFlowCylinder
39
+ from .radiation_blackbody import BlackbodyRadiation
40
+ from .radiation_exchange import RadiationExchange
41
+ from .radiation_greybody import GreybodyRadiation
42
+ from .radiation_viewfactor import RadiationWithViewFactor
43
+ from .resistance import ThermalResistanceParallel, ThermalResistanceSeries
44
+ from .reyleigh import RayleighNumber
45
+ from .rohsenow_boiling import RohsenowBoiling
46
+ from .stefan_boltzmann import StefanBoltzmann
47
+
48
+ __all__ = [
49
+ "BiotNumber",
50
+ "ConductionConvectionCombined",
51
+ "CondensingVapourFilm",
52
+ "DropwiseCondensation",
53
+ "NusseltCondensation",
54
+ "ConductionHeatLoss",
55
+ "ConvectionHeatLoss",
56
+ "CrossFlowSingleTube",
57
+ "FourierNumber",
58
+ "FourierLaw",
59
+ "HeatExchangerArea",
60
+ "LMTD",
61
+ "NewtonCooling",
62
+ "NTUHeatExchanger",
63
+ "NusseltNumber",
64
+ "OverallHeatTransferCoefficient",
65
+ "PecletNumber",
66
+ "PrandtlNumber",
67
+ "RadialHeatFlowCylinder",
68
+ "BlackbodyRadiation",
69
+ "RadiationExchange",
70
+ "GreybodyRadiation",
71
+ "RadiationWithViewFactor",
72
+ "ThermalResistanceSeries",
73
+ "ThermalResistanceParallel",
74
+ "RayleighNumber",
75
+ "RohsenowBoiling",
76
+ "StefanBoltzmann",
77
+ "SensibleHeatDuty",
78
+ "LatentHeatDuty",
79
+ "KernNusselt",
80
+ "ConvectiveCoefficient",
81
+ "DarcyPressureDrop",
82
+ "ReynoldsFromProperties",
83
+ "SensibleDuty",
84
+ "LatentDuty",
85
+ "Reynolds",
86
+ "DittusBoelter",
87
+ "KernShellNu",
88
+ "ConvectiveH",
89
+ "TubeCountFromArea",
90
+ "ShellDiameterEstimate",
91
+ "DarcyDrop",
92
+ ]
@@ -23,4 +23,4 @@ class ConductionHeatLoss(CalculationBase):
23
23
  L = self._get_value(self.inputs["thickness"], "thickness") # m
24
24
 
25
25
  Q = k * A * ΔT / L
26
- return HeatFlux(Q, "W")
26
+ return HeatFlow(Q, "W")
@@ -20,4 +20,4 @@ class ConvectionHeatLoss(CalculationBase):
20
20
  ΔT = self._get_value(self.inputs["temp_difference"], "temp_difference") # K
21
21
 
22
22
  Q = h * A * ΔT
23
- return HeatFlux(Q, "W")
23
+ return HeatFlow(Q, "W")
@@ -1,3 +1,5 @@
1
+ import math
2
+
1
3
  from ..base import CalculationBase
2
4
  from ...units import *
3
5
 
@@ -0,0 +1,167 @@
1
+ """Deprecated names for the heat exchanger calculations in ``hx_kern``.
2
+
3
+ These six classes used to be a second copy of calculations that ``hx_kern``
4
+ also implements, under other names and keywords. Only the ``hx_kern`` set is
5
+ used by the exchangers, so it is now the single implementation. Each class
6
+ here keeps its old keywords, its old error messages, its ``inputs`` and its
7
+ return type, maps the keywords onto the ``hx_kern`` class and warns with a
8
+ ``DeprecationWarning``. The formulas were identical, so the numbers are too.
9
+
10
+ ======================== ================== ==================================
11
+ old name use instead keywords renamed
12
+ ======================== ================== ==================================
13
+ SensibleHeatDuty SensibleDuty mass_flow_rate -> m_dot,
14
+ specific_heat -> cp
15
+ LatentHeatDuty LatentDuty mass_flow_rate -> m_dot
16
+ KernNusselt DittusBoelter none (0.023 Re^0.8 Pr^n is the
17
+ Dittus-Boelter form, not Kern's
18
+ shell-side ``KernShellNu``)
19
+ ConvectiveCoefficient ConvectiveH thermal_conductivity -> k,
20
+ characteristic_diameter ->
21
+ diameter
22
+ DarcyPressureDrop DarcyDrop friction_factor -> f
23
+ ReynoldsFromProperties Reynolds none
24
+ ======================== ================== ==================================
25
+ """
26
+
27
+ from __future__ import annotations
28
+
29
+ import warnings
30
+ from typing import Dict, Tuple, Type
31
+
32
+ from ..base import CalculationBase
33
+ from .hx_kern import (
34
+ ConvectiveH,
35
+ DarcyDrop,
36
+ DittusBoelter,
37
+ LatentDuty,
38
+ Reynolds,
39
+ SensibleDuty,
40
+ )
41
+
42
+
43
+ class _DeprecatedHXCalculation(CalculationBase):
44
+ """Old keyword interface over one ``hx_kern`` calculation.
45
+
46
+ ``_keyword_map`` lists the required old keywords, in the order the old
47
+ class checked them, with the ``hx_kern`` keyword each one becomes.
48
+ ``_optional`` lists keywords passed through unchanged when given.
49
+ """
50
+
51
+ _canonical: Type[CalculationBase]
52
+ _keyword_map: Tuple[Tuple[str, str], ...]
53
+ _optional: Tuple[str, ...] = ()
54
+
55
+ def __init__(self, **kwargs):
56
+ warnings.warn(
57
+ f"{type(self).__name__} is deprecated; use "
58
+ f"processpi.calculations.heat_transfer.{self._canonical.__name__} "
59
+ f"({self._rename_note()}).",
60
+ DeprecationWarning,
61
+ stacklevel=2,
62
+ )
63
+ super().__init__(**kwargs)
64
+
65
+ @classmethod
66
+ def _rename_note(cls) -> str:
67
+ renamed = [f"{old} -> {new}" for old, new in cls._keyword_map if old != new]
68
+ return "keywords " + ", ".join(renamed) if renamed else "same keywords"
69
+
70
+ def validate_inputs(self):
71
+ for old, _new in self._keyword_map:
72
+ if old not in self.inputs:
73
+ raise ValueError(f"Missing required input: {old}")
74
+
75
+ def _canonical_inputs(self) -> Dict[str, object]:
76
+ mapped = {}
77
+ for old, new in self._keyword_map:
78
+ # Same check and message as the old class, under the old name.
79
+ self._get_value(self.inputs[old], old)
80
+ mapped[new] = self.inputs[old]
81
+ for key in self._optional:
82
+ if key in self.inputs:
83
+ mapped[key] = self.inputs[key]
84
+ return mapped
85
+
86
+ def calculate(self):
87
+ return self._canonical(**self._canonical_inputs()).calculate()
88
+
89
+
90
+ class SensibleHeatDuty(_DeprecatedHXCalculation):
91
+ """Q = m * Cp * (Tin - Tout). Deprecated: use ``SensibleDuty``."""
92
+
93
+ _canonical = SensibleDuty
94
+ _keyword_map = (
95
+ ("mass_flow_rate", "m_dot"),
96
+ ("specific_heat", "cp"),
97
+ ("t_in", "t_in"),
98
+ ("t_out", "t_out"),
99
+ )
100
+
101
+
102
+ class LatentHeatDuty(_DeprecatedHXCalculation):
103
+ """Q = m * lambda. Deprecated: use ``LatentDuty``."""
104
+
105
+ _canonical = LatentDuty
106
+ _keyword_map = (
107
+ ("mass_flow_rate", "m_dot"),
108
+ ("latent_heat", "latent_heat"),
109
+ )
110
+
111
+
112
+ class KernNusselt(_DeprecatedHXCalculation):
113
+ """Nu = 0.023 * Re^0.8 * Pr^n. Deprecated: use ``DittusBoelter``.
114
+
115
+ Despite the name this is the Dittus-Boelter tube-side correlation, the
116
+ same formula and default n = 0.4 as ``DittusBoelter``. Kern's shell-side
117
+ correlation is ``KernShellNu``.
118
+ """
119
+
120
+ _canonical = DittusBoelter
121
+ _keyword_map = (
122
+ ("reynolds", "reynolds"),
123
+ ("prandtl", "prandtl"),
124
+ )
125
+ _optional = ("n",)
126
+
127
+
128
+ class ConvectiveCoefficient(_DeprecatedHXCalculation):
129
+ """h = Nu * k / D. Deprecated: use ``ConvectiveH``."""
130
+
131
+ _canonical = ConvectiveH
132
+ _keyword_map = (
133
+ ("nusselt", "nusselt"),
134
+ ("thermal_conductivity", "k"),
135
+ ("characteristic_diameter", "diameter"),
136
+ )
137
+
138
+
139
+ class DarcyPressureDrop(_DeprecatedHXCalculation):
140
+ """dP = f * (L / D) * (rho * v^2 / 2), f the Darcy factor. Deprecated: use ``DarcyDrop``.
141
+
142
+ The old body grouped ``rho * v * v / 2`` before multiplying and
143
+ ``DarcyDrop`` multiplies left to right, so a result can differ from the
144
+ old one in the last bit or two of the float (at most 4e-16 relative over
145
+ 2700 random cases); the formula is the same.
146
+ """
147
+
148
+ _canonical = DarcyDrop
149
+ _keyword_map = (
150
+ ("friction_factor", "f"),
151
+ ("length", "length"),
152
+ ("diameter", "diameter"),
153
+ ("density", "density"),
154
+ ("velocity", "velocity"),
155
+ )
156
+
157
+
158
+ class ReynoldsFromProperties(_DeprecatedHXCalculation):
159
+ """Re = rho * v * D / mu. Deprecated: use ``Reynolds``."""
160
+
161
+ _canonical = Reynolds
162
+ _keyword_map = (
163
+ ("density", "density"),
164
+ ("velocity", "velocity"),
165
+ ("diameter", "diameter"),
166
+ ("viscosity", "viscosity"),
167
+ )
@@ -14,7 +14,9 @@ class HeatExchangerArea(CalculationBase):
14
14
  for key in required:
15
15
  if key not in self.inputs:
16
16
  raise ValueError(f"Missing required input: {key}")
17
- if self.inputs["log_mean_temp_diff"].value <= 0:
17
+ dtlm = self.inputs["log_mean_temp_diff"]
18
+ dtlm_val = dtlm.value if hasattr(dtlm, "value") else float(dtlm)
19
+ if dtlm_val <= 0:
18
20
  raise ValueError("Log mean temperature difference must be positive")
19
21
 
20
22
  def calculate(self):
@@ -0,0 +1,285 @@
1
+ from __future__ import annotations
2
+
3
+ import math
4
+
5
+ from ..base import CalculationBase
6
+ from ...units import HeatFlow, HeatTransferCoefficient, Pressure
7
+
8
+
9
+ class SensibleDuty(CalculationBase):
10
+ """Q = m * Cp * |Tin - Tout|. Replaces the deprecated ``SensibleHeatDuty``."""
11
+
12
+ def validate_inputs(self):
13
+ for key in ("m_dot", "cp", "t_in", "t_out"):
14
+ if key not in self.inputs:
15
+ raise ValueError(f"Missing required input: {key}")
16
+
17
+ def calculate(self):
18
+ m = self._get_value(self.inputs["m_dot"], "m_dot")
19
+ cp = self._get_value(self.inputs["cp"], "cp")
20
+ t_in = self._get_value(self.inputs["t_in"], "t_in")
21
+ t_out = self._get_value(self.inputs["t_out"], "t_out")
22
+ return HeatFlow(abs(m * cp * (t_in - t_out)), "W")
23
+
24
+
25
+ class LatentDuty(CalculationBase):
26
+ """Q = m * lambda. Replaces the deprecated ``LatentHeatDuty``."""
27
+
28
+ def validate_inputs(self):
29
+ for key in ("m_dot", "latent_heat"):
30
+ if key not in self.inputs:
31
+ raise ValueError(f"Missing required input: {key}")
32
+
33
+ def calculate(self):
34
+ m = self._get_value(self.inputs["m_dot"], "m_dot")
35
+ latent = self._get_value(self.inputs["latent_heat"], "latent_heat")
36
+ return HeatFlow(abs(m * latent), "W")
37
+
38
+
39
+ class Reynolds(CalculationBase):
40
+ """Re = rho * v * D / mu. Replaces the deprecated ``ReynoldsFromProperties``."""
41
+
42
+ def validate_inputs(self):
43
+ for key in ("density", "velocity", "diameter", "viscosity"):
44
+ if key not in self.inputs:
45
+ raise ValueError(f"Missing required input: {key}")
46
+
47
+ def calculate(self):
48
+ rho = self._get_value(self.inputs["density"], "density")
49
+ v = self._get_value(self.inputs["velocity"], "velocity")
50
+ d = self._get_value(self.inputs["diameter"], "diameter")
51
+ mu = self._get_value(self.inputs["viscosity"], "viscosity")
52
+ return (rho * v * d) / mu
53
+
54
+
55
+ class DittusBoelter(CalculationBase):
56
+ """Dittus-Boelter: Nu = 0.023 * Re^0.8 * Pr^n, n = 0.4 heating (default), 0.3 cooling.
57
+
58
+ Replaces the deprecated ``KernNusselt``, which was this same formula.
59
+ """
60
+
61
+ def validate_inputs(self):
62
+ for key in ("reynolds", "prandtl"):
63
+ if key not in self.inputs:
64
+ raise ValueError(f"Missing required input: {key}")
65
+
66
+ def calculate(self):
67
+ re = self._get_value(self.inputs["reynolds"], "reynolds")
68
+ pr = self._get_value(self.inputs["prandtl"], "prandtl")
69
+ n = self.inputs.get("n", 0.4)
70
+ return 0.023 * re**0.8 * pr**n
71
+
72
+ class KernShellNu(CalculationBase):
73
+ def validate_inputs(self):
74
+ for key in ("reynolds", "prandtl"):
75
+ if key not in self.inputs:
76
+ raise ValueError(f"Missing required input: {key}")
77
+
78
+ def calculate(self):
79
+ re = self._get_value(self.inputs["reynolds"], "reynolds")
80
+ pr = self._get_value(self.inputs["prandtl"], "prandtl")
81
+ return 0.36 * re**0.55 * pr**(1 / 3)
82
+
83
+
84
+ class ConvectiveH(CalculationBase):
85
+ """h = Nu * k / D. Replaces the deprecated ``ConvectiveCoefficient``."""
86
+
87
+ def validate_inputs(self):
88
+ for key in ("nusselt", "k", "diameter"):
89
+ if key not in self.inputs:
90
+ raise ValueError(f"Missing required input: {key}")
91
+
92
+ def calculate(self):
93
+ nu = self._get_value(self.inputs["nusselt"], "nusselt")
94
+ k = self._get_value(self.inputs["k"], "k")
95
+ d = self._get_value(self.inputs["diameter"], "diameter")
96
+ return HeatTransferCoefficient((nu * k) / d, "W/m2K")
97
+
98
+
99
+ class TubeCountFromArea(CalculationBase):
100
+ def validate_inputs(self):
101
+ for key in ("area", "tube_od", "tube_length"):
102
+ if key not in self.inputs:
103
+ raise ValueError(f"Missing required input: {key}")
104
+
105
+ def calculate(self):
106
+ area = self._get_value(self.inputs["area"], "area")
107
+ d_o = self._get_value(self.inputs["tube_od"], "tube_od")
108
+ l_t = self._get_value(self.inputs["tube_length"], "tube_length")
109
+ return max(1, math.ceil(area / (math.pi * d_o * l_t)))
110
+
111
+
112
+ class ShellDiameterEstimate(CalculationBase):
113
+ def validate_inputs(self):
114
+ for key in ("tube_count", "tube_pitch"):
115
+ if key not in self.inputs:
116
+ raise ValueError(f"Missing required input: {key}")
117
+
118
+ def calculate(self):
119
+ n_t = self._get_value(self.inputs["tube_count"], "tube_count")
120
+ p_t = self._get_value(self.inputs["tube_pitch"], "tube_pitch")
121
+ return 0.637 * p_t * (n_t ** 0.5)
122
+
123
+
124
+ class DarcyDrop(CalculationBase):
125
+ """Darcy-Weisbach: dP = f * (L / D) * rho * v^2 / 2.
126
+
127
+ ``f`` is the Darcy friction factor (4 times the Fanning factor).
128
+ Replaces the deprecated ``DarcyPressureDrop``.
129
+ """
130
+
131
+ def validate_inputs(self):
132
+ for key in ("f", "length", "diameter", "density", "velocity"):
133
+ if key not in self.inputs:
134
+ raise ValueError(f"Missing required input: {key}")
135
+
136
+ def calculate(self):
137
+ f = self._get_value(self.inputs["f"], "f")
138
+ l = self._get_value(self.inputs["length"], "length")
139
+ d = self._get_value(self.inputs["diameter"], "diameter")
140
+ rho = self._get_value(self.inputs["density"], "density")
141
+ v = self._get_value(self.inputs["velocity"], "velocity")
142
+ return Pressure(f * (l / d) * rho * v * v / 2.0, "Pa")
143
+
144
+
145
+ class CondensationHTC(CalculationBase):
146
+ """
147
+ Nusselt film condensation correlation
148
+ for vertical tube condensation.
149
+
150
+ Preliminary engineering approximation.
151
+ """
152
+
153
+ def validate_inputs(self):
154
+
155
+ required = (
156
+ "rho_l",
157
+ "rho_v",
158
+ "mu_l",
159
+ "k_l",
160
+ "h_fg",
161
+ "delta_t",
162
+ "length",
163
+ )
164
+
165
+ for key in required:
166
+
167
+ if key not in self.inputs:
168
+
169
+ raise ValueError(
170
+ f"Missing required input: {key}"
171
+ )
172
+
173
+ def calculate(self):
174
+
175
+ rho_l = self._get_value(
176
+ self.inputs["rho_l"],
177
+ "rho_l",
178
+ )
179
+
180
+ rho_v = self._get_value(
181
+ self.inputs["rho_v"],
182
+ "rho_v",
183
+ )
184
+
185
+ mu_l = self._get_value(
186
+ self.inputs["mu_l"],
187
+ "mu_l",
188
+ )
189
+
190
+ k_l = self._get_value(
191
+ self.inputs["k_l"],
192
+ "k_l",
193
+ )
194
+
195
+ h_fg = self._get_value(
196
+ self.inputs["h_fg"],
197
+ "h_fg",
198
+ )
199
+
200
+ delta_t = self._get_value(
201
+ self.inputs["delta_t"],
202
+ "delta_t",
203
+ )
204
+
205
+ length = self._get_value(
206
+ self.inputs["length"],
207
+ "length",
208
+ )
209
+
210
+ g = 9.81
211
+
212
+ h = 0.943 * (
213
+ (
214
+ rho_l
215
+ * (rho_l - rho_v)
216
+ * g
217
+ * h_fg
218
+ * (k_l ** 3)
219
+ )
220
+ / (
221
+ mu_l
222
+ * length
223
+ * delta_t
224
+ )
225
+ ) ** 0.25
226
+
227
+ return HeatTransferCoefficient(
228
+ h,
229
+ "W/m2K",
230
+ )
231
+
232
+ class BoilingHTC(CalculationBase):
233
+ """
234
+ Simplified boiling heat-transfer coefficient.
235
+
236
+ Preliminary engineering approximation.
237
+ """
238
+
239
+ def validate_inputs(self):
240
+
241
+ required = (
242
+ "heat_flux",
243
+ "pressure",
244
+ )
245
+
246
+ for key in required:
247
+
248
+ if key not in self.inputs:
249
+
250
+ raise ValueError(
251
+ f"Missing required input: {key}"
252
+ )
253
+
254
+ def calculate(self):
255
+
256
+ q_flux = self._get_value(
257
+ self.inputs["heat_flux"],
258
+ "heat_flux",
259
+ )
260
+
261
+ pressure = self._get_value(
262
+ self.inputs["pressure"],
263
+ "pressure",
264
+ )
265
+
266
+ # ======================================================
267
+ # SIMPLE ENGINEERING APPROXIMATION
268
+ # ======================================================
269
+
270
+ h = (
271
+ 55.0
272
+ * (q_flux ** 0.67)
273
+ * (pressure ** 0.12)
274
+ )
275
+
276
+ # prevent unrealistic values
277
+ h = max(
278
+ 1500.0,
279
+ min(h, 15000.0),
280
+ )
281
+
282
+ return HeatTransferCoefficient(
283
+ h,
284
+ "W/m2K",
285
+ )
@@ -14,9 +14,22 @@ class LMTD(CalculationBase):
14
14
  raise ValueError(f"Missing required input: {key}")
15
15
 
16
16
  def calculate(self):
17
+ eps = 1e-6
17
18
 
18
19
  dT1 = self._get_value(self.inputs["dT1"], "temperature")
19
20
  dT2 = self._get_value(self.inputs["dT2"], "temperature")
20
21
 
21
- dTlm = dT1 if dT1 == dT2 else (dT1 - dT2) / math.log(dT1 / dT2)
22
- return dTlm
22
+ if dT1 <= 0 or dT2 <= 0:
23
+ raise ValueError("Invalid temperature approach in LMTD calculation.")
24
+
25
+ dT1 = max(dT1, eps)
26
+ dT2 = max(dT2, eps)
27
+
28
+ if abs(dT1 - dT2) < eps:
29
+ return dT1
30
+
31
+ ratio = dT1 / dT2
32
+ if ratio <= 0:
33
+ raise ValueError("Invalid temperature approach in LMTD calculation.")
34
+
35
+ return (dT1 - dT2) / math.log(ratio)