void step_rk2_mp(struct grid *g, double dt, struct parList *pars) { // The Midpoint RK2 Method. copy_to_rk(g); substep(g, 0.5, 0.5, 0.5*dt, pars); g->t += 0.5*dt; update_cons(g, 0.0, 1.0); substep(g, 0.0, 1.0, dt, pars); g->t += 0.5*dt; }
void step_rk2_tvd(struct grid *g, double dt, struct parList *pars) { // The TVD RK2 Method by Gottlied & Shu double RK; RK = 1.0; copy_to_rk(g); substep(g, RK, 1.0-RK, RK*dt, pars); RK = 0.5; update_cons(g, RK, 1.0-RK); substep(g, RK, 1.0-RK, RK*dt, pars); g->t += dt; }
void MultiThreadStepper::substepDone(StepperTask* ownerTask) { mScene->fetchResults(true); PxReal delta = (PxReal)mTimer.getElapsedSeconds(); mSimulationTime += delta; mSample->onSubstep(mSubStepSize); if(mCurrentSubStep>=mNbSubSteps) { mSync->set(); } else { StepperTask &s = ownerTask == &mCompletion0 ? mCompletion1 : mCompletion0; s.setContinuation(*mScene->getTaskManager(), NULL); mCurrentSubStep++; mTimer.getElapsedSeconds(); substep(s); // after the first substep, completions run freely s.removeReference(); } }
bool MultiThreadStepper::advance(PxScene* scene, PxReal dt, void* scratchBlock, PxU32 scratchBlockSize) { mScratchBlock = scratchBlock; mScratchBlockSize = scratchBlockSize; if(!mSync) mSync = SAMPLE_NEW(PsSyncAlloc); substepStrategy(dt, mNbSubSteps, mSubStepSize); if(mNbSubSteps == 0) return false; mScene = scene; mSync->reset(); mCurrentSubStep = 1; mCompletion0.setContinuation(*mScene->getTaskManager(), NULL); mSimulationTime = 0.0f; mTimer.getElapsedSeconds(); // take first substep substep(mCompletion0); mFirstCompletionPending = true; return true; }
void step_rk3_tvd(struct grid *g, double dt, struct parList *pars) { // The TVD RK3 Method by Shu & Osher double RK; RK = 1.0; copy_to_rk(g); substep(g, RK, 1.0-RK, RK*dt, pars); RK = 0.25; update_cons(g, RK, 1.0-RK); substep(g, RK, 1.0-RK, RK*dt, pars); RK = 2.0/3.0; update_cons(g, RK, 1.0-RK); substep(g, RK, 1.0-RK, RK*dt, pars); g->t += dt; }
void step_fe(struct grid *g, double dt, struct parList *pars) { substep(g, 1.0, 0.0, dt, pars); g->t += dt; }