Lines Matching refs:irk
69 TS_IRK *irk = (TS_IRK *)ts->data; in TSIRKTableauCreate() local
70 IRKTableau tab = irk->tableau; in TSIRKTableauCreate()
73 irk->order = nstages; in TSIRKTableauCreate()
271 TS_IRK *irk = (TS_IRK *)ts->data; in TSEvaluateStep_IRK() local
272 IRKTableau tab = irk->tableau; in TSEvaluateStep_IRK()
273 Vec *YdotI = irk->YdotI; in TSEvaluateStep_IRK()
274 PetscScalar *w = irk->work; in TSEvaluateStep_IRK()
279 switch (irk->status) { in TSEvaluateStep_IRK()
292 for (j = 0; j < irk->nstages; j++) w[j] = h * tab->b[j]; in TSEvaluateStep_IRK()
293 PetscCall(VecMAXPY(U, irk->nstages, w, YdotI)); in TSEvaluateStep_IRK()
299 TS_IRK *irk = (TS_IRK *)ts->data; in TSRollBack_IRK() local
302 PetscCall(VecCopy(irk->U0, ts->vec_sol)); in TSRollBack_IRK()
308 TS_IRK *irk = (TS_IRK *)ts->data; in TSStep_IRK() local
309 IRKTableau tab = irk->tableau; in TSStep_IRK()
311 const PetscInt nstages = irk->nstages; in TSStep_IRK()
320 if (!ts->steprollback) PetscCall(VecCopy(ts->vec_sol, irk->U0)); in TSStep_IRK()
322 …for (i = 0; i < nstages; i++) PetscCall(VecStrideScatter(ts->vec_sol, i * bs, irk->Z, INSERT_VALUE… in TSStep_IRK()
324 irk->status = TS_STEP_INCOMPLETE; in TSStep_IRK()
325 while (!ts->reason && irk->status != TS_STEP_COMPLETE) { in TSStep_IRK()
326 PetscCall(VecCopy(ts->vec_sol, irk->U)); in TSStep_IRK()
328 PetscCall(SNESSolve(snes, NULL, irk->Z)); in TSStep_IRK()
333 PetscCall(VecStrideGatherAll(irk->Z, irk->Y, INSERT_VALUES)); in TSStep_IRK()
335 PetscCall(VecZeroEntries(irk->YdotI[i])); in TSStep_IRK()
336 …or (j = 0; j < nstages; j++) PetscCall(VecAXPY(irk->YdotI[i], A_inv[i + j * nstages] / ts->time_st… in TSStep_IRK()
337 PetscCall(VecAXPY(irk->YdotI[i], -A_inv_rowsum[i] / ts->time_step, irk->U)); in TSStep_IRK()
339 irk->status = TS_STEP_INCOMPLETE; in TSStep_IRK()
340 PetscCall(TSEvaluateStep_IRK(ts, irk->order, ts->vec_sol, NULL)); in TSStep_IRK()
341 irk->status = TS_STEP_PENDING; in TSStep_IRK()
344 irk->status = accept ? TS_STEP_COMPLETE : TS_STEP_INCOMPLETE; in TSStep_IRK()
367 TS_IRK *irk = (TS_IRK *)ts->data; in TSInterpolate_IRK() local
368 PetscInt nstages = irk->nstages, pinterp = irk->pinterp, i, j; in TSInterpolate_IRK()
372 const PetscReal *B = irk->tableau->binterp; in TSInterpolate_IRK()
375 …tscObject)ts), PETSC_ERR_SUP, "TSIRK %s does not have an interpolation formula", irk->method_name); in TSInterpolate_IRK()
376 switch (irk->status) { in TSInterpolate_IRK()
394 PetscCall(VecMAXPY(U, nstages, bt, irk->YdotI)); in TSInterpolate_IRK()
400 TS_IRK *irk = (TS_IRK *)ts->data; in TSIRKTableauReset() local
401 IRKTableau tab = irk->tableau; in TSIRKTableauReset()
412 TS_IRK *irk = (TS_IRK *)ts->data; in TSReset_IRK() local
416 if (irk->tableau) PetscCall(PetscFree(irk->tableau)); in TSReset_IRK()
417 if (irk->method_name) PetscCall(PetscFree(irk->method_name)); in TSReset_IRK()
418 if (irk->work) PetscCall(PetscFree(irk->work)); in TSReset_IRK()
419 PetscCall(VecDestroyVecs(irk->nstages, &irk->Y)); in TSReset_IRK()
420 PetscCall(VecDestroyVecs(irk->nstages, &irk->YdotI)); in TSReset_IRK()
421 PetscCall(VecDestroy(&irk->Ydot)); in TSReset_IRK()
422 PetscCall(VecDestroy(&irk->Z)); in TSReset_IRK()
423 PetscCall(VecDestroy(&irk->U)); in TSReset_IRK()
424 PetscCall(VecDestroy(&irk->U0)); in TSReset_IRK()
425 PetscCall(MatDestroy(&irk->TJ)); in TSReset_IRK()
431 TS_IRK *irk = (TS_IRK *)ts->data; in TSIRKGetVecs() local
436 else *U = irk->U; in TSIRKGetVecs()
458 TS_IRK *irk = (TS_IRK *)ts->data; in SNESTSFormFunction_IRK() local
459 IRKTableau tab = irk->tableau; in SNESTSFormFunction_IRK()
460 const PetscInt nstages = irk->nstages; in SNESTSFormFunction_IRK()
464 Vec U, *YdotI = irk->YdotI, Ydot = irk->Ydot, *Y = irk->Y; in SNESTSFormFunction_IRK()
494 TS_IRK *irk = (TS_IRK *)ts->data; in SNESTSFormJacobian_IRK() local
495 IRKTableau tab = irk->tableau; in SNESTSFormJacobian_IRK()
496 const PetscInt nstages = irk->nstages; in SNESTSFormJacobian_IRK()
499 Vec *Y = irk->Y, Ydot = irk->Ydot; in SNESTSFormJacobian_IRK()
510 …scObject)ts), PETSC_ERR_SUP, "TSIRK %s does not support implicit formula", irk->method_name); /* T… in SNESTSFormJacobian_IRK()
569 TS_IRK *irk = (TS_IRK *)ts->data; in TSSetUp_IRK() local
570 IRKTableau tab = irk->tableau; in TSSetUp_IRK()
574 const PetscInt nstages = irk->nstages; in TSSetUp_IRK()
578 if (!irk->work) PetscCall(PetscMalloc1(irk->nstages, &irk->work)); in TSSetUp_IRK()
579 if (!irk->Y) PetscCall(VecDuplicateVecs(ts->vec_sol, irk->nstages, &irk->Y)); in TSSetUp_IRK()
580 if (!irk->YdotI) PetscCall(VecDuplicateVecs(ts->vec_sol, irk->nstages, &irk->YdotI)); in TSSetUp_IRK()
581 if (!irk->Ydot) PetscCall(VecDuplicate(ts->vec_sol, &irk->Ydot)); in TSSetUp_IRK()
582 if (!irk->U) PetscCall(VecDuplicate(ts->vec_sol, &irk->U)); in TSSetUp_IRK()
583 if (!irk->U0) PetscCall(VecDuplicate(ts->vec_sol, &irk->U0)); in TSSetUp_IRK()
584 if (!irk->Z) { in TSSetUp_IRK()
585 PetscCall(VecCreate(PetscObjectComm((PetscObject)ts->vec_sol), &irk->Z)); in TSSetUp_IRK()
587 PetscCall(VecSetSizes(irk->Z, PETSC_DECIDE, vsize * irk->nstages)); in TSSetUp_IRK()
589 PetscCall(VecSetBlockSize(irk->Z, irk->nstages * bs)); in TSSetUp_IRK()
590 PetscCall(VecSetFromOptions(irk->Z)); in TSSetUp_IRK()
597 PetscCall(VecDuplicate(irk->Z, &R)); in TSSetUp_IRK()
600 if (!irk->TJ) { in TSSetUp_IRK()
602 PetscCall(MatCreateKAIJ(J, nstages, nstages, tab->A_inv, tab->I_s, &irk->TJ)); in TSSetUp_IRK()
604 PetscCall(SNESSetJacobian(ts->snes, irk->TJ, irk->TJ, SNESTSFormJacobian, ts)); in TSSetUp_IRK()
611 TS_IRK *irk = (TS_IRK *)ts->data; in TSSetFromOptions_IRK() local
618 …-ts_irk_nstages", "Stages of the IRK method", "TSIRKSetNumStages", irk->nstages, &irk->nstages, &f… in TSSetFromOptions_IRK()
619 …-ts_irk_type", "Type of IRK method", "TSIRKSetType", TSIRKList, irk->method_name[0] ? irk->method_… in TSSetFromOptions_IRK()
620 …if (flg1 || flg2 || !irk->method_name[0]) { /* Create the method tableau after nstages or method i… in TSSetFromOptions_IRK()
630 TS_IRK *irk = (TS_IRK *)ts->data; in TSView_IRK() local
636 IRKTableau tab = irk->tableau; in TSView_IRK()
642 PetscCall(PetscFormatRealArray(buf, sizeof(buf), "% 8.6f", irk->nstages, tab->c)); in TSView_IRK()
644 …PetscCall(PetscViewerASCIIPrintf(viewer, "Stiffly accurate: %s\n", irk->stiffly_accurate ? "yes" :… in TSView_IRK()
645 PetscCall(PetscFormatRealArray(buf, sizeof(buf), "% 8.6f", PetscSqr(irk->nstages), tab->A)); in TSView_IRK()
763 TS_IRK *irk = (TS_IRK *)ts->data; in TSIRKGetType_IRK() local
766 *irktype = irk->method_name; in TSIRKGetType_IRK()
772 TS_IRK *irk = (TS_IRK *)ts->data; in TSIRKSetType_IRK() local
776 if (irk->method_name) { in TSIRKSetType_IRK()
777 PetscCall(PetscFree(irk->method_name)); in TSIRKSetType_IRK()
783 PetscCall(PetscStrallocpy(irktype, &irk->method_name)); in TSIRKSetType_IRK()
789 TS_IRK *irk = (TS_IRK *)ts->data; in TSIRKSetNumStages_IRK() local
793 irk->nstages = nstages; in TSIRKSetNumStages_IRK()
799 TS_IRK *irk = (TS_IRK *)ts->data; in TSIRKGetNumStages_IRK() local
803 *nstages = irk->nstages; in TSIRKGetNumStages_IRK()
839 TS_IRK *irk; in TSCreate_IRK() local
859 PetscCall(PetscNew(&irk)); in TSCreate_IRK()
860 ts->data = (void *)irk; in TSCreate_IRK()
867 PetscCall(PetscNew(&irk->tableau)); in TSCreate_IRK()
868 irk->nstages = 3; in TSCreate_IRK()