equinor / flownet

FlowNet - Data-Driven Reservoir Predictions
GNU General Public License v3.0
63 stars 29 forks source link

Add option to distribute volume according to geometric distribution #356

Closed wouterjdb closed 3 years ago

wouterjdb commented 3 years ago

This PR introduces the option to distribute the FlowNet model volume based on the geometrical distribution in the original model.


Contributor checklist

wouterjdb commented 3 years ago

Comparison of the distribution in the original and new distribution method:

image

Some observations:

olwijn commented 3 years ago

Could this approach to volume distribution perhaps be taken one step further and be used to distribute the flow tube volume over the grid cells of each flow tube? If so, volumes of flow tube cells that connect to or are close to wells would get low volume (since there are many cells from other flow tubes nearby) while cells that arefar away from wells would receive a larger volume.

wouterjdb commented 3 years ago

Could this approach to volume distribution perhaps be taken one step further and be used to distribute the flow tube volume over the grid cells of each flow tube? If so, volumes of flow tube cells that connect to or are close to wells would get low volume (since there are many cells from other flow tubes nearby) while cells that arefar away from wells would receive a larger volume.

That is an interesting thought 👍 - and yes, I think it could be done.

wouterjdb commented 3 years ago

@olwijn I tried simply expanding the algorithm to a per cell setting. This works in some areas as expected (see increasing volume further away from the well node):

image

However, you already see some problems in the back. Because of the resolution of the original model not all FlowNet gridcells now get assigned some volume, leading to many holes in the model. Also, at the flownet well connection only one (or none, if unlucky) cell get volume assigned - so the wells are now poorly connected.

image

I think this is a really nice idea, but it requires more work to implement it. Therefore I suggest that I do not implement it here and now but we make an issue out of it to be taken at a later time (could be soon - be at least separate).

olwijn commented 3 years ago

an alternative could perhaps be to first assign volumes to flow tubes, as you have already done, and then to somehow distribute that volume over the flow tube cells based on the distance to the end points?

wouterjdb commented 3 years ago

an alternative could perhaps be to first assign volumes to flow tubes, as you have already done, and then to somehow distribute that volume over the flow tube cells based on the distance to the end points?

Let's continue this discussion in #358.

olelod commented 3 years ago

LGTM!

wouterjdb commented 3 years ago

I tested the algorithm but I'm getting lower volumes then I would like to see:

image

and the (low res) FlowNet that has distributed that volume (bulk volume multiplier range 0.9-1.1):

image

So I'm only getting ~75% of the original volume. I think this is a result of FlowNet tubes being remove when they, for example, go through non-reservoir. To be able to keep the volume the same from the original to the flownet model the algorithm should not distribute volume to tubes that later on are deactivate (overwritten with PORV = 0).

NB. I'd guess that the low resolution of the FlowNet exaggerates this phenomenon, but we should still consider how to handle this properly. In the tube-length distribution method this problem also occurs but might not be as problematic as the volume you start from is the bulk volume of the convex hull of well connections and is already a very rough estimate.

Let's wait ⌛ with merging before this is fixed.

edubarrosTNO commented 3 years ago

To add to this discussion, here are some thoughts that @olwijn and I had today: Even if we get a good solution to distribute the pore volume within the FlowNet tubes, we might still have issues in matching the volume of oil-water-gas initially in place (i.e. we have been observing FOIP volumes pretty much off in our current results).

A possible explanation relates to the fact that we rely on initialization by equilibration in the reservoir simulator. Just like we are with this PR aiming at distributing PORV across the cells / tubes of FlowNet, we must check if the distribution of fluid volumes across tubes is also done properly, otherwise we should control the initialization of saturations within FlowNet and not using the EQUIL keyword in OPM-Flow / Eclipse.

edubarrosTNO commented 3 years ago

PS: the comment above is based on the fact that my tests with the code of this PR branch did not show to have any impact on the offset of FOIP volumes that we have been observing in the Norne example

olelod commented 3 years ago

So I'm only getting ~75% of the original volume. I think this is a result of FlowNet tubes being remove when they, for example, go through non-reservoir. To be able to keep the volume the same from the original to the flownet model the algorithm should not distribute volume to tubes that later on are deactivate (overwritten with PORV = 0).

The non-reservoir part should not be a problem, I think, since we drop those start/end points before we generate the FlowNet network. The same goes for angles. So I guess the only removal/deactivation happening after generation of the FlowNet is in the rendering of the realizations (where permx < min_permeability leads to PORV = 0). You see the same thing if you run without defining min_permeability?

wouterjdb commented 3 years ago

During the assignment of volume to tubes, volume is also assigned to the inactive grid cells. These cells should not be assigned volume.

Potential problem areas: https://github.com/wouterjdb/flownet/blob/f87804345ce8531055405591115bc2045b7bb3a4/src/flownet/data/from_flow.py#L420

wouterjdb commented 3 years ago

During the assignment of volume to tubes, volume is also assigned to the inactive grid cells. These cells should not be assigned volume.

Potential problem areas: https://github.com/wouterjdb/flownet/blob/f87804345ce8531055405591115bc2045b7bb3a4/src/flownet/data/from_flow.py#L420

This is now fixed. Also a correction for NTG has been added.

wouterjdb commented 3 years ago

Tested again:

image

PORV now nearly identical when the bulk volume multiplier is set to 1. The mismatch is now only due to differences in PORO; that is as expected.