Lines Matching refs:appctx
108 AppCtx appctx; /* user-defined application context */ in main() local
122 appctx.param.N = 10; /* order of the spectral element */ in main()
123 appctx.param.E = 8; /* number of elements */ in main()
124 appctx.param.L = 1.0; /* length of the domain */ in main()
125 appctx.param.mu = 0.00001; /* diffusion coefficient */ in main()
126 appctx.param.a = 0.0; /* advection speed */ in main()
127 appctx.initial_dt = 1e-4; in main()
128 appctx.param.steps = PETSC_INT_MAX; in main()
129 appctx.param.Tend = 0.01; in main()
130 appctx.ncoeff = 2; in main()
132 PetscCall(PetscOptionsGetInt(NULL, NULL, "-N", &appctx.param.N, NULL)); in main()
133 PetscCall(PetscOptionsGetInt(NULL, NULL, "-E", &appctx.param.E, NULL)); in main()
134 PetscCall(PetscOptionsGetInt(NULL, NULL, "-ncoeff", &appctx.ncoeff, NULL)); in main()
135 PetscCall(PetscOptionsGetReal(NULL, NULL, "-Tend", &appctx.param.Tend, NULL)); in main()
136 PetscCall(PetscOptionsGetReal(NULL, NULL, "-mu", &appctx.param.mu, NULL)); in main()
137 PetscCall(PetscOptionsGetReal(NULL, NULL, "-a", &appctx.param.a, NULL)); in main()
138 appctx.param.Le = appctx.param.L / appctx.param.E; in main()
143 …PetscCall(PetscMalloc2(appctx.param.N, &appctx.SEMop.gll.nodes, appctx.param.N, &appctx.SEMop.gll.… in main()
144 …aussLobattoLegendreQuadrature(appctx.param.N, PETSCGAUSSLOBATTOLEGENDRE_VIA_LINEAR_ALGEBRA, appctx… in main()
145 appctx.SEMop.gll.n = appctx.param.N; in main()
146 lenglob = appctx.param.E * (appctx.param.N - 1); in main()
154 PetscCall(DMDACreate1d(PETSC_COMM_WORLD, DM_BOUNDARY_PERIODIC, lenglob, 1, 1, NULL, &appctx.da)); in main()
155 PetscCall(DMSetFromOptions(appctx.da)); in main()
156 PetscCall(DMSetUp(appctx.da)); in main()
164 PetscCall(DMCreateGlobalVector(appctx.da, &u)); in main()
165 PetscCall(VecDuplicate(u, &appctx.dat.ic)); in main()
166 PetscCall(VecDuplicate(u, &appctx.dat.true_solution)); in main()
167 PetscCall(VecDuplicate(u, &appctx.dat.reference)); in main()
168 PetscCall(VecDuplicate(u, &appctx.SEMop.grid)); in main()
169 PetscCall(VecDuplicate(u, &appctx.SEMop.mass)); in main()
170 PetscCall(VecDuplicate(u, &appctx.dat.curr_sol)); in main()
171 PetscCall(VecDuplicate(u, &appctx.dat.joe)); in main()
173 PetscCall(DMDAGetCorners(appctx.da, &xs, NULL, NULL, &xm, NULL, NULL)); in main()
174 PetscCall(DMDAVecGetArray(appctx.da, appctx.SEMop.grid, &wrk_ptr1)); in main()
175 PetscCall(DMDAVecGetArray(appctx.da, appctx.SEMop.mass, &wrk_ptr2)); in main()
179 xs = xs / (appctx.param.N - 1); in main()
180 xm = xm / (appctx.param.N - 1); in main()
187 for (j = 0; j < appctx.param.N - 1; j++) { in main()
188 … x = (appctx.param.Le / 2.0) * (appctx.SEMop.gll.nodes[j] + 1.0) + appctx.param.Le * i; in main()
189 ind = i * (appctx.param.N - 1) + j; in main()
191 wrk_ptr2[ind] = .5 * appctx.param.Le * appctx.SEMop.gll.weights[j]; in main()
192 if (j == 0) wrk_ptr2[ind] += .5 * appctx.param.Le * appctx.SEMop.gll.weights[j]; in main()
195 PetscCall(DMDAVecRestoreArray(appctx.da, appctx.SEMop.grid, &wrk_ptr1)); in main()
196 PetscCall(DMDAVecRestoreArray(appctx.da, appctx.SEMop.mass, &wrk_ptr2)); in main()
201 PetscCall(DMSetMatrixPreallocateOnly(appctx.da, PETSC_TRUE)); in main()
202 PetscCall(DMCreateMatrix(appctx.da, &appctx.SEMop.stiff)); in main()
203 PetscCall(DMCreateMatrix(appctx.da, &appctx.SEMop.advec)); in main()
210 PetscCall(RHSLaplacian(appctx.ts, 0.0, u, appctx.SEMop.stiff, appctx.SEMop.stiff, &appctx)); in main()
211 PetscCall(RHSAdvection(appctx.ts, 0.0, u, appctx.SEMop.advec, appctx.SEMop.advec, &appctx)); in main()
212 PetscCall(MatAXPY(appctx.SEMop.stiff, -1.0, appctx.SEMop.advec, DIFFERENT_NONZERO_PATTERN)); in main()
213 PetscCall(MatDuplicate(appctx.SEMop.stiff, MAT_COPY_VALUES, &appctx.SEMop.keptstiff)); in main()
217 PetscCall(MatSetNullSpace(appctx.SEMop.stiff, nsp)); in main()
218 PetscCall(MatNullSpaceTest(nsp, appctx.SEMop.stiff, NULL)); in main()
222 PetscCall(TSCreate(PETSC_COMM_WORLD, &appctx.ts)); in main()
223 …PetscCall(TSSetSolutionFunction(appctx.ts, (PetscErrorCode (*)(TS, PetscReal, Vec, void *))Compute… in main()
224 PetscCall(TSSetProblemType(appctx.ts, TS_LINEAR)); in main()
225 PetscCall(TSSetType(appctx.ts, TSRK)); in main()
226 PetscCall(TSSetDM(appctx.ts, appctx.da)); in main()
227 PetscCall(TSSetTime(appctx.ts, 0.0)); in main()
228 PetscCall(TSSetTimeStep(appctx.ts, appctx.initial_dt)); in main()
229 PetscCall(TSSetMaxSteps(appctx.ts, appctx.param.steps)); in main()
230 PetscCall(TSSetMaxTime(appctx.ts, appctx.param.Tend)); in main()
231 PetscCall(TSSetExactFinalTime(appctx.ts, TS_EXACTFINALTIME_MATCHSTEP)); in main()
232 PetscCall(TSSetTolerances(appctx.ts, 1e-7, NULL, 1e-7, NULL)); in main()
233 PetscCall(TSSetFromOptions(appctx.ts)); in main()
235 PetscCall(TSGetTimeStep(appctx.ts, &appctx.initial_dt)); in main()
236 PetscCall(TSSetRHSFunction(appctx.ts, NULL, TSComputeRHSFunctionLinear, &appctx)); in main()
237 …PetscCall(TSSetRHSJacobian(appctx.ts, appctx.SEMop.stiff, appctx.SEMop.stiff, TSComputeRHSJacobian… in main()
242 PetscCall(ComputeSolutionCoefficients(&appctx)); in main()
243 PetscCall(InitialConditions(appctx.dat.ic, &appctx)); in main()
244 PetscCall(ComputeReference(appctx.ts, appctx.param.Tend, appctx.dat.reference, &appctx)); in main()
245 PetscCall(ComputeReference(appctx.ts, 0.0, appctx.dat.true_solution, &appctx)); in main()
248 PetscCall(TSSetSaveTrajectory(appctx.ts)); in main()
249 PetscCall(TSSetFromOptions(appctx.ts)); in main()
253 PetscCall(TaoMonitorSet(tao, MonitorError, &appctx, MonitorDestroy)); in main()
255 PetscCall(TaoSetSolution(tao, appctx.dat.ic)); in main()
257 PetscCall(TaoSetObjectiveAndGradient(tao, NULL, FormFunctionGradient, (void *)&appctx)); in main()
264 PetscCall(PetscFree(appctx.solutioncoefficients)); in main()
265 PetscCall(MatDestroy(&appctx.SEMop.advec)); in main()
266 PetscCall(MatDestroy(&appctx.SEMop.stiff)); in main()
267 PetscCall(MatDestroy(&appctx.SEMop.keptstiff)); in main()
269 PetscCall(VecDestroy(&appctx.dat.ic)); in main()
270 PetscCall(VecDestroy(&appctx.dat.joe)); in main()
271 PetscCall(VecDestroy(&appctx.dat.true_solution)); in main()
272 PetscCall(VecDestroy(&appctx.dat.reference)); in main()
273 PetscCall(VecDestroy(&appctx.SEMop.grid)); in main()
274 PetscCall(VecDestroy(&appctx.SEMop.mass)); in main()
275 PetscCall(VecDestroy(&appctx.dat.curr_sol)); in main()
276 PetscCall(PetscFree2(appctx.SEMop.gll.nodes, appctx.SEMop.gll.weights)); in main()
277 PetscCall(DMDestroy(&appctx.da)); in main()
278 PetscCall(TSDestroy(&appctx.ts)); in main()
293 PetscErrorCode ComputeSolutionCoefficients(AppCtx *appctx) in ComputeSolutionCoefficients() argument
299 PetscCall(PetscMalloc1(appctx->ncoeff, &appctx->solutioncoefficients)); in ComputeSolutionCoefficients()
302 …for (i = 0; i < appctx->ncoeff; i++) PetscCall(PetscRandomGetValue(rand, &appctx->solutioncoeffici… in ComputeSolutionCoefficients()
318 PetscErrorCode InitialConditions(Vec u, AppCtx *appctx) in InitialConditions() argument
329 PetscCall(DMDAVecGetArray(appctx->da, u, &s)); in InitialConditions()
330 PetscCall(DMDAVecGetArrayRead(appctx->da, appctx->SEMop.grid, (void *)&xg)); in InitialConditions()
331 lenglob = appctx->param.E * (appctx->param.N - 1); in InitialConditions()
334 for (j = 0; j < appctx->ncoeff; j++) { in InitialConditions()
340 PetscCall(DMDAVecRestoreArray(appctx->da, u, &s)); in InitialConditions()
341 PetscCall(DMDAVecRestoreArrayRead(appctx->da, appctx->SEMop.grid, (void *)&xg)); in InitialConditions()
360 PetscErrorCode TrueSolution(Vec u, AppCtx *appctx) in TrueSolution() argument
368 PetscCall(DMDAVecGetArray(appctx->da, u, &s)); in TrueSolution()
369 PetscCall(DMDAVecGetArrayRead(appctx->da, appctx->SEMop.grid, (void *)&xg)); in TrueSolution()
370 lenglob = appctx->param.E * (appctx->param.N - 1); in TrueSolution()
373 …for (j = 0; j < appctx->ncoeff; j++) s[i] += appctx->solutioncoefficients[j] * PetscSinScalar(2 * … in TrueSolution()
375 PetscCall(DMDAVecRestoreArray(appctx->da, u, &s)); in TrueSolution()
376 PetscCall(DMDAVecRestoreArrayRead(appctx->da, appctx->SEMop.grid, (void *)&xg)); in TrueSolution()
392 PetscErrorCode ComputeReference(TS ts, PetscReal t, Vec obj, AppCtx *appctx) in ComputeReference() argument
399 PetscCall(DMDAVecGetArray(appctx->da, obj, &s)); in ComputeReference()
400 PetscCall(DMDAVecGetArrayRead(appctx->da, appctx->SEMop.grid, (void *)&xg)); in ComputeReference()
401 lenglob = appctx->param.E * (appctx->param.N - 1); in ComputeReference()
404 for (j = 0; j < appctx->ncoeff; j++) { in ComputeReference()
405 tc = -appctx->param.mu * (j + 1) * (j + 1) * 4.0 * PETSC_PI * PETSC_PI * t; in ComputeReference()
406 …s[i] += appctx->solutioncoefficients[j] * PetscSinScalar(2 * (j + 1) * PETSC_PI * (xg[i] + appctx-… in ComputeReference()
409 PetscCall(DMDAVecRestoreArray(appctx->da, obj, &s)); in ComputeReference()
410 PetscCall(DMDAVecRestoreArrayRead(appctx->da, appctx->SEMop.grid, (void *)&xg)); in ComputeReference()
416 AppCtx *appctx = (AppCtx *)ctx; in RHSFunction() local
419 PetscCall(MatMult(appctx->SEMop.keptstiff, globalin, globalout)); in RHSFunction()
425 AppCtx *appctx = (AppCtx *)ctx; in RHSJacobian() local
428 PetscCall(MatCopy(appctx->SEMop.keptstiff, A, DIFFERENT_NONZERO_PATTERN)); in RHSJacobian()
454 AppCtx *appctx = (AppCtx *)ctx; /* user-defined application context */ in RHSLaplacian() local
462 …l(PetscGaussLobattoLegendreElementLaplacianCreate(appctx->SEMop.gll.n, appctx->SEMop.gll.nodes, ap… in RHSLaplacian()
465 for (i = 0; i < appctx->param.N; i++) { in RHSLaplacian()
466 vv = -appctx->param.mu * 2.0 / appctx->param.Le; in RHSLaplacian()
467 for (j = 0; j < appctx->param.N; j++) temp[i][j] = temp[i][j] * vv; in RHSLaplacian()
471 PetscCall(DMDAGetCorners(appctx->da, &xs, NULL, NULL, &xn, NULL, NULL)); in RHSLaplacian()
473 …PetscCheck(appctx->param.N - 1 >= 1, PETSC_COMM_WORLD, PETSC_ERR_ARG_OUTOFRANGE, "Polynomial order… in RHSLaplacian()
474 xs = xs / (appctx->param.N - 1); in RHSLaplacian()
475 xn = xn / (appctx->param.N - 1); in RHSLaplacian()
477 PetscCall(PetscMalloc1(appctx->param.N, &rowsDM)); in RHSLaplacian()
482 for (l = 0; l < appctx->param.N; l++) rowsDM[l] = 1 + (j - xs) * (appctx->param.N - 1) + l; in RHSLaplacian()
483 …PetscCall(MatSetValuesLocal(A, appctx->param.N, rowsDM, appctx->param.N, rowsDM, &temp[0][0], ADD_… in RHSLaplacian()
488 PetscCall(VecReciprocal(appctx->SEMop.mass)); in RHSLaplacian()
489 PetscCall(MatDiagonalScale(A, appctx->SEMop.mass, 0)); in RHSLaplacian()
490 PetscCall(VecReciprocal(appctx->SEMop.mass)); in RHSLaplacian()
492 …(PetscGaussLobattoLegendreElementLaplacianDestroy(appctx->SEMop.gll.n, appctx->SEMop.gll.nodes, ap… in RHSLaplacian()
505 AppCtx *appctx = (AppCtx *)ctx; /* user-defined application context */ in RHSAdvection() local
513 …l(PetscGaussLobattoLegendreElementAdvectionCreate(appctx->SEMop.gll.n, appctx->SEMop.gll.nodes, ap… in RHSAdvection()
516 for (i = 0; i < appctx->param.N; i++) { in RHSAdvection()
517 vv = -appctx->param.a; in RHSAdvection()
518 for (j = 0; j < appctx->param.N; j++) temp[i][j] = temp[i][j] * vv; in RHSAdvection()
522 PetscCall(DMDAGetCorners(appctx->da, &xs, NULL, NULL, &xn, NULL, NULL)); in RHSAdvection()
524 …PetscCheck(appctx->param.N - 1 >= 1, PETSC_COMM_WORLD, PETSC_ERR_ARG_OUTOFRANGE, "Polynomial order… in RHSAdvection()
525 xs = xs / (appctx->param.N - 1); in RHSAdvection()
526 xn = xn / (appctx->param.N - 1); in RHSAdvection()
528 PetscCall(PetscMalloc1(appctx->param.N, &rowsDM)); in RHSAdvection()
533 for (l = 0; l < appctx->param.N; l++) rowsDM[l] = 1 + (j - xs) * (appctx->param.N - 1) + l; in RHSAdvection()
534 …PetscCall(MatSetValuesLocal(A, appctx->param.N, rowsDM, appctx->param.N, rowsDM, &temp[0][0], ADD_… in RHSAdvection()
539 PetscCall(VecReciprocal(appctx->SEMop.mass)); in RHSAdvection()
540 PetscCall(MatDiagonalScale(A, appctx->SEMop.mass, 0)); in RHSAdvection()
541 PetscCall(VecReciprocal(appctx->SEMop.mass)); in RHSAdvection()
543 …(PetscGaussLobattoLegendreElementAdvectionDestroy(appctx->SEMop.gll.n, appctx->SEMop.gll.nodes, ap… in RHSAdvection()
582 AppCtx *appctx = (AppCtx *)ctx; /* user-defined application context */ in FormFunctionGradient() local
586 PetscCall(TSSetTime(appctx->ts, 0.0)); in FormFunctionGradient()
587 PetscCall(TSSetStepNumber(appctx->ts, 0)); in FormFunctionGradient()
588 PetscCall(TSSetTimeStep(appctx->ts, appctx->initial_dt)); in FormFunctionGradient()
589 PetscCall(VecCopy(ic, appctx->dat.curr_sol)); in FormFunctionGradient()
591 PetscCall(TSSolve(appctx->ts, appctx->dat.curr_sol)); in FormFunctionGradient()
592 PetscCall(VecCopy(appctx->dat.curr_sol, appctx->dat.joe)); in FormFunctionGradient()
595 PetscCall(VecWAXPY(G, -1.0, appctx->dat.curr_sol, appctx->dat.reference)); in FormFunctionGradient()
600 PetscCall(VecDot(temp, appctx->SEMop.mass, f)); in FormFunctionGradient()
605 PetscCall(VecPointwiseMult(G, G, appctx->SEMop.mass)); in FormFunctionGradient()
606 PetscCall(TSSetCostGradients(appctx->ts, 1, &G, NULL)); in FormFunctionGradient()
608 PetscCall(TSAdjointSolve(appctx->ts)); in FormFunctionGradient()
615 AppCtx *appctx = (AppCtx *)ctx; in MonitorError() local
622 PetscCall(VecDuplicate(appctx->dat.ic, &temp)); in MonitorError()
623 PetscCall(VecWAXPY(temp, -1.0, appctx->dat.ic, appctx->dat.true_solution)); in MonitorError()
625 PetscCall(VecDot(temp, appctx->SEMop.mass, &nrm)); in MonitorError()
629 PetscCall(VecDot(temp, appctx->SEMop.mass, &gnorm)); in MonitorError()