Lines Matching refs:ext

34   TS_EIMEX      *ext = (TS_EIMEX *)ts->data;  in TSEvaluateStep_EIMEX()  local
35 const PetscInt ns = ext->nstages; in TSEvaluateStep_EIMEX()
38 PetscCall(VecCopy(ext->T[Map(ext->row_ind, ext->col_ind, ns)], X)); in TSEvaluateStep_EIMEX()
44 TS_EIMEX *ext = (TS_EIMEX *)ts->data; in TSStage_EIMEX() local
46 Vec Y = ext->Y, Z = ext->Z; in TSStage_EIMEX()
54 h = ts->time_step / ext->N[istage]; /* step size for the istage-th stage */ in TSStage_EIMEX()
55 ext->shift = 1. / h; in TSStage_EIMEX()
57 PetscCall(VecCopy(ext->VecSolPrev, Y)); /* Take the previous solution as initial step */ in TSStage_EIMEX()
59 for (i = 0; i < ext->N[istage]; i++) { in TSStage_EIMEX()
60 ext->ctime = ts->ptime + h * i; in TSStage_EIMEX()
68 PetscCall(TSAdaptCheckStage(adapt, ts, ext->ctime, Y, &accept)); in TSStage_EIMEX()
75 TS_EIMEX *ext = (TS_EIMEX *)ts->data; in TSStep_EIMEX() local
76 const PetscInt ns = ext->nstages; in TSStep_EIMEX()
77 Vec *T = ext->T, Y = ext->Y; in TSStep_EIMEX()
86 ext->status = TS_STEP_INCOMPLETE; in TSStep_EIMEX()
88 PetscCall(VecCopy(ts->vec_sol, ext->VecSolPrev)); in TSStep_EIMEX()
98 alpha = -(PetscReal)ext->N[j] / ext->N[j - i]; in TSStep_EIMEX()
107 if (ext->ord_adapt && ext->nstages < ext->max_rows) { in TSStep_EIMEX()
109 while (!accept && ext->nstages < ext->max_rows) { in TSStep_EIMEX()
110 …PetscCall(TSErrorWeightedNorm(ts, ts->vec_sol, T[Map(ext->nstages - 1, ext->nstages - 2, ext->nsta… in TSStep_EIMEX()
114 PetscCall(TSStage_EIMEX(ts, ext->nstages)); in TSStep_EIMEX()
115 ext->nstages++; in TSStep_EIMEX()
116 ext->row_ind++; in TSStep_EIMEX()
117 ext->col_ind++; in TSStep_EIMEX()
119 PetscCall(VecDuplicateVecs(ts->vec_sol, (1 + ext->nstages) * ext->nstages / 2, &ext->T)); in TSStep_EIMEX()
120 for (i = 0; i < ext->nstages - 1; i++) { in TSStep_EIMEX()
121 …for (j = 0; j <= i; j++) PetscCall(VecCopy(T[Map(i, j, ext->nstages - 1)], ext->T[Map(i, j, ext->n… in TSStep_EIMEX()
123 PetscCall(VecDestroyVecs(ext->nstages * (ext->nstages - 1) / 2, &T)); in TSStep_EIMEX()
124 T = ext->T; /*reset the pointer*/ in TSStep_EIMEX()
126 PetscCall(VecCopy(Y, T[ext->nstages - 1])); in TSStep_EIMEX()
128 for (i = 1; i < ext->nstages; i++) { in TSStep_EIMEX()
129 alpha = -(PetscReal)ext->N[ext->nstages - 1] / ext->N[ext->nstages - 1 - i]; in TSStep_EIMEX()
130 …Z(T[Map(ext->nstages - 1, i, ext->nstages)], alpha, 1.0, 0, T[Map(ext->nstages - 1, i - 1, ext->ns… in TSStep_EIMEX()
132 PetscCall(VecScale(T[Map(ext->nstages - 1, i, ext->nstages)], alpha)); in TSStep_EIMEX()
135 PetscCall(TSEvaluateStep(ts, ext->nstages, ts->vec_sol, NULL)); in TSStep_EIMEX()
139 … if (ext->nstages == ext->max_rows) PetscCall(PetscInfo(ts, "Max number of rows has been used\n")); in TSStep_EIMEX()
142 ext->status = TS_STEP_COMPLETE; in TSStep_EIMEX()
144 if (ext->status != TS_STEP_COMPLETE && !ts->reason) ts->reason = TS_DIVERGED_STEP_REJECTED; in TSStep_EIMEX()
151 TS_EIMEX *ext = (TS_EIMEX *)ts->data; in TSInterpolate_EIMEX() local
153 Vec Y0 = ext->VecSolPrev, Y1 = ext->Y, Ydot = ext->Ydot, YdotI = ext->YdotI; in TSInterpolate_EIMEX()
176 TS_EIMEX *ext = (TS_EIMEX *)ts->data; in TSReset_EIMEX() local
180 ns = ext->nstages; in TSReset_EIMEX()
181 PetscCall(VecDestroyVecs((1 + ns) * ns / 2, &ext->T)); in TSReset_EIMEX()
182 PetscCall(VecDestroy(&ext->Y)); in TSReset_EIMEX()
183 PetscCall(VecDestroy(&ext->Z)); in TSReset_EIMEX()
184 PetscCall(VecDestroy(&ext->YdotRHS)); in TSReset_EIMEX()
185 PetscCall(VecDestroy(&ext->YdotI)); in TSReset_EIMEX()
186 PetscCall(VecDestroy(&ext->Ydot)); in TSReset_EIMEX()
187 PetscCall(VecDestroy(&ext->VecSolPrev)); in TSReset_EIMEX()
188 PetscCall(PetscFree(ext->N)); in TSReset_EIMEX()
205 TS_EIMEX *ext = (TS_EIMEX *)ts->data; in TSEIMEXGetVecs() local
210 else *Z = ext->Z; in TSEIMEXGetVecs()
214 else *Ydot = ext->Ydot; in TSEIMEXGetVecs()
218 else *YdotI = ext->YdotI; in TSEIMEXGetVecs()
222 else *YdotRHS = ext->YdotRHS; in TSEIMEXGetVecs()
253 TS_EIMEX *ext = (TS_EIMEX *)ts->data; in SNESTSFormFunction_EIMEX() local
265 PetscCall(TSComputeIFunction(ts, ext->ctime, X, Ydot, G, PETSC_FALSE)); in SNESTSFormFunction_EIMEX()
278 TS_EIMEX *ext = (TS_EIMEX *)ts->data; in SNESTSFormJacobian_EIMEX() local
289 PetscCall(TSComputeIJacobian(ts, ts->ptime, X, Ydot, ext->shift, A, B, PETSC_TRUE)); in SNESTSFormJacobian_EIMEX()
318 TS_EIMEX *ext = (TS_EIMEX *)ts->data; in TSSetUp_EIMEX() local
322 if (!ext->N) { /* ext->max_rows not set */ in TSSetUp_EIMEX()
325 if (-1 == ext->row_ind && -1 == ext->col_ind) { in TSSetUp_EIMEX()
326 PetscCall(TSEIMEXSetRowCol(ts, ext->max_rows, ext->max_rows)); in TSSetUp_EIMEX()
328 …if (ext->ord_adapt) PetscCall(PetscInfo(ts, "Order adaptivity is enabled and TSEIMEXSetRowCol or -… in TSSetUp_EIMEX()
331 if (ext->ord_adapt) { in TSSetUp_EIMEX()
332 ext->nstages = 2; /* Start with the 2-stage scheme */ in TSSetUp_EIMEX()
333 PetscCall(TSEIMEXSetRowCol(ts, ext->nstages, ext->nstages)); in TSSetUp_EIMEX()
335ext->nstages = ext->max_rows; /* by default nstages is the same as max_rows, this can be changed b… in TSSetUp_EIMEX()
340 …PetscCall(VecDuplicateVecs(ts->vec_sol, (1 + ext->nstages) * ext->nstages / 2, &ext->T)); /* full … in TSSetUp_EIMEX()
341 PetscCall(VecDuplicate(ts->vec_sol, &ext->YdotI)); in TSSetUp_EIMEX()
342 PetscCall(VecDuplicate(ts->vec_sol, &ext->YdotRHS)); in TSSetUp_EIMEX()
343 PetscCall(VecDuplicate(ts->vec_sol, &ext->Ydot)); in TSSetUp_EIMEX()
344 PetscCall(VecDuplicate(ts->vec_sol, &ext->VecSolPrev)); in TSSetUp_EIMEX()
345 PetscCall(VecDuplicate(ts->vec_sol, &ext->Y)); in TSSetUp_EIMEX()
346 PetscCall(VecDuplicate(ts->vec_sol, &ext->Z)); in TSSetUp_EIMEX()
354 TS_EIMEX *ext = (TS_EIMEX *)ts->data; in TSSetFromOptions_EIMEX() local
368 …", "Solve the problem with adaptive order", "TSEIMEXSetOrdAdapt", ext->ord_adapt, &ext->ord_adapt,… in TSSetFromOptions_EIMEX()
446 TS_EIMEX *ext = (TS_EIMEX *)ts->data; in TSEIMEXSetMaxRows_EIMEX() local
451 PetscCall(PetscFree(ext->N)); in TSEIMEXSetMaxRows_EIMEX()
452 ext->max_rows = nrows; in TSEIMEXSetMaxRows_EIMEX()
453 PetscCall(PetscMalloc1(nrows, &ext->N)); in TSEIMEXSetMaxRows_EIMEX()
454 for (i = 0; i < nrows; i++) ext->N[i] = i + 1; in TSEIMEXSetMaxRows_EIMEX()
460 TS_EIMEX *ext = (TS_EIMEX *)ts->data; in TSEIMEXSetRowCol_EIMEX() local
464 …PetscCheck(row <= ext->max_rows && col <= ext->max_rows, ((PetscObject)ts)->comm, PETSC_ERR_ARG_OU… in TSEIMEXSetRowCol_EIMEX()
465 ext->max_rows); in TSEIMEXSetRowCol_EIMEX()
468 ext->row_ind = row - 1; in TSEIMEXSetRowCol_EIMEX()
469 ext->col_ind = col - 1; /* Array index in C starts from 0 */ in TSEIMEXSetRowCol_EIMEX()
475 TS_EIMEX *ext = (TS_EIMEX *)ts->data; in TSEIMEXSetOrdAdapt_EIMEX() local
478 ext->ord_adapt = flg; in TSEIMEXSetOrdAdapt_EIMEX()
522 TS_EIMEX *ext; in TSCreate_EIMEX() local
539 PetscCall(PetscNew(&ext)); in TSCreate_EIMEX()
540 ts->data = (void *)ext; in TSCreate_EIMEX()
542 ext->ord_adapt = PETSC_FALSE; /* By default, no order adapativity */ in TSCreate_EIMEX()
543 ext->row_ind = -1; in TSCreate_EIMEX()
544 ext->col_ind = -1; in TSCreate_EIMEX()
545 ext->max_rows = TSEIMEXDefault; in TSCreate_EIMEX()
546 ext->nstages = TSEIMEXDefault; in TSCreate_EIMEX()