processforge 0.3.11__tar.gz → 0.3.13__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 (134) hide show
  1. {processforge-0.3.11/src/processforge.egg-info → processforge-0.3.13}/PKG-INFO +2 -3
  2. processforge-0.3.13/flowsheets/custom/crimson/MUWS_HB.json +216 -0
  3. processforge-0.3.13/flowsheets/custom/simple_hyrdaulic_scheme.json +202 -0
  4. {processforge-0.3.11 → processforge-0.3.13}/flowsheets/festim/hydrogen_transport_1d.json +24 -25
  5. processforge-0.3.13/flowsheets/festim/tds_tungsten.json +136 -0
  6. {processforge-0.3.11 → processforge-0.3.13}/pyproject.toml +2 -4
  7. {processforge-0.3.11 → processforge-0.3.13}/src/processforge/__init__.py +1 -1
  8. {processforge-0.3.11 → processforge-0.3.13}/src/processforge/api/serve.py +11 -22
  9. {processforge-0.3.11 → processforge-0.3.13}/src/processforge/cli/apply.py +24 -10
  10. {processforge-0.3.11 → processforge-0.3.13}/src/processforge/cli/common.py +9 -9
  11. {processforge-0.3.11 → processforge-0.3.13}/src/processforge/cli/run.py +64 -22
  12. {processforge-0.3.11 → processforge-0.3.13}/src/processforge/eo/flowsheet.py +36 -1
  13. {processforge-0.3.11 → processforge-0.3.13}/src/processforge/eo/jacobian.py +9 -5
  14. {processforge-0.3.11 → processforge-0.3.13}/src/processforge/flowsheet.py +50 -1
  15. processforge-0.3.13/src/processforge/output_collector.py +97 -0
  16. processforge-0.3.13/src/processforge/persistence/__init__.py +7 -0
  17. processforge-0.3.13/src/processforge/persistence/archive.py +166 -0
  18. processforge-0.3.13/src/processforge/persistence/artifact_store.py +132 -0
  19. {processforge-0.3.11 → processforge-0.3.13}/src/processforge/providers/base.py +5 -4
  20. {processforge-0.3.11 → processforge-0.3.13}/src/processforge/providers/container_client.py +34 -16
  21. processforge-0.3.13/src/processforge/providers/festim_provider.py +925 -0
  22. {processforge-0.3.11 → processforge-0.3.13}/src/processforge/providers/openmc_provider.py +85 -41
  23. processforge-0.3.13/src/processforge/quantity.py +104 -0
  24. processforge-0.3.13/src/processforge/schemas/festim/festim_model.py +717 -0
  25. {processforge-0.3.11 → processforge-0.3.13}/src/processforge/types.py +154 -23
  26. {processforge-0.3.11 → processforge-0.3.13}/src/processforge/units/__init__.py +3 -0
  27. {processforge-0.3.11 → processforge-0.3.13}/src/processforge/units/solver_unit.py +9 -4
  28. {processforge-0.3.11 → processforge-0.3.13}/src/processforge/utils/validate_flowsheet.py +31 -89
  29. {processforge-0.3.11 → processforge-0.3.13/src/processforge.egg-info}/PKG-INFO +2 -3
  30. {processforge-0.3.11 → processforge-0.3.13}/src/processforge.egg-info/SOURCES.txt +10 -0
  31. {processforge-0.3.11 → processforge-0.3.13}/src/processforge.egg-info/requires.txt +1 -3
  32. {processforge-0.3.11 → processforge-0.3.13}/tests/test_cli.py +5 -5
  33. processforge-0.3.13/tests/test_festim_provider.py +873 -0
  34. processforge-0.3.13/tests/test_festim_schema.py +341 -0
  35. {processforge-0.3.11 → processforge-0.3.13}/tests/test_types.py +40 -21
  36. processforge-0.3.11/src/processforge/providers/festim_provider.py +0 -411
  37. processforge-0.3.11/tests/test_festim_provider.py +0 -596
  38. {processforge-0.3.11 → processforge-0.3.13}/LICENSE +0 -0
  39. {processforge-0.3.11 → processforge-0.3.13}/MANIFEST.in +0 -0
  40. {processforge-0.3.11 → processforge-0.3.13}/README.md +0 -0
  41. {processforge-0.3.11 → processforge-0.3.13}/flowsheets/closed-loop-chain.json +0 -0
  42. {processforge-0.3.11 → processforge-0.3.13}/flowsheets/hydraulic-chain.json +0 -0
  43. {processforge-0.3.11 → processforge-0.3.13}/flowsheets/openmc/msre_eigenvalue.json +0 -0
  44. {processforge-0.3.11 → processforge-0.3.13}/setup.cfg +0 -0
  45. {processforge-0.3.11 → processforge-0.3.13}/src/processforge/__main__.py +0 -0
  46. {processforge-0.3.11 → processforge-0.3.13}/src/processforge/_schema.py +0 -0
  47. {processforge-0.3.11 → processforge-0.3.13}/src/processforge/analysis/__init__.py +0 -0
  48. {processforge-0.3.11 → processforge-0.3.13}/src/processforge/analysis/dof.py +0 -0
  49. {processforge-0.3.11 → processforge-0.3.13}/src/processforge/api/__init__.py +0 -0
  50. {processforge-0.3.11 → processforge-0.3.13}/src/processforge/cli/__init__.py +0 -0
  51. {processforge-0.3.11 → processforge-0.3.13}/src/processforge/cli/diagram.py +0 -0
  52. {processforge-0.3.11 → processforge-0.3.13}/src/processforge/cli/display.py +0 -0
  53. {processforge-0.3.11 → processforge-0.3.13}/src/processforge/cli/export_fmu.py +0 -0
  54. {processforge-0.3.11 → processforge-0.3.13}/src/processforge/cli/export_modelica.py +0 -0
  55. {processforge-0.3.11 → processforge-0.3.13}/src/processforge/cli/init.py +0 -0
  56. {processforge-0.3.11 → processforge-0.3.13}/src/processforge/cli/plan.py +0 -0
  57. {processforge-0.3.11 → processforge-0.3.13}/src/processforge/cli/validate.py +0 -0
  58. {processforge-0.3.11 → processforge-0.3.13}/src/processforge/compose.py +0 -0
  59. {processforge-0.3.11 → processforge-0.3.13}/src/processforge/eo/__init__.py +0 -0
  60. {processforge-0.3.11 → processforge-0.3.13}/src/processforge/eo/backends/__init__.py +0 -0
  61. {processforge-0.3.11 → processforge-0.3.13}/src/processforge/eo/backends/base.py +0 -0
  62. {processforge-0.3.11 → processforge-0.3.13}/src/processforge/eo/backends/casadi_backend.py +0 -0
  63. {processforge-0.3.11 → processforge-0.3.13}/src/processforge/eo/backends/pyomo_backend.py +0 -0
  64. {processforge-0.3.11 → processforge-0.3.13}/src/processforge/eo/backends/scipy_backend.py +0 -0
  65. {processforge-0.3.11 → processforge-0.3.13}/src/processforge/eo/mixin.py +0 -0
  66. {processforge-0.3.11 → processforge-0.3.13}/src/processforge/eo/solver.py +0 -0
  67. {processforge-0.3.11 → processforge-0.3.13}/src/processforge/eo/stream_var.py +0 -0
  68. {processforge-0.3.11 → processforge-0.3.13}/src/processforge/eo/units/__init__.py +0 -0
  69. {processforge-0.3.11 → processforge-0.3.13}/src/processforge/eo/units/flash_eo.py +0 -0
  70. {processforge-0.3.11 → processforge-0.3.13}/src/processforge/eo/units/heater_eo.py +0 -0
  71. {processforge-0.3.11 → processforge-0.3.13}/src/processforge/eo/units/pipes_eo.py +0 -0
  72. {processforge-0.3.11 → processforge-0.3.13}/src/processforge/eo/units/pump_eo.py +0 -0
  73. {processforge-0.3.11 → processforge-0.3.13}/src/processforge/eo/units/strainer_eo.py +0 -0
  74. {processforge-0.3.11 → processforge-0.3.13}/src/processforge/eo/units/valve_eo.py +0 -0
  75. {processforge-0.3.11 → processforge-0.3.13}/src/processforge/fmu/__init__.py +0 -0
  76. {processforge-0.3.11 → processforge-0.3.13}/src/processforge/fmu/_fmi_vars.py +0 -0
  77. {processforge-0.3.11 → processforge-0.3.13}/src/processforge/fmu/builder.py +0 -0
  78. {processforge-0.3.11 → processforge-0.3.13}/src/processforge/fmu/slave_template.py +0 -0
  79. {processforge-0.3.11 → processforge-0.3.13}/src/processforge/lock.py +0 -0
  80. {processforge-0.3.11 → processforge-0.3.13}/src/processforge/modelica/__init__.py +0 -0
  81. {processforge-0.3.11 → processforge-0.3.13}/src/processforge/modelica/mo_writer.py +0 -0
  82. {processforge-0.3.11 → processforge-0.3.13}/src/processforge/modelica/omc_runner.py +0 -0
  83. {processforge-0.3.11 → processforge-0.3.13}/src/processforge/modelica/transpiler.py +0 -0
  84. {processforge-0.3.11 → processforge-0.3.13}/src/processforge/modelica/unit_equations.py +0 -0
  85. {processforge-0.3.11 → processforge-0.3.13}/src/processforge/pcl/__init__.py +0 -0
  86. {processforge-0.3.11 → processforge-0.3.13}/src/processforge/pcl/compiler.py +0 -0
  87. {processforge-0.3.11 → processforge-0.3.13}/src/processforge/pcl/namespace.py +0 -0
  88. {processforge-0.3.11 → processforge-0.3.13}/src/processforge/provenance.py +0 -0
  89. {processforge-0.3.11 → processforge-0.3.13}/src/processforge/providers/__init__.py +0 -0
  90. {processforge-0.3.11 → processforge-0.3.13}/src/processforge/providers/base_jacobian_mixin.py +0 -0
  91. {processforge-0.3.11 → processforge-0.3.13}/src/processforge/providers/cantera_jacobian.py +0 -0
  92. {processforge-0.3.11 → processforge-0.3.13}/src/processforge/providers/cantera_provider.py +0 -0
  93. {processforge-0.3.11 → processforge-0.3.13}/src/processforge/providers/coolprop_provider.py +0 -0
  94. {processforge-0.3.11 → processforge-0.3.13}/src/processforge/providers/jacobian_contributor.py +0 -0
  95. {processforge-0.3.11 → processforge-0.3.13}/src/processforge/providers/manager.py +0 -0
  96. {processforge-0.3.11 → processforge-0.3.13}/src/processforge/providers/modelica_jacobian.py +0 -0
  97. {processforge-0.3.11 → processforge-0.3.13}/src/processforge/providers/modelica_provider.py +0 -0
  98. {processforge-0.3.11 → processforge-0.3.13}/src/processforge/providers/reference_state_registry.py +0 -0
  99. {processforge-0.3.11 → processforge-0.3.13}/src/processforge/providers/registry.py +0 -0
  100. {processforge-0.3.11 → processforge-0.3.13}/src/processforge/result.py +0 -0
  101. {processforge-0.3.11 → processforge-0.3.13}/src/processforge/result_schema.py +0 -0
  102. {processforge-0.3.11 → processforge-0.3.13}/src/processforge/schemas/__init__.py +0 -0
  103. {processforge-0.3.11 → processforge-0.3.13}/src/processforge/schemas/flowsheet_schema.json +0 -0
  104. {processforge-0.3.11 → processforge-0.3.13}/src/processforge/schemas/openmc/openmc_model.py +0 -0
  105. {processforge-0.3.11 → processforge-0.3.13}/src/processforge/simulate.py +0 -0
  106. {processforge-0.3.11 → processforge-0.3.13}/src/processforge/solver.py +0 -0
  107. {processforge-0.3.11 → processforge-0.3.13}/src/processforge/state.py +0 -0
  108. {processforge-0.3.11 → processforge-0.3.13}/src/processforge/thermo.py +0 -0
  109. {processforge-0.3.11 → processforge-0.3.13}/src/processforge/units/base.py +0 -0
  110. {processforge-0.3.11 → processforge-0.3.13}/src/processforge/units/cstr.py +0 -0
  111. {processforge-0.3.11 → processforge-0.3.13}/src/processforge/units/flash.py +0 -0
  112. {processforge-0.3.11 → processforge-0.3.13}/src/processforge/units/heater.py +0 -0
  113. {processforge-0.3.11 → processforge-0.3.13}/src/processforge/units/pfr.py +0 -0
  114. {processforge-0.3.11 → processforge-0.3.13}/src/processforge/units/pipes.py +0 -0
  115. {processforge-0.3.11 → processforge-0.3.13}/src/processforge/units/pump.py +0 -0
  116. {processforge-0.3.11 → processforge-0.3.13}/src/processforge/units/registry.py +0 -0
  117. {processforge-0.3.11 → processforge-0.3.13}/src/processforge/units/strainer.py +0 -0
  118. {processforge-0.3.11 → processforge-0.3.13}/src/processforge/units/tank.py +0 -0
  119. {processforge-0.3.11 → processforge-0.3.13}/src/processforge/units/valve.py +0 -0
  120. {processforge-0.3.11 → processforge-0.3.13}/src/processforge/utils/__init__.py +0 -0
  121. {processforge-0.3.11 → processforge-0.3.13}/src/processforge/utils/flowsheet_diagram.py +0 -0
  122. {processforge-0.3.11 → processforge-0.3.13}/src/processforge/utils/mermaid_diagram.py +0 -0
  123. {processforge-0.3.11 → processforge-0.3.13}/src/processforge/utils/s3_upload.py +0 -0
  124. {processforge-0.3.11 → processforge-0.3.13}/src/processforge/utils/topology.py +0 -0
  125. {processforge-0.3.11 → processforge-0.3.13}/src/processforge/utils/unit_consistency.py +0 -0
  126. {processforge-0.3.11 → processforge-0.3.13}/src/processforge/utils/validation.py +0 -0
  127. {processforge-0.3.11 → processforge-0.3.13}/src/processforge.egg-info/dependency_links.txt +0 -0
  128. {processforge-0.3.11 → processforge-0.3.13}/src/processforge.egg-info/entry_points.txt +0 -0
  129. {processforge-0.3.11 → processforge-0.3.13}/src/processforge.egg-info/top_level.txt +0 -0
  130. {processforge-0.3.11 → processforge-0.3.13}/tests/test_init.py +0 -0
  131. {processforge-0.3.11 → processforge-0.3.13}/tests/test_openmc_provider.py +0 -0
  132. {processforge-0.3.11 → processforge-0.3.13}/tests/test_providers.py +0 -0
  133. {processforge-0.3.11 → processforge-0.3.13}/tests/test_s3_upload.py +0 -0
  134. {processforge-0.3.11 → processforge-0.3.13}/tests/test_state.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: processforge
