Lines Matching refs:user

70 PetscErrorCode HyperbolicInitialize(AppCtx *user);
71 PetscErrorCode HyperbolicDestroy(AppCtx *user);
98 AppCtx user; in main() local
107 user.mx = 32; in main()
109 …PetscCall(PetscOptionsInt("-mx", "Number of grid points in each direction", "", user.mx, &user.mx,… in main()
110 user.nt = 16; in main()
111 PetscCall(PetscOptionsInt("-nt", "Number of time steps", "", user.nt, &user.nt, NULL)); in main()
112 user.ndata = 64; in main()
113 …PetscCall(PetscOptionsInt("-ndata", "Numbers of data points per sample", "", user.ndata, &user.nda… in main()
114 user.alpha = 10.0; in main()
115 …PetscCall(PetscOptionsReal("-alpha", "Regularization parameter", "", user.alpha, &user.alpha, NULL… in main()
116 user.T = 1.0 / 32.0; in main()
117 PetscCall(PetscOptionsReal("-Tfinal", "Final time", "", user.T, &user.T, NULL)); in main()
121 user.m = user.mx * user.mx * user.nt; /* number of constraints */ in main()
122 user.n = user.mx * user.mx * 3 * user.nt; /* number of variables */ in main()
123 user.ht = user.T / user.nt; /* Time step */ in main()
124 user.gamma = user.T * user.ht / (user.mx * user.mx); in main()
126 PetscCall(VecCreate(PETSC_COMM_WORLD, &user.u)); in main()
127 PetscCall(VecCreate(PETSC_COMM_WORLD, &user.y)); in main()
128 PetscCall(VecCreate(PETSC_COMM_WORLD, &user.c)); in main()
129 PetscCall(VecSetSizes(user.u, PETSC_DECIDE, user.n - user.m)); in main()
130 PetscCall(VecSetSizes(user.y, PETSC_DECIDE, user.m)); in main()
131 PetscCall(VecSetSizes(user.c, PETSC_DECIDE, user.m)); in main()
132 PetscCall(VecSetFromOptions(user.u)); in main()
133 PetscCall(VecSetFromOptions(user.y)); in main()
134 PetscCall(VecSetFromOptions(user.c)); in main()
146 PetscCall(VecGetOwnershipRange(user.y, &lo, &hi)); in main()
147 PetscCall(VecGetOwnershipRange(user.u, &lo2, &hi2)); in main()
150 PetscCall(ISCreateStride(PETSC_COMM_SELF, hi - lo, lo + lo2, 1, &user.s_is)); in main()
153 PetscCall(ISCreateStride(PETSC_COMM_SELF, hi2 - lo2, hi + lo2, 1, &user.d_is)); in main()
155 PetscCall(VecSetSizes(x, hi - lo + hi2 - lo2, user.n)); in main()
158 PetscCall(VecScatterCreate(x, user.s_is, user.y, is_allstate, &user.state_scatter)); in main()
159 PetscCall(VecScatterCreate(x, user.d_is, user.u, is_alldesign, &user.design_scatter)); in main()
168 PetscCall(HyperbolicInitialize(&user)); in main()
170 PetscCall(Gather(x, user.y, user.state_scatter, user.u, user.design_scatter)); in main()
176 PetscCall(TaoSetObjective(tao, FormFunction, &user)); in main()
177 PetscCall(TaoSetGradient(tao, NULL, FormGradient, &user)); in main()
178 PetscCall(TaoSetConstraintsRoutine(tao, user.c, FormConstraints, &user)); in main()
179 …PetscCall(TaoSetJacobianStateRoutine(tao, user.Js, user.Js, user.JsInv, FormJacobianState, &user)); in main()
180 PetscCall(TaoSetJacobianDesignRoutine(tao, user.Jd, FormJacobianDesign, &user)); in main()
182 PetscCall(TaoSetStateDesignIS(tao, user.s_is, user.d_is)); in main()
187 user.ksp_its_initial = user.ksp_its; in main()
188 ksp_old = user.ksp_its; in main()
191 …PetscCall(PetscPrintf(PETSC_COMM_WORLD, "KSP Iterations = %" PetscInt_FMT "\n", user.ksp_its - ksp… in main()
198 PetscCall(PetscPrintf(PETSC_COMM_WORLD, "%" PetscInt_FMT "\n", user.ksp_its_initial)); in main()
200 PetscCall(PetscPrintf(PETSC_COMM_WORLD, "%" PetscInt_FMT "\n", user.ksp_its)); in main()
202 …PetscCall(PetscPrintf(PETSC_COMM_WORLD, "%" PetscInt_FMT "\n", (user.ksp_its - user.ksp_its_initia… in main()
207 PetscCall(HyperbolicDestroy(&user)); in main()
220 AppCtx *user = (AppCtx *)ptr; in FormFunction() local
223 PetscCall(Scatter(X, user->y, user->state_scatter, user->u, user->design_scatter)); in FormFunction()
224 PetscCall(MatMult(user->Q, user->y, user->dwork)); in FormFunction()
225 PetscCall(VecAXPY(user->dwork, -1.0, user->d)); in FormFunction()
226 PetscCall(VecDot(user->dwork, user->dwork, &d1)); in FormFunction()
228 PetscCall(VecWAXPY(user->uwork, -1.0, user->ur, user->u)); in FormFunction()
229 PetscCall(VecPointwiseMult(user->uwork, user->uwork, user->uwork)); in FormFunction()
230 PetscCall(MatMult(user->L, user->uwork, user->lwork)); in FormFunction()
231 PetscCall(VecDot(user->y, user->lwork, &d2)); in FormFunction()
232 *f = 0.5 * (d1 + user->alpha * d2); in FormFunction()
243 AppCtx *user = (AppCtx *)ptr; in FormGradient() local
246 PetscCall(Scatter(X, user->y, user->state_scatter, user->u, user->design_scatter)); in FormGradient()
247 PetscCall(MatMult(user->Q, user->y, user->dwork)); in FormGradient()
248 PetscCall(VecAXPY(user->dwork, -1.0, user->d)); in FormGradient()
250 PetscCall(MatMult(user->QT, user->dwork, user->ywork)); in FormGradient()
252 PetscCall(MatMult(user->LT, user->y, user->uwork)); in FormGradient()
253 PetscCall(VecWAXPY(user->vwork, -1.0, user->ur, user->u)); in FormGradient()
254 PetscCall(VecPointwiseMult(user->uwork, user->vwork, user->uwork)); in FormGradient()
255 PetscCall(VecScale(user->uwork, user->alpha)); in FormGradient()
257 PetscCall(VecPointwiseMult(user->vwork, user->vwork, user->vwork)); in FormGradient()
258 PetscCall(MatMult(user->L, user->vwork, user->lwork)); in FormGradient()
259 PetscCall(VecAXPY(user->ywork, 0.5 * user->alpha, user->lwork)); in FormGradient()
261 PetscCall(Gather(G, user->ywork, user->state_scatter, user->uwork, user->design_scatter)); in FormGradient()
268 AppCtx *user = (AppCtx *)ptr; in FormFunctionGradient() local
271 PetscCall(Scatter(X, user->y, user->state_scatter, user->u, user->design_scatter)); in FormFunctionGradient()
272 PetscCall(MatMult(user->Q, user->y, user->dwork)); in FormFunctionGradient()
273 PetscCall(VecAXPY(user->dwork, -1.0, user->d)); in FormFunctionGradient()
275 PetscCall(MatMult(user->QT, user->dwork, user->ywork)); in FormFunctionGradient()
277 PetscCall(VecDot(user->dwork, user->dwork, &d1)); in FormFunctionGradient()
279 PetscCall(MatMult(user->LT, user->y, user->uwork)); in FormFunctionGradient()
280 PetscCall(VecWAXPY(user->vwork, -1.0, user->ur, user->u)); in FormFunctionGradient()
281 PetscCall(VecPointwiseMult(user->uwork, user->vwork, user->uwork)); in FormFunctionGradient()
282 PetscCall(VecScale(user->uwork, user->alpha)); in FormFunctionGradient()
284 PetscCall(VecPointwiseMult(user->vwork, user->vwork, user->vwork)); in FormFunctionGradient()
285 PetscCall(MatMult(user->L, user->vwork, user->lwork)); in FormFunctionGradient()
286 PetscCall(VecAXPY(user->ywork, 0.5 * user->alpha, user->lwork)); in FormFunctionGradient()
288 PetscCall(VecDot(user->y, user->lwork, &d2)); in FormFunctionGradient()
290 *f = 0.5 * (d1 + user->alpha * d2); in FormFunctionGradient()
291 PetscCall(Gather(G, user->ywork, user->state_scatter, user->uwork, user->design_scatter)); in FormFunctionGradient()
302 AppCtx *user = (AppCtx *)ptr; in FormJacobianState() local
305 PetscCall(Scatter(X, user->y, user->state_scatter, user->u, user->design_scatter)); in FormJacobianState()
306 PetscCall(Scatter_yi(user->u, user->ui, user->ui_scatter, user->nt)); in FormJacobianState()
307 …PetscCall(Scatter_uxi_uyi(user->u, user->uxi, user->uxi_scatter, user->uyi, user->uyi_scatter, use… in FormJacobianState()
308 for (i = 0; i < user->nt; i++) { in FormJacobianState()
309 PetscCall(MatCopy(user->Divxy[0], user->C[i], SUBSET_NONZERO_PATTERN)); in FormJacobianState()
310 PetscCall(MatCopy(user->Divxy[1], user->Cwork[i], SAME_NONZERO_PATTERN)); in FormJacobianState()
312 PetscCall(MatDiagonalScale(user->C[i], NULL, user->uxi[i])); in FormJacobianState()
313 PetscCall(MatDiagonalScale(user->Cwork[i], NULL, user->uyi[i])); in FormJacobianState()
314 PetscCall(MatAXPY(user->C[i], 1.0, user->Cwork[i], SUBSET_NONZERO_PATTERN)); in FormJacobianState()
315 PetscCall(MatScale(user->C[i], user->ht)); in FormJacobianState()
316 PetscCall(MatShift(user->C[i], 1.0)); in FormJacobianState()
325 AppCtx *user = (AppCtx *)ptr; in FormJacobianDesign() local
328 PetscCall(Scatter(X, user->y, user->state_scatter, user->u, user->design_scatter)); in FormJacobianDesign()
335 AppCtx *user; in StateMatMult() local
338 PetscCall(MatShellGetContext(J_shell, &user)); in StateMatMult()
339 PetscCall(Scatter_yi(X, user->yi, user->yi_scatter, user->nt)); in StateMatMult()
340 user->block_index = 0; in StateMatMult()
341 PetscCall(MatMult(user->JsBlock, user->yi[0], user->yiwork[0])); in StateMatMult()
343 for (i = 1; i < user->nt; i++) { in StateMatMult()
344 user->block_index = i; in StateMatMult()
345 PetscCall(MatMult(user->JsBlock, user->yi[i], user->yiwork[i])); in StateMatMult()
346 PetscCall(MatMult(user->M, user->yi[i - 1], user->ziwork[i - 1])); in StateMatMult()
347 PetscCall(VecAXPY(user->yiwork[i], -1.0, user->ziwork[i - 1])); in StateMatMult()
349 PetscCall(Gather_yi(Y, user->yiwork, user->yi_scatter, user->nt)); in StateMatMult()
356 AppCtx *user; in StateMatMultTranspose() local
359 PetscCall(MatShellGetContext(J_shell, &user)); in StateMatMultTranspose()
360 PetscCall(Scatter_yi(X, user->yi, user->yi_scatter, user->nt)); in StateMatMultTranspose()
362 for (i = 0; i < user->nt - 1; i++) { in StateMatMultTranspose()
363 user->block_index = i; in StateMatMultTranspose()
364 PetscCall(MatMultTranspose(user->JsBlock, user->yi[i], user->yiwork[i])); in StateMatMultTranspose()
365 PetscCall(MatMult(user->M, user->yi[i + 1], user->ziwork[i + 1])); in StateMatMultTranspose()
366 PetscCall(VecAXPY(user->yiwork[i], -1.0, user->ziwork[i + 1])); in StateMatMultTranspose()
369 i = user->nt - 1; in StateMatMultTranspose()
370 user->block_index = i; in StateMatMultTranspose()
371 PetscCall(MatMultTranspose(user->JsBlock, user->yi[i], user->yiwork[i])); in StateMatMultTranspose()
372 PetscCall(Gather_yi(Y, user->yiwork, user->yi_scatter, user->nt)); in StateMatMultTranspose()
379 AppCtx *user; in StateMatBlockMult() local
382 PetscCall(MatShellGetContext(J_shell, &user)); in StateMatBlockMult()
383 i = user->block_index; in StateMatBlockMult()
384 PetscCall(VecPointwiseMult(user->uxiwork[i], X, user->uxi[i])); in StateMatBlockMult()
385 PetscCall(VecPointwiseMult(user->uyiwork[i], X, user->uyi[i])); in StateMatBlockMult()
386 …PetscCall(Gather(user->uiwork[i], user->uxiwork[i], user->ux_scatter[i], user->uyiwork[i], user->u… in StateMatBlockMult()
387 PetscCall(MatMult(user->Div, user->uiwork[i], Y)); in StateMatBlockMult()
388 PetscCall(VecAYPX(Y, user->ht, X)); in StateMatBlockMult()
395 AppCtx *user; in StateMatBlockMultTranspose() local
398 PetscCall(MatShellGetContext(J_shell, &user)); in StateMatBlockMultTranspose()
399 i = user->block_index; in StateMatBlockMultTranspose()
400 PetscCall(MatMult(user->Grad, X, user->uiwork[i])); in StateMatBlockMultTranspose()
401 …PetscCall(Scatter(user->uiwork[i], user->uxiwork[i], user->ux_scatter[i], user->uyiwork[i], user->… in StateMatBlockMultTranspose()
402 PetscCall(VecPointwiseMult(user->uxiwork[i], user->uxi[i], user->uxiwork[i])); in StateMatBlockMultTranspose()
403 PetscCall(VecPointwiseMult(user->uyiwork[i], user->uyi[i], user->uyiwork[i])); in StateMatBlockMultTranspose()
404 PetscCall(VecWAXPY(Y, 1.0, user->uxiwork[i], user->uyiwork[i])); in StateMatBlockMultTranspose()
405 PetscCall(VecAYPX(Y, user->ht, X)); in StateMatBlockMultTranspose()
412 AppCtx *user; in DesignMatMult() local
415 PetscCall(MatShellGetContext(J_shell, &user)); in DesignMatMult()
416 PetscCall(Scatter_yi(user->y, user->yi, user->yi_scatter, user->nt)); in DesignMatMult()
417 …PetscCall(Scatter_uxi_uyi(X, user->uxiwork, user->uxi_scatter, user->uyiwork, user->uyi_scatter, u… in DesignMatMult()
418 for (i = 0; i < user->nt; i++) { in DesignMatMult()
419 PetscCall(VecPointwiseMult(user->uxiwork[i], user->yi[i], user->uxiwork[i])); in DesignMatMult()
420 PetscCall(VecPointwiseMult(user->uyiwork[i], user->yi[i], user->uyiwork[i])); in DesignMatMult()
421 …PetscCall(Gather(user->uiwork[i], user->uxiwork[i], user->ux_scatter[i], user->uyiwork[i], user->u… in DesignMatMult()
422 PetscCall(MatMult(user->Div, user->uiwork[i], user->ziwork[i])); in DesignMatMult()
423 PetscCall(VecScale(user->ziwork[i], user->ht)); in DesignMatMult()
425 PetscCall(Gather_yi(Y, user->ziwork, user->yi_scatter, user->nt)); in DesignMatMult()
432 AppCtx *user; in DesignMatMultTranspose() local
435 PetscCall(MatShellGetContext(J_shell, &user)); in DesignMatMultTranspose()
436 PetscCall(Scatter_yi(user->y, user->yi, user->yi_scatter, user->nt)); in DesignMatMultTranspose()
437 PetscCall(Scatter_yi(X, user->yiwork, user->yi_scatter, user->nt)); in DesignMatMultTranspose()
438 for (i = 0; i < user->nt; i++) { in DesignMatMultTranspose()
439 PetscCall(MatMult(user->Grad, user->yiwork[i], user->uiwork[i])); in DesignMatMultTranspose()
440 …PetscCall(Scatter(user->uiwork[i], user->uxiwork[i], user->ux_scatter[i], user->uyiwork[i], user->… in DesignMatMultTranspose()
441 PetscCall(VecPointwiseMult(user->uxiwork[i], user->yi[i], user->uxiwork[i])); in DesignMatMultTranspose()
442 PetscCall(VecPointwiseMult(user->uyiwork[i], user->yi[i], user->uyiwork[i])); in DesignMatMultTranspose()
443 …PetscCall(Gather(user->uiwork[i], user->uxiwork[i], user->ux_scatter[i], user->uyiwork[i], user->u… in DesignMatMultTranspose()
444 PetscCall(VecScale(user->uiwork[i], user->ht)); in DesignMatMultTranspose()
446 PetscCall(Gather_yi(Y, user->uiwork, user->ui_scatter, user->nt)); in DesignMatMultTranspose()
453 AppCtx *user; in StateMatBlockPrecMult() local
456 PetscCall(PCShellGetContext(PC_shell, &user)); in StateMatBlockPrecMult()
457 i = user->block_index; in StateMatBlockPrecMult()
458 PetscCheck(user->c_formed, PETSC_COMM_SELF, PETSC_ERR_SUP, "Not formed"); in StateMatBlockPrecMult()
459 …PetscCall(MatSOR(user->C[i], X, 1.0, (MatSORType)(SOR_ZERO_INITIAL_GUESS | SOR_LOCAL_SYMMETRIC_SWE… in StateMatBlockPrecMult()
466 AppCtx *user; in StateMatBlockPrecMultTranspose() local
469 PetscCall(PCShellGetContext(PC_shell, &user)); in StateMatBlockPrecMultTranspose()
471 i = user->block_index; in StateMatBlockPrecMultTranspose()
472 PetscCheck(user->c_formed, PETSC_COMM_SELF, PETSC_ERR_SUP, "Not formed"); in StateMatBlockPrecMultTranspose()
473 …PetscCall(MatSOR(user->C[i], X, 1.0, (MatSORType)(SOR_ZERO_INITIAL_GUESS | SOR_LOCAL_SYMMETRIC_SWE… in StateMatBlockPrecMultTranspose()
479 AppCtx *user; in StateMatInvMult() local
483 PetscCall(MatShellGetContext(J_shell, &user)); in StateMatInvMult()
485 if (Y == user->ytrue) { in StateMatInvMult()
487 PetscCall(KSPSetTolerances(user->solver, 1e-4, 1e-20, PETSC_CURRENT, PETSC_CURRENT)); in StateMatInvMult()
489 …PetscCall(KSPSetTolerances(user->solver, PETSC_CURRENT, PETSC_CURRENT, PETSC_CURRENT, PETSC_CURREN… in StateMatInvMult()
491 PetscCall(Scatter_yi(X, user->yi, user->yi_scatter, user->nt)); in StateMatInvMult()
492 PetscCall(Scatter_yi(Y, user->yiwork, user->yi_scatter, user->nt)); in StateMatInvMult()
493 …PetscCall(Scatter_uxi_uyi(user->u, user->uxi, user->uxi_scatter, user->uyi, user->uyi_scatter, use… in StateMatInvMult()
495 user->block_index = 0; in StateMatInvMult()
496 PetscCall(KSPSolve(user->solver, user->yi[0], user->yiwork[0])); in StateMatInvMult()
498 PetscCall(KSPGetIterationNumber(user->solver, &its)); in StateMatInvMult()
499 user->ksp_its = user->ksp_its + its; in StateMatInvMult()
500 for (i = 1; i < user->nt; i++) { in StateMatInvMult()
501 PetscCall(MatMult(user->M, user->yiwork[i - 1], user->ziwork[i - 1])); in StateMatInvMult()
502 PetscCall(VecAXPY(user->yi[i], 1.0, user->ziwork[i - 1])); in StateMatInvMult()
503 user->block_index = i; in StateMatInvMult()
504 PetscCall(KSPSolve(user->solver, user->yi[i], user->yiwork[i])); in StateMatInvMult()
506 PetscCall(KSPGetIterationNumber(user->solver, &its)); in StateMatInvMult()
507 user->ksp_its = user->ksp_its + its; in StateMatInvMult()
509 PetscCall(Gather_yi(Y, user->yiwork, user->yi_scatter, user->nt)); in StateMatInvMult()
515 AppCtx *user; in StateMatInvTransposeMult() local
519 PetscCall(MatShellGetContext(J_shell, &user)); in StateMatInvTransposeMult()
521 PetscCall(Scatter_yi(X, user->yi, user->yi_scatter, user->nt)); in StateMatInvTransposeMult()
522 PetscCall(Scatter_yi(Y, user->yiwork, user->yi_scatter, user->nt)); in StateMatInvTransposeMult()
523 …PetscCall(Scatter_uxi_uyi(user->u, user->uxi, user->uxi_scatter, user->uyi, user->uyi_scatter, use… in StateMatInvTransposeMult()
525 i = user->nt - 1; in StateMatInvTransposeMult()
526 user->block_index = i; in StateMatInvTransposeMult()
527 PetscCall(KSPSolveTranspose(user->solver, user->yi[i], user->yiwork[i])); in StateMatInvTransposeMult()
529 PetscCall(KSPGetIterationNumber(user->solver, &its)); in StateMatInvTransposeMult()
530 user->ksp_its = user->ksp_its + its; in StateMatInvTransposeMult()
532 for (i = user->nt - 2; i >= 0; i--) { in StateMatInvTransposeMult()
533 PetscCall(MatMult(user->M, user->yiwork[i + 1], user->ziwork[i + 1])); in StateMatInvTransposeMult()
534 PetscCall(VecAXPY(user->yi[i], 1.0, user->ziwork[i + 1])); in StateMatInvTransposeMult()
535 user->block_index = i; in StateMatInvTransposeMult()
536 PetscCall(KSPSolveTranspose(user->solver, user->yi[i], user->yiwork[i])); in StateMatInvTransposeMult()
538 PetscCall(KSPGetIterationNumber(user->solver, &its)); in StateMatInvTransposeMult()
539 user->ksp_its = user->ksp_its + its; in StateMatInvTransposeMult()
541 PetscCall(Gather_yi(Y, user->yiwork, user->yi_scatter, user->nt)); in StateMatInvTransposeMult()
547 AppCtx *user; in StateMatDuplicate() local
550 PetscCall(MatShellGetContext(J_shell, &user)); in StateMatDuplicate()
552 …tCreateShell(PETSC_COMM_WORLD, PETSC_DETERMINE, PETSC_DETERMINE, user->m, user->m, user, new_shell… in StateMatDuplicate()
562 AppCtx *user; in StateMatGetDiagonal() local
565 PetscCall(MatShellGetContext(J_shell, &user)); in StateMatGetDiagonal()
566 PetscCall(VecCopy(user->js_diag, X)); in StateMatGetDiagonal()
579 AppCtx *user = (AppCtx *)ptr; in FormConstraints() local
582 PetscCall(Scatter(X, user->y, user->state_scatter, user->u, user->design_scatter)); in FormConstraints()
583 PetscCall(Scatter_yi(user->y, user->yi, user->yi_scatter, user->nt)); in FormConstraints()
584 …PetscCall(Scatter_uxi_uyi(user->u, user->uxi, user->uxi_scatter, user->uyi, user->uyi_scatter, use… in FormConstraints()
586 user->block_index = 0; in FormConstraints()
587 PetscCall(MatMult(user->JsBlock, user->yi[0], user->yiwork[0])); in FormConstraints()
589 for (i = 1; i < user->nt; i++) { in FormConstraints()
590 user->block_index = i; in FormConstraints()
591 PetscCall(MatMult(user->JsBlock, user->yi[i], user->yiwork[i])); in FormConstraints()
592 PetscCall(MatMult(user->M, user->yi[i - 1], user->ziwork[i - 1])); in FormConstraints()
593 PetscCall(VecAXPY(user->yiwork[i], -1.0, user->ziwork[i - 1])); in FormConstraints()
596 PetscCall(Gather_yi(C, user->yiwork, user->yi_scatter, user->nt)); in FormConstraints()
597 PetscCall(VecAXPY(C, -1.0, user->q)); in FormConstraints()
673 PetscErrorCode HyperbolicInitialize(AppCtx *user) in HyperbolicInitialize() argument
683 user->jformed = PETSC_FALSE; in HyperbolicInitialize()
684 user->c_formed = PETSC_FALSE; in HyperbolicInitialize()
686 user->ksp_its = 0; in HyperbolicInitialize()
687 user->ksp_its_initial = 0; in HyperbolicInitialize()
689 n = user->mx * user->mx; in HyperbolicInitialize()
691 h = 1.0 / user->mx; in HyperbolicInitialize()
692 hinv = user->mx; in HyperbolicInitialize()
698 PetscCall(MatCreate(PETSC_COMM_WORLD, &user->Grad)); in HyperbolicInitialize()
699 PetscCall(MatSetSizes(user->Grad, PETSC_DECIDE, PETSC_DECIDE, 2 * n, n)); in HyperbolicInitialize()
700 PetscCall(MatSetFromOptions(user->Grad)); in HyperbolicInitialize()
701 PetscCall(MatMPIAIJSetPreallocation(user->Grad, 3, NULL, 3, NULL)); in HyperbolicInitialize()
702 PetscCall(MatSeqAIJSetPreallocation(user->Grad, 3, NULL)); in HyperbolicInitialize()
703 PetscCall(MatGetOwnershipRange(user->Grad, &istart, &iend)); in HyperbolicInitialize()
707 iblock = i / user->mx; in HyperbolicInitialize()
708 j = iblock * user->mx + ((i + user->mx - 1) % user->mx); in HyperbolicInitialize()
709 PetscCall(MatSetValues(user->Grad, 1, &i, 1, &j, &half_hinv, INSERT_VALUES)); in HyperbolicInitialize()
710 j = iblock * user->mx + ((i + 1) % user->mx); in HyperbolicInitialize()
711 PetscCall(MatSetValues(user->Grad, 1, &i, 1, &j, &neg_half_hinv, INSERT_VALUES)); in HyperbolicInitialize()
714 j = (i - user->mx) % n; in HyperbolicInitialize()
715 PetscCall(MatSetValues(user->Grad, 1, &i, 1, &j, &half_hinv, INSERT_VALUES)); in HyperbolicInitialize()
716 j = (j + 2 * user->mx) % n; in HyperbolicInitialize()
717 PetscCall(MatSetValues(user->Grad, 1, &i, 1, &j, &neg_half_hinv, INSERT_VALUES)); in HyperbolicInitialize()
721 PetscCall(MatAssemblyBegin(user->Grad, MAT_FINAL_ASSEMBLY)); in HyperbolicInitialize()
722 PetscCall(MatAssemblyEnd(user->Grad, MAT_FINAL_ASSEMBLY)); in HyperbolicInitialize()
724 PetscCall(MatCreate(PETSC_COMM_WORLD, &user->Gradxy[0])); in HyperbolicInitialize()
725 PetscCall(MatSetSizes(user->Gradxy[0], PETSC_DECIDE, PETSC_DECIDE, n, n)); in HyperbolicInitialize()
726 PetscCall(MatSetFromOptions(user->Gradxy[0])); in HyperbolicInitialize()
727 PetscCall(MatMPIAIJSetPreallocation(user->Gradxy[0], 3, NULL, 3, NULL)); in HyperbolicInitialize()
728 PetscCall(MatSeqAIJSetPreallocation(user->Gradxy[0], 3, NULL)); in HyperbolicInitialize()
729 PetscCall(MatGetOwnershipRange(user->Gradxy[0], &istart, &iend)); in HyperbolicInitialize()
732 iblock = i / user->mx; in HyperbolicInitialize()
733 j = iblock * user->mx + ((i + user->mx - 1) % user->mx); in HyperbolicInitialize()
734 PetscCall(MatSetValues(user->Gradxy[0], 1, &i, 1, &j, &half_hinv, INSERT_VALUES)); in HyperbolicInitialize()
735 j = iblock * user->mx + ((i + 1) % user->mx); in HyperbolicInitialize()
736 PetscCall(MatSetValues(user->Gradxy[0], 1, &i, 1, &j, &neg_half_hinv, INSERT_VALUES)); in HyperbolicInitialize()
737 PetscCall(MatSetValues(user->Gradxy[0], 1, &i, 1, &i, &zero, INSERT_VALUES)); in HyperbolicInitialize()
739 PetscCall(MatAssemblyBegin(user->Gradxy[0], MAT_FINAL_ASSEMBLY)); in HyperbolicInitialize()
740 PetscCall(MatAssemblyEnd(user->Gradxy[0], MAT_FINAL_ASSEMBLY)); in HyperbolicInitialize()
742 PetscCall(MatCreate(PETSC_COMM_WORLD, &user->Gradxy[1])); in HyperbolicInitialize()
743 PetscCall(MatSetSizes(user->Gradxy[1], PETSC_DECIDE, PETSC_DECIDE, n, n)); in HyperbolicInitialize()
744 PetscCall(MatSetFromOptions(user->Gradxy[1])); in HyperbolicInitialize()
745 PetscCall(MatMPIAIJSetPreallocation(user->Gradxy[1], 3, NULL, 3, NULL)); in HyperbolicInitialize()
746 PetscCall(MatSeqAIJSetPreallocation(user->Gradxy[1], 3, NULL)); in HyperbolicInitialize()
747 PetscCall(MatGetOwnershipRange(user->Gradxy[1], &istart, &iend)); in HyperbolicInitialize()
750 j = (i + n - user->mx) % n; in HyperbolicInitialize()
751 PetscCall(MatSetValues(user->Gradxy[1], 1, &i, 1, &j, &half_hinv, INSERT_VALUES)); in HyperbolicInitialize()
752 j = (j + 2 * user->mx) % n; in HyperbolicInitialize()
753 PetscCall(MatSetValues(user->Gradxy[1], 1, &i, 1, &j, &neg_half_hinv, INSERT_VALUES)); in HyperbolicInitialize()
754 PetscCall(MatSetValues(user->Gradxy[1], 1, &i, 1, &i, &zero, INSERT_VALUES)); in HyperbolicInitialize()
756 PetscCall(MatAssemblyBegin(user->Gradxy[1], MAT_FINAL_ASSEMBLY)); in HyperbolicInitialize()
757 PetscCall(MatAssemblyEnd(user->Gradxy[1], MAT_FINAL_ASSEMBLY)); in HyperbolicInitialize()
760 PetscCall(MatTranspose(user->Grad, MAT_INITIAL_MATRIX, &user->Div)); in HyperbolicInitialize()
761 PetscCall(MatTranspose(user->Gradxy[0], MAT_INITIAL_MATRIX, &user->Divxy[0])); in HyperbolicInitialize()
762 PetscCall(MatTranspose(user->Gradxy[1], MAT_INITIAL_MATRIX, &user->Divxy[1])); in HyperbolicInitialize()
765 PetscCall(MatCreate(PETSC_COMM_WORLD, &user->M)); in HyperbolicInitialize()
766 PetscCall(MatSetSizes(user->M, PETSC_DECIDE, PETSC_DECIDE, n, n)); in HyperbolicInitialize()
767 PetscCall(MatSetFromOptions(user->M)); in HyperbolicInitialize()
768 PetscCall(MatMPIAIJSetPreallocation(user->M, 4, NULL, 4, NULL)); in HyperbolicInitialize()
769 PetscCall(MatSeqAIJSetPreallocation(user->M, 4, NULL)); in HyperbolicInitialize()
770 PetscCall(MatGetOwnershipRange(user->M, &istart, &iend)); in HyperbolicInitialize()
774 iblock = i / user->mx; in HyperbolicInitialize()
775 j = iblock * user->mx + ((i + user->mx - 1) % user->mx); in HyperbolicInitialize()
776 PetscCall(MatSetValues(user->M, 1, &i, 1, &j, &quarter, INSERT_VALUES)); in HyperbolicInitialize()
777 j = iblock * user->mx + ((i + 1) % user->mx); in HyperbolicInitialize()
778 PetscCall(MatSetValues(user->M, 1, &i, 1, &j, &quarter, INSERT_VALUES)); in HyperbolicInitialize()
781 j = (i + user->mx) % n; in HyperbolicInitialize()
782 PetscCall(MatSetValues(user->M, 1, &i, 1, &j, &quarter, INSERT_VALUES)); in HyperbolicInitialize()
783 j = (i + n - user->mx) % n; in HyperbolicInitialize()
784 PetscCall(MatSetValues(user->M, 1, &i, 1, &j, &quarter, INSERT_VALUES)); in HyperbolicInitialize()
786 PetscCall(MatAssemblyBegin(user->M, MAT_FINAL_ASSEMBLY)); in HyperbolicInitialize()
787 PetscCall(MatAssemblyEnd(user->M, MAT_FINAL_ASSEMBLY)); in HyperbolicInitialize()
791 PetscCall(VecCreate(PETSC_COMM_WORLD, &user->q)); in HyperbolicInitialize()
793 PetscCall(VecSetSizes(user->q, PETSC_DECIDE, n * user->nt)); in HyperbolicInitialize()
795 PetscCall(VecSetFromOptions(user->q)); in HyperbolicInitialize()
800 PetscCall(VecDuplicate(XX, &user->d)); in HyperbolicInitialize()
801 PetscCall(VecDuplicate(XX, &user->dwork)); in HyperbolicInitialize()
805 i = linear_index % user->mx; in HyperbolicInitialize()
806 j = (linear_index - i) / user->mx; in HyperbolicInitialize()
830 PetscCall(VecCopy(XXwork, user->dwork)); in HyperbolicInitialize()
831 PetscCall(VecAXPY(user->dwork, 1.0, YYwork)); in HyperbolicInitialize()
832 PetscCall(VecScale(user->dwork, -30.0)); in HyperbolicInitialize()
833 PetscCall(VecExp(user->dwork)); in HyperbolicInitialize()
834 PetscCall(VecCopy(user->dwork, user->d)); in HyperbolicInitialize()
845 PetscCall(VecCopy(XXwork, user->dwork)); in HyperbolicInitialize()
846 PetscCall(VecAXPY(user->dwork, 1.0, YYwork)); in HyperbolicInitialize()
847 PetscCall(VecScale(user->dwork, -30.0)); in HyperbolicInitialize()
848 PetscCall(VecExp(user->dwork)); in HyperbolicInitialize()
850 PetscCall(VecAXPY(user->d, 1.0, user->dwork)); in HyperbolicInitialize()
851 PetscCall(VecShift(user->d, 1.0)); in HyperbolicInitialize()
852 PetscCall(VecSum(user->d, &sum)); in HyperbolicInitialize()
853 PetscCall(VecScale(user->d, 1.0 / (h * h * sum))); in HyperbolicInitialize()
875 PetscCall(PetscMalloc1(user->nt * user->mx * user->mx, &user->yi_scatter)); in HyperbolicInitialize()
877 PetscCall(VecSetSizes(yi, PETSC_DECIDE, user->mx * user->mx)); in HyperbolicInitialize()
879 PetscCall(VecDuplicateVecs(yi, user->nt, &user->yi)); in HyperbolicInitialize()
880 PetscCall(VecDuplicateVecs(yi, user->nt, &user->yiwork)); in HyperbolicInitialize()
881 PetscCall(VecDuplicateVecs(yi, user->nt, &user->ziwork)); in HyperbolicInitialize()
882 for (i = 0; i < user->nt; i++) { in HyperbolicInitialize()
883 PetscCall(VecGetOwnershipRange(user->yi[i], &lo, &hi)); in HyperbolicInitialize()
885 … PetscCall(ISCreateStride(PETSC_COMM_SELF, hi - lo, lo + i * user->mx * user->mx, 1, &is_from_y)); in HyperbolicInitialize()
886 PetscCall(VecScatterCreate(user->y, is_from_y, user->yi[i], is_to_yi, &user->yi_scatter[i])); in HyperbolicInitialize()
893 PetscCall(PetscMalloc1(user->nt * user->mx * user->mx, &user->uxi_scatter)); in HyperbolicInitialize()
894 PetscCall(PetscMalloc1(user->nt * user->mx * user->mx, &user->uyi_scatter)); in HyperbolicInitialize()
895 PetscCall(PetscMalloc1(user->nt * user->mx * user->mx, &user->ux_scatter)); in HyperbolicInitialize()
896 PetscCall(PetscMalloc1(user->nt * user->mx * user->mx, &user->uy_scatter)); in HyperbolicInitialize()
897 PetscCall(PetscMalloc1(2 * user->nt * user->mx * user->mx, &user->ui_scatter)); in HyperbolicInitialize()
900 PetscCall(VecSetSizes(uxi, PETSC_DECIDE, user->mx * user->mx)); in HyperbolicInitialize()
901 PetscCall(VecSetSizes(ui, PETSC_DECIDE, 2 * user->mx * user->mx)); in HyperbolicInitialize()
904 PetscCall(VecDuplicateVecs(uxi, user->nt, &user->uxi)); in HyperbolicInitialize()
905 PetscCall(VecDuplicateVecs(uxi, user->nt, &user->uyi)); in HyperbolicInitialize()
906 PetscCall(VecDuplicateVecs(uxi, user->nt, &user->uxiwork)); in HyperbolicInitialize()
907 PetscCall(VecDuplicateVecs(uxi, user->nt, &user->uyiwork)); in HyperbolicInitialize()
908 PetscCall(VecDuplicateVecs(ui, user->nt, &user->ui)); in HyperbolicInitialize()
909 PetscCall(VecDuplicateVecs(ui, user->nt, &user->uiwork)); in HyperbolicInitialize()
910 for (i = 0; i < user->nt; i++) { in HyperbolicInitialize()
911 PetscCall(VecGetOwnershipRange(user->uxi[i], &lo, &hi)); in HyperbolicInitialize()
913 …PetscCall(ISCreateStride(PETSC_COMM_SELF, hi - lo, lo + 2 * i * user->mx * user->mx, 1, &is_from_u… in HyperbolicInitialize()
914 PetscCall(VecScatterCreate(user->u, is_from_u, user->uxi[i], is_to_uxi, &user->uxi_scatter[i])); in HyperbolicInitialize()
919 PetscCall(VecGetOwnershipRange(user->uyi[i], &lo, &hi)); in HyperbolicInitialize()
921 …PetscCall(ISCreateStride(PETSC_COMM_SELF, hi - lo, lo + (2 * i + 1) * user->mx * user->mx, 1, &is_… in HyperbolicInitialize()
922 PetscCall(VecScatterCreate(user->u, is_from_u, user->uyi[i], is_to_uyi, &user->uyi_scatter[i])); in HyperbolicInitialize()
927 PetscCall(VecGetOwnershipRange(user->uxi[i], &lo, &hi)); in HyperbolicInitialize()
930 …PetscCall(VecScatterCreate(user->ui[i], is_from_u, user->uxi[i], is_to_uxi, &user->ux_scatter[i])); in HyperbolicInitialize()
935 PetscCall(VecGetOwnershipRange(user->uyi[i], &lo, &hi)); in HyperbolicInitialize()
937 PetscCall(ISCreateStride(PETSC_COMM_SELF, hi - lo, lo + user->mx * user->mx, 1, &is_from_u)); in HyperbolicInitialize()
938 …PetscCall(VecScatterCreate(user->ui[i], is_from_u, user->uyi[i], is_to_uyi, &user->uy_scatter[i])); in HyperbolicInitialize()
943 PetscCall(VecGetOwnershipRange(user->ui[i], &lo, &hi)); in HyperbolicInitialize()
945 …PetscCall(ISCreateStride(PETSC_COMM_SELF, hi - lo, lo + 2 * i * user->mx * user->mx, 1, &is_from_u… in HyperbolicInitialize()
946 PetscCall(VecScatterCreate(user->u, is_from_u, user->ui[i], is_to_uxi, &user->ui_scatter[i])); in HyperbolicInitialize()
953 PetscCall(MatMult(user->M, bc, user->yiwork[0])); in HyperbolicInitialize()
954 for (i = 1; i < user->nt; i++) PetscCall(VecSet(user->yiwork[i], 0.0)); in HyperbolicInitialize()
955 PetscCall(Gather_yi(user->q, user->yiwork, user->yi_scatter, user->nt)); in HyperbolicInitialize()
958 PetscCall(VecDuplicate(user->u, &user->utrue)); in HyperbolicInitialize()
959 for (i = 0; i < user->nt; i++) { in HyperbolicInitialize()
960 PetscCall(VecCopy(YY, user->uxi[i])); in HyperbolicInitialize()
961 PetscCall(VecScale(user->uxi[i], 150.0 * i * user->ht)); in HyperbolicInitialize()
962 PetscCall(VecCopy(XX, user->uyi[i])); in HyperbolicInitialize()
963 PetscCall(VecShift(user->uyi[i], -10.0)); in HyperbolicInitialize()
964 PetscCall(VecScale(user->uyi[i], 15.0 * i * user->ht)); in HyperbolicInitialize()
966 …PetscCall(Gather_uxi_uyi(user->utrue, user->uxi, user->uxi_scatter, user->uyi, user->uyi_scatter, in HyperbolicInitialize()
969 PetscCall(VecDuplicate(user->utrue, &user->ur)); in HyperbolicInitialize()
970 for (i = 0; i < user->nt; i++) { in HyperbolicInitialize()
971 PetscCall(VecCopy(XX, user->uxi[i])); in HyperbolicInitialize()
972 PetscCall(VecShift(user->uxi[i], i * user->ht)); in HyperbolicInitialize()
973 PetscCall(VecCopy(YY, user->uyi[i])); in HyperbolicInitialize()
974 PetscCall(VecShift(user->uyi[i], -i * user->ht)); in HyperbolicInitialize()
976 …PetscCall(Gather_uxi_uyi(user->ur, user->uxi, user->uxi_scatter, user->uyi, user->uyi_scatter, use… in HyperbolicInitialize()
979 PetscCall(MatCreate(PETSC_COMM_WORLD, &user->LT)); in HyperbolicInitialize()
980 PetscCall(MatSetSizes(user->LT, PETSC_DECIDE, PETSC_DECIDE, 2 * n * user->nt, n * user->nt)); in HyperbolicInitialize()
981 PetscCall(MatSetFromOptions(user->LT)); in HyperbolicInitialize()
982 PetscCall(MatMPIAIJSetPreallocation(user->LT, 1, NULL, 1, NULL)); in HyperbolicInitialize()
983 PetscCall(MatSeqAIJSetPreallocation(user->LT, 1, NULL)); in HyperbolicInitialize()
984 PetscCall(MatGetOwnershipRange(user->LT, &istart, &iend)); in HyperbolicInitialize()
989 PetscCall(MatSetValues(user->LT, 1, &i, 1, &j, &user->gamma, INSERT_VALUES)); in HyperbolicInitialize()
992 PetscCall(MatAssemblyBegin(user->LT, MAT_FINAL_ASSEMBLY)); in HyperbolicInitialize()
993 PetscCall(MatAssemblyEnd(user->LT, MAT_FINAL_ASSEMBLY)); in HyperbolicInitialize()
995 PetscCall(MatTranspose(user->LT, MAT_INITIAL_MATRIX, &user->L)); in HyperbolicInitialize()
998 PetscCall(VecCreate(PETSC_COMM_WORLD, &user->lwork)); in HyperbolicInitialize()
999 PetscCall(VecSetType(user->lwork, VECMPI)); in HyperbolicInitialize()
1000 PetscCall(VecSetSizes(user->lwork, PETSC_DECIDE, user->m)); in HyperbolicInitialize()
1001 PetscCall(VecSetFromOptions(user->lwork)); in HyperbolicInitialize()
1003 PetscCall(MatDuplicate(user->Div, MAT_SHARE_NONZERO_PATTERN, &user->Divwork)); in HyperbolicInitialize()
1005 PetscCall(VecDuplicate(user->y, &user->ywork)); in HyperbolicInitialize()
1006 PetscCall(VecDuplicate(user->u, &user->uwork)); in HyperbolicInitialize()
1007 PetscCall(VecDuplicate(user->u, &user->vwork)); in HyperbolicInitialize()
1008 PetscCall(VecDuplicate(user->u, &user->js_diag)); in HyperbolicInitialize()
1009 PetscCall(VecDuplicate(user->c, &user->cwork)); in HyperbolicInitialize()
1012 …reateShell(PETSC_COMM_WORLD, PETSC_DETERMINE, PETSC_DETERMINE, user->m, user->m, user, &user->Js)); in HyperbolicInitialize()
1013 PetscCall(MatShellSetOperation(user->Js, MATOP_MULT, (PetscErrorCodeFn *)StateMatMult)); in HyperbolicInitialize()
1014 PetscCall(MatShellSetOperation(user->Js, MATOP_DUPLICATE, (PetscErrorCodeFn *)StateMatDuplicate)); in HyperbolicInitialize()
1015 …PetscCall(MatShellSetOperation(user->Js, MATOP_MULT_TRANSPOSE, (PetscErrorCodeFn *)StateMatMultTra… in HyperbolicInitialize()
1016 …PetscCall(MatShellSetOperation(user->Js, MATOP_GET_DIAGONAL, (PetscErrorCodeFn *)StateMatGetDiagon… in HyperbolicInitialize()
1019 …PetscCall(MatCreateShell(PETSC_COMM_WORLD, PETSC_DETERMINE, PETSC_DETERMINE, n, n, user, &user->Js… in HyperbolicInitialize()
1020 PetscCall(MatShellSetOperation(user->JsBlock, MATOP_MULT, (PetscErrorCodeFn *)StateMatBlockMult)); in HyperbolicInitialize()
1021 …PetscCall(MatShellSetOperation(user->JsBlock, MATOP_MULT_TRANSPOSE, (PetscErrorCodeFn *)StateMatBl… in HyperbolicInitialize()
1026 …PetscCall(MatCreateShell(PETSC_COMM_WORLD, PETSC_DETERMINE, PETSC_DETERMINE, n, n, user, &user->Js… in HyperbolicInitialize()
1027 …PetscCall(MatShellSetOperation(user->JsBlockPrec, MATOP_MULT, (PetscErrorCodeFn *)StateMatBlockPre… in HyperbolicInitialize()
1028 …PetscCall(MatShellSetOperation(user->JsBlockPrec, MATOP_MULT_TRANSPOSE, (PetscErrorCodeFn *)StateM… in HyperbolicInitialize()
1031 …hell(PETSC_COMM_WORLD, PETSC_DETERMINE, PETSC_DETERMINE, user->m, user->n - user->m, user, &user->… in HyperbolicInitialize()
1032 PetscCall(MatShellSetOperation(user->Jd, MATOP_MULT, (PetscErrorCodeFn *)DesignMatMult)); in HyperbolicInitialize()
1033 …PetscCall(MatShellSetOperation(user->Jd, MATOP_MULT_TRANSPOSE, (PetscErrorCodeFn *)DesignMatMultTr… in HyperbolicInitialize()
1036 …eateShell(PETSC_COMM_WORLD, PETSC_DETERMINE, PETSC_DETERMINE, user->m, user->m, user, &user->JsInv… in HyperbolicInitialize()
1037 PetscCall(MatShellSetOperation(user->JsInv, MATOP_MULT, (PetscErrorCodeFn *)StateMatInvMult)); in HyperbolicInitialize()
1038 …PetscCall(MatShellSetOperation(user->JsInv, MATOP_MULT_TRANSPOSE, (PetscErrorCodeFn *)StateMatInvT… in HyperbolicInitialize()
1041 …PetscCall(Scatter_uxi_uyi(user->u, user->uxi, user->uxi_scatter, user->uyi, user->uyi_scatter, use… in HyperbolicInitialize()
1042 PetscCall(PetscMalloc1(5 * n, &user->C)); in HyperbolicInitialize()
1043 PetscCall(PetscMalloc1(2 * n, &user->Cwork)); in HyperbolicInitialize()
1044 for (i = 0; i < user->nt; i++) { in HyperbolicInitialize()
1045 PetscCall(MatDuplicate(user->Divxy[0], MAT_COPY_VALUES, &user->C[i])); in HyperbolicInitialize()
1046 PetscCall(MatDuplicate(user->Divxy[1], MAT_COPY_VALUES, &user->Cwork[i])); in HyperbolicInitialize()
1048 PetscCall(MatDiagonalScale(user->C[i], NULL, user->uxi[i])); in HyperbolicInitialize()
1049 PetscCall(MatDiagonalScale(user->Cwork[i], NULL, user->uyi[i])); in HyperbolicInitialize()
1050 PetscCall(MatAXPY(user->C[i], 1.0, user->Cwork[i], DIFFERENT_NONZERO_PATTERN)); in HyperbolicInitialize()
1051 PetscCall(MatScale(user->C[i], user->ht)); in HyperbolicInitialize()
1052 PetscCall(MatShift(user->C[i], 1.0)); in HyperbolicInitialize()
1056 PetscCall(KSPCreate(PETSC_COMM_WORLD, &user->solver)); in HyperbolicInitialize()
1057 PetscCall(KSPSetType(user->solver, KSPGMRES)); in HyperbolicInitialize()
1058 PetscCall(KSPSetOperators(user->solver, user->JsBlock, user->JsBlockPrec)); in HyperbolicInitialize()
1059 PetscCall(KSPSetTolerances(user->solver, 1e-4, 1e-20, 1e3, 500)); in HyperbolicInitialize()
1061 PetscCall(KSPGetPC(user->solver, &user->prec)); in HyperbolicInitialize()
1062 PetscCall(PCSetType(user->prec, PCSHELL)); in HyperbolicInitialize()
1064 PetscCall(PCShellSetApply(user->prec, StateMatBlockPrecMult)); in HyperbolicInitialize()
1065 PetscCall(PCShellSetApplyTranspose(user->prec, StateMatBlockPrecMultTranspose)); in HyperbolicInitialize()
1066 PetscCall(PCShellSetContext(user->prec, user)); in HyperbolicInitialize()
1069 PetscCall(VecCreate(PETSC_COMM_WORLD, &user->ytrue)); in HyperbolicInitialize()
1070 PetscCall(VecSetSizes(user->ytrue, PETSC_DECIDE, n * user->nt)); in HyperbolicInitialize()
1071 PetscCall(VecSetFromOptions(user->ytrue)); in HyperbolicInitialize()
1072 user->c_formed = PETSC_TRUE; in HyperbolicInitialize()
1073 PetscCall(VecCopy(user->utrue, user->u)); /* Set u=utrue temporarily for StateMatInv */ in HyperbolicInitialize()
1074 PetscCall(VecSet(user->ytrue, 0.0)); /* Initial guess */ in HyperbolicInitialize()
1075 PetscCall(StateMatInvMult(user->Js, user->q, user->ytrue)); in HyperbolicInitialize()
1076 PetscCall(VecCopy(user->ur, user->u)); /* Reset u=ur */ in HyperbolicInitialize()
1079 PetscCall(StateMatInvMult(user->Js, user->q, user->y)); in HyperbolicInitialize()
1082 PetscCall(MatCreate(PETSC_COMM_WORLD, &user->Q)); in HyperbolicInitialize()
1083 PetscCall(MatSetSizes(user->Q, PETSC_DECIDE, PETSC_DECIDE, user->mx * user->mx, user->m)); in HyperbolicInitialize()
1084 PetscCall(MatSetFromOptions(user->Q)); in HyperbolicInitialize()
1085 PetscCall(MatMPIAIJSetPreallocation(user->Q, 0, NULL, 1, NULL)); in HyperbolicInitialize()
1086 PetscCall(MatSeqAIJSetPreallocation(user->Q, 1, NULL)); in HyperbolicInitialize()
1088 PetscCall(MatGetOwnershipRange(user->Q, &istart, &iend)); in HyperbolicInitialize()
1091 j = i + user->m - user->mx * user->mx; in HyperbolicInitialize()
1092 PetscCall(MatSetValues(user->Q, 1, &i, 1, &j, &one, INSERT_VALUES)); in HyperbolicInitialize()
1095 PetscCall(MatAssemblyBegin(user->Q, MAT_FINAL_ASSEMBLY)); in HyperbolicInitialize()
1096 PetscCall(MatAssemblyEnd(user->Q, MAT_FINAL_ASSEMBLY)); in HyperbolicInitialize()
1098 PetscCall(MatTranspose(user->Q, MAT_INITIAL_MATRIX, &user->QT)); in HyperbolicInitialize()
1110 PetscCall(KSPSetFromOptions(user->solver)); in HyperbolicInitialize()
1114 PetscErrorCode HyperbolicDestroy(AppCtx *user) in HyperbolicDestroy() argument
1119 PetscCall(MatDestroy(&user->Q)); in HyperbolicDestroy()
1120 PetscCall(MatDestroy(&user->QT)); in HyperbolicDestroy()
1121 PetscCall(MatDestroy(&user->Div)); in HyperbolicDestroy()
1122 PetscCall(MatDestroy(&user->Divwork)); in HyperbolicDestroy()
1123 PetscCall(MatDestroy(&user->Grad)); in HyperbolicDestroy()
1124 PetscCall(MatDestroy(&user->L)); in HyperbolicDestroy()
1125 PetscCall(MatDestroy(&user->LT)); in HyperbolicDestroy()
1126 PetscCall(KSPDestroy(&user->solver)); in HyperbolicDestroy()
1127 PetscCall(MatDestroy(&user->Js)); in HyperbolicDestroy()
1128 PetscCall(MatDestroy(&user->Jd)); in HyperbolicDestroy()
1129 PetscCall(MatDestroy(&user->JsBlockPrec)); in HyperbolicDestroy()
1130 PetscCall(MatDestroy(&user->JsInv)); in HyperbolicDestroy()
1131 PetscCall(MatDestroy(&user->JsBlock)); in HyperbolicDestroy()
1132 PetscCall(MatDestroy(&user->Divxy[0])); in HyperbolicDestroy()
1133 PetscCall(MatDestroy(&user->Divxy[1])); in HyperbolicDestroy()
1134 PetscCall(MatDestroy(&user->Gradxy[0])); in HyperbolicDestroy()
1135 PetscCall(MatDestroy(&user->Gradxy[1])); in HyperbolicDestroy()
1136 PetscCall(MatDestroy(&user->M)); in HyperbolicDestroy()
1137 for (i = 0; i < user->nt; i++) { in HyperbolicDestroy()
1138 PetscCall(MatDestroy(&user->C[i])); in HyperbolicDestroy()
1139 PetscCall(MatDestroy(&user->Cwork[i])); in HyperbolicDestroy()
1141 PetscCall(PetscFree(user->C)); in HyperbolicDestroy()
1142 PetscCall(PetscFree(user->Cwork)); in HyperbolicDestroy()
1143 PetscCall(VecDestroy(&user->u)); in HyperbolicDestroy()
1144 PetscCall(VecDestroy(&user->uwork)); in HyperbolicDestroy()
1145 PetscCall(VecDestroy(&user->vwork)); in HyperbolicDestroy()
1146 PetscCall(VecDestroy(&user->utrue)); in HyperbolicDestroy()
1147 PetscCall(VecDestroy(&user->y)); in HyperbolicDestroy()
1148 PetscCall(VecDestroy(&user->ywork)); in HyperbolicDestroy()
1149 PetscCall(VecDestroy(&user->ytrue)); in HyperbolicDestroy()
1150 PetscCall(VecDestroyVecs(user->nt, &user->yi)); in HyperbolicDestroy()
1151 PetscCall(VecDestroyVecs(user->nt, &user->yiwork)); in HyperbolicDestroy()
1152 PetscCall(VecDestroyVecs(user->nt, &user->ziwork)); in HyperbolicDestroy()
1153 PetscCall(VecDestroyVecs(user->nt, &user->uxi)); in HyperbolicDestroy()
1154 PetscCall(VecDestroyVecs(user->nt, &user->uyi)); in HyperbolicDestroy()
1155 PetscCall(VecDestroyVecs(user->nt, &user->uxiwork)); in HyperbolicDestroy()
1156 PetscCall(VecDestroyVecs(user->nt, &user->uyiwork)); in HyperbolicDestroy()
1157 PetscCall(VecDestroyVecs(user->nt, &user->ui)); in HyperbolicDestroy()
1158 PetscCall(VecDestroyVecs(user->nt, &user->uiwork)); in HyperbolicDestroy()
1159 PetscCall(VecDestroy(&user->c)); in HyperbolicDestroy()
1160 PetscCall(VecDestroy(&user->cwork)); in HyperbolicDestroy()
1161 PetscCall(VecDestroy(&user->ur)); in HyperbolicDestroy()
1162 PetscCall(VecDestroy(&user->q)); in HyperbolicDestroy()
1163 PetscCall(VecDestroy(&user->d)); in HyperbolicDestroy()
1164 PetscCall(VecDestroy(&user->dwork)); in HyperbolicDestroy()
1165 PetscCall(VecDestroy(&user->lwork)); in HyperbolicDestroy()
1166 PetscCall(VecDestroy(&user->js_diag)); in HyperbolicDestroy()
1167 PetscCall(ISDestroy(&user->s_is)); in HyperbolicDestroy()
1168 PetscCall(ISDestroy(&user->d_is)); in HyperbolicDestroy()
1169 PetscCall(VecScatterDestroy(&user->state_scatter)); in HyperbolicDestroy()
1170 PetscCall(VecScatterDestroy(&user->design_scatter)); in HyperbolicDestroy()
1171 for (i = 0; i < user->nt; i++) { in HyperbolicDestroy()
1172 PetscCall(VecScatterDestroy(&user->uxi_scatter[i])); in HyperbolicDestroy()
1173 PetscCall(VecScatterDestroy(&user->uyi_scatter[i])); in HyperbolicDestroy()
1174 PetscCall(VecScatterDestroy(&user->ux_scatter[i])); in HyperbolicDestroy()
1175 PetscCall(VecScatterDestroy(&user->uy_scatter[i])); in HyperbolicDestroy()
1176 PetscCall(VecScatterDestroy(&user->ui_scatter[i])); in HyperbolicDestroy()
1177 PetscCall(VecScatterDestroy(&user->yi_scatter[i])); in HyperbolicDestroy()
1179 PetscCall(PetscFree(user->uxi_scatter)); in HyperbolicDestroy()
1180 PetscCall(PetscFree(user->uyi_scatter)); in HyperbolicDestroy()
1181 PetscCall(PetscFree(user->ux_scatter)); in HyperbolicDestroy()
1182 PetscCall(PetscFree(user->uy_scatter)); in HyperbolicDestroy()
1183 PetscCall(PetscFree(user->ui_scatter)); in HyperbolicDestroy()
1184 PetscCall(PetscFree(user->yi_scatter)); in HyperbolicDestroy()
1192 AppCtx *user = (AppCtx *)ptr; in HyperbolicMonitor() local
1196 PetscCall(Scatter(X, user->ywork, user->state_scatter, user->uwork, user->design_scatter)); in HyperbolicMonitor()
1197 PetscCall(VecAXPY(user->ywork, -1.0, user->ytrue)); in HyperbolicMonitor()
1198 PetscCall(VecAXPY(user->uwork, -1.0, user->utrue)); in HyperbolicMonitor()
1199 PetscCall(VecNorm(user->uwork, NORM_2, &unorm)); in HyperbolicMonitor()
1200 PetscCall(VecNorm(user->ywork, NORM_2, &ynorm)); in HyperbolicMonitor()