Lines Matching refs:appctx
97 AppCtx appctx; /* user-defined application context */ in main() local
112 appctx.param.N = 10; /* order of the spectral element */ in main()
113 appctx.param.E = 10; /* number of elements */ in main()
114 appctx.param.L = 4.0; /* length of the domain */ in main()
115 appctx.param.mu = 0.01; /* diffusion coefficient */ in main()
116 appctx.initial_dt = 5e-3; in main()
117 appctx.param.steps = PETSC_INT_MAX; in main()
118 appctx.param.Tend = 4; in main()
120 PetscCall(PetscOptionsGetInt(NULL, NULL, "-N", &appctx.param.N, NULL)); in main()
121 PetscCall(PetscOptionsGetInt(NULL, NULL, "-E", &appctx.param.E, NULL)); in main()
122 PetscCall(PetscOptionsGetReal(NULL, NULL, "-Tend", &appctx.param.Tend, NULL)); in main()
123 PetscCall(PetscOptionsGetReal(NULL, NULL, "-mu", &appctx.param.mu, NULL)); in main()
124 appctx.param.Le = appctx.param.L / appctx.param.E; in main()
127 …PetscCheck((appctx.param.E % size) == 0, PETSC_COMM_WORLD, PETSC_ERR_ARG_WRONG, "Number of element… in main()
132 …PetscCall(PetscMalloc2(appctx.param.N, &appctx.SEMop.gll.nodes, appctx.param.N, &appctx.SEMop.gll.… in main()
133 …aussLobattoLegendreQuadrature(appctx.param.N, PETSCGAUSSLOBATTOLEGENDRE_VIA_LINEAR_ALGEBRA, appctx… in main()
134 appctx.SEMop.gll.n = appctx.param.N; in main()
135 lenglob = appctx.param.E * (appctx.param.N - 1); in main()
143 PetscCall(DMDACreate1d(PETSC_COMM_WORLD, DM_BOUNDARY_PERIODIC, lenglob, 1, 1, NULL, &appctx.da)); in main()
144 PetscCall(DMSetFromOptions(appctx.da)); in main()
145 PetscCall(DMSetUp(appctx.da)); in main()
153 PetscCall(DMCreateGlobalVector(appctx.da, &u)); in main()
154 PetscCall(VecDuplicate(u, &appctx.dat.ic)); in main()
155 PetscCall(VecDuplicate(u, &appctx.dat.true_solution)); in main()
156 PetscCall(VecDuplicate(u, &appctx.dat.obj)); in main()
157 PetscCall(VecDuplicate(u, &appctx.SEMop.grid)); in main()
158 PetscCall(VecDuplicate(u, &appctx.SEMop.mass)); in main()
159 PetscCall(VecDuplicate(u, &appctx.dat.curr_sol)); in main()
161 PetscCall(DMDAGetCorners(appctx.da, &xs, NULL, NULL, &xm, NULL, NULL)); in main()
162 PetscCall(DMDAVecGetArray(appctx.da, appctx.SEMop.grid, &wrk_ptr1)); in main()
163 PetscCall(DMDAVecGetArray(appctx.da, appctx.SEMop.mass, &wrk_ptr2)); in main()
167 xs = xs / (appctx.param.N - 1); in main()
168 xm = xm / (appctx.param.N - 1); in main()
175 for (j = 0; j < appctx.param.N - 1; j++) { in main()
176 … x = (appctx.param.Le / 2.0) * (appctx.SEMop.gll.nodes[j] + 1.0) + appctx.param.Le * i; in main()
177 ind = i * (appctx.param.N - 1) + j; in main()
179 wrk_ptr2[ind] = .5 * appctx.param.Le * appctx.SEMop.gll.weights[j]; in main()
180 if (j == 0) wrk_ptr2[ind] += .5 * appctx.param.Le * appctx.SEMop.gll.weights[j]; in main()
183 PetscCall(DMDAVecRestoreArray(appctx.da, appctx.SEMop.grid, &wrk_ptr1)); in main()
184 PetscCall(DMDAVecRestoreArray(appctx.da, appctx.SEMop.mass, &wrk_ptr2)); in main()
189 PetscCall(DMSetMatrixPreallocateOnly(appctx.da, PETSC_TRUE)); in main()
190 PetscCall(DMCreateMatrix(appctx.da, &appctx.SEMop.stiff)); in main()
191 PetscCall(DMCreateMatrix(appctx.da, &appctx.SEMop.grad)); in main()
197 …PetscCall(RHSMatrixLaplaciangllDM(appctx.ts, 0.0, u, appctx.SEMop.stiff, appctx.SEMop.stiff, &appc… in main()
198 …PetscCall(RHSMatrixAdvectiongllDM(appctx.ts, 0.0, u, appctx.SEMop.grad, appctx.SEMop.grad, &appctx… in main()
205 PetscCall(MatDuplicate(appctx.SEMop.stiff, MAT_COPY_VALUES, &appctx.SEMop.keptstiff)); in main()
209 PetscCall(MatSetNullSpace(appctx.SEMop.stiff, nsp)); in main()
210 PetscCall(MatSetNullSpace(appctx.SEMop.keptstiff, nsp)); in main()
211 PetscCall(MatNullSpaceTest(nsp, appctx.SEMop.stiff, NULL)); in main()
215 PetscCall(MatSetNullSpace(appctx.SEMop.grad, nsp)); in main()
216 PetscCall(MatNullSpaceTest(nsp, appctx.SEMop.grad, NULL)); in main()
220 PetscCall(TSCreate(PETSC_COMM_WORLD, &appctx.ts)); in main()
221 PetscCall(TSSetProblemType(appctx.ts, TS_NONLINEAR)); in main()
222 PetscCall(TSSetType(appctx.ts, TSRK)); in main()
223 PetscCall(TSSetDM(appctx.ts, appctx.da)); in main()
224 PetscCall(TSSetTime(appctx.ts, 0.0)); in main()
225 PetscCall(TSSetTimeStep(appctx.ts, appctx.initial_dt)); in main()
226 PetscCall(TSSetMaxSteps(appctx.ts, appctx.param.steps)); in main()
227 PetscCall(TSSetMaxTime(appctx.ts, appctx.param.Tend)); in main()
228 PetscCall(TSSetExactFinalTime(appctx.ts, TS_EXACTFINALTIME_MATCHSTEP)); in main()
229 PetscCall(TSSetTolerances(appctx.ts, 1e-7, NULL, 1e-7, NULL)); in main()
230 PetscCall(TSSetFromOptions(appctx.ts)); in main()
232 PetscCall(TSGetTimeStep(appctx.ts, &appctx.initial_dt)); in main()
233 PetscCall(TSSetRHSFunction(appctx.ts, NULL, RHSFunction, &appctx)); in main()
234 …PetscCall(TSSetRHSJacobian(appctx.ts, appctx.SEMop.stiff, appctx.SEMop.stiff, RHSJacobian, &appctx… in main()
237 PetscCall(InitialConditions(appctx.dat.ic, &appctx)); in main()
238 PetscCall(TrueSolution(appctx.dat.true_solution, &appctx)); in main()
239 PetscCall(ComputeObjective(appctx.param.Tend, appctx.dat.obj, &appctx)); in main()
241 PetscCall(TSSetSaveTrajectory(appctx.ts)); in main()
242 PetscCall(TSSetFromOptions(appctx.ts)); in main()
246 PetscCall(TaoMonitorSet(tao, MonitorError, &appctx, NULL)); in main()
248 PetscCall(TaoSetSolution(tao, appctx.dat.ic)); in main()
250 PetscCall(TaoSetObjectiveAndGradient(tao, NULL, FormFunctionGradient, (void *)&appctx)); in main()
257 PetscCall(MatDestroy(&appctx.SEMop.stiff)); in main()
258 PetscCall(MatDestroy(&appctx.SEMop.keptstiff)); in main()
259 PetscCall(MatDestroy(&appctx.SEMop.grad)); in main()
261 PetscCall(VecDestroy(&appctx.dat.ic)); in main()
262 PetscCall(VecDestroy(&appctx.dat.true_solution)); in main()
263 PetscCall(VecDestroy(&appctx.dat.obj)); in main()
264 PetscCall(VecDestroy(&appctx.SEMop.grid)); in main()
265 PetscCall(VecDestroy(&appctx.SEMop.mass)); in main()
266 PetscCall(VecDestroy(&appctx.dat.curr_sol)); in main()
267 PetscCall(PetscFree2(appctx.SEMop.gll.nodes, appctx.SEMop.gll.weights)); in main()
268 PetscCall(DMDestroy(&appctx.da)); in main()
269 PetscCall(TSDestroy(&appctx.ts)); in main()
294 PetscErrorCode InitialConditions(Vec u, AppCtx *appctx) in InitialConditions() argument
301 PetscCall(DMDAVecGetArray(appctx->da, u, &s)); in InitialConditions()
302 PetscCall(DMDAVecGetArrayRead(appctx->da, appctx->SEMop.grid, (void *)&xg)); in InitialConditions()
303 PetscCall(DMDAGetCorners(appctx->da, &xs, NULL, NULL, &xn, NULL, NULL)); in InitialConditions()
304 …for (i = xs; i < xs + xn; i++) s[i] = 2.0 * appctx->param.mu * PETSC_PI * PetscSinScalar(PETSC_PI … in InitialConditions()
305 PetscCall(DMDAVecRestoreArray(appctx->da, u, &s)); in InitialConditions()
306 PetscCall(DMDAVecRestoreArrayRead(appctx->da, appctx->SEMop.grid, (void *)&xg)); in InitialConditions()
322 PetscErrorCode TrueSolution(Vec u, AppCtx *appctx) in TrueSolution() argument
329 PetscCall(DMDAVecGetArray(appctx->da, u, &s)); in TrueSolution()
330 PetscCall(DMDAVecGetArrayRead(appctx->da, appctx->SEMop.grid, (void *)&xg)); in TrueSolution()
331 PetscCall(DMDAGetCorners(appctx->da, &xs, NULL, NULL, &xn, NULL, NULL)); in TrueSolution()
332 …for (i = xs; i < xs + xn; i++) s[i] = 2.0 * appctx->param.mu * PETSC_PI * PetscSinScalar(PETSC_PI … in TrueSolution()
333 PetscCall(DMDAVecRestoreArray(appctx->da, u, &s)); in TrueSolution()
334 PetscCall(DMDAVecRestoreArrayRead(appctx->da, appctx->SEMop.grid, (void *)&xg)); in TrueSolution()
347 PetscErrorCode ComputeObjective(PetscReal t, Vec obj, AppCtx *appctx) in ComputeObjective() argument
354 PetscCall(DMDAVecGetArray(appctx->da, obj, &s)); in ComputeObjective()
355 PetscCall(DMDAVecGetArrayRead(appctx->da, appctx->SEMop.grid, (void *)&xg)); in ComputeObjective()
356 PetscCall(DMDAGetCorners(appctx->da, &xs, NULL, NULL, &xn, NULL, NULL)); in ComputeObjective()
358 …appctx->param.mu * PETSC_PI * PetscSinScalar(PETSC_PI * xg[i]) * PetscExpScalar(-PETSC_PI * PETSC_… in ComputeObjective()
360 PetscCall(DMDAVecRestoreArray(appctx->da, obj, &s)); in ComputeObjective()
361 PetscCall(DMDAVecRestoreArrayRead(appctx->da, appctx->SEMop.grid, (void *)&xg)); in ComputeObjective()
367 AppCtx *appctx = (AppCtx *)ctx; in RHSFunction() local
370 PetscCall(MatMult(appctx->SEMop.grad, globalin, globalout)); /* grad u */ in RHSFunction()
373 PetscCall(MatMultAdd(appctx->SEMop.keptstiff, globalin, globalout, globalout)); in RHSFunction()
387 AppCtx *appctx = (AppCtx *)ctx; in RHSJacobian() local
393 PetscCall(MatCopy(appctx->SEMop.grad, A, SAME_NONZERO_PATTERN)); in RHSJacobian()
398 PetscCall(MatMult(appctx->SEMop.grad, globalin, Gglobalin)); in RHSJacobian()
404 PetscCall(MatAXPY(A, 1.0, appctx->SEMop.keptstiff, SAME_NONZERO_PATTERN)); in RHSJacobian()
429 AppCtx *appctx = (AppCtx *)ctx; /* user-defined application context */ in RHSMatrixLaplaciangllDM() local
437 …l(PetscGaussLobattoLegendreElementLaplacianCreate(appctx->SEMop.gll.n, appctx->SEMop.gll.nodes, ap… in RHSMatrixLaplaciangllDM()
439 …PetscCheck(appctx->param.N > 1, PETSC_COMM_WORLD, PETSC_ERR_ARG_WRONG, "Spectral element order sho… in RHSMatrixLaplaciangllDM()
442 for (i = 0; i < appctx->param.N; i++) { in RHSMatrixLaplaciangllDM()
443 vv = -appctx->param.mu * 2.0 / appctx->param.Le; in RHSMatrixLaplaciangllDM()
444 for (j = 0; j < appctx->param.N; j++) temp[i][j] = temp[i][j] * vv; in RHSMatrixLaplaciangllDM()
448 PetscCall(DMDAGetCorners(appctx->da, &xs, NULL, NULL, &xn, NULL, NULL)); in RHSMatrixLaplaciangllDM()
450 xs = xs / (appctx->param.N - 1); in RHSMatrixLaplaciangllDM()
451 xn = xn / (appctx->param.N - 1); in RHSMatrixLaplaciangllDM()
453 PetscCall(PetscMalloc1(appctx->param.N, &rowsDM)); in RHSMatrixLaplaciangllDM()
458 for (l = 0; l < appctx->param.N; l++) rowsDM[l] = 1 + (j - xs) * (appctx->param.N - 1) + l; in RHSMatrixLaplaciangllDM()
459 …PetscCall(MatSetValuesLocal(A, appctx->param.N, rowsDM, appctx->param.N, rowsDM, &temp[0][0], ADD_… in RHSMatrixLaplaciangllDM()
464 PetscCall(VecReciprocal(appctx->SEMop.mass)); in RHSMatrixLaplaciangllDM()
465 PetscCall(MatDiagonalScale(A, appctx->SEMop.mass, 0)); in RHSMatrixLaplaciangllDM()
466 PetscCall(VecReciprocal(appctx->SEMop.mass)); in RHSMatrixLaplaciangllDM()
468 …(PetscGaussLobattoLegendreElementLaplacianDestroy(appctx->SEMop.gll.n, appctx->SEMop.gll.nodes, ap… in RHSMatrixLaplaciangllDM()
490 AppCtx *appctx = (AppCtx *)ctx; /* user-defined application context */ in RHSMatrixAdvectiongllDM() local
498 …l(PetscGaussLobattoLegendreElementAdvectionCreate(appctx->SEMop.gll.n, appctx->SEMop.gll.nodes, ap… in RHSMatrixAdvectiongllDM()
501 PetscCall(DMDAGetCorners(appctx->da, &xs, NULL, NULL, &xn, NULL, NULL)); in RHSMatrixAdvectiongllDM()
503 xs = xs / (appctx->param.N - 1); in RHSMatrixAdvectiongllDM()
504 xn = xn / (appctx->param.N - 1); in RHSMatrixAdvectiongllDM()
506 PetscCall(PetscMalloc1(appctx->param.N, &rowsDM)); in RHSMatrixAdvectiongllDM()
508 for (l = 0; l < appctx->param.N; l++) rowsDM[l] = 1 + (j - xs) * (appctx->param.N - 1) + l; in RHSMatrixAdvectiongllDM()
509 …PetscCall(MatSetValuesLocal(A, appctx->param.N, rowsDM, appctx->param.N, rowsDM, &temp[0][0], ADD_… in RHSMatrixAdvectiongllDM()
515 PetscCall(VecReciprocal(appctx->SEMop.mass)); in RHSMatrixAdvectiongllDM()
516 PetscCall(MatDiagonalScale(A, appctx->SEMop.mass, 0)); in RHSMatrixAdvectiongllDM()
517 PetscCall(VecReciprocal(appctx->SEMop.mass)); in RHSMatrixAdvectiongllDM()
518 …(PetscGaussLobattoLegendreElementAdvectionDestroy(appctx->SEMop.gll.n, appctx->SEMop.gll.nodes, ap… in RHSMatrixAdvectiongllDM()
558 AppCtx *appctx = (AppCtx *)ctx; /* user-defined application context */ in FormFunctionGradient() local
565 PetscCall(TSSetTime(appctx->ts, 0.0)); in FormFunctionGradient()
566 PetscCall(TSSetStepNumber(appctx->ts, 0)); in FormFunctionGradient()
567 PetscCall(TSSetTimeStep(appctx->ts, appctx->initial_dt)); in FormFunctionGradient()
568 PetscCall(VecCopy(IC, appctx->dat.curr_sol)); in FormFunctionGradient()
570 PetscCall(TSSolve(appctx->ts, appctx->dat.curr_sol)); in FormFunctionGradient()
572 PetscCall(VecWAXPY(G, -1.0, appctx->dat.curr_sol, appctx->dat.obj)); in FormFunctionGradient()
579 PetscCall(VecDot(temp, appctx->SEMop.mass, f)); in FormFunctionGradient()
582 PetscCall(VecWAXPY(temp, -1.0, appctx->dat.ic, appctx->dat.true_solution)); in FormFunctionGradient()
585 PetscCall(VecDot(temp, appctx->SEMop.mass, &errex)); in FormFunctionGradient()
594 PetscCall(VecPointwiseMult(G, G, appctx->SEMop.mass)); in FormFunctionGradient()
595 PetscCall(TSSetCostGradients(appctx->ts, 1, &G, NULL)); in FormFunctionGradient()
596 PetscCall(TSAdjointSolve(appctx->ts)); in FormFunctionGradient()
597 PetscCall(VecPointwiseDivide(G, G, appctx->SEMop.mass)); in FormFunctionGradient()
605 AppCtx *appctx = (AppCtx *)ctx; in MonitorError() local
610 PetscCall(VecDuplicate(appctx->dat.ic, &temp)); in MonitorError()
611 PetscCall(VecWAXPY(temp, -1.0, appctx->dat.ic, appctx->dat.true_solution)); in MonitorError()
613 PetscCall(VecDot(temp, appctx->SEMop.mass, &nrm)); in MonitorError()