/// Called once before each time step. /// \param[in] timer simulation timer void prepareStep(const SimulatorTimerInterface& timer) { // update the solution variables in ebos if ( timer.lastStepFailed() ) { ebosSimulator_.model().updateFailed(); } else { ebosSimulator_.model().advanceTimeLevel(); } // set the timestep size and episode index for ebos explicitly. ebos needs to // know the report step/episode index because of timing dependend data // despide the fact that flow uses its own time stepper. (The length of the // episode does not matter, though.) ebosSimulator_.setTime(timer.simulationTimeElapsed()); ebosSimulator_.setTimeStepSize(timer.currentStepLength()); ebosSimulator_.problem().beginTimeStep(); unsigned numDof = ebosSimulator_.model().numGridDof(); wasSwitched_.resize(numDof); std::fill(wasSwitched_.begin(), wasSwitched_.end(), false); if (param_.update_equations_scaling_) { std::cout << "equation scaling not suported yet" << std::endl; //updateEquationsScaling(); } }
void BlackoilMultiSegmentModel<Grid>:: prepareStep(const SimulatorTimerInterface& timer, const ReservoirState& reservoir_state, const WellState& well_state) { const double dt = timer.currentStepLength(); pvdt_ = geo_.poreVolume() / dt; if (active_[Gas]) { updatePrimalVariableFromState(reservoir_state); } const int nw = wellsMultiSegment().size(); if ( !msWellOps().has_multisegment_wells ) { wellModel().segVDt() = V::Zero(nw); return; } const int nseg_total = well_state.numSegments(); std::vector<double> segment_volume; segment_volume.reserve(nseg_total); for (int w = 0; w < nw; ++w) { WellMultiSegmentConstPtr well = wellsMultiSegment()[w]; const std::vector<double>& segment_volume_well = well->segmentVolume(); segment_volume.insert(segment_volume.end(), segment_volume_well.begin(), segment_volume_well.end()); } assert(int(segment_volume.size()) == nseg_total); wellModel().segVDt() = Eigen::Map<V>(segment_volume.data(), nseg_total) / dt; }
AdaptiveSimulatorTimer:: AdaptiveSimulatorTimer( const SimulatorTimerInterface& timer, const double lastStepTaken, const double maxTimeStep ) : start_date_time_( timer.startDateTime() ) , start_time_( timer.simulationTimeElapsed() ) , total_time_( start_time_ + timer.currentStepLength() ) , report_step_( timer.reportStepNum() ) , max_time_step_( maxTimeStep ) , current_time_( start_time_ ) , dt_( 0.0 ) , current_step_( 0 ) , steps_() { // reserve memory for sub steps steps_.reserve( 10 ); // set appropriate value for dt_ provideTimeStepEstimate( lastStepTaken ); }