Lines Matching refs:ts
29 static PetscErrorCode TSDiscGradGetX0AndXdot(TS ts, DM dm, Vec *X0, Vec *Xdot) in TSDiscGradGetX0AndXdot() argument
31 TS_DiscGrad *dg = (TS_DiscGrad *)ts->data; in TSDiscGradGetX0AndXdot()
35 if (dm && dm != ts->dm) PetscCall(DMGetNamedGlobalVector(dm, "TSDiscGrad_X0", X0)); in TSDiscGradGetX0AndXdot()
36 else *X0 = ts->vec_sol; in TSDiscGradGetX0AndXdot()
39 if (dm && dm != ts->dm) PetscCall(DMGetNamedGlobalVector(dm, "TSDiscGrad_Xdot", Xdot)); in TSDiscGradGetX0AndXdot()
45 static PetscErrorCode TSDiscGradRestoreX0AndXdot(TS ts, DM dm, Vec *X0, Vec *Xdot) in TSDiscGradRestoreX0AndXdot() argument
49 if (dm && dm != ts->dm) PetscCall(DMRestoreNamedGlobalVector(dm, "TSDiscGrad_X0", X0)); in TSDiscGradRestoreX0AndXdot()
52 if (dm && dm != ts->dm) PetscCall(DMRestoreNamedGlobalVector(dm, "TSDiscGrad_Xdot", Xdot)); in TSDiscGradRestoreX0AndXdot()
65 TS ts = (TS)ctx; in DMRestrictHook_TSDiscGrad() local
69 PetscCall(TSDiscGradGetX0AndXdot(ts, fine, &X0, &Xdot)); in DMRestrictHook_TSDiscGrad()
70 PetscCall(TSDiscGradGetX0AndXdot(ts, coarse, &X0_c, &Xdot_c)); in DMRestrictHook_TSDiscGrad()
75 PetscCall(TSDiscGradRestoreX0AndXdot(ts, fine, &X0, &Xdot)); in DMRestrictHook_TSDiscGrad()
76 PetscCall(TSDiscGradRestoreX0AndXdot(ts, coarse, &X0_c, &Xdot_c)); in DMRestrictHook_TSDiscGrad()
88 TS ts = (TS)ctx; in DMSubDomainRestrictHook_TSDiscGrad() local
92 PetscCall(TSDiscGradGetX0AndXdot(ts, dm, &X0, &Xdot)); in DMSubDomainRestrictHook_TSDiscGrad()
93 PetscCall(TSDiscGradGetX0AndXdot(ts, subdm, &X0_sub, &Xdot_sub)); in DMSubDomainRestrictHook_TSDiscGrad()
101 PetscCall(TSDiscGradRestoreX0AndXdot(ts, dm, &X0, &Xdot)); in DMSubDomainRestrictHook_TSDiscGrad()
102 PetscCall(TSDiscGradRestoreX0AndXdot(ts, subdm, &X0_sub, &Xdot_sub)); in DMSubDomainRestrictHook_TSDiscGrad()
106 static PetscErrorCode TSSetUp_DiscGrad(TS ts) in TSSetUp_DiscGrad() argument
108 TS_DiscGrad *dg = (TS_DiscGrad *)ts->data; in TSSetUp_DiscGrad()
112 if (!dg->X) PetscCall(VecDuplicate(ts->vec_sol, &dg->X)); in TSSetUp_DiscGrad()
113 if (!dg->X0) PetscCall(VecDuplicate(ts->vec_sol, &dg->X0)); in TSSetUp_DiscGrad()
114 if (!dg->Xdot) PetscCall(VecDuplicate(ts->vec_sol, &dg->Xdot)); in TSSetUp_DiscGrad()
116 PetscCall(TSGetDM(ts, &dm)); in TSSetUp_DiscGrad()
117 PetscCall(DMCoarsenHookAdd(dm, DMCoarsenHook_TSDiscGrad, DMRestrictHook_TSDiscGrad, ts)); in TSSetUp_DiscGrad()
118 …scCall(DMSubDomainHookAdd(dm, DMSubDomainHook_TSDiscGrad, DMSubDomainRestrictHook_TSDiscGrad, ts)); in TSSetUp_DiscGrad()
122 static PetscErrorCode TSSetFromOptions_DiscGrad(TS ts, PetscOptionItems PetscOptionsObject) in TSSetFromOptions_DiscGrad() argument
124 TS_DiscGrad *dg = (TS_DiscGrad *)ts->data; in TSSetFromOptions_DiscGrad()
135 static PetscErrorCode TSView_DiscGrad(TS ts, PetscViewer viewer) in TSView_DiscGrad() argument
145 static PetscErrorCode TSDiscGradGetType_DiscGrad(TS ts, TSDGType *dgtype) in TSDiscGradGetType_DiscGrad() argument
147 TS_DiscGrad *dg = (TS_DiscGrad *)ts->data; in TSDiscGradGetType_DiscGrad()
154 static PetscErrorCode TSDiscGradSetType_DiscGrad(TS ts, TSDGType dgtype) in TSDiscGradSetType_DiscGrad() argument
156 TS_DiscGrad *dg = (TS_DiscGrad *)ts->data; in TSDiscGradSetType_DiscGrad()
163 static PetscErrorCode TSReset_DiscGrad(TS ts) in TSReset_DiscGrad() argument
165 TS_DiscGrad *dg = (TS_DiscGrad *)ts->data; in TSReset_DiscGrad()
174 static PetscErrorCode TSDestroy_DiscGrad(TS ts) in TSDestroy_DiscGrad() argument
179 PetscCall(TSReset_DiscGrad(ts)); in TSDestroy_DiscGrad()
180 PetscCall(TSGetDM(ts, &dm)); in TSDestroy_DiscGrad()
182 PetscCall(DMCoarsenHookRemove(dm, DMCoarsenHook_TSDiscGrad, DMRestrictHook_TSDiscGrad, ts)); in TSDestroy_DiscGrad()
183 …all(DMSubDomainHookRemove(dm, DMSubDomainHook_TSDiscGrad, DMSubDomainRestrictHook_TSDiscGrad, ts)); in TSDestroy_DiscGrad()
185 PetscCall(PetscFree(ts->data)); in TSDestroy_DiscGrad()
186 PetscCall(PetscObjectComposeFunction((PetscObject)ts, "TSDiscGradGetFormulation_C", NULL)); in TSDestroy_DiscGrad()
187 PetscCall(PetscObjectComposeFunction((PetscObject)ts, "TSDiscGradSetFormulation_C", NULL)); in TSDestroy_DiscGrad()
188 PetscCall(PetscObjectComposeFunction((PetscObject)ts, "TSDiscGradGetType_C", NULL)); in TSDestroy_DiscGrad()
189 PetscCall(PetscObjectComposeFunction((PetscObject)ts, "TSDiscGradSetType_C", NULL)); in TSDestroy_DiscGrad()
193 static PetscErrorCode TSInterpolate_DiscGrad(TS ts, PetscReal t, Vec X) in TSInterpolate_DiscGrad() argument
195 TS_DiscGrad *dg = (TS_DiscGrad *)ts->data; in TSInterpolate_DiscGrad()
196 PetscReal dt = t - ts->ptime; in TSInterpolate_DiscGrad()
199 PetscCall(VecCopy(ts->vec_sol, dg->X)); in TSInterpolate_DiscGrad()
204 static PetscErrorCode TSDiscGrad_SNESSolve(TS ts, Vec b, Vec x) in TSDiscGrad_SNESSolve() argument
210 PetscCall(TSGetSNES(ts, &snes)); in TSDiscGrad_SNESSolve()
214 ts->snes_its += nits; in TSDiscGrad_SNESSolve()
215 ts->ksp_its += lits; in TSDiscGrad_SNESSolve()
219 static PetscErrorCode TSStep_DiscGrad(TS ts) in TSStep_DiscGrad() argument
221 TS_DiscGrad *dg = (TS_DiscGrad *)ts->data; in TSStep_DiscGrad()
226 PetscReal next_time_step = ts->time_step; in TSStep_DiscGrad()
229 PetscCall(TSGetAdapt(ts, &adapt)); in TSStep_DiscGrad()
230 if (!ts->steprollback) PetscCall(VecCopy(ts->vec_sol, dg->X0)); in TSStep_DiscGrad()
232 while (!ts->reason && status != TS_STEP_COMPLETE) { in TSStep_DiscGrad()
233 PetscReal shift = 1 / (0.5 * ts->time_step); in TSStep_DiscGrad()
235 dg->stage_time = ts->ptime + 0.5 * ts->time_step; in TSStep_DiscGrad()
238 PetscCall(TSPreStage(ts, dg->stage_time)); in TSStep_DiscGrad()
239 PetscCall(TSDiscGrad_SNESSolve(ts, NULL, dg->X)); in TSStep_DiscGrad()
240 PetscCall(TSPostStage(ts, dg->stage_time, 0, &dg->X)); in TSStep_DiscGrad()
241 PetscCall(TSAdaptCheckStage(adapt, ts, dg->stage_time, dg->X, &stageok)); in TSStep_DiscGrad()
246 PetscCall(VecAXPY(ts->vec_sol, ts->time_step, dg->Xdot)); in TSStep_DiscGrad()
247 PetscCall(TSAdaptChoose(adapt, ts, ts->time_step, NULL, &next_time_step, &accept)); in TSStep_DiscGrad()
250 PetscCall(VecCopy(dg->X0, ts->vec_sol)); in TSStep_DiscGrad()
251 ts->time_step = next_time_step; in TSStep_DiscGrad()
254 ts->ptime += ts->time_step; in TSStep_DiscGrad()
255 ts->time_step = next_time_step; in TSStep_DiscGrad()
259 ts->reject++; in TSStep_DiscGrad()
261 if (!ts->reason && ts->max_reject >= 0 && ++rejections > ts->max_reject) { in TSStep_DiscGrad()
262 ts->reason = TS_DIVERGED_STEP_REJECTED; in TSStep_DiscGrad()
263 …tscCall(PetscInfo(ts, "Step=%" PetscInt_FMT ", step rejections %" PetscInt_FMT " greater than curr… in TSStep_DiscGrad()
269 static PetscErrorCode TSGetStages_DiscGrad(TS ts, PetscInt *ns, Vec **Y) in TSGetStages_DiscGrad() argument
271 TS_DiscGrad *dg = (TS_DiscGrad *)ts->data; in TSGetStages_DiscGrad()
286 static PetscErrorCode SNESTSFormFunction_DiscGrad(SNES snes, Vec x, Vec y, TS ts) in SNESTSFormFunction_DiscGrad() argument
288 TS_DiscGrad *dg = (TS_DiscGrad *)ts->data; in SNESTSFormFunction_DiscGrad()
289 PetscReal norm, shift = 1 / (0.5 * ts->time_step); in SNESTSFormFunction_DiscGrad()
318 PetscCall((*dg->Sfunc)(ts, dg->stage_time, x, S, dg->funcCtx)); in SNESTSFormFunction_DiscGrad()
322 PetscCall(TSDiscGradGetX0AndXdot(ts, dm, &X0, &Xdot)); in SNESTSFormFunction_DiscGrad()
353 PetscCall((*dg->Gfunc)(ts, dg->stage_time, Xquad, den, dg->funcCtx)); in SNESTSFormFunction_DiscGrad()
362 PetscCall((*dg->Ffunc)(ts, dg->stage_time, Xp, &F, dg->funcCtx)); in SNESTSFormFunction_DiscGrad()
363 PetscCall((*dg->Ffunc)(ts, dg->stage_time, X0, &F0, dg->funcCtx)); in SNESTSFormFunction_DiscGrad()
364 PetscCall((*dg->Gfunc)(ts, dg->stage_time, x, G, dg->funcCtx)); in SNESTSFormFunction_DiscGrad()
377 PetscCall((*dg->Gfunc)(ts, dg->stage_time, x, G, dg->funcCtx)); in SNESTSFormFunction_DiscGrad()
388 dmsave = ts->dm; in SNESTSFormFunction_DiscGrad()
389 ts->dm = dm; in SNESTSFormFunction_DiscGrad()
392 ts->dm = dmsave; in SNESTSFormFunction_DiscGrad()
393 PetscCall(TSDiscGradRestoreX0AndXdot(ts, dm, &X0, &Xdot)); in SNESTSFormFunction_DiscGrad()
403 static PetscErrorCode SNESTSFormJacobian_DiscGrad(SNES snes, Vec x, Mat A, Mat B, TS ts) in SNESTSFormJacobian_DiscGrad() argument
405 TS_DiscGrad *dg = (TS_DiscGrad *)ts->data; in SNESTSFormJacobian_DiscGrad()
406 PetscReal shift = 1 / (0.5 * ts->time_step); in SNESTSFormJacobian_DiscGrad()
413 PetscCall(TSDiscGradGetX0AndXdot(ts, dm, NULL, &Xdot)); in SNESTSFormJacobian_DiscGrad()
415 dmsave = ts->dm; in SNESTSFormJacobian_DiscGrad()
416 ts->dm = dm; in SNESTSFormJacobian_DiscGrad()
417 PetscCall(TSComputeIJacobian(ts, dg->stage_time, x, Xdot, shift, A, B, PETSC_FALSE)); in SNESTSFormJacobian_DiscGrad()
418 ts->dm = dmsave; in SNESTSFormJacobian_DiscGrad()
419 PetscCall(TSDiscGradRestoreX0AndXdot(ts, dm, NULL, &Xdot)); in SNESTSFormJacobian_DiscGrad()
423 static PetscErrorCode TSDiscGradGetFormulation_DiscGrad(TS ts, PetscErrorCode (**Sfunc)(TS, PetscRe… in TSDiscGradGetFormulation_DiscGrad() argument
425 TS_DiscGrad *dg = (TS_DiscGrad *)ts->data; in TSDiscGradGetFormulation_DiscGrad()
434 static PetscErrorCode TSDiscGradSetFormulation_DiscGrad(TS ts, PetscErrorCode (*Sfunc)(TS, PetscRea… in TSDiscGradSetFormulation_DiscGrad() argument
436 TS_DiscGrad *dg = (TS_DiscGrad *)ts->data; in TSDiscGradSetFormulation_DiscGrad()
458 PETSC_EXTERN PetscErrorCode TSCreate_DiscGrad(TS ts) in TSCreate_DiscGrad() argument
464 ts->ops->reset = TSReset_DiscGrad; in TSCreate_DiscGrad()
465 ts->ops->destroy = TSDestroy_DiscGrad; in TSCreate_DiscGrad()
466 ts->ops->view = TSView_DiscGrad; in TSCreate_DiscGrad()
467 ts->ops->setfromoptions = TSSetFromOptions_DiscGrad; in TSCreate_DiscGrad()
468 ts->ops->setup = TSSetUp_DiscGrad; in TSCreate_DiscGrad()
469 ts->ops->step = TSStep_DiscGrad; in TSCreate_DiscGrad()
470 ts->ops->interpolate = TSInterpolate_DiscGrad; in TSCreate_DiscGrad()
471 ts->ops->getstages = TSGetStages_DiscGrad; in TSCreate_DiscGrad()
472 ts->ops->snesfunction = SNESTSFormFunction_DiscGrad; in TSCreate_DiscGrad()
473 ts->ops->snesjacobian = SNESTSFormJacobian_DiscGrad; in TSCreate_DiscGrad()
474 ts->default_adapt_type = TSADAPTNONE; in TSCreate_DiscGrad()
476 ts->usessnes = PETSC_TRUE; in TSCreate_DiscGrad()
479 ts->data = (void *)th; in TSCreate_DiscGrad()
483 …PetscCall(PetscObjectComposeFunction((PetscObject)ts, "TSDiscGradGetFormulation_C", TSDiscGradGetF… in TSCreate_DiscGrad()
484 …PetscCall(PetscObjectComposeFunction((PetscObject)ts, "TSDiscGradSetFormulation_C", TSDiscGradSetF… in TSCreate_DiscGrad()
485 …PetscCall(PetscObjectComposeFunction((PetscObject)ts, "TSDiscGradGetType_C", TSDiscGradGetType_Dis… in TSCreate_DiscGrad()
486 …PetscCall(PetscObjectComposeFunction((PetscObject)ts, "TSDiscGradSetType_C", TSDiscGradSetType_Dis… in TSCreate_DiscGrad()
530 …ts, PetscErrorCode (**Sfunc)(TS ts, PetscReal time, Vec u, Mat S, PetscCtx ctx), PetscErrorCode (*… in TSDiscGradGetFormulation() argument
533 PetscValidHeaderSpecific(ts, TS_CLASSID, 1); in TSDiscGradGetFormulation()
537 …ts, "TSDiscGradGetFormulation_C", (TS, PetscErrorCode (**Sfunc)(TS, PetscReal, Vec, Mat, void *), … in TSDiscGradGetFormulation()
579 …ts, PetscErrorCode (*Sfunc)(TS ts, PetscReal time, Vec u, Mat S, PetscCtx ctx), PetscErrorCode (*F… in TSDiscGradSetFormulation() argument
582 PetscValidHeaderSpecific(ts, TS_CLASSID, 1); in TSDiscGradSetFormulation()
586 …ts, "TSDiscGradSetFormulation_C", (TS, PetscErrorCode (*Sfunc)(TS, PetscReal, Vec, Mat, void *), P… in TSDiscGradSetFormulation()
605 PetscErrorCode TSDiscGradGetType(TS ts, TSDGType *dgtype) in TSDiscGradGetType() argument
608 PetscValidHeaderSpecific(ts, TS_CLASSID, 1); in TSDiscGradGetType()
610 PetscUseMethod(ts, "TSDiscGradGetType_C", (TS, TSDGType *), (ts, dgtype)); in TSDiscGradGetType()
633 PetscErrorCode TSDiscGradSetType(TS ts, TSDGType dgtype) in TSDiscGradSetType() argument
636 PetscValidHeaderSpecific(ts, TS_CLASSID, 1); in TSDiscGradSetType()
637 PetscTryMethod(ts, "TSDiscGradSetType_C", (TS, TSDGType), (ts, dgtype)); in TSDiscGradSetType()