Custom JSON Example¶
ExerPy can analyze data from simulation software that isn’t directly supported (like Ebsilon Professional, Aspen Plus, or TESPy). This guide explains how to structure your data in a JSON file and use ExerPy’s API to perform exergy analysis with external simulation data.
ExerPy requires specific data formatting in a JSON file. This is the required format:
{
"components": {
"ComponentClass1": {
"CompName1": {
"name": "CompName1",
"parameter1": 0.95,
"parameter2": 0.98,
},
"ComponentClass2": {
"name": "CompName2",
"parameter1": 100000,
"parameter2": 0.98,
}
},
"ComponentClass2": {
"CompName3": {
"name": "CompName3",
"parameter1": 1.0,
"parameter2": 50,
"parameter3": 120000,
}
}
},
"connections": {
"ConnectionName1": {
"name": "ConnectionName1",
"kind": "material",
"source_component": "CompName1",
"source_connector": 0,
"target_component": "CompName2",
"target_connector": 0,
"m": 10,
"m_unit": "kg / s",
"T": 400,
"T_unit": "K",
"p": 200000,
"p_unit": "Pa",
"h":180000,
"h_unit": "J / kg",
"s": 8000,
"s_unit": "J / kgK",
"e_PH": 350000.0,
"e_PH_unit": "J / kg",
"x": 1.0,
"x_unit": "-",
"mass_composition": {
"AR": 0.012818275230660559,
"CO2": 0.0003974658986251336,
"H2O": 0.006335253437165987,
"H2OG": 0.006335253437165987,
"N2": 0.7505149830789085,
"O2": 0.22993402235463978
},
"e_CH": 1200,
"e_CH_unit": "J / kg",
"E_PH": 45000,
"E_CH": 15000,
"E": 60000,
"E_unit": "W"
},
"ConnectionName2": {
...
},
},
"ambient_conditions": {
"Tamb": 288.15,
"Tamb_unit": "K",
"pamb": 1013.0,
"pamb_unit": "Pa"
}
}
Please ensure the following things:
The components should be grouped by their class (e.g., CombustionChamber, Compressor, Turbine, etc.)
Each component and each connection should have a unique name.
The connections must specify the source and target components and their respective connectors. Visit the dedicated ExerPy documentation for more details on the connectors of each component.
If you want to split the physical exergy into thermal and mechanical parts, set
"split_physical_exergy": truein the Python code and make sure that the connections contain thee_Mande_Tparameters. These values are not calculated by ExerPy, but must be provided in the JSON file!If you want to use the chemical exergy library of Ahrendts, set
"chemExLib": "Ahrendts"in the Python code.Ambient conditions (
Tambandpamb) must be provided in the JSON file.The units for all parameters should be SI units (K, bar, kg/s, kW) for consistency.
Example¶
This is an example of how to perform an exergy analysis using ExerPy with a custom JSON file. The example is based on a simple gas turbine cycle with a combustion chamber, compressor, and generator.
JSON file:
{
"components": {
"CombustionChamber": {
"CC": {
"name": "CC",
"eta_cc": 1.0,
"lamb": 2.971907640448107,
"A_unit": "m2",
"mass_flow_1": 637.8688906804568,
"mass_flow_1_unit": "W"
}
},
"Compressor": {
"COMP": {
"name": "COMP",
"eta_s": 0.9,
"eta_mech": 1.0
}
},
"Generator": {
"GEN1": {
"name": "GEN1",
"energy_flow_1": 251827804.941329
}
},
"Turbine": {
"GT": {
"name": "GT",
"eta_s": 0.92,
"eta_mech": 1.0,
"P": 493809952.3578626,
"P_unit": "W",
"mass_flow_1": 650.2399425410983
}
}
},
"connections": {
"1": {
"name": "1",
"kind": "material",
"source_component": null,
"source_connector": null,
"target_component": "COMP",
"target_connector": 0,
"m": 637.8688906804568,
"m_unit": "kg / s",
"T": 288.15,
"T_unit": "K",
"p": 101299.99999999999,
"p_unit": "Pa",
"h": 15156.141760290673,
"h_unit": "J / kg",
"s": 6869.754951010217,
"s_unit": "J / kgK",
"e_PH": 0.0,
"e_PH_unit": "J / kg",
"x": 1.0,
"x_unit": "-",
"mass_composition": {
"AR": 0.012818275230660559,
"CO2": 0.0003974658986251336,
"H2O": 0.006335253437165987,
"H2OG": 0.006335253437165987,
"N2": 0.7505149830789085,
"O2": 0.22993402235463978
},
"e_CH": 1149.2696774822346,
"e_CH_unit": "J / kg",
"E_PH": 0.0,
"E_CH": 733083.3742682794,
"E": 733083.3742682794,
"E_unit": "W"
},
"2": {
"name": "2",
"kind": "material",
"source_component": "COMP",
"source_connector": 0,
"target_component": "CC",
"target_connector": 0,
"m": 637.8688906804568,
"m_unit": "kg / s",
"T": 654.9662550204056,
"T_unit": "K",
"p": 1551000.0,
"p_unit": "Pa",
"h": 394516.46321819286,
"h_unit": "J / kg",
"s": 6929.305452009985,
"s_unit": "J / kgK",
"e_PH": 362200.8445948192,
"e_PH_unit": "J / kg",
"x": 1.0,
"x_unit": "-",
"mass_composition": {
"AR": 0.012818275230660559,
"CO2": 0.0003974658986251336,
"H2O": 0.006335253437165987,
"H2OG": 0.006335253437165987,
"N2": 0.7505149830789085,
"O2": 0.22993402235463978
},
"e_CH": 1149.2696774822346,
"e_CH_unit": "J / kg",
"E_PH": 231036650.94522184,
"E_CH": 733083.3742682794,
"E": 231769734.31949013,
"E_unit": "W"
},
"3": {
"name": "3",
"kind": "material",
"source_component": null,
"source_connector": null,
"target_component": "CC",
"target_connector": 1,
"m": 12.371051860641572,
"m_unit": "kg / s",
"T": 288.14999999999986,
"T_unit": "K",
"p": 1551000.0,
"p_unit": "Pa",
"h": 32680.856994852533,
"h_unit": "J / kg",
"s": 10125.423866937957,
"s_unit": "J / kgK",
"e_PH": 407487.22384831216,
"e_PH_unit": "J / kg",
"x": 1.0,
"x_unit": "-",
"mass_composition": {
"CH4": 1.0
},
"e_CH": 51384297.00551026,
"e_CH_unit": "J / kg",
"E_PH": 5041045.578776331,
"E_CH": 635677803.0777769,
"E": 640718848.6565533,
"E_unit": "W"
},
"4": {
"name": "4",
"kind": "material",
"source_component": "CC",
"source_connector": 0,
"target_component": "GT",
"target_connector": 0,
"m": 650.2399425410983,
"m_unit": "kg / s",
"T": 1423.1500491069728,
"T_unit": "K",
"p": 1500000.0,
"p_unit": "Pa",
"h": 1339186.0583581624,
"h_unit": "J / kg",
"s": 8044.6426189443055,
"s_unit": "J / kgK",
"e_PH": 1034298.1100852907,
"e_PH_unit": "J / kg",
"x": 1.0,
"x_unit": "-",
"mass_composition": {
"AR": 0.012574402873292333,
"CO2": 0.05258244644248185,
"H2O": 0.048944736526356544,
"H2OG": 0.048944736526356544,
"N2": 0.7362361620308293,
"O2": 0.1496622521270401
},
"e_CH": 6428.452268774877,
"e_CH_unit": "J / kg",
"E_PH": 672541943.6722261,
"E_CH": 4180036.433876369,
"E": 676721980.1061025,
"E_unit": "W"
},
"5": {
"name": "5",
"kind": "material",
"source_component": "GT",
"source_connector": 0,
"target_component": null,
"target_connector": null,
"m": 650.2399425410983,
"m_unit": "kg / s",
"T": 803.7714622065433,
"T_unit": "K",
"p": 103400.00009267079,
"p_unit": "Pa",
"h": 579758.7761335681,
"h_unit": "J / kg",
"s": 8129.874190039878,
"s_unit": "J / kgK",
"e_PH": 250311.35287950086,
"e_PH_unit": "J / kg",
"x": 1.0,
"x_unit": "-",
"mass_composition": {
"AR": 0.012574402861119481,
"CO2": 0.052582449047286525,
"H2O": 0.04894473865320185,
"H2OG": 0.04894473865320185,
"N2": 0.7362361613181042,
"O2": 0.14966224812028792
},
"e_CH": 6428.452786135837,
"e_CH_unit": "J / kg",
"E_PH": 162762439.71375123,
"E_CH": 4180036.7702851305,
"E": 166942476.48403636,
"E_unit": "W"
},
"E1": {
"name": "E1",
"kind": "power",
"source_component": "GEN1",
"source_connector": 0,
"target_component": null,
"target_connector": null,
"energy_flow": 248050387.8672091,
"energy_flow_unit": "W",
"E": 248050387.8672091,
"E_unit": "W"
},
"W1": {
"name": "W1",
"kind": "power",
"source_component": "GT",
"source_connector": 1,
"target_component": "COMP",
"target_connector": 3,
"energy_flow": 241982147.4165336,
"energy_flow_unit": "W",
"E": 241982147.4165336,
"E_unit": "W"
},
"W2": {
"name": "W2",
"kind": "power",
"source_component": "GT",
"source_connector": 2,
"target_component": "GEN1",
"target_component_type": 11,
"target_connector": 0,
"energy_flow": 251827804.941329,
"energy_flow_unit": "W",
"E": 251827804.941329,
"E_unit": "W"
}
},
"ambient_conditions": {
"Tamb": 288.15,
"Tamb_unit": "K",
"pamb": 1013.0,
"pamb_unit": "Pa"
}
}
Python file:
model_path = 'example.json'
ean = ExergyAnalysis.from_json(model_path, split_physical_exergy=False)
fuel = {
"inputs": ['1', '3'],
"outputs": []
}
product = {
"inputs": ['E1'],
"outputs": []
}
loss = {
"inputs": ['5'],
"outputs": []
}
ean.analyse(E_F=fuel, E_P=product, E_L=loss)
ean.exergy_results()