Lines Matching refs:appctx
29 PetscErrorCode InitializeLambda(DM da, Vec lambda, Vec U, AppCtx *appctx) in InitializeLambda() argument
64 PetscErrorCode GenerateOBs(TS ts, Vec U, AppCtx *appctx) in GenerateOBs() argument
212 AppCtx appctx; in main() local
222 appctx.D1 = 8.0e-5; in main()
223 appctx.D2 = 4.0e-5; in main()
224 appctx.gamma = .024; in main()
225 appctx.kappa = .06; in main()
226 appctx.aijpc = PETSC_FALSE; in main()
237 PetscCall(DMCreateGlobalVector(da, &appctx.U)); in main()
240 PetscCall(TSCreate(PETSC_COMM_WORLD, &appctx.ts)); in main()
241 PetscCall(TSSetType(appctx.ts, TSCN)); in main()
242 PetscCall(TSSetDM(appctx.ts, da)); in main()
243 PetscCall(TSSetProblemType(appctx.ts, TS_NONLINEAR)); in main()
244 …PetscCall(TSSetEquationType(appctx.ts, TS_EQ_ODE_EXPLICIT)); /* less Jacobian evaluations when adj… in main()
246 PetscCall(TSSetRHSFunction(appctx.ts, NULL, RHSFunction, &appctx)); in main()
247 PetscCall(TSSetRHSJacobian(appctx.ts, NULL, NULL, RHSJacobian, &appctx)); in main()
249 PetscCall(TSSetIFunction(appctx.ts, NULL, IFunction, &appctx)); in main()
250 PetscCall(TSSetIJacobian(appctx.ts, NULL, NULL, IJacobian, &appctx)); in main()
254 PetscCall(InitialConditions(da, appctx.U)); in main()
255 PetscCall(TSSetSolution(appctx.ts, appctx.U)); in main()
258 PetscCall(TSSetMaxTime(appctx.ts, 2000.0)); in main()
259 PetscCall(TSSetTimeStep(appctx.ts, 0.5)); in main()
260 PetscCall(TSSetExactFinalTime(appctx.ts, TS_EXACTFINALTIME_MATCHSTEP)); in main()
261 PetscCall(TSSetFromOptions(appctx.ts)); in main()
263 PetscCall(GenerateOBs(appctx.ts, appctx.U, &appctx)); in main()
274 PetscCall(PerturbedInitialConditions(da, appctx.U)); in main()
276 PetscCall(PerturbedInitialConditions2(da, appctx.U)); in main()
278 PetscCall(PerturbedInitialConditions3(da, appctx.U)); in main()
281 PetscCall(VecDuplicate(appctx.U, &lambda[0])); in main()
282 PetscCall(TSSetCostGradients(appctx.ts, 1, lambda, NULL)); in main()
285 PetscCall(TSSetSaveTrajectory(appctx.ts)); in main()
292 PetscCall(VecDuplicate(appctx.U, &P)); in main()
293 PetscCall(VecCopy(appctx.U, P)); in main()
297 PetscCall(TaoSetObjectiveAndGradient(tao, NULL, FormFunctionAndGradient, &appctx)); in main()
311 PetscCall(VecDestroy(&appctx.U)); in main()
312 PetscCall(TSDestroy(&appctx.ts)); in main()
334 AppCtx *appctx = (AppCtx *)ctx; in FormFunctionAndGradient() local
343 PetscCall(TSSetTime(appctx->ts, 0.0)); in FormFunctionAndGradient()
344 PetscCall(TSGetTimeStep(appctx->ts, ×tep)); in FormFunctionAndGradient()
345 if (timestep < 0) PetscCall(TSSetTimeStep(appctx->ts, -timestep)); in FormFunctionAndGradient()
346 PetscCall(TSSetStepNumber(appctx->ts, 0)); in FormFunctionAndGradient()
347 PetscCall(TSSetFromOptions(appctx->ts)); in FormFunctionAndGradient()
350 PetscCall(VecCopy(P, appctx->U)); in FormFunctionAndGradient()
351 PetscCall(TSGetDM(appctx->ts, &da)); in FormFunctionAndGradient()
354 PetscCall(TSSolve(appctx->ts, appctx->U)); in FormFunctionAndGradient()
359 PetscCall(VecAYPX(SDiff, -1., appctx->U)); in FormFunctionAndGradient()
363 PetscCall(TSGetCostGradients(appctx->ts, NULL, &lambda, NULL)); in FormFunctionAndGradient()
365 PetscCall(InitializeLambda(da, lambda[0], appctx->U, appctx)); in FormFunctionAndGradient()
366 PetscCall(TSAdjointSolve(appctx->ts)); in FormFunctionAndGradient()