Lines Matching refs:ctx
47 static PetscErrorCode RHSFunction(TS ts, PetscReal t, Vec U, Vec F, AppCtx *ctx) in RHSFunction() argument
56 …if ((t > ctx->tf) && (t < ctx->tcl)) Pmax = 0.0; /* A short-circuit on the generator terminal that… in RHSFunction()
57 else Pmax = ctx->Pmax; in RHSFunction()
59 f[0] = ctx->omega_b * (u[1] - ctx->omega_s); in RHSFunction()
60 …f[1] = (-Pmax * PetscSinScalar(u[0]) - ctx->D * (u[1] - ctx->omega_s) + ctx->Pm) * ctx->omega_s / … in RHSFunction()
70 static PetscErrorCode RHSJacobian(TS ts, PetscReal t, Vec U, Mat A, Mat B, AppCtx *ctx) in RHSJacobian() argument
78 …if ((t > ctx->tf) && (t < ctx->tcl)) Pmax = 0.0; /* A short-circuit on the generator terminal that… in RHSJacobian()
79 else Pmax = ctx->Pmax; in RHSJacobian()
82 J[0][1] = ctx->omega_b; in RHSJacobian()
83 J[1][1] = -ctx->D * ctx->omega_s / (2.0 * ctx->H); in RHSJacobian()
84 J[1][0] = -Pmax * PetscCosScalar(u[0]) * ctx->omega_s / (2.0 * ctx->H); in RHSJacobian()
102 AppCtx *ctx = (AppCtx *)ctx0; in RHSJacobianP() local
106 J[1][0] = ctx->omega_s / (2.0 * ctx->H); in RHSJacobianP()
113 static PetscErrorCode CostIntegrand(TS ts, PetscReal t, Vec U, Vec R, AppCtx *ctx) in CostIntegrand() argument
121 r[0] = ctx->c * PetscPowScalarInt(PetscMax(0., u[0] - ctx->u_s), ctx->beta); in CostIntegrand()
127 static PetscErrorCode DRDUJacobianTranspose(TS ts, PetscReal t, Vec U, Mat DRDU, Mat B, AppCtx *ctx) in DRDUJacobianTranspose() argument
135 ru[0] = ctx->c * ctx->beta * PetscPowScalarInt(PetscMax(0., u[0] - ctx->u_s), ctx->beta - 1); in DRDUJacobianTranspose()
143 static PetscErrorCode DRDPJacobianTranspose(TS ts, PetscReal t, Vec U, Mat DRDP, AppCtx *ctx) in DRDPJacobianTranspose() argument
152 PetscErrorCode ComputeSensiP(Vec lambda, Vec mu, AppCtx *ctx) in ComputeSensiP() argument
160 …sensip = 1. / PetscSqrtScalar(1. - (ctx->Pm / ctx->Pmax) * (ctx->Pm / ctx->Pmax)) / ctx->Pmax * x[… in ComputeSensiP()
172 AppCtx ctx; in main() local
197 ctx.beta = 2; in main()
198 ctx.c = PetscRealConstant(10000.0); in main()
199 ctx.u_s = PetscRealConstant(1.0); in main()
200 ctx.omega_s = PetscRealConstant(1.0); in main()
201 ctx.omega_b = PetscRealConstant(120.0) * PETSC_PI; in main()
202 ctx.H = PetscRealConstant(5.0); in main()
203 PetscCall(PetscOptionsScalar("-Inertia", "", "", ctx.H, &ctx.H, NULL)); in main()
204 ctx.D = PetscRealConstant(5.0); in main()
205 PetscCall(PetscOptionsScalar("-D", "", "", ctx.D, &ctx.D, NULL)); in main()
206 ctx.E = PetscRealConstant(1.1378); in main()
207 ctx.V = PetscRealConstant(1.0); in main()
208 ctx.X = PetscRealConstant(0.545); in main()
209 ctx.Pmax = ctx.E * ctx.V / ctx.X; in main()
210 PetscCall(PetscOptionsScalar("-Pmax", "", "", ctx.Pmax, &ctx.Pmax, NULL)); in main()
211 ctx.Pm = PetscRealConstant(1.0194); in main()
212 PetscCall(PetscOptionsScalar("-Pm", "", "", ctx.Pm, &ctx.Pm, NULL)); in main()
213 ctx.tf = PetscRealConstant(0.1); in main()
214 ctx.tcl = PetscRealConstant(0.2); in main()
215 PetscCall(PetscOptionsReal("-tf", "Time to start fault", "", ctx.tf, &ctx.tf, NULL)); in main()
216 PetscCall(PetscOptionsReal("-tcl", "Time to end fault", "", ctx.tcl, &ctx.tcl, NULL)); in main()
243 PetscCall(TSCreate(PETSC_COMM_WORLD, &ctx.ts)); in main()
244 PetscCall(TSSetProblemType(ctx.ts, TS_NONLINEAR)); in main()
245 …PetscCall(TSSetEquationType(ctx.ts, TS_EQ_ODE_EXPLICIT)); /* less Jacobian evaluations when adjoin… in main()
246 PetscCall(TSSetType(ctx.ts, TSRK)); in main()
247 PetscCall(TSSetRHSFunction(ctx.ts, NULL, (TSRHSFunctionFn *)RHSFunction, &ctx)); in main()
248 PetscCall(TSSetRHSJacobian(ctx.ts, A, A, (TSRHSJacobianFn *)RHSJacobian, &ctx)); in main()
249 PetscCall(TSSetExactFinalTime(ctx.ts, TS_EXACTFINALTIME_MATCHSTEP)); in main()
253 PetscCall(TSSetCostGradients(ctx.ts, 1, lambda, mu)); in main()
254 PetscCall(TSSetRHSJacobianP(ctx.ts, Jacp, RHSJacobianP, &ctx)); in main()
259 PetscCall(TSSetMaxTime(ctx.ts, PetscRealConstant(1.0))); in main()
260 PetscCall(TSSetTimeStep(ctx.ts, PetscRealConstant(0.01))); in main()
261 PetscCall(TSSetFromOptions(ctx.ts)); in main()
263 PetscCall(TSGetTimeStep(ctx.ts, &ctx.dt)); /* save the stepsize */ in main()
265 PetscCall(TSCreateQuadratureTS(ctx.ts, PETSC_TRUE, &quadts)); in main()
266 PetscCall(TSSetRHSFunction(quadts, NULL, (TSRHSFunctionFn *)CostIntegrand, &ctx)); in main()
267 PetscCall(TSSetRHSJacobian(quadts, DRDU, DRDU, (TSRHSJacobianFn *)DRDUJacobianTranspose, &ctx)); in main()
268 PetscCall(TSSetRHSJacobianP(quadts, DRDP, (TSRHSJacobianPFn *)DRDPJacobianTranspose, &ctx)); in main()
269 PetscCall(TSSetSolution(ctx.ts, U)); in main()
281 x_ptr[0] = ctx.Pm; in main()
286 PetscCall(TaoSetObjective(tao, FormFunction, (void *)&ctx)); in main()
287 PetscCall(TaoSetGradient(tao, NULL, FormGradient, (void *)&ctx)); in main()
318 PetscCall(TSDestroy(&ctx.ts)); in main()
344 AppCtx *ctx = (AppCtx *)ctx0; in FormFunction() local
345 TS ts = ctx->ts; in FormFunction()
353 ctx->Pm = x_ptr[0]; in FormFunction()
361 PetscCall(TSSetTimeStep(ts, ctx->dt)); in FormFunction()
371 u[0] = PetscAsinScalar(ctx->Pm / ctx->Pmax); in FormFunction()
381 *f = -ctx->Pm + x_ptr[0]; in FormFunction()
388 AppCtx *ctx = (AppCtx *)ctx0; in FormGradient() local
389 TS ts = ctx->ts; in FormGradient()
399 ctx->Pm = x_ptr[0]; in FormGradient()
407 PetscCall(TSSetTimeStep(ts, ctx->dt)); in FormGradient()
417 u[0] = PetscAsinScalar(ctx->Pm / ctx->Pmax); in FormGradient()
448 PetscCall(ComputeSensiP(lambda[0], mu[0], ctx)); in FormGradient()