3
- Version: 0.3.11
3
+ Version: 0.3.13
4
4
  Summary: A Python-based process simulation framework for chemical engineering applications.
5
5
  Author-email: Processforge Team <team@processforge.dev>
6
6
  License-Expression: BSD-3-Clause
@@ -28,6 +28,7 @@ Requires-Dist: jsonschema>=4.20
28
28
  Requires-Dist: graphviz>=0.20
29
29
  Requires-Dist: pandas>=2.2
30
30
  Requires-Dist: zarr>=3.0
31
+ Requires-Dist: pint<1.0,>=0.24
31
32
  Requires-Dist: coolprop>=7.2.0
32
33
  Requires-Dist: typer>=0.12
33
34
  Provides-Extra: api
@@ -48,8 +49,6 @@ Provides-Extra: cantera
48
49
  Requires-Dist: cantera>=3.0; extra == "cantera"
49
50
  Provides-Extra: coolprop
50
51
  Requires-Dist: coolprop>=6.6; extra == "coolprop"
51
- Provides-Extra: pcl
52
- Requires-Dist: pint>=0.24; extra == "pcl"
53
52
  Provides-Extra: dev
54
53
  Requires-Dist: pytest>=7.0; extra == "dev"
55
54
  Requires-Dist: black; extra == "dev"
