Lines Matching refs:appctx
85 AppCtx appctx; /* user-defined application context */ in main() local
98 appctx.param.N = 10; /* order of the spectral element */ in main()
99 appctx.param.E = 10; /* number of elements */ in main()
100 appctx.param.L = 4.0; /* length of the domain */ in main()
101 appctx.param.mu = 0.01; /* diffusion coefficient */ in main()
102 appctx.initial_dt = 5e-3; in main()
103 appctx.param.steps = PETSC_INT_MAX; in main()
104 appctx.param.Tend = 4; in main()
106 PetscCall(PetscOptionsGetInt(NULL, NULL, "-N", &appctx.param.N, NULL)); in main()
107 PetscCall(PetscOptionsGetInt(NULL, NULL, "-E", &appctx.param.E, NULL)); in main()
108 PetscCall(PetscOptionsGetReal(NULL, NULL, "-Tend", &appctx.param.Tend, NULL)); in main()
109 PetscCall(PetscOptionsGetReal(NULL, NULL, "-mu", &appctx.param.mu, NULL)); in main()
110 appctx.param.Le = appctx.param.L / appctx.param.E; in main()
113 …PetscCheck((appctx.param.E % size) == 0, PETSC_COMM_WORLD, PETSC_ERR_ARG_WRONG, "Number of element… in main()
118 …PetscCall(PetscMalloc2(appctx.param.N, &appctx.SEMop.gll.nodes, appctx.param.N, &appctx.SEMop.gll.… in main()
119 …aussLobattoLegendreQuadrature(appctx.param.N, PETSCGAUSSLOBATTOLEGENDRE_VIA_LINEAR_ALGEBRA, appctx… in main()
120 appctx.SEMop.gll.n = appctx.param.N; in main()
121 lenglob = appctx.param.E * (appctx.param.N - 1); in main()
129 PetscCall(DMDACreate1d(PETSC_COMM_WORLD, DM_BOUNDARY_PERIODIC, lenglob, 1, 1, NULL, &appctx.da)); in main()
130 PetscCall(DMSetFromOptions(appctx.da)); in main()
131 PetscCall(DMSetUp(appctx.da)); in main()
139 PetscCall(DMCreateGlobalVector(appctx.da, &appctx.dat.curr_sol)); in main()
140 PetscCall(VecDuplicate(appctx.dat.curr_sol, &appctx.SEMop.grid)); in main()
141 PetscCall(VecDuplicate(appctx.dat.curr_sol, &appctx.SEMop.mass)); in main()
143 PetscCall(DMDAGetCorners(appctx.da, &xs, NULL, NULL, &xm, NULL, NULL)); in main()
144 PetscCall(DMDAVecGetArray(appctx.da, appctx.SEMop.grid, &wrk_ptr1)); in main()
145 PetscCall(DMDAVecGetArray(appctx.da, appctx.SEMop.mass, &wrk_ptr2)); in main()
149 xs = xs / (appctx.param.N - 1); in main()
150 xm = xm / (appctx.param.N - 1); in main()
157 for (j = 0; j < appctx.param.N - 1; j++) { in main()
158 … x = (appctx.param.Le / 2.0) * (appctx.SEMop.gll.nodes[j] + 1.0) + appctx.param.Le * i; in main()
159 ind = i * (appctx.param.N - 1) + j; in main()
161 wrk_ptr2[ind] = .5 * appctx.param.Le * appctx.SEMop.gll.weights[j]; in main()
162 if (j == 0) wrk_ptr2[ind] += .5 * appctx.param.Le * appctx.SEMop.gll.weights[j]; in main()
165 PetscCall(DMDAVecRestoreArray(appctx.da, appctx.SEMop.grid, &wrk_ptr1)); in main()
166 PetscCall(DMDAVecRestoreArray(appctx.da, appctx.SEMop.mass, &wrk_ptr2)); in main()
171 PetscCall(DMSetMatrixPreallocateOnly(appctx.da, PETSC_TRUE)); in main()
172 PetscCall(DMCreateMatrix(appctx.da, &appctx.SEMop.stiff)); in main()
173 PetscCall(DMCreateMatrix(appctx.da, &appctx.SEMop.grad)); in main()
179 …PetscCall(RHSMatrixLaplaciangllDM(appctx.ts, 0.0, appctx.dat.curr_sol, appctx.SEMop.stiff, appctx.… in main()
180 …PetscCall(RHSMatrixAdvectiongllDM(appctx.ts, 0.0, appctx.dat.curr_sol, appctx.SEMop.grad, appctx.S… in main()
187 PetscCall(MatDuplicate(appctx.SEMop.stiff, MAT_COPY_VALUES, &appctx.SEMop.keptstiff)); in main()
191 PetscCall(MatSetNullSpace(appctx.SEMop.stiff, nsp)); in main()
192 PetscCall(MatSetNullSpace(appctx.SEMop.keptstiff, nsp)); in main()
193 PetscCall(MatNullSpaceTest(nsp, appctx.SEMop.stiff, NULL)); in main()
197 PetscCall(MatSetNullSpace(appctx.SEMop.grad, nsp)); in main()
198 PetscCall(MatNullSpaceTest(nsp, appctx.SEMop.grad, NULL)); in main()
202 PetscCall(TSCreate(PETSC_COMM_WORLD, &appctx.ts)); in main()
203 PetscCall(TSSetProblemType(appctx.ts, TS_NONLINEAR)); in main()
204 PetscCall(TSSetType(appctx.ts, TSRK)); in main()
205 PetscCall(TSSetDM(appctx.ts, appctx.da)); in main()
206 PetscCall(TSSetTime(appctx.ts, 0.0)); in main()
207 PetscCall(TSSetTimeStep(appctx.ts, appctx.initial_dt)); in main()
208 PetscCall(TSSetMaxSteps(appctx.ts, appctx.param.steps)); in main()
209 PetscCall(TSSetMaxTime(appctx.ts, appctx.param.Tend)); in main()
210 PetscCall(TSSetExactFinalTime(appctx.ts, TS_EXACTFINALTIME_MATCHSTEP)); in main()
211 PetscCall(TSSetTolerances(appctx.ts, 1e-7, NULL, 1e-7, NULL)); in main()
212 PetscCall(TSSetSaveTrajectory(appctx.ts)); in main()
213 PetscCall(TSSetFromOptions(appctx.ts)); in main()
214 PetscCall(TSSetRHSFunction(appctx.ts, NULL, RHSFunction, &appctx)); in main()
215 …PetscCall(TSSetRHSJacobian(appctx.ts, appctx.SEMop.stiff, appctx.SEMop.stiff, RHSJacobian, &appctx… in main()
218 PetscCall(TrueSolution(appctx.ts, 0, appctx.dat.curr_sol, &appctx)); in main()
220 …PetscCall(TSSetSolutionFunction(appctx.ts, (PetscErrorCode (*)(TS, PetscReal, Vec, void *))TrueSol… in main()
221 PetscCall(TSSetTime(appctx.ts, 0.0)); in main()
222 PetscCall(TSSetStepNumber(appctx.ts, 0)); in main()
224 PetscCall(TSSolve(appctx.ts, appctx.dat.curr_sol)); in main()
226 PetscCall(MatDestroy(&appctx.SEMop.stiff)); in main()
227 PetscCall(MatDestroy(&appctx.SEMop.keptstiff)); in main()
228 PetscCall(MatDestroy(&appctx.SEMop.grad)); in main()
229 PetscCall(VecDestroy(&appctx.SEMop.grid)); in main()
230 PetscCall(VecDestroy(&appctx.SEMop.mass)); in main()
231 PetscCall(VecDestroy(&appctx.dat.curr_sol)); in main()
232 PetscCall(PetscFree2(appctx.SEMop.gll.nodes, appctx.SEMop.gll.weights)); in main()
233 PetscCall(DMDestroy(&appctx.da)); in main()
234 PetscCall(TSDestroy(&appctx.ts)); in main()
256 PetscErrorCode TrueSolution(TS ts, PetscReal t, Vec u, AppCtx *appctx) in TrueSolution() argument
263 PetscCall(DMDAVecGetArray(appctx->da, u, &s)); in TrueSolution()
264 PetscCall(DMDAVecGetArrayRead(appctx->da, appctx->SEMop.grid, (void *)&xg)); in TrueSolution()
265 PetscCall(DMDAGetCorners(appctx->da, &xs, NULL, NULL, &xn, NULL, NULL)); in TrueSolution()
267 …appctx->param.mu * PETSC_PI * PetscSinScalar(PETSC_PI * xg[i]) * PetscExpReal(-appctx->param.mu * … in TrueSolution()
269 PetscCall(DMDAVecRestoreArray(appctx->da, u, &s)); in TrueSolution()
270 PetscCall(DMDAVecRestoreArrayRead(appctx->da, appctx->SEMop.grid, (void *)&xg)); in TrueSolution()
276 AppCtx *appctx = (AppCtx *)ctx; in RHSFunction() local
279 PetscCall(MatMult(appctx->SEMop.grad, globalin, globalout)); /* grad u */ in RHSFunction()
282 PetscCall(MatMultAdd(appctx->SEMop.keptstiff, globalin, globalout, globalout)); in RHSFunction()
296 AppCtx *appctx = (AppCtx *)ctx; in RHSJacobian() local
302 PetscCall(MatCopy(appctx->SEMop.grad, A, SAME_NONZERO_PATTERN)); in RHSJacobian()
307 PetscCall(MatMult(appctx->SEMop.grad, globalin, Gglobalin)); in RHSJacobian()
313 PetscCall(MatAXPY(A, 0.0, appctx->SEMop.keptstiff, SAME_NONZERO_PATTERN)); in RHSJacobian()
323 AppCtx *appctx; in MatMult_Laplacian() local
333 PetscCall(MatShellGetContext(A, &appctx)); in MatMult_Laplacian()
334 PetscCall(DMGetLocalVector(appctx->da, &xlocal)); in MatMult_Laplacian()
335 PetscCall(DMGlobalToLocalBegin(appctx->da, x, INSERT_VALUES, xlocal)); in MatMult_Laplacian()
336 PetscCall(DMGlobalToLocalEnd(appctx->da, x, INSERT_VALUES, xlocal)); in MatMult_Laplacian()
337 PetscCall(DMGetLocalVector(appctx->da, &ylocal)); in MatMult_Laplacian()
339 …l(PetscGaussLobattoLegendreElementLaplacianCreate(appctx->SEMop.gll.n, appctx->SEMop.gll.nodes, ap… in MatMult_Laplacian()
340 for (i = 0; i < appctx->param.N; i++) { in MatMult_Laplacian()
341 vv = -appctx->param.mu * 2.0 / appctx->param.Le; in MatMult_Laplacian()
342 for (j = 0; j < appctx->param.N; j++) temp[i][j] = temp[i][j] * vv; in MatMult_Laplacian()
344 PetscCall(DMDAVecGetArrayRead(appctx->da, xlocal, (void *)&xl)); in MatMult_Laplacian()
345 PetscCall(DMDAVecGetArray(appctx->da, ylocal, &yl)); in MatMult_Laplacian()
346 PetscCall(DMDAGetCorners(appctx->da, &xs, NULL, NULL, &xn, NULL, NULL)); in MatMult_Laplacian()
347 PetscCall(PetscBLASIntCast(appctx->param.N, &n)); in MatMult_Laplacian()
348 …for (j = xs; j < xs + xn; j += appctx->param.N - 1) PetscCallBLAS("BLASgemv", BLASgemv_("N", &n, &… in MatMult_Laplacian()
349 PetscCall(DMDAVecRestoreArrayRead(appctx->da, xlocal, (void *)&xl)); in MatMult_Laplacian()
350 PetscCall(DMDAVecRestoreArray(appctx->da, ylocal, &yl)); in MatMult_Laplacian()
351 …(PetscGaussLobattoLegendreElementLaplacianDestroy(appctx->SEMop.gll.n, appctx->SEMop.gll.nodes, ap… in MatMult_Laplacian()
353 PetscCall(DMLocalToGlobalBegin(appctx->da, ylocal, ADD_VALUES, y)); in MatMult_Laplacian()
354 PetscCall(DMLocalToGlobalEnd(appctx->da, ylocal, ADD_VALUES, y)); in MatMult_Laplacian()
355 PetscCall(DMRestoreLocalVector(appctx->da, &xlocal)); in MatMult_Laplacian()
356 PetscCall(DMRestoreLocalVector(appctx->da, &ylocal)); in MatMult_Laplacian()
357 PetscCall(VecPointwiseDivide(y, y, appctx->SEMop.mass)); in MatMult_Laplacian()
363 AppCtx *appctx; in MatMult_Advection() local
373 PetscCall(MatShellGetContext(A, &appctx)); in MatMult_Advection()
374 PetscCall(DMGetLocalVector(appctx->da, &xlocal)); in MatMult_Advection()
375 PetscCall(DMGlobalToLocalBegin(appctx->da, x, INSERT_VALUES, xlocal)); in MatMult_Advection()
376 PetscCall(DMGlobalToLocalEnd(appctx->da, x, INSERT_VALUES, xlocal)); in MatMult_Advection()
377 PetscCall(DMGetLocalVector(appctx->da, &ylocal)); in MatMult_Advection()
379 …l(PetscGaussLobattoLegendreElementAdvectionCreate(appctx->SEMop.gll.n, appctx->SEMop.gll.nodes, ap… in MatMult_Advection()
380 PetscCall(DMDAVecGetArrayRead(appctx->da, xlocal, (void *)&xl)); in MatMult_Advection()
381 PetscCall(DMDAVecGetArray(appctx->da, ylocal, &yl)); in MatMult_Advection()
382 PetscCall(DMDAGetCorners(appctx->da, &xs, NULL, NULL, &xn, NULL, NULL)); in MatMult_Advection()
383 PetscCall(PetscBLASIntCast(appctx->param.N, &n)); in MatMult_Advection()
384 …for (j = xs; j < xs + xn; j += appctx->param.N - 1) PetscCallBLAS("BLASgemv", BLASgemv_("N", &n, &… in MatMult_Advection()
385 PetscCall(DMDAVecRestoreArrayRead(appctx->da, xlocal, (void *)&xl)); in MatMult_Advection()
386 PetscCall(DMDAVecRestoreArray(appctx->da, ylocal, &yl)); in MatMult_Advection()
387 …(PetscGaussLobattoLegendreElementAdvectionDestroy(appctx->SEMop.gll.n, appctx->SEMop.gll.nodes, ap… in MatMult_Advection()
389 PetscCall(DMLocalToGlobalBegin(appctx->da, ylocal, ADD_VALUES, y)); in MatMult_Advection()
390 PetscCall(DMLocalToGlobalEnd(appctx->da, ylocal, ADD_VALUES, y)); in MatMult_Advection()
391 PetscCall(DMRestoreLocalVector(appctx->da, &xlocal)); in MatMult_Advection()
392 PetscCall(DMRestoreLocalVector(appctx->da, &ylocal)); in MatMult_Advection()
393 PetscCall(VecPointwiseDivide(y, y, appctx->SEMop.mass)); in MatMult_Advection()
417 AppCtx *appctx = (AppCtx *)ctx; /* user-defined application context */ in RHSMatrixLaplaciangllDM() local
429 …l(PetscGaussLobattoLegendreElementLaplacianCreate(appctx->SEMop.gll.n, appctx->SEMop.gll.nodes, ap… in RHSMatrixLaplaciangllDM()
431 …PetscCheck(appctx->param.N > 1, PETSC_COMM_WORLD, PETSC_ERR_ARG_WRONG, "Spectral element order sho… in RHSMatrixLaplaciangllDM()
434 for (i = 0; i < appctx->param.N; i++) { in RHSMatrixLaplaciangllDM()
435 vv = -appctx->param.mu * 2.0 / appctx->param.Le; in RHSMatrixLaplaciangllDM()
436 for (j = 0; j < appctx->param.N; j++) temp[i][j] = temp[i][j] * vv; in RHSMatrixLaplaciangllDM()
440 PetscCall(DMDAGetCorners(appctx->da, &xs, NULL, NULL, &xn, NULL, NULL)); in RHSMatrixLaplaciangllDM()
442 xs = xs / (appctx->param.N - 1); in RHSMatrixLaplaciangllDM()
443 xn = xn / (appctx->param.N - 1); in RHSMatrixLaplaciangllDM()
445 PetscCall(PetscMalloc1(appctx->param.N, &rowsDM)); in RHSMatrixLaplaciangllDM()
450 for (l = 0; l < appctx->param.N; l++) rowsDM[l] = 1 + (j - xs) * (appctx->param.N - 1) + l; in RHSMatrixLaplaciangllDM()
451 …PetscCall(MatSetValuesLocal(A, appctx->param.N, rowsDM, appctx->param.N, rowsDM, &temp[0][0], ADD_… in RHSMatrixLaplaciangllDM()
456 PetscCall(VecReciprocal(appctx->SEMop.mass)); in RHSMatrixLaplaciangllDM()
457 PetscCall(MatDiagonalScale(A, appctx->SEMop.mass, 0)); in RHSMatrixLaplaciangllDM()
458 PetscCall(VecReciprocal(appctx->SEMop.mass)); in RHSMatrixLaplaciangllDM()
460 …(PetscGaussLobattoLegendreElementLaplacianDestroy(appctx->SEMop.gll.n, appctx->SEMop.gll.nodes, ap… in RHSMatrixLaplaciangllDM()
464 PetscCall(MatShellSetContext(A, appctx)); in RHSMatrixLaplaciangllDM()
488 AppCtx *appctx = (AppCtx *)ctx; /* user-defined application context */ in RHSMatrixAdvectiongllDM() local
500 …l(PetscGaussLobattoLegendreElementAdvectionCreate(appctx->SEMop.gll.n, appctx->SEMop.gll.nodes, ap… in RHSMatrixAdvectiongllDM()
502 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()
519 …(PetscGaussLobattoLegendreElementAdvectionDestroy(appctx->SEMop.gll.n, appctx->SEMop.gll.nodes, ap… in RHSMatrixAdvectiongllDM()
523 PetscCall(MatShellSetContext(A, appctx)); in RHSMatrixAdvectiongllDM()