Lines Matching refs:ts
37 static PetscErrorCode TSResizeRegister_Alpha(TS ts, PetscBool reg) in TSResizeRegister_Alpha() argument
39 TS_Alpha *th = (TS_Alpha *)ts->data; in TSResizeRegister_Alpha()
43 PetscCall(TSResizeRegisterVec(ts, "ts:theta:sol_prev", th->vec_sol_prev)); in TSResizeRegister_Alpha()
44 PetscCall(TSResizeRegisterVec(ts, "ts:theta:X0", th->X0)); in TSResizeRegister_Alpha()
46 PetscCall(TSResizeRetrieveVec(ts, "ts:theta:sol_prev", &th->vec_sol_prev)); in TSResizeRegister_Alpha()
48 PetscCall(TSResizeRetrieveVec(ts, "ts:theta:X0", &th->X0)); in TSResizeRegister_Alpha()
54 static PetscErrorCode TSAlpha_StageTime(TS ts) in TSAlpha_StageTime() argument
56 TS_Alpha *th = (TS_Alpha *)ts->data; in TSAlpha_StageTime()
57 PetscReal t = ts->ptime; in TSAlpha_StageTime()
58 PetscReal dt = ts->time_step; in TSAlpha_StageTime()
70 static PetscErrorCode TSAlpha_StageVecs(TS ts, Vec X) in TSAlpha_StageVecs() argument
72 TS_Alpha *th = (TS_Alpha *)ts->data; in TSAlpha_StageVecs()
76 PetscReal dt = ts->time_step; in TSAlpha_StageVecs()
94 static PetscErrorCode TSAlpha_SNESSolve(TS ts, Vec b, Vec x) in TSAlpha_SNESSolve() argument
99 PetscCall(SNESSolve(ts->snes, b, x)); in TSAlpha_SNESSolve()
100 PetscCall(SNESGetIterationNumber(ts->snes, &nits)); in TSAlpha_SNESSolve()
101 PetscCall(SNESGetLinearSolveIterations(ts->snes, &lits)); in TSAlpha_SNESSolve()
102 ts->snes_its += nits; in TSAlpha_SNESSolve()
103 ts->ksp_its += lits; in TSAlpha_SNESSolve()
113 static PetscErrorCode TSAlpha_Restart(TS ts, PetscBool *initok) in TSAlpha_Restart() argument
115 TS_Alpha *th = (TS_Alpha *)ts->data; in TSAlpha_Restart()
118 Vec X0 = ts->vec_sol, X1, X2 = th->X1; in TSAlpha_Restart()
125 PetscCall(TSAlphaGetParams(ts, &alpha_m, &alpha_f, &gamma)); in TSAlpha_Restart()
126 PetscCall(TSAlphaSetParams(ts, 1, 1, 1)); in TSAlpha_Restart()
127 PetscCall(TSGetTimeStep(ts, &time_step)); in TSAlpha_Restart()
128 ts->time_step = time_step / 2; in TSAlpha_Restart()
129 PetscCall(TSAlpha_StageTime(ts)); in TSAlpha_Restart()
130 th->stage_time = ts->ptime; in TSAlpha_Restart()
134 th->stage_time += ts->time_step; in TSAlpha_Restart()
136 PetscCall(TSPreStage(ts, th->stage_time)); in TSAlpha_Restart()
138 PetscCall(TSAlpha_SNESSolve(ts, NULL, X1)); in TSAlpha_Restart()
139 PetscCall(TSPostStage(ts, th->stage_time, 0, &X1)); in TSAlpha_Restart()
140 PetscCall(TSAdaptCheckStage(ts->adapt, ts, th->stage_time, X1, &stageok)); in TSAlpha_Restart()
144 th->stage_time += ts->time_step; in TSAlpha_Restart()
146 PetscCall(TSPreStage(ts, th->stage_time)); in TSAlpha_Restart()
148 PetscCall(TSAlpha_SNESSolve(ts, NULL, X2)); in TSAlpha_Restart()
149 PetscCall(TSPostStage(ts, th->stage_time, 0, &X2)); in TSAlpha_Restart()
150 PetscCall(TSAdaptCheckStage(ts->adapt, ts, th->stage_time, X2, &stageok)); in TSAlpha_Restart()
171 PetscCall(TSSetTimeStep(ts, 2 * ts->time_step)); in TSAlpha_Restart()
172 PetscCall(TSAlphaSetParams(ts, alpha_m, alpha_f, gamma)); in TSAlpha_Restart()
173 PetscCall(VecCopy(ts->vec_sol, th->X0)); in TSAlpha_Restart()
179 static PetscErrorCode TSStep_Alpha(TS ts) in TSStep_Alpha() argument
181 TS_Alpha *th = (TS_Alpha *)ts->data; in TSStep_Alpha()
184 PetscReal next_time_step = ts->time_step; in TSStep_Alpha()
189 if (!ts->steprollback) { in TSStep_Alpha()
191 PetscCall(VecCopy(ts->vec_sol, th->X0)); in TSStep_Alpha()
196 while (!ts->reason && th->status != TS_STEP_COMPLETE) { in TSStep_Alpha()
197 if (ts->steprestart) { in TSStep_Alpha()
198 PetscCall(TSAlpha_Restart(ts, &stageok)); in TSStep_Alpha()
202 PetscCall(TSAlpha_StageTime(ts)); in TSStep_Alpha()
204 PetscCall(TSPreStage(ts, th->stage_time)); in TSStep_Alpha()
205 PetscCall(TSAlpha_SNESSolve(ts, NULL, th->X1)); in TSStep_Alpha()
206 PetscCall(TSPostStage(ts, th->stage_time, 0, &th->Xa)); in TSStep_Alpha()
207 PetscCall(TSAdaptCheckStage(ts->adapt, ts, th->stage_time, th->Xa, &stageok)); in TSStep_Alpha()
211 PetscCall(VecCopy(th->X1, ts->vec_sol)); in TSStep_Alpha()
212 PetscCall(TSAdaptChoose(ts->adapt, ts, ts->time_step, NULL, &next_time_step, &accept)); in TSStep_Alpha()
215 PetscCall(VecCopy(th->X0, ts->vec_sol)); in TSStep_Alpha()
216 ts->time_step = next_time_step; in TSStep_Alpha()
220 ts->ptime += ts->time_step; in TSStep_Alpha()
221 ts->time_step = next_time_step; in TSStep_Alpha()
225 ts->reject++; in TSStep_Alpha()
227 if (!ts->reason && ++rejections > ts->max_reject && ts->max_reject >= 0) { in TSStep_Alpha()
228 ts->reason = TS_DIVERGED_STEP_REJECTED; in TSStep_Alpha()
229 …tscCall(PetscInfo(ts, "Step=%" PetscInt_FMT ", step rejections %" PetscInt_FMT " greater than curr… in TSStep_Alpha()
235 static PetscErrorCode TSEvaluateWLTE_Alpha(TS ts, NormType wnormtype, PetscInt *order, PetscReal *w… in TSEvaluateWLTE_Alpha() argument
237 TS_Alpha *th = (TS_Alpha *)ts->data; in TSEvaluateWLTE_Alpha()
251 if (ts->steprestart) { in TSEvaluateWLTE_Alpha()
256 PetscReal h = ts->time_step, h_prev = ts->ptime - ts->ptime_prev; in TSEvaluateWLTE_Alpha()
269 PetscCall(TSErrorWeightedNorm(ts, X, Y, wnormtype, wlte, &wltea, &wlter)); in TSEvaluateWLTE_Alpha()
274 static PetscErrorCode TSInterpolate_Alpha(TS ts, PetscReal t, Vec X) in TSInterpolate_Alpha() argument
276 TS_Alpha *th = (TS_Alpha *)ts->data; in TSInterpolate_Alpha()
277 PetscReal dt = t - ts->ptime; in TSInterpolate_Alpha()
281 PetscCall(VecWAXPY(th->V1, -1.0, th->X0, ts->vec_sol)); in TSInterpolate_Alpha()
282 PetscCall(VecAXPBY(th->V1, 1 - 1 / Gamma, 1 / (Gamma * ts->time_step), th->V0)); in TSInterpolate_Alpha()
283 PetscCall(VecCopy(ts->vec_sol, X)); in TSInterpolate_Alpha()
291 static PetscErrorCode SNESTSFormFunction_Alpha(PETSC_UNUSED SNES snes, Vec X, Vec F, TS ts) in SNESTSFormFunction_Alpha() argument
293 TS_Alpha *th = (TS_Alpha *)ts->data; in SNESTSFormFunction_Alpha()
298 PetscCall(TSAlpha_StageVecs(ts, X)); in SNESTSFormFunction_Alpha()
300 PetscCall(TSComputeIFunction(ts, ta, Xa, Va, F, PETSC_FALSE)); in SNESTSFormFunction_Alpha()
305 …ErrorCode SNESTSFormJacobian_Alpha(PETSC_UNUSED SNES snes, PETSC_UNUSED Vec X, Mat J, Mat P, TS ts) in SNESTSFormJacobian_Alpha() argument
307 TS_Alpha *th = (TS_Alpha *)ts->data; in SNESTSFormJacobian_Alpha()
314 PetscCall(TSComputeIJacobian(ts, ta, Xa, Va, dVdX, J, P, PETSC_FALSE)); in SNESTSFormJacobian_Alpha()
318 static PetscErrorCode TSReset_Alpha(TS ts) in TSReset_Alpha() argument
320 TS_Alpha *th = (TS_Alpha *)ts->data; in TSReset_Alpha()
334 static PetscErrorCode TSDestroy_Alpha(TS ts) in TSDestroy_Alpha() argument
337 PetscCall(TSReset_Alpha(ts)); in TSDestroy_Alpha()
338 PetscCall(PetscFree(ts->data)); in TSDestroy_Alpha()
340 PetscCall(PetscObjectComposeFunction((PetscObject)ts, "TSAlphaSetRadius_C", NULL)); in TSDestroy_Alpha()
341 PetscCall(PetscObjectComposeFunction((PetscObject)ts, "TSAlphaSetParams_C", NULL)); in TSDestroy_Alpha()
342 PetscCall(PetscObjectComposeFunction((PetscObject)ts, "TSAlphaGetParams_C", NULL)); in TSDestroy_Alpha()
346 static PetscErrorCode TSSetUp_Alpha(TS ts) in TSSetUp_Alpha() argument
348 TS_Alpha *th = (TS_Alpha *)ts->data; in TSSetUp_Alpha()
352 if (!th->X0) PetscCall(VecDuplicate(ts->vec_sol, &th->X0)); in TSSetUp_Alpha()
353 PetscCall(VecDuplicate(ts->vec_sol, &th->Xa)); in TSSetUp_Alpha()
354 PetscCall(VecDuplicate(ts->vec_sol, &th->X1)); in TSSetUp_Alpha()
355 PetscCall(VecDuplicate(ts->vec_sol, &th->V0)); in TSSetUp_Alpha()
356 PetscCall(VecDuplicate(ts->vec_sol, &th->Va)); in TSSetUp_Alpha()
357 PetscCall(VecDuplicate(ts->vec_sol, &th->V1)); in TSSetUp_Alpha()
359 PetscCall(TSGetAdapt(ts, &ts->adapt)); in TSSetUp_Alpha()
360 PetscCall(TSAdaptCandidatesClear(ts->adapt)); in TSSetUp_Alpha()
361 PetscCall(PetscObjectTypeCompare((PetscObject)ts->adapt, TSADAPTNONE, &match)); in TSSetUp_Alpha()
363 if (!th->vec_sol_prev) PetscCall(VecDuplicate(ts->vec_sol, &th->vec_sol_prev)); in TSSetUp_Alpha()
364 if (!th->vec_lte_work) PetscCall(VecDuplicate(ts->vec_sol, &th->vec_lte_work)); in TSSetUp_Alpha()
367 PetscCall(TSGetSNES(ts, &ts->snes)); in TSSetUp_Alpha()
371 static PetscErrorCode TSSetFromOptions_Alpha(TS ts, PetscOptionItems PetscOptionsObject) in TSSetFromOptions_Alpha() argument
373 TS_Alpha *th = (TS_Alpha *)ts->data; in TSSetFromOptions_Alpha()
381 if (flg) PetscCall(TSAlphaSetRadius(ts, radius)); in TSSetFromOptions_Alpha()
385 PetscCall(TSAlphaSetParams(ts, th->Alpha_m, th->Alpha_f, th->Gamma)); in TSSetFromOptions_Alpha()
391 static PetscErrorCode TSView_Alpha(TS ts, PetscViewer viewer) in TSView_Alpha() argument
393 TS_Alpha *th = (TS_Alpha *)ts->data; in TSView_Alpha()
402 static PetscErrorCode TSAlphaSetRadius_Alpha(TS ts, PetscReal radius) in TSAlphaSetRadius_Alpha() argument
407 …PetscCheck(radius >= 0 && radius <= 1, PetscObjectComm((PetscObject)ts), PETSC_ERR_ARG_OUTOFRANGE,… in TSAlphaSetRadius_Alpha()
411 PetscCall(TSAlphaSetParams(ts, alpha_m, alpha_f, gamma)); in TSAlphaSetRadius_Alpha()
415 static PetscErrorCode TSAlphaSetParams_Alpha(TS ts, PetscReal alpha_m, PetscReal alpha_f, PetscReal… in TSAlphaSetParams_Alpha() argument
417 TS_Alpha *th = (TS_Alpha *)ts->data; in TSAlphaSetParams_Alpha()
429 static PetscErrorCode TSAlphaGetParams_Alpha(TS ts, PetscReal *alpha_m, PetscReal *alpha_f, PetscRe… in TSAlphaGetParams_Alpha() argument
431 TS_Alpha *th = (TS_Alpha *)ts->data; in TSAlphaGetParams_Alpha()
447 PETSC_EXTERN PetscErrorCode TSCreate_Alpha(TS ts) in TSCreate_Alpha() argument
452 ts->ops->reset = TSReset_Alpha; in TSCreate_Alpha()
453 ts->ops->destroy = TSDestroy_Alpha; in TSCreate_Alpha()
454 ts->ops->view = TSView_Alpha; in TSCreate_Alpha()
455 ts->ops->setup = TSSetUp_Alpha; in TSCreate_Alpha()
456 ts->ops->setfromoptions = TSSetFromOptions_Alpha; in TSCreate_Alpha()
457 ts->ops->step = TSStep_Alpha; in TSCreate_Alpha()
458 ts->ops->evaluatewlte = TSEvaluateWLTE_Alpha; in TSCreate_Alpha()
459 ts->ops->interpolate = TSInterpolate_Alpha; in TSCreate_Alpha()
460 ts->ops->resizeregister = TSResizeRegister_Alpha; in TSCreate_Alpha()
461 ts->ops->snesfunction = SNESTSFormFunction_Alpha; in TSCreate_Alpha()
462 ts->ops->snesjacobian = SNESTSFormJacobian_Alpha; in TSCreate_Alpha()
463 ts->default_adapt_type = TSADAPTNONE; in TSCreate_Alpha()
465 ts->usessnes = PETSC_TRUE; in TSCreate_Alpha()
468 ts->data = (void *)th; in TSCreate_Alpha()
475 …PetscCall(PetscObjectComposeFunction((PetscObject)ts, "TSAlphaSetRadius_C", TSAlphaSetRadius_Alpha… in TSCreate_Alpha()
476 …PetscCall(PetscObjectComposeFunction((PetscObject)ts, "TSAlphaSetParams_C", TSAlphaSetParams_Alpha… in TSCreate_Alpha()
477 …PetscCall(PetscObjectComposeFunction((PetscObject)ts, "TSAlphaGetParams_C", TSAlphaGetParams_Alpha… in TSCreate_Alpha()
510 PetscErrorCode TSAlphaSetRadius(TS ts, PetscReal radius) in TSAlphaSetRadius() argument
513 PetscValidHeaderSpecific(ts, TS_CLASSID, 1); in TSAlphaSetRadius()
514 PetscValidLogicalCollectiveReal(ts, radius, 2); in TSAlphaSetRadius()
515 …PetscCheck(radius >= 0 && radius <= 1, ((PetscObject)ts)->comm, PETSC_ERR_ARG_OUTOFRANGE, "Radius … in TSAlphaSetRadius()
516 PetscTryMethod(ts, "TSAlphaSetRadius_C", (TS, PetscReal), (ts, radius)); in TSAlphaSetRadius()
552 PetscErrorCode TSAlphaSetParams(TS ts, PetscReal alpha_m, PetscReal alpha_f, PetscReal gamma) in TSAlphaSetParams() argument
555 PetscValidHeaderSpecific(ts, TS_CLASSID, 1); in TSAlphaSetParams()
556 PetscValidLogicalCollectiveReal(ts, alpha_m, 2); in TSAlphaSetParams()
557 PetscValidLogicalCollectiveReal(ts, alpha_f, 3); in TSAlphaSetParams()
558 PetscValidLogicalCollectiveReal(ts, gamma, 4); in TSAlphaSetParams()
559 …PetscTryMethod(ts, "TSAlphaSetParams_C", (TS, PetscReal, PetscReal, PetscReal), (ts, alpha_m, alph… in TSAlphaSetParams()
585 PetscErrorCode TSAlphaGetParams(TS ts, PetscReal *alpha_m, PetscReal *alpha_f, PetscReal *gamma) in TSAlphaGetParams() argument
588 PetscValidHeaderSpecific(ts, TS_CLASSID, 1); in TSAlphaGetParams()
592 …PetscUseMethod(ts, "TSAlphaGetParams_C", (TS, PetscReal *, PetscReal *, PetscReal *), (ts, alpha_m… in TSAlphaGetParams()