@@ -0,0 +1,216 @@
1
+ {
2
+ "metadata": {
3
+ "name": "Make-up Water System",
4
+ "description": "A two-pump, five-valve, one-strainer, one tank steady-state make-up water system.",
5
+ "version": "2.0"
6
+ },
7
+ "providers": {
8
+ "coolprop": {
9
+ "type": "coolprop"
10
+ }
11
+ },
12
+ "materials": {
13
+ "Water": {
14
+ "id": 1
15
+ },
16
+ "Steel": {
17
+ "id": 2
18
+ }
19
+ },
20
+ "streams": {
21
+ "feed": {
22
+ "T": 313.00,
23
+ "P": 101325,
24
+ "flowrate": 1,
25
+ "z": { "Water": 1.0 }
26
+ }
27
+ },
28
+
29
+ "units": {
30
+
31
+ "tank_1": {
32
+ "type": "Tank",
33
+ "in": ["feed", "recycle_to_tank"],
34
+ "out": "after_tank_1",
35
+ "outlet_flow": 1.0,
36
+ "initial_n": {
37
+ "Benzene": 9.0,
38
+ "Toluene": 1.0
39
+ },
40
+ "initial_T": 298.15,
41
+ "P": 101325,
42
+ "duty": 0.0,
43
+ "material": 1
44
+ },
45
+
46
+ "pipe_1": {
47
+ "type": "Pipes",
48
+ "in": "after_tank_1",
49
+ "out": "after_pipe_1",
50
+ "delta_p": 1000.0,
51
+ "diameter": 0.05,
52
+ "material": 2
53
+ },
54
+ "global_valve_1": {
55
+ "type": "Valve",
56
+ "in": "after_pipe_1",
57
+ "out": "after_global_valve_1",
58
+ "opening": 50,
59
+ "pressure_ratio": 0.5,
60
+ "q_flowrate": 50,
61
+ "material": 2
62
+ },
63
+ "pipe_2": {
64
+ "type": "Pipes",
65
+ "in": "after_global_valve_1",
66
+ "out": "after_pipe_2",
67
+ "delta_p": 1000.0,
68
+ "diameter": 0.05,
69
+ "material": 2
70
+ },
71
+
72
+ "low_pressure_pump":{
73
+ "type": "Pump",
74
+ "in": "after_pipe_2",
75
+ "out": "after_low_pressure_pump",
76
+ "q_flowrate": 4,
77
+ "head": 57,
78
+ "efficiency": 36,
79
+ "power": 1.3,
80
+ "cap": 2.5,
81
+ "motor_rating": 370,
82
+ "design_press": 6,
83
+ "material": 2,
84
+ "delta_p": 1000.0
85
+ },
86
+ "pipe_3": {
87
+ "type": "Pipes",
88
+ "in": "after_low_pressure_pump",
89
+ "out": "after_pipe_3",
90
+ "delta_p": 1000.0,
91
+ "diameter": 0.05,
92
+ "material": 2
93
+ },
94
+ "non_return_valve_1": {
95
+ "type": "Valve",
96
+ "in": "after_pipe_3",
97
+ "out": "after_non_return_valve_1",
98
+ "q_flowrate": 4,
99
+ "pressure_ratio": 0.5,
100
+ "pressure_drop": 0.72,
101
+ "material": 2
102
+ },
103
+ "pipe_4": {
104
+ "type": "Pipes",
105
+ "in": "after_non_return_valve_1",
106
+ "out": "after_pipe_4",
107
+ "delta_p": 1000.0,
108
+ "diameter": 0.05,
109
+ "material": 2
110
+ },
111
+ "strainer": {
112
+ "type": "Strainer",
113
+ "in": "after_pipe_4",
114
+ "out": "after_strainer",
115
+ "q_flowrate": 4,
116
+ "pressure_drop": 0.192,
117
+ "material": 2,
118
+ "delta_p": 1000.0
119
+ },
120
+ "pipe_5": {
121
+ "type": "Pipes",
122
+ "in": "after_strainer",
123
+ "out": "after_pipe_5",
124
+ "delta_p": 1000.0,
125
+ "diameter": 0.05,
126
+ "material": 2
127
+ },
128
+ "global_valve_2": {
129
+ "type": "Valve",
130
+ "in": "after_pipe_5",
131
+ "out": "after_global_valve_2",
132
+ "opening": 50,
133
+ "q_flowrate": 50,
134
+ "material": 2,
135
+ "pressure_ratio": 0.5
136
+ },
137
+ "pipe_6": {
138
+ "type": "Pipes",
139
+ "in": "after_global_valve_2",
140
+ "out": "after_pipe_6",
141
+ "delta_p": 1000.0,
142
+ "diameter": 0.05,
143
+ "material": 2
144
+ },
145
+ "high_pressure_pump":{
146
+ "type": "Pump",
147
+ "in": "after_pipe_6",
148
+ "out": "after_high_pressure_pump",
149
+ "q_flowrate": 35,
150
+ "head": 32,
151
+ "efficiency": 25,
152
+ "power": 4.75,
153
+ "cap": 600,
154
+ "discharge_press": 50,
155
+ "motor_rating": 7.5,
156
+ "relief_press": 200,
157
+ "material": 2,
158
+ "delta_p": 1000.0
159
+ },
160
+ "pipe_7": {
161
+ "type": "Pipes",
162
+ "in": "after_high_pressure_pump",
163
+ "out": "after_pipe_7",
164
+ "delta_p": 1000.0,
165
+ "diameter": 0.05,
166
+ "material": 2
167
+ },
168
+ "non_return_valve_2": {
169
+ "type": "Valve",
170
+ "in": "after_pipe_7",
171
+ "out": "after_non_return_valve_2",
172
+ "q_flowrate": 4,
173
+ "pressure_drop": 0.72,
174
+ "material": 2,
175
+ "pressure_ratio": 0.5
176
+ },
177
+ "pipe_8": {
178
+ "type": "Pipes",
179
+ "in": "after_non_return_valve_2",
180
+ "out": "after_pipe_8",
181
+ "delta_p": 1000.0,
182
+ "diameter": 0.05,
183
+ "material": 2
184
+ },
185
+ "global_valve_3": {
186
+ "type": "Valve",
187
+ "in": "after_pipe_8",
188
+ "out": "after_valve_3",
189
+ "opening": 50,
190
+ "q_flowrate": 50,
191
+ "material": 2,
192
+ "pressure_ratio": 0.5
193
+ },
194
+
195
+
196
+ "pipe_9": {
197
+ "type": "Pipes",
198
+ "in": "after_valve_3",
199
+ "out": "recycle_to_tank",
200
+ "delta_p": 1000.0,
201
+ "diameter": 0.08,
202
+ "material": 2
203
+ }
204
+
205
+ },
206
+ "simulation": {
207
+ "mode": "dynamic",
208
+ "t0": 0.0,
209
+ "tf": 17.0,
210
+ "dt": 1.0,
211
+ "backend": "scipy"
212
+ }
213
+ }
214
+
215
+
216
+
@@ -0,0 +1,202 @@
1
+ {
2
+ "metadata": {
3
+ "name": "Hydraulic Chain Example",
4
+ "description": "A two-pump, one-valve, one-strainer steady-state hydraulic system.",
5
+ "version": "2.0"
6
+ },
7
+ "providers": {
8
+ "coolprop": {
9
+ "type": "coolprop"
10
+ }
11
+ },
12
+ "materials": {
13
+ "Benzene": {
14
+ "id": 1
15
+ },
16
+ "Toluene": {
17
+ "id": 2
18
+ },
19
+ "Steel": {
20
+ "id": 3
21
+ }
22
+ },
23
+ "material_mixes": {
24
+ "Benzene_Toluene_Mix": {
25
+ "friendly_material_mix_id": 1,
26
+ "percent_type": "ao",
27
+ "components": [
28
+ {"name": "Benzene", "fraction": 0.8},
29
+ {"name": "Toluene", "fraction": 0.2}
30
+ ]
31
+ }
32
+ },
33
+ "streams": {
34
+ "feed": {
35
+ "T": 298.15,
36
+ "P": 101325,
37
+ "flowrate": 38,
38
+ "material_mix": 1
39
+ }
40
+ },
41
+ "units": {
42
+ "pipe_1": {
43
+ "type": "Pipes",
44
+ "in": "feed",
45
+ "out": "after_pipe_1",
46
+ "delta_p": 1000.0,
47
+ "diameter": 0.040,
48
+ "material": 3
49
+ },
50
+ "valve_1": {
51
+ "type": "Valve",
52
+ "in": "after_pipe_1",
53
+ "out": "after_valve_1",
54
+ "pressure_ratio": 0.5,
55
+ "material": 3
56
+ },
57
+ "pipe_2": {
58
+ "type": "Pipes",
59
+ "in": "after_valve_1",
60
+ "out": "after_pipe_2",
61
+ "delta_p": 1000.0,
62
+ "diameter": 0.08,
63
+ "material": 3
64
+ },
65
+ "pump_1": {
66
+ "type": "Pump",
67
+ "in": "after_pipe_2",
68
+ "out": "after_pump_1",
69
+ "delta_p": 600000.0,
70
+ "efficiency": 0.75,
71
+ "material": 3
72
+ },
73
+ "pipe_3": {
74
+ "type": "Pipes",
75
+ "in": "after_pump_1",
76
+ "out": "after_pipe_3",
77
+ "delta_p": 1000.0,
78
+ "diameter": 0.08,
79
+ "material": 3
80
+ },
81
+ "strainer_1": {
82
+ "type": "Strainer",
83
+ "in": "after_pipe_3",
84
+ "out": "after_strainer_1",
85
+ "delta_p": 5000.0,
86
+ "material": 3
87
+ },
88
+ "pipe_4": {
89
+ "type": "Pipes",
90
+ "in": "after_strainer_1",
91
+ "out": "after_pipe_4",
92
+ "delta_p": 1000.0,
93
+ "diameter": 0.08,
94
+ "material": 3
95
+ },
96
+ "pipe_1a": {
97
+ "type": "Pipes",
98
+ "in": "after_strainer_1",
99
+ "out": "after_pipe_1a",
100
+ "delta_p": 1000.0,
101
+ "diameter": 0.08,
102
+ "material": 3
103
+ },
104
+ "valve_1a": {
105
+ "type": "Valve",
106
+ "in": "after_pipe_1a",
107
+ "out": "after_valve_1a",
108
+ "pressure_ratio": 0.5,
109
+ "material": 3
110
+ },
111
+ "pipe_2a": {
112
+ "type": "Pipes",
113
+ "in": "after_valve_1a",
114
+ "out": "after_pipe_2a",
115
+ "delta_p": 1000.0,
116
+ "diameter": 0.08,
117
+ "material": 3
118
+ },
119
+ "valve_2": {
120
+ "type": "Valve",
121
+ "in": "after_pipe_4",
122
+ "out": "after_valve_2",
123
+ "pressure_ratio": 0.5,
124
+ "material": 3
125
+ },
126
+ "pipe_5": {
127
+ "type": "Pipes",
128
+ "in": "after_valve_2",
129
+ "out": "after_pipe_5",
130
+ "delta_p": 1000.0,
131
+ "diameter": 0.08,
132
+ "material": 3
133
+ },
134
+ "pump_2": {
135
+ "type": "Pump",
136
+ "in": "after_pipe_5",
137
+ "out": "after_pump_2",
138
+ "delta_p": 600000.0,
139
+ "efficiency": 0.75,
140
+ "material": 3
141
+ },
142
+ "pipe_6": {
143
+ "type": "Pipes",
144
+ "in": "after_pump_2",
145
+ "out": "after_pipe_6",
146
+ "delta_p": 1000.0,
147
+ "diameter": 0.08,
148
+ "material": 3
149
+ },
150
+ "valve_3": {
151
+ "type": "Valve",
152
+ "in": "after_pipe_6",
153
+ "out": "after_valve_3",
154
+ "pressure_ratio": 0.5,
155
+ "material": 3
156
+ },
157
+ "pipe_7": {
158
+ "type": "Pipes",
159
+ "in": "after_valve_3",
160
+ "out": "after_pipe_7",
161
+ "delta_p": 1000.0,
162
+ "diameter": 0.08,
163
+ "material": 3
164
+ },
165
+ "valve_4": {
166
+ "type": "Valve",
167
+ "in": "after_pipe_7",
168
+ "out": "after_valve_4",
169
+ "pressure_ratio": 0.5,
170
+ "material": 3
171
+ },
172
+ "pipe_8": {
173
+ "type": "Pipes",
174
+ "in": "after_valve_4",
175
+ "out": "after_pipe_8",
176
+ "delta_p": 1000.0,
177
+ "diameter": 0.08,
178
+ "material": 3
179
+ },
180
+ "valve_5": {
181
+ "type": "Valve",
182
+ "in": ["after_pipe_8","after_pipe_2a"],
183
+ "out": "after_valve_5",
184
+ "pressure_ratio": 0.5,
185
+ "material": 3
186
+ },
187
+ "pipe_9": {
188
+ "type": "Pipes",
189
+ "in": "after_valve_5",
190
+ "out": "after_pipe_9",
191
+ "delta_p": 1000.0,
192
+ "diameter": 0.025,
193
+ "material": 3
194
+ }
195
+
196
+ },
197
+ "simulation": {
198
+ "mode":"dynamic",
199
+ "t_final": 20,
200
+ "t_step": 1
201
+ }
202
+ }
@@ -25,31 +25,30 @@
25
25
  "festim_solver": {
26
26
  "type": "SolverUnit",
27
27
  "provider": "festim",
28
- "sim_type": "hydrogen_transport",
29
- "mesh": {
30
- "vertices": [0.0, 0.001, 0.002, 0.003, 0.004, 0.005, 0.006, 0.007, 0.008, 0.009, 0.01]
31
- },
32
- "species": [
33
- { "name": "H" }
34
- ],
35
- "subdomains": {
36
- "volume": [
37
- { "id": 1, "borders": [0.0, 0.01], "material": "default" }
38
- ],
39
- "surface": [
40
- { "id": 2, "x": 0.0 },
41
- { "id": 3, "x": 0.01 }
42
- ]
43
- },
44
- "boundary_conditions": [
45
- { "type": "fixed_concentration", "subdomain_id": 2, "species": "H", "value": 1 },
46
- { "type": "fixed_concentration", "subdomain_id": 3, "species": "H", "value": 0 }
47
- ],
48
- "exports": [
49
- { "type": "vtx_species", "field": "H", "filename": "hydrogen_concentration.bp", "times": "milestones" },
50
- { "type": "profile_1d", "field": "H", "volume_id": 1, "times": "milestones" }
51
- ],
28
+ "sim_type": "hydrogen_transport_tds",
52
29
  "solver_config": {
30
+ "mesh": {
31
+ "vertices": [0.0, 0.001, 0.002, 0.003, 0.004, 0.005, 0.006, 0.007, 0.008, 0.009, 0.01]
32
+ },
33
+ "subdomains": {
34
+ "volume": [
35
+ { "id": 1, "borders": [0.0, 0.01], "material": "default" }
36
+ ],
37
+ "surface": [
38
+ { "id": 2, "x": 0.0 },
39
+ { "id": 3, "x": 0.01 }
40
+ ]
41
+ },
42
+ "species": [
43
+ { "name": "H", "mobile": true }
44
+ ],
45
+ "boundary_conditions": [
46
+ { "type": "fixed_concentration", "subdomain": 2, "species": "H", "value": 1 },
47
+ { "type": "fixed_concentration", "subdomain": 3, "species": "H", "value": 0 }
48
+ ],
49
+ "exports": [
50
+ { "type": "profile_1d", "field": "H", "volume": 1, "times": [0.05, 0.1, 0.2, 0.5, 1] }
51
+ ],
53
52
  "atol": 1e-10,
54
53
  "rtol": 1e-10,
55
54
  "final_time": 2,
@@ -67,4 +66,4 @@
67
66
  "simulation": {
68
67
  "mode": "steady"
69
68
  }
70
- }
69
+ }
@@ -0,0 +1,136 @@
1
+ {
2
+ "metadata": {
3
+ "name": "FESTIM TDS — Tungsten Thermal Desorption",
4
+ "description": "Thermo-desorption spectra (TDS) for a tungsten sample. Gaussian implantation source (400 s), resting phase, then a temperature ramp from 300 K at 8 K/s to desorb trapped hydrogen. Two trapping sites modelled via implicit empty-trap species. Reproduces notebooks_task02.ipynb.py.",
5
+ "version": "1.0"
6
+ },
7
+ "providers": {
8
+ "festim": {
9
+ "type": "festim",
10
+ "url": "http://localhost:9002",
11
+ "output_dir": "festim"
12
+ }
13
+ },
14
+ "materials": {
15
+ "tungsten": {
16
+ "id": 1,
17
+ "extra": {
18
+ "D_0": 4.1e-7,
19
+ "E_D": 0.39
20
+ }
21
+ }
22
+ },
23
+ "streams": {},
24
+ "units": {
25
+ "tds_solver": {
26
+ "type": "SolverUnit",
27
+ "provider": "festim",
28
+ "sim_type": "hydrogen_transport_tds",
29
+ "solver_config": {
30
+ "mesh": {
31
+ "segments": [
32
+ { "start": 0.0, "stop": 30e-9, "num": 200 },
33
+ { "start": 30e-9, "stop": 3e-6, "num": 300 },
34
+ { "start": 3e-6, "stop": 20e-6, "num": 200 }
35
+ ]
36
+ },
37
+ "subdomains": {
38
+ "volume": [
39
+ { "id": 1, "borders": [0.0, 20e-6], "material": "tungsten" }
40
+ ],
41
+ "surface": [
42
+ { "id": 1, "x": 0.0 },
43
+ { "id": 2, "x": 20e-6 }
44
+ ]
45
+ },
46
+ "species": [
47
+ { "name": "H", "mobile": true },
48
+ { "name": "trapped_H1", "mobile": false },
49
+ { "name": "trapped_H2", "mobile": false }
50
+ ],
51
+ "implicit_species": [
52
+ { "name": "empty_trap1", "n": 135.99814960153805, "others": ["trapped_H1"] },
53
+ { "name": "empty_trap2", "n": 41.84558449278094, "others": ["trapped_H2"] }
54
+ ],
55
+ "reactions": [
56
+ {
57
+ "type": "arrhenius",
58
+ "reactant": ["H", "empty_trap1"],
59
+ "product": ["trapped_H1"],
60
+ "k_0": 53983071.22305305,
61
+ "E_k": 0.39,
62
+ "p_0": 1e13,
63
+ "E_p": 0.87,
64
+ "volume": 1
65
+ },
66
+ {
67
+ "type": "arrhenius",
68
+ "reactant": ["H", "empty_trap2"],
69
+ "product": ["trapped_H2"],
70
+ "k_0": 53983071.22305305,
71
+ "E_k": 0.39,
72
+ "p_0": 1e13,
73
+ "E_p": 1.0,
74
+ "volume": 1
75
+ }
76
+ ],
77
+ "sources": [
78
+ {
79
+ "type": "particle",
80
+ "species": "H",
81
+ "volume": 1,
82
+ "value": {
83
+ "type": "gaussian",
84
+ "amplitude": 4.151347667934617e-05,
85
+ "center": 4.5e-9,
86
+ "width": 2.5e-9,
87
+ "active_until": 400
88
+ }
89
+ }
90
+ ],
91
+ "boundary_conditions": [
92
+ { "type": "fixed_concentration", "subdomain": 1, "species": "H", "value": 0 },
93
+ { "type": "fixed_concentration", "subdomain": 2, "species": "H", "value": 0 }
94
+ ],
95
+ "temperature": {
96
+ "type": "ramp",
97
+ "T0": 300,
98
+ "start_t": 450,
99
+ "ramp_rate": 8
100
+ },
101
+ "exports": [
102
+ { "type": "surface_flux", "field": "H", "surface": 1, "filename": "flux_left.csv" },
103
+ { "type": "surface_flux", "field": "H", "surface": 2, "filename": "flux_right.csv" },
104
+ { "type": "total_volume", "field": "H", "volume": 1, "filename": "total_mobile_H.csv" },
105
+ { "type": "total_volume", "field": "trapped_H1", "volume": 1, "filename": "total_trapped_H1.csv" },
106
+ { "type": "total_volume", "field": "trapped_H2", "volume": 1, "filename": "total_trapped_H2.csv" },
107
+ { "type": "profile_1d", "field": "H", "volume": 1, "times": [400, 450, 500] },
108
+ { "type": "profile_1d", "field": "trapped_H1", "volume": 1, "times": [400, 450, 500] },
109
+ { "type": "profile_1d", "field": "trapped_H2", "volume": 1, "times": [400, 450, 500] }
110
+ ],
111
+ "atol": 1e-10,
112
+ "rtol": 1e-10,
113
+ "max_iterations": 30,
114
+ "transient": true,
115
+ "final_time": 500,
116
+ "element_degree": 1,
117
+ "stepsize": {
118
+ "initial_value": 0.5,
119
+ "growth_factor": 1.1,
120
+ "cutback_factor": 0.9,
121
+ "target_nb_iterations": 4,
122
+ "max_stepsize": {
123
+ "type": "after_t",
124
+ "after_t": 450,
125
+ "value": 0.5
126
+ },
127
+ "milestones": [400, 450, 500]
128
+ },
129
+ "convergence_criterion": "residual"
130
+ }
131
+ }
132
+ },
133
+ "simulation": {
134
+ "mode": "steady"
135
+ }
136
+ }
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "processforge"
7
- version = "0.3.11"
7
+ version = "0.3.13"
8
8
  description = "A Python-based process simulation framework for chemical engineering applications."
9
9
  readme = "README.md"
10
10
  license = "BSD-3-Clause"
@@ -34,6 +34,7 @@ dependencies = [
34
34
  "graphviz>=0.20",
35
35
  "pandas>=2.2",
36
36
  "zarr>=3.0",
37
+ "pint>=0.24,<1.0",
37
38
  "coolprop>=7.2.0",
38
39
  "typer>=0.12",
39
40
  ]
@@ -64,9 +65,6 @@ cantera = [
64
65
  coolprop = [
65
66
  "coolprop>=6.6",
66
67
  ]
67
- pcl = [
68
- "pint>=0.24",
69
- ]
70
68
  dev = [
71
69
  "pytest>=7.0",
72
70
  "black",
@@ -29,7 +29,7 @@ from .units.flash import Flash
29
29
  from .units.heater import Heater
30
30
  from .eo import EOFlowsheet, EOSolver
31
31
 
32
- __version__ = "0.3.2"
32
+ __version__ = "0.3.13"
33
33
 
34
34
  __all__ = [
35
35
  "Flowsheet",