Skip to content

Sumo grid data - #14547

Closed
jorgenherje wants to merge 6 commits into
OPM:devfrom
jorgenherje:ri-cloud-api-sumo-data-grid
Closed

Sumo grid data#14547
jorgenherje wants to merge 6 commits into
OPM:devfrom
jorgenherje:ri-cloud-api-sumo-data-grid

Conversation

@jorgenherje

@jorgenherje jorgenherje commented Aug 18, 2026

Copy link
Copy Markdown
Collaborator

Adds grid data from Sumo. Fetch Sumo grid data using ri-cloud-api.

jorgenherje and others added 5 commits August 18, 2026 12:57
Grid geometry and grid properties can now be read from Sumo through the local ri-cloud-api service, alongside the summary data that was already there. A Sumo data source can be turned into a grid ensemble, whose cases load their geometry and their property time steps on demand.

Downloaded property blobs are held in a cache bounded by total size, so a long session on a large case cannot grow without limit, and the time steps of a property are fetched in concurrent batches rather than one round trip at a time.

Computing the mobile volume weighted mean is made optional, and is off for Sumo grid ensembles. It reads PORV and the saturation of every phase, so opening a case with SOIL displayed pulled down several properties nobody had asked for.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Blocking Sumo requests waited on a nested event loop on the GUI thread. That let the view update code re-enter a load that was already running, and the same grid property was downloaded twice, once by each pass.

Transfers now run on a thread of their own, with its own network manager, and the calling thread waits on a semaphore without dispatching events, so nothing can re-enter the load while it runs. Authentication stays on the GUI thread, as the OAuth flow opens a browser and its objects live there.

Log messages written from the transfer thread were being dropped, as the message panel may only be touched from the thread owning it. They are handed over to that thread instead, and delivered while the request they describe is still the most recent thing that happened, so the log does not read out of order.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
RiaSumoConnector had grown to know about every kind of Sumo data, holding the requests, the parsing and the results of all of them in one class of some 1600 lines.

It now keeps only what the connection itself needs: authentication, the transfer thread and the blob transfers. What is asked for is moved into one delegate per kind of data, RiaSumoExplore for what Sumo holds, RiaSumoGrid for grid data and RiaSumoSummary for summary data, each reached through the connector that owns it.

The delegates return their results directly rather than leaving them in shared state for the caller to pick up afterwards, which was the source of much of the bookkeeping. The blob cache is extracted into RiaSumoBlobCache and given unit tests, the only part of this area a test can reach without a live connection.

Also fixes the Sumo dev dialog deleting the connector it was handed, which is shared with the rest of the application.

Clear the dependent Sumo selections and options when the asset or case changes

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
A summary plot reads its curve values one curve at a time, so a plot with several curves made one blocking request after another. The service aggregates a vector and stores it back in Sumo, so the first request for a vector that has not been aggregated yet is slow, and fetching serially cost the sum of those aggregations rather than the slowest of them.

A plot window now collects the addresses its plots are about to read and hands them to each ensemble in one go, through a new RimSummaryEnsemble::prefetchSummaryData that does nothing by default. The Sumo ensemble requests them together, so the wait is the slowest vector rather than the sum, and the plot code needs no knowledge of Sumo.

Dropping a vector into a plot stopped the application until the data had been fetched, even though the vectors themselves were already being loaded without waiting.

Those requests are made without waiting for them. The curves are drawn with whatever has arrived, and each vector is taken in as it lands and the plots using it redrawn, so the vectors that are ready appear while the rest are still being aggregated. A vector on its way is never requested a second time and reports having no data yet, which is what lets the curves that are ready draw.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Show progress while browsing Sumo

Loading grid properties, ensemble parameters or summary vectors could leave the application sitting still with nothing saying why.

The blocking transfers show the standard caf::ProgressInfo dialog. It is created where the waiting happens, so a single place covers every blocking Sumo transfer, and it is shown without the usual delay: a delayed dialog is put up by a timer, and the waiting thread dispatches no events, so it would never appear for exactly the requests slow enough to want it.

Summary vectors are loaded without waiting and so have no scope to put a dialog in. A plot waiting for data shows a spinner in its corner instead, asked for through a new RimSummaryEnsemble::isSummaryDataPending, and each subplot drops its spinner as its own vectors arrive.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@jorgenherje jorgenherje self-assigned this Aug 18, 2026
@jorgenherje
jorgenherje requested a review from magnesj August 18, 2026 12:11
@jorgenherje jorgenherje added the Enhancement An addition that can be observed by the user label Aug 18, 2026
@jorgenherje jorgenherje changed the title Sumo grid data and async summary fetching Sumo grid data Aug 19, 2026
@magnesj magnesj closed this Aug 21, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Enhancement An addition that can be observed by the user

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants