Lines Matching refs:user

103   AppCtx   user;  in main()  local
109 user.mx = 8; in main()
111 …PetscCall(PetscOptionsInt("-mx", "Number of grid points in each direction", "", user.mx, &user.mx,… in main()
112 user.ns = 6; in main()
113 …PetscCall(PetscOptionsInt("-ns", "Number of data samples (1<=ns<=8)", "", user.ns, &user.ns, NULL)… in main()
114 user.ndata = 64; in main()
115 …PetscCall(PetscOptionsInt("-ndata", "Numbers of data points per sample", "", user.ndata, &user.nda… in main()
116 user.alpha = 0.1; in main()
117 …PetscCall(PetscOptionsReal("-alpha", "Regularization parameter", "", user.alpha, &user.alpha, NULL… in main()
118 user.beta = 0.00001; in main()
119 …a", "Weight attributed to ||u||^2 in regularization functional", "", user.beta, &user.beta, NULL)); in main()
120 user.noise = 0.01; in main()
121 …PetscCall(PetscOptionsReal("-noise", "Amount of noise to add to data", "", user.noise, &user.noise… in main()
123 user.use_ptap = PETSC_FALSE; in main()
124 …PetscCall(PetscOptionsBool("-use_ptap", "Use ptap matrix for DSG", "", user.use_ptap, &user.use_pt… in main()
125 user.use_lrc = PETSC_FALSE; in main()
126 …PetscCall(PetscOptionsBool("-use_lrc", "Use lrc matrix for Js", "", user.use_lrc, &user.use_lrc, N… in main()
130 user.m = user.ns * user.mx * user.mx * user.mx; /* number of constraints */ in main()
131 user.nstate = user.m; in main()
132 user.ndesign = user.mx * user.mx * user.mx; in main()
133 user.n = user.nstate + user.ndesign; /* number of variables */ in main()
140 PetscCall(EllipticInitialize(&user)); in main()
142 PetscCall(Gather(user.x, user.y, user.state_scatter, user.u, user.design_scatter)); in main()
143 PetscCall(VecDuplicate(user.x, &x0)); in main()
144 PetscCall(VecCopy(user.x, x0)); in main()
147 PetscCall(TaoSetSolution(tao, user.x)); in main()
148 PetscCall(TaoSetObjective(tao, FormFunction, &user)); in main()
149 PetscCall(TaoSetGradient(tao, NULL, FormGradient, &user)); in main()
150 PetscCall(TaoSetConstraintsRoutine(tao, user.c, FormConstraints, &user)); in main()
152 PetscCall(TaoSetJacobianStateRoutine(tao, user.Js, NULL, user.JsInv, FormJacobianState, &user)); in main()
153 PetscCall(TaoSetJacobianDesignRoutine(tao, user.Jd, FormJacobianDesign, &user)); in main()
155 PetscCall(TaoSetStateDesignIS(tao, user.s_is, user.d_is)); in main()
159 PetscCall(PetscLogStageRegister("Trials", &user.stages[1])); in main()
160 PetscCall(PetscLogStagePush(user.stages[1])); in main()
163 PetscCall(PetscPrintf(PETSC_COMM_WORLD, "KSP Iterations = %" PetscInt_FMT "\n", user.ksp_its)); in main()
164 PetscCall(VecCopy(x0, user.x)); in main()
167 PetscCall(PetscBarrier((PetscObject)user.x)); in main()
169 PetscCall(PetscPrintf(PETSC_COMM_WORLD, "%" PetscInt_FMT "\n", user.ksp_its_initial)); in main()
173 PetscCall(EllipticDestroy(&user)); in main()
186 AppCtx *user = (AppCtx *)ptr; in FormFunction() local
189 PetscCall(Scatter(X, user->y, user->state_scatter, user->u, user->design_scatter)); in FormFunction()
190 PetscCall(MatMult(user->MQ, user->y, user->dwork)); in FormFunction()
191 PetscCall(VecAXPY(user->dwork, -1.0, user->d)); in FormFunction()
192 PetscCall(VecDot(user->dwork, user->dwork, &d1)); in FormFunction()
193 PetscCall(VecWAXPY(user->uwork, -1.0, user->ur, user->u)); in FormFunction()
194 PetscCall(MatMult(user->L, user->uwork, user->lwork)); in FormFunction()
195 PetscCall(VecDot(user->lwork, user->lwork, &d2)); in FormFunction()
196 *f = 0.5 * (d1 + user->alpha * d2); in FormFunction()
207 AppCtx *user = (AppCtx *)ptr; in FormGradient() local
210 PetscCall(Scatter(X, user->y, user->state_scatter, user->u, user->design_scatter)); in FormGradient()
211 PetscCall(MatMult(user->MQ, user->y, user->dwork)); in FormGradient()
212 PetscCall(VecAXPY(user->dwork, -1.0, user->d)); in FormGradient()
213 PetscCall(MatMultTranspose(user->MQ, user->dwork, user->ywork)); in FormGradient()
214 PetscCall(VecWAXPY(user->uwork, -1.0, user->ur, user->u)); in FormGradient()
215 PetscCall(MatMult(user->L, user->uwork, user->lwork)); in FormGradient()
216 PetscCall(MatMultTranspose(user->L, user->lwork, user->uwork)); in FormGradient()
217 PetscCall(VecScale(user->uwork, user->alpha)); in FormGradient()
218 PetscCall(Gather(G, user->ywork, user->state_scatter, user->uwork, user->design_scatter)); in FormGradient()
225 AppCtx *user = (AppCtx *)ptr; in FormFunctionGradient() local
228 PetscCall(Scatter(X, user->y, user->state_scatter, user->u, user->design_scatter)); in FormFunctionGradient()
229 PetscCall(MatMult(user->MQ, user->y, user->dwork)); in FormFunctionGradient()
230 PetscCall(VecAXPY(user->dwork, -1.0, user->d)); in FormFunctionGradient()
231 PetscCall(VecDot(user->dwork, user->dwork, &d1)); in FormFunctionGradient()
232 PetscCall(MatMultTranspose(user->MQ, user->dwork, user->ywork)); in FormFunctionGradient()
234 PetscCall(VecWAXPY(user->uwork, -1.0, user->ur, user->u)); in FormFunctionGradient()
235 PetscCall(MatMult(user->L, user->uwork, user->lwork)); in FormFunctionGradient()
236 PetscCall(VecDot(user->lwork, user->lwork, &d2)); in FormFunctionGradient()
237 PetscCall(MatMultTranspose(user->L, user->lwork, user->uwork)); in FormFunctionGradient()
238 PetscCall(VecScale(user->uwork, user->alpha)); in FormFunctionGradient()
239 *f = 0.5 * (d1 + user->alpha * d2); in FormFunctionGradient()
240 PetscCall(Gather(G, user->ywork, user->state_scatter, user->uwork, user->design_scatter)); in FormFunctionGradient()
250 AppCtx *user = (AppCtx *)ptr; in FormJacobianState() local
253 PetscCall(Scatter(X, user->y, user->state_scatter, user->u, user->design_scatter)); in FormJacobianState()
255 PetscCall(VecSet(user->uwork, 0)); in FormJacobianState()
256 PetscCall(VecAXPY(user->uwork, -1.0, user->u)); in FormJacobianState()
257 PetscCall(VecExp(user->uwork)); in FormJacobianState()
258 PetscCall(MatMult(user->Av, user->uwork, user->Av_u)); in FormJacobianState()
259 PetscCall(VecCopy(user->Av_u, user->Swork)); in FormJacobianState()
260 PetscCall(VecReciprocal(user->Swork)); in FormJacobianState()
261 if (user->use_ptap) { in FormJacobianState()
262 PetscCall(MatDiagonalSet(user->Diag, user->Swork, INSERT_VALUES)); in FormJacobianState()
263 PetscCall(MatPtAP(user->Diag, user->Grad, MAT_REUSE_MATRIX, 1.0, &user->DSG)); in FormJacobianState()
265 PetscCall(MatCopy(user->Div, user->Divwork, SAME_NONZERO_PATTERN)); in FormJacobianState()
266 PetscCall(MatDiagonalScale(user->Divwork, NULL, user->Swork)); in FormJacobianState()
267 PetscCall(MatProductNumeric(user->DSG)); in FormJacobianState()
275 AppCtx *user = (AppCtx *)ptr; in FormJacobianDesign() local
278 PetscCall(Scatter(X, user->y, user->state_scatter, user->u, user->design_scatter)); in FormJacobianDesign()
285 AppCtx *user; in StateBlockMatMult() local
288 PetscCall(MatShellGetContext(J_shell, &user)); in StateBlockMatMult()
289 PetscCall(MatMult(user->DSG, X, Y)); in StateBlockMatMult()
291 sum /= user->ndesign; in StateBlockMatMult()
299 AppCtx *user; in StateMatMult() local
302 PetscCall(MatShellGetContext(J_shell, &user)); in StateMatMult()
303 if (user->ns == 1) { in StateMatMult()
304 PetscCall(MatMult(user->JsBlock, X, Y)); in StateMatMult()
306 for (i = 0; i < user->ns; i++) { in StateMatMult()
307 PetscCall(Scatter(X, user->subq, user->yi_scatter[i], 0, 0)); in StateMatMult()
308 PetscCall(Scatter(Y, user->suby, user->yi_scatter[i], 0, 0)); in StateMatMult()
309 PetscCall(MatMult(user->JsBlock, user->subq, user->suby)); in StateMatMult()
310 PetscCall(Gather(Y, user->suby, user->yi_scatter[i], 0, 0)); in StateMatMult()
319 AppCtx *user; in StateInvMatMult() local
322 PetscCall(MatShellGetContext(J_shell, &user)); in StateInvMatMult()
323 PetscCall(KSPSetOperators(user->solver, user->JsBlock, user->DSG)); in StateInvMatMult()
324 if (Y == user->ytrue) { in StateInvMatMult()
326 PetscCall(KSPSetTolerances(user->solver, 1e-8, PETSC_CURRENT, PETSC_CURRENT, PETSC_CURRENT)); in StateInvMatMult()
328 …PetscCall(KSPSetTolerances(user->solver, PETSC_CURRENT, PETSC_CURRENT, PETSC_CURRENT, PETSC_CURREN… in StateInvMatMult()
330 if (user->ns == 1) { in StateInvMatMult()
331 PetscCall(KSPSolve(user->solver, X, Y)); in StateInvMatMult()
332 PetscCall(KSPGetIterationNumber(user->solver, &its)); in StateInvMatMult()
333 user->ksp_its += its; in StateInvMatMult()
335 for (i = 0; i < user->ns; i++) { in StateInvMatMult()
336 PetscCall(Scatter(X, user->subq, user->yi_scatter[i], 0, 0)); in StateInvMatMult()
337 PetscCall(Scatter(Y, user->suby, user->yi_scatter[i], 0, 0)); in StateInvMatMult()
338 PetscCall(KSPSolve(user->solver, user->subq, user->suby)); in StateInvMatMult()
339 PetscCall(KSPGetIterationNumber(user->solver, &its)); in StateInvMatMult()
340 user->ksp_its += its; in StateInvMatMult()
341 PetscCall(Gather(Y, user->suby, user->yi_scatter[i], 0, 0)); in StateInvMatMult()
348 AppCtx *user; in QMatMult() local
352 PetscCall(MatShellGetContext(J_shell, &user)); in QMatMult()
353 if (user->ns == 1) { in QMatMult()
354 PetscCall(MatMult(user->Q, X, Y)); in QMatMult()
356 for (i = 0; i < user->ns; i++) { in QMatMult()
357 PetscCall(Scatter(X, user->subq, user->yi_scatter[i], 0, 0)); in QMatMult()
358 PetscCall(Scatter(Y, user->subd, user->di_scatter[i], 0, 0)); in QMatMult()
359 PetscCall(MatMult(user->Q, user->subq, user->subd)); in QMatMult()
360 PetscCall(Gather(Y, user->subd, user->di_scatter[i], 0, 0)); in QMatMult()
368 AppCtx *user; in QMatMultTranspose() local
372 PetscCall(MatShellGetContext(J_shell, &user)); in QMatMultTranspose()
373 if (user->ns == 1) { in QMatMultTranspose()
374 PetscCall(MatMultTranspose(user->Q, X, Y)); in QMatMultTranspose()
376 for (i = 0; i < user->ns; i++) { in QMatMultTranspose()
377 PetscCall(Scatter(X, user->subd, user->di_scatter[i], 0, 0)); in QMatMultTranspose()
378 PetscCall(Scatter(Y, user->suby, user->yi_scatter[i], 0, 0)); in QMatMultTranspose()
379 PetscCall(MatMultTranspose(user->Q, user->subd, user->suby)); in QMatMultTranspose()
380 PetscCall(Gather(Y, user->suby, user->yi_scatter[i], 0, 0)); in QMatMultTranspose()
389 AppCtx *user; in DesignMatMult() local
392 PetscCall(MatShellGetContext(J_shell, &user)); in DesignMatMult()
395 PetscCall(VecSet(user->uwork, 0)); in DesignMatMult()
396 PetscCall(VecAXPY(user->uwork, -1.0, user->u)); in DesignMatMult()
397 PetscCall(VecExp(user->uwork)); in DesignMatMult()
400 PetscCall(MatMult(user->Av, user->uwork, user->Swork)); in DesignMatMult()
401 PetscCall(VecPointwiseMult(user->Swork, user->Swork, user->Swork)); in DesignMatMult()
402 PetscCall(VecReciprocal(user->Swork)); in DesignMatMult()
405 PetscCall(VecPointwiseMult(user->uwork, user->uwork, X)); in DesignMatMult()
406 PetscCall(MatMult(user->Av, user->uwork, user->Twork)); in DesignMatMult()
409 PetscCall(VecPointwiseMult(user->Swork, user->Twork, user->Swork)); in DesignMatMult()
411 if (user->ns == 1) { in DesignMatMult()
413 PetscCall(MatMult(user->Grad, user->y, user->Twork)); in DesignMatMult()
416 PetscCall(VecPointwiseMult(user->Swork, user->Twork, user->Swork)); in DesignMatMult()
417 PetscCall(MatMultTranspose(user->Grad, user->Swork, Y)); in DesignMatMult()
419 for (i = 0; i < user->ns; i++) { in DesignMatMult()
420 PetscCall(Scatter(user->y, user->suby, user->yi_scatter[i], 0, 0)); in DesignMatMult()
421 PetscCall(Scatter(Y, user->subq, user->yi_scatter[i], 0, 0)); in DesignMatMult()
423 PetscCall(MatMult(user->Grad, user->suby, user->Twork)); in DesignMatMult()
424 PetscCall(VecPointwiseMult(user->Twork, user->Twork, user->Swork)); in DesignMatMult()
425 PetscCall(MatMultTranspose(user->Grad, user->Twork, user->subq)); in DesignMatMult()
426 PetscCall(Gather(user->y, user->suby, user->yi_scatter[i], 0, 0)); in DesignMatMult()
427 PetscCall(Gather(Y, user->subq, user->yi_scatter[i], 0, 0)); in DesignMatMult()
436 AppCtx *user; in DesignMatMultTranspose() local
439 PetscCall(MatShellGetContext(J_shell, &user)); in DesignMatMultTranspose()
443 PetscCall(VecSet(user->uwork, 0)); in DesignMatMultTranspose()
444 PetscCall(VecAXPY(user->uwork, -1.0, user->u)); in DesignMatMultTranspose()
445 PetscCall(VecExp(user->uwork)); in DesignMatMultTranspose()
446 PetscCall(MatMult(user->Av, user->uwork, user->Swork)); in DesignMatMultTranspose()
447 PetscCall(VecPointwiseMult(user->Sdiag, user->Swork, user->Swork)); in DesignMatMultTranspose()
448 PetscCall(VecReciprocal(user->Sdiag)); in DesignMatMultTranspose()
450 for (i = 0; i < user->ns; i++) { in DesignMatMultTranspose()
451 PetscCall(Scatter(X, user->subq, user->yi_scatter[i], 0, 0)); in DesignMatMultTranspose()
452 PetscCall(Scatter(user->y, user->suby, user->yi_scatter[i], 0, 0)); in DesignMatMultTranspose()
455 PetscCall(MatMult(user->Grad, user->subq, user->Swork)); in DesignMatMultTranspose()
458 PetscCall(MatMult(user->Grad, user->suby, user->Twork)); in DesignMatMultTranspose()
461 PetscCall(VecPointwiseMult(user->Twork, user->Swork, user->Twork)); in DesignMatMultTranspose()
464 PetscCall(VecPointwiseMult(user->Swork, user->Twork, user->Sdiag)); in DesignMatMultTranspose()
467 PetscCall(MatMultTranspose(user->Av, user->Swork, user->Ywork)); in DesignMatMultTranspose()
470 PetscCall(VecPointwiseMult(user->Ywork, user->uwork, user->Ywork)); in DesignMatMultTranspose()
471 PetscCall(VecAXPY(Y, 1.0, user->Ywork)); in DesignMatMultTranspose()
472 PetscCall(Gather(user->y, user->suby, user->yi_scatter[i], 0, 0)); in DesignMatMultTranspose()
482 AppCtx *user = (AppCtx *)ptr; in FormConstraints() local
485 PetscCall(Scatter(X, user->y, user->state_scatter, user->u, user->design_scatter)); in FormConstraints()
486 if (user->ns == 1) { in FormConstraints()
487 PetscCall(MatMult(user->Grad, user->y, user->Swork)); in FormConstraints()
488 PetscCall(VecPointwiseDivide(user->Swork, user->Swork, user->Av_u)); in FormConstraints()
489 PetscCall(MatMultTranspose(user->Grad, user->Swork, C)); in FormConstraints()
490 PetscCall(VecSum(user->y, &sum)); in FormConstraints()
491 sum /= user->ndesign; in FormConstraints()
494 for (i = 0; i < user->ns; i++) { in FormConstraints()
495 PetscCall(Scatter(user->y, user->suby, user->yi_scatter[i], 0, 0)); in FormConstraints()
496 PetscCall(Scatter(C, user->subq, user->yi_scatter[i], 0, 0)); in FormConstraints()
497 PetscCall(MatMult(user->Grad, user->suby, user->Swork)); in FormConstraints()
498 PetscCall(VecPointwiseDivide(user->Swork, user->Swork, user->Av_u)); in FormConstraints()
499 PetscCall(MatMultTranspose(user->Grad, user->Swork, user->subq)); in FormConstraints()
501 PetscCall(VecSum(user->suby, &sum)); in FormConstraints()
502 sum /= user->ndesign; in FormConstraints()
503 PetscCall(VecShift(user->subq, sum)); in FormConstraints()
505 PetscCall(Gather(user->y, user->suby, user->yi_scatter[i], 0, 0)); in FormConstraints()
506 PetscCall(Gather(C, user->subq, user->yi_scatter[i], 0, 0)); in FormConstraints()
509 PetscCall(VecAXPY(C, -1.0, user->q)); in FormConstraints()
537 PetscErrorCode EllipticInitialize(AppCtx *user) in EllipticInitialize() argument
569 PetscCall(PetscLogStageRegister("Elliptic Setup", &user->stages[0])); in EllipticInitialize()
570 PetscCall(PetscLogStagePush(user->stages[0])); in EllipticInitialize()
573 PetscCall(VecCreate(PETSC_COMM_WORLD, &user->u)); in EllipticInitialize()
574 PetscCall(VecCreate(PETSC_COMM_WORLD, &user->y)); in EllipticInitialize()
575 PetscCall(VecCreate(PETSC_COMM_WORLD, &user->c)); in EllipticInitialize()
576 PetscCall(VecSetSizes(user->u, PETSC_DECIDE, user->ndesign)); in EllipticInitialize()
577 PetscCall(VecSetFromOptions(user->u)); in EllipticInitialize()
578 PetscCall(VecGetLocalSize(user->u, &ysubnlocal)); in EllipticInitialize()
579 PetscCall(VecSetSizes(user->y, ysubnlocal * user->ns, user->nstate)); in EllipticInitialize()
580 PetscCall(VecSetSizes(user->c, ysubnlocal * user->ns, user->m)); in EllipticInitialize()
581 PetscCall(VecSetFromOptions(user->y)); in EllipticInitialize()
582 PetscCall(VecSetFromOptions(user->c)); in EllipticInitialize()
596 PetscCall(VecCreate(PETSC_COMM_WORLD, &user->x)); in EllipticInitialize()
598 PetscCall(VecGetOwnershipRange(user->y, &lo, &hi)); in EllipticInitialize()
599 PetscCall(VecGetOwnershipRange(user->u, &lo2, &hi2)); in EllipticInitialize()
602 PetscCall(ISCreateStride(PETSC_COMM_SELF, hi - lo, lo + lo2, 1, &user->s_is)); in EllipticInitialize()
604 PetscCall(ISCreateStride(PETSC_COMM_SELF, hi2 - lo2, hi + lo2, 1, &user->d_is)); in EllipticInitialize()
606 PetscCall(VecSetSizes(user->x, hi - lo + hi2 - lo2, user->n)); in EllipticInitialize()
607 PetscCall(VecSetFromOptions(user->x)); in EllipticInitialize()
609 PetscCall(VecScatterCreate(user->x, user->s_is, user->y, is_allstate, &user->state_scatter)); in EllipticInitialize()
610 PetscCall(VecScatterCreate(user->x, user->d_is, user->u, is_alldesign, &user->design_scatter)); in EllipticInitialize()
618 PetscCall(PetscMalloc1(user->ns, &user->yi_scatter)); in EllipticInitialize()
619 PetscCall(VecDuplicate(user->u, &user->suby)); in EllipticInitialize()
620 PetscCall(VecDuplicate(user->u, &user->subq)); in EllipticInitialize()
622 PetscCall(VecGetOwnershipRange(user->y, &lo2, &hi2)); in EllipticInitialize()
624 for (i = 0; i < user->ns; i++) { in EllipticInitialize()
625 PetscCall(VecGetOwnershipRange(user->suby, &lo, &hi)); in EllipticInitialize()
627 PetscCall(VecScatterCreate(user->y, is_from_y, user->suby, NULL, &user->yi_scatter[i])); in EllipticInitialize()
636 PetscCall(VecCreate(PETSC_COMM_WORLD, &user->subd)); in EllipticInitialize()
637 PetscCall(VecSetSizes(user->subd, PETSC_DECIDE, user->ndata)); in EllipticInitialize()
638 PetscCall(VecSetFromOptions(user->subd)); in EllipticInitialize()
639 PetscCall(VecCreate(PETSC_COMM_WORLD, &user->d)); in EllipticInitialize()
640 PetscCall(VecGetLocalSize(user->subd, &dsubnlocal)); in EllipticInitialize()
641 PetscCall(VecSetSizes(user->d, dsubnlocal * user->ns, user->ndata * user->ns)); in EllipticInitialize()
642 PetscCall(VecSetFromOptions(user->d)); in EllipticInitialize()
643 PetscCall(PetscMalloc1(user->ns, &user->di_scatter)); in EllipticInitialize()
645 PetscCall(VecGetOwnershipRange(user->d, &lo2, &hi2)); in EllipticInitialize()
647 for (i = 0; i < user->ns; i++) { in EllipticInitialize()
648 PetscCall(VecGetOwnershipRange(user->subd, &lo, &hi)); in EllipticInitialize()
650 PetscCall(VecScatterCreate(user->d, is_from_d, user->subd, NULL, &user->di_scatter[i])); in EllipticInitialize()
655 PetscCall(PetscMalloc1(user->mx, &x)); in EllipticInitialize()
656 PetscCall(PetscMalloc1(user->mx, &y)); in EllipticInitialize()
657 PetscCall(PetscMalloc1(user->mx, &z)); in EllipticInitialize()
659 user->ksp_its = 0; in EllipticInitialize()
660 user->ksp_its_initial = 0; in EllipticInitialize()
662 n = user->mx * user->mx * user->mx; in EllipticInitialize()
663 m = 3 * user->mx * user->mx * (user->mx - 1); in EllipticInitialize()
664 sqrt_beta = PetscSqrtScalar(user->beta); in EllipticInitialize()
667 PetscCall(VecCreate(PETSC_COMM_WORLD, &user->q)); in EllipticInitialize()
669 PetscCall(VecSetSizes(user->q, ysubnlocal * user->ns, user->m)); in EllipticInitialize()
671 PetscCall(VecSetFromOptions(user->q)); in EllipticInitialize()
679 PetscCall(VecDuplicate(XX, &user->utrue)); in EllipticInitialize()
682 PetscCall(VecGetOwnershipRanges(user->q, &ranges)); in EllipticInitialize()
683 PetscCall(VecGetOwnershipRanges(user->u, &subranges)); in EllipticInitialize()
685 PetscCall(VecGetOwnershipRange(user->q, &lo2, &hi2)); in EllipticInitialize()
686 PetscCall(VecGetOwnershipRange(user->u, &lo, &hi)); in EllipticInitialize()
688 h = 1.0 / user->mx; in EllipticInitialize()
689 hinv = user->mx; in EllipticInitialize()
694 i = linear_index % user->mx; in EllipticInitialize()
695 j = ((linear_index - i) / user->mx) % user->mx; in EllipticInitialize()
696 k = ((linear_index - i) / user->mx - j) / user->mx; in EllipticInitialize()
707 if (ls < user->ns) { in EllipticInitialize()
716 for (kk = 0; kk < nrank; kk++) istart += user->ns * (subranges[kk + 1] - subranges[kk]); in EllipticInitialize()
720 PetscCall(VecSetValues(user->q, 1, &l, &v, INSERT_VALUES)); in EllipticInitialize()
733 PetscCall(VecAssemblyBegin(user->q)); in EllipticInitialize()
734 PetscCall(VecAssemblyEnd(user->q)); in EllipticInitialize()
755 PetscCall(VecCopy(UTwork, user->utrue)); in EllipticInitialize()
775 PetscCall(VecAXPY(user->utrue, -1.0, UTwork)); in EllipticInitialize()
786 PetscCall(VecDuplicate(user->utrue, &user->ur)); in EllipticInitialize()
787 PetscCall(VecSum(user->utrue, &meanut)); in EllipticInitialize()
789 PetscCall(VecSet(user->ur, meanut)); in EllipticInitialize()
790 PetscCall(VecCopy(user->ur, user->u)); in EllipticInitialize()
793 PetscCall(MatCreate(PETSC_COMM_WORLD, &user->Grad)); in EllipticInitialize()
794 PetscCall(MatSetSizes(user->Grad, PETSC_DECIDE, ysubnlocal, m, n)); in EllipticInitialize()
795 PetscCall(MatSetFromOptions(user->Grad)); in EllipticInitialize()
796 PetscCall(MatMPIAIJSetPreallocation(user->Grad, 2, NULL, 2, NULL)); in EllipticInitialize()
797 PetscCall(MatSeqAIJSetPreallocation(user->Grad, 2, NULL)); in EllipticInitialize()
798 PetscCall(MatGetOwnershipRange(user->Grad, &istart, &iend)); in EllipticInitialize()
802 iblock = i / (user->mx - 1); in EllipticInitialize()
803 j = iblock * user->mx + (i % (user->mx - 1)); in EllipticInitialize()
804 PetscCall(MatSetValues(user->Grad, 1, &i, 1, &j, &neg_hinv, INSERT_VALUES)); in EllipticInitialize()
806 PetscCall(MatSetValues(user->Grad, 1, &i, 1, &j, &hinv, INSERT_VALUES)); in EllipticInitialize()
809 iblock = (i - m / 3) / (user->mx * (user->mx - 1)); in EllipticInitialize()
810 j = iblock * user->mx * user->mx + ((i - m / 3) % (user->mx * (user->mx - 1))); in EllipticInitialize()
811 PetscCall(MatSetValues(user->Grad, 1, &i, 1, &j, &neg_hinv, INSERT_VALUES)); in EllipticInitialize()
812 j = j + user->mx; in EllipticInitialize()
813 PetscCall(MatSetValues(user->Grad, 1, &i, 1, &j, &hinv, INSERT_VALUES)); in EllipticInitialize()
817 PetscCall(MatSetValues(user->Grad, 1, &i, 1, &j, &neg_hinv, INSERT_VALUES)); in EllipticInitialize()
818 j = j + user->mx * user->mx; in EllipticInitialize()
819 PetscCall(MatSetValues(user->Grad, 1, &i, 1, &j, &hinv, INSERT_VALUES)); in EllipticInitialize()
823 PetscCall(MatAssemblyBegin(user->Grad, MAT_FINAL_ASSEMBLY)); in EllipticInitialize()
824 PetscCall(MatAssemblyEnd(user->Grad, MAT_FINAL_ASSEMBLY)); in EllipticInitialize()
827 PetscCall(MatCreate(PETSC_COMM_WORLD, &user->Av)); in EllipticInitialize()
828 PetscCall(MatSetSizes(user->Av, PETSC_DECIDE, ysubnlocal, m, n)); in EllipticInitialize()
829 PetscCall(MatSetFromOptions(user->Av)); in EllipticInitialize()
830 PetscCall(MatMPIAIJSetPreallocation(user->Av, 2, NULL, 2, NULL)); in EllipticInitialize()
831 PetscCall(MatSeqAIJSetPreallocation(user->Av, 2, NULL)); in EllipticInitialize()
832 PetscCall(MatGetOwnershipRange(user->Av, &istart, &iend)); in EllipticInitialize()
836 iblock = i / (user->mx - 1); in EllipticInitialize()
837 j = iblock * user->mx + (i % (user->mx - 1)); in EllipticInitialize()
838 PetscCall(MatSetValues(user->Av, 1, &i, 1, &j, &half, INSERT_VALUES)); in EllipticInitialize()
840 PetscCall(MatSetValues(user->Av, 1, &i, 1, &j, &half, INSERT_VALUES)); in EllipticInitialize()
843 iblock = (i - m / 3) / (user->mx * (user->mx - 1)); in EllipticInitialize()
844 j = iblock * user->mx * user->mx + ((i - m / 3) % (user->mx * (user->mx - 1))); in EllipticInitialize()
845 PetscCall(MatSetValues(user->Av, 1, &i, 1, &j, &half, INSERT_VALUES)); in EllipticInitialize()
846 j = j + user->mx; in EllipticInitialize()
847 PetscCall(MatSetValues(user->Av, 1, &i, 1, &j, &half, INSERT_VALUES)); in EllipticInitialize()
851 PetscCall(MatSetValues(user->Av, 1, &i, 1, &j, &half, INSERT_VALUES)); in EllipticInitialize()
852 j = j + user->mx * user->mx; in EllipticInitialize()
853 PetscCall(MatSetValues(user->Av, 1, &i, 1, &j, &half, INSERT_VALUES)); in EllipticInitialize()
857 PetscCall(MatAssemblyBegin(user->Av, MAT_FINAL_ASSEMBLY)); in EllipticInitialize()
858 PetscCall(MatAssemblyEnd(user->Av, MAT_FINAL_ASSEMBLY)); in EllipticInitialize()
860 PetscCall(MatCreate(PETSC_COMM_WORLD, &user->L)); in EllipticInitialize()
861 PetscCall(MatSetSizes(user->L, PETSC_DECIDE, ysubnlocal, m + n, n)); in EllipticInitialize()
862 PetscCall(MatSetFromOptions(user->L)); in EllipticInitialize()
863 PetscCall(MatMPIAIJSetPreallocation(user->L, 2, NULL, 2, NULL)); in EllipticInitialize()
864 PetscCall(MatSeqAIJSetPreallocation(user->L, 2, NULL)); in EllipticInitialize()
865 PetscCall(MatGetOwnershipRange(user->L, &istart, &iend)); in EllipticInitialize()
869 iblock = i / (user->mx - 1); in EllipticInitialize()
870 j = iblock * user->mx + (i % (user->mx - 1)); in EllipticInitialize()
871 PetscCall(MatSetValues(user->L, 1, &i, 1, &j, &neg_hinv, INSERT_VALUES)); in EllipticInitialize()
873 PetscCall(MatSetValues(user->L, 1, &i, 1, &j, &hinv, INSERT_VALUES)); in EllipticInitialize()
876 iblock = (i - m / 3) / (user->mx * (user->mx - 1)); in EllipticInitialize()
877 j = iblock * user->mx * user->mx + ((i - m / 3) % (user->mx * (user->mx - 1))); in EllipticInitialize()
878 PetscCall(MatSetValues(user->L, 1, &i, 1, &j, &neg_hinv, INSERT_VALUES)); in EllipticInitialize()
879 j = j + user->mx; in EllipticInitialize()
880 PetscCall(MatSetValues(user->L, 1, &i, 1, &j, &hinv, INSERT_VALUES)); in EllipticInitialize()
884 PetscCall(MatSetValues(user->L, 1, &i, 1, &j, &neg_hinv, INSERT_VALUES)); in EllipticInitialize()
885 j = j + user->mx * user->mx; in EllipticInitialize()
886 PetscCall(MatSetValues(user->L, 1, &i, 1, &j, &hinv, INSERT_VALUES)); in EllipticInitialize()
890 PetscCall(MatSetValues(user->L, 1, &i, 1, &j, &sqrt_beta, INSERT_VALUES)); in EllipticInitialize()
893 PetscCall(MatAssemblyBegin(user->L, MAT_FINAL_ASSEMBLY)); in EllipticInitialize()
894 PetscCall(MatAssemblyEnd(user->L, MAT_FINAL_ASSEMBLY)); in EllipticInitialize()
895 PetscCall(MatScale(user->L, PetscPowScalar(h, 1.5))); in EllipticInitialize()
898 if (!user->use_ptap) { in EllipticInitialize()
900 PetscCall(MatCreate(PETSC_COMM_WORLD, &user->Div)); in EllipticInitialize()
901 PetscCall(MatSetSizes(user->Div, ysubnlocal, PETSC_DECIDE, n, m)); in EllipticInitialize()
902 PetscCall(MatSetFromOptions(user->Div)); in EllipticInitialize()
903 PetscCall(MatMPIAIJSetPreallocation(user->Div, 4, NULL, 4, NULL)); in EllipticInitialize()
904 PetscCall(MatSeqAIJSetPreallocation(user->Div, 6, NULL)); in EllipticInitialize()
905 PetscCall(MatGetOwnershipRange(user->Grad, &istart, &iend)); in EllipticInitialize()
909 iblock = i / (user->mx - 1); in EllipticInitialize()
910 j = iblock * user->mx + (i % (user->mx - 1)); in EllipticInitialize()
911 PetscCall(MatSetValues(user->Div, 1, &j, 1, &i, &neg_hinv, INSERT_VALUES)); in EllipticInitialize()
913 PetscCall(MatSetValues(user->Div, 1, &j, 1, &i, &hinv, INSERT_VALUES)); in EllipticInitialize()
916 iblock = (i - m / 3) / (user->mx * (user->mx - 1)); in EllipticInitialize()
917 j = iblock * user->mx * user->mx + ((i - m / 3) % (user->mx * (user->mx - 1))); in EllipticInitialize()
918 PetscCall(MatSetValues(user->Div, 1, &j, 1, &i, &neg_hinv, INSERT_VALUES)); in EllipticInitialize()
919 j = j + user->mx; in EllipticInitialize()
920 PetscCall(MatSetValues(user->Div, 1, &j, 1, &i, &hinv, INSERT_VALUES)); in EllipticInitialize()
924 PetscCall(MatSetValues(user->Div, 1, &j, 1, &i, &neg_hinv, INSERT_VALUES)); in EllipticInitialize()
925 j = j + user->mx * user->mx; in EllipticInitialize()
926 PetscCall(MatSetValues(user->Div, 1, &j, 1, &i, &hinv, INSERT_VALUES)); in EllipticInitialize()
930 PetscCall(MatAssemblyBegin(user->Div, MAT_FINAL_ASSEMBLY)); in EllipticInitialize()
931 PetscCall(MatAssemblyEnd(user->Div, MAT_FINAL_ASSEMBLY)); in EllipticInitialize()
932 PetscCall(MatDuplicate(user->Div, MAT_SHARE_NONZERO_PATTERN, &user->Divwork)); in EllipticInitialize()
934 PetscCall(MatCreate(PETSC_COMM_WORLD, &user->Diag)); in EllipticInitialize()
935 PetscCall(MatSetSizes(user->Diag, PETSC_DECIDE, PETSC_DECIDE, m, m)); in EllipticInitialize()
936 PetscCall(MatSetFromOptions(user->Diag)); in EllipticInitialize()
937 PetscCall(MatMPIAIJSetPreallocation(user->Diag, 1, NULL, 0, NULL)); in EllipticInitialize()
938 PetscCall(MatSeqAIJSetPreallocation(user->Diag, 1, NULL)); in EllipticInitialize()
942 PetscCall(VecCreate(PETSC_COMM_WORLD, &user->S)); in EllipticInitialize()
943 PetscCall(VecSetSizes(user->S, PETSC_DECIDE, m)); in EllipticInitialize()
944 PetscCall(VecSetFromOptions(user->S)); in EllipticInitialize()
946 PetscCall(VecCreate(PETSC_COMM_WORLD, &user->lwork)); in EllipticInitialize()
947 PetscCall(VecSetSizes(user->lwork, PETSC_DECIDE, m + user->mx * user->mx * user->mx)); in EllipticInitialize()
948 PetscCall(VecSetFromOptions(user->lwork)); in EllipticInitialize()
950 PetscCall(MatDuplicate(user->Av, MAT_SHARE_NONZERO_PATTERN, &user->Avwork)); in EllipticInitialize()
952 PetscCall(VecDuplicate(user->S, &user->Swork)); in EllipticInitialize()
953 PetscCall(VecDuplicate(user->S, &user->Sdiag)); in EllipticInitialize()
954 PetscCall(VecDuplicate(user->S, &user->Av_u)); in EllipticInitialize()
955 PetscCall(VecDuplicate(user->S, &user->Twork)); in EllipticInitialize()
956 PetscCall(VecDuplicate(user->y, &user->ywork)); in EllipticInitialize()
957 PetscCall(VecDuplicate(user->u, &user->Ywork)); in EllipticInitialize()
958 PetscCall(VecDuplicate(user->u, &user->uwork)); in EllipticInitialize()
959 PetscCall(VecDuplicate(user->u, &user->js_diag)); in EllipticInitialize()
960 PetscCall(VecDuplicate(user->c, &user->cwork)); in EllipticInitialize()
961 PetscCall(VecDuplicate(user->d, &user->dwork)); in EllipticInitialize()
964 …atCreateShell(PETSC_COMM_WORLD, ysubnlocal * user->ns, ysubnlocal, user->nstate, user->ndesign, us… in EllipticInitialize()
965 PetscCall(MatShellSetOperation(user->Jd, MATOP_MULT, (PetscErrorCodeFn *)DesignMatMult)); in EllipticInitialize()
966 …PetscCall(MatShellSetOperation(user->Jd, MATOP_MULT_TRANSPOSE, (PetscErrorCodeFn *)DesignMatMultTr… in EllipticInitialize()
969 PetscCall(VecDuplicate(user->y, &user->ytrue)); in EllipticInitialize()
972 PetscCall(VecSet(user->uwork, 0)); in EllipticInitialize()
973 PetscCall(VecAXPY(user->uwork, -1.0, user->utrue)); /* Note: user->utrue */ in EllipticInitialize()
974 PetscCall(VecExp(user->uwork)); in EllipticInitialize()
975 PetscCall(MatMult(user->Av, user->uwork, user->Av_u)); in EllipticInitialize()
978 PetscCall(VecCopy(user->Av_u, user->Swork)); in EllipticInitialize()
979 PetscCall(VecReciprocal(user->Swork)); in EllipticInitialize()
980 if (user->use_ptap) { in EllipticInitialize()
981 PetscCall(MatDiagonalSet(user->Diag, user->Swork, INSERT_VALUES)); in EllipticInitialize()
982 PetscCall(MatPtAP(user->Diag, user->Grad, MAT_INITIAL_MATRIX, 1.0, &user->DSG)); in EllipticInitialize()
984 PetscCall(MatCopy(user->Div, user->Divwork, SAME_NONZERO_PATTERN)); in EllipticInitialize()
985 PetscCall(MatDiagonalScale(user->Divwork, NULL, user->Swork)); in EllipticInitialize()
987 PetscCall(MatMatMult(user->Divwork, user->Grad, MAT_INITIAL_MATRIX, 1.0, &user->DSG)); in EllipticInitialize()
990 PetscCall(MatSetOption(user->DSG, MAT_SYMMETRIC, PETSC_TRUE)); in EllipticInitialize()
991 PetscCall(MatSetOption(user->DSG, MAT_SYMMETRY_ETERNAL, PETSC_TRUE)); in EllipticInitialize()
993 if (user->use_lrc == PETSC_TRUE) { in EllipticInitialize()
994 v = PetscSqrtReal(1.0 / user->ndesign); in EllipticInitialize()
995 PetscCall(PetscMalloc1(user->ndesign, &user->ones)); in EllipticInitialize()
997 for (i = 0; i < user->ndesign; i++) user->ones[i] = v; in EllipticInitialize()
998 …MatCreateDense(PETSC_COMM_WORLD, ysubnlocal, PETSC_DECIDE, user->ndesign, 1, user->ones, &user->On… in EllipticInitialize()
999 PetscCall(MatCreateLRC(user->DSG, user->Ones, NULL, user->Ones, &user->JsBlock)); in EllipticInitialize()
1000 PetscCall(MatSetUp(user->JsBlock)); in EllipticInitialize()
1003 …atCreateShell(PETSC_COMM_WORLD, ysubnlocal, ysubnlocal, user->ndesign, user->ndesign, user, &user-… in EllipticInitialize()
1004 … PetscCall(MatShellSetOperation(user->JsBlock, MATOP_MULT, (PetscErrorCodeFn *)StateBlockMatMult)); in EllipticInitialize()
1005 …PetscCall(MatShellSetOperation(user->JsBlock, MATOP_MULT_TRANSPOSE, (PetscErrorCodeFn *)StateBlock… in EllipticInitialize()
1007 PetscCall(MatSetOption(user->JsBlock, MAT_SYMMETRIC, PETSC_TRUE)); in EllipticInitialize()
1008 PetscCall(MatSetOption(user->JsBlock, MAT_SYMMETRY_ETERNAL, PETSC_TRUE)); in EllipticInitialize()
1009 …ateShell(PETSC_COMM_WORLD, ysubnlocal * user->ns, ysubnlocal * user->ns, user->nstate, user->nstat… in EllipticInitialize()
1010 PetscCall(MatShellSetOperation(user->Js, MATOP_MULT, (PetscErrorCodeFn *)StateMatMult)); in EllipticInitialize()
1011 PetscCall(MatShellSetOperation(user->Js, MATOP_MULT_TRANSPOSE, (PetscErrorCodeFn *)StateMatMult)); in EllipticInitialize()
1012 PetscCall(MatSetOption(user->Js, MAT_SYMMETRIC, PETSC_TRUE)); in EllipticInitialize()
1013 PetscCall(MatSetOption(user->Js, MAT_SYMMETRY_ETERNAL, PETSC_TRUE)); in EllipticInitialize()
1015 …ateShell(PETSC_COMM_WORLD, ysubnlocal * user->ns, ysubnlocal * user->ns, user->nstate, user->nstat… in EllipticInitialize()
1016 PetscCall(MatShellSetOperation(user->JsInv, MATOP_MULT, (PetscErrorCodeFn *)StateInvMatMult)); in EllipticInitialize()
1017 …PetscCall(MatShellSetOperation(user->JsInv, MATOP_MULT_TRANSPOSE, (PetscErrorCodeFn *)StateInvMatM… in EllipticInitialize()
1018 PetscCall(MatSetOption(user->JsInv, MAT_SYMMETRIC, PETSC_TRUE)); in EllipticInitialize()
1019 PetscCall(MatSetOption(user->JsInv, MAT_SYMMETRY_ETERNAL, PETSC_TRUE)); in EllipticInitialize()
1021 PetscCall(MatSetOption(user->DSG, MAT_SYMMETRIC, PETSC_TRUE)); in EllipticInitialize()
1022 PetscCall(MatSetOption(user->DSG, MAT_SYMMETRY_ETERNAL, PETSC_TRUE)); in EllipticInitialize()
1024 PetscCall(KSPCreate(PETSC_COMM_WORLD, &user->solver)); in EllipticInitialize()
1025 PetscCall(KSPSetFromOptions(user->solver)); in EllipticInitialize()
1027 PetscCall(KSPSetOperators(user->solver, user->JsBlock, user->DSG)); in EllipticInitialize()
1029 PetscCall(MatMult(user->JsInv, user->q, user->ytrue)); in EllipticInitialize()
1031 PetscCall(VecSet(user->uwork, 0)); in EllipticInitialize()
1032 PetscCall(VecAXPY(user->uwork, -1.0, user->u)); /* Note: user->u */ in EllipticInitialize()
1033 PetscCall(VecExp(user->uwork)); in EllipticInitialize()
1034 PetscCall(MatMult(user->Av, user->uwork, user->Av_u)); in EllipticInitialize()
1037 PetscCall(VecCopy(user->Av_u, user->Swork)); in EllipticInitialize()
1038 PetscCall(VecReciprocal(user->Swork)); in EllipticInitialize()
1039 if (user->use_ptap) { in EllipticInitialize()
1040 PetscCall(MatDiagonalSet(user->Diag, user->Swork, INSERT_VALUES)); in EllipticInitialize()
1041 PetscCall(MatPtAP(user->Diag, user->Grad, MAT_REUSE_MATRIX, 1.0, &user->DSG)); in EllipticInitialize()
1043 PetscCall(MatCopy(user->Div, user->Divwork, SAME_NONZERO_PATTERN)); in EllipticInitialize()
1044 PetscCall(MatDiagonalScale(user->Divwork, NULL, user->Av_u)); in EllipticInitialize()
1045 PetscCall(MatProductNumeric(user->DSG)); in EllipticInitialize()
1050 PetscCall(MatMult(user->JsInv, user->q, user->y)); in EllipticInitialize()
1052 user->ksp_its_initial = user->ksp_its; in EllipticInitialize()
1053 user->ksp_its = 0; in EllipticInitialize()
1055 PetscCall(MatCreate(PETSC_COMM_WORLD, &user->Q)); in EllipticInitialize()
1056 PetscCall(MatSetSizes(user->Q, dsubnlocal, ysubnlocal, user->ndata, user->ndesign)); in EllipticInitialize()
1057 PetscCall(MatSetFromOptions(user->Q)); in EllipticInitialize()
1058 PetscCall(MatMPIAIJSetPreallocation(user->Q, 8, NULL, 8, NULL)); in EllipticInitialize()
1059 PetscCall(MatSeqAIJSetPreallocation(user->Q, 8, NULL)); in EllipticInitialize()
1061 for (i = 0; i < user->mx; i++) { in EllipticInitialize()
1066 PetscCall(MatGetOwnershipRange(user->Q, &istart, &iend)); in EllipticInitialize()
1068 nx = user->mx; in EllipticInitialize()
1069 ny = user->mx; in EllipticInitialize()
1070 nz = user->mx; in EllipticInitialize()
1114 PetscCall(MatSetValues(user->Q, 1, &i, 1, &j, &v, INSERT_VALUES)); in EllipticInitialize()
1118 PetscCall(MatSetValues(user->Q, 1, &i, 1, &j, &v, INSERT_VALUES)); in EllipticInitialize()
1122 PetscCall(MatSetValues(user->Q, 1, &i, 1, &j, &v, INSERT_VALUES)); in EllipticInitialize()
1126 PetscCall(MatSetValues(user->Q, 1, &i, 1, &j, &v, INSERT_VALUES)); in EllipticInitialize()
1130 PetscCall(MatSetValues(user->Q, 1, &i, 1, &j, &v, INSERT_VALUES)); in EllipticInitialize()
1134 PetscCall(MatSetValues(user->Q, 1, &i, 1, &j, &v, INSERT_VALUES)); in EllipticInitialize()
1138 PetscCall(MatSetValues(user->Q, 1, &i, 1, &j, &v, INSERT_VALUES)); in EllipticInitialize()
1142 PetscCall(MatSetValues(user->Q, 1, &i, 1, &j, &v, INSERT_VALUES)); in EllipticInitialize()
1145 PetscCall(MatAssemblyBegin(user->Q, MAT_FINAL_ASSEMBLY)); in EllipticInitialize()
1146 PetscCall(MatAssemblyEnd(user->Q, MAT_FINAL_ASSEMBLY)); in EllipticInitialize()
1148 …ateShell(PETSC_COMM_WORLD, dsubnlocal * user->ns, PETSC_DECIDE, user->ndata * user->ns, user->nsta… in EllipticInitialize()
1149 PetscCall(MatShellSetOperation(user->MQ, MATOP_MULT, (PetscErrorCodeFn *)QMatMult)); in EllipticInitialize()
1150 …PetscCall(MatShellSetOperation(user->MQ, MATOP_MULT_TRANSPOSE, (PetscErrorCodeFn *)QMatMultTranspo… in EllipticInitialize()
1153 PetscCall(VecSet(user->ywork, 1.0)); in EllipticInitialize()
1154 PetscCall(VecAYPX(user->ywork, user->noise, user->ytrue)); in EllipticInitialize()
1155 PetscCall(MatMult(user->MQ, user->ywork, user->d)); in EllipticInitialize()
1165 PetscErrorCode EllipticDestroy(AppCtx *user) in EllipticDestroy() argument
1170 PetscCall(MatDestroy(&user->DSG)); in EllipticDestroy()
1171 PetscCall(KSPDestroy(&user->solver)); in EllipticDestroy()
1172 PetscCall(MatDestroy(&user->Q)); in EllipticDestroy()
1173 PetscCall(MatDestroy(&user->MQ)); in EllipticDestroy()
1174 if (!user->use_ptap) { in EllipticDestroy()
1175 PetscCall(MatDestroy(&user->Div)); in EllipticDestroy()
1176 PetscCall(MatDestroy(&user->Divwork)); in EllipticDestroy()
1178 PetscCall(MatDestroy(&user->Diag)); in EllipticDestroy()
1180 if (user->use_lrc) PetscCall(MatDestroy(&user->Ones)); in EllipticDestroy()
1182 PetscCall(MatDestroy(&user->Grad)); in EllipticDestroy()
1183 PetscCall(MatDestroy(&user->Av)); in EllipticDestroy()
1184 PetscCall(MatDestroy(&user->Avwork)); in EllipticDestroy()
1185 PetscCall(MatDestroy(&user->L)); in EllipticDestroy()
1186 PetscCall(MatDestroy(&user->Js)); in EllipticDestroy()
1187 PetscCall(MatDestroy(&user->Jd)); in EllipticDestroy()
1188 PetscCall(MatDestroy(&user->JsBlock)); in EllipticDestroy()
1189 PetscCall(MatDestroy(&user->JsInv)); in EllipticDestroy()
1191 PetscCall(VecDestroy(&user->x)); in EllipticDestroy()
1192 PetscCall(VecDestroy(&user->u)); in EllipticDestroy()
1193 PetscCall(VecDestroy(&user->uwork)); in EllipticDestroy()
1194 PetscCall(VecDestroy(&user->utrue)); in EllipticDestroy()
1195 PetscCall(VecDestroy(&user->y)); in EllipticDestroy()
1196 PetscCall(VecDestroy(&user->ywork)); in EllipticDestroy()
1197 PetscCall(VecDestroy(&user->ytrue)); in EllipticDestroy()
1198 PetscCall(VecDestroy(&user->c)); in EllipticDestroy()
1199 PetscCall(VecDestroy(&user->cwork)); in EllipticDestroy()
1200 PetscCall(VecDestroy(&user->ur)); in EllipticDestroy()
1201 PetscCall(VecDestroy(&user->q)); in EllipticDestroy()
1202 PetscCall(VecDestroy(&user->d)); in EllipticDestroy()
1203 PetscCall(VecDestroy(&user->dwork)); in EllipticDestroy()
1204 PetscCall(VecDestroy(&user->lwork)); in EllipticDestroy()
1205 PetscCall(VecDestroy(&user->S)); in EllipticDestroy()
1206 PetscCall(VecDestroy(&user->Swork)); in EllipticDestroy()
1207 PetscCall(VecDestroy(&user->Sdiag)); in EllipticDestroy()
1208 PetscCall(VecDestroy(&user->Ywork)); in EllipticDestroy()
1209 PetscCall(VecDestroy(&user->Twork)); in EllipticDestroy()
1210 PetscCall(VecDestroy(&user->Av_u)); in EllipticDestroy()
1211 PetscCall(VecDestroy(&user->js_diag)); in EllipticDestroy()
1212 PetscCall(ISDestroy(&user->s_is)); in EllipticDestroy()
1213 PetscCall(ISDestroy(&user->d_is)); in EllipticDestroy()
1214 PetscCall(VecDestroy(&user->suby)); in EllipticDestroy()
1215 PetscCall(VecDestroy(&user->subd)); in EllipticDestroy()
1216 PetscCall(VecDestroy(&user->subq)); in EllipticDestroy()
1217 PetscCall(VecScatterDestroy(&user->state_scatter)); in EllipticDestroy()
1218 PetscCall(VecScatterDestroy(&user->design_scatter)); in EllipticDestroy()
1219 for (i = 0; i < user->ns; i++) { in EllipticDestroy()
1220 PetscCall(VecScatterDestroy(&user->yi_scatter[i])); in EllipticDestroy()
1221 PetscCall(VecScatterDestroy(&user->di_scatter[i])); in EllipticDestroy()
1223 PetscCall(PetscFree(user->yi_scatter)); in EllipticDestroy()
1224 PetscCall(PetscFree(user->di_scatter)); in EllipticDestroy()
1225 if (user->use_lrc) { in EllipticDestroy()
1226 PetscCall(PetscFree(user->ones)); in EllipticDestroy()
1227 PetscCall(MatDestroy(&user->Ones)); in EllipticDestroy()
1236 AppCtx *user = (AppCtx *)ptr; in EllipticMonitor() local
1240 PetscCall(Scatter(X, user->ywork, user->state_scatter, user->uwork, user->design_scatter)); in EllipticMonitor()
1241 PetscCall(VecAXPY(user->ywork, -1.0, user->ytrue)); in EllipticMonitor()
1242 PetscCall(VecAXPY(user->uwork, -1.0, user->utrue)); in EllipticMonitor()
1243 PetscCall(VecNorm(user->uwork, NORM_2, &unorm)); in EllipticMonitor()
1244 PetscCall(VecNorm(user->ywork, NORM_2, &ynorm)); in EllipticMonitor()