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.
- {energysystemmodels-20260416003 → energysystemmodels-20260416004}/PKG-INFO +1 -1
- {energysystemmodels-20260416003 → energysystemmodels-20260416004}/setup.py +1 -1
- {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/PV/ProductionElectriquePV.py +158 -57
- energysystemmodels-20260416004/src/ThermodynamicCycles/Combustion/NG_Heating_Value.py +130 -0
- {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/energysystemmodels.egg-info/PKG-INFO +1 -1
- {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/energysystemmodels.egg-info/SOURCES.txt +1 -1
- {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/energysystemmodels.egg-info/top_level.txt +0 -1
- energysystemmodels-20260416003/src/EnergySystemModels/__init__.py +0 -35
- {energysystemmodels-20260416003 → energysystemmodels-20260416004}/LICENSE +0 -0
- {energysystemmodels-20260416003 → energysystemmodels-20260416004}/README.md +0 -0
- {energysystemmodels-20260416003 → energysystemmodels-20260416004}/setup.cfg +0 -0
- {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/AHU/AirPort/AirPort.py +0 -0
- {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/AHU/AirPort/__init__.py +0 -0
- {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/AHU/Coil/CoolingCoil.py +0 -0
- {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/AHU/Coil/CoolingCoil_Expert.py +0 -0
- {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/AHU/Coil/CoolingCoil_Sensible.py +0 -0
- {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/AHU/Coil/CoolingCoil_Tc.py +0 -0
- {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/AHU/Coil/HeatingCoil.py +0 -0
- {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/AHU/Coil/HeatingCoilNUT.py +0 -0
- {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/AHU/Coil/__init__.py +0 -0
- {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/AHU/Connect.py +0 -0
- {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/AHU/FreshAir/AirMix.py +0 -0
- {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/AHU/FreshAir/FreshAir.py +0 -0
- {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/AHU/FreshAir/__init__.py +0 -0
- {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/AHU/GenericAHU/AirRecoveryAHU.py +0 -0
- {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/AHU/GenericAHU/AirRecyclingAHU.py +0 -0
- {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/AHU/GenericAHU/__init__.py +0 -0
- {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/AHU/HeatRecovery/Heat_plate_exchanger.py +0 -0
- {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/AHU/HeatRecovery/Thermal_wheel_exchanger.py +0 -0
- {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/AHU/HeatRecovery/__init__.py +0 -0
- {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/AHU/Humidification/Humidifier.py +0 -0
- {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/AHU/Humidification/__init__.py +0 -0
- {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/AHU/__init__.py +0 -0
- {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/AHU/air_humide/PsychrometricChart.py +0 -0
- {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/AHU/air_humide/__init__.py +0 -0
- {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/AHU/air_humide/air_humide.py +0 -0
- {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/AHU/air_humide/air_humide_NB.py +0 -0
- {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/CEE/CEE.py +0 -0
- {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/CEE/__init__.py +0 -0
- {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/Distillation/Deethanizer.py +0 -0
- {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/Distillation/PengRobinson.py +0 -0
- {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/Distillation/__init__.py +0 -0
- {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/Distillation/diag_enthalpy_models.py +0 -0
- {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/Distillation/reverse_engineer_enthalpies.py +0 -0
- {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/Facture/ATR_Transport_Distribution.py +0 -0
- {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/Facture/SONALGAZ_Elec.py +0 -0
- {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/Facture/SONALGAZ_gaz.py +0 -0
- {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/Facture/TURPE.py +0 -0
- {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/Facture/__init__.py +0 -0
- {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/Facture/coefficients_elec.json +0 -0
- {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/Facture/coefficients_gaz_ATRD.json +0 -0
- {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/Facture/coefficients_gaz_ATRT.json +0 -0
- {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/Facture/coefficients_gaz_TICGN.json +0 -0
- {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/Facture/coefficients_gaz_TVA.json +0 -0
- {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/Facture/coefficients_sonalgaz_elec.json +0 -0
- {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/Facture/coefficients_sonalgaz_gaz.json +0 -0
- {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/Facture/df_utils.py +0 -0
- {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/Facture/test.py +0 -0
- {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/HeatTransfer/CompositeWall.py +0 -0
- {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/HeatTransfer/ParallelepipedicBody.py +0 -0
- {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/HeatTransfer/PipeInsulationAnalysis.py +0 -0
- {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/HeatTransfer/PlateHeatTransfer.py +0 -0
- {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/HeatTransfer/__init__.py +0 -0
- {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/IPMVP/IPMVP.py +0 -0
- {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/IPMVP/__init__.py +0 -0
- {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/MeteoCiel/DJU_costic.py +0 -0
- {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/MeteoCiel/MeteoCiel_Scraping.py +0 -0
- {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/MeteoCiel/MeteoCiel_dayScraping.py +0 -0
- {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/MeteoCiel/__init__.py +0 -0
- {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/NodeEditor/__init__.py +0 -0
- {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/NodeEditor/nodeeditor/__init__.py +0 -0
- {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/NodeEditor/nodeeditor/node_content_widget.py +0 -0
- {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/NodeEditor/nodeeditor/node_edge.py +0 -0
- {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/NodeEditor/nodeeditor/node_edge_dragging.py +0 -0
- {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/NodeEditor/nodeeditor/node_edge_validators.py +0 -0
- {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/NodeEditor/nodeeditor/node_editor_widget.py +0 -0
- {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/NodeEditor/nodeeditor/node_editor_window.py +0 -0
- {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/NodeEditor/nodeeditor/node_graphics_cutline.py +0 -0
- {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/NodeEditor/nodeeditor/node_graphics_edge.py +0 -0
- {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/NodeEditor/nodeeditor/node_graphics_edge_path.py +0 -0
- {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/NodeEditor/nodeeditor/node_graphics_node.py +0 -0
- {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/NodeEditor/nodeeditor/node_graphics_scene.py +0 -0
- {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/NodeEditor/nodeeditor/node_graphics_socket.py +0 -0
- {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/NodeEditor/nodeeditor/node_graphics_view.py +0 -0
- {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/NodeEditor/nodeeditor/node_node.py +0 -0
- {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/NodeEditor/nodeeditor/node_scene.py +0 -0
- {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/NodeEditor/nodeeditor/node_scene_clipboard.py +0 -0
- {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/NodeEditor/nodeeditor/node_scene_history.py +0 -0
- {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/NodeEditor/nodeeditor/node_serializable.py +0 -0
- {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/NodeEditor/nodeeditor/node_socket.py +0 -0
- {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/NodeEditor/nodeeditor/utils.py +0 -0
- {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/NodeEditor/setup.py +0 -0
- {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/NodeEditor/tests/__init__.py +0 -0
- {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/NodeEditor/tests/test_000_import.py +0 -0
- {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/NodeEditor/tox.ini +0 -0
- {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/OpenWeatherMap/OpenWeatherMap_call.py +0 -0
- {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/OpenWeatherMap/OpenWeatherMap_call_location.py +0 -0
- {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/OpenWeatherMap/SQlite_OpenWeatherMap.py +0 -0
- {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/OpenWeatherMap/__init__.py +0 -0
- {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/OpenWeatherMap/config.ini +0 -0
- {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/OpenWeatherMap/config_historical.ini +0 -0
- {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/OpenWeatherMap/data.json +0 -0
- {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/OpenWeatherMap/get_weather.py +0 -0
- {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/PV/__init__.py +0 -0
- {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/PinchAnalysis/PinchAnalysis.py +0 -0
- {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/PinchAnalysis/__init__.py +0 -0
- {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/PinchAnalysis/functions/Two_flow_pinch_analysis.py +0 -0
- {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/PinchAnalysis/functions/__init__.py +0 -0
- {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/PinchAnalysis/functions/apply_heat_exchange_above.py +0 -0
- {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/PinchAnalysis/functions/apply_heat_exchange_below.py +0 -0
- {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/PinchAnalysis/functions/calculation_HEN.py +0 -0
- {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/PinchAnalysis/functions/calculation_allowed_combinations.py +0 -0
- {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/PinchAnalysis/functions/calculation_below_above_stream.py +0 -0
- {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/PinchAnalysis/functions/calculation_composite_curve.py +0 -0
- {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/PinchAnalysis/functions/calculation_decomposition.py +0 -0
- {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/PinchAnalysis/functions/calculation_graphical_HEN.py +0 -0
- {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/PinchAnalysis/functions/calculation_surplus_deficit.py +0 -0
- {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/PinchAnalysis/functions/check_additional_heat_exchanges.py +0 -0
- {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/PinchAnalysis/functions/draw_hen_from_df.py +0 -0
- {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/PinchAnalysis/functions/plotting.py +0 -0
- {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/PyqtSimulator/__init__.py +0 -0
- {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/PyqtSimulator/calc_conf.py +0 -0
- {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/PyqtSimulator/calc_drag_listbox.py +0 -0
- {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/PyqtSimulator/calc_node_base.py +0 -0
- {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/PyqtSimulator/calc_sub_window.py +0 -0
- {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/PyqtSimulator/calc_window.py +0 -0
- {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/PyqtSimulator/config.ini +0 -0
- {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/PyqtSimulator/main.py +0 -0
- {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/PyqtSimulator/nodes/Simple_HEX.py +0 -0
- {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/PyqtSimulator/nodes/__init__.py +0 -0
- {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/PyqtSimulator/nodes/air_input.py +0 -0
- {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/PyqtSimulator/nodes/air_mixer.py +0 -0
- {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/PyqtSimulator/nodes/air_output.py +0 -0
- {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/PyqtSimulator/nodes/compressor.py +0 -0
- {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/PyqtSimulator/nodes/compressor_m.py +0 -0
- {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/PyqtSimulator/nodes/condenser.py +0 -0
- {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/PyqtSimulator/nodes/cooling_coil.py +0 -0
- {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/PyqtSimulator/nodes/cooling_coil_expert.py +0 -0
- {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/PyqtSimulator/nodes/cooling_coil_sensible.py +0 -0
- {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/PyqtSimulator/nodes/desuperheater.py +0 -0
- {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/PyqtSimulator/nodes/evaporator.py +0 -0
- {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/PyqtSimulator/nodes/expansion_valve.py +0 -0
- {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/PyqtSimulator/nodes/heating_coil.py +0 -0
- {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/PyqtSimulator/nodes/humidificateur.py +0 -0
- {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/PyqtSimulator/nodes/input.py +0 -0
- {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/PyqtSimulator/nodes/operations.py +0 -0
- {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/PyqtSimulator/nodes/output.py +0 -0
- {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/PyqtSimulator/nodes/random_meteo.py +0 -0
- {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/PyqtSimulator/nodes/source_P_h.py +0 -0
- {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/PyqtSimulator/nodes/turbine.py +0 -0
- {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/ThermodynamicCycles/Aeraulic/StraightPipe.py +0 -0
- {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/ThermodynamicCycles/Aeraulic/__init__.py +0 -0
- {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/ThermodynamicCycles/Carnot_Cycle_Analysis.py +0 -0
- {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/ThermodynamicCycles/Chiller.py +0 -0
- {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/ThermodynamicCycles/Combustion/Combustor_cantera.py +0 -0
- {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/ThermodynamicCycles/Combustion/Gaz_Boiler.py +0 -0
- {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/ThermodynamicCycles/Combustion/__init__.py +0 -0
- {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/ThermodynamicCycles/Compressor/Compressor.py +0 -0
- {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/ThermodynamicCycles/Compressor/Compressor_m.py +0 -0
- {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/ThermodynamicCycles/Compressor/__init__.py +0 -0
- {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/ThermodynamicCycles/Condenser/Condenser.py +0 -0
- {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/ThermodynamicCycles/Condenser/__init__.py +0 -0
- {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/ThermodynamicCycles/Connect.py +0 -0
- {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/ThermodynamicCycles/Desuperheater/Desuperheater.py +0 -0
- {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/ThermodynamicCycles/Desuperheater/__init__.py +0 -0
- {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/ThermodynamicCycles/Evaporator/Evaporator.py +0 -0
- {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/ThermodynamicCycles/Evaporator/__init__.py +0 -0
- {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/ThermodynamicCycles/Expansion_Valve/Expansion_Valve.py +0 -0
- {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/ThermodynamicCycles/Expansion_Valve/__init__.py +0 -0
- {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/ThermodynamicCycles/FluidPort/FluidPort.py +0 -0
- {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/ThermodynamicCycles/FluidPort/__init__.py +0 -0
- {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/ThermodynamicCycles/HEX/AirCooled_HEX.py +0 -0
- {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/ThermodynamicCycles/HEX/DTLM_HEX.py +0 -0
- {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/ThermodynamicCycles/HEX/NUT_HEX.py +0 -0
- {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/ThermodynamicCycles/HEX/Simple_HEX.py +0 -0
- {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/ThermodynamicCycles/HEX/__init__.py +0 -0
- {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/ThermodynamicCycles/Hydraulic/StraightPipe.py +0 -0
- {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/ThermodynamicCycles/Hydraulic/TA_Valve.py +0 -0
- {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/ThermodynamicCycles/Hydraulic/__init__.py +0 -0
- {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/ThermodynamicCycles/Pump/Pump.py +0 -0
- {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/ThermodynamicCycles/Pump/Pump_m.py +0 -0
- {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/ThermodynamicCycles/Pump/__init__.py +0 -0
- {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/ThermodynamicCycles/Sink/Sink.py +0 -0
- {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/ThermodynamicCycles/Sink/__init__.py +0 -0
- {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/ThermodynamicCycles/Source/Source.py +0 -0
- {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/ThermodynamicCycles/Source/__init__.py +0 -0
- {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/ThermodynamicCycles/Tank/MixedStorage.py +0 -0
- {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/ThermodynamicCycles/Tank/__init__.py +0 -0
- {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/ThermodynamicCycles/Temperature_Entropy_Chart.py +0 -0
- {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/ThermodynamicCycles/Turbine/Turbine.py +0 -0
- {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/ThermodynamicCycles/Turbine/__init__.py +0 -0
- {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/ThermodynamicCycles/__init__.py +0 -0
- {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/TkinterGUI/Chiller.py +0 -0
- {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/TkinterGUI/__init__.py +0 -0
- {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/energysystemmodels.egg-info/dependency_links.txt +0 -0
- {energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/energysystemmodels.egg-info/requires.txt +0 -0
- {energysystemmodels-20260416003 → energysystemmodels-20260416004}/test/test_api_diagnostic.py +0 -0
- {energysystemmodels-20260416003 → energysystemmodels-20260416004}/test/test_api_key.py +0 -0
- {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:
|
|
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='
|
|
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
|
|
{energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/PV/ProductionElectriquePV.py
RENAMED
|
@@ -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 =
|
|
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,
|
|
152
|
-
|
|
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
|
|
159
|
+
Nombre de modules dans l'installation.
|
|
159
160
|
module_wc : float or None
|
|
160
|
-
Puissance crete d'un module en Wc.
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
Cout d'exploitation annuel (EUR/
|
|
166
|
-
tarif_elec_eur_mwh : float
|
|
167
|
-
Prix de l'electricite
|
|
168
|
-
|
|
169
|
-
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
ax.
|
|
281
|
-
|
|
282
|
-
ax.
|
|
283
|
-
ax.
|
|
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:
|
|
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,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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/AHU/AirPort/AirPort.py
RENAMED
|
File without changes
|
{energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/AHU/AirPort/__init__.py
RENAMED
|
File without changes
|
{energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/AHU/Coil/CoolingCoil.py
RENAMED
|
File without changes
|
{energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/AHU/Coil/CoolingCoil_Expert.py
RENAMED
|
File without changes
|
|
File without changes
|
{energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/AHU/Coil/CoolingCoil_Tc.py
RENAMED
|
File without changes
|
{energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/AHU/Coil/HeatingCoil.py
RENAMED
|
File without changes
|
{energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/AHU/Coil/HeatingCoilNUT.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/AHU/FreshAir/AirMix.py
RENAMED
|
File without changes
|
{energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/AHU/FreshAir/FreshAir.py
RENAMED
|
File without changes
|
{energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/AHU/FreshAir/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/AHU/GenericAHU/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/AHU/HeatRecovery/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/AHU/Humidification/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/AHU/air_humide/__init__.py
RENAMED
|
File without changes
|
{energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/AHU/air_humide/air_humide.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/Distillation/Deethanizer.py
RENAMED
|
File without changes
|
{energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/Distillation/PengRobinson.py
RENAMED
|
File without changes
|
{energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/Distillation/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/Facture/SONALGAZ_Elec.py
RENAMED
|
File without changes
|
{energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/Facture/SONALGAZ_gaz.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/Facture/coefficients_elec.json
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{energysystemmodels-20260416003 → energysystemmodels-20260416004}/src/HeatTransfer/CompositeWall.py
RENAMED
|
File without changes
|
|
File without changes
|