Lines Matching refs:ts
203 static PetscErrorCode TSStep_BasicSymplectic(TS ts) in TSStep_BasicSymplectic() argument
205 TS_BasicSymplectic *bsymp = (TS_BasicSymplectic *)ts->data; in TSStep_BasicSymplectic()
207 Vec solution = ts->vec_sol, update = bsymp->update, q, p, q_update, p_update; in TSStep_BasicSymplectic()
211 PetscReal ptime, next_time_step = ts->time_step; in TSStep_BasicSymplectic()
215 PetscCall(TSGetStepNumber(ts, &n)); in TSStep_BasicSymplectic()
218 PetscCall(TSGetTime(ts, &ptime)); in TSStep_BasicSymplectic()
224 PetscCall(TSPreStage(ts, ptime)); in TSStep_BasicSymplectic()
230 PetscCall(VecAXPY(q, scheme->c[iter] * ts->time_step, q_update)); in TSStep_BasicSymplectic()
234 ptime = ptime + scheme->d[iter] * ts->time_step; in TSStep_BasicSymplectic()
236 PetscCall(VecAXPY(p, scheme->d[iter] * ts->time_step, p_update)); in TSStep_BasicSymplectic()
240 PetscCall(TSPostStage(ts, ptime, 0, &solution)); in TSStep_BasicSymplectic()
241 PetscCall(TSAdaptCheckStage(ts->adapt, ts, ptime, solution, &stageok)); in TSStep_BasicSymplectic()
243 PetscCall(TSFunctionDomainError(ts, ptime, solution, &stageok)); in TSStep_BasicSymplectic()
248 if (!stageok) ts->reason = TS_DIVERGED_STEP_REJECTED; in TSStep_BasicSymplectic()
249 else ts->ptime += next_time_step; in TSStep_BasicSymplectic()
279 static PetscErrorCode TSSetUp_BasicSymplectic(TS ts) in TSSetUp_BasicSymplectic() argument
281 TS_BasicSymplectic *bsymp = (TS_BasicSymplectic *)ts->data; in TSSetUp_BasicSymplectic()
285 PetscCall(TSRHSSplitGetIS(ts, "position", &bsymp->is_q)); in TSSetUp_BasicSymplectic()
286 PetscCall(TSRHSSplitGetIS(ts, "momentum", &bsymp->is_p)); in TSSetUp_BasicSymplectic()
287 …PetscCheck(bsymp->is_q && bsymp->is_p, PetscObjectComm((PetscObject)ts), PETSC_ERR_USER, "Must set… in TSSetUp_BasicSymplectic()
288 PetscCall(TSRHSSplitGetSubTS(ts, "position", &bsymp->subts_q)); in TSSetUp_BasicSymplectic()
289 PetscCall(TSRHSSplitGetSubTS(ts, "momentum", &bsymp->subts_p)); in TSSetUp_BasicSymplectic()
290 …PetscCheck(bsymp->subts_q && bsymp->subts_p, PetscObjectComm((PetscObject)ts), PETSC_ERR_USER, "Mu… in TSSetUp_BasicSymplectic()
292 PetscCall(VecDuplicate(ts->vec_sol, &bsymp->update)); in TSSetUp_BasicSymplectic()
294 PetscCall(TSGetAdapt(ts, &ts->adapt)); in TSSetUp_BasicSymplectic()
295 PetscCall(TSAdaptCandidatesClear(ts->adapt)); /* make sure to use fixed time stepping */ in TSSetUp_BasicSymplectic()
296 PetscCall(TSGetDM(ts, &dm)); in TSSetUp_BasicSymplectic()
298 …PetscCall(DMCoarsenHookAdd(dm, DMCoarsenHook_BasicSymplectic, DMRestrictHook_BasicSymplectic, ts)); in TSSetUp_BasicSymplectic()
299 …ubDomainHookAdd(dm, DMSubDomainHook_BasicSymplectic, DMSubDomainRestrictHook_BasicSymplectic, ts)); in TSSetUp_BasicSymplectic()
304 static PetscErrorCode TSReset_BasicSymplectic(TS ts) in TSReset_BasicSymplectic() argument
306 TS_BasicSymplectic *bsymp = (TS_BasicSymplectic *)ts->data; in TSReset_BasicSymplectic()
313 static PetscErrorCode TSDestroy_BasicSymplectic(TS ts) in TSDestroy_BasicSymplectic() argument
316 PetscCall(TSReset_BasicSymplectic(ts)); in TSDestroy_BasicSymplectic()
317 PetscCall(PetscObjectComposeFunction((PetscObject)ts, "TSBasicSymplecticSetType_C", NULL)); in TSDestroy_BasicSymplectic()
318 PetscCall(PetscObjectComposeFunction((PetscObject)ts, "TSBasicSymplecticGetType_C", NULL)); in TSDestroy_BasicSymplectic()
319 PetscCall(PetscFree(ts->data)); in TSDestroy_BasicSymplectic()
323 static PetscErrorCode TSSetFromOptions_BasicSymplectic(TS ts, PetscOptionItems PetscOptionsObject) in TSSetFromOptions_BasicSymplectic() argument
325 TS_BasicSymplectic *bsymp = (TS_BasicSymplectic *)ts->data; in TSSetFromOptions_BasicSymplectic()
339 if (flg) PetscCall(TSBasicSymplecticSetType(ts, namelist[choice])); in TSSetFromOptions_BasicSymplectic()
346 static PetscErrorCode TSInterpolate_BasicSymplectic(TS ts, PetscReal t, Vec X) in TSInterpolate_BasicSymplectic() argument
348 TS_BasicSymplectic *bsymp = (TS_BasicSymplectic *)ts->data; in TSInterpolate_BasicSymplectic()
350 PetscReal alpha = (ts->ptime - t) / ts->time_step; in TSInterpolate_BasicSymplectic()
353 PetscCall(VecWAXPY(X, -ts->time_step, update, ts->vec_sol)); in TSInterpolate_BasicSymplectic()
354 PetscCall(VecAXPBY(X, 1.0 - alpha, alpha, ts->vec_sol)); in TSInterpolate_BasicSymplectic()
358 static PetscErrorCode TSComputeLinearStability_BasicSymplectic(TS ts, PetscReal xr, PetscReal xi, P… in TSComputeLinearStability_BasicSymplectic() argument
387 PetscErrorCode TSBasicSymplecticSetType(TS ts, TSBasicSymplecticType bsymptype) in TSBasicSymplecticSetType() argument
390 PetscValidHeaderSpecific(ts, TS_CLASSID, 1); in TSBasicSymplecticSetType()
391 PetscTryMethod(ts, "TSBasicSymplecticSetType_C", (TS, TSBasicSymplecticType), (ts, bsymptype)); in TSBasicSymplecticSetType()
408 PetscErrorCode TSBasicSymplecticGetType(TS ts, TSBasicSymplecticType *bsymptype) in TSBasicSymplecticGetType() argument
411 PetscValidHeaderSpecific(ts, TS_CLASSID, 1); in TSBasicSymplecticGetType()
412 PetscUseMethod(ts, "TSBasicSymplecticGetType_C", (TS, TSBasicSymplecticType *), (ts, bsymptype)); in TSBasicSymplecticGetType()
416 static PetscErrorCode TSBasicSymplecticSetType_BasicSymplectic(TS ts, TSBasicSymplecticType bsympty… in TSBasicSymplecticSetType_BasicSymplectic() argument
418 TS_BasicSymplectic *bsymp = (TS_BasicSymplectic *)ts->data; in TSBasicSymplecticSetType_BasicSymplectic()
434 …SETERRQ(PetscObjectComm((PetscObject)ts), PETSC_ERR_ARG_UNKNOWN_TYPE, "Could not find '%s'", bsymp… in TSBasicSymplecticSetType_BasicSymplectic()
437 static PetscErrorCode TSBasicSymplecticGetType_BasicSymplectic(TS ts, TSBasicSymplecticType *bsympt… in TSBasicSymplecticGetType_BasicSymplectic() argument
439 TS_BasicSymplectic *bsymp = (TS_BasicSymplectic *)ts->data; in TSBasicSymplecticGetType_BasicSymplectic()
491 PETSC_EXTERN PetscErrorCode TSCreate_BasicSymplectic(TS ts) in TSCreate_BasicSymplectic() argument
498 ts->data = (void *)bsymp; in TSCreate_BasicSymplectic()
500 ts->ops->setup = TSSetUp_BasicSymplectic; in TSCreate_BasicSymplectic()
501 ts->ops->step = TSStep_BasicSymplectic; in TSCreate_BasicSymplectic()
502 ts->ops->reset = TSReset_BasicSymplectic; in TSCreate_BasicSymplectic()
503 ts->ops->destroy = TSDestroy_BasicSymplectic; in TSCreate_BasicSymplectic()
504 ts->ops->setfromoptions = TSSetFromOptions_BasicSymplectic; in TSCreate_BasicSymplectic()
505 ts->ops->interpolate = TSInterpolate_BasicSymplectic; in TSCreate_BasicSymplectic()
506 ts->ops->linearstability = TSComputeLinearStability_BasicSymplectic; in TSCreate_BasicSymplectic()
508 …PetscCall(PetscObjectComposeFunction((PetscObject)ts, "TSBasicSymplecticSetType_C", TSBasicSymplec… in TSCreate_BasicSymplectic()
509 …PetscCall(PetscObjectComposeFunction((PetscObject)ts, "TSBasicSymplecticGetType_C", TSBasicSymplec… in TSCreate_BasicSymplectic()
511 PetscCall(TSBasicSymplecticSetType(ts, TSBasicSymplecticDefault)); in TSCreate_BasicSymplectic()