EnergySystemModels 20260416003__tar.gz → 20260416004__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 (199) hide show
  1. {energysystemmodels-20260416003 → energysystemmodels-20260416004}/PKG-INFO +1 -1
  2. {energysystemmodels-20260416003 → energysystemmodels-20260416004}/setup.py +1 -1
  3. {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/PV/ProductionElectriquePV.py +158 -57
  4. energysystemmodels-20260416004/src/ThermodynamicCycles/Combustion/NG_Heating_Value.py +130 -0
  5. {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/energysystemmodels.egg-info/PKG-INFO +1 -1
  6. {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/energysystemmodels.egg-info/SOURCES.txt +1 -1
  7. {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/energysystemmodels.egg-info/top_level.txt +0 -1
  8. energysystemmodels-20260416003/src/EnergySystemModels/__init__.py +0 -35
  9. {energysystemmodels-20260416003 → energysystemmodels-20260416004}/LICENSE +0 -0
  10. {energysystemmodels-20260416003 → energysystemmodels-20260416004}/README.md +0 -0
  11. {energysystemmodels-20260416003 → energysystemmodels-20260416004}/setup.cfg +0 -0
  12. {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/AHU/AirPort/AirPort.py +0 -0
  13. {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/AHU/AirPort/__init__.py +0 -0
  14. {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/AHU/Coil/CoolingCoil.py +0 -0
  15. {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/AHU/Coil/CoolingCoil_Expert.py +0 -0
  16. {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/AHU/Coil/CoolingCoil_Sensible.py +0 -0
  17. {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/AHU/Coil/CoolingCoil_Tc.py +0 -0
  18. {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/AHU/Coil/HeatingCoil.py +0 -0
  19. {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/AHU/Coil/HeatingCoilNUT.py +0 -0
  20. {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/AHU/Coil/__init__.py +0 -0
  21. {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/AHU/Connect.py +0 -0
  22. {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/AHU/FreshAir/AirMix.py +0 -0
  23. {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/AHU/FreshAir/FreshAir.py +0 -0
  24. {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/AHU/FreshAir/__init__.py +0 -0
  25. {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/AHU/GenericAHU/AirRecoveryAHU.py +0 -0
  26. {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/AHU/GenericAHU/AirRecyclingAHU.py +0 -0
  27. {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/AHU/GenericAHU/__init__.py +0 -0
  28. {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/AHU/HeatRecovery/Heat_plate_exchanger.py +0 -0
  29. {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/AHU/HeatRecovery/Thermal_wheel_exchanger.py +0 -0
  30. {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/AHU/HeatRecovery/__init__.py +0 -0
  31. {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/AHU/Humidification/Humidifier.py +0 -0
  32. {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/AHU/Humidification/__init__.py +0 -0
  33. {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/AHU/__init__.py +0 -0
  34. {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/AHU/air_humide/PsychrometricChart.py +0 -0
  35. {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/AHU/air_humide/__init__.py +0 -0
  36. {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/AHU/air_humide/air_humide.py +0 -0
  37. {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/AHU/air_humide/air_humide_NB.py +0 -0
  38. {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/CEE/CEE.py +0 -0
  39. {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/CEE/__init__.py +0 -0
  40. {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/Distillation/Deethanizer.py +0 -0
  41. {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/Distillation/PengRobinson.py +0 -0
  42. {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/Distillation/__init__.py +0 -0
  43. {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/Distillation/diag_enthalpy_models.py +0 -0
  44. {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/Distillation/reverse_engineer_enthalpies.py +0 -0
  45. {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/Facture/ATR_Transport_Distribution.py +0 -0
  46. {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/Facture/SONALGAZ_Elec.py +0 -0
  47. {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/Facture/SONALGAZ_gaz.py +0 -0
  48. {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/Facture/TURPE.py +0 -0
  49. {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/Facture/__init__.py +0 -0
  50. {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/Facture/coefficients_elec.json +0 -0
  51. {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/Facture/coefficients_gaz_ATRD.json +0 -0
  52. {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/Facture/coefficients_gaz_ATRT.json +0 -0
  53. {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/Facture/coefficients_gaz_TICGN.json +0 -0
  54. {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/Facture/coefficients_gaz_TVA.json +0 -0
  55. {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/Facture/coefficients_sonalgaz_elec.json +0 -0
  56. {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/Facture/coefficients_sonalgaz_gaz.json +0 -0
  57. {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/Facture/df_utils.py +0 -0
  58. {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/Facture/test.py +0 -0
  59. {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/HeatTransfer/CompositeWall.py +0 -0
  60. {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/HeatTransfer/ParallelepipedicBody.py +0 -0
  61. {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/HeatTransfer/PipeInsulationAnalysis.py +0 -0
  62. {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/HeatTransfer/PlateHeatTransfer.py +0 -0
  63. {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/HeatTransfer/__init__.py +0 -0
  64. {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/IPMVP/IPMVP.py +0 -0
  65. {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/IPMVP/__init__.py +0 -0
  66. {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/MeteoCiel/DJU_costic.py +0 -0
  67. {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/MeteoCiel/MeteoCiel_Scraping.py +0 -0
  68. {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/MeteoCiel/MeteoCiel_dayScraping.py +0 -0
  69. {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/MeteoCiel/__init__.py +0 -0
  70. {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/NodeEditor/__init__.py +0 -0
  71. {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/NodeEditor/nodeeditor/__init__.py +0 -0
  72. {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/NodeEditor/nodeeditor/node_content_widget.py +0 -0
  73. {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/NodeEditor/nodeeditor/node_edge.py +0 -0
  74. {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/NodeEditor/nodeeditor/node_edge_dragging.py +0 -0
  75. {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/NodeEditor/nodeeditor/node_edge_validators.py +0 -0
  76. {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/NodeEditor/nodeeditor/node_editor_widget.py +0 -0
  77. {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/NodeEditor/nodeeditor/node_editor_window.py +0 -0
  78. {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/NodeEditor/nodeeditor/node_graphics_cutline.py +0 -0
  79. {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/NodeEditor/nodeeditor/node_graphics_edge.py +0 -0
  80. {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/NodeEditor/nodeeditor/node_graphics_edge_path.py +0 -0
  81. {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/NodeEditor/nodeeditor/node_graphics_node.py +0 -0
  82. {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/NodeEditor/nodeeditor/node_graphics_scene.py +0 -0
  83. {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/NodeEditor/nodeeditor/node_graphics_socket.py +0 -0
  84. {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/NodeEditor/nodeeditor/node_graphics_view.py +0 -0
  85. {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/NodeEditor/nodeeditor/node_node.py +0 -0
  86. {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/NodeEditor/nodeeditor/node_scene.py +0 -0
  87. {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/NodeEditor/nodeeditor/node_scene_clipboard.py +0 -0
  88. {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/NodeEditor/nodeeditor/node_scene_history.py +0 -0
  89. {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/NodeEditor/nodeeditor/node_serializable.py +0 -0
  90. {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/NodeEditor/nodeeditor/node_socket.py +0 -0
  91. {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/NodeEditor/nodeeditor/utils.py +0 -0
  92. {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/NodeEditor/setup.py +0 -0
  93. {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/NodeEditor/tests/__init__.py +0 -0
  94. {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/NodeEditor/tests/test_000_import.py +0 -0
  95. {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/NodeEditor/tox.ini +0 -0
  96. {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/OpenWeatherMap/OpenWeatherMap_call.py +0 -0
  97. {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/OpenWeatherMap/OpenWeatherMap_call_location.py +0 -0
  98. {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/OpenWeatherMap/SQlite_OpenWeatherMap.py +0 -0
  99. {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/OpenWeatherMap/__init__.py +0 -0
  100. {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/OpenWeatherMap/config.ini +0 -0
  101. {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/OpenWeatherMap/config_historical.ini +0 -0
  102. {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/OpenWeatherMap/data.json +0 -0
  103. {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/OpenWeatherMap/get_weather.py +0 -0
  104. {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/PV/__init__.py +0 -0
  105. {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/PinchAnalysis/PinchAnalysis.py +0 -0
  106. {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/PinchAnalysis/__init__.py +0 -0
  107. {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/PinchAnalysis/functions/Two_flow_pinch_analysis.py +0 -0
  108. {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/PinchAnalysis/functions/__init__.py +0 -0
  109. {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/PinchAnalysis/functions/apply_heat_exchange_above.py +0 -0
  110. {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/PinchAnalysis/functions/apply_heat_exchange_below.py +0 -0
  111. {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/PinchAnalysis/functions/calculation_HEN.py +0 -0
  112. {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/PinchAnalysis/functions/calculation_allowed_combinations.py +0 -0
  113. {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/PinchAnalysis/functions/calculation_below_above_stream.py +0 -0
  114. {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/PinchAnalysis/functions/calculation_composite_curve.py +0 -0
  115. {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/PinchAnalysis/functions/calculation_decomposition.py +0 -0
  116. {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/PinchAnalysis/functions/calculation_graphical_HEN.py +0 -0
  117. {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/PinchAnalysis/functions/calculation_surplus_deficit.py +0 -0
  118. {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/PinchAnalysis/functions/check_additional_heat_exchanges.py +0 -0
  119. {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/PinchAnalysis/functions/draw_hen_from_df.py +0 -0
  120. {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/PinchAnalysis/functions/plotting.py +0 -0
  121. {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/PyqtSimulator/__init__.py +0 -0
  122. {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/PyqtSimulator/calc_conf.py +0 -0
  123. {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/PyqtSimulator/calc_drag_listbox.py +0 -0
  124. {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/PyqtSimulator/calc_node_base.py +0 -0
  125. {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/PyqtSimulator/calc_sub_window.py +0 -0
  126. {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/PyqtSimulator/calc_window.py +0 -0
  127. {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/PyqtSimulator/config.ini +0 -0
  128. {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/PyqtSimulator/main.py +0 -0
  129. {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/PyqtSimulator/nodes/Simple_HEX.py +0 -0
  130. {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/PyqtSimulator/nodes/__init__.py +0 -0
  131. {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/PyqtSimulator/nodes/air_input.py +0 -0
  132. {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/PyqtSimulator/nodes/air_mixer.py +0 -0
  133. {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/PyqtSimulator/nodes/air_output.py +0 -0
  134. {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/PyqtSimulator/nodes/compressor.py +0 -0
  135. {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/PyqtSimulator/nodes/compressor_m.py +0 -0
  136. {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/PyqtSimulator/nodes/condenser.py +0 -0
  137. {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/PyqtSimulator/nodes/cooling_coil.py +0 -0
  138. {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/PyqtSimulator/nodes/cooling_coil_expert.py +0 -0
  139. {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/PyqtSimulator/nodes/cooling_coil_sensible.py +0 -0
  140. {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/PyqtSimulator/nodes/desuperheater.py +0 -0
  141. {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/PyqtSimulator/nodes/evaporator.py +0 -0
  142. {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/PyqtSimulator/nodes/expansion_valve.py +0 -0
  143. {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/PyqtSimulator/nodes/heating_coil.py +0 -0
  144. {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/PyqtSimulator/nodes/humidificateur.py +0 -0
  145. {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/PyqtSimulator/nodes/input.py +0 -0
  146. {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/PyqtSimulator/nodes/operations.py +0 -0
  147. {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/PyqtSimulator/nodes/output.py +0 -0
  148. {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/PyqtSimulator/nodes/random_meteo.py +0 -0
  149. {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/PyqtSimulator/nodes/source_P_h.py +0 -0
  150. {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/PyqtSimulator/nodes/turbine.py +0 -0
  151. {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/ThermodynamicCycles/Aeraulic/StraightPipe.py +0 -0
  152. {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/ThermodynamicCycles/Aeraulic/__init__.py +0 -0
  153. {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/ThermodynamicCycles/Carnot_Cycle_Analysis.py +0 -0
  154. {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/ThermodynamicCycles/Chiller.py +0 -0
  155. {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/ThermodynamicCycles/Combustion/Combustor_cantera.py +0 -0
  156. {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/ThermodynamicCycles/Combustion/Gaz_Boiler.py +0 -0
  157. {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/ThermodynamicCycles/Combustion/__init__.py +0 -0
  158. {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/ThermodynamicCycles/Compressor/Compressor.py +0 -0
  159. {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/ThermodynamicCycles/Compressor/Compressor_m.py +0 -0
  160. {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/ThermodynamicCycles/Compressor/__init__.py +0 -0
  161. {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/ThermodynamicCycles/Condenser/Condenser.py +0 -0
  162. {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/ThermodynamicCycles/Condenser/__init__.py +0 -0
  163. {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/ThermodynamicCycles/Connect.py +0 -0
  164. {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/ThermodynamicCycles/Desuperheater/Desuperheater.py +0 -0
  165. {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/ThermodynamicCycles/Desuperheater/__init__.py +0 -0
  166. {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/ThermodynamicCycles/Evaporator/Evaporator.py +0 -0
  167. {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/ThermodynamicCycles/Evaporator/__init__.py +0 -0
  168. {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/ThermodynamicCycles/Expansion_Valve/Expansion_Valve.py +0 -0
  169. {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/ThermodynamicCycles/Expansion_Valve/__init__.py +0 -0
  170. {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/ThermodynamicCycles/FluidPort/FluidPort.py +0 -0
  171. {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/ThermodynamicCycles/FluidPort/__init__.py +0 -0
  172. {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/ThermodynamicCycles/HEX/AirCooled_HEX.py +0 -0
  173. {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/ThermodynamicCycles/HEX/DTLM_HEX.py +0 -0
  174. {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/ThermodynamicCycles/HEX/NUT_HEX.py +0 -0
  175. {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/ThermodynamicCycles/HEX/Simple_HEX.py +0 -0
  176. {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/ThermodynamicCycles/HEX/__init__.py +0 -0
  177. {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/ThermodynamicCycles/Hydraulic/StraightPipe.py +0 -0
  178. {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/ThermodynamicCycles/Hydraulic/TA_Valve.py +0 -0
  179. {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/ThermodynamicCycles/Hydraulic/__init__.py +0 -0
  180. {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/ThermodynamicCycles/Pump/Pump.py +0 -0
  181. {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/ThermodynamicCycles/Pump/Pump_m.py +0 -0
  182. {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/ThermodynamicCycles/Pump/__init__.py +0 -0
  183. {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/ThermodynamicCycles/Sink/Sink.py +0 -0
  184. {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/ThermodynamicCycles/Sink/__init__.py +0 -0
  185. {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/ThermodynamicCycles/Source/Source.py +0 -0
  186. {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/ThermodynamicCycles/Source/__init__.py +0 -0
  187. {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/ThermodynamicCycles/Tank/MixedStorage.py +0 -0
  188. {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/ThermodynamicCycles/Tank/__init__.py +0 -0
  189. {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/ThermodynamicCycles/Temperature_Entropy_Chart.py +0 -0
  190. {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/ThermodynamicCycles/Turbine/Turbine.py +0 -0
  191. {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/ThermodynamicCycles/Turbine/__init__.py +0 -0
  192. {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/ThermodynamicCycles/__init__.py +0 -0
  193. {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/TkinterGUI/Chiller.py +0 -0
  194. {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/TkinterGUI/__init__.py +0 -0
  195. {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/energysystemmodels.egg-info/dependency_links.txt +0 -0
  196. {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/energysystemmodels.egg-info/requires.txt +0 -0
  197. {energysystemmodels-20260416003 → energysystemmodels-20260416004}/test/test_api_diagnostic.py +0 -0
  198. {energysystemmodels-20260416003 → energysystemmodels-20260416004}/test/test_api_key.py +0 -0
  199. {energysystemmodels-20260416003 → energysystemmodels-20260416004}/test/test_compare_keys.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: energysystemmodels
3
- Version: 20260416003
3
+ Version: 20260416004
4
4
  Summary: Energy systems models are the mathematical models that are developed in order to represent as reliably as possible various energy-related problems.
5
5
  Author: Zoheir HADID
6
6
  Author-email: zoheir.hadid@gmail.com
@@ -11,7 +11,7 @@ setup(
11
11
  name='energysystemmodels',
12
12
 
13
13
 
14
- version='20260416003',
14
+ version='20260416004',
15
15
 
16
16
  description='Energy systems models are the mathematical models that are developed in order to represent as reliably as possible various energy-related problems.',
17
17
 
@@ -121,7 +121,7 @@ class SolarSystem:
121
121
  self.ac = pvlib.inverter.sandia(self.dc['v_mp'], self.dc['p_mp'], self.inverter)
122
122
  #print("puissance CA (courant alternatif)", self.ac)
123
123
  # Calcul de l'énergie annuelle
124
- self.annual_energy = -self.ac.sum()
124
+ self.annual_energy = self.ac.sum()
125
125
 
126
126
  module_area = self.module['Area'] if self.module is not None else 0
127
127
  module_wc = self.module['Impo'] * self.module['Vmpo'] if self.module is not None else 0
@@ -148,30 +148,26 @@ class SolarSystem:
148
148
  'Productivite (kWh/kWc/an)',
149
149
  ])
150
150
 
151
- def summary(self, nb_modules=1, module_wc=None, capex_eur_kwc=1200,
152
- opex_eur_kwc=15, tarif_elec_eur_mwh=120, taux_autoconso=0.80):
151
+ def summary(self, nb_modules=1, module_wc=None,
152
+ capex_eur_m2=None, opex_eur_m2=None,
153
+ tarif_elec_eur_mwh=None, duree_vie=25):
153
154
  """Retourne un DataFrame de synthese technique et economique.
154
155
 
155
156
  Parameters
156
157
  ----------
157
158
  nb_modules : int
158
- Nombre de modules dans l'installation (defaut 1).
159
+ Nombre de modules dans l'installation.
159
160
  module_wc : float or None
160
- Puissance crete d'un module en Wc. Si None, deduite de
161
- self.module['Impo'] * self.module['Vmpo'] (parametres STC).
162
- capex_eur_kwc : float
163
- Cout d'investissement (EUR/kWc TTC pose comprise).
164
- opex_eur_kwc : float
165
- Cout d'exploitation annuel (EUR/kWc/an).
166
- tarif_elec_eur_mwh : float
167
- Prix de l'electricite evitee (EUR/MWh).
168
- taux_autoconso : float
169
- Fraction de la production autoconsommee (0-1).
170
-
171
- Returns
172
- -------
173
- pd.DataFrame
174
- Tableau a deux colonnes (Indicateur, Valeur).
161
+ Puissance crete d'un module en Wc.
162
+ capex_eur_m2 : float or None
163
+ Cout d'investissement par m2 de panneau installe (EUR/m2).
164
+ Si None, pas d'analyse economique.
165
+ opex_eur_m2 : float or None
166
+ Cout d'exploitation annuel par m2 (EUR/m2/an).
167
+ tarif_elec_eur_mwh : float or None
168
+ Prix de l'electricite valorisee (EUR/MWh).
169
+ duree_vie : int
170
+ Duree de vie du projet en annees (defaut 25 ans).
175
171
  """
176
172
  if module_wc is None:
177
173
  module_wc = self.module['Impo'] * self.module['Vmpo']
@@ -183,18 +179,9 @@ class SolarSystem:
183
179
  module_area = self.module['Area'] if self.module is not None else 1.65
184
180
  surface_m2 = nb_modules * module_area
185
181
 
186
- capex = puissance_kwc * capex_eur_kwc
187
- opex = puissance_kwc * opex_eur_kwc
188
- eco_annuelle = prod_totale_mwh * taux_autoconso * tarif_elec_eur_mwh
189
- gain_net = eco_annuelle - opex
190
- tri = capex / gain_net if gain_net > 0 else np.inf
191
-
192
182
  rows = [
183
+ ("--- SIMULATION ---", ""),
193
184
  ("Site", self.name),
194
- ("Latitude", f"{self.latitude:.3f} deg"),
195
- ("Longitude", f"{self.longitude:.3f} deg"),
196
- ("Azimut", f"{self.azimut} deg"),
197
- ("Inclinaison", f"{self.inclinaison} deg"),
198
185
  ("Module", self.module.name if self.module is not None else "N/A"),
199
186
  ("Surface module", f"{module_area:.3f} m2"),
200
187
  ("Nb modules", nb_modules),
@@ -203,15 +190,106 @@ class SolarSystem:
203
190
  ("Production / module", f"{prod_module_kwh:.1f} kWh/an"),
204
191
  ("Productivite specifique", f"{productivite:.0f} kWh/kWc/an"),
205
192
  ("Production totale", f"{prod_totale_mwh:.1f} MWh/an"),
206
- ("Taux autoconsommation", f"{taux_autoconso*100:.0f} %"),
207
- ("CAPEX", f"{capex/1000:.0f} kEUR"),
208
- ("OPEX annuel", f"{opex/1000:.1f} kEUR/an"),
209
- ("Economies annuelles", f"{eco_annuelle/1000:.1f} kEUR/an"),
210
- ("Gain net annuel", f"{gain_net/1000:.1f} kEUR/an"),
211
- ("TRI simple", f"{tri:.1f} ans"),
212
193
  ]
194
+
195
+ if all(v is not None for v in [capex_eur_m2, opex_eur_m2,
196
+ tarif_elec_eur_mwh]):
197
+ capex = surface_m2 * capex_eur_m2
198
+ opex = surface_m2 * opex_eur_m2
199
+ valorisation = prod_totale_mwh * tarif_elec_eur_mwh
200
+ gain_net = valorisation - opex
201
+ payback = capex / gain_net if gain_net > 0 else np.inf
202
+ roi = ((gain_net * duree_vie - capex) / capex * 100) if capex > 0 else 0
203
+
204
+ # TRI : taux r tel que sum(gain_net/(1+r)^t, t=1..N) = capex
205
+ tri = 0.0
206
+ if gain_net > 0 and capex > 0:
207
+ from scipy.optimize import brentq
208
+ def npv(r):
209
+ return sum(gain_net / (1 + r) ** t
210
+ for t in range(1, duree_vie + 1)) - capex
211
+ try:
212
+ tri = brentq(npv, -0.5, 5.0) * 100
213
+ except Exception:
214
+ tri = 0.0
215
+
216
+ rows += [
217
+ ("--- HYPOTHESES ECO ---", ""),
218
+ ("CAPEX", f"{capex_eur_m2} EUR/m2"),
219
+ ("OPEX", f"{opex_eur_m2} EUR/m2/an"),
220
+ ("Tarif electricite", f"{tarif_elec_eur_mwh} EUR/MWh"),
221
+ ("Duree de vie", f"{duree_vie} ans"),
222
+ ("--- RESULTATS ECO ---", ""),
223
+ ("Investissement", f"{capex/1000:.0f} kEUR"),
224
+ ("Valorisation annuelle", f"{valorisation/1000:.1f} kEUR/an"),
225
+ ("OPEX annuel", f"{opex/1000:.1f} kEUR/an"),
226
+ ("Gain net annuel", f"{gain_net/1000:.1f} kEUR/an"),
227
+ ("Payback", f"{payback:.1f} ans"),
228
+ ("ROI ({0} ans)".format(duree_vie), f"{roi:.0f} %"),
229
+ ("TRI", f"{tri:.1f} %"),
230
+ ]
231
+
213
232
  return pd.DataFrame(rows, columns=["Indicateur", "Valeur"])
214
233
 
234
+ def plot(self, figsize=(14, 5), nb_modules=1):
235
+ """Trace la production horaire AC et le profil mensuel."""
236
+ ac_kw = self.ac * nb_modules / 1000
237
+
238
+ fig, (ax1, ax2) = plt.subplots(1, 2, figsize=figsize)
239
+
240
+ ax1.plot(ac_kw.values, linewidth=0.3)
241
+ ax1.set_xlabel('Heure de l\'annee')
242
+ ax1.set_ylabel('Production AC (kW)')
243
+ ax1.set_title(f'{self.name} - Production horaire ({nb_modules} modules)')
244
+ ax1.grid(True, alpha=0.3)
245
+
246
+ monthly = ac_kw.resample('ME').sum()
247
+ total_mwh = abs(ac_kw.sum()) / 1000
248
+ ax2.bar(range(len(monthly)), monthly.values, color='orange')
249
+ ax2.set_xticks(range(len(monthly)))
250
+ ax2.set_xticklabels(['J','F','M','A','M','J','J','A','S','O','N','D'][:len(monthly)])
251
+ ax2.set_ylabel('Production mensuelle (kWh)')
252
+ ax2.set_title(f'{self.name} - Profil mensuel | Total : {total_mwh:.1f} MWh/an')
253
+ ax2.grid(axis='y', alpha=0.3)
254
+
255
+ plt.tight_layout()
256
+ plt.show()
257
+ return fig
258
+
259
+ def to_excel(self, filename=None, nb_modules=1):
260
+ """Exporte la production horaire en fichier Excel.
261
+
262
+ Parameters
263
+ ----------
264
+ filename : str or None
265
+ Chemin du fichier. Si None, genere '{name}_production.xlsx'.
266
+ nb_modules : int
267
+ Nombre de modules (defaut 1).
268
+
269
+ Returns
270
+ -------
271
+ str
272
+ Chemin du fichier cree.
273
+ """
274
+ if filename is None:
275
+ filename = f"{self.name.replace(' ', '_')}_production.xlsx"
276
+
277
+ df_export = pd.DataFrame({
278
+ 'Production_AC_kW': self.ac * nb_modules / 1000,
279
+ 'Irradiance_POA_W_m2': self.total_irradiance['poa_global'],
280
+ 'T_cellule_C': self.cell_temperature,
281
+ 'T_air_C': self.weather['temp_air'],
282
+ })
283
+ df_export.index.name = 'datetime_utc'
284
+
285
+ with pd.ExcelWriter(filename, engine='openpyxl') as writer:
286
+ df_export.to_excel(writer, sheet_name='Horaire')
287
+ df_export.resample('ME').sum().to_excel(writer, sheet_name='Mensuel')
288
+ self.df.to_excel(writer, sheet_name='Synthese')
289
+
290
+ print(f"Export : {filename}")
291
+ return filename
292
+
215
293
  def plot_annual_energy(self):
216
294
  energies = pd.Series({self.name: self.annual_energy})
217
295
  energies.plot(kind='bar', rot=0)
@@ -219,7 +297,7 @@ class SolarSystem:
219
297
 
220
298
  @staticmethod
221
299
  def orientation_study(latitude, longitude, name, altitude, timezone,
222
- scenarios, save_fig=None):
300
+ scenarios):
223
301
  """Etude parametrique d'orientation et d'inclinaison.
224
302
 
225
303
  Parameters
@@ -228,16 +306,17 @@ class SolarSystem:
228
306
  Parametres du site (identiques a __init__).
229
307
  scenarios : list[dict]
230
308
  Liste de dicts avec cles 'nom', 'azimut', 'inclinaison'.
231
- Exemple : [{'nom': 'Sud 35', 'azimut': 180, 'inclinaison': 35}]
232
- save_fig : str or None
233
- Chemin du fichier image a sauvegarder. Si None, pas de sauvegarde.
234
309
 
235
310
  Returns
236
311
  -------
237
- pd.DataFrame
312
+ df : pd.DataFrame
238
313
  Tableau comparatif trie par production decroissante.
314
+ df_monthly : pd.DataFrame
315
+ Production mensuelle (kWh/kWc) par scenario (colonnes)
316
+ et par mois (index).
239
317
  """
240
318
  resultats = []
319
+ monthly_data = {}
241
320
  for sc in scenarios:
242
321
  pv = SolarSystem(
243
322
  latitude=latitude, longitude=longitude,
@@ -246,12 +325,15 @@ class SolarSystem:
246
325
  azimut=sc['azimut'], inclinaison=sc['inclinaison']
247
326
  )
248
327
  pv.retrieve_module_inverter_data()
249
- pv.retrieve_weather_data()
250
328
  pv.calculate_solar_parameters()
251
329
 
252
330
  module_wc = pv.module['Impo'] * pv.module['Vmpo']
253
- prod_kwh_kwc = pv.annual_energy / 1000 / (module_wc / 1000)
331
+ ac_kwh_kwc = pv.ac / module_wc
332
+ monthly = ac_kwh_kwc.resample('ME').sum()
333
+ monthly.index = range(1, len(monthly) + 1)
334
+ monthly_data[sc['nom']] = monthly
254
335
 
336
+ prod_kwh_kwc = pv.annual_energy / 1000 / (module_wc / 1000)
255
337
  resultats.append({
256
338
  'Configuration': sc['nom'],
257
339
  'Azimut (deg)': sc['azimut'],
@@ -267,23 +349,42 @@ class SolarSystem:
267
349
  df = df.sort_values('Production (kWh/kWc/an)', ascending=False)
268
350
  df = df.reset_index(drop=True)
269
351
 
270
- # Graphique comparatif
352
+ df_monthly = pd.DataFrame(monthly_data)
353
+ return df, df_monthly
354
+
355
+ @staticmethod
356
+ def plot_orientation_study(df, df_monthly, name='', save_fig=None):
357
+ """Trace les profils mensuels par orientation.
358
+
359
+ Parameters
360
+ ----------
361
+ df : pd.DataFrame
362
+ Resultat de orientation_study() (tableau annuel).
363
+ df_monthly : pd.DataFrame
364
+ Profils mensuels par scenario.
365
+ name : str
366
+ Nom du site (pour le titre).
367
+ save_fig : str or None
368
+ Chemin fichier image. Si None, pas de sauvegarde.
369
+ """
271
370
  fig, ax = plt.subplots(figsize=(12, 6))
272
- colors = ['green' if i == 0 else 'orange'
273
- for i in range(len(df))]
274
- ax.bar(range(len(df)), df['Production (kWh/kWc/an)'],
275
- color=colors)
276
- ax.set_xticks(range(len(df)))
277
- ax.set_xticklabels(df['Configuration'], rotation=45, ha='right')
278
- ax.set_ylabel('Production annuelle (kWh/kWc/an)')
279
- ax.set_title(f'Comparaison productivite PV selon orientation - {name}')
280
- ax.axhline(y=prod_max, color='green', linestyle='--', alpha=0.5,
281
- label='Production optimale')
282
- ax.legend()
283
- ax.grid(axis='y', alpha=0.3)
371
+ mois_labels = ['Jan','Fev','Mar','Avr','Mai','Jun',
372
+ 'Jul','Aou','Sep','Oct','Nov','Dec']
373
+ totaux = df.set_index('Configuration')['Production (kWh/kWc/an)']
374
+ for col in df_monthly.columns:
375
+ total = totaux.get(col, df_monthly[col].sum())
376
+ ax.plot(df_monthly.index, df_monthly[col], 'o-',
377
+ linewidth=1.5, markersize=4,
378
+ label=f'{col} ({total:.0f} kWh/kWc/an)')
379
+ ax.set_xticks(range(1, len(df_monthly) + 1))
380
+ ax.set_xticklabels(mois_labels[:len(df_monthly)])
381
+ ax.set_xlabel('Mois')
382
+ ax.set_ylabel('Production mensuelle (kWh/kWc)')
383
+ ax.set_title(f'Profil mensuel par orientation - {name}')
384
+ ax.legend(fontsize=11)
385
+ ax.grid(True, alpha=0.3)
284
386
  fig.tight_layout()
285
387
  if save_fig:
286
388
  fig.savefig(save_fig, dpi=150)
287
389
  plt.show()
288
-
289
- return df
390
+ return fig
@@ -0,0 +1,130 @@
1
+ import pandas as pd
2
+ import re
3
+ from typing import List
4
+
5
+ class NG_Heating_Value:
6
+
7
+ # Masse atomique en g/mol
8
+ atomic_weights = {"C":12.011, "H":1.00794, "O":15.9994, "N":14.00674}
9
+
10
+ @staticmethod
11
+ def molar_mass(formula):
12
+ """Calcule la masse molaire d'une formule chimique simple (C,H,O,N)"""
13
+ formula_clean = formula.replace("n-","").replace("i-","").replace("neo-","")
14
+ matches = re.findall(r'([CHON])(\d*)', formula_clean)
15
+ mass = 0
16
+ for elem, num in matches:
17
+ n = int(num) if num else 1
18
+ mass += NG_Heating_Value.atomic_weights[elem] * n
19
+ return mass
20
+
21
+ # Données des composants
22
+ data = [
23
+ ["Methane", "CH4", 891.56, 802.69, 0.0447, 2.232],
24
+ ["Ethane", "C2H6", 1562.14, 1428.84, 0.0922, 1.756],
25
+ ["Propane", "C3H8", 2221.10, 2043.37, 0.1338, 1.685],
26
+ ["n-Butane", "n-C4H10", 2879.76, 2657.60, 0.1871, 1.731],
27
+ ["i-Butane", "i-C4H10", 2870.58, 2648.42, 0.1789, 1.693],
28
+ ["n-Pentane", "n-C5H12", 3538.60, 3272.00, 0.251, 2.313],
29
+ ["i-Pentane", "i-C5H12", 3531.68, 3265.08, 0.228, 2.313],
30
+ ["neo-Pentane", "neo-C5H12", 3517.43, 3250.83, 0.2121, 2.313],
31
+ ["n-Hexane", "n-C6H14", 4198.24, 3887.21, 0.295, 2.259],
32
+ ["Nitrogen", "N2", 0.0, 0.0, 0.0173, 1.025],
33
+ ["Carbon dioxide", "CO2", 0.0, 0.0, 0.0748, 0.650],
34
+ ["Hydrogen", "H2", 286.15, 241.72, -0.0048, 10.140]
35
+ ]
36
+ columns = ["Component","Formula","HHV","LHV","b_factor","Cp"]
37
+ df = pd.DataFrame(data, columns=columns)
38
+
39
+ class GasComponent:
40
+ """Classe interne pour représenter un composant gazeux"""
41
+ def __init__(self, formula: str, x: float):
42
+ self.formula = formula
43
+ self.x = x
44
+ # Masse molaire
45
+ self.M = NG_Heating_Value.molar_mass(formula)
46
+ # Chercher les propriétés dans le DataFrame
47
+ row = NG_Heating_Value.df.loc[NG_Heating_Value.df['Formula'] == formula]
48
+ if not row.empty:
49
+ self.HHV = row['HHV'].values[0]
50
+ self.LHV = row['LHV'].values[0]
51
+ self.b = row['b_factor'].values[0]
52
+ self.Cp = row['Cp'].values[0]
53
+ else:
54
+ self.HHV = 0
55
+ self.LHV = 0
56
+ self.b = 0
57
+ self.Cp = 0
58
+
59
+ def __init__(self, comps: List['NG_Heating_Value.GasComponent']):
60
+ self.c = comps
61
+
62
+ def M_mix(self):
63
+ return sum(ci.x * ci.M for ci in self.c)
64
+
65
+ def Cp_mix(self):
66
+ return sum(ci.x * ci.Cp for ci in self.c)
67
+
68
+ def HHV_mol(self):
69
+ return sum(ci.x * ci.HHV for ci in self.c)
70
+
71
+ def LHV_mol(self):
72
+ return sum(ci.x * ci.LHV for ci in self.c)
73
+
74
+ def sum_b(self):
75
+ return sum(ci.x * ci.b for ci in self.c)
76
+
77
+ def Z(self):
78
+ return 1 - self.sum_b()**2
79
+
80
+ def to_dataframe(self):
81
+ M = self.M_mix()
82
+ Cp = self.Cp_mix()
83
+ Hs = self.HHV_mol()
84
+ Hi = self.LHV_mol()
85
+ Z = self.Z()
86
+ R = 8.314510
87
+ P = 101.325
88
+ T = 273.15
89
+ M_AIR = 28.9626
90
+ Z_AIR = 0.99958
91
+
92
+ HHV_vol_MJ_Nm3 = Hs * P / (R * T)
93
+ LHV_vol_MJ_Nm3 = Hi * P / (R * T)
94
+ HHV_vol_real_MJ_Nm3 = HHV_vol_MJ_Nm3 / Z
95
+ LHV_vol_real_MJ_Nm3 = LHV_vol_MJ_Nm3 / Z
96
+ HHV_vol_kWh_Nm3 = HHV_vol_real_MJ_Nm3 / 3.6
97
+ LHV_vol_kWh_Nm3 = LHV_vol_real_MJ_Nm3 / 3.6
98
+
99
+ density = (P / (R * T)) * M
100
+ density_real = density / Z
101
+ d_rel = M / M_AIR
102
+ relative_d_rel = d_rel * Z_AIR / Z
103
+
104
+ HHV_mass_MJ_kg = Hs / M
105
+ LHV_mass_MJ_kg = Hi / M
106
+
107
+ Wobbe_index = HHV_vol_MJ_Nm3 / (d_rel ** 0.5)
108
+ Wobbe_real = (HHV_vol_MJ_Nm3 / Z) / (relative_d_rel ** 0.5)
109
+
110
+ data = [
111
+ ["Cp", Cp, "J/kg/K"],
112
+ ["Z mix", Z, "-"],
113
+ ["HHV mass (PCS)", HHV_mass_MJ_kg, "MJ/kg"],
114
+ ["LHV mass (PCI)", LHV_mass_MJ_kg, "MJ/kg"],
115
+ ["HHV vol", HHV_vol_MJ_Nm3, "MJ/Nm3"],
116
+ ["LHV vol", LHV_vol_MJ_Nm3, "MJ/Nm3"],
117
+ ["HHV real", HHV_vol_real_MJ_Nm3, "MJ/Nm3"],
118
+ ["LHV real", LHV_vol_real_MJ_Nm3, "MJ/Nm3"],
119
+ ["HHV vol", HHV_vol_kWh_Nm3, "kWh/Nm3"],
120
+ ["LHV vol", LHV_vol_kWh_Nm3, "kWh/Nm3"],
121
+ ["Density", density, "kg/Nm3"],
122
+ ["Density real", density_real, "kg/Nm3"],
123
+ ["Relative density", d_rel, "-"],
124
+ ["Relative density real", relative_d_rel, "-"],
125
+ ["Wobbe index", Wobbe_index, "MJ/Nm3"],
126
+ ["Wobbe real", Wobbe_real, "MJ/Nm3"],
127
+ ]
128
+ return pd.DataFrame(data, columns=["Property", "Value", "Unit"])
129
+
130
+
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: energysystemmodels
3
- Version: 20260416003
3
+ Version: 20260416004
4
4
  Summary: Energy systems models are the mathematical models that are developed in order to represent as reliably as possible various energy-related problems.
5
5
  Author: Zoheir HADID
6
6
  Author-email: zoheir.hadid@gmail.com
@@ -34,7 +34,6 @@ src/Distillation/PengRobinson.py
34
34
  src/Distillation/__init__.py
35
35
  src/Distillation/diag_enthalpy_models.py
36
36
  src/Distillation/reverse_engineer_enthalpies.py
37
- src/EnergySystemModels/__init__.py
38
37
  src/Facture/ATR_Transport_Distribution.py
39
38
  src/Facture/SONALGAZ_Elec.py
40
39
  src/Facture/SONALGAZ_gaz.py
@@ -151,6 +150,7 @@ src/ThermodynamicCycles/Aeraulic/StraightPipe.py
151
150
  src/ThermodynamicCycles/Aeraulic/__init__.py
152
151
  src/ThermodynamicCycles/Combustion/Combustor_cantera.py
153
152
  src/ThermodynamicCycles/Combustion/Gaz_Boiler.py
153
+ src/ThermodynamicCycles/Combustion/NG_Heating_Value.py
154
154
  src/ThermodynamicCycles/Combustion/__init__.py
155
155
  src/ThermodynamicCycles/Compressor/Compressor.py
156
156
  src/ThermodynamicCycles/Compressor/Compressor_m.py
@@ -1,7 +1,6 @@
1
1
  AHU
2
2
  CEE
3
3
  Distillation
4
- EnergySystemModels
5
4
  Facture
6
5
  HeatTransfer
7
6
  IPMVP
@@ -1,35 +0,0 @@
1
- """EnergySystemModels - Namespace package for energy system modeling.
2
-
3
- This package re-exports all sub-packages so that both import styles work:
4
- from EnergySystemModels.PV.ProductionElectriquePV import SolarSystem
5
- from PV.ProductionElectriquePV import SolarSystem # legacy
6
- """
7
-
8
- import importlib
9
- import sys
10
- import os
11
-
12
- # Add src/ to path so sub-packages resolve
13
- _src_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
14
- if _src_dir not in sys.path:
15
- sys.path.insert(0, _src_dir)
16
-
17
- # Lazy re-export of all sub-packages
18
- _subpackages = [
19
- 'AHU', 'CEE', 'Distillation', 'Facture', 'HeatTransfer',
20
- 'IPMVP', 'MeteoCiel', 'NodeEditor', 'OpenWeatherMap', 'PV',
21
- 'PinchAnalysis', 'PyqtSimulator', 'ThermodynamicCycles', 'TkinterGUI',
22
- ]
23
-
24
- for _pkg in _subpackages:
25
- try:
26
- _mod = importlib.import_module(_pkg)
27
- sys.modules[f'EnergySystemModels.{_pkg}'] = _mod
28
- # Also register sub-modules already loaded
29
- _prefix = f'{_pkg}.'
30
- for _key in list(sys.modules.keys()):
31
- if _key.startswith(_prefix):
32
- _subname = _key[len(_prefix):]
33
- sys.modules[f'EnergySystemModels.{_pkg}.{_subname}'] = sys.modules[_key]
34
- except ImportError:
35
- pass