Sumo grid data - #14547
Closed
jorgenherje wants to merge 6 commits into
Closed
Conversation
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>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Adds grid data from Sumo. Fetch Sumo grid data using ri-cloud-api.