|
53 | 53 | "import subprocess\n", |
54 | 54 | "import numpy as np \n", |
55 | 55 | "\n", |
56 | | - "from hyopml.utils import extract_newtit_from_file, plot_newton_iterations\n", |
| 56 | + "from hyopml.utils import extract_newtit_from_file, plot_newton_iterations, detect_flow_flags\n", |
57 | 57 | "from hyopml.data import collect_input_features, compute_output_vars, extract_unrst_variables\n", |
58 | 58 | "from hyopml.neural_networks import Dense, Sequential\n", |
59 | 59 | "from hyopml.write_config import write_config\n", |
|
73 | 73 | }, |
74 | 74 | { |
75 | 75 | "cell_type": "code", |
76 | | - "execution_count": 21, |
| 76 | + "execution_count": 2, |
77 | 77 | "id": "05d2b37e", |
78 | 78 | "metadata": {}, |
79 | 79 | "outputs": [ |
|
83 | 83 | "text": [ |
84 | 84 | " % Total % Received % Xferd Average Speed Time Time Time Current\n", |
85 | 85 | " Dload Upload Total Spent Left Speed\n", |
86 | | - "100 12201 100 12201 0 0 186k 0 --:--:-- --:--:-- --:--:-- 189k\n" |
| 86 | + "100 12201 100 12201 0 0 189k 0 --:--:-- --:--:-- --:--:-- 192k\n" |
87 | 87 | ] |
88 | 88 | } |
89 | 89 | ], |
|
96 | 96 | }, |
97 | 97 | { |
98 | 98 | "cell_type": "code", |
99 | | - "execution_count": null, |
| 99 | + "execution_count": 3, |
100 | 100 | "id": "a2838659", |
101 | 101 | "metadata": {}, |
102 | 102 | "outputs": [], |
|
109 | 109 | "output_dir = \"SPE1_tutorial\"" |
110 | 110 | ] |
111 | 111 | }, |
| 112 | + { |
| 113 | + "cell_type": "code", |
| 114 | + "execution_count": 4, |
| 115 | + "id": "2dbc2051", |
| 116 | + "metadata": {}, |
| 117 | + "outputs": [ |
| 118 | + { |
| 119 | + "name": "stdout", |
| 120 | + "output_type": "stream", |
| 121 | + "text": [ |
| 122 | + "{'version': '2025.10', 'version_num': 2025.1, 'flags': {'use_hybrid': '--use-hy-ne', 'config_file': '--hy-ne-config-file'}}\n" |
| 123 | + ] |
| 124 | + } |
| 125 | + ], |
| 126 | + "source": [ |
| 127 | + "infos = detect_flow_flags(flow_path)\n", |
| 128 | + "print(infos)\n", |
| 129 | + "USE_HYBRID_FLAG = infos['flags']['use_hybrid']\n", |
| 130 | + "HYBRID_CONFIG_FILE_FLAG = infos['flags']['config_file']" |
| 131 | + ] |
| 132 | + }, |
112 | 133 | { |
113 | 134 | "cell_type": "markdown", |
114 | 135 | "id": "136ced9c", |
|
119 | 140 | }, |
120 | 141 | { |
121 | 142 | "cell_type": "code", |
122 | | - "execution_count": 23, |
| 143 | + "execution_count": 5, |
123 | 144 | "id": "d4e0387e", |
124 | 145 | "metadata": {}, |
125 | 146 | "outputs": [ |
126 | 147 | { |
127 | 148 | "name": "stdout", |
128 | 149 | "output_type": "stream", |
129 | 150 | "text": [ |
130 | | - "Running baseline simulation... \n" |
131 | | - ] |
132 | | - }, |
133 | | - { |
134 | | - "name": "stderr", |
135 | | - "output_type": "stream", |
136 | | - "text": [ |
137 | | - "Exception received: Cannot find input case 'decks/SPE1CASE1b/SPE1CASE1'. Try '--help' for a usage description.\n" |
138 | | - ] |
139 | | - }, |
140 | | - { |
141 | | - "ename": "CalledProcessError", |
142 | | - "evalue": "Command '['../build/opm-simulators/bin/flow', 'decks/SPE1CASE1b/SPE1CASE1', '--output-extra-convergence-info=steps,iterations', '--newton-min-iterations=0', '--output-dir=SPE1_tutorial', '--full-time-step-initially=true']' returned non-zero exit status 1.", |
143 | | - "output_type": "error", |
144 | | - "traceback": [ |
145 | | - "\u001b[31m---------------------------------------------------------------------------\u001b[39m", |
146 | | - "\u001b[31mCalledProcessError\u001b[39m Traceback (most recent call last)", |
147 | | - "\u001b[36mCell\u001b[39m\u001b[36m \u001b[39m\u001b[32mIn[23]\u001b[39m\u001b[32m, line 11\u001b[39m\n\u001b[32m 1\u001b[39m baseline_cmd = [\n\u001b[32m 2\u001b[39m flow_path,\n\u001b[32m 3\u001b[39m deck_path,\n\u001b[32m (...)\u001b[39m\u001b[32m 7\u001b[39m \u001b[33m\"\u001b[39m\u001b[33m--full-time-step-initially=true\u001b[39m\u001b[33m\"\u001b[39m,\n\u001b[32m 8\u001b[39m ]\n\u001b[32m 10\u001b[39m \u001b[38;5;28mprint\u001b[39m(\u001b[33m\"\u001b[39m\u001b[33mRunning baseline simulation... \u001b[39m\u001b[33m\"\u001b[39m)\n\u001b[32m---> \u001b[39m\u001b[32m11\u001b[39m \u001b[43msubprocess\u001b[49m\u001b[43m.\u001b[49m\u001b[43mrun\u001b[49m\u001b[43m(\u001b[49m\u001b[43mbaseline_cmd\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mstdout\u001b[49m\u001b[43m=\u001b[49m\u001b[43msubprocess\u001b[49m\u001b[43m.\u001b[49m\u001b[43mDEVNULL\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mcheck\u001b[49m\u001b[43m=\u001b[49m\u001b[38;5;28;43;01mTrue\u001b[39;49;00m\u001b[43m)\u001b[49m\n\u001b[32m 12\u001b[39m \u001b[38;5;28mprint\u001b[39m(\u001b[33m\"\u001b[39m\u001b[33mBaseline simulation finished\u001b[39m\u001b[33m\"\u001b[39m)\n", |
148 | | - "\u001b[36mFile \u001b[39m\u001b[32m/opt/local/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/subprocess.py:571\u001b[39m, in \u001b[36mrun\u001b[39m\u001b[34m(input, capture_output, timeout, check, *popenargs, **kwargs)\u001b[39m\n\u001b[32m 569\u001b[39m retcode = process.poll()\n\u001b[32m 570\u001b[39m \u001b[38;5;28;01mif\u001b[39;00m check \u001b[38;5;129;01mand\u001b[39;00m retcode:\n\u001b[32m--> \u001b[39m\u001b[32m571\u001b[39m \u001b[38;5;28;01mraise\u001b[39;00m CalledProcessError(retcode, process.args,\n\u001b[32m 572\u001b[39m output=stdout, stderr=stderr)\n\u001b[32m 573\u001b[39m \u001b[38;5;28;01mreturn\u001b[39;00m CompletedProcess(process.args, retcode, stdout, stderr)\n", |
149 | | - "\u001b[31mCalledProcessError\u001b[39m: Command '['../build/opm-simulators/bin/flow', 'decks/SPE1CASE1b/SPE1CASE1', '--output-extra-convergence-info=steps,iterations', '--newton-min-iterations=0', '--output-dir=SPE1_tutorial', '--full-time-step-initially=true']' returned non-zero exit status 1." |
| 151 | + "Running baseline simulation... \n", |
| 152 | + "Baseline simulation finished\n" |
150 | 153 | ] |
151 | 154 | } |
152 | 155 | ], |
|
167 | 170 | }, |
168 | 171 | { |
169 | 172 | "cell_type": "code", |
170 | | - "execution_count": 4, |
| 173 | + "execution_count": 6, |
171 | 174 | "id": "dfbb9861", |
172 | 175 | "metadata": {}, |
173 | 176 | "outputs": [], |
|
181 | 184 | }, |
182 | 185 | { |
183 | 186 | "cell_type": "code", |
184 | | - "execution_count": 5, |
| 187 | + "execution_count": 7, |
185 | 188 | "id": "cb611a32", |
186 | 189 | "metadata": {}, |
187 | 190 | "outputs": [ |
|
224 | 227 | }, |
225 | 228 | { |
226 | 229 | "cell_type": "code", |
227 | | - "execution_count": 6, |
| 230 | + "execution_count": 8, |
228 | 231 | "id": "c0c76d02", |
229 | 232 | "metadata": {}, |
230 | 233 | "outputs": [], |
|
249 | 252 | }, |
250 | 253 | { |
251 | 254 | "cell_type": "code", |
252 | | - "execution_count": 7, |
| 255 | + "execution_count": 9, |
253 | 256 | "id": "0e70afd6", |
254 | 257 | "metadata": {}, |
255 | 258 | "outputs": [], |
|
275 | 278 | }, |
276 | 279 | { |
277 | 280 | "cell_type": "code", |
278 | | - "execution_count": 8, |
| 281 | + "execution_count": 10, |
279 | 282 | "id": "d502fd70", |
280 | 283 | "metadata": {}, |
281 | 284 | "outputs": [], |
|
331 | 334 | }, |
332 | 335 | { |
333 | 336 | "cell_type": "code", |
334 | | - "execution_count": 9, |
| 337 | + "execution_count": 11, |
335 | 338 | "id": "ac73a4e3", |
336 | 339 | "metadata": {}, |
337 | 340 | "outputs": [], |
|
373 | 376 | }, |
374 | 377 | { |
375 | 378 | "cell_type": "code", |
376 | | - "execution_count": 10, |
| 379 | + "execution_count": 12, |
377 | 380 | "id": "12d5051e", |
378 | 381 | "metadata": {}, |
379 | 382 | "outputs": [], |
|
400 | 403 | }, |
401 | 404 | { |
402 | 405 | "cell_type": "code", |
403 | | - "execution_count": 11, |
| 406 | + "execution_count": 13, |
404 | 407 | "id": "ee32e6eb", |
405 | 408 | "metadata": {}, |
406 | 409 | "outputs": [], |
|
443 | 446 | }, |
444 | 447 | { |
445 | 448 | "cell_type": "code", |
446 | | - "execution_count": 12, |
| 449 | + "execution_count": 14, |
447 | 450 | "id": "b02ead61", |
448 | 451 | "metadata": {}, |
449 | 452 | "outputs": [], |
|
453 | 456 | }, |
454 | 457 | { |
455 | 458 | "cell_type": "code", |
456 | | - "execution_count": 13, |
| 459 | + "execution_count": 15, |
457 | 460 | "id": "3db29cd9", |
458 | 461 | "metadata": {}, |
459 | 462 | "outputs": [ |
|
470 | 473 | "hybrid_cmd = [\n", |
471 | 474 | " flow_path,\n", |
472 | 475 | " deck_path,\n", |
473 | | - " f\"--hy-ne-config-file={ml_model_config_path}\",\n", |
474 | | - " \"--use-hy-ne=true\",\n", |
| 476 | + " f\"{HYBRID_CONFIG_FILE_FLAG}={ml_model_config_path}\",\n", |
| 477 | + " f\"{USE_HYBRID_FLAG}=true\",\n", |
475 | 478 | " \"--output-extra-convergence-info=steps,iterations\",\n", |
476 | 479 | " \"--newton-min-iterations=0\",\n", |
477 | 480 | " f\"--output-dir={output_dir}/hybrid_newton\",\n", |
|
485 | 488 | }, |
486 | 489 | { |
487 | 490 | "cell_type": "code", |
488 | | - "execution_count": 14, |
| 491 | + "execution_count": 16, |
489 | 492 | "id": "01fcb6bb", |
490 | 493 | "metadata": {}, |
491 | 494 | "outputs": [ |
|
525 | 528 | }, |
526 | 529 | { |
527 | 530 | "cell_type": "code", |
528 | | - "execution_count": 15, |
| 531 | + "execution_count": 17, |
529 | 532 | "id": "bd7f7408", |
530 | 533 | "metadata": {}, |
531 | 534 | "outputs": [], |
|
549 | 552 | }, |
550 | 553 | { |
551 | 554 | "cell_type": "code", |
552 | | - "execution_count": 16, |
| 555 | + "execution_count": 18, |
553 | 556 | "id": "4b9570c7", |
554 | 557 | "metadata": {}, |
555 | 558 | "outputs": [ |
|
567 | 570 | "hybrid_cmd = [\n", |
568 | 571 | " flow_path,\n", |
569 | 572 | " deck_path,\n", |
570 | | - " f\"--hy-ne-config-file={ml_model_config_path}\",\n", |
571 | | - " \"--use-hy-ne=true\",\n", |
| 573 | + " f\"{HYBRID_CONFIG_FILE_FLAG}={ml_model_config_path}\",\n", |
| 574 | + " f\"{USE_HYBRID_FLAG}=true\",\n", |
572 | 575 | " \"--output-extra-convergence-info=steps,iterations\",\n", |
573 | 576 | " \"--newton-min-iterations=0\",\n", |
574 | 577 | " f\"--output-dir={output_dir}/hybrid_newton_zeros\",\n", |
|
589 | 592 | }, |
590 | 593 | { |
591 | 594 | "cell_type": "code", |
592 | | - "execution_count": 17, |
| 595 | + "execution_count": 19, |
593 | 596 | "id": "2738f2b4", |
594 | 597 | "metadata": {}, |
595 | 598 | "outputs": [ |
|
680 | 683 | }, |
681 | 684 | { |
682 | 685 | "cell_type": "code", |
683 | | - "execution_count": 18, |
| 686 | + "execution_count": 20, |
684 | 687 | "id": "6681ebba", |
685 | 688 | "metadata": {}, |
686 | 689 | "outputs": [ |
|
717 | 720 | " \"--full-time-step-initially=true\",\n", |
718 | 721 | " f\"--tolerance-mb={tol_mb}\",\n", |
719 | 722 | " f\"--tolerance-mb-relaxed={tol_mb}\",\n", |
720 | | - " f\"--tolerance-cnv=1e-1\",\n", |
721 | | - " f\"--tolerance-cnv-relaxed=1e-1\",\n", |
| 723 | + " \"--tolerance-cnv=1e-1\",\n", |
| 724 | + " \"--tolerance-cnv-relaxed=1e-1\",\n", |
722 | 725 | "]\n", |
723 | 726 | "subprocess.run(baseline_cmd, stdout=subprocess.DEVNULL, check=True)\n", |
724 | 727 | "baseline_output_path = f\"{output_dir}/baseline_tol_{tol_mb}/{deck_name}\"\n", |
|
730 | 733 | "hybrid_cmd = [\n", |
731 | 734 | " flow_path,\n", |
732 | 735 | " deck_path,\n", |
733 | | - " f\"--hy-ne-config-file={ml_model_config_path}\",\n", |
734 | | - " \"--use-hy-ne=true\",\n", |
| 736 | + " f\"{HYBRID_CONFIG_FILE_FLAG}={ml_model_config_path}\",\n", |
| 737 | + " f\"{USE_HYBRID_FLAG}=true\",\n", |
735 | 738 | " \"--output-extra-convergence-info=steps,iterations\",\n", |
736 | 739 | " \"--newton-min-iterations=0\",\n", |
737 | 740 | " f\"--output-dir={output_dir}/hybrid_tol_{tol_mb}\",\n", |
738 | 741 | " \"--full-time-step-initially=true\",\n", |
739 | 742 | " f\"--tolerance-mb={tol_mb}\",\n", |
740 | 743 | " f\"--tolerance-mb-relaxed={tol_mb}\",\n", |
741 | | - " f\"--tolerance-cnv=1e-1\",\n", |
742 | | - " f\"--tolerance-cnv-relaxed=1e-1\",\n", |
| 744 | + " \"--tolerance-cnv=1e-1\",\n", |
| 745 | + " \"--tolerance-cnv-relaxed=1e-1\",\n", |
743 | 746 | "]\n", |
744 | 747 | "subprocess.run(hybrid_cmd, stdout=subprocess.DEVNULL, check=True)\n", |
745 | 748 | "hybrid_output_path = f\"{output_dir}/hybrid_tol_{tol_mb}/{deck_name}\"\n", |
|
750 | 753 | }, |
751 | 754 | { |
752 | 755 | "cell_type": "code", |
753 | | - "execution_count": 19, |
| 756 | + "execution_count": 21, |
754 | 757 | "id": "6d84c10e", |
755 | 758 | "metadata": {}, |
756 | 759 | "outputs": [ |
|
0 commit comments