<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE article PUBLIC "-//NLM//DTD Journal Publishing DTD v2.3 20070202//EN" "journalpublishing.dtd">
<article article-type="research-article" dtd-version="2.3" xml:lang="EN" xmlns:mml="http://www.w3.org/1998/Math/MathML" xmlns:xlink="http://www.w3.org/1999/xlink">
<front>
<journal-meta>
<journal-id journal-id-type="publisher-id">Front. Appl. Math. Stat.</journal-id>
<journal-title>Frontiers in Applied Mathematics and Statistics</journal-title>
<abbrev-journal-title abbrev-type="pubmed">Front. Appl. Math. Stat.</abbrev-journal-title>
<issn pub-type="epub">2297-4687</issn>
<publisher>
<publisher-name>Frontiers Media S.A.</publisher-name>
</publisher>
</journal-meta>
<article-meta>
<article-id pub-id-type="publisher-id">651178</article-id>
<article-id pub-id-type="doi">10.3389/fams.2021.651178</article-id>
<article-categories>
<subj-group subj-group-type="heading">
<subject>Applied Mathematics and Statistics</subject>
<subj-group>
<subject>Original Research</subject>
</subj-group>
</subj-group>
</article-categories>
<title-group>
<article-title>Physics-Aware Deep-Learning-Based Proxy Reservoir Simulation Model Equipped With State and Well Output Prediction</article-title>
<alt-title alt-title-type="left-running-head">Coutinho et&#x20;al.</alt-title>
<alt-title alt-title-type="right-running-head">Deep-Learning-Based Proxy Reservoir Simulation Model</alt-title>
</title-group>
<contrib-group>
<contrib contrib-type="author" corresp="yes">
<name>
<surname>Coutinho</surname>
<given-names>Emilio Jose Rocha</given-names>
</name>
<xref ref-type="aff" rid="aff1">
<sup>1</sup>
</xref>
<xref ref-type="aff" rid="aff2">
<sup>2</sup>
</xref>
<xref ref-type="corresp" rid="c001">&#x2a;</xref>
<xref ref-type="fn" rid="fn1">
<sup>&#x2020;</sup>
</xref>
<xref ref-type="fn" rid="fn2">
<sup>&#x2021;</sup>
</xref>
<uri xlink:href="https://loop.frontiersin.org/people/1116216/overview"/>
</contrib>
<contrib contrib-type="author">
<name>
<surname>Dall&#x2019;Aqua</surname>
<given-names>Marcelo</given-names>
</name>
<xref ref-type="aff" rid="aff1">
<sup>1</sup>
</xref>
<xref ref-type="fn" rid="fn1">
<sup>&#x2020;</sup>
</xref>
<uri xlink:href="https://loop.frontiersin.org/people/1284825/overview"/>
</contrib>
<contrib contrib-type="author">
<name>
<surname>Gildin</surname>
<given-names>Eduardo</given-names>
</name>
<xref ref-type="aff" rid="aff1">
<sup>1</sup>
</xref>
<xref ref-type="fn" rid="fn1">
<sup>&#x2020;</sup>
</xref>
<uri xlink:href="https://loop.frontiersin.org/people/1373537/overview"/>
</contrib>
</contrib-group>
<aff id="aff1">
<label>
<sup>1</sup>
</label>Department of Petroleum Engineering, Texas A&#x26;M University, <addr-line>College Station</addr-line>, <addr-line>TX</addr-line>, <country>United&#x20;States</country>
</aff>
<aff id="aff2">
<label>
<sup>2</sup>
</label>Petrobras, <addr-line>Rio de Janeiro</addr-line>, <country>Brazil</country>
</aff>
<author-notes>
<fn fn-type="edited-by">
<p>
<bold>Edited by:</bold> <ext-link ext-link-type="uri" xlink:href="https://loop.frontiersin.org/people/884612/overview">Behnam Jafarpour</ext-link>, University of Southern California, United&#x20;States</p>
</fn>
<fn fn-type="edited-by">
<p>
<bold>Reviewed by:</bold> <ext-link ext-link-type="uri" xlink:href="https://loop.frontiersin.org/people/1269278/overview">Atefeh Jahandideh</ext-link>, University of Southern California, United&#x20;States</p>
<p>
<ext-link ext-link-type="uri" xlink:href="https://loop.frontiersin.org/people/1046123/overview">Olwijn Leeuwenburgh</ext-link>, Netherlands Organisation for Applied Scientific Research, Netherlands</p>
</fn>
<corresp id="c001">&#x2a;Correspondence: Emilio Jose Rocha Coutinho, <email>emiliocoutinho@gmail.com</email>
</corresp>
<fn fn-type="equal" id="fn1">
<label>
<sup>&#x2020;</sup>
</label>
<p>These authors have contributed equally to this&#x20;work</p>
</fn>
<fn fn-type="equal" id="fn2">
<label>
<sup>&#x2021;</sup>
</label>
<p>These authors share first authorship</p>
</fn>
<fn fn-type="other">
<p>This article was submitted to Mathematics of Computation and Data Science, a section of the journal Frontiers in Applied Mathematics and Statistics</p>
</fn>
</author-notes>
<pub-date pub-type="epub">
<day>06</day>
<month>09</month>
<year>2021</year>
</pub-date>
<pub-date pub-type="collection">
<year>2021</year>
</pub-date>
<volume>7</volume>
<elocation-id>651178</elocation-id>
<history>
<date date-type="received">
<day>08</day>
<month>01</month>
<year>2021</year>
</date>
<date date-type="accepted">
<day>28</day>
<month>06</month>
<year>2021</year>
</date>
</history>
<permissions>
<copyright-statement>Copyright &#xa9; 2021 Coutinho, Dall&#x2019;Aqua and Gildin.</copyright-statement>
<copyright-year>2021</copyright-year>
<copyright-holder>Coutinho, Dall&#x2019;Aqua and Gildin</copyright-holder>
<license xlink:href="http://creativecommons.org/licenses/by/4.0/">
<p>This is an open-access article distributed under the terms of the Creative Commons Attribution License (CC BY). The use, distribution or reproduction in other forums is permitted, provided the original author(s) and the copyright owner(s) are credited and that the original publication in this journal is cited, in accordance with accepted academic practice. No use, distribution or reproduction is permitted which does not comply with these&#x20;terms.</p>
</license>
</permissions>
<abstract>
<p>Data-driven methods have been revolutionizing the way physicists and engineers handle complex and challenging problems even when the physics is not fully understood. However, these models very often lack interpretability. Physics-aware machine learning (ML) techniques have been used to endow proxy models with features closely related to the ones encountered in nature; examples span from material balance to conservation laws. In this study, we proposed a hybrid-based approach that incorporates physical constraints (physics-based) and yet is driven by input/output data (data-driven), leading to fast, reliable, and interpretable reservoir simulation models. To this end, we built on a recently developed deep learning&#x2013;based reduced-order modeling framework by adding a new step related to information on the input&#x2013;output behavior (e.g., well rates) of the reservoir and not only the states (e.g., pressure and saturation) matching. A deep-neural network (DNN) architecture is used to predict the state variables evolution after training an autoencoder coupled with a control system approach (Embed to Control&#x2014;E2C) along with the addition of some physical components (loss functions) to the neural network training procedure. Here, we extend this idea by adding the simulation model output, for example, well bottom-hole pressure and well flow rates, as data to be used in the training procedure. Additionally, we introduce a new architecture to the E2C transition model by adding a new neural network component to handle the connections between state variables and model outputs. By doing this, it is possible to estimate the evolution in time of both the state and output variables simultaneously. Such a non-intrusive data-driven method does not need to have access to the reservoir simulation internal structure, so it can be easily applied to commercial reservoir simulators. The proposed method is applied to an oil&#x2013;water model with heterogeneous permeability, including four injectors and five producer wells. We used 300 sampled well control sets to train the autoencoder and another set to validate the obtained autoencoder parameters. We show our proxy&#x2019;s accuracy and robustness by running two different neural network architectures (propositions 2 and 3), and we compare our results with the original E2C framework developed for reservoir simulation.</p>
</abstract>
<kwd-group>
<kwd>reduced-order model (ROM)</kwd>
<kwd>deep convolutional neural networks</kwd>
<kwd>production control optimization</kwd>
<kwd>machine learning</kwd>
<kwd>autoencoder</kwd>
</kwd-group>
</article-meta>
</front>
<body>
<sec id="s1">
<title>1 Introduction</title>
<p>In this study, we build upon a recent study on embedding physical constraints to machine learning architectures to efficiently and accurately solve large-scale reservoir simulation problems [<xref ref-type="bibr" rid="B1">1</xref>, <xref ref-type="bibr" rid="B2">2</xref>]. Scientific Machine Learning (SciML) is a rapidly developing area in reservoir simulation. SciML introduces regularizing physics constraints, allowing predicting future performance of complex multiscale, multiphysics systems using sparse, low-fidelity, and heterogeneous data. Here, we address the problem of creating consistent input&#x2013;output relations for a reservoir run, taking into account physical constraints such as mass conservation, multiphase flow flux matching, and well outputs (rates) derived directly from&#x20;data.</p>
<p>Simulation of complex problems can usually be performed by recasting the underlying partial differential equations into a (non-linear) dynamical system state-space representation. This approach has been explored in numerical petroleum reservoir simulation, and several techniques were developed or applied to handle the intrinsic nonlinearities of this problem [<xref ref-type="bibr" rid="B3">3</xref>]. The main idea is to extract information from states, which are usually given by phase pressures and saturations&#x2014;as in multiphase flow in porous media with no coupling with additional phenomena, such as geomechanics. Although state-space models can be easily manipulated, the transformation of the reservoir simulation equations induces systems with a very large number of states. In this case, model reduction methods [<xref ref-type="bibr" rid="B4">4</xref>, <xref ref-type="bibr" rid="B5">5</xref>] can be used to reduce the complexity of the problem and mitigate the large computation cost associate with the solution under consideration.</p>
<p>The area of model order reduction (MOR) for reservoir simulation has been very active in the past decade and goes beyond recent projection-based MOR developments. Methods such as upscaling, proxy and surrogate modeling, and parameterization have always found their ways in reservoir simulation. It is not the intention here to give a comprehensive historical account of MOR, but two methods have emerged as good candidates for projection-based MOR: POD-TPWL [<xref ref-type="bibr" rid="B5">5</xref>&#x2013;<xref ref-type="bibr" rid="B7">7</xref>] and POD-DEIM [<xref ref-type="bibr" rid="B8">8</xref>&#x2013;<xref ref-type="bibr" rid="B10">10</xref>]. Each of these methods has its advantages and drawbacks, which have been discussed in many published articles [<xref ref-type="bibr" rid="B9">9</xref>, <xref ref-type="bibr" rid="B11">11</xref>]. The unifying framework in these methods is projection; that is, we project the original large state-space model into a much smaller space of (almost) non-physical significance. The recovery of physical meaning is usually attained by proper training and storage of the states of the system. Although very efficient algorithms can be used for improving state selection through clustering and adaptation, the lack of physical meaning can hinder the application of complex phenomena simulations. This is to say that the reduced-order model&#x2019;s output, that is, well rates and bottom-hole pressures, can sometimes differ significantly from the original fine-scale simulation.</p>
<p>Data-driven modeling in reservoir engineering is not new [<xref ref-type="bibr" rid="B12">12</xref>]. Many data-analytics and statistical multi-variable regression have been applied in reservoir simulation to obtain fast proxy models [<xref ref-type="bibr" rid="B13">13</xref>, <xref ref-type="bibr" rid="B14">14</xref>]. Recently there has been an explosion of methods associated at large with machine learning algorithms [<xref ref-type="bibr" rid="B15">15</xref>&#x2013;<xref ref-type="bibr" rid="B17">17</xref>]. It is our view, however, that the machinery developed with physics-based model reduction, especially the strategies derived from state-space identification, can be enhanced with machine learning algorithms. System identification can lead to parametric models where the structure of the model is predefined (see <xref ref-type="fig" rid="F1">Figure&#x20;1</xref>, for instance, for the state-space representation), whereas machine learning methods lead to non-parametric models and depend largely on the number of training points [<xref ref-type="bibr" rid="B18">18</xref>,&#x20;<xref ref-type="bibr" rid="B19">19</xref>].</p>
<fig id="F1" position="float">
<label>FIGURE 1</label>
<caption>
<p>System representation.</p>
</caption>
<graphic xlink:href="fams-07-651178-g001.tif"/>
</fig>
<p>A combination of data-driven model reduction strategies and machine learning (deep-neural networks&#x2013;DNN) will be used here to achieve state and input&#x2013;output matching simultaneously. In [<xref ref-type="bibr" rid="B2">2</xref>], the authors use a DNN architecture to predict the state variables evolution after training an autoencoder coupled with a control system approach (Embed to Control&#x2014;E2C) and adding some physical components (Loss functions) to the neural network training procedure. The idea was to use the framework of the POD-TPWL as a way to recast the reservoir simulator from a system perspective and obtain reduced-order states out of the encoding blocks. Physical constraints were handled by employing particular loss functions related to mass conservation.</p>
<p>In this study, we extend this idea by adding the simulation model output, for example, well bottom-hole pressure and well flow rates, as data to be used in the training procedure. The contributions here are twofold: first, we have extended the E2C to the E2CO (E2C and Observe) form, which allows a generalization of the method to any type of well model. By doing this, it is possible to estimate the evolution in time of both the state variables as well as the output variables simultaneously. Second, our new formulation provides a fast and reliable proxy for the simulation outputs that can be coupled with other components in reservoir management workflows&#x2014;for instance, well-control optimization workflows such a non-intrusive method, like data-driven models, does not need to have access to reservoir simulation internal structure so that it can be easily applied to commercial reservoir simulations. We view this as an analogous step to system identification whereby mappings related to state dynamics, inputs (controls), and measurements (output) are obtained.</p>
<p>This study is organized as follows. We start by giving a brief overview of numerical reservoir simulation, focusing on the aspects that will be used to develop the ideas presented here, such as identifying states. Next, we revisit the model order reduction (MOR) framework and the methods used here, such as the trajectory piecewise linearization&#x2014;TPWL and proper orthogonal decomposition&#x2014;POD. Then, we describe the machine learning architecture E2C and revisit the methodology used as a basis for our study. This leads to the introduction of our main contribution and new propositions to handle the reservoir outputs. Finally, we give details of our implementation and a description of the training set&#x2019;s data. We show the results comparing the propositions, and we draw some conclusions in the&#x20;end.</p>
<sec id="s1-1">
<title>1.1 Numerical Petroleum Reservoir Simulation</title>
<p>Widely used in all phases of development of an oil field, reservoir simulations are applied to model flow dynamics and predict reservoir performance from preliminary exploration until the full development stage of petroleum production. A deep understanding of the model, discretization, and solution methods can be found in [<xref ref-type="bibr" rid="B20">20</xref>,&#x20;<xref ref-type="bibr" rid="B21">21</xref>].</p>
<p>A reservoir simulator is a combination of rock and geological structure properties, fluid properties, and a mathematical representation of the subsurface flow dynamics. A two-phase (oil and water) two-dimensional reservoir simulator is based on flow equations represented in <xref ref-type="disp-formula" rid="e1">Eq. 1</xref>.<disp-formula id="e1">
<mml:math id="m1">
<mml:mrow>
<mml:mo>&#x2207;</mml:mo>
<mml:mrow>
<mml:mo>[</mml:mo>
<mml:mrow>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mover accent="true">
<mml:mi>k</mml:mi>
<mml:mo>&#x2192;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mo stretchy="true">&#x2192;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mfrac>
<mml:mrow>
<mml:msub>
<mml:mi>k</mml:mi>
<mml:mrow>
<mml:mi>r</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>j</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mi>S</mml:mi>
<mml:mi>j</mml:mi>
</mml:msub>
</mml:mrow>
<mml:mo>)</mml:mo>
</mml:mrow>
</mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mi>&#x3bc;</mml:mi>
<mml:mi>j</mml:mi>
</mml:msub>
</mml:mrow>
</mml:mfrac>
<mml:msub>
<mml:mi>&#x3c1;</mml:mi>
<mml:mi>j</mml:mi>
</mml:msub>
<mml:mo>&#x2207;</mml:mo>
<mml:msub>
<mml:mi>P</mml:mi>
<mml:mi>j</mml:mi>
</mml:msub>
</mml:mrow>
<mml:mo>]</mml:mo>
</mml:mrow>
<mml:mo>&#x2b;</mml:mo>
<mml:msub>
<mml:mi>q</mml:mi>
<mml:mi>j</mml:mi>
</mml:msub>
<mml:mo>&#x2212;</mml:mo>
<mml:mfrac>
<mml:mo>&#x2202;</mml:mo>
<mml:mrow>
<mml:mo>&#x2202;</mml:mo>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:mfrac>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:mi>&#x3d5;</mml:mi>
<mml:msub>
<mml:mi>S</mml:mi>
<mml:mi>j</mml:mi>
</mml:msub>
<mml:msub>
<mml:mi>&#x3c1;</mml:mi>
<mml:mi>j</mml:mi>
</mml:msub>
</mml:mrow>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:mo>&#x3d;</mml:mo>
<mml:mn>0</mml:mn>
<mml:mo>,</mml:mo>
</mml:mrow>
</mml:math>
<label>(1)</label>
</disp-formula>where the subscript <italic>j</italic> represents the phase oil or water, <italic>k</italic> is the absolute permeability, <inline-formula id="inf1">
<mml:math id="m2">
<mml:mrow>
<mml:msub>
<mml:mi>k</mml:mi>
<mml:mi>r</mml:mi>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula> is the relative permeability, <italic>&#xb5;</italic> is the viscosity, <italic>&#x3c1;</italic> is the fluid density, and <italic>&#x3d5;</italic> is porosity. The solution we seek here is&#x20;<inline-formula id="inf2">
<mml:math id="m3">
<mml:mrow>
<mml:msub>
<mml:mi>P</mml:mi>
<mml:mi>j</mml:mi>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mi>S</mml:mi>
<mml:mi>j</mml:mi>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula>.</p>
<p>It is possible to identify three terms on <xref ref-type="disp-formula" rid="e1">Eq. 1</xref>: the first one is the flux term, followed by the source/sink term, and the last one is the accumulation term. Although we only describe a two-phase flow system, these equations can easily generalize for multiphase flow simulations. As stated before, the reservoir simulation equations can be recast in a systems framework, where the nonlinear equations can be linearized into a time-varying state-space model as depicted in <xref ref-type="fig" rid="F1">Figure&#x20;1</xref>. Note that while the controls <italic>u</italic> are imposed on the wells, the state <italic>x</italic> evolution is calculated based on the discretized partial differential equation (<xref ref-type="disp-formula" rid="e1">Eq. 1</xref>), and the output <italic>y</italic> is observed on the&#x20;wells.</p>
<p>In general, the wells can be controlled by flow rates or bottom-hole pressure (BHP). Here we will assume that the producer wells are controlled by BHP and injector wells are&#x20;controlled by injection rate (<inline-formula id="inf3">
<mml:math id="m4">
<mml:mrow>
<mml:msub>
<mml:mi>q</mml:mi>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mi>n</mml:mi>
<mml:mi>j</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula>). So, we can define a control vector composed of the controls for all wells at a timestep <italic>t</italic> as:<disp-formula id="equ1">
<mml:math id="m5">
<mml:mrow>
<mml:msup>
<mml:mi>u</mml:mi>
<mml:mi>t</mml:mi>
</mml:msup>
<mml:mo>&#x3d;</mml:mo>
<mml:mrow>
<mml:mo>[</mml:mo>
<mml:mrow>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msup>
<mml:mrow>
<mml:mtext>BHP</mml:mtext>
</mml:mrow>
<mml:mi>t</mml:mi>
</mml:msup>
</mml:mrow>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msubsup>
<mml:mi>q</mml:mi>
<mml:mrow>
<mml:mtext>inj</mml:mtext>
</mml:mrow>
<mml:mi>t</mml:mi>
</mml:msubsup>
</mml:mrow>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:mrow>
<mml:mo>]</mml:mo>
</mml:mrow>
<mml:mo>,</mml:mo>
</mml:mrow>
</mml:math>
</disp-formula>where <inline-formula id="inf4">
<mml:math id="m6">
<mml:mrow>
<mml:msup>
<mml:mrow>
<mml:mtext>BHP</mml:mtext>
</mml:mrow>
<mml:mi>t</mml:mi>
</mml:msup>
<mml:mo>&#x3d;</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mo>[</mml:mo>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mtext>BHP</mml:mtext>
</mml:mrow>
<mml:mn>1</mml:mn>
<mml:mi>t</mml:mi>
</mml:msubsup>
</mml:mrow>
</mml:mtd>
<mml:mtd>
<mml:mo>&#x2026;</mml:mo>
</mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mtext>BHP</mml:mtext>
</mml:mrow>
<mml:mi>p</mml:mi>
<mml:mi>t</mml:mi>
</mml:msubsup>
</mml:mrow>
</mml:mtd>
</mml:mtr>
</mml:mtable>
<mml:mo>]</mml:mo>
</mml:mrow>
<mml:mi>T</mml:mi>
</mml:msup>
</mml:mrow>
</mml:math>
</inline-formula>, <inline-formula id="inf5">
<mml:math id="m7">
<mml:mrow>
<mml:msubsup>
<mml:mi>q</mml:mi>
<mml:mrow>
<mml:mtext>inj</mml:mtext>
</mml:mrow>
<mml:mi>t</mml:mi>
</mml:msubsup>
<mml:mo>&#x3d;</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mo>[</mml:mo>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msubsup>
<mml:mi>q</mml:mi>
<mml:mrow>
<mml:mtext>inj</mml:mtext>
<mml:mo>,</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
<mml:mi>t</mml:mi>
</mml:msubsup>
</mml:mrow>
</mml:mtd>
<mml:mtd>
<mml:mo>&#x2026;</mml:mo>
</mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:msubsup>
<mml:mi>q</mml:mi>
<mml:mrow>
<mml:mtext>inj</mml:mtext>
<mml:mo>,</mml:mo>
<mml:mi>i</mml:mi>
</mml:mrow>
<mml:mi>t</mml:mi>
</mml:msubsup>
</mml:mrow>
</mml:mtd>
</mml:mtr>
</mml:mtable>
<mml:mo>]</mml:mo>
</mml:mrow>
<mml:mi>T</mml:mi>
</mml:msup>
</mml:mrow>
</mml:math>
</inline-formula>, <italic>p</italic> is the number of producers, and <italic>i</italic> the number of injectors.</p>
<p>The state dynamical evolution will be solved for each timestep <italic>t</italic>. The state is represented as:<disp-formula id="equ2">
<mml:math id="m8">
<mml:mrow>
<mml:msup>
<mml:mi>x</mml:mi>
<mml:mi>t</mml:mi>
</mml:msup>
<mml:mo>&#x3d;</mml:mo>
<mml:mrow>
<mml:mo>[</mml:mo>
<mml:mrow>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msup>
<mml:mi>P</mml:mi>
<mml:mi>t</mml:mi>
</mml:msup>
</mml:mrow>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msup>
<mml:mi>S</mml:mi>
<mml:mi>t</mml:mi>
</mml:msup>
</mml:mrow>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:mrow>
<mml:mo>]</mml:mo>
</mml:mrow>
<mml:mo>,</mml:mo>
</mml:mrow>
</mml:math>
</disp-formula>where <inline-formula id="inf6">
<mml:math id="m9">
<mml:mrow>
<mml:msup>
<mml:mi>P</mml:mi>
<mml:mi>t</mml:mi>
</mml:msup>
<mml:mo>&#x3d;</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mo>[</mml:mo>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msubsup>
<mml:mi>P</mml:mi>
<mml:mn>1</mml:mn>
<mml:mi>t</mml:mi>
</mml:msubsup>
</mml:mrow>
</mml:mtd>
<mml:mtd>
<mml:mo>&#x2026;</mml:mo>
</mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:msubsup>
<mml:mi>P</mml:mi>
<mml:mi>n</mml:mi>
<mml:mi>t</mml:mi>
</mml:msubsup>
</mml:mrow>
</mml:mtd>
</mml:mtr>
</mml:mtable>
<mml:mo>]</mml:mo>
</mml:mrow>
<mml:mi>T</mml:mi>
</mml:msup>
</mml:mrow>
</mml:math>
</inline-formula>, <inline-formula id="inf7">
<mml:math id="m10">
<mml:mrow>
<mml:msup>
<mml:mi>S</mml:mi>
<mml:mi>t</mml:mi>
</mml:msup>
<mml:mo>&#x3d;</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mo>[</mml:mo>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msubsup>
<mml:mi>S</mml:mi>
<mml:mn>1</mml:mn>
<mml:mi>t</mml:mi>
</mml:msubsup>
</mml:mrow>
</mml:mtd>
<mml:mtd>
<mml:mo>&#x2026;</mml:mo>
</mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:msubsup>
<mml:mi>S</mml:mi>
<mml:mi>n</mml:mi>
<mml:mi>t</mml:mi>
</mml:msubsup>
</mml:mrow>
</mml:mtd>
</mml:mtr>
</mml:mtable>
<mml:mo>]</mml:mo>
</mml:mrow>
<mml:mi>T</mml:mi>
</mml:msup>
</mml:mrow>
</mml:math>
</inline-formula>, and <italic>n</italic> is the number of gridblocks.</p>
<p>The output for the producers is the oil flow rate (<inline-formula id="inf8">
<mml:math id="m11">
<mml:mrow>
<mml:msub>
<mml:mi>q</mml:mi>
<mml:mi>o</mml:mi>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula>) and the water flow rate (<inline-formula id="inf9">
<mml:math id="m12">
<mml:mrow>
<mml:msub>
<mml:mi>q</mml:mi>
<mml:mi>w</mml:mi>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula>) and for the injectors is the bottom hole pressure (BHP). Thus, the output vector can be defined as:<disp-formula id="e2">
<mml:math id="m13">
<mml:mrow>
<mml:msup>
<mml:mi>y</mml:mi>
<mml:mi>t</mml:mi>
</mml:msup>
<mml:mo>&#x3d;</mml:mo>
<mml:mrow>
<mml:mo>[</mml:mo>
<mml:mrow>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msubsup>
<mml:mi>q</mml:mi>
<mml:mi>o</mml:mi>
<mml:mi>t</mml:mi>
</mml:msubsup>
</mml:mrow>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msubsup>
<mml:mi>q</mml:mi>
<mml:mi>w</mml:mi>
<mml:mi>t</mml:mi>
</mml:msubsup>
</mml:mrow>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msup>
<mml:mrow>
<mml:mtext>BHP</mml:mtext>
</mml:mrow>
<mml:mi>t</mml:mi>
</mml:msup>
</mml:mrow>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:mrow>
<mml:mo>]</mml:mo>
</mml:mrow>
<mml:mo>,</mml:mo>
</mml:mrow>
</mml:math>
<label>(2)</label>
</disp-formula>where <inline-formula id="inf10">
<mml:math id="m14">
<mml:mrow>
<mml:msubsup>
<mml:mi>q</mml:mi>
<mml:mi>o</mml:mi>
<mml:mi>t</mml:mi>
</mml:msubsup>
<mml:mo>&#x3d;</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mo>[</mml:mo>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msubsup>
<mml:mi>q</mml:mi>
<mml:mrow>
<mml:mi>o</mml:mi>
<mml:mo>,</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
<mml:mi>t</mml:mi>
</mml:msubsup>
</mml:mrow>
</mml:mtd>
<mml:mtd>
<mml:mo>&#x2026;</mml:mo>
</mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:msubsup>
<mml:mi>q</mml:mi>
<mml:mrow>
<mml:mi>o</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>p</mml:mi>
</mml:mrow>
<mml:mi>t</mml:mi>
</mml:msubsup>
</mml:mrow>
</mml:mtd>
</mml:mtr>
</mml:mtable>
<mml:mo>]</mml:mo>
</mml:mrow>
<mml:mi>T</mml:mi>
</mml:msup>
</mml:mrow>
</mml:math>
</inline-formula>, <inline-formula id="inf11">
<mml:math id="m15">
<mml:mrow>
<mml:msubsup>
<mml:mi>q</mml:mi>
<mml:mi>w</mml:mi>
<mml:mi>t</mml:mi>
</mml:msubsup>
<mml:mo>&#x3d;</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mo>[</mml:mo>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msubsup>
<mml:mi>q</mml:mi>
<mml:mrow>
<mml:mi>w</mml:mi>
<mml:mo>,</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
<mml:mi>t</mml:mi>
</mml:msubsup>
</mml:mrow>
</mml:mtd>
<mml:mtd>
<mml:mo>&#x2026;</mml:mo>
</mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:msubsup>
<mml:mi>q</mml:mi>
<mml:mrow>
<mml:mi>w</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>p</mml:mi>
</mml:mrow>
<mml:mi>t</mml:mi>
</mml:msubsup>
</mml:mrow>
</mml:mtd>
</mml:mtr>
</mml:mtable>
<mml:mo>]</mml:mo>
</mml:mrow>
<mml:mi>T</mml:mi>
</mml:msup>
</mml:mrow>
</mml:math>
</inline-formula>, <inline-formula id="inf12">
<mml:math id="m16">
<mml:mrow>
<mml:msup>
<mml:mrow>
<mml:mtext>BHP</mml:mtext>
</mml:mrow>
<mml:mi>t</mml:mi>
</mml:msup>
<mml:mo>&#x3d;</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mo>[</mml:mo>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mtext>BHP</mml:mtext>
</mml:mrow>
<mml:mn>1</mml:mn>
<mml:mi>t</mml:mi>
</mml:msubsup>
</mml:mrow>
</mml:mtd>
<mml:mtd>
<mml:mo>&#x2026;</mml:mo>
</mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mtext>BHP</mml:mtext>
</mml:mrow>
<mml:mi>i</mml:mi>
<mml:mi>t</mml:mi>
</mml:msubsup>
</mml:mrow>
</mml:mtd>
</mml:mtr>
</mml:mtable>
<mml:mo>]</mml:mo>
</mml:mrow>
<mml:mi>T</mml:mi>
</mml:msup>
</mml:mrow>
</mml:math>
</inline-formula>. These values are calculated using the Peaceman equation [<xref ref-type="bibr" rid="B22">22</xref>]. For example, for a producer well, the flow rate of phase <italic>j</italic> can be calculated as:<disp-formula id="e3">
<mml:math id="m17">
<mml:mrow>
<mml:msub>
<mml:mi>q</mml:mi>
<mml:mi>j</mml:mi>
</mml:msub>
<mml:mo>&#x3d;</mml:mo>
<mml:mfrac>
<mml:mrow>
<mml:msub>
<mml:mi>k</mml:mi>
<mml:mrow>
<mml:mi>r</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>j</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mi>B</mml:mi>
<mml:mi>j</mml:mi>
</mml:msub>
<mml:msub>
<mml:mi>&#x3bc;</mml:mi>
<mml:mi>j</mml:mi>
</mml:msub>
</mml:mrow>
</mml:mfrac>
<mml:mtext>WI</mml:mtext>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mi>P</mml:mi>
<mml:mi>j</mml:mi>
</mml:msub>
<mml:mo>&#x2212;</mml:mo>
<mml:mi>B</mml:mi>
<mml:mi>H</mml:mi>
<mml:mi>P</mml:mi>
</mml:mrow>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:mo>,</mml:mo>
</mml:mrow>
</mml:math>
<label>(3)</label>
</disp-formula>where WI is the well index and can be calculated as:<disp-formula id="equ3">
<mml:math id="m18">
<mml:mrow>
<mml:mtext>WI</mml:mtext>
<mml:mo>&#x3d;</mml:mo>
<mml:mfrac>
<mml:mrow>
<mml:mn>2</mml:mn>
<mml:mi>&#x3c0;</mml:mi>
<mml:mi>&#x3b1;</mml:mi>
<mml:mi>k</mml:mi>
<mml:mi>h</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mtext>ln</mml:mtext>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:mfrac>
<mml:mrow>
<mml:msub>
<mml:mi>r</mml:mi>
<mml:mi>o</mml:mi>
</mml:msub>
</mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mi>r</mml:mi>
<mml:mi>w</mml:mi>
</mml:msub>
</mml:mrow>
</mml:mfrac>
</mml:mrow>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:mo>&#x2b;</mml:mo>
<mml:mtext>SKIN</mml:mtext>
</mml:mrow>
</mml:mfrac>
<mml:mo>,</mml:mo>
</mml:mrow>
</mml:math>
</disp-formula>where <italic>&#x3b1;</italic> is a unit conversion factor, <italic>h</italic> is the height of the reservoir gridblock, <inline-formula id="inf13">
<mml:math id="m19">
<mml:mrow>
<mml:msub>
<mml:mi>r</mml:mi>
<mml:mi>o</mml:mi>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula> is the grid block dimension equivalent radius, <inline-formula id="inf14">
<mml:math id="m20">
<mml:mrow>
<mml:msub>
<mml:mi>r</mml:mi>
<mml:mi>w</mml:mi>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula> is the wellbore radius, and SKIN is the skin factor.</p>
<p>Following the assumptions as in [<xref ref-type="bibr" rid="B3">3</xref>] and the application of fully implicit discretization it is possible to write the residual form of <xref ref-type="disp-formula" rid="e1">Eq. 1</xref> as:<disp-formula id="e4">
<mml:math id="m21">
<mml:mrow>
<mml:mi>g</mml:mi>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:msup>
<mml:mi>x</mml:mi>
<mml:mrow>
<mml:mi>t</mml:mi>
<mml:mo>&#x2b;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msup>
<mml:mo>,</mml:mo>
<mml:msup>
<mml:mi>u</mml:mi>
<mml:mrow>
<mml:mi>t</mml:mi>
<mml:mo>&#x2b;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msup>
</mml:mrow>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:mo>&#x3d;</mml:mo>
<mml:mi mathvariant="bold">F</mml:mi>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:msup>
<mml:mi>x</mml:mi>
<mml:mrow>
<mml:mi>t</mml:mi>
<mml:mo>&#x2b;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msup>
</mml:mrow>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:mo>&#x2b;</mml:mo>
<mml:mi mathvariant="bold">Acc</mml:mi>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:msup>
<mml:mi>x</mml:mi>
<mml:mrow>
<mml:mi>t</mml:mi>
<mml:mo>&#x2b;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msup>
<mml:mo>,</mml:mo>
<mml:msup>
<mml:mi>x</mml:mi>
<mml:mi>t</mml:mi>
</mml:msup>
</mml:mrow>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:mo>&#x2b;</mml:mo>
<mml:mi mathvariant="bold">Q</mml:mi>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:msup>
<mml:mi>x</mml:mi>
<mml:mrow>
<mml:mi>t</mml:mi>
<mml:mo>&#x2b;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msup>
<mml:mo>,</mml:mo>
<mml:msup>
<mml:mi>u</mml:mi>
<mml:mrow>
<mml:mi>t</mml:mi>
<mml:mo>&#x2b;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msup>
</mml:mrow>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:mo>&#x3d;</mml:mo>
<mml:mn>0</mml:mn>
<mml:mo>,</mml:mo>
</mml:mrow>
</mml:math>
<label>(4)</label>
</disp-formula>where we can identify the flux term <inline-formula id="inf15">
<mml:math id="m22">
<mml:mrow>
<mml:mi mathvariant="bold">F</mml:mi>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:msup>
<mml:mi>x</mml:mi>
<mml:mrow>
<mml:mi>t</mml:mi>
<mml:mo>&#x2b;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msup>
</mml:mrow>
<mml:mo>)</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:math>
</inline-formula>, the accumulation term <inline-formula id="inf16">
<mml:math id="m23">
<mml:mrow>
<mml:mi mathvariant="bold">Acc</mml:mi>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:msup>
<mml:mi>x</mml:mi>
<mml:mrow>
<mml:mi>t</mml:mi>
<mml:mo>&#x2b;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msup>
<mml:mo>,</mml:mo>
<mml:msup>
<mml:mi>x</mml:mi>
<mml:mi>t</mml:mi>
</mml:msup>
</mml:mrow>
<mml:mo>)</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:math>
</inline-formula>, and the source and sink term <inline-formula id="inf17">
<mml:math id="m24">
<mml:mrow>
<mml:mi mathvariant="bold">Q</mml:mi>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:msup>
<mml:mi>x</mml:mi>
<mml:mrow>
<mml:mi>t</mml:mi>
<mml:mo>&#x2b;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msup>
<mml:mo>,</mml:mo>
<mml:msup>
<mml:mi>u</mml:mi>
<mml:mrow>
<mml:mi>t</mml:mi>
<mml:mo>&#x2b;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msup>
</mml:mrow>
<mml:mo>)</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:math>
</inline-formula>.</p>
<p>This equation can be solved by the Newton&#x2019;s method by defining the Jacobian matrix <inline-formula id="inf18">
<mml:math id="m25">
<mml:mrow>
<mml:mi mathvariant="bold">J</mml:mi>
<mml:mo>&#x3d;</mml:mo>
<mml:mfrac>
<mml:mrow>
<mml:mo>&#x2202;</mml:mo>
<mml:mi>g</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2202;</mml:mo>
<mml:mi>x</mml:mi>
</mml:mrow>
</mml:mfrac>
</mml:mrow>
</mml:math>
</inline-formula>. So, the state evolution can be calculated as:<disp-formula id="e5">
<mml:math id="m26">
<mml:mrow>
<mml:msup>
<mml:mi>x</mml:mi>
<mml:mrow>
<mml:mi>t</mml:mi>
<mml:mo>&#x2b;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msup>
<mml:mo>&#x3d;</mml:mo>
<mml:msup>
<mml:mi>x</mml:mi>
<mml:mi>t</mml:mi>
</mml:msup>
<mml:mo>&#x2212;</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:msup>
<mml:mi mathvariant="bold">J</mml:mi>
<mml:mrow>
<mml:mi>t</mml:mi>
<mml:mo>&#x2b;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msup>
</mml:mrow>
<mml:mo>)</mml:mo>
</mml:mrow>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2212;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msup>
<mml:mrow>
<mml:mo>[</mml:mo>
<mml:mrow>
<mml:mi mathvariant="bold">F</mml:mi>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:msup>
<mml:mi>x</mml:mi>
<mml:mrow>
<mml:mi>t</mml:mi>
<mml:mo>&#x2b;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msup>
</mml:mrow>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:mo>&#x2b;</mml:mo>
<mml:mi mathvariant="bold">Acc</mml:mi>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:msup>
<mml:mi>x</mml:mi>
<mml:mrow>
<mml:mi>t</mml:mi>
<mml:mo>&#x2b;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msup>
<mml:mo>,</mml:mo>
<mml:msup>
<mml:mi>x</mml:mi>
<mml:mi>t</mml:mi>
</mml:msup>
</mml:mrow>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:mo>&#x2b;</mml:mo>
<mml:mi mathvariant="bold">Q</mml:mi>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:msup>
<mml:mi>x</mml:mi>
<mml:mrow>
<mml:mi>t</mml:mi>
<mml:mo>&#x2b;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msup>
<mml:mo>,</mml:mo>
<mml:msup>
<mml:mi>u</mml:mi>
<mml:mrow>
<mml:mi>t</mml:mi>
<mml:mo>&#x2b;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msup>
</mml:mrow>
<mml:mo>)</mml:mo>
</mml:mrow>
</mml:mrow>
<mml:mo>]</mml:mo>
</mml:mrow>
<mml:mo>.</mml:mo>
</mml:mrow>
</mml:math>
<label>(5)</label>
</disp-formula>
</p>
<p>To apply reduced-order modeling techniques to reservoir simulation efficiently, one can linearize the residual <xref ref-type="disp-formula" rid="e4">Eq. 4</xref> (or <xref ref-type="disp-formula" rid="e5">Eq. 5</xref>). In Ref. [<xref ref-type="bibr" rid="B23">23</xref>], the authors presented the linearization for a single-phase 2D reservoir based on the simulator&#x2019;s Jacobian matrix. Van Doren et&#x20;al. [<xref ref-type="bibr" rid="B24">24</xref>] and Heijn et&#x20;al. [<xref ref-type="bibr" rid="B25">25</xref>] developed similar approaches for a two-phase reservoir. These linearization methods were developed aligned to a control system approach, and the reader can find a comprehensive review of the control system applied to reservoir simulation in [<xref ref-type="bibr" rid="B3">3</xref>]. Committing with the control system approach, a state-space representation of a linear system can be written as <xref ref-type="disp-formula" rid="e6">Eq. 6</xref>. The authors cited in this paragraph manipulated equations similar to <xref ref-type="disp-formula" rid="e4">Eq. 4</xref> or <xref ref-type="disp-formula" rid="e5">Eq. 5</xref> to linearize them and write as a linear system.<disp-formula id="e6">
<mml:math id="m27">
<mml:mrow>
<mml:mrow>
<mml:mo>{</mml:mo>
<mml:mrow>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:mrow>
<mml:mover accent="true">
<mml:mi>x</mml:mi>
<mml:mo>&#x2d9;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mo>&#x3d;</mml:mo>
<mml:msub>
<mml:mi mathvariant="bold">A</mml:mi>
<mml:mi>c</mml:mi>
</mml:msub>
<mml:mi>x</mml:mi>
<mml:mo>&#x2b;</mml:mo>
<mml:msub>
<mml:mi mathvariant="bold">B</mml:mi>
<mml:mi>c</mml:mi>
</mml:msub>
<mml:mi>u</mml:mi>
</mml:mrow>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:mi>y</mml:mi>
<mml:mo>&#x3d;</mml:mo>
<mml:msub>
<mml:mi mathvariant="bold">C</mml:mi>
<mml:mi>c</mml:mi>
</mml:msub>
<mml:mi>x</mml:mi>
<mml:mo>&#x2b;</mml:mo>
<mml:msub>
<mml:mi mathvariant="bold">D</mml:mi>
<mml:mi>c</mml:mi>
</mml:msub>
<mml:mi>u</mml:mi>
</mml:mrow>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:mrow>
</mml:mrow>
<mml:mo>,</mml:mo>
</mml:mrow>
</mml:math>
<label>(6)</label>
</disp-formula>where <italic>x</italic> represents the state, <inline-formula id="inf19">
<mml:math id="m28">
<mml:mrow>
<mml:mover accent="true">
<mml:mi>x</mml:mi>
<mml:mo>&#x2d9;</mml:mo>
</mml:mover>
</mml:mrow>
</mml:math>
</inline-formula> the state time derivative (<inline-formula id="inf20">
<mml:math id="m29">
<mml:mrow>
<mml:mfrac>
<mml:mrow>
<mml:mtext>d</mml:mtext>
<mml:mi>x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mtext>d</mml:mtext>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:mfrac>
</mml:mrow>
</mml:math>
</inline-formula>), and <italic>u</italic> the inputs (controls) and <italic>y</italic> the system output. <inline-formula id="inf21">
<mml:math id="m30">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold">A</mml:mi>
<mml:mi>c</mml:mi>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula> is called state matrix, <inline-formula id="inf22">
<mml:math id="m31">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold">B</mml:mi>
<mml:mi>c</mml:mi>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula> input matrix, <inline-formula id="inf23">
<mml:math id="m32">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold">C</mml:mi>
<mml:mi>c</mml:mi>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula> output matrix, and <inline-formula id="inf24">
<mml:math id="m33">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold">D</mml:mi>
<mml:mi>c</mml:mi>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula> is the feed-through matrix. The subscript <italic>c</italic> stands for continuous time. It is worth mentioning that on <xref ref-type="disp-formula" rid="e6">Eq. 6</xref> we are presenting the state evolution equation (first one) and the output equation (second one), but the focus of linearization method is to be applied on the state evolution equation.</p>
<p>In general, it is necessary to choose a linearization point in time and use the Jacobian matrix at this time to calculate previously presented matrices. If the system dynamic strongly changes over time, the choice of a fixed linearization time can lead to large estimation errors. Techniques like TPWL (trajectory piecewise linearization) have been used to overcome these difficulties, where it is possible to approximate matrices <inline-formula id="inf25">
<mml:math id="m34">
<mml:mi mathvariant="bold">A</mml:mi>
</mml:math>
</inline-formula>, <inline-formula id="inf26">
<mml:math id="m35">
<mml:mi mathvariant="bold">B</mml:mi>
</mml:math>
</inline-formula>, <inline-formula id="inf27">
<mml:math id="m36">
<mml:mi mathvariant="bold">C</mml:mi>
</mml:math>
</inline-formula>, and <inline-formula id="inf28">
<mml:math id="m37">
<mml:mi mathvariant="bold">D</mml:mi>
</mml:math>
</inline-formula> at each interest&#x20;time.</p>
<p>In the next section, we will present the linearization method TPWL that, combined with a model order reduction technique called proper orthogonal decomposition (POD), has been successfully applied to reservoir simulation&#x20;[<xref ref-type="bibr" rid="B6">6</xref>].</p>
</sec>
<sec id="s1-2">
<title>1.2 Trajectory Piecewise Linearization (TPWL)</title>
<p>Trajectory piecewise linearization is a method composed of two main steps. The first step is a training procedure (offline processing) that aims to capture state snapshots of a high-fidelity solution for the system to be linearized. These state snapshots are stored along with the Jacobian matrix of each timestep.</p>
<p>The purpose of the second step (online processing) is to predict the state on the next timestep <inline-formula id="inf29">
<mml:math id="m38">
<mml:mrow>
<mml:msup>
<mml:mi>x</mml:mi>
<mml:mrow>
<mml:mi>t</mml:mi>
<mml:mo>&#x2b;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msup>
</mml:mrow>
</mml:math>
</inline-formula> based on the current state <inline-formula id="inf30">
<mml:math id="m39">
<mml:mrow>
<mml:msup>
<mml:mi>x</mml:mi>
<mml:mi>t</mml:mi>
</mml:msup>
</mml:mrow>
</mml:math>
</inline-formula> and the control state <inline-formula id="inf31">
<mml:math id="m40">
<mml:mrow>
<mml:msup>
<mml:mi>u</mml:mi>
<mml:mi>t</mml:mi>
</mml:msup>
</mml:mrow>
</mml:math>
</inline-formula>. The idea here is to use the stored states on the training step in order to predict the new state. First, in the group of the stored state snapshots, we identified the snapshot <inline-formula id="inf32">
<mml:math id="m41">
<mml:mrow>
<mml:msup>
<mml:mi>x</mml:mi>
<mml:mi>i</mml:mi>
</mml:msup>
</mml:mrow>
</mml:math>
</inline-formula> closest to <inline-formula id="inf33">
<mml:math id="m42">
<mml:mrow>
<mml:msup>
<mml:mi>x</mml:mi>
<mml:mi>t</mml:mi>
</mml:msup>
</mml:mrow>
</mml:math>
</inline-formula>. Then, we use the stored state and the Jacobian matrix for <italic>i</italic> and <inline-formula id="inf34">
<mml:math id="m43">
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>&#x2b;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:math>
</inline-formula> to calculate the state <inline-formula id="inf35">
<mml:math id="m44">
<mml:mrow>
<mml:msup>
<mml:mi>x</mml:mi>
<mml:mrow>
<mml:mi>t</mml:mi>
<mml:mo>&#x2b;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msup>
</mml:mrow>
</mml:math>
</inline-formula> using the following equation:<disp-formula id="e7">
<mml:math id="m45">
<mml:mrow>
<mml:msup>
<mml:mi>x</mml:mi>
<mml:mrow>
<mml:mi>t</mml:mi>
<mml:mo>&#x2b;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msup>
<mml:mo>&#x3d;</mml:mo>
<mml:msup>
<mml:mi>x</mml:mi>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>&#x2b;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msup>
<mml:mo>&#x2212;</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:msup>
<mml:mi mathvariant="bold">J</mml:mi>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>&#x2b;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msup>
</mml:mrow>
<mml:mo>)</mml:mo>
</mml:mrow>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2212;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msup>
<mml:mrow>
<mml:mo>[</mml:mo>
<mml:mrow>
<mml:msup>
<mml:mi mathvariant="bold">F</mml:mi>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>&#x2b;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msup>
<mml:mo>&#x2b;</mml:mo>
<mml:mi mathvariant="bold">Ac</mml:mi>
<mml:msup>
<mml:mi mathvariant="bold">c</mml:mi>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>&#x2b;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msup>
<mml:mo>&#x2b;</mml:mo>
<mml:mfrac>
<mml:mrow>
<mml:mo>&#x2202;</mml:mo>
<mml:mi mathvariant="bold">Ac</mml:mi>
<mml:msup>
<mml:mi mathvariant="bold">c</mml:mi>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>&#x2b;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msup>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2202;</mml:mo>
<mml:msup>
<mml:mi>x</mml:mi>
<mml:mi>i</mml:mi>
</mml:msup>
</mml:mrow>
</mml:mfrac>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:msup>
<mml:mi>x</mml:mi>
<mml:mi>t</mml:mi>
</mml:msup>
<mml:mo>&#x2212;</mml:mo>
<mml:msup>
<mml:mi>x</mml:mi>
<mml:mi>i</mml:mi>
</mml:msup>
</mml:mrow>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:mo>&#x2b;</mml:mo>
<mml:mi mathvariant="bold">Q</mml:mi>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:msup>
<mml:mi>x</mml:mi>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>&#x2b;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msup>
<mml:mo>,</mml:mo>
<mml:msup>
<mml:mi>u</mml:mi>
<mml:mrow>
<mml:mi>t</mml:mi>
<mml:mo>&#x2b;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msup>
</mml:mrow>
<mml:mo>)</mml:mo>
</mml:mrow>
</mml:mrow>
<mml:mo>]</mml:mo>
</mml:mrow>
<mml:mo>.</mml:mo>
</mml:mrow>
</mml:math>
<label>(7)</label>
</disp-formula>Previously, we wrote the state evolution equation of the reservoir simulation solution (<xref ref-type="disp-formula" rid="e5">Eq. 5</xref>) as a linearized system (<xref ref-type="disp-formula" rid="e6">Eq. 6</xref>). Using similar approach, we can rewrite the TPWL equation (<xref ref-type="disp-formula" rid="e7">Eq. 7</xref>) as a linearized system:<disp-formula id="e8">
<mml:math id="m46">
<mml:mrow>
<mml:mrow>
<mml:mo>{</mml:mo>
<mml:mrow>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msup>
<mml:mi>x</mml:mi>
<mml:mrow>
<mml:mi>t</mml:mi>
<mml:mo>&#x2b;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msup>
<mml:mo>&#x3d;</mml:mo>
<mml:msup>
<mml:mi mathvariant="bold">A</mml:mi>
<mml:mi>i</mml:mi>
</mml:msup>
<mml:msup>
<mml:mi>x</mml:mi>
<mml:mi>t</mml:mi>
</mml:msup>
<mml:mo>&#x2b;</mml:mo>
<mml:msup>
<mml:mi mathvariant="bold">B</mml:mi>
<mml:mi>i</mml:mi>
</mml:msup>
<mml:msup>
<mml:mi>u</mml:mi>
<mml:mi>t</mml:mi>
</mml:msup>
</mml:mrow>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msup>
<mml:mi>y</mml:mi>
<mml:mrow>
<mml:mi>t</mml:mi>
<mml:mo>&#x2b;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msup>
<mml:mo>&#x3d;</mml:mo>
<mml:msup>
<mml:mi mathvariant="bold">C</mml:mi>
<mml:mi>i</mml:mi>
</mml:msup>
<mml:msup>
<mml:mi>x</mml:mi>
<mml:mrow>
<mml:mi>t</mml:mi>
<mml:mo>&#x2b;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msup>
<mml:mo>&#x2b;</mml:mo>
<mml:msup>
<mml:mi mathvariant="bold">D</mml:mi>
<mml:mi>i</mml:mi>
</mml:msup>
<mml:msup>
<mml:mi>u</mml:mi>
<mml:mi>t</mml:mi>
</mml:msup>
</mml:mrow>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:mrow>
</mml:mrow>
<mml:mo>,</mml:mo>
</mml:mrow>
</mml:math>
<label>(8)</label>
</disp-formula>where <inline-formula id="inf36">
<mml:math id="m47">
<mml:mi mathvariant="bold">A</mml:mi>
</mml:math>
</inline-formula>, <inline-formula id="inf37">
<mml:math id="m48">
<mml:mi mathvariant="bold">B</mml:mi>
</mml:math>
</inline-formula>, <inline-formula id="inf38">
<mml:math id="m49">
<mml:mi mathvariant="bold">C</mml:mi>
</mml:math>
</inline-formula>, and <inline-formula id="inf39">
<mml:math id="m50">
<mml:mi mathvariant="bold">D</mml:mi>
</mml:math>
</inline-formula> are the time discretized version of the continuous matrices, and the superscript <italic>i</italic> represents the linearized matrices using information from the snapshot&#x20;<italic>i</italic>.</p>
<p>To solve <xref ref-type="disp-formula" rid="e7">Eq. 7</xref> and to compute matrices <inline-formula id="inf40">
<mml:math id="m51">
<mml:mrow>
<mml:msup>
<mml:mi mathvariant="bold">A</mml:mi>
<mml:mi>i</mml:mi>
</mml:msup>
</mml:mrow>
</mml:math>
</inline-formula>, <inline-formula id="inf41">
<mml:math id="m52">
<mml:mrow>
<mml:msup>
<mml:mi mathvariant="bold">B</mml:mi>
<mml:mi>i</mml:mi>
</mml:msup>
</mml:mrow>
</mml:math>
</inline-formula>, <inline-formula id="inf42">
<mml:math id="m53">
<mml:mrow>
<mml:msup>
<mml:mi mathvariant="bold">C</mml:mi>
<mml:mi>i</mml:mi>
</mml:msup>
</mml:mrow>
</mml:math>
</inline-formula>, and <inline-formula id="inf43">
<mml:math id="m54">
<mml:mrow>
<mml:msup>
<mml:mi mathvariant="bold">D</mml:mi>
<mml:mi>i</mml:mi>
</mml:msup>
</mml:mrow>
</mml:math>
</inline-formula> it is necessary to calculate the inverse of the Jacobian matrix , which is computationally costly. Furthermore, storing a full state and a full Jacobian matrix for each timestep on the training runs requires a huge memory amount. The next section will show how to use a model order reduced method to solve these problems.</p>
</sec>
<sec id="s1-3">
<title>1.3 Proper Orthogonal Decomposition (POD)</title>
<p>The states stored on the training step of the TPWL can be arranged on:<disp-formula id="equ4">
<mml:math id="m55">
<mml:mrow>
<mml:mi mathvariant="bold">X</mml:mi>
<mml:mo>&#x3d;</mml:mo>
<mml:mrow>
<mml:mo>[</mml:mo>
<mml:mrow>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msup>
<mml:mi>x</mml:mi>
<mml:mn>1</mml:mn>
</mml:msup>
</mml:mrow>
</mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:msup>
<mml:mi>x</mml:mi>
<mml:mn>2</mml:mn>
</mml:msup>
</mml:mrow>
</mml:mtd>
<mml:mtd>
<mml:mo>&#x2026;</mml:mo>
</mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:msup>
<mml:mi>x</mml:mi>
<mml:mi>n</mml:mi>
</mml:msup>
</mml:mrow>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:mrow>
<mml:mo>]</mml:mo>
</mml:mrow>
<mml:mo>.</mml:mo>
</mml:mrow>
</mml:math>
</disp-formula>It is possible to take the singular value decomposition (SVD) of <inline-formula id="inf44">
<mml:math id="m56">
<mml:mi mathvariant="bold">X</mml:mi>
</mml:math>
</inline-formula>. Based on some criteria, one can choose to keep only the <italic>l</italic> largest singular values. The POD basis <inline-formula id="inf45">
<mml:math id="m57">
<mml:mtext>&#x3a6;</mml:mtext>
</mml:math>
</inline-formula> is defined as the <italic>l</italic> right singular vectors, and the reduced/latent state space <italic>z</italic> is then defined as a projection of the original space <italic>x</italic> based on the POD basis:<disp-formula id="e9">
<mml:math id="m58">
<mml:mrow>
<mml:mi>z</mml:mi>
<mml:mo>&#x3d;</mml:mo>
<mml:msup>
<mml:mtext>&#x3a6;</mml:mtext>
<mml:mi>T</mml:mi>
</mml:msup>
<mml:mi>x</mml:mi>
<mml:mo>.</mml:mo>
</mml:mrow>
</mml:math>
<label>(9)</label>
</disp-formula>Using the relation <inline-formula id="inf46">
<mml:math id="m59">
<mml:mrow>
<mml:mi>x</mml:mi>
<mml:mo>&#x2248;</mml:mo>
<mml:mtext>&#x3a6;</mml:mtext>
<mml:mi>z</mml:mi>
</mml:mrow>
</mml:math>
</inline-formula> we can rewrite <xref ref-type="disp-formula" rid="e7">Eq. 7</xref> as:<disp-formula id="e10">
<mml:math id="m60">
<mml:mrow>
<mml:msup>
<mml:mi mathvariant="bold">J</mml:mi>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>&#x2b;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msup>
<mml:mtext>&#x3a6;</mml:mtext>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:msup>
<mml:mi>z</mml:mi>
<mml:mrow>
<mml:mi>t</mml:mi>
<mml:mo>&#x2b;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msup>
<mml:mo>&#x2212;</mml:mo>
<mml:msup>
<mml:mi>z</mml:mi>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>&#x2b;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msup>
</mml:mrow>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:mo>&#x3d;</mml:mo>
<mml:mo>&#x2212;</mml:mo>
<mml:mrow>
<mml:mo>[</mml:mo>
<mml:mrow>
<mml:msup>
<mml:mi mathvariant="bold">F</mml:mi>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>&#x2b;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msup>
<mml:mo>&#x2b;</mml:mo>
<mml:mi mathvariant="bold">Ac</mml:mi>
<mml:msup>
<mml:mi mathvariant="bold">c</mml:mi>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>&#x2b;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msup>
<mml:mo>&#x2b;</mml:mo>
<mml:mfrac>
<mml:mrow>
<mml:mo>&#x2202;</mml:mo>
<mml:mi mathvariant="bold">Ac</mml:mi>
<mml:msup>
<mml:mi mathvariant="bold">c</mml:mi>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>&#x2b;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msup>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2202;</mml:mo>
<mml:msup>
<mml:mi>x</mml:mi>
<mml:mi>i</mml:mi>
</mml:msup>
</mml:mrow>
</mml:mfrac>
<mml:mtext>&#x3a6;</mml:mtext>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:msup>
<mml:mi>z</mml:mi>
<mml:mi>t</mml:mi>
</mml:msup>
<mml:mo>&#x2212;</mml:mo>
<mml:msup>
<mml:mi>z</mml:mi>
<mml:mi>i</mml:mi>
</mml:msup>
</mml:mrow>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:mo>&#x2b;</mml:mo>
<mml:mi mathvariant="bold">Q</mml:mi>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:msup>
<mml:mi>x</mml:mi>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>&#x2b;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msup>
<mml:mo>,</mml:mo>
<mml:msup>
<mml:mi>u</mml:mi>
<mml:mrow>
<mml:mi>t</mml:mi>
<mml:mo>&#x2b;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msup>
</mml:mrow>
<mml:mo>)</mml:mo>
</mml:mrow>
</mml:mrow>
<mml:mo>]</mml:mo>
</mml:mrow>
<mml:mo>,</mml:mo>
</mml:mrow>
</mml:math>
<label>(10)</label>
</disp-formula>and multiplying both sides of the above equation by <inline-formula id="inf47">
<mml:math id="m61">
<mml:mrow>
<mml:msup>
<mml:mtext>&#x3a6;</mml:mtext>
<mml:mi>T</mml:mi>
</mml:msup>
</mml:mrow>
</mml:math>
</inline-formula>:<disp-formula id="e11">
<mml:math id="m62">
<mml:mrow>
<mml:msup>
<mml:mtext>&#x3a6;</mml:mtext>
<mml:mi>T</mml:mi>
</mml:msup>
<mml:msup>
<mml:mi mathvariant="bold">J</mml:mi>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>&#x2b;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msup>
<mml:mtext>&#x3a6;</mml:mtext>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:msup>
<mml:mi>z</mml:mi>
<mml:mrow>
<mml:mi>t</mml:mi>
<mml:mo>&#x2b;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msup>
<mml:mo>&#x2212;</mml:mo>
<mml:msup>
<mml:mi>z</mml:mi>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>&#x2b;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msup>
</mml:mrow>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:mo>&#x3d;</mml:mo>
<mml:mo>&#x2212;</mml:mo>
<mml:msup>
<mml:mtext>&#x3a6;</mml:mtext>
<mml:mi>T</mml:mi>
</mml:msup>
<mml:mrow>
<mml:mo>[</mml:mo>
<mml:mrow>
<mml:msup>
<mml:mi mathvariant="bold">F</mml:mi>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>&#x2b;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msup>
<mml:mo>&#x2b;</mml:mo>
<mml:mi mathvariant="bold">Ac</mml:mi>
<mml:msup>
<mml:mi mathvariant="bold">c</mml:mi>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>&#x2b;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msup>
<mml:mo>&#x2b;</mml:mo>
<mml:mfrac>
<mml:mrow>
<mml:mo>&#x2202;</mml:mo>
<mml:mi mathvariant="bold">Ac</mml:mi>
<mml:msup>
<mml:mi mathvariant="bold">c</mml:mi>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>&#x2b;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msup>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2202;</mml:mo>
<mml:msup>
<mml:mi>x</mml:mi>
<mml:mi>i</mml:mi>
</mml:msup>
</mml:mrow>
</mml:mfrac>
<mml:mtext>&#x3a6;</mml:mtext>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:msup>
<mml:mi>z</mml:mi>
<mml:mi>t</mml:mi>
</mml:msup>
<mml:mo>&#x2212;</mml:mo>
<mml:msup>
<mml:mi>z</mml:mi>
<mml:mi>i</mml:mi>
</mml:msup>
</mml:mrow>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:mo>&#x2b;</mml:mo>
<mml:mi mathvariant="bold">Q</mml:mi>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:msup>
<mml:mi>x</mml:mi>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>&#x2b;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msup>
<mml:mo>,</mml:mo>
<mml:msup>
<mml:mi>u</mml:mi>
<mml:mrow>
<mml:mi>t</mml:mi>
<mml:mo>&#x2b;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msup>
</mml:mrow>
<mml:mo>)</mml:mo>
</mml:mrow>
</mml:mrow>
<mml:mo>]</mml:mo>
</mml:mrow>
<mml:mo>.</mml:mo>
</mml:mrow>
</mml:math>
<label>(11)</label>
</disp-formula>Now, defining the reduced Jacobian matrix as <inline-formula id="inf48">
<mml:math id="m63">
<mml:mrow>
<mml:msubsup>
<mml:mi mathvariant="bold">J</mml:mi>
<mml:mi>r</mml:mi>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>&#x2b;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msubsup>
<mml:mo>&#x3d;</mml:mo>
<mml:msup>
<mml:mtext>&#x3a6;</mml:mtext>
<mml:mi>T</mml:mi>
</mml:msup>
<mml:msup>
<mml:mi mathvariant="bold">J</mml:mi>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>&#x2b;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msup>
<mml:mtext>&#x3a6;</mml:mtext>
</mml:mrow>
</mml:math>
</inline-formula> and the other reduced terms as <inline-formula id="inf49">
<mml:math id="m64">
<mml:mrow>
<mml:msubsup>
<mml:mi mathvariant="bold">F</mml:mi>
<mml:mi>r</mml:mi>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>&#x2b;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msubsup>
<mml:mo>&#x3d;</mml:mo>
<mml:msup>
<mml:mtext>&#x3a6;</mml:mtext>
<mml:mi>T</mml:mi>
</mml:msup>
<mml:msup>
<mml:mi mathvariant="bold">F</mml:mi>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>&#x2b;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msup>
</mml:mrow>
</mml:math>
</inline-formula>, <inline-formula id="inf50">
<mml:math id="m65">
<mml:mrow>
<mml:mi mathvariant="bold">Ac</mml:mi>
<mml:msubsup>
<mml:mi mathvariant="bold">c</mml:mi>
<mml:mi>r</mml:mi>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>&#x2b;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msubsup>
<mml:mo>&#x3d;</mml:mo>
<mml:msup>
<mml:mtext>&#x3a6;</mml:mtext>
<mml:mi>T</mml:mi>
</mml:msup>
<mml:mi mathvariant="bold">Ac</mml:mi>
<mml:msup>
<mml:mi mathvariant="bold">c</mml:mi>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>&#x2b;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msup>
</mml:mrow>
</mml:math>
</inline-formula>, <inline-formula id="inf51">
<mml:math id="m66">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:mrow>
<mml:mrow>
<mml:mo>&#x2202;</mml:mo>
<mml:mi mathvariant="bold">Ac</mml:mi>
<mml:msup>
<mml:mi mathvariant="bold">c</mml:mi>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>&#x2b;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msup>
</mml:mrow>
<mml:mo>/</mml:mo>
<mml:mrow>
<mml:mo>&#x2202;</mml:mo>
<mml:msup>
<mml:mi>x</mml:mi>
<mml:mi>i</mml:mi>
</mml:msup>
</mml:mrow>
</mml:mrow>
</mml:mrow>
<mml:mo>)</mml:mo>
</mml:mrow>
</mml:mrow>
<mml:mi>r</mml:mi>
</mml:msub>
<mml:mo>&#x3d;</mml:mo>
<mml:msup>
<mml:mtext>&#x3a6;</mml:mtext>
<mml:mi>T</mml:mi>
</mml:msup>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:mrow>
<mml:mrow>
<mml:mo>&#x2202;</mml:mo>
<mml:mi mathvariant="bold">Ac</mml:mi>
<mml:msup>
<mml:mi mathvariant="bold">c</mml:mi>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>&#x2b;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msup>
</mml:mrow>
<mml:mo>/</mml:mo>
<mml:mrow>
<mml:mo>&#x2202;</mml:mo>
<mml:msup>
<mml:mi>x</mml:mi>
<mml:mi>i</mml:mi>
</mml:msup>
</mml:mrow>
</mml:mrow>
</mml:mrow>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:mtext>&#x3a6;</mml:mtext>
</mml:mrow>
</mml:math>
</inline-formula>, and <inline-formula id="inf52">
<mml:math id="m67">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold">Q</mml:mi>
<mml:mi>r</mml:mi>
</mml:msub>
<mml:mo>&#x3d;</mml:mo>
<mml:msup>
<mml:mtext>&#x3a6;</mml:mtext>
<mml:mi>T</mml:mi>
</mml:msup>
<mml:mi mathvariant="bold">Q</mml:mi>
</mml:mrow>
</mml:math>
</inline-formula>, we can rewrite <xref ref-type="disp-formula" rid="e11">Eq. 11</xref> as the POD-TPWL equation:<disp-formula id="e12">
<mml:math id="m68">
<mml:mrow>
<mml:msup>
<mml:mi>z</mml:mi>
<mml:mrow>
<mml:mi>t</mml:mi>
<mml:mo>&#x2b;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msup>
<mml:mo>&#x3d;</mml:mo>
<mml:msup>
<mml:mi>z</mml:mi>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>&#x2b;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msup>
<mml:mo>&#x2212;</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:msubsup>
<mml:mi mathvariant="bold">J</mml:mi>
<mml:mi>r</mml:mi>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>&#x2b;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msubsup>
</mml:mrow>
<mml:mo>)</mml:mo>
</mml:mrow>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2212;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msup>
<mml:mrow>
<mml:mo>[</mml:mo>
<mml:mrow>
<mml:msubsup>
<mml:mi mathvariant="bold">F</mml:mi>
<mml:mi>r</mml:mi>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>&#x2b;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msubsup>
<mml:mo>&#x2b;</mml:mo>
<mml:mi mathvariant="bold">Ac</mml:mi>
<mml:msubsup>
<mml:mi mathvariant="bold">c</mml:mi>
<mml:mi>r</mml:mi>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>&#x2b;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msubsup>
<mml:mo>&#x2b;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:mfrac>
<mml:mrow>
<mml:mo>&#x2202;</mml:mo>
<mml:mi mathvariant="bold">Ac</mml:mi>
<mml:msup>
<mml:mi mathvariant="bold">c</mml:mi>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>&#x2b;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msup>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2202;</mml:mo>
<mml:msup>
<mml:mi>x</mml:mi>
<mml:mi>i</mml:mi>
</mml:msup>
</mml:mrow>
</mml:mfrac>
</mml:mrow>
<mml:mo>)</mml:mo>
</mml:mrow>
</mml:mrow>
<mml:mi>r</mml:mi>
</mml:msub>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:msup>
<mml:mi>z</mml:mi>
<mml:mi>t</mml:mi>
</mml:msup>
<mml:mo>&#x2212;</mml:mo>
<mml:msup>
<mml:mi>z</mml:mi>
<mml:mi>i</mml:mi>
</mml:msup>
</mml:mrow>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:mo>&#x2b;</mml:mo>
<mml:msub>
<mml:mi mathvariant="bold">Q</mml:mi>
<mml:mi>r</mml:mi>
</mml:msub>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:msup>
<mml:mi>x</mml:mi>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>&#x2b;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msup>
<mml:mo>,</mml:mo>
<mml:msup>
<mml:mi>u</mml:mi>
<mml:mrow>
<mml:mi>t</mml:mi>
<mml:mo>&#x2b;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msup>
</mml:mrow>
<mml:mo>)</mml:mo>
</mml:mrow>
</mml:mrow>
<mml:mo>]</mml:mo>
</mml:mrow>
<mml:mo>.</mml:mo>
</mml:mrow>
</mml:math>
<label>(12)</label>
</disp-formula>By truncating the latent space, we deal with smaller dimension matrices when compared with the TPWL equation presented previously.</p>
<p>One can rewrite <xref ref-type="disp-formula" rid="e12">Eq. 12</xref> as a linear time variant system:<disp-formula id="e13">
<mml:math id="m69">
<mml:mrow>
<mml:mrow>
<mml:mo>{</mml:mo>
<mml:mrow>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msup>
<mml:mi>z</mml:mi>
<mml:mrow>
<mml:mi>t</mml:mi>
<mml:mo>&#x2b;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msup>
<mml:mo>&#x3d;</mml:mo>
<mml:msubsup>
<mml:mi mathvariant="bold">A</mml:mi>
<mml:mi>r</mml:mi>
<mml:mi>i</mml:mi>
</mml:msubsup>
<mml:msup>
<mml:mi>z</mml:mi>
<mml:mi>t</mml:mi>
</mml:msup>
<mml:mo>&#x2b;</mml:mo>
<mml:msubsup>
<mml:mi mathvariant="bold">B</mml:mi>
<mml:mi>r</mml:mi>
<mml:mi>i</mml:mi>
</mml:msubsup>
<mml:msup>
<mml:mi>u</mml:mi>
<mml:mi>t</mml:mi>
</mml:msup>
</mml:mrow>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msup>
<mml:mi>y</mml:mi>
<mml:mrow>
<mml:mi>t</mml:mi>
<mml:mo>&#x2b;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msup>
<mml:mo>&#x3d;</mml:mo>
<mml:msubsup>
<mml:mi mathvariant="bold">C</mml:mi>
<mml:mi>r</mml:mi>
<mml:mi>i</mml:mi>
</mml:msubsup>
<mml:msup>
<mml:mi>z</mml:mi>
<mml:mrow>
<mml:mi>t</mml:mi>
<mml:mo>&#x2b;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msup>
<mml:mo>&#x2b;</mml:mo>
<mml:msubsup>
<mml:mi mathvariant="bold">D</mml:mi>
<mml:mi>r</mml:mi>
<mml:mi>i</mml:mi>
</mml:msubsup>
<mml:msup>
<mml:mi>u</mml:mi>
<mml:mi>t</mml:mi>
</mml:msup>
</mml:mrow>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:mrow>
</mml:mrow>
<mml:mo>,</mml:mo>
</mml:mrow>
</mml:math>
<label>(13)</label>
</disp-formula>where <inline-formula id="inf53">
<mml:math id="m70">
<mml:mrow>
<mml:msubsup>
<mml:mi mathvariant="bold">A</mml:mi>
<mml:mi>r</mml:mi>
<mml:mi>i</mml:mi>
</mml:msubsup>
</mml:mrow>
</mml:math>
</inline-formula>, <inline-formula id="inf54">
<mml:math id="m71">
<mml:mrow>
<mml:msubsup>
<mml:mi mathvariant="bold">B</mml:mi>
<mml:mi>r</mml:mi>
<mml:mi>i</mml:mi>
</mml:msubsup>
</mml:mrow>
</mml:math>
</inline-formula>, <inline-formula id="inf55">
<mml:math id="m72">
<mml:mrow>
<mml:msubsup>
<mml:mi mathvariant="bold">C</mml:mi>
<mml:mi>r</mml:mi>
<mml:mi>i</mml:mi>
</mml:msubsup>
</mml:mrow>
</mml:math>
</inline-formula>, and <inline-formula id="inf56">
<mml:math id="m73">
<mml:mrow>
<mml:msubsup>
<mml:mi mathvariant="bold">D</mml:mi>
<mml:mi>r</mml:mi>
<mml:mi>i</mml:mi>
</mml:msubsup>
</mml:mrow>
</mml:math>
</inline-formula> are the reduced version of the ones presented on <xref ref-type="disp-formula" rid="e8">Eq.&#x20;8</xref>.</p>
<p>The complexity of calculating matrices <inline-formula id="inf57">
<mml:math id="m74">
<mml:mrow>
<mml:msubsup>
<mml:mi mathvariant="bold">A</mml:mi>
<mml:mi>r</mml:mi>
<mml:mi>i</mml:mi>
</mml:msubsup>
</mml:mrow>
</mml:math>
</inline-formula>, <inline-formula id="inf58">
<mml:math id="m75">
<mml:mrow>
<mml:msubsup>
<mml:mi mathvariant="bold">B</mml:mi>
<mml:mi>r</mml:mi>
<mml:mi>i</mml:mi>
</mml:msubsup>
</mml:mrow>
</mml:math>
</inline-formula>, <inline-formula id="inf59">
<mml:math id="m76">
<mml:mrow>
<mml:msubsup>
<mml:mi mathvariant="bold">C</mml:mi>
<mml:mi>r</mml:mi>
<mml:mi>i</mml:mi>
</mml:msubsup>
</mml:mrow>
</mml:math>
</inline-formula>, and <inline-formula id="inf60">
<mml:math id="m77">
<mml:mrow>
<mml:msubsup>
<mml:mi mathvariant="bold">D</mml:mi>
<mml:mi>r</mml:mi>
<mml:mi>i</mml:mi>
</mml:msubsup>
</mml:mrow>
</mml:math>
</inline-formula> (or its equivalents on <xref ref-type="disp-formula" rid="e6">Eqs. 6</xref> and <xref ref-type="disp-formula" rid="e8">8</xref>) can increase in more realistic cases (black-oil or compositional simulators). Another drawback of these methods is the mandatory access to the reservoir simulator code to extract the Jacobian matrix and other data structures from the simulator, which may turn impractical the use of these methods with commercial reservoir simulators.</p>
<p>In [<xref ref-type="bibr" rid="B1">1</xref>], the authors develop a method to calculate matrices <inline-formula id="inf61">
<mml:math id="m78">
<mml:mrow>
<mml:msubsup>
<mml:mi mathvariant="bold">A</mml:mi>
<mml:mi>r</mml:mi>
<mml:mi>t</mml:mi>
</mml:msubsup>
</mml:mrow>
</mml:math>
</inline-formula> and <inline-formula id="inf62">
<mml:math id="m79">
<mml:mrow>
<mml:msubsup>
<mml:mi mathvariant="bold">B</mml:mi>
<mml:mi>r</mml:mi>
<mml:mi>t</mml:mi>
</mml:msubsup>
</mml:mrow>
</mml:math>
</inline-formula> based on deep learning, using state snapshots as training data. Ref. [<xref ref-type="bibr" rid="B2">2</xref>] extended this idea by adding a physical loss function related to reservoir simulation. Here we expand on this and demonstrate the feasibility of extracting not only states but outputs.</p>
</sec>
</sec>
<sec id="s2">
<title>2 Methods</title>
<p>In this section, we built upon a previously developed alternative to predict the state time evolution applied to numerical petroleum reservoir simulation based on deep learning, where a direct semi-empirical relation between the state and the output was used to calculate the well data. We will propose an improvement of well data estimation, first, by considering this data on the training process, and second, by building a specific network to estimate the output from the latent space that does not rely on the direct relation between the full state and the output.</p>
<sec id="s2-1">
<title>2.1 Embed to Control (E2C)</title>
<p>This method was proposed in [<xref ref-type="bibr" rid="B1">1</xref>] for model learning and control of a nonlinear dynamical system using raw pixel images as input. It uses a convolutional autoencoder coupled with a control linear system approach to predict the time evolution of the system&#x20;state.</p>
<p>In <xref ref-type="fig" rid="F2">Figure&#x20;2</xref>, we present a schematic diagram showing the main elements for training this model. The inputs used on the training procedure are the elements shaded in gray (<inline-formula id="inf63">
<mml:math id="m80">
<mml:mrow>
<mml:msup>
<mml:mi>x</mml:mi>
<mml:mi>t</mml:mi>
</mml:msup>
</mml:mrow>
</mml:math>
</inline-formula>, <inline-formula id="inf64">
<mml:math id="m81">
<mml:mrow>
<mml:msup>
<mml:mi>x</mml:mi>
<mml:mrow>
<mml:mi>t</mml:mi>
<mml:mo>&#x2b;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msup>
</mml:mrow>
</mml:math>
</inline-formula>, <inline-formula id="inf65">
<mml:math id="m82">
<mml:mrow>
<mml:msup>
<mml:mi>u</mml:mi>
<mml:mi>t</mml:mi>
</mml:msup>
</mml:mrow>
</mml:math>
</inline-formula>, and <inline-formula id="inf66">
<mml:math id="m83">
<mml:mrow>
<mml:mtext>&#x394;</mml:mtext>
<mml:msup>
<mml:mi>t</mml:mi>
<mml:mi>t</mml:mi>
</mml:msup>
</mml:mrow>
</mml:math>
</inline-formula>). The variables with a hat (<inline-formula id="inf67">
<mml:math id="m84">
<mml:mrow>
<mml:mover accent="true">
<mml:mo>&#x22c5;</mml:mo>
<mml:mo>&#x5e;</mml:mo>
</mml:mover>
</mml:mrow>
</mml:math>
</inline-formula>) are the estimated values. The paths presented with continuous arrows are used in both training and prediction steps, and those with dashed arrows are only used on the training procedures.</p>
<fig id="F2" position="float">
<label>FIGURE 2</label>
<caption>
<p>Diagram for training the E2C&#x2014;Embed to control&#x20;model.</p>
</caption>
<graphic xlink:href="fams-07-651178-g002.tif"/>
</fig>
<p>The autoencoder is composed of an encoder that aims to transform the state in the original dimension space (<inline-formula id="inf68">
<mml:math id="m85">
<mml:mrow>
<mml:msup>
<mml:mi>x</mml:mi>
<mml:mi>t</mml:mi>
</mml:msup>
</mml:mrow>
</mml:math>
</inline-formula>) to a reduced (latent) space (<inline-formula id="inf69">
<mml:math id="m86">
<mml:mrow>
<mml:msup>
<mml:mi>z</mml:mi>
<mml:mi>t</mml:mi>
</mml:msup>
</mml:mrow>
</mml:math>
</inline-formula>), and a decoder that works as an inverted encoder to project back the reduced space state to the original space. One can relate the encoder with the POD projection (<xref ref-type="disp-formula" rid="e9">Eq. 9</xref>) since both have the ability to transform the original state <italic>x</italic> on the latent space state&#x20;<italic>z</italic>.</p>
<p>The transition element uses the state in latent space to generate the matrices <inline-formula id="inf70">
<mml:math id="m87">
<mml:mrow>
<mml:msubsup>
<mml:mi mathvariant="bold">A</mml:mi>
<mml:mi>r</mml:mi>
<mml:mi>t</mml:mi>
</mml:msubsup>
</mml:mrow>
</mml:math>
</inline-formula> and <inline-formula id="inf71">
<mml:math id="m88">
<mml:mrow>
<mml:msubsup>
<mml:mi mathvariant="bold">B</mml:mi>
<mml:mi>r</mml:mi>
<mml:mi>t</mml:mi>
</mml:msubsup>
</mml:mrow>
</mml:math>
</inline-formula>. These matrices are used to handle the dynamical system evolution using a linear control system approach, as in <xref ref-type="disp-formula" rid="e14">Eq. 14</xref>. Since this equation operates on the latent space, we can relate <inline-formula id="inf72">
<mml:math id="m89">
<mml:mrow>
<mml:msubsup>
<mml:mi mathvariant="bold">A</mml:mi>
<mml:mi>r</mml:mi>
<mml:mi>t</mml:mi>
</mml:msubsup>
</mml:mrow>
</mml:math>
</inline-formula> and <inline-formula id="inf73">
<mml:math id="m90">
<mml:mrow>
<mml:msubsup>
<mml:mi mathvariant="bold">B</mml:mi>
<mml:mi>r</mml:mi>
<mml:mi>t</mml:mi>
</mml:msubsup>
</mml:mrow>
</mml:math>
</inline-formula> with their reduced version used on <xref ref-type="disp-formula" rid="e13">Eq. 13</xref>.<disp-formula id="e14">
<mml:math id="m91">
<mml:mrow>
<mml:msup>
<mml:mrow>
<mml:mover accent="true">
<mml:mi>z</mml:mi>
<mml:mo>&#x5e;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mi>t</mml:mi>
<mml:mo>&#x2b;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msup>
<mml:mo>&#x3d;</mml:mo>
<mml:msubsup>
<mml:mi mathvariant="bold">A</mml:mi>
<mml:mi>r</mml:mi>
<mml:mi>t</mml:mi>
</mml:msubsup>
<mml:msup>
<mml:mi>z</mml:mi>
<mml:mi>t</mml:mi>
</mml:msup>
<mml:mo>&#x2b;</mml:mo>
<mml:msubsup>
<mml:mi mathvariant="bold">B</mml:mi>
<mml:mi>r</mml:mi>
<mml:mi>t</mml:mi>
</mml:msubsup>
<mml:msup>
<mml:mi>u</mml:mi>
<mml:mi>t</mml:mi>
</mml:msup>
<mml:mo>.</mml:mo>
</mml:mrow>
</mml:math>
<label>(14)</label>
</disp-formula>It should be pointed out that matrices <inline-formula id="inf74">
<mml:math id="m92">
<mml:mrow>
<mml:msubsup>
<mml:mi mathvariant="bold">A</mml:mi>
<mml:mi>r</mml:mi>
<mml:mi>t</mml:mi>
</mml:msubsup>
</mml:mrow>
</mml:math>
</inline-formula> and <inline-formula id="inf75">
<mml:math id="m93">
<mml:mrow>
<mml:msubsup>
<mml:mi mathvariant="bold">B</mml:mi>
<mml:mi>r</mml:mi>
<mml:mi>t</mml:mi>
</mml:msubsup>
</mml:mrow>
</mml:math>
</inline-formula> change for each different input state <inline-formula id="inf76">
<mml:math id="m94">
<mml:mrow>
<mml:msup>
<mml:mi>x</mml:mi>
<mml:mi>t</mml:mi>
</mml:msup>
</mml:mrow>
</mml:math>
</inline-formula>, like in other linearization procedures applied to reduced-order models techniques (e.g., TPWL&#x2014;trajectory piecewise linearization).</p>
<p>Other important elements on this method are the 3 loss functions (<inline-formula id="inf77">
<mml:math id="m95">
<mml:mi mathvariant="normal">&#x2112;</mml:mi>
</mml:math>
</inline-formula>) that will be used during the training procedure. The reconstruction loss function <inline-formula id="inf78">
<mml:math id="m96">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="normal">&#x2112;</mml:mi>
<mml:mrow>
<mml:mtext>rec</mml:mtext>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula> is introduced to guarantee the autoencoder (encoder and decoder) capability to reconstruct <inline-formula id="inf79">
<mml:math id="m97">
<mml:mrow>
<mml:msup>
<mml:mrow>
<mml:mover accent="true">
<mml:mi>x</mml:mi>
<mml:mo>&#x5e;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mi>t</mml:mi>
</mml:msup>
</mml:mrow>
</mml:math>
</inline-formula> as close as possible to <inline-formula id="inf80">
<mml:math id="m98">
<mml:mrow>
<mml:msup>
<mml:mi>x</mml:mi>
<mml:mi>t</mml:mi>
</mml:msup>
</mml:mrow>
</mml:math>
</inline-formula>. <inline-formula id="inf81">
<mml:math id="m99">
<mml:mrow>
<mml:msup>
<mml:mrow>
<mml:mover accent="true">
<mml:mi>x</mml:mi>
<mml:mo>&#x5e;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mi>t</mml:mi>
</mml:msup>
</mml:mrow>
</mml:math>
</inline-formula> is calculated using:<disp-formula id="e15">
<mml:math id="m100">
<mml:mrow>
<mml:msup>
<mml:mrow>
<mml:mover accent="true">
<mml:mi>x</mml:mi>
<mml:mo>&#x5e;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mi>t</mml:mi>
</mml:msup>
<mml:mo>&#x3d;</mml:mo>
<mml:mtext>Decoder</mml:mtext>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:mtext>Encoder</mml:mtext>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:msup>
<mml:mi>x</mml:mi>
<mml:mi>t</mml:mi>
</mml:msup>
</mml:mrow>
<mml:mo>)</mml:mo>
</mml:mrow>
</mml:mrow>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:mo>.</mml:mo>
</mml:mrow>
</mml:math>
<label>(15)</label>
</disp-formula>The reconstruction loss function is defined as:<disp-formula id="e16">
<mml:math id="m101">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="normal">&#x2112;</mml:mi>
<mml:mrow>
<mml:mtext>rec</mml:mtext>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo>)</mml:mo>
</mml:mrow>
</mml:mrow>
<mml:mi>i</mml:mi>
</mml:msub>
<mml:mo>&#x3d;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mrow>
<mml:mo>{</mml:mo>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mrow>
<mml:mo>&#x2016;</mml:mo>
<mml:mrow>
<mml:msup>
<mml:mi>x</mml:mi>
<mml:mi>t</mml:mi>
</mml:msup>
<mml:mo>&#x2212;</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mover accent="true">
<mml:mi>x</mml:mi>
<mml:mo>&#x5e;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mi>t</mml:mi>
</mml:msup>
</mml:mrow>
<mml:mo>&#x2016;</mml:mo>
</mml:mrow>
</mml:mrow>
<mml:mn>2</mml:mn>
<mml:mn>2</mml:mn>
</mml:msubsup>
</mml:mrow>
<mml:mo>}</mml:mo>
</mml:mrow>
</mml:mrow>
<mml:mi>i</mml:mi>
</mml:msub>
<mml:mo>,</mml:mo>
</mml:mrow>
</mml:math>
<label>(16)</label>
</disp-formula>where <italic>i</italic> represents the sample&#x20;index.</p>
<p>Minimizing the prediction loss guarantees the accuracy of the time evolution of the dynamical system. In this case, we define the prediction loss function as:<disp-formula id="e17">
<mml:math id="m102">
<mml:mrow>
<mml:msup>
<mml:mrow>
<mml:mover accent="true">
<mml:mi>x</mml:mi>
<mml:mo>&#x5e;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mi>t</mml:mi>
<mml:mo>&#x2b;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msup>
<mml:mo>&#x3d;</mml:mo>
<mml:mtext>Decoder</mml:mtext>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:mtext>Transition</mml:mtext>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:mtext>Encoder</mml:mtext>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:msup>
<mml:mi>x</mml:mi>
<mml:mi>t</mml:mi>
</mml:msup>
</mml:mrow>
<mml:mo>)</mml:mo>
</mml:mrow>
</mml:mrow>
<mml:mo>)</mml:mo>
</mml:mrow>
</mml:mrow>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:mo>,</mml:mo>
</mml:mrow>
</mml:math>
<label>(17)</label>
</disp-formula>where, <inline-formula id="inf82">
<mml:math id="m103">
<mml:mrow>
<mml:msup>
<mml:mrow>
<mml:mover accent="true">
<mml:mi>x</mml:mi>
<mml:mo>&#x5e;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mi>t</mml:mi>
<mml:mo>&#x2b;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msup>
</mml:mrow>
</mml:math>
</inline-formula> is the prediction of the state variables at <inline-formula id="inf83">
<mml:math id="m104">
<mml:mrow>
<mml:mi>t</mml:mi>
<mml:mo>&#x2b;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:math>
</inline-formula>, and then is possible to calculate the prediction loss:<disp-formula id="e18">
<mml:math id="m105">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="normal">&#x2112;</mml:mi>
<mml:mrow>
<mml:mtext>pred</mml:mtext>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo>)</mml:mo>
</mml:mrow>
</mml:mrow>
<mml:mi>i</mml:mi>
</mml:msub>
<mml:mo>&#x3d;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mrow>
<mml:mo>{</mml:mo>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mrow>
<mml:mo>&#x7c;</mml:mo>
<mml:mrow>
<mml:mrow>
<mml:mo>&#x7c;</mml:mo>
<mml:mrow>
<mml:msup>
<mml:mi>x</mml:mi>
<mml:mrow>
<mml:mi>t</mml:mi>
<mml:mo>&#x2b;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msup>
<mml:mo>&#x2212;</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mover accent="true">
<mml:mi>x</mml:mi>
<mml:mo>&#x5e;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mi>t</mml:mi>
<mml:mo>&#x2b;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msup>
</mml:mrow>
<mml:mo>&#x7c;</mml:mo>
</mml:mrow>
</mml:mrow>
<mml:mo>&#x7c;</mml:mo>
</mml:mrow>
</mml:mrow>
<mml:mn>2</mml:mn>
<mml:mn>2</mml:mn>
</mml:msubsup>
</mml:mrow>
<mml:mo>}</mml:mo>
</mml:mrow>
</mml:mrow>
<mml:mi>i</mml:mi>
</mml:msub>
<mml:mo>.</mml:mo>
</mml:mrow>
</mml:math>
<label>(18)</label>
</disp-formula>The third loss function of the E2C model is the transition loss function, which tries to guarantee the model competence to evolve the reduced state <italic>z</italic> in time. This mimics the MOR idea of developing a projection framework in which the reduced state can evolve in time based on the reduced Jacobian matrix. First, we need to calculate:<disp-formula id="equ5">
<mml:math id="m106">
<mml:mrow>
<mml:msup>
<mml:mrow>
<mml:mover accent="true">
<mml:mi>z</mml:mi>
<mml:mo>&#x5e;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mi>t</mml:mi>
<mml:mo>&#x2b;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msup>
<mml:mo>&#x3d;</mml:mo>
<mml:mtext>Transition</mml:mtext>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:mtext>Encoder</mml:mtext>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:msup>
<mml:mi>x</mml:mi>
<mml:mi>t</mml:mi>
</mml:msup>
</mml:mrow>
<mml:mo>)</mml:mo>
</mml:mrow>
</mml:mrow>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:mo>,</mml:mo>
</mml:mrow>
</mml:math>
</disp-formula>and then:<disp-formula id="equ6">
<mml:math id="m107">
<mml:mrow>
<mml:msup>
<mml:mi>z</mml:mi>
<mml:mrow>
<mml:mi>t</mml:mi>
<mml:mo>&#x2b;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msup>
<mml:mo>&#x3d;</mml:mo>
<mml:mtext>Encoder</mml:mtext>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:msup>
<mml:mi>x</mml:mi>
<mml:mrow>
<mml:mi>t</mml:mi>
<mml:mo>&#x2b;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msup>
</mml:mrow>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:mo>,</mml:mo>
</mml:mrow>
</mml:math>
</disp-formula>and with these two equations it is possible to calculate the transition loss (<xref ref-type="disp-formula" rid="e19">Eq. 19</xref>):<disp-formula id="e19">
<mml:math id="m108">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="normal">&#x2112;</mml:mi>
<mml:mrow>
<mml:mtext>trans</mml:mtext>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo>)</mml:mo>
</mml:mrow>
</mml:mrow>
<mml:mi>i</mml:mi>
</mml:msub>
<mml:mo>&#x3d;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mrow>
<mml:mo>{</mml:mo>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mrow>
<mml:mo>&#x2016;</mml:mo>
<mml:mrow>
<mml:msup>
<mml:mi>z</mml:mi>
<mml:mrow>
<mml:mi>t</mml:mi>
<mml:mo>&#x2b;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msup>
<mml:mo>&#x2212;</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mover accent="true">
<mml:mi>z</mml:mi>
<mml:mo>&#x5e;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mi>t</mml:mi>
<mml:mo>&#x2b;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msup>
</mml:mrow>
<mml:mo>&#x2016;</mml:mo>
</mml:mrow>
</mml:mrow>
<mml:mn>2</mml:mn>
<mml:mn>2</mml:mn>
</mml:msubsup>
</mml:mrow>
<mml:mo>}</mml:mo>
</mml:mrow>
</mml:mrow>
<mml:mi>i</mml:mi>
</mml:msub>
<mml:mo>.</mml:mo>
</mml:mrow>
</mml:math>
<label>(19)</label>
</disp-formula>Here, we briefly described the main elements of the E2C model. In the next section, we will show an improvement of this model, adding a physical loss function specifically designed to reservoir simulation problems.</p>
</sec>
<sec id="s2-2">
<title>2.2 Embed to Control with Physical Loss Function for Petroleum Reservoir Numerical Simulation</title>
<p>Inspired by the E2C model, Jin et&#x20;al. [<xref ref-type="bibr" rid="B2">2</xref>] proposed an improvement on this model by adding a physical loss function to it. The model proposed by them focuses on the problem of building a proxy for a petroleum numerical reservoir simulator to be used on a well control optimization process. In <xref ref-type="disp-formula" rid="e28">Eq. 28</xref> of [<xref ref-type="bibr" rid="B2">2</xref>], the authors introduced a physical loss function, reproduced below:<disp-formula id="e20">
<mml:math id="m109">
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:msub>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="normal">&#x2112;</mml:mi>
<mml:mi>p</mml:mi>
</mml:msub>
</mml:mrow>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:mi>i</mml:mi>
</mml:msub>
<mml:mo>&#x3d;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mo>{</mml:mo>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mrow>
<mml:mo>&#x2016;</mml:mo>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>&#x22c5;</mml:mo>
<mml:mrow>
<mml:mo>[</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:mo>&#x2207;</mml:mo>
<mml:msup>
<mml:mi>p</mml:mi>
<mml:mi>t</mml:mi>
</mml:msup>
<mml:mo>&#x2212;</mml:mo>
<mml:mo>&#x2207;</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mover accent="true">
<mml:mi>p</mml:mi>
<mml:mo>&#x5e;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mi>t</mml:mi>
</mml:msup>
</mml:mrow>
<mml:mo>)</mml:mo>
</mml:mrow>
</mml:mrow>
<mml:mrow>
<mml:mtext>recon</mml:mtext>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2b;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:mo>&#x2207;</mml:mo>
<mml:msup>
<mml:mi>p</mml:mi>
<mml:mrow>
<mml:mi>t</mml:mi>
<mml:mo>&#x2b;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msup>
<mml:mo>&#x2212;</mml:mo>
<mml:mo>&#x2207;</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mover accent="true">
<mml:mi>p</mml:mi>
<mml:mo>&#x5e;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mi>t</mml:mi>
<mml:mo>&#x2b;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msup>
</mml:mrow>
<mml:mo>)</mml:mo>
</mml:mrow>
</mml:mrow>
<mml:mrow>
<mml:mtext>pred</mml:mtext>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo>]</mml:mo>
</mml:mrow>
</mml:mrow>
<mml:mo>&#x2016;</mml:mo>
</mml:mrow>
</mml:mrow>
<mml:mn>2</mml:mn>
<mml:mn>2</mml:mn>
</mml:msubsup>
</mml:mrow>
<mml:mo>}</mml:mo>
</mml:mrow>
<mml:mi>i</mml:mi>
</mml:msub>
<mml:mo>&#x2b;</mml:mo>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mo>&#x2b;</mml:mo>
<mml:mi>&#x3b3;</mml:mi>
<mml:msub>
<mml:mrow>
<mml:mo>{</mml:mo>
<mml:mrow>
<mml:mo>&#x2016;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:msup>
<mml:mi>q</mml:mi>
<mml:mrow>
<mml:mi>w</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:msup>
<mml:mo>&#x2212;</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mover accent="true">
<mml:mi>q</mml:mi>
<mml:mo>&#x5e;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mi>w</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:msup>
</mml:mrow>
<mml:mo>)</mml:mo>
</mml:mrow>
</mml:mrow>
<mml:mrow>
<mml:mtext>recon</mml:mtext>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2b;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:msup>
<mml:mi>q</mml:mi>
<mml:mrow>
<mml:mi>w</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo>&#x2b;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msup>
<mml:mo>&#x2212;</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mover accent="true">
<mml:mi>q</mml:mi>
<mml:mo>&#x5e;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mi>w</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo>&#x2b;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msup>
</mml:mrow>
<mml:mo>)</mml:mo>
</mml:mrow>
</mml:mrow>
<mml:mrow>
<mml:mtext>recon</mml:mtext>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2016;</mml:mo>
</mml:mrow>
<mml:mo>}</mml:mo>
</mml:mrow>
<mml:mi>i</mml:mi>
</mml:msub>
<mml:mo>.</mml:mo>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:math>
<label>(20)</label>
</disp-formula>This physical loss function is composed of two parts. The first one contains the mismatch between the predicted pressure gradient between adjacent grid blocks and the input pressure gradient multiplied by the permeability. This part of the proposed loss function intends to assure that the fluid flow between adjacent grid blocks in the predicted model is as close as possible to the input/true model. Simply put, this is basically a mass conservative requirement. Here, this first part of the physical loss function will be named the flux loss function.</p>
<p>The second part of the physical loss function deals with a mismatch in the producer wells&#x2019; flow rate. In fact, as described by the authors, it tries to guarantee that the producers&#x2019; grid block pressure in the predicted and reconstructed states are as close as possible to its equivalent on the input/true model. Instead of adding physics to the neural network, this second part adds more weight to the producers&#x2019; grid block pressure during the training procedure. In fact the authors in [<xref ref-type="bibr" rid="B2">2</xref>] did not use the flow rate on their physical loss function; instead, they used only the producers&#x2019; well grid block pressure. Since we will propose a new way to handle well data, we will omit this second part of the study&#x2019;s proposed physical loss function. Even though we are omitting this part of the physical loss function, we will have it in our implementation of the method proposed by [<xref ref-type="bibr" rid="B2">2</xref>], for comparison purposes. Our implementation of their loss function (<xref ref-type="disp-formula" rid="e28">Eq. 28</xref> of [<xref ref-type="bibr" rid="B2">2</xref>]) is presented here on <xref ref-type="disp-formula" rid="e35">Eq.&#x20;35</xref>.</p>
<p>We present in <xref ref-type="fig" rid="F3">Figure&#x20;3</xref> a diagram of the autoencoder with the flux loss function terms calculation. Comparing this figure with <xref ref-type="fig" rid="F2">Figure&#x20;2</xref>, it is possible to notice the addition of the gradient calculation on both sides of the chart and also the calculation of the flux loss functions both in the reconstruction and prediction parts, which can be expressed as:<disp-formula id="e21">
<mml:math id="m110">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="normal">&#x2112;</mml:mi>
<mml:mrow>
<mml:mtext>flux</mml:mtext>
<mml:mo>,</mml:mo>
<mml:mtext>rec</mml:mtext>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo>)</mml:mo>
</mml:mrow>
</mml:mrow>
<mml:mi>i</mml:mi>
</mml:msub>
<mml:mo>&#x3d;</mml:mo>
<mml:mi>k</mml:mi>
<mml:msub>
<mml:mrow>
<mml:mrow>
<mml:mo>{</mml:mo>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mrow>
<mml:mo>&#x2016;</mml:mo>
<mml:mrow>
<mml:mo>&#x2207;</mml:mo>
<mml:msup>
<mml:mi>p</mml:mi>
<mml:mi>t</mml:mi>
</mml:msup>
<mml:mo>&#x2212;</mml:mo>
<mml:mo>&#x2207;</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mover accent="true">
<mml:mi>p</mml:mi>
<mml:mo>&#x5e;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mi>t</mml:mi>
</mml:msup>
</mml:mrow>
<mml:mo>&#x2016;</mml:mo>
</mml:mrow>
</mml:mrow>
<mml:mn>2</mml:mn>
<mml:mn>2</mml:mn>
</mml:msubsup>
</mml:mrow>
<mml:mo>}</mml:mo>
</mml:mrow>
</mml:mrow>
<mml:mi>i</mml:mi>
</mml:msub>
<mml:mo>,</mml:mo>
</mml:mrow>
</mml:math>
<label>(21)</label>
</disp-formula>and<disp-formula id="e22">
<mml:math id="m111">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="normal">&#x2112;</mml:mi>
<mml:mrow>
<mml:mtext>flux</mml:mtext>
<mml:mo>,</mml:mo>
<mml:mtext>pred</mml:mtext>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo>)</mml:mo>
</mml:mrow>
</mml:mrow>
<mml:mi>i</mml:mi>
</mml:msub>
<mml:mo>&#x3d;</mml:mo>
<mml:mi>k</mml:mi>
<mml:msub>
<mml:mrow>
<mml:mrow>
<mml:mo>{</mml:mo>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mrow>
<mml:mo>&#x2016;</mml:mo>
<mml:mrow>
<mml:mo>&#x2207;</mml:mo>
<mml:msup>
<mml:mi>p</mml:mi>
<mml:mrow>
<mml:mi>t</mml:mi>
<mml:mo>&#x2b;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msup>
<mml:mo>&#x2212;</mml:mo>
<mml:mo>&#x2207;</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mover accent="true">
<mml:mi>p</mml:mi>
<mml:mo>&#x5e;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mi>t</mml:mi>
<mml:mo>&#x2b;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msup>
</mml:mrow>
<mml:mo>&#x2016;</mml:mo>
</mml:mrow>
</mml:mrow>
<mml:mn>2</mml:mn>
<mml:mn>2</mml:mn>
</mml:msubsup>
</mml:mrow>
<mml:mo>}</mml:mo>
</mml:mrow>
</mml:mrow>
<mml:mi>i</mml:mi>
</mml:msub>
<mml:mo>,</mml:mo>
</mml:mrow>
</mml:math>
<label>(22)</label>
</disp-formula>where <italic>k</italic> is the permeability.</p>
<fig id="F3" position="float">
<label>FIGURE 3</label>
<caption>
<p>Diagram for training the E2C with flux&#x20;loss.</p>
</caption>
<graphic xlink:href="fams-07-651178-g003.tif"/>
</fig>
<p>The flux loss function can be defined as:<disp-formula id="e23">
<mml:math id="m112">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="normal">&#x2112;</mml:mi>
<mml:mrow>
<mml:mtext>flux</mml:mtext>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo>)</mml:mo>
</mml:mrow>
</mml:mrow>
<mml:mi>i</mml:mi>
</mml:msub>
<mml:mo>&#x3d;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="normal">&#x2112;</mml:mi>
<mml:mrow>
<mml:mtext>flux</mml:mtext>
<mml:mo>,</mml:mo>
<mml:mtext>rec</mml:mtext>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo>)</mml:mo>
</mml:mrow>
</mml:mrow>
<mml:mi>i</mml:mi>
</mml:msub>
<mml:mo>&#x2b;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="normal">&#x2112;</mml:mi>
<mml:mrow>
<mml:mtext>flux</mml:mtext>
<mml:mo>,</mml:mo>
<mml:mtext>pred</mml:mtext>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo>)</mml:mo>
</mml:mrow>
</mml:mrow>
<mml:mi>i</mml:mi>
</mml:msub>
<mml:mo>.</mml:mo>
</mml:mrow>
</mml:math>
<label>(23)</label>
</disp-formula>In addition to the flux loss function, on the top right of <xref ref-type="fig" rid="F3">Figure&#x20;3</xref>, it is possible to see the calculation of the output <inline-formula id="inf84">
<mml:math id="m113">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mi>y</mml:mi>
<mml:mo>&#x5e;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mi>t</mml:mi>
<mml:mo>&#x2b;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula>. The model outputs are well bottom hole pressure for the injector wells, and water and oil flow rates for the producer wells, in the case presented here. The calculation of these quantities from the state variables (pressures and saturations) is made by applying the Peaceman equation ([<xref ref-type="bibr" rid="B22">22</xref>]). This way to estimate the well data is here denoted by proposition 1. Note, that this is the actual proposed method in [<xref ref-type="bibr" rid="B2">2</xref>], implemented here for comparison purposes. In the following sections, we will propose and compare two other ways of estimating well data using E2C like models.</p>
</sec>
<sec id="s2-3">
<title>2.3 Embed to Control with Well Data Loss Functions for Petroleum Reservoir Numerical Simulation</title>
<p>Since we are building a proxy model for a petroleum reservoir numerical simulator to be applied in a well control optimization framework, we would like to emphasize the well data prediction (BHP and flow rates), not only on the state (pressure and saturation) calculation; or, in other words, we want to reconstruct the output and not only the states. To achieve this, we propose a well data loss function named <inline-formula id="inf85">
<mml:math id="m114">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="normal">&#x2112;</mml:mi>
<mml:mrow>
<mml:mtext>well</mml:mtext>
<mml:mo>_</mml:mo>
<mml:mtext>data</mml:mtext>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula> as a reference to proposition 2. We present the diagram for proposition 2 in <xref ref-type="fig" rid="F4">Figure&#x20;4</xref>, where it is possible to see the addition of the well data loss function on the right upper corner. This loss function will make the well data predicted by the model <inline-formula id="inf86">
<mml:math id="m115">
<mml:mrow>
<mml:msup>
<mml:mrow>
<mml:mover accent="true">
<mml:mi>y</mml:mi>
<mml:mo>&#x5e;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mi>t</mml:mi>
<mml:mo>&#x2b;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msup>
</mml:mrow>
</mml:math>
</inline-formula> as close as possible to the true value <inline-formula id="inf87">
<mml:math id="m116">
<mml:mrow>
<mml:msup>
<mml:mi>y</mml:mi>
<mml:mrow>
<mml:mi>t</mml:mi>
<mml:mo>&#x2b;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msup>
</mml:mrow>
</mml:math>
</inline-formula>. Note that both <italic>y</italic> and <inline-formula id="inf88">
<mml:math id="m117">
<mml:mrow>
<mml:mover accent="true">
<mml:mi>y</mml:mi>
<mml:mo>&#x5e;</mml:mo>
</mml:mover>
</mml:mrow>
</mml:math>
</inline-formula> are composed by oil and water flow rates and bottom hole pressures, as defined in <xref ref-type="disp-formula" rid="e2">Eq. 2</xref>. The input used to train the model is the well data calculated by a reservoir simulation. Proposition 2 well data loss function is defined as:<disp-formula id="e24">
<mml:math id="m118">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="normal">&#x2112;</mml:mi>
<mml:mrow>
<mml:mtext>well</mml:mtext>
<mml:mo>_</mml:mo>
<mml:mtext>data</mml:mtext>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo>)</mml:mo>
</mml:mrow>
</mml:mrow>
<mml:mi>i</mml:mi>
</mml:msub>
<mml:mo>&#x3d;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mrow>
<mml:mo>{</mml:mo>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mrow>
<mml:mo>&#x2016;</mml:mo>
<mml:mrow>
<mml:msup>
<mml:mi>y</mml:mi>
<mml:mrow>
<mml:mi>t</mml:mi>
<mml:mo>&#x2b;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msup>
<mml:mo>&#x2212;</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mover accent="true">
<mml:mi>y</mml:mi>
<mml:mo>&#x5e;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mi>t</mml:mi>
<mml:mo>&#x2b;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msup>
</mml:mrow>
<mml:mo>&#x2016;</mml:mo>
</mml:mrow>
</mml:mrow>
<mml:mn>2</mml:mn>
<mml:mn>2</mml:mn>
</mml:msubsup>
</mml:mrow>
<mml:mo>}</mml:mo>
</mml:mrow>
</mml:mrow>
<mml:mi>i</mml:mi>
</mml:msub>
<mml:mo>.</mml:mo>
</mml:mrow>
</mml:math>
<label>(24)</label>
</disp-formula>To get a more reliable state prediction and, as consequence, a better well data estimation, we introduce a two-phase flux loss function (<xref ref-type="disp-formula" rid="e25">Eq. 25</xref>) for a two-phase simulator.<disp-formula id="e25">
<mml:math id="m119">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="normal">&#x2112;</mml:mi>
<mml:mrow>
<mml:mtext>flux</mml:mtext>
<mml:mn>2</mml:mn>
<mml:mtext>Ph</mml:mtext>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo>)</mml:mo>
</mml:mrow>
</mml:mrow>
<mml:mi>i</mml:mi>
</mml:msub>
<mml:mo>&#x3d;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="normal">&#x2112;</mml:mi>
<mml:mrow>
<mml:mtext>flux</mml:mtext>
<mml:mn>2</mml:mn>
<mml:mtext>Ph</mml:mtext>
<mml:mo>,</mml:mo>
<mml:mtext>rec</mml:mtext>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo>)</mml:mo>
</mml:mrow>
</mml:mrow>
<mml:mi>i</mml:mi>
</mml:msub>
<mml:mo>&#x2b;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="normal">&#x2112;</mml:mi>
<mml:mrow>
<mml:mtext>flux</mml:mtext>
<mml:mn>2</mml:mn>
<mml:mtext>Ph</mml:mtext>
<mml:mo>,</mml:mo>
<mml:mtext>pred</mml:mtext>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo>)</mml:mo>
</mml:mrow>
</mml:mrow>
<mml:mi>i</mml:mi>
</mml:msub>
<mml:mo>,</mml:mo>
</mml:mrow>
</mml:math>
<label>(25)</label>
</disp-formula>where its terms are defined in <xref ref-type="disp-formula" rid="e26">Eqs 26</xref>, <xref ref-type="disp-formula" rid="e27">27</xref>:<disp-formula id="e26">
<mml:math id="m120">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="normal">&#x2112;</mml:mi>
<mml:mrow>
<mml:mtext>flux</mml:mtext>
<mml:mn>2</mml:mn>
<mml:mtext>Ph</mml:mtext>
<mml:mo>,</mml:mo>
<mml:mtext>rec</mml:mtext>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo>)</mml:mo>
</mml:mrow>
</mml:mrow>
<mml:mi>i</mml:mi>
</mml:msub>
<mml:mo>&#x3d;</mml:mo>
<mml:mi>k</mml:mi>
<mml:msub>
<mml:mrow>
<mml:mrow>
<mml:mo>{</mml:mo>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mrow>
<mml:mo>&#x2016;</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mi>k</mml:mi>
<mml:mrow>
<mml:mi>r</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>o</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:msubsup>
<mml:mi>S</mml:mi>
<mml:mi>w</mml:mi>
<mml:mi>t</mml:mi>
</mml:msubsup>
</mml:mrow>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:mo>&#x2207;</mml:mo>
<mml:msup>
<mml:mi>p</mml:mi>
<mml:mi>t</mml:mi>
</mml:msup>
<mml:mo>&#x2212;</mml:mo>
<mml:msub>
<mml:mi>k</mml:mi>
<mml:mrow>
<mml:mi>r</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>o</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mover accent="true">
<mml:mi>S</mml:mi>
<mml:mo>&#x5e;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mi>w</mml:mi>
<mml:mi>t</mml:mi>
</mml:msubsup>
</mml:mrow>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:mo>&#x2207;</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mover accent="true">
<mml:mi>p</mml:mi>
<mml:mo>&#x5e;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mi>t</mml:mi>
</mml:msup>
</mml:mrow>
<mml:mo>&#x2016;</mml:mo>
</mml:mrow>
</mml:mrow>
<mml:mn>2</mml:mn>
<mml:mn>2</mml:mn>
</mml:msubsup>
<mml:mo>&#x2b;</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mrow>
<mml:mo>&#x2016;</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mi>k</mml:mi>
<mml:mrow>
<mml:mi>r</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>w</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:msubsup>
<mml:mi>S</mml:mi>
<mml:mi>w</mml:mi>
<mml:mi>t</mml:mi>
</mml:msubsup>
</mml:mrow>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:mo>&#x2207;</mml:mo>
<mml:msup>
<mml:mi>p</mml:mi>
<mml:mi>t</mml:mi>
</mml:msup>
<mml:mo>&#x2212;</mml:mo>
<mml:msub>
<mml:mi>k</mml:mi>
<mml:mrow>
<mml:mi>r</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>w</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mover accent="true">
<mml:mi>S</mml:mi>
<mml:mo>&#x5e;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mi>w</mml:mi>
<mml:mi>t</mml:mi>
</mml:msubsup>
</mml:mrow>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:mo>&#x2207;</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mover accent="true">
<mml:mi>p</mml:mi>
<mml:mo>&#x5e;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mi>t</mml:mi>
</mml:msup>
</mml:mrow>
<mml:mo>&#x2016;</mml:mo>
</mml:mrow>
</mml:mrow>
<mml:mn>2</mml:mn>
<mml:mn>2</mml:mn>
</mml:msubsup>
</mml:mrow>
<mml:mo>}</mml:mo>
</mml:mrow>
</mml:mrow>
<mml:mi>i</mml:mi>
</mml:msub>
<mml:mo>,</mml:mo>
</mml:mrow>
</mml:math>
<label>(26)</label>
</disp-formula>and<disp-formula id="e27">
<mml:math id="m121">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="normal">&#x2112;</mml:mi>
<mml:mrow>
<mml:mtext>flux</mml:mtext>
<mml:mn>2</mml:mn>
<mml:mtext>Ph</mml:mtext>
<mml:mo>,</mml:mo>
<mml:mtext>pred</mml:mtext>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo>)</mml:mo>
</mml:mrow>
</mml:mrow>
<mml:mi>i</mml:mi>
</mml:msub>
<mml:mo>&#x3d;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>{</mml:mo>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mrow>
<mml:mo>&#x2016;</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mi>k</mml:mi>
<mml:mrow>
<mml:mi>r</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>o</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:msubsup>
<mml:mi>S</mml:mi>
<mml:mi>w</mml:mi>
<mml:mrow>
<mml:mi>t</mml:mi>
<mml:mo>&#x2b;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msubsup>
</mml:mrow>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:mo>&#x2207;</mml:mo>
<mml:msup>
<mml:mi>p</mml:mi>
<mml:mrow>
<mml:mi>t</mml:mi>
<mml:mo>&#x2b;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msup>
<mml:mo>&#x2212;</mml:mo>
<mml:msub>
<mml:mi>k</mml:mi>
<mml:mrow>
<mml:mi>r</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>o</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mover accent="true">
<mml:mi>S</mml:mi>
<mml:mo>&#x5e;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mi>w</mml:mi>
<mml:mrow>
<mml:mi>t</mml:mi>
<mml:mo>&#x2b;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msubsup>
</mml:mrow>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:mo>&#x2207;</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mover accent="true">
<mml:mi>p</mml:mi>
<mml:mo>&#x5e;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mi>t</mml:mi>
<mml:mo>&#x2b;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msup>
</mml:mrow>
<mml:mo>&#x2016;</mml:mo>
</mml:mrow>
</mml:mrow>
<mml:mn>2</mml:mn>
<mml:mn>2</mml:mn>
</mml:msubsup>
<mml:mo>&#x2b;</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mrow>
<mml:mo>&#x2016;</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mi>k</mml:mi>
<mml:mrow>
<mml:mi>r</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>w</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:msubsup>
<mml:mi>S</mml:mi>
<mml:mi>w</mml:mi>
<mml:mrow>
<mml:mi>t</mml:mi>
<mml:mo>&#x2b;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msubsup>
</mml:mrow>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:mo>&#x2207;</mml:mo>
<mml:msup>
<mml:mi>p</mml:mi>
<mml:mrow>
<mml:mi>t</mml:mi>
<mml:mo>&#x2b;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msup>
<mml:mo>&#x2212;</mml:mo>
<mml:msub>
<mml:mi>k</mml:mi>
<mml:mrow>
<mml:mi>r</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>w</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mover accent="true">
<mml:mi>S</mml:mi>
<mml:mo>&#x5e;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mi>w</mml:mi>
<mml:mrow>
<mml:mi>t</mml:mi>
<mml:mo>&#x2b;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msubsup>
</mml:mrow>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:mo>&#x2207;</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mover accent="true">
<mml:mi>p</mml:mi>
<mml:mo>&#x5e;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mi>t</mml:mi>
<mml:mo>&#x2b;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msup>
</mml:mrow>
<mml:mo>&#x2016;</mml:mo>
</mml:mrow>
</mml:mrow>
<mml:mn>2</mml:mn>
<mml:mn>2</mml:mn>
</mml:msubsup>
</mml:mrow>
<mml:mo>}</mml:mo>
</mml:mrow>
<mml:mi>i</mml:mi>
</mml:msub>
<mml:mo>,</mml:mo>
</mml:mrow>
</mml:math>
<label>(27)</label>
</disp-formula>where <italic>k</italic> is the permeability, <inline-formula id="inf89">
<mml:math id="m122">
<mml:mrow>
<mml:msub>
<mml:mi>k</mml:mi>
<mml:mrow>
<mml:mi>r</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>j</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula> is the relative permeability to the phase <italic>j</italic>, and <inline-formula id="inf90">
<mml:math id="m123">
<mml:mrow>
<mml:msub>
<mml:mi>S</mml:mi>
<mml:mi>w</mml:mi>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula> is the water saturation.</p>
<fig id="F4" position="float">
<label>FIGURE 4</label>
<caption>
<p>Training diagram to E2C with 2 phase flux and well data loss functions (proposition 2).</p>
</caption>
<graphic xlink:href="fams-07-651178-g004.tif"/>
</fig>
<p>The addition of proposition 2 loss function <inline-formula id="inf91">
<mml:math id="m124">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="normal">&#x2112;</mml:mi>
<mml:mrow>
<mml:mtext>well</mml:mtext>
<mml:mo>_</mml:mo>
<mml:mtext>data</mml:mtext>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula> to the training process is a simple step but can improve the model&#x2019;s ability to estimate well data. Although the model&#x2019;s structure is very similar to proposition 1 (<xref ref-type="fig" rid="F3">Figure&#x20;3</xref>), we expect to have more reliable well data estimation because we are adding this information to the training procedure. On proposition 1, the well data was not part of the training procedure. It was calculated on the validation/test steps based on the states.</p>
</sec>
<sec id="s2-4">
<title>2.4 Embed to Control and Observe with Flux Loss Function for Petroleum Reservoir Numerical Simulation</title>
<p>Inspired by the E2C model, we extend its idea to the output data and named it as Embed to Control and Observe (E2CO). On the original E2C model, a transition network receiving as input the state in the reduced space was employed to generate matrix <inline-formula id="inf92">
<mml:math id="m125">
<mml:mrow>
<mml:msubsup>
<mml:mi mathvariant="bold">A</mml:mi>
<mml:mi>r</mml:mi>
<mml:mi>t</mml:mi>
</mml:msubsup>
</mml:mrow>
</mml:math>
</inline-formula> and <inline-formula id="inf93">
<mml:math id="m126">
<mml:mrow>
<mml:msubsup>
<mml:mi mathvariant="bold">B</mml:mi>
<mml:mi>r</mml:mi>
<mml:mi>t</mml:mi>
</mml:msubsup>
</mml:mrow>
</mml:math>
</inline-formula>, which was used to evolve the state in the latent space based on <xref ref-type="disp-formula" rid="e14">Eq. 14</xref>. We introduce another transition network, namely, the transition output. This network will receive information from the state on latent space <inline-formula id="inf94">
<mml:math id="m127">
<mml:mrow>
<mml:msub>
<mml:mi>z</mml:mi>
<mml:mi>t</mml:mi>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula> to generate matrix <inline-formula id="inf95">
<mml:math id="m128">
<mml:mrow>
<mml:msubsup>
<mml:mi mathvariant="bold">C</mml:mi>
<mml:mi>r</mml:mi>
<mml:mi>t</mml:mi>
</mml:msubsup>
</mml:mrow>
</mml:math>
</inline-formula> and <inline-formula id="inf96">
<mml:math id="m129">
<mml:mrow>
<mml:msubsup>
<mml:mi mathvariant="bold">D</mml:mi>
<mml:mi>r</mml:mi>
<mml:mi>t</mml:mi>
</mml:msubsup>
</mml:mrow>
</mml:math>
</inline-formula> in order to be able to estimate well data <inline-formula id="inf97">
<mml:math id="m130">
<mml:mrow>
<mml:msup>
<mml:mrow>
<mml:mover accent="true">
<mml:mi>y</mml:mi>
<mml:mo>&#x5e;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mi>t</mml:mi>
<mml:mo>&#x2b;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msup>
</mml:mrow>
</mml:math>
</inline-formula> as in .<disp-formula id="e28">
<mml:math id="m131">
<mml:mrow>
<mml:msup>
<mml:mrow>
<mml:mover accent="true">
<mml:mi>y</mml:mi>
<mml:mo>&#x5e;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mi>t</mml:mi>
<mml:mo>&#x2b;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msup>
<mml:mo>&#x3d;</mml:mo>
<mml:msubsup>
<mml:mi mathvariant="bold">C</mml:mi>
<mml:mi>r</mml:mi>
<mml:mi>t</mml:mi>
</mml:msubsup>
<mml:msup>
<mml:mrow>
<mml:mover accent="true">
<mml:mi>z</mml:mi>
<mml:mo>&#x5e;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mi>t</mml:mi>
<mml:mo>&#x2b;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msup>
<mml:mo>&#x2b;</mml:mo>
<mml:msubsup>
<mml:mi mathvariant="bold">D</mml:mi>
<mml:mi>r</mml:mi>
<mml:mi>t</mml:mi>
</mml:msubsup>
<mml:msup>
<mml:mi>u</mml:mi>
<mml:mi>t</mml:mi>
</mml:msup>
<mml:mo>.</mml:mo>
</mml:mrow>
</mml:math>
<label>(28)</label>
</disp-formula>The E2CO diagram is presented in <xref ref-type="fig" rid="F5">Figure&#x20;5</xref>, where it is possible to see the new transition output network. We also create a loss functions <inline-formula id="inf98">
<mml:math id="m132">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="normal">&#x2112;</mml:mi>
<mml:mrow>
<mml:mtext>well</mml:mtext>
<mml:mo>_</mml:mo>
<mml:mtext>data</mml:mtext>
<mml:mn>3</mml:mn>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula> (as reference to proposition 3) that provides information to train the neural network transition output parameters. This loss function has the same structure as <xref ref-type="disp-formula" rid="e24">Eq.&#x20;24</xref>.</p>
<fig id="F5" position="float">
<label>FIGURE 5</label>
<caption>
<p>Training diagram for E2CO with flux and well data loss functions (proposition 3).</p>
</caption>
<graphic xlink:href="fams-07-651178-g005.tif"/>
</fig>
<p>One of the main advantages of E2CO, when compared to propositions 1 and 2, is that here we do not rely on the state variables in the original space to predict well data. Instead of this, E2CO uses the state on the reduced space to create matrices <inline-formula id="inf99">
<mml:math id="m133">
<mml:mrow>
<mml:msubsup>
<mml:mi mathvariant="bold">C</mml:mi>
<mml:mi>r</mml:mi>
<mml:mi>t</mml:mi>
</mml:msubsup>
</mml:mrow>
</mml:math>
</inline-formula> and <inline-formula id="inf100">
<mml:math id="m134">
<mml:mrow>
<mml:msubsup>
<mml:mi mathvariant="bold">D</mml:mi>
<mml:mi>r</mml:mi>
<mml:mi>t</mml:mi>
</mml:msubsup>
</mml:mrow>
</mml:math>
</inline-formula> and uses a control system approach to estimate the output data. This resembles the case of system identification as in the control system community.</p>
</sec>
<sec id="s2-5">
<title>2.5 Training <italic>Versus</italic> Prediction</title>
<p>The diagrams presented in <xref ref-type="fig" rid="F2">Figures 2</xref>&#x2013;<xref ref-type="fig" rid="F5">5</xref> are used to train each proposed method&#x2019;s networks. In these diagrams, the loss functions have an important role in the training procedure. They are defined to provide information about the system dynamics and honor the physics presented in the reservoir simulation process.</p>
<p>When the training procedure is finished, and the neural network parameters (weights, bias, and filters) are optimally found, it is time to use them to predict the system behavior. The prediction diagrams are significantly simpler than the training ones. The prediction diagram for propositions 1 and 2 is presented in <xref ref-type="fig" rid="F6">Figure&#x20;6</xref>. In this figure, the time evolution happens in the latent space (<italic>z</italic>), potentially reducing the computational cost of the prediction step. However, to predict well data using propositions 1 and 2, it is necessary to have the state on the original space (<italic>x</italic>) at each desired time step to predict the well data at that time. That being said, one can note that it is necessary to pass <inline-formula id="inf101">
<mml:math id="m135">
<mml:mrow>
<mml:msup>
<mml:mrow>
<mml:mover accent="true">
<mml:mi>z</mml:mi>
<mml:mo>&#x5e;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mi>t</mml:mi>
<mml:mo>&#x2b;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msup>
</mml:mrow>
</mml:math>
</inline-formula> through the decoder to calculate <inline-formula id="inf102">
<mml:math id="m136">
<mml:mrow>
<mml:msup>
<mml:mrow>
<mml:mover accent="true">
<mml:mi>x</mml:mi>
<mml:mo>&#x5e;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mi>t</mml:mi>
<mml:mo>&#x2b;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msup>
</mml:mrow>
</mml:math>
</inline-formula> and further apply the Peaceman equation to calculate well data <inline-formula id="inf103">
<mml:math id="m137">
<mml:mrow>
<mml:msup>
<mml:mrow>
<mml:mover accent="true">
<mml:mi>y</mml:mi>
<mml:mo>&#x5e;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mi>t</mml:mi>
<mml:mo>&#x2b;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msup>
</mml:mrow>
</mml:math>
</inline-formula> on each time step. The application of the decoder to predict the well data can lead to a computational cost increase.</p>
<fig id="F6" position="float">
<label>FIGURE 6</label>
<caption>
<p>E2C prediction diagram (propositions 1 and 2).</p>
</caption>
<graphic xlink:href="fams-07-651178-g006.tif"/>
</fig>
<p>For proposition 3, there is no need to decode the latent space since the well data is generated on that latent space using a specific network for this purpose (Transition Output). <xref ref-type="fig" rid="F7">Figure&#x20;7</xref> shows that both the state time evolution and the well data estimation happen in latent space. On proposition 3, the decoder&#x2019;s use is limited to the cases where one would like to estimate the state on the original space&#x20;(<italic>x</italic>).</p>
<fig id="F7" position="float">
<label>FIGURE 7</label>
<caption>
<p>E2CO prediction diagram (proposition 3).</p>
</caption>
<graphic xlink:href="fams-07-651178-g007.tif"/>
</fig>
</sec>
<sec id="s2-6">
<title>2.6 Neural Networks Structure</title>
<p>In the following sections, we describe the networks used in each part of the proposed models. The structure of the networks used here is very similar to the ones used in [<xref ref-type="bibr" rid="B2">2</xref>]. The three proposed ways of calculating well data use the same elements described in this section. Although the elements are the same, each proposed method&#x2019;s parameters will differ due to the different model/network structure and different loss functions used in the training procedure.</p>
<sec id="s2-6-1">
<title>2.6.1 Encoder</title>
<p>The encoder is built with a series of encoding blocks followed by residual convolutional blocks and a dense (fully connected layer), as depicted in <xref ref-type="fig" rid="F8">Figure&#x20;8</xref> (top).</p>
<fig id="F8" position="float">
<label>FIGURE 8</label>
<caption>
<p>Encoder structure <bold>(top)</bold> and Decoder structure <bold>(bottom)</bold> (both adapted from [<xref ref-type="bibr" rid="B2">2</xref>]).</p>
</caption>
<graphic xlink:href="fams-07-651178-g008.tif"/>
</fig>
<p>The main idea of the encoder structure is to transform the state variables on the original space <italic>x</italic> to the latent space <italic>z</italic>. The dimension of the latent space <inline-formula id="inf104">
<mml:math id="m138">
<mml:mrow>
<mml:msub>
<mml:mi>l</mml:mi>
<mml:mi>z</mml:mi>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula> is smaller than the dimension of the original space <inline-formula id="inf105">
<mml:math id="m139">
<mml:mrow>
<mml:msub>
<mml:mi>l</mml:mi>
<mml:mi>x</mml:mi>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula>. To keep things in perspective the numerical model we will present next has <inline-formula id="inf106">
<mml:math id="m140">
<mml:mrow>
<mml:msub>
<mml:mi>l</mml:mi>
<mml:mi>x</mml:mi>
</mml:msub>
<mml:mo>&#x3d;</mml:mo>
<mml:mn>60</mml:mn>
<mml:mo>&#xd7;</mml:mo>
<mml:mn>60</mml:mn>
<mml:mo>&#xd7;</mml:mo>
<mml:mn>2</mml:mn>
<mml:mo>&#x3d;</mml:mo>
<mml:mn>7200</mml:mn>
</mml:mrow>
</mml:math>
</inline-formula> states and <inline-formula id="inf107">
<mml:math id="m141">
<mml:mrow>
<mml:msub>
<mml:mi>l</mml:mi>
<mml:mi>z</mml:mi>
</mml:msub>
<mml:mo>&#x3d;</mml:mo>
<mml:mn>50</mml:mn>
</mml:mrow>
</mml:math>
</inline-formula>.</p>
<p>Each encoding block comprises a convolutional 2D layer, followed by batch normalization and a ReLU (Rectified Linear Unit) activation function, as presented in <xref ref-type="fig" rid="F9">Figure&#x20;9</xref> (top). Although the structure of each encoding block is the same, the dimension of each block will change to be able to reduce the dimension of the encoder input. This dimension reduction is pictorially presented in <xref ref-type="fig" rid="F8">Figure&#x20;8</xref>. The dimensions of each component used in this work will be presented&#x20;later.</p>
<fig id="F9" position="float">
<label>FIGURE 9</label>
<caption>
<p>From top to bottom: Encoding block <bold>(top)</bold>, Residual block, Decoding block, and Transformation block <bold>(bottom)</bold> (Adapted from [<xref ref-type="bibr" rid="B2">2</xref>]).</p>
</caption>
<graphic xlink:href="fams-07-651178-g009.tif"/>
</fig>
<p>The residual convolutional blocks also have a convolutional 2D layer, followed by batch normalization and a ReLU, adding another convolutional 2D layer and batch normalization, as presented in <xref ref-type="fig" rid="F9">Figure&#x20;9</xref>. It is possible to observe a link between the input and the output of the residual convolutional blocks. This is the characteristic of a residual block. It is built in this way mainly to avoid gradient vanishing during the training procedure.</p>
</sec>
<sec id="s2-6-2">
<title>2.6.2 Decoder</title>
<p>The decoder will work as an inverted encoder, where its main purpose is to transform the state variables in latent space <italic>z</italic> into the original space <italic>x</italic>. Its structure is composed of a dense (fully connected) layer, followed by three residual convolutional blocks, four decoding blocks, and a convolutional 2D layer, as presented in <xref ref-type="fig" rid="F8">Figure&#x20;8</xref> (bottom).</p>
<p>The residual convolutional block used in the decoder has the same structure as the used on the encoder. The decoding block (<xref ref-type="fig" rid="F9">Figure&#x20;9</xref>) comprises a transpose convolutional 2D layer, batch normalization, and ReLU. In [<xref ref-type="bibr" rid="B2">2</xref>], the decoding block has a sequence of unpooling, padding, and convolution layers; here we replace this with a transpose convolutional&#x20;layer.</p>
</sec>
<sec id="s2-6-3">
<title>2.6.3 Transition</title>
<p>The transition network is composed of two transformation blocks, followed by two dense layers directly connected to the output of the last transformation block. The output of these dense layers is reshaped to create the matrices <inline-formula id="inf108">
<mml:math id="m142">
<mml:mrow>
<mml:msubsup>
<mml:mi mathvariant="bold">A</mml:mi>
<mml:mi>r</mml:mi>
<mml:mi>t</mml:mi>
</mml:msubsup>
</mml:mrow>
</mml:math>
</inline-formula> and <inline-formula id="inf109">
<mml:math id="m143">
<mml:mrow>
<mml:msubsup>
<mml:mi mathvariant="bold">B</mml:mi>
<mml:mi>r</mml:mi>
<mml:mi>t</mml:mi>
</mml:msubsup>
</mml:mrow>
</mml:math>
</inline-formula>. The transition network is presented in <xref ref-type="fig" rid="F10">Figure&#x20;10</xref> (left).</p>
<fig id="F10" position="float">
<label>FIGURE 10</label>
<caption>
<p>Transition network <bold>(left)</bold> (Adapted from [<xref ref-type="bibr" rid="B2">2</xref>]) and Transition Output network <bold>(right)</bold>.</p>
</caption>
<graphic xlink:href="fams-07-651178-g010.tif"/>
</fig>
<p>Although the authors in [<xref ref-type="bibr" rid="B2">2</xref>] used three transformation blocks, we will use two as proposed on one example from the original E2C model [<xref ref-type="bibr" rid="B1">1</xref>]. The transformation block (<xref ref-type="fig" rid="F9">Figure&#x20;9</xref> (bottom)) is composed of a dense layer with batch normalization followed by a ReLU activation&#x20;layer.</p>
</sec>
<sec id="s2-6-4">
<title>2.6.4 Transition Output</title>
<p>The transition output network (<xref ref-type="fig" rid="F10">Figure&#x20;10</xref> (right)), used on our proposition 3, has a very similar structure compared with the transition network. The dimension of the dense layer in the transformation blocks will differ between these two networks. This will be detailed in the following section. Still, it is intuitive to think that the transition output network may require layers with smaller dimensions than the transition network. The transition network output is the matrices <inline-formula id="inf110">
<mml:math id="m144">
<mml:mrow>
<mml:msubsup>
<mml:mi mathvariant="bold">A</mml:mi>
<mml:mi>r</mml:mi>
<mml:mi>t</mml:mi>
</mml:msubsup>
</mml:mrow>
</mml:math>
</inline-formula> and <inline-formula id="inf111">
<mml:math id="m145">
<mml:mrow>
<mml:msubsup>
<mml:mi mathvariant="bold">B</mml:mi>
<mml:mi>r</mml:mi>
<mml:mi>t</mml:mi>
</mml:msubsup>
</mml:mrow>
</mml:math>
</inline-formula>, which have sizes defined by the system input/state. On the other hand, the sizes of <inline-formula id="inf112">
<mml:math id="m146">
<mml:mrow>
<mml:msubsup>
<mml:mi mathvariant="bold">C</mml:mi>
<mml:mi>r</mml:mi>
<mml:mi>t</mml:mi>
</mml:msubsup>
</mml:mrow>
</mml:math>
</inline-formula> and <inline-formula id="inf113">
<mml:math id="m147">
<mml:mrow>
<mml:msubsup>
<mml:mi mathvariant="bold">D</mml:mi>
<mml:mi>r</mml:mi>
<mml:mi>t</mml:mi>
</mml:msubsup>
</mml:mrow>
</mml:math>
</inline-formula> depend on the dimensions of system input/output, which usually has lower dimensions when compared to the input/state.</p>
</sec>
</sec>
<sec id="s2-7">
<title>2.7 Neural Networks Implementation</title>
<p>We implemented all the methods proposed here using Python 3.7.4 [<xref ref-type="bibr" rid="B26">26</xref>] and the framework TensorFlow 2.3.1 [<xref ref-type="bibr" rid="B27">27</xref>] with Keras API [<xref ref-type="bibr" rid="B28">28</xref>]. The dimensions of layers, number and size of filters, and output size of each block on the encoder and decoder used are presented in <xref ref-type="table" rid="T1">Tables 1</xref> and&#x20;<xref ref-type="table" rid="T2">2</xref>.</p>
<table-wrap id="T1" position="float">
<label>TABLE 1</label>
<caption>
<p>Encoder architecture.</p>
</caption>
<table>
<thead valign="top">
<tr>
<th align="left">Layer</th>
<th align="center">&#x23; Filters</th>
<th align="center">Filter size</th>
<th align="center">Stride</th>
<th align="center">Padding</th>
<th align="center">Output size</th>
</tr>
</thead>
<tbody valign="top">
<tr>
<td align="left">Input</td>
<td align="left"/>
<td align="left"/>
<td align="left"/>
<td align="left"/>
<td align="center">
<inline-formula id="inf114">
<mml:math id="m148">
<mml:mrow>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mi>N</mml:mi>
<mml:mi>x</mml:mi>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mi>N</mml:mi>
<mml:mi>y</mml:mi>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:mn>2</mml:mn>
</mml:mrow>
<mml:mo>)</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:math>
</inline-formula>
</td>
</tr>
<tr>
<td align="left">Encoding block</td>
<td align="char" char=".">16</td>
<td align="center">
<inline-formula id="inf115">
<mml:math id="m149">
<mml:mrow>
<mml:mn>3</mml:mn>
<mml:mo>&#xd7;</mml:mo>
<mml:mn>3</mml:mn>
</mml:mrow>
</mml:math>
</inline-formula>
</td>
<td align="center">
<inline-formula id="inf116">
<mml:math id="m150">
<mml:mrow>
<mml:mn>2</mml:mn>
<mml:mo>&#xd7;</mml:mo>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:math>
</inline-formula>
</td>
<td align="center">Same</td>
<td align="center">
<inline-formula id="inf117">
<mml:math id="m151">
<mml:mrow>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mi>N</mml:mi>
<mml:mi>x</mml:mi>
</mml:msub>
<mml:mo>/</mml:mo>
<mml:mn>2</mml:mn>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mi>N</mml:mi>
<mml:mi>y</mml:mi>
</mml:msub>
<mml:mo>/</mml:mo>
<mml:mn>2,16</mml:mn>
</mml:mrow>
<mml:mo>)</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:math>
</inline-formula>
</td>
</tr>
<tr>
<td align="left">Encoding block</td>
<td align="char" char=".">32</td>
<td align="center">
<inline-formula id="inf118">
<mml:math id="m152">
<mml:mrow>
<mml:mn>3</mml:mn>
<mml:mo>&#xd7;</mml:mo>
<mml:mn>3</mml:mn>
</mml:mrow>
</mml:math>
</inline-formula>
</td>
<td align="center">
<inline-formula id="inf119">
<mml:math id="m153">
<mml:mrow>
<mml:mn>1</mml:mn>
<mml:mo>&#xd7;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:math>
</inline-formula>
</td>
<td align="center">Same</td>
<td align="center">
<inline-formula id="inf120">
<mml:math id="m154">
<mml:mrow>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mi>N</mml:mi>
<mml:mi>x</mml:mi>
</mml:msub>
<mml:mo>/</mml:mo>
<mml:mn>2</mml:mn>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mi>N</mml:mi>
<mml:mi>y</mml:mi>
</mml:msub>
<mml:mo>/</mml:mo>
<mml:mn>2,32</mml:mn>
</mml:mrow>
<mml:mo>)</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:math>
</inline-formula>
</td>
</tr>
<tr>
<td align="left">Encoding block</td>
<td align="char" char=".">64</td>
<td align="center">
<inline-formula id="inf121">
<mml:math id="m155">
<mml:mrow>
<mml:mn>3</mml:mn>
<mml:mo>&#xd7;</mml:mo>
<mml:mn>3</mml:mn>
</mml:mrow>
</mml:math>
</inline-formula>
</td>
<td align="center">
<inline-formula id="inf122">
<mml:math id="m156">
<mml:mrow>
<mml:mn>2</mml:mn>
<mml:mo>&#xd7;</mml:mo>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:math>
</inline-formula>
</td>
<td align="center">Same</td>
<td align="center">
<inline-formula id="inf123">
<mml:math id="m157">
<mml:mrow>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mi>N</mml:mi>
<mml:mi>x</mml:mi>
</mml:msub>
<mml:mo>/</mml:mo>
<mml:mn>4</mml:mn>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mi>N</mml:mi>
<mml:mi>y</mml:mi>
</mml:msub>
<mml:mo>/</mml:mo>
<mml:mn>4,64</mml:mn>
</mml:mrow>
<mml:mo>)</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:math>
</inline-formula>
</td>
</tr>
<tr>
<td align="left">Encoding block</td>
<td align="char" char=".">128</td>
<td align="center">
<inline-formula id="inf124">
<mml:math id="m158">
<mml:mrow>
<mml:mn>3</mml:mn>
<mml:mo>&#xd7;</mml:mo>
<mml:mn>3</mml:mn>
</mml:mrow>
</mml:math>
</inline-formula>
</td>
<td align="center">
<inline-formula id="inf125">
<mml:math id="m159">
<mml:mrow>
<mml:mn>1</mml:mn>
<mml:mo>&#xd7;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:math>
</inline-formula>
</td>
<td align="center">Same</td>
<td align="center">
<inline-formula id="inf126">
<mml:math id="m160">
<mml:mrow>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mi>N</mml:mi>
<mml:mi>x</mml:mi>
</mml:msub>
<mml:mo>/</mml:mo>
<mml:mn>4</mml:mn>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mi>N</mml:mi>
<mml:mi>y</mml:mi>
</mml:msub>
<mml:mo>/</mml:mo>
<mml:mn>4,128</mml:mn>
</mml:mrow>
<mml:mo>)</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:math>
</inline-formula>
</td>
</tr>
<tr>
<td align="left">ResConv block</td>
<td align="char" char=".">128</td>
<td align="center">
<inline-formula id="inf127">
<mml:math id="m161">
<mml:mrow>
<mml:mn>3</mml:mn>
<mml:mo>&#xd7;</mml:mo>
<mml:mn>3</mml:mn>
</mml:mrow>
</mml:math>
</inline-formula>
</td>
<td align="center">
<inline-formula id="inf128">
<mml:math id="m162">
<mml:mrow>
<mml:mn>1</mml:mn>
<mml:mo>&#xd7;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:math>
</inline-formula>
</td>
<td align="center">Same</td>
<td align="center">
<inline-formula id="inf129">
<mml:math id="m163">
<mml:mrow>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mi>N</mml:mi>
<mml:mi>x</mml:mi>
</mml:msub>
<mml:mo>/</mml:mo>
<mml:mn>4</mml:mn>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mi>N</mml:mi>
<mml:mi>y</mml:mi>
</mml:msub>
<mml:mo>/</mml:mo>
<mml:mn>4,128</mml:mn>
</mml:mrow>
<mml:mo>)</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:math>
</inline-formula>
</td>
</tr>
<tr>
<td align="left">ResConv block</td>
<td align="char" char=".">128</td>
<td align="center">
<inline-formula id="inf130">
<mml:math id="m164">
<mml:mrow>
<mml:mn>3</mml:mn>
<mml:mo>&#xd7;</mml:mo>
<mml:mn>3</mml:mn>
</mml:mrow>
</mml:math>
</inline-formula>
</td>
<td align="center">
<inline-formula id="inf131">
<mml:math id="m165">
<mml:mrow>
<mml:mn>1</mml:mn>
<mml:mo>&#xd7;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:math>
</inline-formula>
</td>
<td align="center">Same</td>
<td align="center">
<inline-formula id="inf132">
<mml:math id="m166">
<mml:mrow>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mi>N</mml:mi>
<mml:mi>x</mml:mi>
</mml:msub>
<mml:mo>/</mml:mo>
<mml:mn>4</mml:mn>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mi>N</mml:mi>
<mml:mi>y</mml:mi>
</mml:msub>
<mml:mo>/</mml:mo>
<mml:mn>4,128</mml:mn>
</mml:mrow>
<mml:mo>)</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:math>
</inline-formula>
</td>
</tr>
<tr>
<td align="left">ResConv block</td>
<td align="char" char=".">128</td>
<td align="center">
<inline-formula id="inf133">
<mml:math id="m167">
<mml:mrow>
<mml:mn>3</mml:mn>
<mml:mo>&#xd7;</mml:mo>
<mml:mn>3</mml:mn>
</mml:mrow>
</mml:math>
</inline-formula>
</td>
<td align="center">
<inline-formula id="inf134">
<mml:math id="m168">
<mml:mrow>
<mml:mn>1</mml:mn>
<mml:mo>&#xd7;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:math>
</inline-formula>
</td>
<td align="center">Same</td>
<td align="center">
<inline-formula id="inf135">
<mml:math id="m169">
<mml:mrow>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mi>N</mml:mi>
<mml:mi>x</mml:mi>
</mml:msub>
<mml:mo>/</mml:mo>
<mml:mn>4</mml:mn>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mi>N</mml:mi>
<mml:mi>y</mml:mi>
</mml:msub>
<mml:mo>/</mml:mo>
<mml:mn>4,128</mml:mn>
</mml:mrow>
<mml:mo>)</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:math>
</inline-formula>
</td>
</tr>
<tr>
<td align="left">Dense</td>
<td align="left"/>
<td align="left"/>
<td align="left"/>
<td align="left"/>
<td align="center">
<inline-formula id="inf136">
<mml:math id="m170">
<mml:mrow>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mi>l</mml:mi>
<mml:mi>z</mml:mi>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
<mml:mo>)</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:math>
</inline-formula>
</td>
</tr>
</tbody>
</table>
</table-wrap>
<table-wrap id="T2" position="float">
<label>TABLE 2</label>
<caption>
<p>Decoder architecture.</p>
</caption>
<table>
<thead valign="top">
<tr>
<th align="left">Layer</th>
<th align="center">&#x23; Filter</th>
<th align="center">Filter size</th>
<th align="center">Stride</th>
<th align="center">Padding</th>
<th align="center">Output size</th>
</tr>
</thead>
<tbody valign="top">
<tr>
<td align="left">Input</td>
<td align="left"/>
<td align="left"/>
<td align="left"/>
<td align="left"/>
<td align="center">
<inline-formula id="inf137">
<mml:math id="m171">
<mml:mrow>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mi>l</mml:mi>
<mml:mi>z</mml:mi>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
<mml:mo>)</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:math>
</inline-formula>
</td>
</tr>
<tr>
<td align="left">Dense</td>
<td align="left"/>
<td align="left"/>
<td align="left"/>
<td align="left"/>
<td align="center">
<inline-formula id="inf138">
<mml:math id="m172">
<mml:mrow>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mi>N</mml:mi>
<mml:mi>x</mml:mi>
</mml:msub>
<mml:mo>/</mml:mo>
<mml:mn>4</mml:mn>
<mml:mo>&#xd7;</mml:mo>
<mml:msub>
<mml:mi>N</mml:mi>
<mml:mi>y</mml:mi>
</mml:msub>
<mml:mo>/</mml:mo>
<mml:mn>4</mml:mn>
<mml:mo>&#xd7;</mml:mo>
<mml:mn>128,1</mml:mn>
</mml:mrow>
<mml:mo>)</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:math>
</inline-formula>
</td>
</tr>
<tr>
<td align="left">ResConv block</td>
<td align="char" char=".">128</td>
<td align="center">
<inline-formula id="inf139">
<mml:math id="m173">
<mml:mrow>
<mml:mn>3</mml:mn>
<mml:mo>&#xd7;</mml:mo>
<mml:mn>3</mml:mn>
</mml:mrow>
</mml:math>
</inline-formula>
</td>
<td align="center">
<inline-formula id="inf140">
<mml:math id="m174">
<mml:mrow>
<mml:mn>1</mml:mn>
<mml:mo>&#xd7;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:math>
</inline-formula>
</td>
<td align="center">Same</td>
<td align="center">
<inline-formula id="inf141">
<mml:math id="m175">
<mml:mrow>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mi>N</mml:mi>
<mml:mi>x</mml:mi>
</mml:msub>
<mml:mo>/</mml:mo>
<mml:mn>4</mml:mn>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mi>N</mml:mi>
<mml:mi>y</mml:mi>
</mml:msub>
<mml:mo>/</mml:mo>
<mml:mn>4,128</mml:mn>
</mml:mrow>
<mml:mo>)</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:math>
</inline-formula>
</td>
</tr>
<tr>
<td align="left">ResConv block</td>
<td align="char" char=".">128</td>
<td align="center">
<inline-formula id="inf142">
<mml:math id="m176">
<mml:mrow>
<mml:mn>3</mml:mn>
<mml:mo>&#xd7;</mml:mo>
<mml:mn>3</mml:mn>
</mml:mrow>
</mml:math>
</inline-formula>
</td>
<td align="center">
<inline-formula id="inf143">
<mml:math id="m177">
<mml:mrow>
<mml:mn>1</mml:mn>
<mml:mo>&#xd7;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:math>
</inline-formula>
</td>
<td align="center">Same</td>
<td align="center">
<inline-formula id="inf144">
<mml:math id="m178">
<mml:mrow>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mi>N</mml:mi>
<mml:mi>x</mml:mi>
</mml:msub>
<mml:mo>/</mml:mo>
<mml:mn>4</mml:mn>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mi>N</mml:mi>
<mml:mi>y</mml:mi>
</mml:msub>
<mml:mo>/</mml:mo>
<mml:mn>4,128</mml:mn>
</mml:mrow>
<mml:mo>)</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:math>
</inline-formula>
</td>
</tr>
<tr>
<td align="left">ResConv block</td>
<td align="char" char=".">128</td>
<td align="center">
<inline-formula id="inf145">
<mml:math id="m179">
<mml:mrow>
<mml:mn>3</mml:mn>
<mml:mo>&#xd7;</mml:mo>
<mml:mn>3</mml:mn>
</mml:mrow>
</mml:math>
</inline-formula>
</td>
<td align="center">
<inline-formula id="inf146">
<mml:math id="m180">
<mml:mrow>
<mml:mn>1</mml:mn>
<mml:mo>&#xd7;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:math>
</inline-formula>
</td>
<td align="center">Same</td>
<td align="center">
<inline-formula id="inf147">
<mml:math id="m181">
<mml:mrow>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mi>N</mml:mi>
<mml:mi>x</mml:mi>
</mml:msub>
<mml:mo>/</mml:mo>
<mml:mn>4</mml:mn>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mi>N</mml:mi>
<mml:mi>y</mml:mi>
</mml:msub>
<mml:mo>/</mml:mo>
<mml:mn>4,128</mml:mn>
</mml:mrow>
<mml:mo>)</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:math>
</inline-formula>
</td>
</tr>
<tr>
<td align="left">Decoding block</td>
<td align="char" char=".">128</td>
<td align="center">
<inline-formula id="inf148">
<mml:math id="m182">
<mml:mrow>
<mml:mn>3</mml:mn>
<mml:mo>&#xd7;</mml:mo>
<mml:mn>3</mml:mn>
</mml:mrow>
</mml:math>
</inline-formula>
</td>
<td align="center">
<inline-formula id="inf149">
<mml:math id="m183">
<mml:mrow>
<mml:mn>1</mml:mn>
<mml:mo>&#xd7;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:math>
</inline-formula>
</td>
<td align="center">Same</td>
<td align="center">
<inline-formula id="inf150">
<mml:math id="m184">
<mml:mrow>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mi>N</mml:mi>
<mml:mi>x</mml:mi>
</mml:msub>
<mml:mo>/</mml:mo>
<mml:mn>4</mml:mn>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mi>N</mml:mi>
<mml:mi>y</mml:mi>
</mml:msub>
<mml:mo>/</mml:mo>
<mml:mn>4,128</mml:mn>
</mml:mrow>
<mml:mo>)</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:math>
</inline-formula>
</td>
</tr>
<tr>
<td align="left">Decoding block</td>
<td align="char" char=".">64</td>
<td align="center">
<inline-formula id="inf151">
<mml:math id="m185">
<mml:mrow>
<mml:mn>3</mml:mn>
<mml:mo>&#xd7;</mml:mo>
<mml:mn>3</mml:mn>
</mml:mrow>
</mml:math>
</inline-formula>
</td>
<td align="center">
<inline-formula id="inf152">
<mml:math id="m186">
<mml:mrow>
<mml:mn>2</mml:mn>
<mml:mo>&#xd7;</mml:mo>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:math>
</inline-formula>
</td>
<td align="center">Same</td>
<td align="center">
<inline-formula id="inf153">
<mml:math id="m187">
<mml:mrow>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mi>N</mml:mi>
<mml:mi>x</mml:mi>
</mml:msub>
<mml:mo>/</mml:mo>
<mml:mn>2</mml:mn>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mi>N</mml:mi>
<mml:mi>y</mml:mi>
</mml:msub>
<mml:mo>/</mml:mo>
<mml:mn>2,64</mml:mn>
</mml:mrow>
<mml:mo>)</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:math>
</inline-formula>
</td>
</tr>
<tr>
<td align="left">Decoding block</td>
<td align="char" char=".">32</td>
<td align="center">
<inline-formula id="inf154">
<mml:math id="m188">
<mml:mrow>
<mml:mn>3</mml:mn>
<mml:mo>&#xd7;</mml:mo>
<mml:mn>3</mml:mn>
</mml:mrow>
</mml:math>
</inline-formula>
</td>
<td align="center">
<inline-formula id="inf155">
<mml:math id="m189">
<mml:mrow>
<mml:mn>1</mml:mn>
<mml:mo>&#xd7;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:math>
</inline-formula>
</td>
<td align="center">Same</td>
<td align="center">
<inline-formula id="inf156">
<mml:math id="m190">
<mml:mrow>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mi>N</mml:mi>
<mml:mi>x</mml:mi>
</mml:msub>
<mml:mo>/</mml:mo>
<mml:mn>2</mml:mn>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mi>N</mml:mi>
<mml:mi>y</mml:mi>
</mml:msub>
<mml:mo>/</mml:mo>
<mml:mn>2,32</mml:mn>
</mml:mrow>
<mml:mo>)</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:math>
</inline-formula>
</td>
</tr>
<tr>
<td align="left">Decoding block</td>
<td align="char" char=".">16</td>
<td align="center">
<inline-formula id="inf157">
<mml:math id="m191">
<mml:mrow>
<mml:mn>3</mml:mn>
<mml:mo>&#xd7;</mml:mo>
<mml:mn>3</mml:mn>
</mml:mrow>
</mml:math>
</inline-formula>
</td>
<td align="center">
<inline-formula id="inf158">
<mml:math id="m192">
<mml:mrow>
<mml:mn>2</mml:mn>
<mml:mo>&#xd7;</mml:mo>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:math>
</inline-formula>
</td>
<td align="center">Same</td>
<td align="center">
<inline-formula id="inf159">
<mml:math id="m193">
<mml:mrow>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mi>N</mml:mi>
<mml:mi>x</mml:mi>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mi>N</mml:mi>
<mml:mi>y</mml:mi>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:mn>16</mml:mn>
</mml:mrow>
<mml:mo>)</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:math>
</inline-formula>
</td>
</tr>
<tr>
<td align="left">Conv2D</td>
<td align="char" char=".">2</td>
<td align="center">
<inline-formula id="inf160">
<mml:math id="m194">
<mml:mrow>
<mml:mn>3</mml:mn>
<mml:mo>&#xd7;</mml:mo>
<mml:mn>3</mml:mn>
</mml:mrow>
</mml:math>
</inline-formula>
</td>
<td align="center">
<inline-formula id="inf161">
<mml:math id="m195">
<mml:mrow>
<mml:mn>1</mml:mn>
<mml:mo>&#xd7;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:math>
</inline-formula>
</td>
<td align="center">Same</td>
<td align="center">
<inline-formula id="inf162">
<mml:math id="m196">
<mml:mrow>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mi>N</mml:mi>
<mml:mi>x</mml:mi>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mi>N</mml:mi>
<mml:mi>y</mml:mi>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:mn>2</mml:mn>
</mml:mrow>
<mml:mo>)</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:math>
</inline-formula>
</td>
</tr>
</tbody>
</table>
</table-wrap>
<p>The transformation block has dimension of <inline-formula id="inf163">
<mml:math id="m197">
<mml:mrow>
<mml:msub>
<mml:mi>n</mml:mi>
<mml:mrow>
<mml:mtext>Trans</mml:mtext>
</mml:mrow>
</mml:msub>
<mml:mo>&#x3d;</mml:mo>
<mml:mn>200</mml:mn>
</mml:mrow>
</mml:math>
</inline-formula> for the transition network, and the last dense layers before the matrices calculations have dimensions of <inline-formula id="inf164">
<mml:math id="m198">
<mml:mrow>
<mml:msubsup>
<mml:mi>l</mml:mi>
<mml:mi>z</mml:mi>
<mml:mn>2</mml:mn>
</mml:msubsup>
</mml:mrow>
</mml:math>
</inline-formula> for <inline-formula id="inf165">
<mml:math id="m199">
<mml:mrow>
<mml:msubsup>
<mml:mi>A</mml:mi>
<mml:mi>r</mml:mi>
<mml:mi>t</mml:mi>
</mml:msubsup>
</mml:mrow>
</mml:math>
</inline-formula> and <inline-formula id="inf166">
<mml:math id="m200">
<mml:mrow>
<mml:msub>
<mml:mi>l</mml:mi>
<mml:mi>z</mml:mi>
</mml:msub>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mi>n</mml:mi>
<mml:mi>i</mml:mi>
</mml:msub>
<mml:mo>&#x2b;</mml:mo>
<mml:msub>
<mml:mi>n</mml:mi>
<mml:mi>p</mml:mi>
</mml:msub>
</mml:mrow>
<mml:mo>)</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:math>
</inline-formula> for <inline-formula id="inf167">
<mml:math id="m201">
<mml:mrow>
<mml:msubsup>
<mml:mi>B</mml:mi>
<mml:mi>r</mml:mi>
<mml:mi>t</mml:mi>
</mml:msubsup>
</mml:mrow>
</mml:math>
</inline-formula>, where <inline-formula id="inf168">
<mml:math id="m202">
<mml:mrow>
<mml:msub>
<mml:mi>n</mml:mi>
<mml:mi>i</mml:mi>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula> and <inline-formula id="inf169">
<mml:math id="m203">
<mml:mrow>
<mml:msub>
<mml:mi>n</mml:mi>
<mml:mi>p</mml:mi>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula> are, respectively, the number of injector and producer wells. The output of these dense layers is then reshaped to match each matrix dimension. For the transition output network we are using <inline-formula id="inf170">
<mml:math id="m204">
<mml:mrow>
<mml:msub>
<mml:mi>n</mml:mi>
<mml:mrow>
<mml:mtext>Trans</mml:mtext>
<mml:mo>_</mml:mo>
<mml:mtext>WD</mml:mtext>
</mml:mrow>
</mml:msub>
<mml:mo>&#x3d;</mml:mo>
<mml:mn>20</mml:mn>
</mml:mrow>
</mml:math>
</inline-formula> for the transformation block dimension, and the last dense layers have dimensions of <inline-formula id="inf171">
<mml:math id="m205">
<mml:mrow>
<mml:msub>
<mml:mi>l</mml:mi>
<mml:mi>z</mml:mi>
</mml:msub>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mi>n</mml:mi>
<mml:mi>i</mml:mi>
</mml:msub>
<mml:mo>&#x2b;</mml:mo>
<mml:mn>2</mml:mn>
<mml:msub>
<mml:mi>n</mml:mi>
<mml:mi>p</mml:mi>
</mml:msub>
</mml:mrow>
<mml:mo>)</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:math>
</inline-formula> for <inline-formula id="inf172">
<mml:math id="m206">
<mml:mrow>
<mml:msubsup>
<mml:mi>C</mml:mi>
<mml:mi>r</mml:mi>
<mml:mi>t</mml:mi>
</mml:msubsup>
</mml:mrow>
</mml:math>
</inline-formula> and <inline-formula id="inf173">
<mml:math id="m207">
<mml:mrow>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mi>n</mml:mi>
<mml:mi>i</mml:mi>
</mml:msub>
<mml:mo>&#x2b;</mml:mo>
<mml:msub>
<mml:mi>n</mml:mi>
<mml:mi>p</mml:mi>
</mml:msub>
</mml:mrow>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mi>n</mml:mi>
<mml:mi>i</mml:mi>
</mml:msub>
<mml:mo>&#x2b;</mml:mo>
<mml:mn>2</mml:mn>
<mml:msub>
<mml:mi>n</mml:mi>
<mml:mi>p</mml:mi>
</mml:msub>
</mml:mrow>
<mml:mo>)</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:math>
</inline-formula> for&#x20;<inline-formula id="inf174">
<mml:math id="m208">
<mml:mrow>
<mml:msubsup>
<mml:mi>D</mml:mi>
<mml:mi>r</mml:mi>
<mml:mi>t</mml:mi>
</mml:msubsup>
</mml:mrow>
</mml:math>
</inline-formula>.</p>
<p>We used the Adam optimization algorithm with a learning rate of <inline-formula id="inf175">
<mml:math id="m209">
<mml:mrow>
<mml:mn>1</mml:mn>
<mml:mo>&#xd7;</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mn>10</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2212;</mml:mo>
<mml:mn>4</mml:mn>
</mml:mrow>
</mml:msup>
</mml:mrow>
</mml:math>
</inline-formula> during the training procedure with a batch size of 4. The sample is randomly selected to compose the training batch. We run the training procedure for 100 epochs.</p>
<p>We initially trained our models on CPUs. However, we change to GPUs since the speed up is expressive. We provide in <xref ref-type="table" rid="T3">Table&#x20;3</xref> a non-rigorous estimation of the training time, where it is possible to see the differences between training on CPU and GPU. More details on the GPUs NVIDIA Tesla used can be found on <ext-link ext-link-type="uri" xlink:href="www.hprc.tamu.edu">www.hprc.tamu.edu</ext-link>.</p>
<table-wrap id="T3" position="float">
<label>TABLE 3</label>
<caption>
<p>Proposition 3 training time comparison for different hardware (CPUs and GPUs).</p>
</caption>
<table>
<thead valign="top">
<tr>
<th align="left">Processor</th>
<th align="center">&#x23; Of cores</th>
<th align="center">Memory (GB)</th>
<th align="center">100 epochs (min)</th>
</tr>
</thead>
<tbody valign="top">
<tr>
<td align="left">1 CPU Intel Xeon CPU E4-1660 v3 @ 3.00&#xa0;GHz</td>
<td align="center">8</td>
<td align="char" char=".">64</td>
<td align="char" char=".">448</td>
</tr>
<tr>
<td align="left">1 GPU NVIDIA GeForce GTX 1050</td>
<td align="center">640 Cuda</td>
<td align="char" char=".">2</td>
<td align="char" char=".">238</td>
</tr>
<tr>
<td align="left">2 GPUs NVIDIA Tesla K80 (TAMU HPRC Terra)</td>
<td align="center">4,992 Cuda</td>
<td align="char" char=".">24</td>
<td align="char" char=".">163</td>
</tr>
<tr>
<td align="left">2 GPUs NVIDIA V100 (TAMU HPRC Ada)</td>
<td align="center">10,240 Cuda</td>
<td align="char" char=".">32</td>
<td align="char" char=".">46</td>
</tr>
<tr>
<td align="left">2 GPUs RTX 6000 (TAMU HPRC Grace)</td>
<td align="center">9,216 Cuda</td>
<td align="char" char=".">24</td>
<td align="char" char=".">54</td>
</tr>
<tr>
<td align="left">4 GPUs NVIDIA T4 (TAMU HPRC Grace)</td>
<td align="center">10,240 Cuda</td>
<td align="char" char=".">16</td>
<td align="char" char=".">65</td>
</tr>
</tbody>
</table>
</table-wrap>
<sec id="s2-7-1">
<title>2.7.1&#x20;Non-determinism</title>
<p>During the initial implementation of the methods proposed here, we noticed that if we repeat the same training procedure twice in the same machine with the same input and parameters, we will end up with different networks, and this will lead to different predictions and different error estimations. Although this can be understood as a native characteristic of the neural network training procedure, this can increase the complexity of comparing different methods since each method&#x2019;s results can change based on an uncontrollable variable.</p>
<p>Some of the non-determinism sources are layers weight initialization, kernel weights initialization, and the order of models to be part of the training batch. When training on GPU, some other sources can happen when using convolutional, pooling, and upsampling layers. All these sources are discussed in [<xref ref-type="bibr" rid="B29">29</xref>], which provides a solution for most of these sources of non-determinism. Here we used this method provided, and we can reproduce the training results for the same input and parameters.</p>
</sec>
<sec id="s2-7-2">
<title>2.7.2 Normalization</title>
<p>We used normalization to treat our input data from the state and the well data and also during the loss functions calculations. For each quantity, normalization parameters (min and max) are defined and used on this quantity over the training and prediction procedures. The normalization used here is:<disp-formula id="e29">
<mml:math id="m210">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="script">Q</mml:mi>
<mml:mrow>
<mml:mtext>NORM</mml:mtext>
</mml:mrow>
</mml:msub>
<mml:mo>&#x3d;</mml:mo>
<mml:mfrac>
<mml:mrow>
<mml:mi mathvariant="script">Q</mml:mi>
<mml:mo>&#x2212;</mml:mo>
<mml:msub>
<mml:mi mathvariant="script">Q</mml:mi>
<mml:mrow>
<mml:mtext>min</mml:mtext>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="script">Q</mml:mi>
<mml:mrow>
<mml:mtext>max</mml:mtext>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2212;</mml:mo>
<mml:msub>
<mml:mi mathvariant="script">Q</mml:mi>
<mml:mrow>
<mml:mtext>min</mml:mtext>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfrac>
<mml:mo>,</mml:mo>
</mml:mrow>
</mml:math>
<label>(29)</label>
</disp-formula>where <inline-formula id="inf176">
<mml:math id="m211">
<mml:mi mathvariant="script">Q</mml:mi>
</mml:math>
</inline-formula> is the quantity to be normalized.</p>
<p>The minimum and maximum values for each quantity were selected from the input state (quantities: pressures and saturations), from the well data (quantities: well bottom hole pressure, the oil flow rate, and the water flow rate), and from the well controls (quantities: the water injection rate and well bottom hole pressure).</p>
<p>We also normalized values for the loss functions calculation. When applying <xref ref-type="disp-formula" rid="e18">Eqs 18</xref> and <xref ref-type="disp-formula" rid="e16">16</xref>, we use normalized values of state pressures and saturations. The same is valid for <xref ref-type="disp-formula" rid="e24">Eq. 24</xref> where we used normalized values for well bottom hole pressure, the oil rate, and the water&#x20;rate.</p>
<p>Here, we introduce the use of a normalized flux loss function. We first calculate the minimum and maximum flux from the input state and use them to normalize the flux loss function. This is valid for the single-phase loss function (<xref ref-type="disp-formula" rid="e21">Eqs. 21</xref> and <xref ref-type="disp-formula" rid="e22">22</xref>) and the two-phase (<xref ref-type="disp-formula" rid="e26">Eqs. 26</xref> and <xref ref-type="disp-formula" rid="e27">27</xref>), where we calculate maximum and minimum values for oil and water flux. By doing this, we expect not to need to use weight terms on these loss functions, like the ones used in [<xref ref-type="bibr" rid="B2">2</xref>]. This can potentially reduce the number of hyperparameters to be chosen on the training procedures.</p>
</sec>
</sec>
</sec>
<sec id="s3">
<title>3 Data Generation and Assessment</title>
<p>In this section, the simulation model used to generate state and well data is described, followed by the details on the training and validation data sets&#x2019; generation. We then show how we evaluate each trained model&#x2019;s quality using the validation set by calculating the relative&#x20;error.</p>
<sec id="s3-1">
<title>3.1 Numerical Simulation</title>
<p>We utilized a commercial numerical reservoir simulator (IMEX from [<xref ref-type="bibr" rid="B30">30</xref>]) to generate the data employed on the training and validation steps of our propositions. However, any commercial off-the-shelf reservoir simulator can be used to train our model. A Cartesian grid with <inline-formula id="inf177">
<mml:math id="m212">
<mml:mrow>
<mml:mn>60</mml:mn>
<mml:mo>&#xd7;</mml:mo>
<mml:mn>60</mml:mn>
<mml:mo>&#xd7;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:math>
</inline-formula> gridblocks and an oil&#x2013;water fluid model were used. A fixed permeability field was generated and is presented in <xref ref-type="fig" rid="F11">Figure&#x20;11</xref> (left). The relative permeability curves used in the simulation model are shown in <xref ref-type="fig" rid="F11">Figure&#x20;11</xref> (right).</p>
<fig id="F11" position="float">
<label>FIGURE 11</label>
<caption>
<p>Permeability map (mD) <bold>(left)</bold> and Relative permeability curves <bold>(right)</bold>.</p>
</caption>
<graphic xlink:href="fams-07-651178-g011.tif"/>
</fig>
<p>The model has five producers and four injector wells. The producer wells are controlled by bottom hole pressure (BHP), and the injectors are controlled by the water injection rate. This model runs through 2,000 days, changing controls every 100 days. Some properties used in the simulation model are presented in <xref ref-type="table" rid="T4">Table&#x20;4</xref>.</p>
<table-wrap id="T4" position="float">
<label>TABLE 4</label>
<caption>
<p>Reservoir simulation model properties.</p>
</caption>
<table>
<thead valign="top">
<tr>
<th align="left">Property</th>
<th align="center">Value</th>
<th align="center">Unit</th>
</tr>
</thead>
<tbody valign="top">
<tr>
<td align="left">Gridblock dimension</td>
<td align="center">
<inline-formula id="inf178">
<mml:math id="m213">
<mml:mrow>
<mml:mn>50</mml:mn>
<mml:mo>&#xd7;</mml:mo>
<mml:mn>50</mml:mn>
<mml:mo>&#xd7;</mml:mo>
<mml:mn>10</mml:mn>
</mml:mrow>
</mml:math>
</inline-formula>
</td>
<td align="center">M</td>
</tr>
<tr>
<td align="left">Rock Compressibility</td>
<td align="center">
<inline-formula id="inf179">
<mml:math id="m214">
<mml:mrow>
<mml:mn>1</mml:mn>
<mml:mi>E</mml:mi>
<mml:mo>&#x2212;</mml:mo>
<mml:mn>6</mml:mn>
</mml:mrow>
</mml:math>
</inline-formula>
</td>
<td align="center">(kgf/cm<sup>2</sup>)</td>
</tr>
<tr>
<td align="left">Oil Formation Volume Factor</td>
<td align="center">1.0</td>
<td align="center">res-m<sup>3</sup>/std-m<sup>3</sup>
</td>
</tr>
<tr>
<td align="left">Water Formation Volume Factor</td>
<td align="center">1.0</td>
<td align="center">res-m<sup>3</sup>/std-m<sup>3</sup>
</td>
</tr>
<tr>
<td align="left">Oil Viscosity</td>
<td align="center">0.91</td>
<td align="center">cP</td>
</tr>
<tr>
<td align="left">Water Viscosity</td>
<td align="center">0.31</td>
<td align="center">cP</td>
</tr>
<tr>
<td align="left">Oil Density</td>
<td align="center">800</td>
<td align="center">kg/m<sup>3</sup>
</td>
</tr>
<tr>
<td align="left">Water Density</td>
<td align="center">1,000</td>
<td align="center">kg/m<sup>3</sup>
</td>
</tr>
<tr>
<td align="left">Property</td>
<td align="center">Value</td>
<td align="center">Unit</td>
</tr>
<tr>
<td align="left">Porosity</td>
<td align="center">0.2</td>
<td align="left"/>
</tr>
<tr>
<td align="left">Initial Pressure</td>
<td align="center">325</td>
<td align="center">kgf/cm<sup>2</sup>
</td>
</tr>
<tr>
<td align="left">Initial Water Saturation</td>
<td align="center">0.1</td>
<td align="left"/>
</tr>
<tr>
<td align="left">Connate Water Saturation (<inline-formula id="inf180">
<mml:math id="m215">
<mml:mrow>
<mml:msub>
<mml:mi>S</mml:mi>
<mml:mrow>
<mml:mi>w</mml:mi>
<mml:mi>c</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula>)</td>
<td align="center">0.1</td>
<td align="left"/>
</tr>
<tr>
<td align="left">Residual Oil Saturation (<inline-formula id="inf181">
<mml:math id="m216">
<mml:mrow>
<mml:msub>
<mml:mi>S</mml:mi>
<mml:mrow>
<mml:mi>o</mml:mi>
<mml:mi>r</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula>)</td>
<td align="center">0.3</td>
<td align="left"/>
</tr>
<tr>
<td align="left">
<inline-formula id="inf182">
<mml:math id="m217">
<mml:mrow>
<mml:msub>
<mml:mi>k</mml:mi>
<mml:mrow>
<mml:mi>r</mml:mi>
<mml:mi>w</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:mn>1</mml:mn>
<mml:mo>&#x2212;</mml:mo>
<mml:msub>
<mml:mi>S</mml:mi>
<mml:mrow>
<mml:mi>o</mml:mi>
<mml:mi>r</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo>)</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:math>
</inline-formula>
</td>
<td align="center">0.7</td>
<td align="left"/>
</tr>
<tr>
<td align="left">
<inline-formula id="inf183">
<mml:math id="m218">
<mml:mrow>
<mml:msub>
<mml:mi>k</mml:mi>
<mml:mrow>
<mml:mi>r</mml:mi>
<mml:mi>o</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mi>S</mml:mi>
<mml:mrow>
<mml:mi>w</mml:mi>
<mml:mi>c</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo>)</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:math>
</inline-formula>
</td>
<td align="center">1.0</td>
<td align="left"/>
</tr>
</tbody>
</table>
</table-wrap>
</sec>
<sec id="s3-2">
<title>3.2 Data Sets</title>
<p>The objective of constructing a fast proxy model is to eventually connect it to control optimization frameworks whereby multiple calls of the surrogate model are used to determine a control set that optimizes an objective function (e.g., Net Present Value and sweep efficiency). In this case, we expect that our proxy might have the competence to predict well data under different sets of controls, which is usually unknown before the optimization is complete. To mimic the behavior of a varying input setting, we will use 300 simulations to train the proposed models, and each simulation will run through 20&#x20;time periods.</p>
<p>For the producers, the bottom-hole pressure was sampled over a uniform distribution <inline-formula id="inf184">
<mml:math id="m219">
<mml:mrow>
<mml:mi mathvariant="script">U</mml:mi>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:mn>260,275</mml:mn>
</mml:mrow>
<mml:mo>)</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:math>
</inline-formula> kgf/cm<sup>2</sup>. To avoid having the same volume of water injected in all control sets, we used a different approach to create the injectors controls. For each control set <italic>i</italic>, we&#x20;sampled a base injection rate <inline-formula id="inf185">
<mml:math id="m220">
<mml:mrow>
<mml:msub>
<mml:mi>q</mml:mi>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mi>n</mml:mi>
<mml:mi>j</mml:mi>
<mml:mo>_</mml:mo>
<mml:mi>b</mml:mi>
<mml:mi>a</mml:mi>
<mml:mi>s</mml:mi>
<mml:mi>e</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>i</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x223c;</mml:mo>
<mml:mi mathvariant="script">U</mml:mi>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:mn>300,950</mml:mn>
</mml:mrow>
<mml:mo>)</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:math>
</inline-formula> m<sup>3</sup>/day, and&#x20;for each time period <italic>t</italic>, we sampled a perturbation <inline-formula id="inf186">
<mml:math id="m221">
<mml:mrow>
<mml:msub>
<mml:mi>q</mml:mi>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mi>n</mml:mi>
<mml:mi>j</mml:mi>
<mml:mo>_</mml:mo>
<mml:mi>p</mml:mi>
<mml:mi>e</mml:mi>
<mml:mi>r</mml:mi>
<mml:mi>t</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>i</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x223c;</mml:mo>
<mml:mi mathvariant="script">U</mml:mi>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:mo>&#x2212;</mml:mo>
<mml:mn>80,90</mml:mn>
</mml:mrow>
<mml:mo>)</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:math>
</inline-formula> m<sup>3</sup>/day. The injection flow rate is then calculated as <inline-formula id="inf187">
<mml:math id="m222">
<mml:mrow>
<mml:msub>
<mml:mi>q</mml:mi>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mi>n</mml:mi>
<mml:mi>j</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>t</mml:mi>
</mml:mrow>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:mo>&#x3d;</mml:mo>
<mml:msub>
<mml:mi>q</mml:mi>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mi>n</mml:mi>
<mml:mi>j</mml:mi>
<mml:mo>_</mml:mo>
<mml:mi>b</mml:mi>
<mml:mi>a</mml:mi>
<mml:mi>s</mml:mi>
<mml:mi>e</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>i</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2b;</mml:mo>
<mml:msubsup>
<mml:mi>q</mml:mi>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mi>n</mml:mi>
<mml:mi>j</mml:mi>
<mml:mo>_</mml:mo>
<mml:mi>p</mml:mi>
<mml:mi>e</mml:mi>
<mml:mi>r</mml:mi>
<mml:mi>t</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>i</mml:mi>
</mml:mrow>
<mml:mi>t</mml:mi>
</mml:msubsup>
</mml:mrow>
</mml:math>
</inline-formula>.</p>
<p>In <xref ref-type="fig" rid="F12">Figure&#x20;12</xref> we present an example of the injectors controls where readers can confirm the injection rate variability. The variability in the producer&#x2019;s controls can be observed in <xref ref-type="fig" rid="F13">Figure&#x20;13</xref>.</p>
<fig id="F12" position="float">
<label>FIGURE 12</label>
<caption>
<p>Injection water flowrate controls examples for wells I2 (first row) and I4 (second row) where each column represents a control&#x20;set.</p>
</caption>
<graphic xlink:href="fams-07-651178-g012.tif"/>
</fig>
<fig id="F13" position="float">
<label>FIGURE 13</label>
<caption>
<p>Producers BHP controls examples for wells P1 (first row) and P5 (second row) where each column represents a control&#x20;set.</p>
</caption>
<graphic xlink:href="fams-07-651178-g013.tif"/>
</fig>
<p>Using each one of the 300 control sets generated, we run the reservoir simulator and store the state (pressure and water saturation) at each one of the 20&#x20;time periods. The training set will be composed by 6,000 samples, each one containing:<list list-type="simple">
<list-item>
<p>&#x2022; <inline-formula id="inf188">
<mml:math id="m223">
<mml:mrow>
<mml:msup>
<mml:mi>x</mml:mi>
<mml:mi>t</mml:mi>
</mml:msup>
<mml:mo>&#x2192;</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula> state on timestep&#x20;<italic>t</italic>
</p>
</list-item>
<list-item>
<p>&#x2022; <inline-formula id="inf189">
<mml:math id="m224">
<mml:mrow>
<mml:msup>
<mml:mi>x</mml:mi>
<mml:mrow>
<mml:mi>t</mml:mi>
<mml:mo>&#x2b;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msup>
<mml:mo>&#x2192;</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula> state on timestep <inline-formula id="inf190">
<mml:math id="m225">
<mml:mrow>
<mml:mi>t</mml:mi>
<mml:mo>&#x2b;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:math>
</inline-formula>
</p>
</list-item>
<list-item>
<p>&#x2022; <inline-formula id="inf191">
<mml:math id="m226">
<mml:mrow>
<mml:msup>
<mml:mi>u</mml:mi>
<mml:mi>t</mml:mi>
</mml:msup>
<mml:mo>&#x2192;</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula> controls on timestep&#x20;<italic>t</italic>
</p>
</list-item>
<list-item>
<p>&#x2022; <inline-formula id="inf192">
<mml:math id="m227">
<mml:mrow>
<mml:mtext>&#x394;</mml:mtext>
<mml:msup>
<mml:mi>t</mml:mi>
<mml:mi>t</mml:mi>
</mml:msup>
<mml:mo>&#x2192;</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula> duration of timestep&#x20;<italic>t</italic>
</p>
</list-item>
<list-item>
<p>&#x2022; <inline-formula id="inf193">
<mml:math id="m228">
<mml:mrow>
<mml:msup>
<mml:mi>y</mml:mi>
<mml:mrow>
<mml:mi>t</mml:mi>
<mml:mo>&#x2b;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msup>
<mml:mo>&#x2192;</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula> well data on timestep <inline-formula id="inf194">
<mml:math id="m229">
<mml:mrow>
<mml:mi>t</mml:mi>
<mml:mo>&#x2b;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:math>
</inline-formula>
</p>
</list-item>
</list>
</p>
<p>In the case presented here, <inline-formula id="inf195">
<mml:math id="m230">
<mml:mrow>
<mml:mi>t</mml:mi>
<mml:mo>&#x3d;</mml:mo>
<mml:mn>0,1</mml:mn>
<mml:mo>,</mml:mo>
<mml:mo>&#x2026;</mml:mo>
<mml:mo>,</mml:mo>
<mml:mn>19</mml:mn>
</mml:mrow>
</mml:math>
</inline-formula>, where <inline-formula id="inf196">
<mml:math id="m231">
<mml:mrow>
<mml:mi>t</mml:mi>
<mml:mo>&#x3d;</mml:mo>
<mml:mn>0</mml:mn>
</mml:mrow>
</mml:math>
</inline-formula> represents the initial state that also needs to be stored as the first snapshot of the state (<inline-formula id="inf197">
<mml:math id="m232">
<mml:mrow>
<mml:msup>
<mml:mi>x</mml:mi>
<mml:mn>0</mml:mn>
</mml:msup>
</mml:mrow>
</mml:math>
</inline-formula>). The validation set contains 100 control sets that will create 2,000 samples. The validation set generation follows a similar approach but with a different random number generator seed. This is to enforce that training and validation are performed using different control inputs.</p>
</sec>
<sec id="s3-3">
<title>3.3 Model Evaluation</title>
<p>Each proposition (propositions 1 to 3, as constructed before) was trained as described in <xref ref-type="sec" rid="s2-7">Section 2.7</xref> using the training data set. We then used the models (networks) trained for each proposition on the prediction architecture, as shown in <xref ref-type="fig" rid="F6">Figures 6</xref>, <xref ref-type="fig" rid="F7">7</xref>, and evaluated each model&#x2019;s quality on the validation set. We also used this validation set to choose the better hyperparameters for each model. This is a tedious but necessary step in looking for a low prediction error&#x20;model.</p>
<sec id="s3-3-1">
<title>3.3.1 Error Definition</title>
<p>In this section, we present the definitions of relative error used to evaluate our model&#x2019;s accuracy. Most of these definitions are similar to the ones defined in [<xref ref-type="bibr" rid="B2">2</xref>]. For a single producer wells (<italic>p</italic>), the relative error in the water and oil rates is defined as <inline-formula id="inf198">
<mml:math id="m233">
<mml:mrow>
<mml:msubsup>
<mml:mi>e</mml:mi>
<mml:mi>w</mml:mi>
<mml:mi>p</mml:mi>
</mml:msubsup>
</mml:mrow>
</mml:math>
</inline-formula> and <inline-formula id="inf199">
<mml:math id="m234">
<mml:mrow>
<mml:msubsup>
<mml:mi>e</mml:mi>
<mml:mi>o</mml:mi>
<mml:mi>p</mml:mi>
</mml:msubsup>
</mml:mrow>
</mml:math>
</inline-formula> that in a general way can be written as:<disp-formula id="equ7">
<mml:math id="m235">
<mml:mrow>
<mml:msubsup>
<mml:mi>e</mml:mi>
<mml:mi>j</mml:mi>
<mml:mi>p</mml:mi>
</mml:msubsup>
<mml:mo>&#x3d;</mml:mo>
<mml:mfrac>
<mml:mrow>
<mml:mstyle displaystyle="true">
<mml:mrow>
<mml:msubsup>
<mml:mo>&#x222b;</mml:mo>
<mml:mn>0</mml:mn>
<mml:mi>T</mml:mi>
</mml:msubsup>
<mml:mrow>
<mml:mrow>
<mml:mo>&#x7c;</mml:mo>
<mml:mrow>
<mml:msup>
<mml:mrow>
<mml:mover accent="true">
<mml:mi>q</mml:mi>
<mml:mo>&#x5e;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mi>j</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>p</mml:mi>
</mml:mrow>
</mml:msup>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:mo>&#x2212;</mml:mo>
<mml:msubsup>
<mml:mi>q</mml:mi>
<mml:mrow>
<mml:mtext>HFS</mml:mtext>
</mml:mrow>
<mml:mrow>
<mml:mi>j</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>p</mml:mi>
</mml:mrow>
</mml:msubsup>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
</mml:mrow>
<mml:mo>&#x7c;</mml:mo>
</mml:mrow>
<mml:mi>d</mml:mi>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:mrow>
</mml:mstyle>
</mml:mrow>
<mml:mrow>
<mml:mstyle displaystyle="true">
<mml:mrow>
<mml:msubsup>
<mml:mo>&#x222b;</mml:mo>
<mml:mn>0</mml:mn>
<mml:mi>T</mml:mi>
</mml:msubsup>
<mml:mrow>
<mml:mrow>
<mml:mo>&#x7c;</mml:mo>
<mml:mrow>
<mml:msubsup>
<mml:mi>q</mml:mi>
<mml:mrow>
<mml:mtext>HFS</mml:mtext>
</mml:mrow>
<mml:mrow>
<mml:mi>j</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>p</mml:mi>
</mml:mrow>
</mml:msubsup>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
</mml:mrow>
<mml:mo>&#x7c;</mml:mo>
</mml:mrow>
<mml:mi>d</mml:mi>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:mrow>
</mml:mstyle>
</mml:mrow>
</mml:mfrac>
<mml:mo>.</mml:mo>
</mml:mrow>
</mml:math>
</disp-formula>The error for all producer wells can be defined as:<disp-formula id="e30">
<mml:math id="m236">
<mml:mrow>
<mml:msub>
<mml:mi>E</mml:mi>
<mml:mi>o</mml:mi>
</mml:msub>
<mml:mo>&#x3d;</mml:mo>
<mml:mfrac>
<mml:mn>1</mml:mn>
<mml:mrow>
<mml:msub>
<mml:mi>n</mml:mi>
<mml:mi>p</mml:mi>
</mml:msub>
</mml:mrow>
</mml:mfrac>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:munder>
<mml:mstyle displaystyle="true">
<mml:mo>&#x2211;</mml:mo>
</mml:mstyle>
<mml:mrow>
<mml:mi>p</mml:mi>
<mml:mo>&#x3d;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:munder>
</mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mi>n</mml:mi>
<mml:mi>p</mml:mi>
</mml:msub>
</mml:mrow>
</mml:mover>
</mml:mrow>
<mml:msubsup>
<mml:mi>e</mml:mi>
<mml:mi>o</mml:mi>
<mml:mi>p</mml:mi>
</mml:msubsup>
<mml:mo>,</mml:mo>
</mml:mrow>
</mml:math>
<label>(30)</label>
</disp-formula>
<disp-formula id="e31">
<mml:math id="m237">
<mml:mrow>
<mml:msub>
<mml:mi>E</mml:mi>
<mml:mi>w</mml:mi>
</mml:msub>
<mml:mo>&#x3d;</mml:mo>
<mml:mfrac>
<mml:mn>1</mml:mn>
<mml:mrow>
<mml:msub>
<mml:mi>n</mml:mi>
<mml:mi>p</mml:mi>
</mml:msub>
</mml:mrow>
</mml:mfrac>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:munder>
<mml:mstyle displaystyle="true">
<mml:mo>&#x2211;</mml:mo>
</mml:mstyle>
<mml:mrow>
<mml:mi>p</mml:mi>
<mml:mo>&#x3d;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:munder>
</mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mi>n</mml:mi>
<mml:mi>p</mml:mi>
</mml:msub>
</mml:mrow>
</mml:mover>
</mml:mrow>
<mml:msubsup>
<mml:mi>e</mml:mi>
<mml:mi>w</mml:mi>
<mml:mi>p</mml:mi>
</mml:msubsup>
<mml:mo>,</mml:mo>
</mml:mrow>
</mml:math>
<label>(31)</label>
</disp-formula>where <inline-formula id="inf200">
<mml:math id="m238">
<mml:mrow>
<mml:mi>j</mml:mi>
<mml:mo>&#x3d;</mml:mo>
<mml:mi>o</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>w</mml:mi>
</mml:mrow>
</mml:math>
</inline-formula> stands for the oil and water phases, respectively, and HFS stands for high-fidelity solution (numerical reservoir simulation run). The upper hat (<inline-formula id="inf201">
<mml:math id="m239">
<mml:mrow>
<mml:mover accent="true">
<mml:mi mathvariant="normal">&#xa0;</mml:mi>
<mml:mo>&#x5e;</mml:mo>
</mml:mover>
</mml:mrow>
</mml:math>
</inline-formula>) stands for estimated and is related to the output of the 3 propositions on how to estimate well&#x20;data.</p>
<p>A similar equation can be built for the bottom hole pressure of an injector well (<italic>i</italic>), as given below:<disp-formula id="equ8">
<mml:math id="m240">
<mml:mrow>
<mml:msubsup>
<mml:mi>e</mml:mi>
<mml:mrow>
<mml:mtext>BHP</mml:mtext>
</mml:mrow>
<mml:mi>i</mml:mi>
</mml:msubsup>
<mml:mo>&#x3d;</mml:mo>
<mml:mfrac>
<mml:mrow>
<mml:mstyle displaystyle="true">
<mml:mrow>
<mml:msubsup>
<mml:mo>&#x222b;</mml:mo>
<mml:mn>0</mml:mn>
<mml:mi>T</mml:mi>
</mml:msubsup>
<mml:mrow>
<mml:mrow>
<mml:mo>&#x7c;</mml:mo>
<mml:mrow>
<mml:msup>
<mml:mrow>
<mml:mover accent="true">
<mml:mi>p</mml:mi>
<mml:mo>&#x5e;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mi>i</mml:mi>
</mml:msup>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:mo>&#x2212;</mml:mo>
<mml:msubsup>
<mml:mi>p</mml:mi>
<mml:mrow>
<mml:mtext>HFS</mml:mtext>
</mml:mrow>
<mml:mi>i</mml:mi>
</mml:msubsup>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
</mml:mrow>
<mml:mo>&#x7c;</mml:mo>
</mml:mrow>
<mml:mi>d</mml:mi>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:mrow>
</mml:mstyle>
</mml:mrow>
<mml:mrow>
<mml:mstyle displaystyle="true">
<mml:mrow>
<mml:msubsup>
<mml:mo>&#x222b;</mml:mo>
<mml:mn>0</mml:mn>
<mml:mi>T</mml:mi>
</mml:msubsup>
<mml:mrow>
<mml:mrow>
<mml:mo>&#x7c;</mml:mo>
<mml:mrow>
<mml:msubsup>
<mml:mi>p</mml:mi>
<mml:mrow>
<mml:mtext>HFS</mml:mtext>
</mml:mrow>
<mml:mi>i</mml:mi>
</mml:msubsup>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
</mml:mrow>
<mml:mo>&#x7c;</mml:mo>
</mml:mrow>
<mml:mi>d</mml:mi>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:mrow>
</mml:mstyle>
</mml:mrow>
</mml:mfrac>
<mml:mo>.</mml:mo>
</mml:mrow>
</mml:math>
</disp-formula>The error for all injector wells can be calculated as:<disp-formula id="e32">
<mml:math id="m241">
<mml:mrow>
<mml:msub>
<mml:mi>E</mml:mi>
<mml:mrow>
<mml:mtext>BHP</mml:mtext>
</mml:mrow>
</mml:msub>
<mml:mo>&#x3d;</mml:mo>
<mml:mfrac>
<mml:mn>1</mml:mn>
<mml:mrow>
<mml:msub>
<mml:mi>n</mml:mi>
<mml:mi>i</mml:mi>
</mml:msub>
</mml:mrow>
</mml:mfrac>
<mml:munderover>
<mml:mstyle displaystyle="true">
<mml:mo>&#x2211;</mml:mo>
</mml:mstyle>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>&#x3d;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mi>n</mml:mi>
<mml:mi>i</mml:mi>
</mml:msub>
</mml:mrow>
</mml:munderover>
<mml:msubsup>
<mml:mi>e</mml:mi>
<mml:mrow>
<mml:mtext>BHP</mml:mtext>
</mml:mrow>
<mml:mi>i</mml:mi>
</mml:msubsup>
<mml:mo>,</mml:mo>
</mml:mrow>
</mml:math>
<label>(32)</label>
</disp-formula>where <inline-formula id="inf202">
<mml:math id="m242">
<mml:mrow>
<mml:msub>
<mml:mi>n</mml:mi>
<mml:mi>i</mml:mi>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula> is the number of injector wells. We defined a relative error for the cumulative flowrates as:<disp-formula id="equ9">
<mml:math id="m243">
<mml:mrow>
<mml:msubsup>
<mml:mi>e</mml:mi>
<mml:mrow>
<mml:mtext>cum</mml:mtext>
<mml:mo>,</mml:mo>
<mml:mi>j</mml:mi>
</mml:mrow>
<mml:mi>p</mml:mi>
</mml:msubsup>
<mml:mo>&#x3d;</mml:mo>
<mml:mfrac>
<mml:mrow>
<mml:mrow>
<mml:mo>&#x7c;</mml:mo>
<mml:mrow>
<mml:msup>
<mml:mrow>
<mml:mover accent="true">
<mml:mi>Q</mml:mi>
<mml:mo>&#x5e;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mi>j</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>p</mml:mi>
</mml:mrow>
</mml:msup>
<mml:mo>&#x2212;</mml:mo>
<mml:msubsup>
<mml:mi>Q</mml:mi>
<mml:mrow>
<mml:mtext>HFS</mml:mtext>
</mml:mrow>
<mml:mrow>
<mml:mi>j</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>p</mml:mi>
</mml:mrow>
</mml:msubsup>
</mml:mrow>
<mml:mo>&#x7c;</mml:mo>
</mml:mrow>
</mml:mrow>
<mml:mrow>
<mml:mrow>
<mml:mo>&#x7c;</mml:mo>
<mml:mrow>
<mml:msubsup>
<mml:mi>Q</mml:mi>
<mml:mrow>
<mml:mtext>HFS</mml:mtext>
</mml:mrow>
<mml:mrow>
<mml:mi>j</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>p</mml:mi>
</mml:mrow>
</mml:msubsup>
</mml:mrow>
<mml:mo>&#x7c;</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:mfrac>
<mml:mo>,</mml:mo>
</mml:mrow>
</mml:math>
</disp-formula>where <inline-formula id="inf203">
<mml:math id="m244">
<mml:mrow>
<mml:mi>j</mml:mi>
<mml:mo>&#x3d;</mml:mo>
<mml:mi>o</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>w</mml:mi>
</mml:mrow>
</mml:math>
</inline-formula> and <italic>Q</italic> is the cumulative rate, and for all the producer we define:<disp-formula id="e33">
<mml:math id="m245">
<mml:mrow>
<mml:msub>
<mml:mi>E</mml:mi>
<mml:mrow>
<mml:mtext>cum</mml:mtext>
<mml:mo>,</mml:mo>
<mml:mi>j</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x3d;</mml:mo>
<mml:mfrac>
<mml:mn>1</mml:mn>
<mml:mrow>
<mml:msub>
<mml:mi>n</mml:mi>
<mml:mi>p</mml:mi>
</mml:msub>
</mml:mrow>
</mml:mfrac>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:munder>
<mml:mstyle displaystyle="true">
<mml:mo>&#x2211;</mml:mo>
</mml:mstyle>
<mml:mrow>
<mml:mi>p</mml:mi>
<mml:mo>&#x3d;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:munder>
</mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mi>n</mml:mi>
<mml:mi>p</mml:mi>
</mml:msub>
</mml:mrow>
</mml:mover>
</mml:mrow>
<mml:msubsup>
<mml:mi>e</mml:mi>
<mml:mrow>
<mml:mtext>cum</mml:mtext>
<mml:mo>,</mml:mo>
<mml:mi>j</mml:mi>
</mml:mrow>
<mml:mi>p</mml:mi>
</mml:msubsup>
</mml:mrow>
</mml:math>
<label>(33)</label>
</disp-formula>We also define a relative error in terms of the primary variables (pressures and water saturations) as:<disp-formula id="e34">
<mml:math id="m246">
<mml:mrow>
<mml:msub>
<mml:mi>E</mml:mi>
<mml:mi>v</mml:mi>
</mml:msub>
<mml:mo>&#x3d;</mml:mo>
<mml:mfrac>
<mml:mrow>
<mml:mstyle displaystyle="true">
<mml:msubsup>
<mml:mo>&#x2211;</mml:mo>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>&#x3d;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mi>n</mml:mi>
<mml:mi>b</mml:mi>
</mml:msub>
</mml:mrow>
</mml:msubsup>
<mml:mrow>
<mml:mstyle displaystyle="true">
<mml:mrow>
<mml:msubsup>
<mml:mo>&#x222b;</mml:mo>
<mml:mn>0</mml:mn>
<mml:mi>T</mml:mi>
</mml:msubsup>
<mml:mrow>
<mml:mrow>
<mml:mo>&#x7c;</mml:mo>
<mml:mrow>
<mml:msup>
<mml:mrow>
<mml:mover accent="true">
<mml:mi>v</mml:mi>
<mml:mo>&#x5e;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mi>k</mml:mi>
</mml:msup>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:mo>&#x2212;</mml:mo>
<mml:msubsup>
<mml:mi>v</mml:mi>
<mml:mrow>
<mml:mtext>HFS</mml:mtext>
</mml:mrow>
<mml:mi>k</mml:mi>
</mml:msubsup>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
</mml:mrow>
<mml:mo>&#x7c;</mml:mo>
</mml:mrow>
<mml:mi>d</mml:mi>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:mrow>
</mml:mstyle>
</mml:mrow>
</mml:mstyle>
</mml:mrow>
<mml:mrow>
<mml:mstyle displaystyle="true">
<mml:msubsup>
<mml:mo>&#x2211;</mml:mo>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>&#x3d;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mi>n</mml:mi>
<mml:mi>b</mml:mi>
</mml:msub>
</mml:mrow>
</mml:msubsup>
<mml:mrow>
<mml:mstyle displaystyle="true">
<mml:mrow>
<mml:msubsup>
<mml:mo>&#x222b;</mml:mo>
<mml:mn>0</mml:mn>
<mml:mi>T</mml:mi>
</mml:msubsup>
<mml:mrow>
<mml:mrow>
<mml:mo>&#x7c;</mml:mo>
<mml:mrow>
<mml:msubsup>
<mml:mi>v</mml:mi>
<mml:mrow>
<mml:mtext>HFS</mml:mtext>
</mml:mrow>
<mml:mi>k</mml:mi>
</mml:msubsup>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
</mml:mrow>
<mml:mo>&#x7c;</mml:mo>
</mml:mrow>
<mml:mi>d</mml:mi>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:mrow>
</mml:mstyle>
</mml:mrow>
</mml:mstyle>
</mml:mrow>
</mml:mfrac>
<mml:mo>,</mml:mo>
</mml:mrow>
</mml:math>
<label>(34)</label>
</disp-formula>where <inline-formula id="inf204">
<mml:math id="m247">
<mml:mrow>
<mml:msub>
<mml:mi>v</mml:mi>
<mml:mi>k</mml:mi>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula> denotes the state variable at grid block <italic>k</italic> (pressure <inline-formula id="inf205">
<mml:math id="m248">
<mml:mrow>
<mml:msup>
<mml:mi>p</mml:mi>
<mml:mi>k</mml:mi>
</mml:msup>
</mml:mrow>
</mml:math>
</inline-formula> or water saturation <inline-formula id="inf206">
<mml:math id="m249">
<mml:mrow>
<mml:msup>
<mml:mi>S</mml:mi>
<mml:mi>k</mml:mi>
</mml:msup>
</mml:mrow>
</mml:math>
</inline-formula>), and <inline-formula id="inf207">
<mml:math id="m250">
<mml:mrow>
<mml:msub>
<mml:mi>n</mml:mi>
<mml:mi>b</mml:mi>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula> is the number of grid blocks in the numerical reservoir simulation&#x20;grid.</p>
</sec>
<sec id="s3-3-2">
<title>3.3.2&#x20;Hyper-Parameters Tuning</title>
<p>The process of obtaining predictive neural networks with architecture like those used on the proposed methods is not straightforward. There are no mysteries in the training procedure itself. However, several hyper-parameters need to be selected before training, for example, the training batch size, number of epochs, and the learning rate. The choice of the best set of hyper-parameters is challenging, and the authors could not find a well-defined procedure on how to do it. To better choose the hyper-parameters, we have to proceed with full training and then using the validation data set, predict the outputs of this trained network to analyze the error of this choice. We should now repeat this process with another set of hyper-parameters to find the one that provides a smaller prediction&#x20;error.</p>
<p>Looking for isolating each parameter&#x2019;s influence, we run isolated tuning, where each tuning run will consist of trying some values of a hyper-parameter and fixing the others. For example, trying to find the best learning rate (for ADAM&#x2019;s algorithm) we run the training and prediction for the values <inline-formula id="inf208">
<mml:math id="m251">
<mml:mrow>
<mml:mn>1</mml:mn>
<mml:mo>&#xd7;</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mn>10</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2212;</mml:mo>
<mml:mn>5</mml:mn>
</mml:mrow>
</mml:msup>
</mml:mrow>
</mml:math>
</inline-formula>, <inline-formula id="inf209">
<mml:math id="m252">
<mml:mrow>
<mml:mn>1</mml:mn>
<mml:mo>&#xd7;</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mn>10</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2212;</mml:mo>
<mml:mn>4</mml:mn>
</mml:mrow>
</mml:msup>
</mml:mrow>
</mml:math>
</inline-formula>, <inline-formula id="inf210">
<mml:math id="m253">
<mml:mrow>
<mml:mn>1</mml:mn>
<mml:mo>&#xd7;</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mn>10</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2212;</mml:mo>
<mml:mn>3</mml:mn>
</mml:mrow>
</mml:msup>
</mml:mrow>
</mml:math>
</inline-formula>, <inline-formula id="inf211">
<mml:math id="m254">
<mml:mrow>
<mml:mn>1</mml:mn>
<mml:mo>&#xd7;</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mn>10</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2212;</mml:mo>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msup>
</mml:mrow>
</mml:math>
</inline-formula>, and <inline-formula id="inf212">
<mml:math id="m255">
<mml:mrow>
<mml:mn>1</mml:mn>
<mml:mo>&#xd7;</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mn>10</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2212;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msup>
</mml:mrow>
</mml:math>
</inline-formula>. The lowest error in estimating the well data was obtained with <inline-formula id="inf213">
<mml:math id="m256">
<mml:mrow>
<mml:mn>1</mml:mn>
<mml:mo>&#xd7;</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mn>10</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2212;</mml:mo>
<mml:mn>4</mml:mn>
</mml:mrow>
</mml:msup>
</mml:mrow>
</mml:math>
</inline-formula>. Now, this value will be fixed on the other tuning runs. We understand that this might not be the optimal approach. However, using a grid search-like method is not feasible since to span the hyper-parameters space would be high computationally costly.</p>
<p>Using a batch size of four is a significantly better choice than using 20 or 100. Larger batch sizes reduce the training process&#x2019;s duration; however, it increases the prediction error in our case. The samples were shuffled to build the batch. This approach worked better than building the batch following the time sequence.</p>
<p>The number of epochs used on the training runs was not considered as a hyper-parameter. We run all our training processes for 100 epochs, saving the network at every 10 epochs. In some cases, we observed that the network that produces the lowest prediction well data error is not obtained after epoch 100, as we expected. This was observed during some hyper-parameters tuning runs. However, when the best hyper-parameter set was found on the specific tuning run, it was always on the last epoch. This might be interpreted as when we are far from the best hyper-parameter, the training procedure presents some instability. It is noteworthy that along the training process, the total loss function keeps decreasing at each epoch. However, the error we are analyzing here is the prediction error defined in a previous section, which is not directly related to the total loss function used on the training procedure.</p>
<p>We tried to find the dimension of the latent space <inline-formula id="inf214">
<mml:math id="m257">
<mml:mrow>
<mml:msub>
<mml:mi>l</mml:mi>
<mml:mi>z</mml:mi>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula> that produces the lowest well data prediction error by changing <inline-formula id="inf215">
<mml:math id="m258">
<mml:mrow>
<mml:msub>
<mml:mi>l</mml:mi>
<mml:mi>z</mml:mi>
</mml:msub>
<mml:mo>&#x3d;</mml:mo>
<mml:mn>10,20,50</mml:mn>
</mml:mrow>
</mml:math>
</inline-formula>, and 100, and the smallest error was obtained by using <inline-formula id="inf216">
<mml:math id="m259">
<mml:mrow>
<mml:msub>
<mml:mi>l</mml:mi>
<mml:mi>z</mml:mi>
</mml:msub>
<mml:mo>&#x3d;</mml:mo>
<mml:mn>50</mml:mn>
</mml:mrow>
</mml:math>
</inline-formula>. The dimension of the dense layer on the transformation blocks was changed between values <inline-formula id="inf217">
<mml:math id="m260">
<mml:mrow>
<mml:mn>50,100,200</mml:mn>
</mml:mrow>
</mml:math>
</inline-formula>, and 500, and the lowest error was found when the dimension was 200. For the E2CO, the dense layer&#x2019;s dimension on the transformation blocks in the transition output network was varied between <inline-formula id="inf218">
<mml:math id="m261">
<mml:mrow>
<mml:mn>10,20,100</mml:mn>
</mml:mrow>
</mml:math>
</inline-formula>, and 200, and the best value was&#x20;20.</p>
<p>The most challenging tuning was on weights applied to the loss functions. Our training procedure relies on the combination of loss functions, and how these functions are optimally weighted to build the total loss function is not an easy task. Here was mentioned that we used normalization of inputs, outputs, and components of loss functions to avoid the need to tune the loss function weights. We initially tried to train our models with the loss functions not weighted to compose the total loss function, but after some tests, we realize that&#x20;there was room for improvement in weighing&#x20;them.</p>
<p>For proposition 1, we can define the total loss function as:<disp-formula id="e35">
<mml:math id="m262">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="normal">&#x2112;</mml:mi>
<mml:mrow>
<mml:mtext>prop</mml:mtext>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo>&#x3d;</mml:mo>
<mml:msub>
<mml:mi mathvariant="normal">&#x2112;</mml:mi>
<mml:mrow>
<mml:mtext>rec</mml:mtext>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2b;</mml:mo>
<mml:msub>
<mml:mi mathvariant="normal">&#x2112;</mml:mi>
<mml:mrow>
<mml:mtext>pred</mml:mtext>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2b;</mml:mo>
<mml:msub>
<mml:mi mathvariant="normal">&#x2112;</mml:mi>
<mml:mrow>
<mml:mtext>trans</mml:mtext>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2b;</mml:mo>
<mml:msub>
<mml:mi>&#x3b3;</mml:mi>
<mml:mrow>
<mml:mtext>flux</mml:mtext>
</mml:mrow>
</mml:msub>
<mml:msub>
<mml:mi mathvariant="normal">&#x2112;</mml:mi>
<mml:mrow>
<mml:mtext>flux</mml:mtext>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2b;</mml:mo>
<mml:msub>
<mml:mi>&#x3b3;</mml:mi>
<mml:mrow>
<mml:mtext>p</mml:mtext>
<mml:mo>_</mml:mo>
<mml:mtext>pres</mml:mtext>
</mml:mrow>
</mml:msub>
<mml:msub>
<mml:mi mathvariant="normal">&#x2112;</mml:mi>
<mml:mrow>
<mml:mtext>p</mml:mtext>
<mml:mo>_</mml:mo>
<mml:mtext>pres</mml:mtext>
</mml:mrow>
</mml:msub>
<mml:mo>,</mml:mo>
</mml:mrow>
</mml:math>
<label>(35)</label>
</disp-formula>where <inline-formula id="inf219">
<mml:math id="m263">
<mml:mrow>
<mml:msub>
<mml:mi>&#x3b3;</mml:mi>
<mml:mrow>
<mml:mtext>flux</mml:mtext>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula> is the weight applied to the flux loss function (<xref ref-type="disp-formula" rid="e23">Eq. 23</xref>) and <inline-formula id="inf220">
<mml:math id="m264">
<mml:mrow>
<mml:msub>
<mml:mi>&#x3b3;</mml:mi>
<mml:mrow>
<mml:mtext>p</mml:mtext>
<mml:mo>_</mml:mo>
<mml:mtext>pres</mml:mtext>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula>, is the weight applied to the loss function of pressure in the producers well gridblocks. This resembles the way the authors in [<xref ref-type="bibr" rid="B2">2</xref>] defined the loss function. The values that produces a smaller prediction error are <inline-formula id="inf221">
<mml:math id="m265">
<mml:mrow>
<mml:msub>
<mml:mi>&#x3b3;</mml:mi>
<mml:mrow>
<mml:mtext>flux</mml:mtext>
</mml:mrow>
</mml:msub>
<mml:mo>&#x3d;</mml:mo>
<mml:mn>5</mml:mn>
</mml:mrow>
</mml:math>
</inline-formula> and <inline-formula id="inf222">
<mml:math id="m266">
<mml:mrow>
<mml:msub>
<mml:mi>&#x3b3;</mml:mi>
<mml:mrow>
<mml:mtext>p</mml:mtext>
<mml:mo>_</mml:mo>
<mml:mtext>pres</mml:mtext>
</mml:mrow>
</mml:msub>
<mml:mo>&#x3d;</mml:mo>
<mml:mn>0</mml:mn>
</mml:mrow>
</mml:math>
</inline-formula>. We tried several values for <inline-formula id="inf223">
<mml:math id="m267">
<mml:mrow>
<mml:msub>
<mml:mi>&#x3b3;</mml:mi>
<mml:mrow>
<mml:mtext>p</mml:mtext>
<mml:mo>_</mml:mo>
<mml:mtext>pres</mml:mtext>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula>, but the best results where obtained with zero for this weight.</p>
<p>For proposition 2, we need to add the well data loss function (<inline-formula id="inf224">
<mml:math id="m268">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="normal">&#x2112;</mml:mi>
<mml:mrow>
<mml:mtext>well</mml:mtext>
<mml:mo>_</mml:mo>
<mml:mtext>data</mml:mtext>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula>), so the total loss function will become:<disp-formula id="e36">
<mml:math id="m269">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="normal">&#x2112;</mml:mi>
<mml:mrow>
<mml:mtext>prop</mml:mtext>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo>&#x3d;</mml:mo>
<mml:msub>
<mml:mi mathvariant="normal">&#x2112;</mml:mi>
<mml:mrow>
<mml:mtext>rec</mml:mtext>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2b;</mml:mo>
<mml:msub>
<mml:mi mathvariant="normal">&#x2112;</mml:mi>
<mml:mrow>
<mml:mtext>pred</mml:mtext>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2b;</mml:mo>
<mml:msub>
<mml:mi mathvariant="normal">&#x2112;</mml:mi>
<mml:mrow>
<mml:mtext>trans</mml:mtext>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2b;</mml:mo>
<mml:msub>
<mml:mi>&#x3b3;</mml:mi>
<mml:mrow>
<mml:mtext>flux</mml:mtext>
<mml:mn>2</mml:mn>
<mml:mtext>Ph</mml:mtext>
</mml:mrow>
</mml:msub>
<mml:msub>
<mml:mi mathvariant="normal">&#x2112;</mml:mi>
<mml:mrow>
<mml:mtext>flux</mml:mtext>
<mml:mn>2</mml:mn>
<mml:mtext>Ph</mml:mtext>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2b;</mml:mo>
<mml:msub>
<mml:mi>&#x3b3;</mml:mi>
<mml:mrow>
<mml:mtext>well</mml:mtext>
<mml:mo>_</mml:mo>
<mml:mtext>data</mml:mtext>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msub>
<mml:msub>
<mml:mi mathvariant="normal">&#x2112;</mml:mi>
<mml:mrow>
<mml:mtext>well</mml:mtext>
<mml:mo>_</mml:mo>
<mml:mtext>data</mml:mtext>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo>,</mml:mo>
</mml:mrow>
</mml:math>
<label>(36)</label>
</disp-formula>where <inline-formula id="inf225">
<mml:math id="m270">
<mml:mrow>
<mml:msub>
<mml:mi>&#x3b3;</mml:mi>
<mml:mrow>
<mml:mtext>flux</mml:mtext>
<mml:mn>2</mml:mn>
<mml:mtext>Ph</mml:mtext>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula> is the weight applied to the two phase flux loss function and <inline-formula id="inf226">
<mml:math id="m271">
<mml:mrow>
<mml:msub>
<mml:mi>&#x3b3;</mml:mi>
<mml:mrow>
<mml:mtext>well</mml:mtext>
<mml:mo>_</mml:mo>
<mml:mtext>data</mml:mtext>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula> represents the weight applied to the well data loss function.</p>
<p>For the E2CO (proposition 3) we can define the total loss function as:<disp-formula id="e37">
<mml:math id="m272">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="normal">&#x2112;</mml:mi>
<mml:mrow>
<mml:mtext>E</mml:mtext>
<mml:mn>2</mml:mn>
<mml:mtext>CO</mml:mtext>
</mml:mrow>
</mml:msub>
<mml:mo>&#x3d;</mml:mo>
<mml:msub>
<mml:mi mathvariant="normal">&#x2112;</mml:mi>
<mml:mrow>
<mml:mtext>rec</mml:mtext>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2b;</mml:mo>
<mml:msub>
<mml:mi mathvariant="normal">&#x2112;</mml:mi>
<mml:mrow>
<mml:mtext>pred</mml:mtext>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2b;</mml:mo>
<mml:msub>
<mml:mi mathvariant="normal">&#x2112;</mml:mi>
<mml:mrow>
<mml:mtext>trans</mml:mtext>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2b;</mml:mo>
<mml:msub>
<mml:mi>&#x3b3;</mml:mi>
<mml:mrow>
<mml:mtext>flux</mml:mtext>
</mml:mrow>
</mml:msub>
<mml:msub>
<mml:mi mathvariant="normal">&#x2112;</mml:mi>
<mml:mrow>
<mml:mtext>flux</mml:mtext>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2b;</mml:mo>
<mml:msub>
<mml:mi>&#x3b3;</mml:mi>
<mml:mrow>
<mml:mtext>well</mml:mtext>
<mml:mo>_</mml:mo>
<mml:mtext>data</mml:mtext>
<mml:mn>3</mml:mn>
</mml:mrow>
</mml:msub>
<mml:msub>
<mml:mi mathvariant="normal">&#x2112;</mml:mi>
<mml:mrow>
<mml:mtext>well</mml:mtext>
<mml:mo>_</mml:mo>
<mml:mtext>data</mml:mtext>
<mml:mn>3</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo>.</mml:mo>
</mml:mrow>
</mml:math>
<label>(37)</label>
</disp-formula>We tried variations of propositions 2 and 3 total loss functions using different flux loss functions: one-phase, two-phase, and no flux loss. We also tried to give more weight to the state variables (pressure and saturation) on the well grid blocks. This analysis was applied to the injectors and producers&#x2019; well gridblocks. We tested several combinations of different weights for a loss function that looks at the mismatch between the predicted and the true values of the wells gridblock state variables. These loss functions can be identified as <inline-formula id="inf227">
<mml:math id="m273">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="normal">&#x2112;</mml:mi>
<mml:mrow>
<mml:mtext>p</mml:mtext>
<mml:mo>_</mml:mo>
<mml:mtext>pres</mml:mtext>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula>, <inline-formula id="inf228">
<mml:math id="m274">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="normal">&#x2112;</mml:mi>
<mml:mrow>
<mml:mtext>p</mml:mtext>
<mml:mo>_</mml:mo>
<mml:mtext>sat</mml:mtext>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula>, <inline-formula id="inf229">
<mml:math id="m275">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="normal">&#x2112;</mml:mi>
<mml:mrow>
<mml:mtext>i</mml:mtext>
<mml:mo>_</mml:mo>
<mml:mtext>pres</mml:mtext>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula>, and <inline-formula id="inf230">
<mml:math id="m276">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="normal">&#x2112;</mml:mi>
<mml:mrow>
<mml:mtext>i</mml:mtext>
<mml:mo>_</mml:mo>
<mml:mtext>sat</mml:mtext>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula>, and there respective weights are <inline-formula id="inf231">
<mml:math id="m277">
<mml:mrow>
<mml:msub>
<mml:mi>&#x3b3;</mml:mi>
<mml:mrow>
<mml:mtext>p</mml:mtext>
<mml:mo>_</mml:mo>
<mml:mtext>pres</mml:mtext>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula>, <inline-formula id="inf232">
<mml:math id="m278">
<mml:mrow>
<mml:msub>
<mml:mi>&#x3b3;</mml:mi>
<mml:mrow>
<mml:mtext>p</mml:mtext>
<mml:mo>_</mml:mo>
<mml:mtext>sat</mml:mtext>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula>, <inline-formula id="inf233">
<mml:math id="m279">
<mml:mrow>
<mml:msub>
<mml:mi>&#x3b3;</mml:mi>
<mml:mrow>
<mml:mtext>i</mml:mtext>
<mml:mo>_</mml:mo>
<mml:mtext>pres</mml:mtext>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula>, and <inline-formula id="inf234">
<mml:math id="m280">
<mml:mrow>
<mml:msub>
<mml:mi>&#x3b3;</mml:mi>
<mml:mrow>
<mml:mtext>i</mml:mtext>
<mml:mo>_</mml:mo>
<mml:mtext>sat</mml:mtext>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula>. We expected that this would improve the model&#x2019;s ability to predict well data, but this was not true for all&#x20;cases.</p>
<p>For proposition 2, the best results were obtained using <inline-formula id="inf235">
<mml:math id="m281">
<mml:mrow>
<mml:msub>
<mml:mi>&#x3b3;</mml:mi>
<mml:mrow>
<mml:mtext>flux</mml:mtext>
<mml:mn>2</mml:mn>
<mml:mtext>Ph</mml:mtext>
</mml:mrow>
</mml:msub>
<mml:mo>&#x3d;</mml:mo>
<mml:mn>1.0</mml:mn>
</mml:mrow>
</mml:math>
</inline-formula>, <inline-formula id="inf236">
<mml:math id="m282">
<mml:mrow>
<mml:msub>
<mml:mi>&#x3b3;</mml:mi>
<mml:mrow>
<mml:mtext>well</mml:mtext>
<mml:mo>_</mml:mo>
<mml:mtext>data</mml:mtext>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo>&#x3d;</mml:mo>
<mml:mn>1.0</mml:mn>
</mml:mrow>
</mml:math>
</inline-formula>, and <inline-formula id="inf237">
<mml:math id="m283">
<mml:mrow>
<mml:msub>
<mml:mi>&#x3b3;</mml:mi>
<mml:mrow>
<mml:mtext>p</mml:mtext>
<mml:mo>_</mml:mo>
<mml:mtext>pres</mml:mtext>
</mml:mrow>
</mml:msub>
<mml:mo>&#x3d;</mml:mo>
<mml:msub>
<mml:mi>&#x3b3;</mml:mi>
<mml:mrow>
<mml:mtext>p</mml:mtext>
<mml:mo>_</mml:mo>
<mml:mtext>sat</mml:mtext>
</mml:mrow>
</mml:msub>
<mml:mo>&#x3d;</mml:mo>
<mml:msub>
<mml:mi>&#x3b3;</mml:mi>
<mml:mrow>
<mml:mtext>i</mml:mtext>
<mml:mo>_</mml:mo>
<mml:mtext>pres</mml:mtext>
</mml:mrow>
</mml:msub>
<mml:mo>&#x3d;</mml:mo>
<mml:msub>
<mml:mi>&#x3b3;</mml:mi>
<mml:mrow>
<mml:mtext>i</mml:mtext>
<mml:mo>_</mml:mo>
<mml:mtext>sat</mml:mtext>
</mml:mrow>
</mml:msub>
<mml:mo>&#x3d;</mml:mo>
<mml:mn>0</mml:mn>
</mml:mrow>
</mml:math>
</inline-formula>.</p>
<p>For E2CO (proposition 3), the best results were obtained using single phase loss function, <inline-formula id="inf238">
<mml:math id="m284">
<mml:mrow>
<mml:msub>
<mml:mi>&#x3b3;</mml:mi>
<mml:mrow>
<mml:mtext>flux</mml:mtext>
<mml:mn>1</mml:mn>
<mml:mtext>Ph</mml:mtext>
</mml:mrow>
</mml:msub>
<mml:mo>&#x3d;</mml:mo>
<mml:mn>0.1</mml:mn>
</mml:mrow>
</mml:math>
</inline-formula>, <inline-formula id="inf239">
<mml:math id="m285">
<mml:mrow>
<mml:msub>
<mml:mi>&#x3b3;</mml:mi>
<mml:mrow>
<mml:mtext>well</mml:mtext>
<mml:mo>_</mml:mo>
<mml:mtext>data</mml:mtext>
<mml:mn>3</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo>&#x3d;</mml:mo>
<mml:mn>1.0</mml:mn>
</mml:mrow>
</mml:math>
</inline-formula>, <inline-formula id="inf240">
<mml:math id="m286">
<mml:mrow>
<mml:msub>
<mml:mi>&#x3b3;</mml:mi>
<mml:mrow>
<mml:mtext>p</mml:mtext>
<mml:mo>_</mml:mo>
<mml:mtext>pres</mml:mtext>
</mml:mrow>
</mml:msub>
<mml:mo>&#x3d;</mml:mo>
<mml:mn>0.01</mml:mn>
</mml:mrow>
</mml:math>
</inline-formula>, and <inline-formula id="inf241">
<mml:math id="m287">
<mml:mrow>
<mml:msub>
<mml:mi>&#x3b3;</mml:mi>
<mml:mrow>
<mml:mtext>p</mml:mtext>
<mml:mo>_</mml:mo>
<mml:mtext>sat</mml:mtext>
</mml:mrow>
</mml:msub>
<mml:mo>&#x3d;</mml:mo>
<mml:msub>
<mml:mi>&#x3b3;</mml:mi>
<mml:mrow>
<mml:mtext>i</mml:mtext>
<mml:mo>_</mml:mo>
<mml:mtext>pres</mml:mtext>
</mml:mrow>
</mml:msub>
<mml:mo>&#x3d;</mml:mo>
<mml:msub>
<mml:mi>&#x3b3;</mml:mi>
<mml:mrow>
<mml:mtext>i</mml:mtext>
<mml:mo>_</mml:mo>
<mml:mtext>sat</mml:mtext>
</mml:mrow>
</mml:msub>
<mml:mo>&#x3d;</mml:mo>
<mml:mn>0</mml:mn>
</mml:mrow>
</mml:math>
</inline-formula>.</p>
<p>The choice of best hyperparameters set for each proposition was defined by analyzing the validation set&#x2019;s total prediction error. We used the summation of the median of the errors defined by <xref ref-type="disp-formula" rid="e30">Eqs 30</xref>&#x2013;<xref ref-type="disp-formula" rid="e34">34</xref>, here defined as total prediction error, to choose the best hyperparameters&#x20;set.</p>
</sec>
<sec id="s3-3-3">
<title>3.3.3 Training Size Sensibility</title>
<p>We are interested in understanding the performance of the two proposed methods when less data is available for training or the resources available for the training are limited. Using the best set of hyperparameters described in the previous session, 3 training procedures were conducted varying the training set size for each model. The original training set size was 6,000 samples, and we also trained with 4,000 samples and 2,000 samples (each one corresponding to 300, 200, and 100 controls sets). <xref ref-type="fig" rid="F14">Figure&#x20;14</xref> shows the relative error median over the validation set for the oil rate, the water rate, and BHP for each proposed method. A similar trend for all the curves can be observed, and as expected, when the number of training samples is reduced, the estimation error on the validation set increases. Important to note that for the oil rate and BHP, the E2CO method presents lower values for relative error when reducing the training set size. Proposition 1 provides slightly better results only for the water rate with the lowest numbers of training samples.</p>
<fig id="F14" position="float">
<label>FIGURE 14</label>
<caption>
<p>Validation set error for different training set&#x20;sizes.</p>
</caption>
<graphic xlink:href="fams-07-651178-g014.tif"/>
</fig>
</sec>
</sec>
</sec>
<sec id="s4">
<title>4 Results</title>
<p>This section will present a validation set error comparison between the best hyperparameters set for each of the propositions. We finish this section by comparing the methods by showing well data and states outputs of a specific control combination from the validation&#x20;set.</p>
<p>We defined the best hyperparameters set based on the total error median over the validation set for all the three proposed models on the hyperparameters tuning procedure. We can now analyze the performance of these three models by comparing the error for each item analyzed. In <xref ref-type="fig" rid="F15">Figure&#x20;15</xref> we present the error for well data, where this box plot represents the distribution of the relative error on the validation set. The bottom and top limits of each box represent 25th, and 75th percentile errors, the orange line inside the box is the median of the distribution.</p>
<fig id="F15" position="float">
<label>FIGURE 15</label>
<caption>
<p>Validation set error on the 3 propositions for oil rate <bold>(left plot)</bold>, water rate <bold>(middle plot)</bold> and BHP <bold>(right plot)</bold>.</p>
</caption>
<graphic xlink:href="fams-07-651178-g015.tif"/>
</fig>
<p>Analyzing oil rate relative error in <xref ref-type="fig" rid="F15">Figure&#x20;15</xref>, it is possible to conclude that E2CO overcome propositions 1 and 2. For the water rate and bottom hole pressure, we obtained a smaller error for both E2CO and proposition 2 than proposition 1. However, the E2CO estimation errors for the water rate are higher than proposition 2. We impute this pour performance to failure on estimating water rate before water breakthrough. We present and discuss this problem better in <xref ref-type="fig" rid="F16">Figure&#x20;16</xref>.</p>
<fig id="F16" position="float">
<label>FIGURE 16</label>
<caption>
<p>Well data prediction for validation sample 6.</p>
</caption>
<graphic xlink:href="fams-07-651178-g016.tif"/>
</fig>
<p>A similar analysis can be built for cumulative flow rates, as in <xref ref-type="fig" rid="F17">Figure&#x20;17</xref>. It is possible to observe that proposition 2 and E2CO overcome the cumulative water flow rates prediction ability of proposition 1. The same figure shows that the cumulative oil rate is better predicted by proposition 1. We can also visualize the cumulative errors in a scatter plot of cumulative flow rate plots (<xref ref-type="fig" rid="F18">Figure&#x20;18</xref>), where it is possible to confirm the previous figure&#x2019;s analysis.</p>
<fig id="F17" position="float">
<label>FIGURE 17</label>
<caption>
<p>Validation set error for cumulative oil <bold>(left plot)</bold> and cumulative water <bold>(right plot)</bold> production.</p>
</caption>
<graphic xlink:href="fams-07-651178-g017.tif"/>
</fig>
<fig id="F18" position="float">
<label>FIGURE 18</label>
<caption>
<p>Cumulative oil <bold>(left plot)</bold> and water <bold>(right plot)</bold> production.</p>
</caption>
<graphic xlink:href="fams-07-651178-g018.tif"/>
</fig>
<p>The error on the state variables is presented in <xref ref-type="fig" rid="F19">Figure&#x20;19</xref>. We can observe that both E2CO and proposition 2 overcome the state estimation ability of proposition 1. During the development of both E2CO and proposition 2, we aimed on getting accurate well data estimation; however, these results show that we are also able to predict states. Proposition 2 has a lower estimation error, which can be assigned as a benefit of using the 2 phase flux loss function proposed in this research.</p>
<fig id="F19" position="float">
<label>FIGURE 19</label>
<caption>
<p>Validation set error on the 3 propositions for pressure <bold>(left plot)</bold> and saturation <bold>(right plot)</bold>.</p>
</caption>
<graphic xlink:href="fams-07-651178-g019.tif"/>
</fig>
<p>We now present in <xref ref-type="fig" rid="F16">Figure&#x20;16</xref> the predicted well data of one validation sample for all the three models. It is noteworthy that E2CO has some problems with water flowrate estimation, mainly before the water breakthrough. This could be addressed by narrowing its values to only positive values, which is an easy procedure. One can check the saturation on the well gridblock, and if saturation is not higher than the connate water saturation, set its value to zero. This will compel the need to rebuild the full state. Here, we did not implement any of these procedures, and the results presented are exactly the ones generated by the E2CO method.</p>
<p>The pressure and water saturation maps for the last predicted time step using one validation sample in <xref ref-type="fig" rid="F20">Figures 20</xref>, <xref ref-type="fig" rid="F21">21</xref>. The maps did not show significant differences; however, the error map for pressure shows lower values for proposition 2 and E2CO. For saturation error map, proposition 2 shows higher errors in a southern&#x20;area.</p>
<fig id="F20" position="float">
<label>FIGURE 20</label>
<caption>
<p>Pressure map for the last predicted time step of validation sample 3.</p>
</caption>
<graphic xlink:href="fams-07-651178-g020.tif"/>
</fig>
<fig id="F21" position="float">
<label>FIGURE 21</label>
<caption>
<p>Water saturation map for the last predicted time step of validation sample 3.</p>
</caption>
<graphic xlink:href="fams-07-651178-g021.tif"/>
</fig>
</sec>
</body>
<back>
<sec id="s5">
<title>5 Conclusion</title>
<p>This work presents a new framework to develop proxy models for reservoir simulation. Our method is based on a deep convolutional autoencoder and control system approach. Our development was inspired by the E2C-ROM method (named proposition 1) proposed by [<xref ref-type="bibr" rid="B2">2</xref>]. In this study, we leverage its capability of state reconstruction by adding to it a well data (output) loss function on the training procedure (proposition 2). Additionally, we introduce E2CO&#x2014;Embed to Control and Observe (proposition 3)&#x2014;as an alternative approach to calculate the model output by having a specific neural network to capture the relation between reduced state, controls, and outputs. The methods developed here can be related to the reduced-order modeling technique POD-TPWL.</p>
<p>We applied our proposed new architecture on a two-phase 2D synthetic reservoir simulation model running on a commercial reservoir simulation. The results of proposition 2 and E2CO applications in our synthetic case presented improvements when compared with E2C-ROM. The well data estimation errors on the validation set are generally more accurate and present less variability using the two proposed methods, especially the estimations of oil rate and cumulative oil and water production. Proposition 2 has also shown slightly better results, but its limitations are the same as the E2C-ROM: the need to reconstruct the full state to estimate the well data. On the other hand, our new E2CO methodology can predict well data using the reduced state directly without being estimated by the Peacemen formula.</p>
<p>Although we have shown the advantages and limitations of our proposed methods using a 2D reservoir, their performance and generalizations need to be tested on more realistic scenarios with larger and more complex models (black-oil or compositional). The explosion on the number of state variables&#x2019; and, thus, the model dimension may lead to more challenging well data estimation. It may be necessary to increase the dimension of the reduced space <inline-formula id="inf242">
<mml:math id="m288">
<mml:mrow>
<mml:msub>
<mml:mi>l</mml:mi>
<mml:mi>z</mml:mi>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula>, and the neural network dimension responsible for generating the linearized system matrix.</p>
</sec>
<sec id="s6">
<title>Data Availability Statement</title>
<p>The raw data supporting the conclusions of this article will be made available by the authors, without undue reservation.</p>
</sec>
<sec id="s7">
<title>Author Contributions</title>
<p>All authors listed have made a substantial, direct, and intellectual contribution to the work and approved it for publication.</p>
</sec>
<sec sec-type="COI-statement" id="s8">
<title>Conflict of Interest</title>
<p>Author EC is employed by the company Petrobras.</p>
<p>The remaining authors declare that the research was conducted in the absence of any commercial or financial relationships that could be construed as a potential conflict of interest.</p>
</sec>
<sec id="s9" sec-type="disclaimer">
<title>Publisher&#x2019;s Note</title>
<p>All claims expressed in this article are solely those of the authors and do not necessarily represent those of their affiliated organizations, or those of the publisher, the editors and the reviewers. Any product that may be evaluated in this article, or claim that may be made by its manufacturer, is not guaranteed or endorsed by the publisher.</p>
</sec>
<ack>
<p>Portions of this research were conducted using the advanced computing resources provided by Texas A&#x0026;M High-Performance Research Computing. The first author also acknowledges all the support provided by Petroleo Brasileiro S.A. The funder Petroleo Brasileiro S.A was not involved in the study design, collection, analysis, interpretation of data, the writing of this article or the decision to submit it for publication. The authors thank Zhaoyang Larry Jin and Louis J. Durlofsky for helpful discussions regarding their E2C implementation and for providing codes associated with their published study.</p>
</ack>
<ref-list>
<title>References</title>
<ref id="B1">
<label>1.</label>
<citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname>Watter</surname>
<given-names>M</given-names>
</name>
<name>
<surname>Springenberg</surname>
<given-names>JT</given-names>
</name>
<name>
<surname>Boedecker</surname>
<given-names>J</given-names>
</name>
<name>
<surname>Riedmiller</surname>
<given-names>M</given-names>
</name>
</person-group>. <source>Embed to Control: A Locally Linear Latent Dynamics Model for Control from Raw Images</source>. <publisher-name>arXiv:1506.07365</publisher-name> (<year>2015</year>).</citation>
</ref>
<ref id="B2">
<label>2.</label>
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Jin</surname>
<given-names>ZL</given-names>
</name>
<name>
<surname>Liu</surname>
<given-names>Y</given-names>
</name>
<name>
<surname>Durlofsky</surname>
<given-names>LJ</given-names>
</name>
</person-group>. <article-title>Deep-learning-based Surrogate Model for Reservoir Simulation with Time-Varying Well Controls</article-title>. <source>J&#x20;Pet Sci Eng</source> (<year>2020</year>) <volume>192</volume>:<fpage>107273</fpage>. <pub-id pub-id-type="doi">10.1016/j.petrol.2020.107273</pub-id> </citation>
</ref>
<ref id="B3">
<label>3.</label>
<citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname>Jansen</surname>
<given-names>JD</given-names>
</name>
</person-group>. <article-title>A Systems Description of Flow through Porous Media</article-title>. In: <source>SpringerBriefs in Earth Sciences</source>. <publisher-loc>Heidelberg</publisher-loc>: <publisher-name>Springer International Publishing</publisher-name> (<year>2013</year>). <pub-id pub-id-type="doi">10.1007/978-3-319-00260-6</pub-id> </citation>
</ref>
<ref id="B4">
<label>4.</label>
<citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname>Antoulas</surname>
<given-names>AC</given-names>
</name>
</person-group>. <article-title>Approximation of Large-Scale Dynamical Systems</article-title>. In: <source>Advances in Design and Control</source>. <publisher-loc>Philadelphia</publisher-loc>: <publisher-name>Society for Industrial and Applied Mathematics</publisher-name> (<year>2005</year>). <pub-id pub-id-type="doi">10.1137/1.9780898718713</pub-id> </citation>
</ref>
<ref id="B5">
<label>5.</label>
<citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname>Gildin</surname>
<given-names>E</given-names>
</name>
<name>
<surname>Klie</surname>
<given-names>H</given-names>
</name>
<name>
<surname>Rodriguez</surname>
<given-names>A</given-names>
</name>
<name>
<surname>Wheeler</surname>
<given-names>MF</given-names>
</name>
<name>
<surname>Bishop</surname>
<given-names>RH</given-names>
</name>
</person-group>. <article-title>Projection-Based Approximation Methods for the Optimal Control of Smart Oil Fields</article-title>. In: <source>ECMOR X - 10th European Conference on the Mathematics of Oil Recovery</source>. <publisher-loc>Houten</publisher-loc>: <publisher-name>European Association of Geoscientists &#x26; Engineers</publisher-name> (<year>2006</year>). p. <fpage>00032</fpage>. ISSN: <isbn>2214-4609</isbn>. <pub-id pub-id-type="doi">10.3997/2214-4609.201402503</pub-id> </citation>
</ref>
<ref id="B6">
<label>6.</label>
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Cardoso</surname>
<given-names>MA</given-names>
</name>
<name>
<surname>Durlofsky</surname>
<given-names>LJ</given-names>
</name>
</person-group>. <article-title>Linearized Reduced-Order Models for Subsurface Flow Simulation</article-title>. <source>J&#x20;Comput Phys</source> (<year>2010</year>) <volume>229</volume>:<fpage>681</fpage>&#x2013;<lpage>700</lpage>. <pub-id pub-id-type="doi">10.1016/j.jcp.2009.10.004</pub-id> </citation>
</ref>
<ref id="B7">
<label>7.</label>
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Jin</surname>
<given-names>ZL</given-names>
</name>
<name>
<surname>Durlofsky</surname>
<given-names>LJ</given-names>
</name>
</person-group>. <article-title>Reduced-order Modeling of CO2 Storage Operations</article-title>. <source>Int J&#x20;Greenhouse Gas Control</source> (<year>2018</year>) <volume>68</volume>:<fpage>49</fpage>&#x2013;<lpage>67</lpage>. <pub-id pub-id-type="doi">10.1016/j.ijggc.2017.08.017</pub-id> </citation>
</ref>
<ref id="B8">
<label>8.</label>
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Chaturantabut</surname>
<given-names>S</given-names>
</name>
<name>
<surname>Sorensen</surname>
<given-names>DC</given-names>
</name>
</person-group>. <article-title>Application of POD and DEIM on Dimension Reduction of Non-linear Miscible Viscous Fingering in Porous media</article-title>. <source>Math Comp Model Dynamical Syst</source> (<year>2011</year>) <volume>17</volume>:<fpage>337</fpage>&#x2013;<lpage>53</lpage>. <pub-id pub-id-type="doi">10.1080/13873954.2011.547660</pub-id> </citation>
</ref>
<ref id="B9">
<label>9.</label>
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Tan</surname>
<given-names>X</given-names>
</name>
<name>
<surname>Gildin</surname>
<given-names>E</given-names>
</name>
<name>
<surname>Florez</surname>
<given-names>H</given-names>
</name>
<name>
<surname>Trehan</surname>
<given-names>S</given-names>
</name>
<name>
<surname>Yang</surname>
<given-names>Y</given-names>
</name>
<name>
<surname>Hoda</surname>
<given-names>N</given-names>
</name>
</person-group>. <article-title>Trajectory-based DEIM (TDEIM) Model Reduction Applied to Reservoir Simulation</article-title>. <source>Comput Geosci</source> (<year>2019</year>) <volume>23</volume>:<fpage>35</fpage>&#x2013;<lpage>53</lpage>. <pub-id pub-id-type="doi">10.1007/s10596-018-9782-0</pub-id> </citation>
</ref>
<ref id="B10">
<label>10.</label>
<citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname>Lee</surname>
<given-names>JW</given-names>
</name>
<name>
<surname>Gildin</surname>
<given-names>E</given-names>
</name>
</person-group>. <article-title>A New Framework for Compositional Simulation Using Reduced Order Modeling Based on POD-DEIM</article-title>. In: <source>SPE Latin American and Caribbean Petroleum Engineering Conference</source>. <publisher-loc>Richardson</publisher-loc>: <publisher-name>Society of Petroleum Engineers</publisher-name> (<year>2020</year>). <pub-id pub-id-type="doi">10.2118/198946-MS</pub-id> </citation>
</ref>
<ref id="B11">
<label>11.</label>
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Jiang</surname>
<given-names>R</given-names>
</name>
<name>
<surname>Durlofsky</surname>
<given-names>LJ</given-names>
</name>
</person-group>. <article-title>Implementation and Detailed Assessment of a GNAT Reduced-Order Model for Subsurface Flow Simulation</article-title>. <source>J&#x20;Comput Phys</source> (<year>2019</year>) <volume>379</volume>:<fpage>192</fpage>&#x2013;<lpage>213</lpage>. <pub-id pub-id-type="doi">10.1016/j.jcp.2018.11.038</pub-id> </citation>
</ref>
<ref id="B12">
<label>12.</label>
<citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname>Zubarev</surname>
<given-names>DI</given-names>
</name>
</person-group>. <article-title>Pros and Cons of Applying Proxy-Models as a Substitute for Full Reservoir Simulations</article-title>. In: <source>SPE Annual Technical Conference and Exhibition</source>. <publisher-loc>New Orleans</publisher-loc>: <publisher-name>Louisiana: Society of Petroleum Engineers</publisher-name> (<year>2009</year>). <pub-id pub-id-type="doi">10.2118/124815-MS</pub-id> </citation>
</ref>
<ref id="B13">
<label>13.</label>
<citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname>Plaksina</surname>
<given-names>T</given-names>
</name>
</person-group>. <source>Modern Data Analytics: Applied AI and Machine Learning for Oil and Gas Industry</source>. <publisher-loc>UQcuzAEACAAJ</publisher-loc>: <publisher-name>Google-Books-ID</publisher-name> (<year>2019</year>).</citation>
</ref>
<ref id="B14">
<label>14.</label>
<citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname>Mishra</surname>
<given-names>S</given-names>
</name>
<name>
<surname>Datta-Gupta</surname>
<given-names>A</given-names>
</name>
</person-group>. <source>Applied Statistical Modelling and Data Analytics</source>. <publisher-name>Elsevier</publisher-name> (<year>2018</year>). <pub-id pub-id-type="doi">10.1016/C2014-0-03954-8</pub-id> </citation>
</ref>
<ref id="B15">
<label>15.</label>
<citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname>Mohaghegh</surname>
<given-names>SD</given-names>
</name>
</person-group>. <source>Shale Analytics: Data-Driven Analytics in Unconventional Resources</source>. <publisher-name>Springer International Publishing</publisher-name> (<year>2017</year>). <pub-id pub-id-type="doi">10.1007/978-3-319-48753-3</pub-id> </citation>
</ref>
<ref id="B16">
<label>16.</label>
<citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname>Misra</surname>
<given-names>S</given-names>
</name>
<name>
<surname>Li</surname>
<given-names>H</given-names>
</name>
<name>
<surname>He</surname>
<given-names>J</given-names>
</name>
</person-group>. <source>Machine Learning for Subsurface Characterization</source>. <publisher-name>Elsevier</publisher-name> (<year>2020</year>). <pub-id pub-id-type="doi">10.1016/C2018-0-01926-X</pub-id> </citation>
</ref>
<ref id="B17">
<label>17.</label>
<citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname>Sankaran</surname>
<given-names>S</given-names>
</name>
<name>
<surname>Matringe</surname>
<given-names>S</given-names>
</name>
<name>
<surname>Sidahmed</surname>
<given-names>M</given-names>
</name>
<name>
<surname>Saputelli</surname>
<given-names>L</given-names>
</name>
</person-group>. <source>Data Analytics in Reservoir Engineering</source>. <publisher-loc>Richardson</publisher-loc>: <publisher-name>Society of Petroleum Engineers</publisher-name> (<year>2020</year>).</citation>
</ref>
<ref id="B18">
<label>18.</label>
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Chiuso</surname>
<given-names>A</given-names>
</name>
<name>
<surname>Pillonetto</surname>
<given-names>G</given-names>
</name>
</person-group>. <article-title>System Identification: A Machine Learning Perspective</article-title>. <source>Annu Rev Control Robot Auton Syst</source> (<year>2019</year>) <volume>2</volume>:<fpage>281</fpage>&#x2013;<lpage>304</lpage>. <pub-id pub-id-type="doi">10.1146/annurev-control-053018-023744</pub-id> </citation>
</ref>
<ref id="B19">
<label>19.</label>
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Ljung</surname>
<given-names>L</given-names>
</name>
<name>
<surname>Hjalmarsson</surname>
<given-names>H</given-names>
</name>
<name>
<surname>Ohlsson</surname>
<given-names>H</given-names>
</name>
</person-group>. <article-title>Four Encounters with System Identification</article-title>. <source>Eur J&#x20;Control</source> (<year>2011</year>) <volume>17</volume>:<fpage>449</fpage>&#x2013;<lpage>71</lpage>. <pub-id pub-id-type="doi">10.3166/ejc.17.449-471</pub-id> </citation>
</ref>
<ref id="B20">
<label>20.</label>
<citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname>Aziz</surname>
<given-names>K</given-names>
</name>
<name>
<surname>Settari</surname>
<given-names>A</given-names>
</name>
</person-group>. <source>Petroleum Reservoir Simulation</source>. <publisher-loc>London</publisher-loc>: <publisher-name>Applied Science Publishers Ltd</publisher-name> (<year>1979</year>).</citation>
</ref>
<ref id="B21">
<label>21.</label>
<citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname>Ertekin</surname>
<given-names>T</given-names>
</name>
<name>
<surname>Abou-Kassem</surname>
<given-names>J</given-names>
</name>
<name>
<surname>King</surname>
<given-names>G</given-names>
</name>
</person-group>. <source>Basic Applied Reservoir Simulation</source>. <publisher-loc>Richardson</publisher-loc>: <publisher-name>Society of Petroleum Engineering</publisher-name> (<year>2001</year>).</citation>
</ref>
<ref id="B22">
<label>22.</label>
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Peaceman</surname>
<given-names>DW</given-names>
</name>
</person-group>. <article-title>Interpretation of Well-Block Pressures in Numerical Reservoir Simulation(includes Associated Paper 6988)</article-title>. <source>Soc Pet Eng J</source> (<year>1978</year>) <volume>18</volume>:<fpage>183</fpage>&#x2013;<lpage>94</lpage>. <pub-id pub-id-type="doi">10.2118/6893-pa</pub-id> </citation>
</ref>
<ref id="B23">
<label>23.</label>
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Zandvliet</surname>
<given-names>MJ</given-names>
</name>
<name>
<surname>Van Doren</surname>
<given-names>JFM</given-names>
</name>
<name>
<surname>Bosgra</surname>
<given-names>OH</given-names>
</name>
<name>
<surname>Jansen</surname>
<given-names>JD</given-names>
</name>
<name>
<surname>Van den Hof</surname>
<given-names>PMJ</given-names>
</name>
</person-group>. <article-title>Controllability, Observability and Identifiability in Single-phase Porous media Flow</article-title>. <source>Comput Geosci</source> (<year>2008</year>) <volume>12</volume>:<fpage>605</fpage>&#x2013;<lpage>22</lpage>. <pub-id pub-id-type="doi">10.1007/s10596-008-9100-3</pub-id> </citation>
</ref>
<ref id="B24">
<label>24.</label>
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Van Doren</surname>
<given-names>JFM</given-names>
</name>
<name>
<surname>Van den Hof</surname>
<given-names>PMJ</given-names>
</name>
<name>
<surname>Bosgra</surname>
<given-names>OH</given-names>
</name>
<name>
<surname>Jansen</surname>
<given-names>JD</given-names>
</name>
</person-group>. <article-title>Controllability and Observability in Two-phase Porous media Flow</article-title>. <source>Comput Geosci</source> (<year>2013</year>) <volume>17</volume>:<fpage>773</fpage>&#x2013;<lpage>88</lpage>. <pub-id pub-id-type="doi">10.1007/s10596-013-9355-1</pub-id> </citation>
</ref>
<ref id="B25">
<label>25.</label>
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Heijn</surname>
<given-names>T</given-names>
</name>
<name>
<surname>Markovinovic</surname>
<given-names>R</given-names>
</name>
<name>
<surname>Jansen</surname>
<given-names>J-D</given-names>
</name>
</person-group>. <article-title>Generation of Low-Order Reservoir Models Using System-Theoretical Concepts</article-title>. <source>SPE J</source> (<year>2004</year>) <volume>9</volume>:<fpage>202</fpage>&#x2013;<lpage>18</lpage>. <pub-id pub-id-type="doi">10.2118/88361-PA</pub-id> </citation>
</ref>
<ref id="B26">
<label>26.</label>
<citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname>Van Rossum</surname>
<given-names>G</given-names>
</name>
<name>
<surname>Drake</surname>
<given-names>FL</given-names>
</name>
</person-group>. <source>Python 3 Reference Manual</source>. <publisher-loc>Scotts Valley, CA</publisher-loc>: <publisher-name>CreateSpace</publisher-name> (<year>2009</year>).</citation>
</ref>
<ref id="B27">
<label>27.</label>
<citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname>Abadi</surname>
<given-names>M</given-names>
</name>
<name>
<surname>Agarwal</surname>
<given-names>A</given-names>
</name>
<name>
<surname>Paul</surname>
<given-names>B</given-names>
</name>
<name>
<surname>Brevdo</surname>
<given-names>E</given-names>
</name>
<name>
<surname>Chen</surname>
<given-names>Z</given-names>
</name>
<name>
<surname>Craig</surname>
<given-names>C</given-names>
</name>
<etal/>
</person-group> <source>Tensor Flow: Large-Scale Machine Learning on Heterogeneous Systems</source>. <publisher-name>TensorFlow</publisher-name> (<year>2015</year>).</citation>
</ref>
<ref id="B28">
<label>28.</label>
<citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname>Chollet</surname>
<given-names>F</given-names>
</name>
</person-group>. <source>Keras</source>. <publisher-name>TensorFlow</publisher-name> (<year>2015</year>).</citation>
</ref>
<ref id="B29">
<label>29.</label>
<citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname>Riach</surname>
<given-names>D</given-names>
</name>
</person-group>. <source>GitHub - NVIDIA/framework-determinism: Providing Determinism in Deep Learning Frameworks</source> (<year>2020</year>).</citation>
</ref>
<ref id="B30">
<label>30.</label>
<citation citation-type="book">
<collab>CMG</collab>. <source>IMEX, Black Oil &#x26; Unconventional Reservoir Simulator</source> (<year>2019</year>).</citation>
</ref>
</ref-list>
<sec id="s10">
<title>Glossary</title>
<def-list>
<def-item>
<term id="G1">
<inline-formula id="inf243">
<mml:math id="m289">
<mml:mi mathvariant="bold">A</mml:mi>
</mml:math>
</inline-formula>
</term>
<def>
<p>Discretized state matrix</p>
</def>
</def-item>
<def-item>
<term id="G2">
<inline-formula id="inf244">
<mml:math id="m290">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold">A</mml:mi>
<mml:mi>c</mml:mi>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula>
</term>
<def>
<p>Continuous state matrix</p>
</def>
</def-item>
<def-item>
<term id="G3">
<inline-formula id="inf245">
<mml:math id="m291">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold">A</mml:mi>
<mml:mi>r</mml:mi>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula>
</term>
<def>
<p>Discretized reduced state matrix</p>
</def>
</def-item>
<def-item>
<term id="G4">
<inline-formula id="inf246">
<mml:math id="m292">
<mml:mi mathvariant="bold">B</mml:mi>
</mml:math>
</inline-formula>
</term>
<def>
<p>Discretized input matrix</p>
</def>
<def>
<p>Formation volume factor</p>
</def>
</def-item>
<def-item>
<term id="G5">
<inline-formula id="inf247">
<mml:math id="m293">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold">B</mml:mi>
<mml:mi>c</mml:mi>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula>
</term>
<def>
<p>Continuous input matrix</p>
</def>
</def-item>
<def-item>
<term id="G6">
<inline-formula id="inf248">
<mml:math id="m294">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold">B</mml:mi>
<mml:mi>r</mml:mi>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula>
</term>
<def>
<p>Discretized reduced input matrix</p>
</def>
</def-item>
<def-item>
<term id="G7">
<bold>BHP</bold>
</term>
<def>
<p>Bottom Hole Pressure</p>
</def>
</def-item>
<def-item>
<term id="G8">
<italic>
<bold>B</bold>
</italic>
</term>
<def>
<p>Discretized input matrix</p>
</def>
<def>
<p>Formation volume factor</p>
</def>
</def-item>
<def-item>
<term id="G9">
<inline-formula id="inf249">
<mml:math id="m295">
<mml:mi mathvariant="bold">C</mml:mi>
</mml:math>
</inline-formula>
</term>
<def>
<p>Discretized output matrix</p>
</def>
</def-item>
<def-item>
<term id="G10">
<inline-formula id="inf250">
<mml:math id="m296">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold">C</mml:mi>
<mml:mi>c</mml:mi>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula>
</term>
<def>
<p>Continuous output matrix</p>
</def>
</def-item>
<def-item>
<term id="G11">
<inline-formula id="inf251">
<mml:math id="m297">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold">C</mml:mi>
<mml:mi>r</mml:mi>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula>
</term>
<def>
<p>Discretized reduced output matrix</p>
</def>
</def-item>
<def-item>
<term id="G12">
<inline-formula id="inf252">
<mml:math id="m298">
<mml:mi mathvariant="bold">D</mml:mi>
</mml:math>
</inline-formula>
</term>
<def>
<p>Discretized feed-through matrix</p>
</def>
</def-item>
<def-item>
<term id="G13">
<inline-formula id="inf253">
<mml:math id="m299">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold">D</mml:mi>
<mml:mi>c</mml:mi>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula>
</term>
<def>
<p>Continuous feed-through matrix</p>
</def>
</def-item>
<def-item>
<term id="G14">
<inline-formula id="inf254">
<mml:math id="m300">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold">D</mml:mi>
<mml:mi>r</mml:mi>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula>
</term>
<def>
<p>Discretized reduced feed-through matrix</p>
</def>
</def-item>
<def-item>
<term id="G15">
<bold>E2C</bold>
</term>
<def>
<p>Embed to Control</p>
</def>
</def-item>
<def-item>
<term id="G16">
<bold>E2CO</bold>
</term>
<def>
<p>Embed to Control and Observe</p>
</def>
</def-item>
<def-item>
<term id="G17">
<inline-formula id="inf255">
<mml:math id="m301">
<mml:mrow>
<mml:msubsup>
<mml:mi>e</mml:mi>
<mml:mi>j</mml:mi>
<mml:mi>p</mml:mi>
</mml:msubsup>
</mml:mrow>
</mml:math>
</inline-formula>
</term>
<def>
<p>Producer well <italic>p</italic> relative error of phase <italic>j</italic> flowrate</p>
</def>
</def-item>
<def-item>
<term id="G18">
<inline-formula id="inf256">
<mml:math id="m302">
<mml:mrow>
<mml:msub>
<mml:mi>E</mml:mi>
<mml:mi>o</mml:mi>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula>
</term>
<def>
<p>Relative oil flow rate error for all producers</p>
</def>
</def-item>
<def-item>
<term id="G19">
<inline-formula id="inf257">
<mml:math id="m303">
<mml:mrow>
<mml:msub>
<mml:mi>E</mml:mi>
<mml:mi>v</mml:mi>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula>
</term>
<def>
<p>Relative error for state variable&#x20;<italic>v</italic>
</p>
</def>
</def-item>
<def-item>
<term id="G20">
<inline-formula id="inf258">
<mml:math id="m304">
<mml:mrow>
<mml:msub>
<mml:mi>E</mml:mi>
<mml:mi>w</mml:mi>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula>
</term>
<def>
<p>Relative water flow rate error for all producers</p>
</def>
</def-item>
<def-item>
<term id="G21">
<inline-formula id="inf259">
<mml:math id="m305">
<mml:mrow>
<mml:msub>
<mml:mi>E</mml:mi>
<mml:mrow>
<mml:mtext>BHP</mml:mtext>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula>
</term>
<def>
<p>Relative bottom hole pressure error for all injectors</p>
</def>
</def-item>
<def-item>
<term id="G22">
<inline-formula id="inf260">
<mml:math id="m306">
<mml:mrow>
<mml:msubsup>
<mml:mi>e</mml:mi>
<mml:mrow>
<mml:mtext>BHP</mml:mtext>
</mml:mrow>
<mml:mi>i</mml:mi>
</mml:msubsup>
</mml:mrow>
</mml:math>
</inline-formula>
</term>
<def>
<p>Injector well <italic>i</italic> relative error of bottom hole pressure</p>
</def>
</def-item>
<def-item>
<term id="G23">
<inline-formula id="inf261">
<mml:math id="m307">
<mml:mrow>
<mml:msub>
<mml:mi>E</mml:mi>
<mml:mrow>
<mml:mtext>cum</mml:mtext>
<mml:mo>,</mml:mo>
<mml:mi>j</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula>
</term>
<def>
<p>Relative cumulative phase <italic>j</italic> flow rate error for all producers</p>
</def>
</def-item>
<def-item>
<term id="G24">
<inline-formula id="inf262">
<mml:math id="m308">
<mml:mrow>
<mml:msubsup>
<mml:mi>e</mml:mi>
<mml:mrow>
<mml:mtext>cum</mml:mtext>
<mml:mo>,</mml:mo>
<mml:mi>j</mml:mi>
</mml:mrow>
<mml:mi>p</mml:mi>
</mml:msubsup>
</mml:mrow>
</mml:math>
</inline-formula>
</term>
<def>
<p>Producer well <italic>p</italic> relative error for the phase <italic>j</italic> cumulative flow&#x20;rate</p>
</def>
</def-item>
<def-item>
<term id="G25">
<italic>
<bold>h</bold>
</italic>
</term>
<def>
<p>Height of the well grid&#x20;block</p>
</def>
</def-item>
<def-item>
<term id="G26">
<bold>HFS</bold>
</term>
<def>
<p>High Fidelity Simulation (Numerical Simulation)</p>
</def>
</def-item>
<def-item>
<term id="G27">
<italic>
<bold>k</bold>
</italic>
</term>
<def>
<p>Permeability</p>
</def>
</def-item>
<def-item>
<term id="G28">
<inline-formula id="inf263">
<mml:math id="m309">
<mml:mrow>
<mml:msub>
<mml:mi>k</mml:mi>
<mml:mrow>
<mml:mi>r</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>j</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula>
</term>
<def>
<p>Relative permeability to the phase&#x20;<italic>j</italic>
</p>
</def>
</def-item>
<def-item>
<term id="G29">
<inline-formula id="inf264">
<mml:math id="m310">
<mml:mrow>
<mml:msub>
<mml:mi>l</mml:mi>
<mml:mi>x</mml:mi>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula>
</term>
<def>
<p>Dimension of the state on the original&#x20;space</p>
</def>
</def-item>
<def-item>
<term id="G30">
<inline-formula id="inf265">
<mml:math id="m311">
<mml:mrow>
<mml:msub>
<mml:mi>l</mml:mi>
<mml:mi>z</mml:mi>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula>
</term>
<def>
<p>Dimension of the state on the reduced&#x20;space</p>
</def>
</def-item>
<def-item>
<term id="G31">
<inline-formula id="inf266">
<mml:math id="m312">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="normal">&#x2112;</mml:mi>
<mml:mrow>
<mml:mtext>flux</mml:mtext>
<mml:mo>,</mml:mo>
<mml:mtext>pred</mml:mtext>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula>
</term>
<def>
<p>Prediction Flux Loss Function</p>
</def>
</def-item>
<def-item>
<term id="G32">
<inline-formula id="inf267">
<mml:math id="m313">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="normal">&#x2112;</mml:mi>
<mml:mrow>
<mml:mtext>flux</mml:mtext>
<mml:mo>,</mml:mo>
<mml:mtext>rec</mml:mtext>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula>
</term>
<def>
<p>Reconstruction Flux Loss Function</p>
</def>
</def-item>
<def-item>
<term id="G33">
<inline-formula id="inf268">
<mml:math id="m314">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="normal">&#x2112;</mml:mi>
<mml:mrow>
<mml:mtext>flux</mml:mtext>
<mml:mn>2</mml:mn>
<mml:mtext>Ph</mml:mtext>
<mml:mo>,</mml:mo>
<mml:mtext>pred</mml:mtext>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula>
</term>
<def>
<p>Prediction Two phase Flux Loss Function</p>
</def>
</def-item>
<def-item>
<term id="G34">
<inline-formula id="inf269">
<mml:math id="m315">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="normal">&#x2112;</mml:mi>
<mml:mrow>
<mml:mtext>flux</mml:mtext>
<mml:mn>2</mml:mn>
<mml:mtext>Ph</mml:mtext>
<mml:mo>,</mml:mo>
<mml:mtext>rec</mml:mtext>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula>
</term>
<def>
<p>Reconstruction Two phase Flux Loss Function</p>
</def>
</def-item>
<def-item>
<term id="G35">
<inline-formula id="inf270">
<mml:math id="m316">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="normal">&#x2112;</mml:mi>
<mml:mrow>
<mml:mtext>flux</mml:mtext>
<mml:mn>2</mml:mn>
<mml:mtext>Ph</mml:mtext>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula>
</term>
<def>
<p>Two phase Flux Loss Function</p>
</def>
</def-item>
<def-item>
<term id="G36">
<inline-formula id="inf271">
<mml:math id="m317">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="normal">&#x2112;</mml:mi>
<mml:mrow>
<mml:mtext>flux</mml:mtext>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula>
</term>
<def>
<p>Flux Loss Function</p>
</def>
</def-item>
<def-item>
<term id="G37">
<inline-formula id="inf272">
<mml:math id="m318">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="normal">&#x2112;</mml:mi>
<mml:mrow>
<mml:mtext>pred</mml:mtext>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula>
</term>
<def>
<p>Prediction Loss Function</p>
</def>
</def-item>
<def-item>
<term id="G38">
<inline-formula id="inf273">
<mml:math id="m319">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="normal">&#x2112;</mml:mi>
<mml:mrow>
<mml:mtext>rec</mml:mtext>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula>
</term>
<def>
<p>Reconstruction Loss Function</p>
</def>
</def-item>
<def-item>
<term id="G39">
<inline-formula id="inf274">
<mml:math id="m320">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="normal">&#x2112;</mml:mi>
<mml:mrow>
<mml:mtext>i</mml:mtext>
<mml:mo>_</mml:mo>
<mml:mtext>pres</mml:mtext>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula>
</term>
<def>
<p>Loss function of the injectors gridblock pressure</p>
</def>
</def-item>
<def-item>
<term id="G40">
<inline-formula id="inf275">
<mml:math id="m321">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="normal">&#x2112;</mml:mi>
<mml:mrow>
<mml:mtext>i</mml:mtext>
<mml:mo>_</mml:mo>
<mml:mtext>sat</mml:mtext>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula>
</term>
<def>
<p>Loss function of the injectors gridblock saturation</p>
</def>
</def-item>
<def-item>
<term id="G41">
<inline-formula id="inf276">
<mml:math id="m322">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="normal">&#x2112;</mml:mi>
<mml:mrow>
<mml:mtext>p</mml:mtext>
<mml:mo>_</mml:mo>
<mml:mtext>pres</mml:mtext>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula>
</term>
<def>
<p>Loss function of the producers gridblock pressure</p>
</def>
</def-item>
<def-item>
<term id="G42">
<inline-formula id="inf277">
<mml:math id="m323">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="normal">&#x2112;</mml:mi>
<mml:mrow>
<mml:mtext>p</mml:mtext>
<mml:mo>_</mml:mo>
<mml:mtext>sat</mml:mtext>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula>
</term>
<def>
<p>Loss function of the producers gridblock saturation</p>
</def>
</def-item>
<def-item>
<term id="G43">
<inline-formula id="inf278">
<mml:math id="m324">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="normal">&#x2112;</mml:mi>
<mml:mrow>
<mml:mtext>trans</mml:mtext>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula>
</term>
<def>
<p>Transition Loss Function</p>
</def>
</def-item>
<def-item>
<term id="G44">
<inline-formula id="inf279">
<mml:math id="m325">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="normal">&#x2112;</mml:mi>
<mml:mrow>
<mml:mtext>well</mml:mtext>
<mml:mo>_</mml:mo>
<mml:mtext>data</mml:mtext>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula>
</term>
<def>
<p>Well data loss function for proposition&#x20;2</p>
</def>
</def-item>
<def-item>
<term id="G45">
<inline-formula id="inf280">
<mml:math id="m326">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="normal">&#x2112;</mml:mi>
<mml:mrow>
<mml:mtext>well</mml:mtext>
<mml:mo>_</mml:mo>
<mml:mtext>data</mml:mtext>
<mml:mn>3</mml:mn>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula>
</term>
<def>
<p>Well data loss function for proposition&#x20;3</p>
</def>
</def-item>
<def-item>
<term id="G46">
<bold>&#x3bc;</bold>
</term>
<def>
<p>Viscosity</p>
</def>
</def-item>
<def-item>
<term id="G47">
<bold>MOR</bold>
</term>
<def>
<p>Model Order Reduction</p>
</def>
</def-item>
<def-item>
<term id="G48">
<inline-formula id="inf281">
<mml:math id="m327">
<mml:mrow>
<mml:msub>
<mml:mi>n</mml:mi>
<mml:mi>i</mml:mi>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula>
</term>
<def>
<p>Number of injector&#x20;wells</p>
</def>
</def-item>
<def-item>
<term id="G49">
<inline-formula id="inf282">
<mml:math id="m328">
<mml:mrow>
<mml:msub>
<mml:mi>n</mml:mi>
<mml:mi>p</mml:mi>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula>
</term>
<def>
<p>Number of producer&#x20;wells</p>
</def>
</def-item>
<def-item>
<term id="G50">
<italic>
<bold>P</bold>
</italic>
</term>
<def>
<p>Pressure</p>
</def>
</def-item>
<def-item>
<term id="G51">
<inline-formula id="inf283">
<mml:math id="m329">
<mml:mrow>
<mml:mo>&#x2207;</mml:mo>
<mml:mi>p</mml:mi>
</mml:mrow>
</mml:math>
</inline-formula>
</term>
<def>
<p>Pressure gradient of adjacent grid blocks</p>
</def>
</def-item>
<def-item>
<term id="G52">POD</term>
<def>
<p>Proper Orthogonal Decomposition</p>
</def>
</def-item>
<def-item>
<term id="G53">
<bold>&#x3d5;</bold>
</term>
<def>
<p>Porosity</p>
</def>
</def-item>
<def-item>
<term id="G54">
<bold>&#x3c1;</bold>
</term>
<def>
<p>Density</p>
</def>
</def-item>
<def-item>
<term id="G55">
<inline-formula id="inf284">
<mml:math id="m330">
<mml:mrow>
<mml:msub>
<mml:mi>q</mml:mi>
<mml:mrow>
<mml:mtext>inj</mml:mtext>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula>
</term>
<def>
<p>Injection Water Rate</p>
</def>
</def-item>
<def-item>
<term id="G56">
<inline-formula id="inf285">
<mml:math id="m331">
<mml:mrow>
<mml:msub>
<mml:mi>q</mml:mi>
<mml:mi>o</mml:mi>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula>
</term>
<def>
<p>Oil Rate</p>
</def>
</def-item>
<def-item>
<term id="G57">
<inline-formula id="inf286">
<mml:math id="m332">
<mml:mrow>
<mml:msub>
<mml:mi>q</mml:mi>
<mml:mi>w</mml:mi>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula>
</term>
<def>
<p>Produced Water Rate</p>
</def>
</def-item>
<def-item>
<term id="G58">
<inline-formula id="inf287">
<mml:math id="m333">
<mml:mrow>
<mml:msub>
<mml:mi>r</mml:mi>
<mml:mi>o</mml:mi>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula>
</term>
<def>
<p>Well gridblock equivalent radius</p>
</def>
</def-item>
<def-item>
<term id="G59">
<inline-formula id="inf288">
<mml:math id="m334">
<mml:mrow>
<mml:msub>
<mml:mi>r</mml:mi>
<mml:mi>w</mml:mi>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula>
</term>
<def>
<p>Well bore radius</p>
</def>
</def-item>
<def-item>
<term id="G60">
<italic>
<bold>S</bold>
</italic>
</term>
<def>
<p>Saturation</p>
</def>
</def-item>
<def-item>
<term id="G61">
<inline-formula id="inf289">
<mml:math id="m335">
<mml:mrow>
<mml:msub>
<mml:mi>S</mml:mi>
<mml:mi>w</mml:mi>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula>
</term>
<def>
<p>Water Saturation</p>
</def>
</def-item>
<def-item>
<term id="G62">
<bold>SKIN</bold>
</term>
<def>
<p>Skin Factor</p>
</def>
</def-item>
<def-item>
<term id="G63">
<bold>TPWL</bold>
</term>
<def>
<p>Trajectory Piecewise Linearization</p>
</def>
</def-item>
<def-item>
<term id="G64">
<italic>
<bold>u</bold>
</italic>
</term>
<def>
<p>System input or control</p>
</def>
</def-item>
<def-item>
<term id="G65">
<bold>WI</bold>
</term>
<def>
<p>Well&#x20;index</p>
</def>
</def-item>
<def-item>
<term id="G66">
<italic>
<bold>x</bold>
</italic>
</term>
<def>
<p>State on original&#x20;space</p>
</def>
</def-item>
<def-item>
<term id="G67">
<inline-formula id="inf290">
<mml:math id="m336">
<mml:mrow>
<mml:mover accent="true">
<mml:mi>x</mml:mi>
<mml:mo>&#x2d9;</mml:mo>
</mml:mover>
</mml:mrow>
</mml:math>
</inline-formula>
</term>
<def>
<p>State time derivative</p>
</def>
</def-item>
<def-item>
<term id="G68">
<inline-formula id="inf291">
<mml:math id="m337">
<mml:mrow>
<mml:mover accent="true">
<mml:mi>x</mml:mi>
<mml:mo>&#x5e;</mml:mo>
</mml:mover>
</mml:mrow>
</mml:math>
</inline-formula>
</term>
<def>
<p>Estimated state on original&#x20;space</p>
</def>
</def-item>
<def-item>
<term id="G69">
<italic>
<bold>y</bold>
</italic>
</term>
<def>
<p>System output</p>
</def>
</def-item>
<def-item>
<term id="G70">
<inline-formula id="inf292">
<mml:math id="m338">
<mml:mrow>
<mml:mover accent="true">
<mml:mi>y</mml:mi>
<mml:mo>&#x5e;</mml:mo>
</mml:mover>
</mml:mrow>
</mml:math>
</inline-formula>
</term>
<def>
<p>Estimated observed&#x20;data</p>
</def>
</def-item>
<def-item>
<term id="G71">
<inline-formula id="inf293">
<mml:math id="m339">
<mml:mrow>
<mml:msub>
<mml:mi>&#x3b3;</mml:mi>
<mml:mrow>
<mml:mtext>flux</mml:mtext>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula>
</term>
<def>
<p>Weight applied to <inline-formula id="inf294">
<mml:math id="m340">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="normal">&#x2112;</mml:mi>
<mml:mrow>
<mml:mtext>flux</mml:mtext>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula>
</p>
</def>
</def-item>
<def-item>
<term id="G72">
<inline-formula id="inf295">
<mml:math id="m341">
<mml:mrow>
<mml:msub>
<mml:mi>&#x3b3;</mml:mi>
<mml:mrow>
<mml:mtext>flux</mml:mtext>
<mml:mn>2</mml:mn>
<mml:mtext>Ph</mml:mtext>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula>
</term>
<def>
<p>Weight applied to <inline-formula id="inf296">
<mml:math id="m342">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="normal">&#x2112;</mml:mi>
<mml:mrow>
<mml:mtext>flux</mml:mtext>
<mml:mn>2</mml:mn>
<mml:mtext>Ph</mml:mtext>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula>
</p>
</def>
</def-item>
<def-item>
<term id="G73">
<inline-formula id="inf297">
<mml:math id="m343">
<mml:mrow>
<mml:msub>
<mml:mi>&#x3b3;</mml:mi>
<mml:mrow>
<mml:mtext>i</mml:mtext>
<mml:mo>_</mml:mo>
<mml:mtext>pres</mml:mtext>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula>
</term>
<def>
<p>Weight applied to <inline-formula id="inf298">
<mml:math id="m344">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="normal">&#x2112;</mml:mi>
<mml:mrow>
<mml:mtext>i</mml:mtext>
<mml:mo>_</mml:mo>
<mml:mtext>pres</mml:mtext>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula>
</p>
</def>
</def-item>
<def-item>
<term id="G74">
<inline-formula id="inf299">
<mml:math id="m345">
<mml:mrow>
<mml:msub>
<mml:mi>&#x3b3;</mml:mi>
<mml:mrow>
<mml:mtext>i</mml:mtext>
<mml:mo>_</mml:mo>
<mml:mtext>sat</mml:mtext>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula>
</term>
<def>
<p>Weight applied to <inline-formula id="inf300">
<mml:math id="m346">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="normal">&#x2112;</mml:mi>
<mml:mrow>
<mml:mtext>i</mml:mtext>
<mml:mo>_</mml:mo>
<mml:mtext>sat</mml:mtext>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula>
</p>
</def>
</def-item>
<def-item>
<term id="G75">
<inline-formula id="inf301">
<mml:math id="m347">
<mml:mrow>
<mml:msub>
<mml:mi>&#x3b3;</mml:mi>
<mml:mrow>
<mml:mtext>p</mml:mtext>
<mml:mo>_</mml:mo>
<mml:mtext>pres</mml:mtext>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula>
</term>
<def>
<p>Weight applied to <inline-formula id="inf302">
<mml:math id="m348">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="normal">&#x2112;</mml:mi>
<mml:mrow>
<mml:mtext>p</mml:mtext>
<mml:mo>_</mml:mo>
<mml:mtext>pres</mml:mtext>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula>
</p>
</def>
</def-item>
<def-item>
<term id="G76">
<inline-formula id="inf303">
<mml:math id="m349">
<mml:mrow>
<mml:msub>
<mml:mi>&#x3b3;</mml:mi>
<mml:mrow>
<mml:mtext>p</mml:mtext>
<mml:mo>_</mml:mo>
<mml:mtext>sat</mml:mtext>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula>
</term>
<def>
<p>Weight applied to <inline-formula id="inf304">
<mml:math id="m350">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="normal">&#x2112;</mml:mi>
<mml:mrow>
<mml:mtext>p</mml:mtext>
<mml:mo>_</mml:mo>
<mml:mtext>sat</mml:mtext>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula>
</p>
</def>
</def-item>
<def-item>
<term id="G77">
<inline-formula id="inf305">
<mml:math id="m351">
<mml:mrow>
<mml:msub>
<mml:mi>&#x3b3;</mml:mi>
<mml:mrow>
<mml:mtext>well</mml:mtext>
<mml:mo>_</mml:mo>
<mml:mtext>data</mml:mtext>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula>
</term>
<def>
<p>Weight applied to <inline-formula id="inf306">
<mml:math id="m352">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="normal">&#x2112;</mml:mi>
<mml:mrow>
<mml:mtext>well</mml:mtext>
<mml:mo>_</mml:mo>
<mml:mtext>data</mml:mtext>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula>
</p>
</def>
</def-item>
<def-item>
<term id="G78">
<inline-formula id="inf307">
<mml:math id="m353">
<mml:mrow>
<mml:msub>
<mml:mi>&#x3b3;</mml:mi>
<mml:mrow>
<mml:mtext>well</mml:mtext>
<mml:mo>_</mml:mo>
<mml:mtext>data</mml:mtext>
<mml:mn>3</mml:mn>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula>
</term>
<def>
<p>Weight applied to <inline-formula id="inf308">
<mml:math id="m354">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="normal">&#x2112;</mml:mi>
<mml:mrow>
<mml:mtext>well</mml:mtext>
<mml:mo>_</mml:mo>
<mml:mtext>data</mml:mtext>
<mml:mn>3</mml:mn>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula>
</p>
</def>
</def-item>
<def-item>
<term id="G79">
<italic>
<bold>z</bold>
</italic>
</term>
<def>
<p>State on latent&#x20;space</p>
</def>
</def-item>
<def-item>
<term id="G80">
<inline-formula id="inf309">
<mml:math id="m355">
<mml:mrow>
<mml:mover accent="true">
<mml:mi>z</mml:mi>
<mml:mo>&#x5e;</mml:mo>
</mml:mover>
</mml:mrow>
</mml:math>
</inline-formula>
</term>
<def>
<p>Estimated state on latent&#x20;space</p>
</def>
</def-item>
</def-list>
</sec>
</back>
</article>