Lines Matching refs:ts

19 static PetscErrorCode TSReset_RK_MultirateNonsplit(TS ts)  in TSReset_RK_MultirateNonsplit()  argument
21 TS_RK *rk = (TS_RK *)ts->data; in TSReset_RK_MultirateNonsplit()
30 static PetscErrorCode TSInterpolate_RK_MultirateNonsplit(TS ts, PetscReal itime, Vec X) in TSInterpolate_RK_MultirateNonsplit() argument
32 TS_RK *rk = (TS_RK *)ts->data; in TSInterpolate_RK_MultirateNonsplit()
34 PetscReal h = ts->time_step; in TSInterpolate_RK_MultirateNonsplit()
40 …PetscCheck(B, PetscObjectComm((PetscObject)ts), PETSC_ERR_SUP, "TSRK %s does not have an interpola… in TSInterpolate_RK_MultirateNonsplit()
53 static PetscErrorCode TSStepRefine_RK_MultirateNonsplit(TS ts) in TSStepRefine_RK_MultirateNonsplit() argument
56 TS_RK *rk = (TS_RK *)ts->data; in TSStepRefine_RK_MultirateNonsplit()
64 PetscReal t = ts->ptime, h = ts->time_step; in TSStepRefine_RK_MultirateNonsplit()
67 PetscCall(VecDuplicate(ts->vec_sol, &vec_fast)); in TSStepRefine_RK_MultirateNonsplit()
73 …PetscCall(TSInterpolate_RK_MultirateNonsplit(ts, t + k * h / rk->dtratio + h / rk->dtratio * c[i],… in TSStepRefine_RK_MultirateNonsplit()
76 PetscCall(VecCopy(ts->vec_sol, vec_fast)); in TSStepRefine_RK_MultirateNonsplit()
83 …PetscCall(TSComputeRHSFunction(ts, t + k * h / rk->dtratio + h / rk->dtratio * c[i], Y[i], YdotRHS… in TSStepRefine_RK_MultirateNonsplit()
85 PetscCall(VecCopy(ts->vec_sol, vec_fast)); in TSStepRefine_RK_MultirateNonsplit()
86 PetscCall(TSEvaluateStep(ts, tab->order, vec_fast, NULL)); in TSStepRefine_RK_MultirateNonsplit()
89 PetscCall(VecISCopy(ts->vec_sol, rk->is_fast, SCATTER_FORWARD, subvec_fast)); in TSStepRefine_RK_MultirateNonsplit()
94 PetscCall(VecDuplicateVecs(ts->vec_sol, s, &YdotRHS_copy)); in TSStepRefine_RK_MultirateNonsplit()
96 ts->ptime = t + k * h / rk->dtratio; in TSStepRefine_RK_MultirateNonsplit()
97 ts->time_step = h / rk->dtratio; in TSStepRefine_RK_MultirateNonsplit()
104 PetscCall(TSStepRefine_RK_MultirateNonsplit(ts)); in TSStepRefine_RK_MultirateNonsplit()
107 ts->ptime = t; in TSStepRefine_RK_MultirateNonsplit()
108 ts->time_step = h; in TSStepRefine_RK_MultirateNonsplit()
118 static PetscErrorCode TSStep_RK_MultirateNonsplit(TS ts) in TSStep_RK_MultirateNonsplit() argument
120 TS_RK *rk = (TS_RK *)ts->data; in TSStep_RK_MultirateNonsplit()
130 PetscReal next_time_step = ts->time_step, t = ts->ptime, h = ts->time_step; in TSStep_RK_MultirateNonsplit()
134 PetscCall(VecDuplicate(ts->vec_sol, &stage_slow)); in TSStep_RK_MultirateNonsplit()
135 PetscCall(VecDuplicate(ts->vec_sol, &sol_slow)); in TSStep_RK_MultirateNonsplit()
136 PetscCall(VecCopy(ts->vec_sol, rk->X0)); in TSStep_RK_MultirateNonsplit()
139 PetscCall(TSPreStage(ts, rk->stage_time)); in TSStep_RK_MultirateNonsplit()
140 PetscCall(VecCopy(ts->vec_sol, Y[i])); in TSStep_RK_MultirateNonsplit()
143 PetscCall(TSPostStage(ts, rk->stage_time, i, Y)); in TSStep_RK_MultirateNonsplit()
145 PetscCall(TSComputeRHSFunction(ts, t + h * c[i], Y[i], YdotRHS_slow[i])); in TSStep_RK_MultirateNonsplit()
150 PetscCall(TSEvaluateStep(ts, tab->order, sol_slow, NULL)); in TSStep_RK_MultirateNonsplit()
155 PetscCall(VecISCopy(ts->vec_sol, is_slow, SCATTER_FORWARD, subvec_slow)); in TSStep_RK_MultirateNonsplit()
158 rk->subts_current = ts; in TSStep_RK_MultirateNonsplit()
161 PetscCall(TSStepRefine_RK_MultirateNonsplit(ts)); in TSStep_RK_MultirateNonsplit()
163 ts->ptime = t + ts->time_step; in TSStep_RK_MultirateNonsplit()
164 ts->time_step = next_time_step; in TSStep_RK_MultirateNonsplit()
173 static PetscErrorCode TSSetUp_RK_MultirateNonsplit(TS ts) in TSSetUp_RK_MultirateNonsplit() argument
175 TS_RK *rk = (TS_RK *)ts->data; in TSSetUp_RK_MultirateNonsplit()
179 PetscCall(TSRHSSplitGetIS(ts, "slow", &rk->is_slow)); in TSSetUp_RK_MultirateNonsplit()
180 PetscCall(TSRHSSplitGetIS(ts, "fast", &rk->is_fast)); in TSSetUp_RK_MultirateNonsplit()
181 …PetscCheck(rk->is_slow && rk->is_fast, PetscObjectComm((PetscObject)ts), PETSC_ERR_USER, "Must set… in TSSetUp_RK_MultirateNonsplit()
182 PetscCall(TSRHSSplitGetSubTS(ts, "slow", &rk->subts_slow)); in TSSetUp_RK_MultirateNonsplit()
183 PetscCall(TSRHSSplitGetSubTS(ts, "fast", &rk->subts_fast)); in TSSetUp_RK_MultirateNonsplit()
184 …PetscCheck(rk->subts_slow && rk->subts_fast, PetscObjectComm((PetscObject)ts), PETSC_ERR_USER, "Mu… in TSSetUp_RK_MultirateNonsplit()
185 PetscCall(VecDuplicate(ts->vec_sol, &rk->X0)); in TSSetUp_RK_MultirateNonsplit()
186 PetscCall(VecDuplicateVecs(ts->vec_sol, tab->s, &rk->YdotRHS_slow)); in TSSetUp_RK_MultirateNonsplit()
189 ts->ops->step = TSStep_RK_MultirateNonsplit; in TSSetUp_RK_MultirateNonsplit()
190 ts->ops->interpolate = TSInterpolate_RK_MultirateNonsplit; in TSSetUp_RK_MultirateNonsplit()
212 static PetscErrorCode TSReset_RK_MultirateSplit(TS ts) in TSReset_RK_MultirateSplit() argument
214 TS_RK *rk = (TS_RK *)ts->data; in TSReset_RK_MultirateSplit()
232 static PetscErrorCode TSInterpolate_RK_MultirateSplit(TS ts, PetscReal itime, Vec X) in TSInterpolate_RK_MultirateSplit() argument
234 TS_RK *rk = (TS_RK *)ts->data; in TSInterpolate_RK_MultirateSplit()
243 …PetscCheck(B, PetscObjectComm((PetscObject)ts), PETSC_ERR_SUP, "TSRK %s does not have an interpola… in TSInterpolate_RK_MultirateSplit()
248 h = ts->time_step; in TSInterpolate_RK_MultirateSplit()
249 t = (itime - ts->ptime) / h; in TSInterpolate_RK_MultirateSplit()
252 h = ts->ptime - ts->ptime_prev; in TSInterpolate_RK_MultirateSplit()
253 t = (itime - ts->ptime) / h + 1; /* In the interval [0,1] */ in TSInterpolate_RK_MultirateSplit()
256 SETERRQ(PetscObjectComm((PetscObject)ts), PETSC_ERR_PLIB, "Invalid TSStepStatus"); in TSInterpolate_RK_MultirateSplit()
280 static PetscErrorCode TSEvaluateStep_RK_MultirateSplit(TS ts, PetscInt order, Vec X, PetscBool *don… in TSEvaluateStep_RK_MultirateSplit() argument
282 TS_RK *rk = (TS_RK *)ts->data; in TSEvaluateStep_RK_MultirateSplit()
286 PetscReal h = ts->time_step; in TSEvaluateStep_RK_MultirateSplit()
290 PetscCall(VecCopy(ts->vec_sol, X)); in TSEvaluateStep_RK_MultirateSplit()
293 PetscCall(VecGetSubVector(ts->vec_sol, rk->is_slow, &Xslow)); in TSEvaluateStep_RK_MultirateSplit()
295 PetscCall(VecRestoreSubVector(ts->vec_sol, rk->is_slow, &Xslow)); in TSEvaluateStep_RK_MultirateSplit()
305 static PetscErrorCode TSStepRefine_RK_MultirateSplit(TS ts) in TSStepRefine_RK_MultirateSplit() argument
307 TS_RK *rk = (TS_RK *)ts->data; in TSStepRefine_RK_MultirateSplit()
318 PetscReal t = ts->ptime, h = ts->time_step; in TSStepRefine_RK_MultirateSplit()
322 PetscCall(VecGetSubVector(ts->vec_sol, rk->is_fast, &Xfast)); in TSStepRefine_RK_MultirateSplit()
329 while (currentlevelts != ts) { /* all the slow parts need to be interpolated separated */ in TSStepRefine_RK_MultirateSplit()
345 PetscCall(VecRestoreSubVector(ts->vec_sol, rk->is_fast, &Xfast)); in TSStepRefine_RK_MultirateSplit()
348 PetscCall(TSEvaluateStep_RK_MultirateSplit(ts, tab->order, ts->vec_sol, NULL)); in TSStepRefine_RK_MultirateSplit()
357 PetscCall(VecGetSubVector(ts->vec_sol, rk->is_fast, &Xfast)); in TSStepRefine_RK_MultirateSplit()
359 PetscCall(VecRestoreSubVector(ts->vec_sol, rk->is_fast, &Xfast)); in TSStepRefine_RK_MultirateSplit()
364 static PetscErrorCode TSStep_RK_MultirateSplit(TS ts) in TSStep_RK_MultirateSplit() argument
366 TS_RK *rk = (TS_RK *)ts->data; in TSStep_RK_MultirateSplit()
375 PetscReal next_time_step = ts->time_step, t = ts->ptime, h = ts->time_step; in TSStep_RK_MultirateSplit()
383 PetscCall(VecCopy(ts->vec_sol, rk->X0)); in TSStep_RK_MultirateSplit()
387 PetscCall(TSPreStage(ts, rk->stage_time)); in TSStep_RK_MultirateSplit()
388 PetscCall(VecCopy(ts->vec_sol, Y[i])); in TSStep_RK_MultirateSplit()
396 PetscCall(TSPostStage(ts, rk->stage_time, i, Y)); in TSStep_RK_MultirateSplit()
402 PetscCall(TSEvaluateStep_RK_MultirateSplit(ts, tab->order, ts->vec_sol, NULL)); in TSStep_RK_MultirateSplit()
409 PetscCall(TSStepRefine_RK_MultirateSplit(ts)); in TSStep_RK_MultirateSplit()
411 ts->ptime = t + ts->time_step; in TSStep_RK_MultirateSplit()
412 ts->time_step = next_time_step; in TSStep_RK_MultirateSplit()
417 static PetscErrorCode TSSetUp_RK_MultirateSplit(TS ts) in TSSetUp_RK_MultirateSplit() argument
419 TS_RK *rk = (TS_RK *)ts->data, *nextlevelrk, *currentlevelrk; in TSSetUp_RK_MultirateSplit()
424 PetscCall(TSRHSSplitGetIS(ts, "slow", &rk->is_slow)); in TSSetUp_RK_MultirateSplit()
425 PetscCall(TSRHSSplitGetIS(ts, "fast", &rk->is_fast)); in TSSetUp_RK_MultirateSplit()
426 …PetscCheck(rk->is_slow && rk->is_fast, PetscObjectComm((PetscObject)ts), PETSC_ERR_USER, "Must set… in TSSetUp_RK_MultirateSplit()
427 PetscCall(TSRHSSplitGetSubTS(ts, "slow", &rk->subts_slow)); in TSSetUp_RK_MultirateSplit()
428 PetscCall(TSRHSSplitGetSubTS(ts, "fast", &rk->subts_fast)); in TSSetUp_RK_MultirateSplit()
429 …PetscCheck(rk->subts_slow && rk->subts_fast, PetscObjectComm((PetscObject)ts), PETSC_ERR_USER, "Mu… in TSSetUp_RK_MultirateSplit()
431 PetscCall(VecDuplicate(ts->vec_sol, &X0)); in TSSetUp_RK_MultirateSplit()
439 currentlevelrk->ts_root = ts; in TSSetUp_RK_MultirateSplit()
449 PetscCall(TSCopyDM(ts, nextlevelts)); in TSSetUp_RK_MultirateSplit()
450 PetscCall(TSSetSolution(nextlevelts, ts->vec_sol)); in TSSetUp_RK_MultirateSplit()
465 PetscCall(TSCopyDM(ts, nextlevelts)); in TSSetUp_RK_MultirateSplit()
466 PetscCall(TSSetSolution(nextlevelts, ts->vec_sol)); in TSSetUp_RK_MultirateSplit()
472 ts->ops->step = TSStep_RK_MultirateSplit; in TSSetUp_RK_MultirateSplit()
473 ts->ops->evaluatestep = TSEvaluateStep_RK_MultirateSplit; in TSSetUp_RK_MultirateSplit()
474 ts->ops->interpolate = TSInterpolate_RK_MultirateSplit; in TSSetUp_RK_MultirateSplit()
478 PetscErrorCode TSRKSetMultirate_RK(TS ts, PetscBool use_multirate) in TSRKSetMultirate_RK() argument
480 TS_RK *rk = (TS_RK *)ts->data; in TSRKSetMultirate_RK()
483 PetscValidHeaderSpecific(ts, TS_CLASSID, 1); in TSRKSetMultirate_RK()
487 …PetscCall(PetscObjectComposeFunction((PetscObject)ts, "TSSetUp_RK_MultirateSplit_C", TSSetUp_RK_Mu… in TSRKSetMultirate_RK()
488 …PetscCall(PetscObjectComposeFunction((PetscObject)ts, "TSReset_RK_MultirateSplit_C", TSReset_RK_Mu… in TSRKSetMultirate_RK()
489 …PetscCall(PetscObjectComposeFunction((PetscObject)ts, "TSSetUp_RK_MultirateNonsplit_C", TSSetUp_RK… in TSRKSetMultirate_RK()
490 …PetscCall(PetscObjectComposeFunction((PetscObject)ts, "TSReset_RK_MultirateNonsplit_C", TSReset_RK… in TSRKSetMultirate_RK()
493 PetscCall(PetscObjectComposeFunction((PetscObject)ts, "TSSetUp_RK_MultirateSplit_C", NULL)); in TSRKSetMultirate_RK()
494 PetscCall(PetscObjectComposeFunction((PetscObject)ts, "TSReset_RK_MultirateSplit_C", NULL)); in TSRKSetMultirate_RK()
495 PetscCall(PetscObjectComposeFunction((PetscObject)ts, "TSSetUp_RK_MultirateNonsplit_C", NULL)); in TSRKSetMultirate_RK()
496 PetscCall(PetscObjectComposeFunction((PetscObject)ts, "TSReset_RK_MultirateNonsplit_C", NULL)); in TSRKSetMultirate_RK()
501 PetscErrorCode TSRKGetMultirate_RK(TS ts, PetscBool *use_multirate) in TSRKGetMultirate_RK() argument
503 TS_RK *rk = (TS_RK *)ts->data; in TSRKGetMultirate_RK()
506 PetscValidHeaderSpecific(ts, TS_CLASSID, 1); in TSRKGetMultirate_RK()