Lines Matching refs:ark
1227 TS_ARKIMEX *ark = (TS_ARKIMEX *)ts->data; in TSEvaluateStep_ARKIMEX() local
1228 ARKTableau tab = ark->tableau; in TSEvaluateStep_ARKIMEX()
1229 PetscScalar *w = ark->work; in TSEvaluateStep_ARKIMEX()
1235 switch (ark->status) { in TSEvaluateStep_ARKIMEX()
1247 if (ark->status == TS_STEP_INCOMPLETE) { in TSEvaluateStep_ARKIMEX()
1248 …if (!ark->imex && tab->stiffly_accurate) { /* Only the stiffly accurate implicit formula is used */ in TSEvaluateStep_ARKIMEX()
1249 PetscCall(VecCopy(ark->Y[s - 1], X)); in TSEvaluateStep_ARKIMEX()
1253 PetscCall(VecMAXPY(X, s, w, ark->YdotI)); in TSEvaluateStep_ARKIMEX()
1254 if (tab->additive && ark->imex) { /* Method is IMEX, complete the explicit formula */ in TSEvaluateStep_ARKIMEX()
1258 PetscCall(VecMAXPY(X, s, w, ark->YdotRHS)); in TSEvaluateStep_ARKIMEX()
1267 if (ark->status == TS_STEP_INCOMPLETE) { /* Complete with the embedded method (bet,be) */ in TSEvaluateStep_ARKIMEX()
1270 PetscCall(VecMAXPY(X, s, w, ark->YdotI)); in TSEvaluateStep_ARKIMEX()
1275 PetscCall(VecMAXPY(X, s, w, ark->YdotRHS)); in TSEvaluateStep_ARKIMEX()
1281 PetscCall(VecMAXPY(X, tab->s, w, ark->YdotI)); in TSEvaluateStep_ARKIMEX()
1286 PetscCall(VecMAXPY(X, s, w, ark->YdotRHS)); in TSEvaluateStep_ARKIMEX()
1303 TS_ARKIMEX *ark = (TS_ARKIMEX *)ts->data; in TSARKIMEXTestMassIdentity() local
1310 PetscCall(TSComputeIFunction(ts, ts->ptime, ts->vec_sol, Udot, Y1, ark->imex)); in TSARKIMEXTestMassIdentity()
1312 PetscCall(TSComputeIFunction(ts, ts->ptime, ts->vec_sol, Udot, Y2, ark->imex)); in TSARKIMEXTestMassIdentity()
1332 TS_ARKIMEX *ark = (TS_ARKIMEX *)ts->data; in TSStep_ARKIMEX() local
1333 ARKTableau tab = ark->tableau; in TSStep_ARKIMEX()
1336 PetscScalar *w = ark->work; in TSStep_ARKIMEX()
1337 …Vec *Y = ark->Y, *YdotI = ark->YdotI, *YdotRHS = ark->YdotRHS, Ydot = ark->Ydot, Ydot0… in TSStep_ARKIMEX()
1338 PetscBool extrapolate = ark->extrapolate; in TSStep_ARKIMEX()
1347 if (ark->extrapolate && !ark->Y_prev) { in TSStep_ARKIMEX()
1348 PetscCall(VecDuplicateVecs(ts->vec_sol, tab->s, &ark->Y_prev)); in TSStep_ARKIMEX()
1349 PetscCall(VecDuplicateVecs(ts->vec_sol, tab->s, &ark->YdotI_prev)); in TSStep_ARKIMEX()
1350 if (tab->additive) PetscCall(VecDuplicateVecs(ts->vec_sol, tab->s, &ark->YdotRHS_prev)); in TSStep_ARKIMEX()
1360 …if (ark->extrapolate && !ts->steprestart) { /* Save the Y, YdotI, YdotRHS for extrapolation initia… in TSStep_ARKIMEX()
1362 PetscCall(VecCopy(Y[i], ark->Y_prev[i])); in TSStep_ARKIMEX()
1363 PetscCall(VecCopy(YdotI[i], ark->YdotI_prev[i])); in TSStep_ARKIMEX()
1364 if (tab->additive && hasE) PetscCall(VecCopy(YdotRHS[i], ark->YdotRHS_prev[i])); in TSStep_ARKIMEX()
1380 ark->scoeff = PETSC_MAX_REAL; in TSStep_ARKIMEX()
1382 if (!ark->alg_is) { in TSStep_ARKIMEX()
1383 PetscCall(TSARKIMEXComputeAlgebraicIS(ts, ts->ptime, Z, &ark->alg_is)); in TSStep_ARKIMEX()
1384 PetscCall(ISViewFromOptions(ark->alg_is, (PetscObject)ts, "-ts_arkimex_algebraic_is_view")); in TSStep_ARKIMEX()
1389 if (ark->alg_is) PetscCall(VecISSet(Ydot0, ark->alg_is, 0.0)); in TSStep_ARKIMEX()
1432 ark->status = TS_STEP_INCOMPLETE; in TSStep_ARKIMEX()
1433 while (!ts->reason && ark->status != TS_STEP_COMPLETE) { in TSStep_ARKIMEX()
1437 ark->stage_time = t + h * ct[i]; in TSStep_ARKIMEX()
1438 PetscCall(TSPreStage(ts, ark->stage_time)); in TSStep_ARKIMEX()
1451 ark->scoeff = 1. / At[i * s + i]; in TSStep_ARKIMEX()
1474 PetscCall(TSAdaptCheckStage(adapt, ts, ark->stage_time, Y[i], &stageok)); in TSStep_ARKIMEX()
1485 ((PetscObject)ts)->type_name, ark->tableau->name); in TSStep_ARKIMEX()
1488 …PetscCall(VecAXPBYPCZ(YdotI[i], -ark->scoeff / h, ark->scoeff / h, 0, Z, Y[i])); /* YdotI = shift*… in TSStep_ARKIMEX()
1493 …PetscCall(TSComputeIFunction(ts, t + h * ct[i], Y[i], Ydot, YdotI[i], ark->imex)); /* YdotI = -G(t… in TSStep_ARKIMEX()
1496 …PetscCall(VecAXPBYPCZ(YdotI[i], -ark->scoeff / h, ark->scoeff / h, 0, Z, Y[i])); /* YdotI = shift*… in TSStep_ARKIMEX()
1499 if (ark->imex) { in TSStep_ARKIMEX()
1506 PetscCall(TSPostStage(ts, ark->stage_time, i, Y)); in TSStep_ARKIMEX()
1509 ark->status = TS_STEP_INCOMPLETE; in TSStep_ARKIMEX()
1511 ark->status = TS_STEP_PENDING; in TSStep_ARKIMEX()
1516 ark->status = accept ? TS_STEP_COMPLETE : TS_STEP_INCOMPLETE; in TSStep_ARKIMEX()
1562 TS_ARKIMEX *ark = (TS_ARKIMEX *)ts->data; in TSAdjointStep_ARKIMEX() local
1563 ARKTableau tab = ark->tableau; in TSAdjointStep_ARKIMEX()
1566 PetscScalar *w = ark->work; in TSAdjointStep_ARKIMEX()
1567 … *Y = ark->Y, Ydot = ark->Ydot, *VecsDeltaLam = ark->VecsDeltaLam, *VecsSensiTemp = ark… in TSAdjointStep_ARKIMEX()
1575 ark->status = TS_STEP_INCOMPLETE; in TSAdjointStep_ARKIMEX()
1581 ark->stage_time = t - adjoint_time_step * (1.0 - ct[i]); in TSAdjointStep_ARKIMEX()
1584 ark->scoeff = 0.; in TSAdjointStep_ARKIMEX()
1586 …ark->scoeff = -1. / At[i * s + i]; // this makes shift=ark->scoeff/ts->time_step positive since ts… in TSAdjointStep_ARKIMEX()
1591 …PetscCall(TSComputeIJacobianP(ts, ark->stage_time, Y[i], Ydot, ark->scoeff / adjoint_time_step, ts… in TSAdjointStep_ARKIMEX()
1609 …PetscCall(VecAXPY(VecsDeltaLam[nadj * s + i], ark->scoeff / adjoint_time_step, VecsSensiTemp[nadj]… in TSAdjointStep_ARKIMEX()
1665 ark->status = TS_STEP_COMPLETE; in TSAdjointStep_ARKIMEX()
1671 TS_ARKIMEX *ark = (TS_ARKIMEX *)ts->data; in TSInterpolate_ARKIMEX() local
1672 ARKTableau tab = ark->tableau; in TSInterpolate_ARKIMEX()
1676 PetscScalar *bt = ark->work, *b = ark->work + s; in TSInterpolate_ARKIMEX()
1680 … "%s %s does not have an interpolation formula", ((PetscObject)ts)->type_name, ark->tableau->name); in TSInterpolate_ARKIMEX()
1681 switch (ark->status) { in TSInterpolate_ARKIMEX()
1701 PetscCall(VecCopy(ark->Y[0], X)); in TSInterpolate_ARKIMEX()
1702 PetscCall(VecMAXPY(X, s, bt, ark->YdotI)); in TSInterpolate_ARKIMEX()
1706 if (hasE) PetscCall(VecMAXPY(X, s, b, ark->YdotRHS)); in TSInterpolate_ARKIMEX()
1713 TS_ARKIMEX *ark = (TS_ARKIMEX *)ts->data; in TSExtrapolate_ARKIMEX() local
1714 ARKTableau tab = ark->tableau; in TSExtrapolate_ARKIMEX()
1717 PetscScalar *bt = ark->work, *b = ark->work + s; in TSExtrapolate_ARKIMEX()
1721 …ect)ts), PETSC_ERR_SUP, "TSARKIMEX %s does not have an interpolation formula", ark->tableau->name); in TSExtrapolate_ARKIMEX()
1732 …PetscCheck(ark->Y_prev, PetscObjectComm((PetscObject)ts), PETSC_ERR_SUP, "Stages from previous ste… in TSExtrapolate_ARKIMEX()
1733 PetscCall(VecCopy(ark->Y_prev[0], X)); in TSExtrapolate_ARKIMEX()
1734 PetscCall(VecMAXPY(X, s, bt, ark->YdotI_prev)); in TSExtrapolate_ARKIMEX()
1738 if (hasE) PetscCall(VecMAXPY(X, s, b, ark->YdotRHS_prev)); in TSExtrapolate_ARKIMEX()
1745 TS_ARKIMEX *ark = (TS_ARKIMEX *)ts->data; in TSARKIMEXTableauReset() local
1746 ARKTableau tab = ark->tableau; in TSARKIMEXTableauReset()
1750 PetscCall(PetscFree(ark->work)); in TSARKIMEXTableauReset()
1751 PetscCall(VecDestroyVecs(tab->s, &ark->Y)); in TSARKIMEXTableauReset()
1752 PetscCall(VecDestroyVecs(tab->s, &ark->YdotI)); in TSARKIMEXTableauReset()
1753 PetscCall(VecDestroyVecs(tab->s, &ark->YdotRHS)); in TSARKIMEXTableauReset()
1754 PetscCall(VecDestroyVecs(tab->s, &ark->Y_prev)); in TSARKIMEXTableauReset()
1755 PetscCall(VecDestroyVecs(tab->s, &ark->YdotI_prev)); in TSARKIMEXTableauReset()
1756 PetscCall(VecDestroyVecs(tab->s, &ark->YdotRHS_prev)); in TSARKIMEXTableauReset()
1762 TS_ARKIMEX *ark = (TS_ARKIMEX *)ts->data; in TSReset_ARKIMEX() local
1765 if (ark->fastslowsplit) { in TSReset_ARKIMEX()
1769 PetscCall(VecDestroy(&ark->Ydot)); in TSReset_ARKIMEX()
1770 PetscCall(VecDestroy(&ark->Ydot0)); in TSReset_ARKIMEX()
1771 PetscCall(VecDestroy(&ark->Z)); in TSReset_ARKIMEX()
1772 PetscCall(ISDestroy(&ark->alg_is)); in TSReset_ARKIMEX()
1779 TS_ARKIMEX *ark = (TS_ARKIMEX *)ts->data; in TSAdjointReset_ARKIMEX() local
1780 ARKTableau tab = ark->tableau; in TSAdjointReset_ARKIMEX()
1783 PetscCall(VecDestroyVecs(tab->s * ts->numcost, &ark->VecsDeltaLam)); in TSAdjointReset_ARKIMEX()
1784 PetscCall(VecDestroyVecs(ts->numcost, &ark->VecsSensiTemp)); in TSAdjointReset_ARKIMEX()
1785 PetscCall(VecDestroyVecs(ts->numcost, &ark->VecsSensiPTemp)); in TSAdjointReset_ARKIMEX()
1825 TS_ARKIMEX *ark = (TS_ARKIMEX *)ts->data; in TSARKIMEXComputeAlgebraicIS() local
1838 PetscCall(TSComputeIFunction(ts, time, X, Xdot, F, ark->imex)); in TSARKIMEXComputeAlgebraicIS()
1840 PetscCall(TSComputeIFunction(ts, time, X, Xdot, W, ark->imex)); in TSARKIMEXComputeAlgebraicIS()
1874 TS_ARKIMEX *ark = (TS_ARKIMEX *)ts->data; in SNESTSFormFunction_ARKIMEX() local
1882 if (ark->scoeff == PETSC_MAX_REAL) PetscCall(TSARKIMEXGetAlgebraicIS(ts, dm, &alg_is)); in SNESTSFormFunction_ARKIMEX()
1887 if (ark->scoeff == PETSC_MAX_REAL) { in SNESTSFormFunction_ARKIMEX()
1891 PetscCall(TSARKIMEXComputeAlgebraicIS(ts, ark->stage_time, Z, &alg_is)); in SNESTSFormFunction_ARKIMEX()
1896 PetscCall(TSComputeIFunction(ts, ark->stage_time, Z, X, F, ark->imex)); in SNESTSFormFunction_ARKIMEX()
1899 PetscReal shift = ark->scoeff / ts->time_step; in SNESTSFormFunction_ARKIMEX()
1901 PetscCall(TSComputeIFunction(ts, ark->stage_time, X, Ydot, F, ark->imex)); in SNESTSFormFunction_ARKIMEX()
1911 TS_ARKIMEX *ark = (TS_ARKIMEX *)ts->data; in SNESTSFormJacobian_ARKIMEX() local
1922 if (ark->scoeff == PETSC_MAX_REAL) PetscCall(TSARKIMEXGetAlgebraicIS(ts, dm, &alg_is)); in SNESTSFormJacobian_ARKIMEX()
1927 if (ark->scoeff == PETSC_MAX_REAL) { in SNESTSFormJacobian_ARKIMEX()
1933 PetscCall(TSComputeIJacobian(ts, ark->stage_time, Z, X, shift, A, B, ark->imex)); in SNESTSFormJacobian_ARKIMEX()
1945 shift = ark->scoeff / ts->time_step; in SNESTSFormJacobian_ARKIMEX()
1946 PetscCall(TSComputeIJacobian(ts, ark->stage_time, X, Ydot, shift, A, B, ark->imex)); in SNESTSFormJacobian_ARKIMEX()
1955 TS_ARKIMEX *ark = (TS_ARKIMEX *)ts->data; in TSGetStages_ARKIMEX() local
1958 if (ns) *ns = ark->tableau->s; in TSGetStages_ARKIMEX()
1959 if (Y) *Y = ark->Y; in TSGetStages_ARKIMEX()
2009 TS_ARKIMEX *ark = (TS_ARKIMEX *)ts->data; in TSARKIMEXTableauSetUp() local
2010 ARKTableau tab = ark->tableau; in TSARKIMEXTableauSetUp()
2013 PetscCall(PetscMalloc1(2 * tab->s, &ark->work)); in TSARKIMEXTableauSetUp()
2014 PetscCall(VecDuplicateVecs(ts->vec_sol, tab->s, &ark->Y)); in TSARKIMEXTableauSetUp()
2015 PetscCall(VecDuplicateVecs(ts->vec_sol, tab->s, &ark->YdotI)); in TSARKIMEXTableauSetUp()
2016 if (tab->additive) PetscCall(VecDuplicateVecs(ts->vec_sol, tab->s, &ark->YdotRHS)); in TSARKIMEXTableauSetUp()
2017 if (ark->extrapolate) { in TSARKIMEXTableauSetUp()
2018 PetscCall(VecDuplicateVecs(ts->vec_sol, tab->s, &ark->Y_prev)); in TSARKIMEXTableauSetUp()
2019 PetscCall(VecDuplicateVecs(ts->vec_sol, tab->s, &ark->YdotI_prev)); in TSARKIMEXTableauSetUp()
2020 if (tab->additive) PetscCall(VecDuplicateVecs(ts->vec_sol, tab->s, &ark->YdotRHS_prev)); in TSARKIMEXTableauSetUp()
2027 TS_ARKIMEX *ark = (TS_ARKIMEX *)ts->data; in TSSetUp_ARKIMEX() local
2032 if (ark->fastslowsplit) { in TSSetUp_ARKIMEX()
2036 PetscCall(VecDuplicate(ts->vec_sol, &ark->Ydot)); in TSSetUp_ARKIMEX()
2037 PetscCall(VecDuplicate(ts->vec_sol, &ark->Ydot0)); in TSSetUp_ARKIMEX()
2038 PetscCall(VecDuplicate(ts->vec_sol, &ark->Z)); in TSSetUp_ARKIMEX()
2050 TS_ARKIMEX *ark = (TS_ARKIMEX *)ts->data; in TSAdjointSetUp_ARKIMEX() local
2051 ARKTableau tab = ark->tableau; in TSAdjointSetUp_ARKIMEX()
2054 PetscCall(VecDuplicateVecs(ts->vecs_sensi[0], tab->s * ts->numcost, &ark->VecsDeltaLam)); in TSAdjointSetUp_ARKIMEX()
2055 PetscCall(VecDuplicateVecs(ts->vecs_sensi[0], ts->numcost, &ark->VecsSensiTemp)); in TSAdjointSetUp_ARKIMEX()
2056 …if (ts->vecs_sensip) PetscCall(VecDuplicateVecs(ts->vecs_sensip[0], ts->numcost, &ark->VecsSensiPT… in TSAdjointSetUp_ARKIMEX()
2067 TS_ARKIMEX *ark = (TS_ARKIMEX *)ts->data; in TSSetFromOptions_ARKIMEX() local
2088 …ly of DIRK method", "TSDIRKSetType", (const char *const *)namelist, count, ark->tableau->name, &ch… in TSSetFromOptions_ARKIMEX()
2092 …RK IMEX method", "TSARKIMEXSetType", (const char *const *)namelist, count, ark->tableau->name, &ch… in TSSetFromOptions_ARKIMEX()
2094 flg = (PetscBool)!ark->imex; in TSSetFromOptions_ARKIMEX()
2096 ark->imex = (PetscBool)!flg; in TSSetFromOptions_ARKIMEX()
2097 …split", "Use ARK IMEX for fast-slow systems", "TSARKIMEXSetFastSlowSplit", ark->fastslowsplit, &fa… in TSSetFromOptions_ARKIMEX()
2108 …stage solution from stage values of the previous time step", "", ark->extrapolate, &ark->extrapola… in TSSetFromOptions_ARKIMEX()
2116 TS_ARKIMEX *ark = (TS_ARKIMEX *)ts->data; in TSView_ARKIMEX() local
2124 ARKTableau tab = ark->tableau; in TSView_ARKIMEX()
2274 TS_ARKIMEX *ark = (TS_ARKIMEX *)ts->data; in TSARKIMEXGetType_ARKIMEX() local
2277 *arktype = ark->tableau->name; in TSARKIMEXGetType_ARKIMEX()
2283 TS_ARKIMEX *ark = (TS_ARKIMEX *)ts->data; in TSARKIMEXSetType_ARKIMEX() local
2288 if (ark->tableau) { in TSARKIMEXSetType_ARKIMEX()
2289 PetscCall(PetscStrcmp(ark->tableau->name, arktype, &match)); in TSARKIMEXSetType_ARKIMEX()
2296 ark->tableau = &link->tab; in TSARKIMEXSetType_ARKIMEX()
2298 ts->default_adapt_type = ark->tableau->bembed ? TSADAPTBASIC : TSADAPTNONE; in TSARKIMEXSetType_ARKIMEX()
2307 TS_ARKIMEX *ark = (TS_ARKIMEX *)ts->data; in TSARKIMEXSetFullyImplicit_ARKIMEX() local
2310 ark->imex = (PetscBool)!flg; in TSARKIMEXSetFullyImplicit_ARKIMEX()
2316 TS_ARKIMEX *ark = (TS_ARKIMEX *)ts->data; in TSARKIMEXGetFullyImplicit_ARKIMEX() local
2319 *flg = (PetscBool)!ark->imex; in TSARKIMEXGetFullyImplicit_ARKIMEX()
2377 TS_ARKIMEX *ark; in TSCreate_ARKIMEX() local
2402 PetscCall(PetscNew(&ark)); in TSCreate_ARKIMEX()
2403 ts->data = (void *)ark; in TSCreate_ARKIMEX()
2404 ark->imex = dirk ? PETSC_FALSE : PETSC_TRUE; in TSCreate_ARKIMEX()
2406 ark->VecsDeltaLam = NULL; in TSCreate_ARKIMEX()
2407 ark->VecsSensiTemp = NULL; in TSCreate_ARKIMEX()
2408 ark->VecsSensiPTemp = NULL; in TSCreate_ARKIMEX()
2424 TS_ARKIMEX *ark = (TS_ARKIMEX *)ts->data; in TSDIRKSetType_DIRK() local
2428 …PetscCheck(!ark->tableau->additive, PetscObjectComm((PetscObject)ts), PETSC_ERR_ARG_WRONG, "Method… in TSDIRKSetType_DIRK()