Lines Matching refs:rk
487 TS_RK *rk = (TS_RK *)ts->data; in TSRKGetTableau_RK() local
488 RKTableau tab = rk->tableau; in TSRKGetTableau_RK()
550 TS_RK *rk = (TS_RK *)ts->data; in TSEvaluateStep_RK() local
551 RKTableau tab = rk->tableau; in TSEvaluateStep_RK()
552 PetscScalar *w = rk->work; in TSEvaluateStep_RK()
557 switch (rk->status) { in TSEvaluateStep_RK()
569 if (rk->status == TS_STEP_INCOMPLETE) { in TSEvaluateStep_RK()
571 for (j = 0; j < s; j++) w[j] = h * tab->b[j] / rk->dtratio; in TSEvaluateStep_RK()
572 PetscCall(VecMAXPY(X, s, w, rk->YdotRHS)); in TSEvaluateStep_RK()
577 if (rk->status == TS_STEP_INCOMPLETE) { /*Complete with the embedded method (be)*/ in TSEvaluateStep_RK()
580 PetscCall(VecMAXPY(X, s, w, rk->YdotRHS)); in TSEvaluateStep_RK()
584 PetscCall(VecMAXPY(X, s, w, rk->YdotRHS)); in TSEvaluateStep_RK()
598 TS_RK *rk = (TS_RK *)ts->data; in TSForwardCostIntegral_RK() local
600 RKTableau tab = rk->tableau; in TSForwardCostIntegral_RK()
603 Vec *Y = rk->Y; in TSForwardCostIntegral_RK()
610 …PetscCall(TSComputeRHSFunction(quadts, rk->ptime + rk->time_step * c[i], Y[i], ts->vec_costintegra… in TSForwardCostIntegral_RK()
611 PetscCall(VecAXPY(quadts->vec_sol, rk->time_step * b[i], ts->vec_costintegrand)); in TSForwardCostIntegral_RK()
618 TS_RK *rk = (TS_RK *)ts->data; in TSAdjointCostIntegral_RK() local
619 RKTableau tab = rk->tableau; in TSAdjointCostIntegral_RK()
623 Vec *Y = rk->Y; in TSAdjointCostIntegral_RK()
637 TS_RK *rk = (TS_RK *)ts->data; in TSRollBack_RK() local
639 RKTableau tab = rk->tableau; in TSRollBack_RK()
642 PetscScalar *w = rk->work; in TSRollBack_RK()
643 Vec *Y = rk->Y, *YdotRHS = rk->YdotRHS; in TSRollBack_RK()
648 switch (rk->status) { in TSRollBack_RK()
664 PetscCall(TSComputeRHSFunction(quadts, rk->ptime + h * c[j], Y[j], ts->vec_costintegrand)); in TSRollBack_RK()
673 TS_RK *rk = (TS_RK *)ts->data; in TSForwardStep_RK() local
674 RKTableau tab = rk->tableau; in TSForwardStep_RK()
675 Mat J, *MatsFwdSensipTemp = rk->MatsFwdSensipTemp; in TSForwardStep_RK()
678 Vec *Y = rk->Y; in TSForwardStep_RK()
684 PetscCall(MatCopy(ts->mat_sensip, rk->MatFwdSensip0, SAME_NONZERO_PATTERN)); in TSForwardStep_RK()
693 PetscCall(MatCopy(ts->mat_sensip, rk->MatsFwdStageSensip[i], SAME_NONZERO_PATTERN)); in TSForwardStep_RK()
695 PetscCall(MatZeroEntries(rk->MatsFwdStageSensip[i])); in TSForwardStep_RK()
696 …for (j = 0; j < i; j++) PetscCall(MatAXPY(rk->MatsFwdStageSensip[i], h * A[i * s + j], MatsFwdSens… in TSForwardStep_RK()
697 PetscCall(MatAXPY(rk->MatsFwdStageSensip[i], 1., ts->mat_sensip, SAME_NONZERO_PATTERN)); in TSForwardStep_RK()
699 PetscCall(MatZeroEntries(rk->MatsFwdStageSensip[i])); in TSForwardStep_RK()
703 …PetscCall(MatMatMult(J, rk->MatsFwdStageSensip[i], MAT_REUSE_MATRIX, PETSC_DETERMINE, &MatsFwdSens… in TSForwardStep_RK()
709 PetscCall(VecPlaceArray(rk->VecDeltaFwdSensipCol, xarr)); in TSForwardStep_RK()
710 …PetscCall(MatMultAdd(ts->Jacprhs, ts->vec_dir, rk->VecDeltaFwdSensipCol, rk->VecDeltaFwdSensipCol)… in TSForwardStep_RK()
711 PetscCall(VecResetArray(rk->VecDeltaFwdSensipCol)); in TSForwardStep_RK()
719 …for (i = 0; i < s; i++) PetscCall(MatAXPY(ts->mat_sensip, h * b[i], rk->MatsFwdSensipTemp[i], SAME… in TSForwardStep_RK()
720 rk->status = TS_STEP_COMPLETE; in TSForwardStep_RK()
726 TS_RK *rk = (TS_RK *)ts->data; in TSForwardGetStages_RK() local
727 RKTableau tab = rk->tableau; in TSForwardGetStages_RK()
731 if (stagesensip) *stagesensip = rk->MatsFwdStageSensip; in TSForwardGetStages_RK()
737 TS_RK *rk = (TS_RK *)ts->data; in TSForwardSetUp_RK() local
738 RKTableau tab = rk->tableau; in TSForwardSetUp_RK()
743 PetscCall(MatDuplicate(ts->mat_sensip, MAT_DO_NOT_COPY_VALUES, &rk->MatFwdSensip0)); in TSForwardSetUp_RK()
745 PetscCall(PetscMalloc1(tab->s, &rk->MatsFwdStageSensip)); in TSForwardSetUp_RK()
746 PetscCall(PetscMalloc1(tab->s, &rk->MatsFwdSensipTemp)); in TSForwardSetUp_RK()
748 PetscCall(MatDuplicate(ts->mat_sensip, MAT_DO_NOT_COPY_VALUES, &rk->MatsFwdStageSensip[i])); in TSForwardSetUp_RK()
749 PetscCall(MatDuplicate(ts->mat_sensip, MAT_DO_NOT_COPY_VALUES, &rk->MatsFwdSensipTemp[i])); in TSForwardSetUp_RK()
751 PetscCall(VecDuplicate(ts->vec_sol, &rk->VecDeltaFwdSensipCol)); in TSForwardSetUp_RK()
757 TS_RK *rk = (TS_RK *)ts->data; in TSForwardReset_RK() local
758 RKTableau tab = rk->tableau; in TSForwardReset_RK()
762 PetscCall(MatDestroy(&rk->MatFwdSensip0)); in TSForwardReset_RK()
763 if (rk->MatsFwdStageSensip) { in TSForwardReset_RK()
764 for (i = 0; i < tab->s; i++) PetscCall(MatDestroy(&rk->MatsFwdStageSensip[i])); in TSForwardReset_RK()
765 PetscCall(PetscFree(rk->MatsFwdStageSensip)); in TSForwardReset_RK()
767 if (rk->MatsFwdSensipTemp) { in TSForwardReset_RK()
768 for (i = 0; i < tab->s; i++) PetscCall(MatDestroy(&rk->MatsFwdSensipTemp[i])); in TSForwardReset_RK()
769 PetscCall(PetscFree(rk->MatsFwdSensipTemp)); in TSForwardReset_RK()
771 PetscCall(VecDestroy(&rk->VecDeltaFwdSensipCol)); in TSForwardReset_RK()
777 TS_RK *rk = (TS_RK *)ts->data; in TSStep_RK() local
778 RKTableau tab = rk->tableau; in TSStep_RK()
781 PetscScalar *w = rk->work; in TSStep_RK()
782 Vec *Y = rk->Y, *YdotRHS = rk->YdotRHS; in TSStep_RK()
783 PetscBool FSAL = (PetscBool)(tab->FSAL && !rk->newtableau); in TSStep_RK()
793 rk->newtableau = PETSC_FALSE; in TSStep_RK()
795 rk->status = TS_STEP_INCOMPLETE; in TSStep_RK()
796 while (!ts->reason && rk->status != TS_STEP_COMPLETE) { in TSStep_RK()
800 rk->stage_time = t + h * c[i]; in TSStep_RK()
801 PetscCall(TSPreStage(ts, rk->stage_time)); in TSStep_RK()
805 PetscCall(TSPostStage(ts, rk->stage_time, i, Y)); in TSStep_RK()
807 PetscCall(TSAdaptCheckStage(adapt, ts, rk->stage_time, Y[i], &stageok)); in TSStep_RK()
813 rk->status = TS_STEP_INCOMPLETE; in TSStep_RK()
815 rk->status = TS_STEP_PENDING; in TSStep_RK()
820 rk->status = accept ? TS_STEP_COMPLETE : TS_STEP_INCOMPLETE; in TSStep_RK()
828 rk->ptime = ts->ptime; in TSStep_RK()
829 rk->time_step = ts->time_step; in TSStep_RK()
849 TS_RK *rk = (TS_RK *)ts->data; in TSAdjointSetUp_RK() local
850 RKTableau tab = rk->tableau; in TSAdjointSetUp_RK()
856 PetscCall(VecDuplicateVecs(ts->vecs_sensi[0], s * ts->numcost, &rk->VecsDeltaLam)); in TSAdjointSetUp_RK()
857 PetscCall(VecDuplicateVecs(ts->vecs_sensi[0], ts->numcost, &rk->VecsSensiTemp)); in TSAdjointSetUp_RK()
858 if (ts->vecs_sensip) PetscCall(VecDuplicate(ts->vecs_sensip[0], &rk->VecDeltaMu)); in TSAdjointSetUp_RK()
860 PetscCall(VecDuplicateVecs(ts->vecs_sensi[0], s * ts->numcost, &rk->VecsDeltaLam2)); in TSAdjointSetUp_RK()
861 PetscCall(VecDuplicateVecs(ts->vecs_sensi2[0], ts->numcost, &rk->VecsSensi2Temp)); in TSAdjointSetUp_RK()
863 if (ts->vecs_sensi2p) PetscCall(VecDuplicate(ts->vecs_sensi2p[0], &rk->VecDeltaMu2)); in TSAdjointSetUp_RK()
873 TS_RK *rk = (TS_RK *)ts->data; in TSAdjointStep_RK() local
875 RKTableau tab = rk->tableau; in TSAdjointStep_RK()
879 PetscScalar *w = rk->work, *xarr; in TSAdjointStep_RK()
880 …Vec *Y = rk->Y, *VecsDeltaLam = rk->VecsDeltaLam, VecDeltaMu = rk->VecDeltaMu, *VecsSe… in TSAdjointStep_RK()
881 …Vec *VecsDeltaLam2 = rk->VecsDeltaLam2, VecDeltaMu2 = rk->VecDeltaMu2, *VecsSensi2Temp… in TSAdjointStep_RK()
888 rk->status = TS_STEP_INCOMPLETE; in TSAdjointStep_RK()
897 rk->stage_time = t + h * (1.0 - c[i]); in TSAdjointStep_RK()
899 …if (quadts) PetscCall(TSComputeRHSJacobian(quadts, rk->stage_time, Y[i], Jquad, Jquad)); /* get r_… in TSAdjointStep_RK()
901 …PetscCall(TSComputeRHSJacobianP(ts, rk->stage_time, Y[i], ts->Jacprhs)); /* ge… in TSAdjointStep_RK()
902 …if (quadts) PetscCall(TSComputeRHSJacobianP(quadts, rk->stage_time, Y[i], quadts->Jacprhs)); /* ge… in TSAdjointStep_RK()
955 PetscCall(MatDenseGetColumn(rk->MatsFwdStageSensip[i], 0, &xarr)); in TSAdjointStep_RK()
958 …PetscCall(TSComputeRHSHessianProductFunctionUU(ts, rk->stage_time, Y[i], VecsSensiTemp, ts->vec_se… in TSAdjointStep_RK()
961 …PetscCall(TSComputeRHSHessianProductFunctionUU(quadts, rk->stage_time, Y[i], NULL, ts->vec_sensip_… in TSAdjointStep_RK()
965 …PetscCall(TSComputeRHSHessianProductFunctionUP(ts, rk->stage_time, Y[i], VecsSensiTemp, ts->vec_di… in TSAdjointStep_RK()
968 …PetscCall(TSComputeRHSHessianProductFunctionUP(quadts, rk->stage_time, Y[i], NULL, ts->vec_sensip_… in TSAdjointStep_RK()
973 …PetscCall(TSComputeRHSHessianProductFunctionPU(ts, rk->stage_time, Y[i], VecsSensiTemp, ts->vec_se… in TSAdjointStep_RK()
975 …PetscCall(TSComputeRHSHessianProductFunctionPP(ts, rk->stage_time, Y[i], VecsSensiTemp, ts->vec_di… in TSAdjointStep_RK()
978 …PetscCall(TSComputeRHSHessianProductFunctionPU(quadts, rk->stage_time, Y[i], NULL, ts->vec_sensip_… in TSAdjointStep_RK()
980 …PetscCall(TSComputeRHSHessianProductFunctionPP(quadts, rk->stage_time, Y[i], NULL, ts->vec_dir, ts… in TSAdjointStep_RK()
984 PetscCall(MatDenseRestoreColumn(rk->MatsFwdStageSensip[i], &xarr)); in TSAdjointStep_RK()
1027 rk->status = TS_STEP_COMPLETE; in TSAdjointStep_RK()
1033 TS_RK *rk = (TS_RK *)ts->data; in TSAdjointReset_RK() local
1034 RKTableau tab = rk->tableau; in TSAdjointReset_RK()
1037 PetscCall(VecDestroyVecs(tab->s * ts->numcost, &rk->VecsDeltaLam)); in TSAdjointReset_RK()
1038 PetscCall(VecDestroyVecs(ts->numcost, &rk->VecsSensiTemp)); in TSAdjointReset_RK()
1039 PetscCall(VecDestroy(&rk->VecDeltaMu)); in TSAdjointReset_RK()
1040 PetscCall(VecDestroyVecs(tab->s * ts->numcost, &rk->VecsDeltaLam2)); in TSAdjointReset_RK()
1041 PetscCall(VecDestroy(&rk->VecDeltaMu2)); in TSAdjointReset_RK()
1042 PetscCall(VecDestroyVecs(ts->numcost, &rk->VecsSensi2Temp)); in TSAdjointReset_RK()
1048 TS_RK *rk = (TS_RK *)ts->data; in TSInterpolate_RK() local
1049 PetscInt s = rk->tableau->s, p = rk->tableau->p, i, j; in TSInterpolate_RK()
1053 const PetscReal *B = rk->tableau->binterp; in TSInterpolate_RK()
1056 …tscObject)ts), PETSC_ERR_SUP, "TSRK %s does not have an interpolation formula", rk->tableau->name); in TSInterpolate_RK()
1058 switch (rk->status) { in TSInterpolate_RK()
1076 PetscCall(VecCopy(rk->Y[0], X)); in TSInterpolate_RK()
1077 PetscCall(VecMAXPY(X, s, b, rk->YdotRHS)); in TSInterpolate_RK()
1084 TS_RK *rk = (TS_RK *)ts->data; in TSRKTableauReset() local
1085 RKTableau tab = rk->tableau; in TSRKTableauReset()
1089 PetscCall(PetscFree(rk->work)); in TSRKTableauReset()
1090 PetscCall(VecDestroyVecs(tab->s, &rk->Y)); in TSRKTableauReset()
1091 PetscCall(VecDestroyVecs(tab->s, &rk->YdotRHS)); in TSRKTableauReset()
1133 TS_RK *rk = (TS_RK *)ts->data; in TSRKTableauSetUp() local
1134 RKTableau tab = rk->tableau; in TSRKTableauSetUp()
1137 PetscCall(PetscMalloc1(tab->s, &rk->work)); in TSRKTableauSetUp()
1138 PetscCall(VecDuplicateVecs(ts->vec_sol, tab->s, &rk->Y)); in TSRKTableauSetUp()
1139 PetscCall(VecDuplicateVecs(ts->vec_sol, tab->s, &rk->YdotRHS)); in TSRKTableauSetUp()
1140 rk->newtableau = PETSC_TRUE; in TSRKTableauSetUp()
1169 TS_RK *rk = (TS_RK *)ts->data; in TSSetFromOptions_RK() local
1182 …irate", "Use interpolation-based multirate RK method", "TSRKSetMultirate", rk->use_multirate, &use… in TSSetFromOptions_RK()
1184 …Family of RK method", "TSRKSetType", (const char *const *)namelist, count, rk->tableau->name, &cho… in TSSetFromOptions_RK()
1190 …sInt("-ts_rk_dtratio", "time step ratio between slow and fast", "", rk->dtratio, &rk->dtratio, NUL… in TSSetFromOptions_RK()
1197 TS_RK *rk = (TS_RK *)ts->data; in TSView_RK() local
1203 RKTableau tab = rk->tableau; in TSView_RK()
1305 TS_RK *rk = (TS_RK *)ts->data; in TSRKGetOrder_RK() local
1308 *order = rk->tableau->order; in TSRKGetOrder_RK()
1314 TS_RK *rk = (TS_RK *)ts->data; in TSRKGetType_RK() local
1317 *rktype = rk->tableau->name; in TSRKGetType_RK()
1323 TS_RK *rk = (TS_RK *)ts->data; in TSRKSetType_RK() local
1328 if (rk->tableau) { in TSRKSetType_RK()
1329 PetscCall(PetscStrcmp(rk->tableau->name, rktype, &match)); in TSRKSetType_RK()
1336 rk->tableau = &link->tab; in TSRKSetType_RK()
1338 ts->default_adapt_type = rk->tableau->bembed ? TSADAPTBASIC : TSADAPTNONE; in TSRKSetType_RK()
1347 TS_RK *rk = (TS_RK *)ts->data; in TSGetStages_RK() local
1350 if (ns) *ns = rk->tableau->s; in TSGetStages_RK()
1351 if (Y) *Y = rk->Y; in TSGetStages_RK()
1383 TS_RK *rk = (TS_RK *)ts->data; in SNESTSFormFunction_RK() local
1391 PetscCall(TSComputeRHSFunction(ts, rk->stage_time, x, y)); in SNESTSFormFunction_RK()
1398 TS_RK *rk = (TS_RK *)ts->data; in SNESTSFormJacobian_RK() local
1405 PetscCall(TSComputeRHSJacobian(ts, rk->stage_time, x, A, B)); in SNESTSFormJacobian_RK()
1474 TS_RK *rk; in TSCreate_RK() local
1504 PetscCall(PetscNew(&rk)); in TSCreate_RK()
1505 ts->data = (void *)rk; in TSCreate_RK()
1515 rk->dtratio = 1; in TSCreate_RK()