Lines Matching refs:user

90 PetscErrorCode HyperbolicInitialize(AppCtx *user);
91 PetscErrorCode HyperbolicDestroy(AppCtx *user);
119 AppCtx user; in main() local
129 user.mx = 32; in main()
131 …ierr = PetscOptionsInt("-mx","Number of grid points in each direction","",user.mx,&user.mx,NULL);C… in main()
132 user.nt = 16; in main()
133 ierr = PetscOptionsInt("-nt","Number of time steps","",user.nt,&user.nt,NULL);CHKERRQ(ierr); in main()
134 user.ndata = 64; in main()
135 …ierr = PetscOptionsInt("-ndata","Numbers of data points per sample","",user.ndata,&user.ndata,NULL… in main()
136 user.alpha = 10.0; in main()
137 …ierr = PetscOptionsReal("-alpha","Regularization parameter","",user.alpha,&user.alpha,NULL);CHKERR… in main()
138 user.T = 1.0/32.0; in main()
139 ierr = PetscOptionsReal("-Tfinal","Final time","",user.T,&user.T,NULL);CHKERRQ(ierr); in main()
143 user.m = user.mx*user.mx*user.nt; /* number of constraints */ in main()
144 user.n = user.mx*user.mx*3*user.nt; /* number of variables */ in main()
145 user.ht = user.T/user.nt; /* Time step */ in main()
146 user.gamma = user.T*user.ht / (user.mx*user.mx); in main()
148 ierr = VecCreate(PETSC_COMM_WORLD,&user.u);CHKERRQ(ierr); in main()
149 ierr = VecCreate(PETSC_COMM_WORLD,&user.y);CHKERRQ(ierr); in main()
150 ierr = VecCreate(PETSC_COMM_WORLD,&user.c);CHKERRQ(ierr); in main()
151 ierr = VecSetSizes(user.u,PETSC_DECIDE,user.n-user.m);CHKERRQ(ierr); in main()
152 ierr = VecSetSizes(user.y,PETSC_DECIDE,user.m);CHKERRQ(ierr); in main()
153 ierr = VecSetSizes(user.c,PETSC_DECIDE,user.m);CHKERRQ(ierr); in main()
154 ierr = VecSetFromOptions(user.u);CHKERRQ(ierr); in main()
155 ierr = VecSetFromOptions(user.y);CHKERRQ(ierr); in main()
156 ierr = VecSetFromOptions(user.c);CHKERRQ(ierr); in main()
168 ierr = VecGetOwnershipRange(user.y,&lo,&hi);CHKERRQ(ierr); in main()
169 ierr = VecGetOwnershipRange(user.u,&lo2,&hi2);CHKERRQ(ierr); in main()
172 ierr = ISCreateStride(PETSC_COMM_SELF,hi-lo,lo+lo2,1,&user.s_is);CHKERRQ(ierr); in main()
175 ierr = ISCreateStride(PETSC_COMM_SELF,hi2-lo2,hi+lo2,1,&user.d_is);CHKERRQ(ierr); in main()
177 ierr = VecSetSizes(x,hi-lo+hi2-lo2,user.n);CHKERRQ(ierr); in main()
180 ierr = VecScatterCreate(x,user.s_is,user.y,is_allstate,&user.state_scatter);CHKERRQ(ierr); in main()
181 ierr = VecScatterCreate(x,user.d_is,user.u,is_alldesign,&user.design_scatter);CHKERRQ(ierr); in main()
190 ierr = HyperbolicInitialize(&user);CHKERRQ(ierr); in main()
192 ierr = Gather(x,user.y,user.state_scatter,user.u,user.design_scatter);CHKERRQ(ierr); in main()
198 ierr = TaoSetObjectiveRoutine(tao, FormFunction, (void *)&user);CHKERRQ(ierr); in main()
199 ierr = TaoSetGradientRoutine(tao, FormGradient, (void *)&user);CHKERRQ(ierr); in main()
200 ierr = TaoSetConstraintsRoutine(tao, user.c, FormConstraints, (void *)&user);CHKERRQ(ierr); in main()
201 …ierr = TaoSetJacobianStateRoutine(tao, user.Js, user.Js, user.JsInv, FormJacobianState, (void *)&u… in main()
202 ierr = TaoSetJacobianDesignRoutine(tao, user.Jd, FormJacobianDesign, (void *)&user);CHKERRQ(ierr); in main()
204 ierr = TaoSetStateDesignIS(tao,user.s_is,user.d_is);CHKERRQ(ierr); in main()
209 user.ksp_its_initial = user.ksp_its; in main()
210 ksp_old = user.ksp_its; in main()
213 ierr = PetscPrintf(PETSC_COMM_WORLD,"KSP Iterations = %D\n",user.ksp_its-ksp_old);CHKERRQ(ierr); in main()
220 ierr = PetscPrintf(PETSC_COMM_WORLD,"%D\n",user.ksp_its_initial);CHKERRQ(ierr); in main()
222 ierr = PetscPrintf(PETSC_COMM_WORLD,"%D\n",user.ksp_its);CHKERRQ(ierr); in main()
224 …ierr = PetscPrintf(PETSC_COMM_WORLD,"%D\n",(user.ksp_its-user.ksp_its_initial)/ntests);CHKERRQ(ier… in main()
229 ierr = HyperbolicDestroy(&user);CHKERRQ(ierr); in main()
243 AppCtx *user = (AppCtx*)ptr; in FormFunction() local
246 ierr = Scatter(X,user->y,user->state_scatter,user->u,user->design_scatter);CHKERRQ(ierr); in FormFunction()
247 ierr = MatMult(user->Q,user->y,user->dwork);CHKERRQ(ierr); in FormFunction()
248 ierr = VecAXPY(user->dwork,-1.0,user->d);CHKERRQ(ierr); in FormFunction()
249 ierr = VecDot(user->dwork,user->dwork,&d1);CHKERRQ(ierr); in FormFunction()
251 ierr = VecWAXPY(user->uwork,-1.0,user->ur,user->u);CHKERRQ(ierr); in FormFunction()
252 ierr = VecPointwiseMult(user->uwork,user->uwork,user->uwork);CHKERRQ(ierr); in FormFunction()
253 ierr = MatMult(user->L,user->uwork,user->lwork);CHKERRQ(ierr); in FormFunction()
254 ierr = VecDot(user->y,user->lwork,&d2);CHKERRQ(ierr); in FormFunction()
255 *f = 0.5 * (d1 + user->alpha*d2); in FormFunction()
267 AppCtx *user = (AppCtx*)ptr; in FormGradient() local
270 ierr = Scatter(X,user->y,user->state_scatter,user->u,user->design_scatter);CHKERRQ(ierr); in FormGradient()
271 ierr = MatMult(user->Q,user->y,user->dwork);CHKERRQ(ierr); in FormGradient()
272 ierr = VecAXPY(user->dwork,-1.0,user->d);CHKERRQ(ierr); in FormGradient()
274 ierr = MatMult(user->QT,user->dwork,user->ywork);CHKERRQ(ierr); in FormGradient()
276 ierr = MatMult(user->LT,user->y,user->uwork);CHKERRQ(ierr); in FormGradient()
277 ierr = VecWAXPY(user->vwork,-1.0,user->ur,user->u);CHKERRQ(ierr); in FormGradient()
278 ierr = VecPointwiseMult(user->uwork,user->vwork,user->uwork);CHKERRQ(ierr); in FormGradient()
279 ierr = VecScale(user->uwork,user->alpha);CHKERRQ(ierr); in FormGradient()
281 ierr = VecPointwiseMult(user->vwork,user->vwork,user->vwork);CHKERRQ(ierr); in FormGradient()
282 ierr = MatMult(user->L,user->vwork,user->lwork);CHKERRQ(ierr); in FormGradient()
283 ierr = VecAXPY(user->ywork,0.5*user->alpha,user->lwork);CHKERRQ(ierr); in FormGradient()
285 ierr = Gather(G,user->ywork,user->state_scatter,user->uwork,user->design_scatter);CHKERRQ(ierr); in FormGradient()
293 AppCtx *user = (AppCtx*)ptr; in FormFunctionGradient() local
296 ierr = Scatter(X,user->y,user->state_scatter,user->u,user->design_scatter);CHKERRQ(ierr); in FormFunctionGradient()
297 ierr = MatMult(user->Q,user->y,user->dwork);CHKERRQ(ierr); in FormFunctionGradient()
298 ierr = VecAXPY(user->dwork,-1.0,user->d);CHKERRQ(ierr); in FormFunctionGradient()
300 ierr = MatMult(user->QT,user->dwork,user->ywork);CHKERRQ(ierr); in FormFunctionGradient()
302 ierr = VecDot(user->dwork,user->dwork,&d1);CHKERRQ(ierr); in FormFunctionGradient()
304 ierr = MatMult(user->LT,user->y,user->uwork);CHKERRQ(ierr); in FormFunctionGradient()
305 ierr = VecWAXPY(user->vwork,-1.0,user->ur,user->u);CHKERRQ(ierr); in FormFunctionGradient()
306 ierr = VecPointwiseMult(user->uwork,user->vwork,user->uwork);CHKERRQ(ierr); in FormFunctionGradient()
307 ierr = VecScale(user->uwork,user->alpha);CHKERRQ(ierr); in FormFunctionGradient()
309 ierr = VecPointwiseMult(user->vwork,user->vwork,user->vwork);CHKERRQ(ierr); in FormFunctionGradient()
310 ierr = MatMult(user->L,user->vwork,user->lwork);CHKERRQ(ierr); in FormFunctionGradient()
311 ierr = VecAXPY(user->ywork,0.5*user->alpha,user->lwork);CHKERRQ(ierr); in FormFunctionGradient()
313 ierr = VecDot(user->y,user->lwork,&d2);CHKERRQ(ierr); in FormFunctionGradient()
315 *f = 0.5 * (d1 + user->alpha*d2); in FormFunctionGradient()
316 ierr = Gather(G,user->ywork,user->state_scatter,user->uwork,user->design_scatter);CHKERRQ(ierr); in FormFunctionGradient()
328 AppCtx *user = (AppCtx*)ptr; in FormJacobianState() local
331 ierr = Scatter(X,user->y,user->state_scatter,user->u,user->design_scatter);CHKERRQ(ierr); in FormJacobianState()
332 ierr = Scatter_yi(user->u,user->ui,user->ui_scatter,user->nt);CHKERRQ(ierr); in FormJacobianState()
333 …ierr = Scatter_uxi_uyi(user->u,user->uxi,user->uxi_scatter,user->uyi,user->uyi_scatter,user->nt);C… in FormJacobianState()
334 for (i=0; i<user->nt; i++){ in FormJacobianState()
335 ierr = MatCopy(user->Divxy[0],user->C[i],SUBSET_NONZERO_PATTERN);CHKERRQ(ierr); in FormJacobianState()
336 ierr = MatCopy(user->Divxy[1],user->Cwork[i],SAME_NONZERO_PATTERN);CHKERRQ(ierr); in FormJacobianState()
338 ierr = MatDiagonalScale(user->C[i],NULL,user->uxi[i]);CHKERRQ(ierr); in FormJacobianState()
339 ierr = MatDiagonalScale(user->Cwork[i],NULL,user->uyi[i]);CHKERRQ(ierr); in FormJacobianState()
340 ierr = MatAXPY(user->C[i],1.0,user->Cwork[i],SUBSET_NONZERO_PATTERN);CHKERRQ(ierr); in FormJacobianState()
341 ierr = MatScale(user->C[i],user->ht);CHKERRQ(ierr); in FormJacobianState()
342 ierr = MatShift(user->C[i],1.0);CHKERRQ(ierr); in FormJacobianState()
352 AppCtx *user = (AppCtx*)ptr; in FormJacobianDesign() local
355 ierr = Scatter(X,user->y,user->state_scatter,user->u,user->design_scatter);CHKERRQ(ierr); in FormJacobianDesign()
363 AppCtx *user; in StateMatMult() local
366 ierr = MatShellGetContext(J_shell,(void**)&user);CHKERRQ(ierr); in StateMatMult()
367 ierr = Scatter_yi(X,user->yi,user->yi_scatter,user->nt);CHKERRQ(ierr); in StateMatMult()
368 user->block_index = 0; in StateMatMult()
369 ierr = MatMult(user->JsBlock,user->yi[0],user->yiwork[0]);CHKERRQ(ierr); in StateMatMult()
371 for (i=1; i<user->nt; i++){ in StateMatMult()
372 user->block_index = i; in StateMatMult()
373 ierr = MatMult(user->JsBlock,user->yi[i],user->yiwork[i]);CHKERRQ(ierr); in StateMatMult()
374 ierr = MatMult(user->M,user->yi[i-1],user->ziwork[i-1]);CHKERRQ(ierr); in StateMatMult()
375 ierr = VecAXPY(user->yiwork[i],-1.0,user->ziwork[i-1]);CHKERRQ(ierr); in StateMatMult()
377 ierr = Gather_yi(Y,user->yiwork,user->yi_scatter,user->nt);CHKERRQ(ierr); in StateMatMult()
385 AppCtx *user; in StateMatMultTranspose() local
388 ierr = MatShellGetContext(J_shell,(void**)&user);CHKERRQ(ierr); in StateMatMultTranspose()
389 ierr = Scatter_yi(X,user->yi,user->yi_scatter,user->nt);CHKERRQ(ierr); in StateMatMultTranspose()
391 for (i=0; i<user->nt-1; i++){ in StateMatMultTranspose()
392 user->block_index = i; in StateMatMultTranspose()
393 ierr = MatMultTranspose(user->JsBlock,user->yi[i],user->yiwork[i]);CHKERRQ(ierr); in StateMatMultTranspose()
394 ierr = MatMult(user->M,user->yi[i+1],user->ziwork[i+1]);CHKERRQ(ierr); in StateMatMultTranspose()
395 ierr = VecAXPY(user->yiwork[i],-1.0,user->ziwork[i+1]);CHKERRQ(ierr); in StateMatMultTranspose()
398 i = user->nt-1; in StateMatMultTranspose()
399 user->block_index = i; in StateMatMultTranspose()
400 ierr = MatMultTranspose(user->JsBlock,user->yi[i],user->yiwork[i]);CHKERRQ(ierr); in StateMatMultTranspose()
401 ierr = Gather_yi(Y,user->yiwork,user->yi_scatter,user->nt);CHKERRQ(ierr); in StateMatMultTranspose()
409 AppCtx *user; in StateMatBlockMult() local
412 ierr = MatShellGetContext(J_shell,(void**)&user);CHKERRQ(ierr); in StateMatBlockMult()
413 i = user->block_index; in StateMatBlockMult()
414 ierr = VecPointwiseMult(user->uxiwork[i],X,user->uxi[i]);CHKERRQ(ierr); in StateMatBlockMult()
415 ierr = VecPointwiseMult(user->uyiwork[i],X,user->uyi[i]);CHKERRQ(ierr); in StateMatBlockMult()
416 …ierr = Gather(user->uiwork[i],user->uxiwork[i],user->ux_scatter[i],user->uyiwork[i],user->uy_scatt… in StateMatBlockMult()
417 ierr = MatMult(user->Div,user->uiwork[i],Y);CHKERRQ(ierr); in StateMatBlockMult()
418 ierr = VecAYPX(Y,user->ht,X);CHKERRQ(ierr); in StateMatBlockMult()
426 AppCtx *user; in StateMatBlockMultTranspose() local
429 ierr = MatShellGetContext(J_shell,(void**)&user);CHKERRQ(ierr); in StateMatBlockMultTranspose()
430 i = user->block_index; in StateMatBlockMultTranspose()
431 ierr = MatMult(user->Grad,X,user->uiwork[i]);CHKERRQ(ierr); in StateMatBlockMultTranspose()
432 …ierr = Scatter(user->uiwork[i],user->uxiwork[i],user->ux_scatter[i],user->uyiwork[i],user->uy_scat… in StateMatBlockMultTranspose()
433 ierr = VecPointwiseMult(user->uxiwork[i],user->uxi[i],user->uxiwork[i]);CHKERRQ(ierr); in StateMatBlockMultTranspose()
434 ierr = VecPointwiseMult(user->uyiwork[i],user->uyi[i],user->uyiwork[i]);CHKERRQ(ierr); in StateMatBlockMultTranspose()
435 ierr = VecWAXPY(Y,1.0,user->uxiwork[i],user->uyiwork[i]);CHKERRQ(ierr); in StateMatBlockMultTranspose()
436 ierr = VecAYPX(Y,user->ht,X);CHKERRQ(ierr); in StateMatBlockMultTranspose()
444 AppCtx *user; in DesignMatMult() local
447 ierr = MatShellGetContext(J_shell,(void**)&user);CHKERRQ(ierr); in DesignMatMult()
448 ierr = Scatter_yi(user->y,user->yi,user->yi_scatter,user->nt);CHKERRQ(ierr); in DesignMatMult()
449 …ierr = Scatter_uxi_uyi(X,user->uxiwork,user->uxi_scatter,user->uyiwork,user->uyi_scatter,user->nt)… in DesignMatMult()
450 for (i=0; i<user->nt; i++){ in DesignMatMult()
451 ierr = VecPointwiseMult(user->uxiwork[i],user->yi[i],user->uxiwork[i]);CHKERRQ(ierr); in DesignMatMult()
452 ierr = VecPointwiseMult(user->uyiwork[i],user->yi[i],user->uyiwork[i]);CHKERRQ(ierr); in DesignMatMult()
453 …ierr = Gather(user->uiwork[i],user->uxiwork[i],user->ux_scatter[i],user->uyiwork[i],user->uy_scatt… in DesignMatMult()
454 ierr = MatMult(user->Div,user->uiwork[i],user->ziwork[i]);CHKERRQ(ierr); in DesignMatMult()
455 ierr = VecScale(user->ziwork[i],user->ht);CHKERRQ(ierr); in DesignMatMult()
457 ierr = Gather_yi(Y,user->ziwork,user->yi_scatter,user->nt);CHKERRQ(ierr); in DesignMatMult()
465 AppCtx *user; in DesignMatMultTranspose() local
468 ierr = MatShellGetContext(J_shell,(void**)&user);CHKERRQ(ierr); in DesignMatMultTranspose()
469 ierr = Scatter_yi(user->y,user->yi,user->yi_scatter,user->nt);CHKERRQ(ierr); in DesignMatMultTranspose()
470 ierr = Scatter_yi(X,user->yiwork,user->yi_scatter,user->nt);CHKERRQ(ierr); in DesignMatMultTranspose()
471 for (i=0; i<user->nt; i++){ in DesignMatMultTranspose()
472 ierr = MatMult(user->Grad,user->yiwork[i],user->uiwork[i]);CHKERRQ(ierr); in DesignMatMultTranspose()
473 …ierr = Scatter(user->uiwork[i],user->uxiwork[i],user->ux_scatter[i],user->uyiwork[i],user->uy_scat… in DesignMatMultTranspose()
474 ierr = VecPointwiseMult(user->uxiwork[i],user->yi[i],user->uxiwork[i]);CHKERRQ(ierr); in DesignMatMultTranspose()
475 ierr = VecPointwiseMult(user->uyiwork[i],user->yi[i],user->uyiwork[i]);CHKERRQ(ierr); in DesignMatMultTranspose()
476 …ierr = Gather(user->uiwork[i],user->uxiwork[i],user->ux_scatter[i],user->uyiwork[i],user->uy_scatt… in DesignMatMultTranspose()
477 ierr = VecScale(user->uiwork[i],user->ht);CHKERRQ(ierr); in DesignMatMultTranspose()
479 ierr = Gather_yi(Y,user->uiwork,user->ui_scatter,user->nt);CHKERRQ(ierr); in DesignMatMultTranspose()
487 AppCtx *user; in StateMatBlockPrecMult() local
490 ierr = PCShellGetContext(PC_shell,(void**)&user);CHKERRQ(ierr); in StateMatBlockPrecMult()
491 i = user->block_index; in StateMatBlockPrecMult()
492 if (user->c_formed) { in StateMatBlockPrecMult()
493 …ierr = MatSOR(user->C[i],X,1.0,(MatSORType)(SOR_ZERO_INITIAL_GUESS | SOR_LOCAL_SYMMETRIC_SWEEP),0.… in StateMatBlockPrecMult()
502 AppCtx *user; in StateMatBlockPrecMultTranspose() local
505 ierr = PCShellGetContext(PC_shell,(void**)&user);CHKERRQ(ierr); in StateMatBlockPrecMultTranspose()
507 i = user->block_index; in StateMatBlockPrecMultTranspose()
508 if (user->c_formed) { in StateMatBlockPrecMultTranspose()
509 …ierr = MatSOR(user->C[i],X,1.0,(MatSORType)(SOR_ZERO_INITIAL_GUESS | SOR_LOCAL_SYMMETRIC_SWEEP),0.… in StateMatBlockPrecMultTranspose()
517 AppCtx *user; in StateMatInvMult() local
521 ierr = MatShellGetContext(J_shell,(void**)&user);CHKERRQ(ierr); in StateMatInvMult()
523 if (Y == user->ytrue) { in StateMatInvMult()
525 ierr = KSPSetTolerances(user->solver,1e-4,1e-20,PETSC_DEFAULT,PETSC_DEFAULT);CHKERRQ(ierr); in StateMatInvMult()
527 …ierr = KSPSetTolerances(user->solver,PETSC_DEFAULT,PETSC_DEFAULT,PETSC_DEFAULT,PETSC_DEFAULT);CHKE… in StateMatInvMult()
529 ierr = Scatter_yi(X,user->yi,user->yi_scatter,user->nt);CHKERRQ(ierr); in StateMatInvMult()
530 ierr = Scatter_yi(Y,user->yiwork,user->yi_scatter,user->nt);CHKERRQ(ierr); in StateMatInvMult()
531 …ierr = Scatter_uxi_uyi(user->u,user->uxi,user->uxi_scatter,user->uyi,user->uyi_scatter,user->nt);C… in StateMatInvMult()
533 user->block_index = 0; in StateMatInvMult()
534 ierr = KSPSolve(user->solver,user->yi[0],user->yiwork[0]);CHKERRQ(ierr); in StateMatInvMult()
536 ierr = KSPGetIterationNumber(user->solver,&its);CHKERRQ(ierr); in StateMatInvMult()
537 user->ksp_its = user->ksp_its + its; in StateMatInvMult()
538 for (i=1; i<user->nt; i++){ in StateMatInvMult()
539 ierr = MatMult(user->M,user->yiwork[i-1],user->ziwork[i-1]);CHKERRQ(ierr); in StateMatInvMult()
540 ierr = VecAXPY(user->yi[i],1.0,user->ziwork[i-1]);CHKERRQ(ierr); in StateMatInvMult()
541 user->block_index = i; in StateMatInvMult()
542 ierr = KSPSolve(user->solver,user->yi[i],user->yiwork[i]);CHKERRQ(ierr); in StateMatInvMult()
544 ierr = KSPGetIterationNumber(user->solver,&its);CHKERRQ(ierr); in StateMatInvMult()
545 user->ksp_its = user->ksp_its + its; in StateMatInvMult()
547 ierr = Gather_yi(Y,user->yiwork,user->yi_scatter,user->nt);CHKERRQ(ierr); in StateMatInvMult()
554 AppCtx *user; in StateMatInvTransposeMult() local
558 ierr = MatShellGetContext(J_shell,(void**)&user);CHKERRQ(ierr); in StateMatInvTransposeMult()
560 ierr = Scatter_yi(X,user->yi,user->yi_scatter,user->nt);CHKERRQ(ierr); in StateMatInvTransposeMult()
561 ierr = Scatter_yi(Y,user->yiwork,user->yi_scatter,user->nt);CHKERRQ(ierr); in StateMatInvTransposeMult()
562 …ierr = Scatter_uxi_uyi(user->u,user->uxi,user->uxi_scatter,user->uyi,user->uyi_scatter,user->nt);C… in StateMatInvTransposeMult()
564 i = user->nt - 1; in StateMatInvTransposeMult()
565 user->block_index = i; in StateMatInvTransposeMult()
566 ierr = KSPSolveTranspose(user->solver,user->yi[i],user->yiwork[i]);CHKERRQ(ierr); in StateMatInvTransposeMult()
568 ierr = KSPGetIterationNumber(user->solver,&its);CHKERRQ(ierr); in StateMatInvTransposeMult()
569 user->ksp_its = user->ksp_its + its; in StateMatInvTransposeMult()
571 for (i=user->nt-2; i>=0; i--){ in StateMatInvTransposeMult()
572 ierr = MatMult(user->M,user->yiwork[i+1],user->ziwork[i+1]);CHKERRQ(ierr); in StateMatInvTransposeMult()
573 ierr = VecAXPY(user->yi[i],1.0,user->ziwork[i+1]);CHKERRQ(ierr); in StateMatInvTransposeMult()
574 user->block_index = i; in StateMatInvTransposeMult()
575 ierr = KSPSolveTranspose(user->solver,user->yi[i],user->yiwork[i]);CHKERRQ(ierr); in StateMatInvTransposeMult()
577 ierr = KSPGetIterationNumber(user->solver,&its);CHKERRQ(ierr); in StateMatInvTransposeMult()
578 user->ksp_its = user->ksp_its + its; in StateMatInvTransposeMult()
580 ierr = Gather_yi(Y,user->yiwork,user->yi_scatter,user->nt);CHKERRQ(ierr); in StateMatInvTransposeMult()
587 AppCtx *user; in StateMatDuplicate() local
590 ierr = MatShellGetContext(J_shell,(void**)&user);CHKERRQ(ierr); in StateMatDuplicate()
592 …ierr = MatCreateShell(PETSC_COMM_WORLD,PETSC_DETERMINE,PETSC_DETERMINE,user->m,user->m,user,new_sh… in StateMatDuplicate()
603 AppCtx *user; in StateMatGetDiagonal() local
606 ierr = MatShellGetContext(J_shell,(void**)&user);CHKERRQ(ierr); in StateMatGetDiagonal()
607 ierr = VecCopy(user->js_diag,X);CHKERRQ(ierr); in StateMatGetDiagonal()
621 AppCtx *user = (AppCtx*)ptr; in FormConstraints() local
624 ierr = Scatter(X,user->y,user->state_scatter,user->u,user->design_scatter);CHKERRQ(ierr); in FormConstraints()
625 ierr = Scatter_yi(user->y,user->yi,user->yi_scatter,user->nt);CHKERRQ(ierr); in FormConstraints()
626 …ierr = Scatter_uxi_uyi(user->u,user->uxi,user->uxi_scatter,user->uyi,user->uyi_scatter,user->nt);C… in FormConstraints()
628 user->block_index = 0; in FormConstraints()
629 ierr = MatMult(user->JsBlock,user->yi[0],user->yiwork[0]);CHKERRQ(ierr); in FormConstraints()
631 for (i=1; i<user->nt; i++){ in FormConstraints()
632 user->block_index = i; in FormConstraints()
633 ierr = MatMult(user->JsBlock,user->yi[i],user->yiwork[i]);CHKERRQ(ierr); in FormConstraints()
634 ierr = MatMult(user->M,user->yi[i-1],user->ziwork[i-1]);CHKERRQ(ierr); in FormConstraints()
635 ierr = VecAXPY(user->yiwork[i],-1.0,user->ziwork[i-1]);CHKERRQ(ierr); in FormConstraints()
638 ierr = Gather_yi(C,user->yiwork,user->yi_scatter,user->nt);CHKERRQ(ierr); in FormConstraints()
639 ierr = VecAXPY(C,-1.0,user->q);CHKERRQ(ierr); in FormConstraints()
725 PetscErrorCode HyperbolicInitialize(AppCtx *user) in HyperbolicInitialize() argument
736 user->jformed = PETSC_FALSE; in HyperbolicInitialize()
737 user->c_formed = PETSC_FALSE; in HyperbolicInitialize()
739 user->ksp_its = 0; in HyperbolicInitialize()
740 user->ksp_its_initial = 0; in HyperbolicInitialize()
742 n = user->mx * user->mx; in HyperbolicInitialize()
744 h = 1.0/user->mx; in HyperbolicInitialize()
745 hinv = user->mx; in HyperbolicInitialize()
751 ierr = MatCreate(PETSC_COMM_WORLD,&user->Grad);CHKERRQ(ierr); in HyperbolicInitialize()
752 ierr = MatSetSizes(user->Grad,PETSC_DECIDE,PETSC_DECIDE,2*n,n);CHKERRQ(ierr); in HyperbolicInitialize()
753 ierr = MatSetFromOptions(user->Grad);CHKERRQ(ierr); in HyperbolicInitialize()
754 ierr = MatMPIAIJSetPreallocation(user->Grad,3,NULL,3,NULL);CHKERRQ(ierr); in HyperbolicInitialize()
755 ierr = MatSeqAIJSetPreallocation(user->Grad,3,NULL);CHKERRQ(ierr); in HyperbolicInitialize()
756 ierr = MatGetOwnershipRange(user->Grad,&istart,&iend);CHKERRQ(ierr); in HyperbolicInitialize()
760 iblock = i / user->mx; in HyperbolicInitialize()
761 j = iblock*user->mx + ((i+user->mx-1) % user->mx); in HyperbolicInitialize()
762 ierr = MatSetValues(user->Grad,1,&i,1,&j,&half_hinv,INSERT_VALUES);CHKERRQ(ierr); in HyperbolicInitialize()
763 j = iblock*user->mx + ((i+1) % user->mx); in HyperbolicInitialize()
764 ierr = MatSetValues(user->Grad,1,&i,1,&j,&neg_half_hinv,INSERT_VALUES);CHKERRQ(ierr); in HyperbolicInitialize()
767 j = (i - user->mx) % n; in HyperbolicInitialize()
768 ierr = MatSetValues(user->Grad,1,&i,1,&j,&half_hinv,INSERT_VALUES);CHKERRQ(ierr); in HyperbolicInitialize()
769 j = (j + 2*user->mx) % n; in HyperbolicInitialize()
770 ierr = MatSetValues(user->Grad,1,&i,1,&j,&neg_half_hinv,INSERT_VALUES);CHKERRQ(ierr); in HyperbolicInitialize()
774 ierr = MatAssemblyBegin(user->Grad,MAT_FINAL_ASSEMBLY);CHKERRQ(ierr); in HyperbolicInitialize()
775 ierr = MatAssemblyEnd(user->Grad,MAT_FINAL_ASSEMBLY);CHKERRQ(ierr); in HyperbolicInitialize()
777 ierr = MatCreate(PETSC_COMM_WORLD,&user->Gradxy[0]);CHKERRQ(ierr); in HyperbolicInitialize()
778 ierr = MatSetSizes(user->Gradxy[0],PETSC_DECIDE,PETSC_DECIDE,n,n);CHKERRQ(ierr); in HyperbolicInitialize()
779 ierr = MatSetFromOptions(user->Gradxy[0]);CHKERRQ(ierr); in HyperbolicInitialize()
780 ierr = MatMPIAIJSetPreallocation(user->Gradxy[0],3,NULL,3,NULL);CHKERRQ(ierr); in HyperbolicInitialize()
781 ierr = MatSeqAIJSetPreallocation(user->Gradxy[0],3,NULL);CHKERRQ(ierr); in HyperbolicInitialize()
782 ierr = MatGetOwnershipRange(user->Gradxy[0],&istart,&iend);CHKERRQ(ierr); in HyperbolicInitialize()
785 iblock = i / user->mx; in HyperbolicInitialize()
786 j = iblock*user->mx + ((i+user->mx-1) % user->mx); in HyperbolicInitialize()
787 ierr = MatSetValues(user->Gradxy[0],1,&i,1,&j,&half_hinv,INSERT_VALUES);CHKERRQ(ierr); in HyperbolicInitialize()
788 j = iblock*user->mx + ((i+1) % user->mx); in HyperbolicInitialize()
789 ierr = MatSetValues(user->Gradxy[0],1,&i,1,&j,&neg_half_hinv,INSERT_VALUES);CHKERRQ(ierr); in HyperbolicInitialize()
790 ierr = MatSetValues(user->Gradxy[0],1,&i,1,&i,&zero,INSERT_VALUES);CHKERRQ(ierr); in HyperbolicInitialize()
792 ierr = MatAssemblyBegin(user->Gradxy[0],MAT_FINAL_ASSEMBLY);CHKERRQ(ierr); in HyperbolicInitialize()
793 ierr = MatAssemblyEnd(user->Gradxy[0],MAT_FINAL_ASSEMBLY);CHKERRQ(ierr); in HyperbolicInitialize()
795 ierr = MatCreate(PETSC_COMM_WORLD,&user->Gradxy[1]);CHKERRQ(ierr); in HyperbolicInitialize()
796 ierr = MatSetSizes(user->Gradxy[1],PETSC_DECIDE,PETSC_DECIDE,n,n);CHKERRQ(ierr); in HyperbolicInitialize()
797 ierr = MatSetFromOptions(user->Gradxy[1]);CHKERRQ(ierr); in HyperbolicInitialize()
798 ierr = MatMPIAIJSetPreallocation(user->Gradxy[1],3,NULL,3,NULL);CHKERRQ(ierr); in HyperbolicInitialize()
799 ierr = MatSeqAIJSetPreallocation(user->Gradxy[1],3,NULL);CHKERRQ(ierr); in HyperbolicInitialize()
800 ierr = MatGetOwnershipRange(user->Gradxy[1],&istart,&iend);CHKERRQ(ierr); in HyperbolicInitialize()
803 j = (i + n - user->mx) % n; in HyperbolicInitialize()
804 ierr = MatSetValues(user->Gradxy[1],1,&i,1,&j,&half_hinv,INSERT_VALUES);CHKERRQ(ierr); in HyperbolicInitialize()
805 j = (j + 2*user->mx) % n; in HyperbolicInitialize()
806 ierr = MatSetValues(user->Gradxy[1],1,&i,1,&j,&neg_half_hinv,INSERT_VALUES);CHKERRQ(ierr); in HyperbolicInitialize()
807 ierr = MatSetValues(user->Gradxy[1],1,&i,1,&i,&zero,INSERT_VALUES);CHKERRQ(ierr); in HyperbolicInitialize()
809 ierr = MatAssemblyBegin(user->Gradxy[1],MAT_FINAL_ASSEMBLY);CHKERRQ(ierr); in HyperbolicInitialize()
810 ierr = MatAssemblyEnd(user->Gradxy[1],MAT_FINAL_ASSEMBLY);CHKERRQ(ierr); in HyperbolicInitialize()
813 ierr = MatTranspose(user->Grad,MAT_INITIAL_MATRIX,&user->Div);CHKERRQ(ierr); in HyperbolicInitialize()
814 ierr = MatTranspose(user->Gradxy[0],MAT_INITIAL_MATRIX,&user->Divxy[0]);CHKERRQ(ierr); in HyperbolicInitialize()
815 ierr = MatTranspose(user->Gradxy[1],MAT_INITIAL_MATRIX,&user->Divxy[1]);CHKERRQ(ierr); in HyperbolicInitialize()
818 ierr = MatCreate(PETSC_COMM_WORLD,&user->M);CHKERRQ(ierr); in HyperbolicInitialize()
819 ierr = MatSetSizes(user->M,PETSC_DECIDE,PETSC_DECIDE,n,n);CHKERRQ(ierr); in HyperbolicInitialize()
820 ierr = MatSetFromOptions(user->M);CHKERRQ(ierr); in HyperbolicInitialize()
821 ierr = MatMPIAIJSetPreallocation(user->M,4,NULL,4,NULL);CHKERRQ(ierr); in HyperbolicInitialize()
822 ierr = MatSeqAIJSetPreallocation(user->M,4,NULL);CHKERRQ(ierr); in HyperbolicInitialize()
823 ierr = MatGetOwnershipRange(user->M,&istart,&iend);CHKERRQ(ierr); in HyperbolicInitialize()
827 iblock = i / user->mx; in HyperbolicInitialize()
828 j = iblock*user->mx + ((i+user->mx-1) % user->mx); in HyperbolicInitialize()
829 ierr = MatSetValues(user->M,1,&i,1,&j,&quarter,INSERT_VALUES);CHKERRQ(ierr); in HyperbolicInitialize()
830 j = iblock*user->mx + ((i+1) % user->mx); in HyperbolicInitialize()
831 ierr = MatSetValues(user->M,1,&i,1,&j,&quarter,INSERT_VALUES);CHKERRQ(ierr); in HyperbolicInitialize()
834 j = (i + user->mx) % n; in HyperbolicInitialize()
835 ierr = MatSetValues(user->M,1,&i,1,&j,&quarter,INSERT_VALUES);CHKERRQ(ierr); in HyperbolicInitialize()
836 j = (i + n - user->mx) % n; in HyperbolicInitialize()
837 ierr = MatSetValues(user->M,1,&i,1,&j,&quarter,INSERT_VALUES);CHKERRQ(ierr); in HyperbolicInitialize()
839 ierr = MatAssemblyBegin(user->M,MAT_FINAL_ASSEMBLY);CHKERRQ(ierr); in HyperbolicInitialize()
840 ierr = MatAssemblyEnd(user->M,MAT_FINAL_ASSEMBLY);CHKERRQ(ierr); in HyperbolicInitialize()
844 ierr = VecCreate(PETSC_COMM_WORLD,&user->q);CHKERRQ(ierr); in HyperbolicInitialize()
846 ierr = VecSetSizes(user->q,PETSC_DECIDE,n*user->nt);CHKERRQ(ierr); in HyperbolicInitialize()
848 ierr = VecSetFromOptions(user->q);CHKERRQ(ierr); in HyperbolicInitialize()
853 ierr = VecDuplicate(XX,&user->d);CHKERRQ(ierr); in HyperbolicInitialize()
854 ierr = VecDuplicate(XX,&user->dwork);CHKERRQ(ierr); in HyperbolicInitialize()
858 i = linear_index % user->mx; in HyperbolicInitialize()
859 j = (linear_index-i)/user->mx; in HyperbolicInitialize()
883 ierr = VecCopy(XXwork,user->dwork);CHKERRQ(ierr); in HyperbolicInitialize()
884 ierr = VecAXPY(user->dwork,1.0,YYwork);CHKERRQ(ierr); in HyperbolicInitialize()
885 ierr = VecScale(user->dwork,-30.0);CHKERRQ(ierr); in HyperbolicInitialize()
886 ierr = VecExp(user->dwork);CHKERRQ(ierr); in HyperbolicInitialize()
887 ierr = VecCopy(user->dwork,user->d);CHKERRQ(ierr); in HyperbolicInitialize()
898 ierr = VecCopy(XXwork,user->dwork);CHKERRQ(ierr); in HyperbolicInitialize()
899 ierr = VecAXPY(user->dwork,1.0,YYwork);CHKERRQ(ierr); in HyperbolicInitialize()
900 ierr = VecScale(user->dwork,-30.0);CHKERRQ(ierr); in HyperbolicInitialize()
901 ierr = VecExp(user->dwork);CHKERRQ(ierr); in HyperbolicInitialize()
903 ierr = VecAXPY(user->d,1.0,user->dwork);CHKERRQ(ierr); in HyperbolicInitialize()
904 ierr = VecShift(user->d,1.0);CHKERRQ(ierr); in HyperbolicInitialize()
905 ierr = VecSum(user->d,&sum);CHKERRQ(ierr); in HyperbolicInitialize()
906 ierr = VecScale(user->d,1.0/(h*h*sum));CHKERRQ(ierr); in HyperbolicInitialize()
928 ierr = PetscMalloc1(user->nt*user->mx*user->mx,&user->yi_scatter);CHKERRQ(ierr); in HyperbolicInitialize()
930 ierr = VecSetSizes(yi,PETSC_DECIDE,user->mx*user->mx);CHKERRQ(ierr); in HyperbolicInitialize()
932 ierr = VecDuplicateVecs(yi,user->nt,&user->yi);CHKERRQ(ierr); in HyperbolicInitialize()
933 ierr = VecDuplicateVecs(yi,user->nt,&user->yiwork);CHKERRQ(ierr); in HyperbolicInitialize()
934 ierr = VecDuplicateVecs(yi,user->nt,&user->ziwork);CHKERRQ(ierr); in HyperbolicInitialize()
935 for (i=0; i<user->nt; i++){ in HyperbolicInitialize()
936 ierr = VecGetOwnershipRange(user->yi[i],&lo,&hi);CHKERRQ(ierr); in HyperbolicInitialize()
938 ierr = ISCreateStride(PETSC_COMM_SELF,hi-lo,lo+i*user->mx*user->mx,1,&is_from_y);CHKERRQ(ierr); in HyperbolicInitialize()
939 …ierr = VecScatterCreate(user->y,is_from_y,user->yi[i],is_to_yi,&user->yi_scatter[i]);CHKERRQ(ierr); in HyperbolicInitialize()
946 ierr = PetscMalloc1(user->nt*user->mx*user->mx,&user->uxi_scatter);CHKERRQ(ierr); in HyperbolicInitialize()
947 ierr = PetscMalloc1(user->nt*user->mx*user->mx,&user->uyi_scatter);CHKERRQ(ierr); in HyperbolicInitialize()
948 ierr = PetscMalloc1(user->nt*user->mx*user->mx,&user->ux_scatter);CHKERRQ(ierr); in HyperbolicInitialize()
949 ierr = PetscMalloc1(user->nt*user->mx*user->mx,&user->uy_scatter);CHKERRQ(ierr); in HyperbolicInitialize()
950 ierr = PetscMalloc1(2*user->nt*user->mx*user->mx,&user->ui_scatter);CHKERRQ(ierr); in HyperbolicInitialize()
953 ierr = VecSetSizes(uxi,PETSC_DECIDE,user->mx*user->mx);CHKERRQ(ierr); in HyperbolicInitialize()
954 ierr = VecSetSizes(ui,PETSC_DECIDE,2*user->mx*user->mx);CHKERRQ(ierr); in HyperbolicInitialize()
957 ierr = VecDuplicateVecs(uxi,user->nt,&user->uxi);CHKERRQ(ierr); in HyperbolicInitialize()
958 ierr = VecDuplicateVecs(uxi,user->nt,&user->uyi);CHKERRQ(ierr); in HyperbolicInitialize()
959 ierr = VecDuplicateVecs(uxi,user->nt,&user->uxiwork);CHKERRQ(ierr); in HyperbolicInitialize()
960 ierr = VecDuplicateVecs(uxi,user->nt,&user->uyiwork);CHKERRQ(ierr); in HyperbolicInitialize()
961 ierr = VecDuplicateVecs(ui,user->nt,&user->ui);CHKERRQ(ierr); in HyperbolicInitialize()
962 ierr = VecDuplicateVecs(ui,user->nt,&user->uiwork);CHKERRQ(ierr); in HyperbolicInitialize()
963 for (i=0; i<user->nt; i++){ in HyperbolicInitialize()
964 ierr = VecGetOwnershipRange(user->uxi[i],&lo,&hi);CHKERRQ(ierr); in HyperbolicInitialize()
966 … ierr = ISCreateStride(PETSC_COMM_SELF,hi-lo,lo+2*i*user->mx*user->mx,1,&is_from_u);CHKERRQ(ierr); in HyperbolicInitialize()
967 …ierr = VecScatterCreate(user->u,is_from_u,user->uxi[i],is_to_uxi,&user->uxi_scatter[i]);CHKERRQ(ie… in HyperbolicInitialize()
972 ierr = VecGetOwnershipRange(user->uyi[i],&lo,&hi);CHKERRQ(ierr); in HyperbolicInitialize()
974 …ierr = ISCreateStride(PETSC_COMM_SELF,hi-lo,lo+(2*i+1)*user->mx*user->mx,1,&is_from_u);CHKERRQ(ier… in HyperbolicInitialize()
975 …ierr = VecScatterCreate(user->u,is_from_u,user->uyi[i],is_to_uyi,&user->uyi_scatter[i]);CHKERRQ(ie… in HyperbolicInitialize()
980 ierr = VecGetOwnershipRange(user->uxi[i],&lo,&hi);CHKERRQ(ierr); in HyperbolicInitialize()
983 …ierr = VecScatterCreate(user->ui[i],is_from_u,user->uxi[i],is_to_uxi,&user->ux_scatter[i]);CHKERRQ… in HyperbolicInitialize()
988 ierr = VecGetOwnershipRange(user->uyi[i],&lo,&hi);CHKERRQ(ierr); in HyperbolicInitialize()
990 ierr = ISCreateStride(PETSC_COMM_SELF,hi-lo,lo+user->mx*user->mx,1,&is_from_u);CHKERRQ(ierr); in HyperbolicInitialize()
991 …ierr = VecScatterCreate(user->ui[i],is_from_u,user->uyi[i],is_to_uyi,&user->uy_scatter[i]);CHKERRQ… in HyperbolicInitialize()
996 ierr = VecGetOwnershipRange(user->ui[i],&lo,&hi);CHKERRQ(ierr); in HyperbolicInitialize()
998 … ierr = ISCreateStride(PETSC_COMM_SELF,hi-lo,lo+2*i*user->mx*user->mx,1,&is_from_u);CHKERRQ(ierr); in HyperbolicInitialize()
999 …ierr = VecScatterCreate(user->u,is_from_u,user->ui[i],is_to_uxi,&user->ui_scatter[i]);CHKERRQ(ierr… in HyperbolicInitialize()
1006 ierr = MatMult(user->M,bc,user->yiwork[0]);CHKERRQ(ierr); in HyperbolicInitialize()
1007 for (i=1; i<user->nt; i++){ in HyperbolicInitialize()
1008 ierr = VecSet(user->yiwork[i],0.0);CHKERRQ(ierr); in HyperbolicInitialize()
1010 ierr = Gather_yi(user->q,user->yiwork,user->yi_scatter,user->nt);CHKERRQ(ierr); in HyperbolicInitialize()
1013 ierr = VecDuplicate(user->u,&user->utrue);CHKERRQ(ierr); in HyperbolicInitialize()
1014 for (i=0; i<user->nt; i++){ in HyperbolicInitialize()
1015 ierr = VecCopy(YY,user->uxi[i]);CHKERRQ(ierr); in HyperbolicInitialize()
1016 ierr = VecScale(user->uxi[i],150.0*i*user->ht);CHKERRQ(ierr); in HyperbolicInitialize()
1017 ierr = VecCopy(XX,user->uyi[i]);CHKERRQ(ierr); in HyperbolicInitialize()
1018 ierr = VecShift(user->uyi[i],-10.0);CHKERRQ(ierr); in HyperbolicInitialize()
1019 ierr = VecScale(user->uyi[i],15.0*i*user->ht);CHKERRQ(ierr); in HyperbolicInitialize()
1021 …ierr = Gather_uxi_uyi(user->utrue,user->uxi,user->uxi_scatter,user->uyi,user->uyi_scatter,user->nt… in HyperbolicInitialize()
1024 ierr = VecDuplicate(user->utrue,&user->ur);CHKERRQ(ierr); in HyperbolicInitialize()
1025 for (i=0; i<user->nt; i++){ in HyperbolicInitialize()
1026 ierr = VecCopy(XX,user->uxi[i]);CHKERRQ(ierr); in HyperbolicInitialize()
1027 ierr = VecShift(user->uxi[i],i*user->ht);CHKERRQ(ierr); in HyperbolicInitialize()
1028 ierr = VecCopy(YY,user->uyi[i]);CHKERRQ(ierr); in HyperbolicInitialize()
1029 ierr = VecShift(user->uyi[i],-i*user->ht);CHKERRQ(ierr); in HyperbolicInitialize()
1031 …ierr = Gather_uxi_uyi(user->ur,user->uxi,user->uxi_scatter,user->uyi,user->uyi_scatter,user->nt);C… in HyperbolicInitialize()
1034 ierr = MatCreate(PETSC_COMM_WORLD,&user->LT);CHKERRQ(ierr); in HyperbolicInitialize()
1035 ierr = MatSetSizes(user->LT,PETSC_DECIDE,PETSC_DECIDE,2*n*user->nt,n*user->nt);CHKERRQ(ierr); in HyperbolicInitialize()
1036 ierr = MatSetFromOptions(user->LT);CHKERRQ(ierr); in HyperbolicInitialize()
1037 ierr = MatMPIAIJSetPreallocation(user->LT,1,NULL,1,NULL);CHKERRQ(ierr); in HyperbolicInitialize()
1038 ierr = MatSeqAIJSetPreallocation(user->LT,1,NULL);CHKERRQ(ierr); in HyperbolicInitialize()
1039 ierr = MatGetOwnershipRange(user->LT,&istart,&iend);CHKERRQ(ierr); in HyperbolicInitialize()
1044 ierr = MatSetValues(user->LT,1,&i,1,&j,&user->gamma,INSERT_VALUES);CHKERRQ(ierr); in HyperbolicInitialize()
1047 ierr = MatAssemblyBegin(user->LT,MAT_FINAL_ASSEMBLY);CHKERRQ(ierr); in HyperbolicInitialize()
1048 ierr = MatAssemblyEnd(user->LT,MAT_FINAL_ASSEMBLY);CHKERRQ(ierr); in HyperbolicInitialize()
1050 ierr = MatTranspose(user->LT,MAT_INITIAL_MATRIX,&user->L);CHKERRQ(ierr); in HyperbolicInitialize()
1053 ierr = VecCreate(PETSC_COMM_WORLD,&user->lwork);CHKERRQ(ierr); in HyperbolicInitialize()
1054 ierr = VecSetType(user->lwork,VECMPI);CHKERRQ(ierr); in HyperbolicInitialize()
1055 ierr = VecSetSizes(user->lwork,PETSC_DECIDE,user->m);CHKERRQ(ierr); in HyperbolicInitialize()
1056 ierr = VecSetFromOptions(user->lwork);CHKERRQ(ierr); in HyperbolicInitialize()
1058 ierr = MatDuplicate(user->Div,MAT_SHARE_NONZERO_PATTERN,&user->Divwork);CHKERRQ(ierr); in HyperbolicInitialize()
1060 ierr = VecDuplicate(user->y,&user->ywork);CHKERRQ(ierr); in HyperbolicInitialize()
1061 ierr = VecDuplicate(user->u,&user->uwork);CHKERRQ(ierr); in HyperbolicInitialize()
1062 ierr = VecDuplicate(user->u,&user->vwork);CHKERRQ(ierr); in HyperbolicInitialize()
1063 ierr = VecDuplicate(user->u,&user->js_diag);CHKERRQ(ierr); in HyperbolicInitialize()
1064 ierr = VecDuplicate(user->c,&user->cwork);CHKERRQ(ierr); in HyperbolicInitialize()
1067 …ierr = MatCreateShell(PETSC_COMM_WORLD,PETSC_DETERMINE,PETSC_DETERMINE,user->m,user->m,user,&user-… in HyperbolicInitialize()
1068 ierr = MatShellSetOperation(user->Js,MATOP_MULT,(void(*)(void))StateMatMult);CHKERRQ(ierr); in HyperbolicInitialize()
1069 …ierr = MatShellSetOperation(user->Js,MATOP_DUPLICATE,(void(*)(void))StateMatDuplicate);CHKERRQ(ier… in HyperbolicInitialize()
1070 …ierr = MatShellSetOperation(user->Js,MATOP_MULT_TRANSPOSE,(void(*)(void))StateMatMultTranspose);CH… in HyperbolicInitialize()
1071 …ierr = MatShellSetOperation(user->Js,MATOP_GET_DIAGONAL,(void(*)(void))StateMatGetDiagonal);CHKERR… in HyperbolicInitialize()
1074 …ierr = MatCreateShell(PETSC_COMM_WORLD,PETSC_DETERMINE,PETSC_DETERMINE,n,n,user,&user->JsBlock);CH… in HyperbolicInitialize()
1075 …ierr = MatShellSetOperation(user->JsBlock,MATOP_MULT,(void(*)(void))StateMatBlockMult);CHKERRQ(ier… in HyperbolicInitialize()
1076 …ierr = MatShellSetOperation(user->JsBlock,MATOP_MULT_TRANSPOSE,(void(*)(void))StateMatBlockMultTra… in HyperbolicInitialize()
1081 …ierr = MatCreateShell(PETSC_COMM_WORLD,PETSC_DETERMINE,PETSC_DETERMINE,n,n,user,&user->JsBlockPrec… in HyperbolicInitialize()
1082 …ierr = MatShellSetOperation(user->JsBlockPrec,MATOP_MULT,(void(*)(void))StateMatBlockPrecMult);CHK… in HyperbolicInitialize()
1083 …ierr = MatShellSetOperation(user->JsBlockPrec,MATOP_MULT_TRANSPOSE,(void(*)(void))StateMatBlockPre… in HyperbolicInitialize()
1086 …eateShell(PETSC_COMM_WORLD,PETSC_DETERMINE,PETSC_DETERMINE,user->m,user->n-user->m,user,&user->Jd)… in HyperbolicInitialize()
1087 ierr = MatShellSetOperation(user->Jd,MATOP_MULT,(void(*)(void))DesignMatMult);CHKERRQ(ierr); in HyperbolicInitialize()
1088 …ierr = MatShellSetOperation(user->Jd,MATOP_MULT_TRANSPOSE,(void(*)(void))DesignMatMultTranspose);C… in HyperbolicInitialize()
1091 …ierr = MatCreateShell(PETSC_COMM_WORLD,PETSC_DETERMINE,PETSC_DETERMINE,user->m,user->m,user,&user-… in HyperbolicInitialize()
1092 ierr = MatShellSetOperation(user->JsInv,MATOP_MULT,(void(*)(void))StateMatInvMult);CHKERRQ(ierr); in HyperbolicInitialize()
1093 …ierr = MatShellSetOperation(user->JsInv,MATOP_MULT_TRANSPOSE,(void(*)(void))StateMatInvTransposeMu… in HyperbolicInitialize()
1096 …ierr = Scatter_uxi_uyi(user->u,user->uxi,user->uxi_scatter,user->uyi,user->uyi_scatter,user->nt);C… in HyperbolicInitialize()
1097 ierr = PetscMalloc1(5*n,&user->C);CHKERRQ(ierr); in HyperbolicInitialize()
1098 ierr = PetscMalloc1(2*n,&user->Cwork);CHKERRQ(ierr); in HyperbolicInitialize()
1099 for (i=0; i<user->nt; i++){ in HyperbolicInitialize()
1100 ierr = MatDuplicate(user->Divxy[0],MAT_COPY_VALUES,&user->C[i]);CHKERRQ(ierr); in HyperbolicInitialize()
1101 ierr = MatDuplicate(user->Divxy[1],MAT_COPY_VALUES,&user->Cwork[i]);CHKERRQ(ierr); in HyperbolicInitialize()
1103 ierr = MatDiagonalScale(user->C[i],NULL,user->uxi[i]);CHKERRQ(ierr); in HyperbolicInitialize()
1104 ierr = MatDiagonalScale(user->Cwork[i],NULL,user->uyi[i]);CHKERRQ(ierr); in HyperbolicInitialize()
1105 ierr = MatAXPY(user->C[i],1.0,user->Cwork[i],DIFFERENT_NONZERO_PATTERN);CHKERRQ(ierr); in HyperbolicInitialize()
1106 ierr = MatScale(user->C[i],user->ht);CHKERRQ(ierr); in HyperbolicInitialize()
1107 ierr = MatShift(user->C[i],1.0);CHKERRQ(ierr); in HyperbolicInitialize()
1111 ierr = KSPCreate(PETSC_COMM_WORLD,&user->solver);CHKERRQ(ierr); in HyperbolicInitialize()
1112 ierr = KSPSetType(user->solver,KSPGMRES);CHKERRQ(ierr); in HyperbolicInitialize()
1113 ierr = KSPSetOperators(user->solver,user->JsBlock,user->JsBlockPrec);CHKERRQ(ierr); in HyperbolicInitialize()
1114 ierr = KSPSetTolerances(user->solver,1e-4,1e-20,1e3,500);CHKERRQ(ierr); in HyperbolicInitialize()
1116 ierr = KSPGetPC(user->solver,&user->prec);CHKERRQ(ierr); in HyperbolicInitialize()
1117 ierr = PCSetType(user->prec,PCSHELL);CHKERRQ(ierr); in HyperbolicInitialize()
1119 ierr = PCShellSetApply(user->prec,StateMatBlockPrecMult);CHKERRQ(ierr); in HyperbolicInitialize()
1120 ierr = PCShellSetApplyTranspose(user->prec,StateMatBlockPrecMultTranspose);CHKERRQ(ierr); in HyperbolicInitialize()
1121 ierr = PCShellSetContext(user->prec,user);CHKERRQ(ierr); in HyperbolicInitialize()
1124 ierr = VecCreate(PETSC_COMM_WORLD,&user->ytrue);CHKERRQ(ierr); in HyperbolicInitialize()
1125 ierr = VecSetSizes(user->ytrue,PETSC_DECIDE,n*user->nt);CHKERRQ(ierr); in HyperbolicInitialize()
1126 ierr = VecSetFromOptions(user->ytrue);CHKERRQ(ierr); in HyperbolicInitialize()
1127 user->c_formed = PETSC_TRUE; in HyperbolicInitialize()
1128 ierr = VecCopy(user->utrue,user->u);CHKERRQ(ierr); /* Set u=utrue temporarily for StateMatInv */ in HyperbolicInitialize()
1129 ierr = VecSet(user->ytrue,0.0);CHKERRQ(ierr); /* Initial guess */ in HyperbolicInitialize()
1130 ierr = StateMatInvMult(user->Js,user->q,user->ytrue);CHKERRQ(ierr); in HyperbolicInitialize()
1131 ierr = VecCopy(user->ur,user->u);CHKERRQ(ierr); /* Reset u=ur */ in HyperbolicInitialize()
1134 ierr = StateMatInvMult(user->Js,user->q,user->y);CHKERRQ(ierr); in HyperbolicInitialize()
1137 ierr = MatCreate(PETSC_COMM_WORLD,&user->Q);CHKERRQ(ierr); in HyperbolicInitialize()
1138 ierr = MatSetSizes(user->Q,PETSC_DECIDE,PETSC_DECIDE,user->mx*user->mx,user->m);CHKERRQ(ierr); in HyperbolicInitialize()
1139 ierr = MatSetFromOptions(user->Q);CHKERRQ(ierr); in HyperbolicInitialize()
1140 ierr = MatMPIAIJSetPreallocation(user->Q,0,NULL,1,NULL);CHKERRQ(ierr); in HyperbolicInitialize()
1141 ierr = MatSeqAIJSetPreallocation(user->Q,1,NULL);CHKERRQ(ierr); in HyperbolicInitialize()
1143 ierr = MatGetOwnershipRange(user->Q,&istart,&iend);CHKERRQ(ierr); in HyperbolicInitialize()
1146 j = i + user->m - user->mx*user->mx; in HyperbolicInitialize()
1147 ierr = MatSetValues(user->Q,1,&i,1,&j,&one,INSERT_VALUES);CHKERRQ(ierr); in HyperbolicInitialize()
1150 ierr = MatAssemblyBegin(user->Q,MAT_FINAL_ASSEMBLY);CHKERRQ(ierr); in HyperbolicInitialize()
1151 ierr = MatAssemblyEnd(user->Q,MAT_FINAL_ASSEMBLY);CHKERRQ(ierr); in HyperbolicInitialize()
1153 ierr = MatTranspose(user->Q,MAT_INITIAL_MATRIX,&user->QT);CHKERRQ(ierr); in HyperbolicInitialize()
1165 ierr = KSPSetFromOptions(user->solver);CHKERRQ(ierr); in HyperbolicInitialize()
1169 PetscErrorCode HyperbolicDestroy(AppCtx *user) in HyperbolicDestroy() argument
1175 ierr = MatDestroy(&user->Q);CHKERRQ(ierr); in HyperbolicDestroy()
1176 ierr = MatDestroy(&user->QT);CHKERRQ(ierr); in HyperbolicDestroy()
1177 ierr = MatDestroy(&user->Div);CHKERRQ(ierr); in HyperbolicDestroy()
1178 ierr = MatDestroy(&user->Divwork);CHKERRQ(ierr); in HyperbolicDestroy()
1179 ierr = MatDestroy(&user->Grad);CHKERRQ(ierr); in HyperbolicDestroy()
1180 ierr = MatDestroy(&user->L);CHKERRQ(ierr); in HyperbolicDestroy()
1181 ierr = MatDestroy(&user->LT);CHKERRQ(ierr); in HyperbolicDestroy()
1182 ierr = KSPDestroy(&user->solver);CHKERRQ(ierr); in HyperbolicDestroy()
1183 ierr = MatDestroy(&user->Js);CHKERRQ(ierr); in HyperbolicDestroy()
1184 ierr = MatDestroy(&user->Jd);CHKERRQ(ierr); in HyperbolicDestroy()
1185 ierr = MatDestroy(&user->JsBlockPrec);CHKERRQ(ierr); in HyperbolicDestroy()
1186 ierr = MatDestroy(&user->JsInv);CHKERRQ(ierr); in HyperbolicDestroy()
1187 ierr = MatDestroy(&user->JsBlock);CHKERRQ(ierr); in HyperbolicDestroy()
1188 ierr = MatDestroy(&user->Divxy[0]);CHKERRQ(ierr); in HyperbolicDestroy()
1189 ierr = MatDestroy(&user->Divxy[1]);CHKERRQ(ierr); in HyperbolicDestroy()
1190 ierr = MatDestroy(&user->Gradxy[0]);CHKERRQ(ierr); in HyperbolicDestroy()
1191 ierr = MatDestroy(&user->Gradxy[1]);CHKERRQ(ierr); in HyperbolicDestroy()
1192 ierr = MatDestroy(&user->M);CHKERRQ(ierr); in HyperbolicDestroy()
1193 for (i=0; i<user->nt; i++){ in HyperbolicDestroy()
1194 ierr = MatDestroy(&user->C[i]);CHKERRQ(ierr); in HyperbolicDestroy()
1195 ierr = MatDestroy(&user->Cwork[i]);CHKERRQ(ierr); in HyperbolicDestroy()
1197 ierr = PetscFree(user->C);CHKERRQ(ierr); in HyperbolicDestroy()
1198 ierr = PetscFree(user->Cwork);CHKERRQ(ierr); in HyperbolicDestroy()
1199 ierr = VecDestroy(&user->u);CHKERRQ(ierr); in HyperbolicDestroy()
1200 ierr = VecDestroy(&user->uwork);CHKERRQ(ierr); in HyperbolicDestroy()
1201 ierr = VecDestroy(&user->vwork);CHKERRQ(ierr); in HyperbolicDestroy()
1202 ierr = VecDestroy(&user->utrue);CHKERRQ(ierr); in HyperbolicDestroy()
1203 ierr = VecDestroy(&user->y);CHKERRQ(ierr); in HyperbolicDestroy()
1204 ierr = VecDestroy(&user->ywork);CHKERRQ(ierr); in HyperbolicDestroy()
1205 ierr = VecDestroy(&user->ytrue);CHKERRQ(ierr); in HyperbolicDestroy()
1206 ierr = VecDestroyVecs(user->nt,&user->yi);CHKERRQ(ierr); in HyperbolicDestroy()
1207 ierr = VecDestroyVecs(user->nt,&user->yiwork);CHKERRQ(ierr); in HyperbolicDestroy()
1208 ierr = VecDestroyVecs(user->nt,&user->ziwork);CHKERRQ(ierr); in HyperbolicDestroy()
1209 ierr = VecDestroyVecs(user->nt,&user->uxi);CHKERRQ(ierr); in HyperbolicDestroy()
1210 ierr = VecDestroyVecs(user->nt,&user->uyi);CHKERRQ(ierr); in HyperbolicDestroy()
1211 ierr = VecDestroyVecs(user->nt,&user->uxiwork);CHKERRQ(ierr); in HyperbolicDestroy()
1212 ierr = VecDestroyVecs(user->nt,&user->uyiwork);CHKERRQ(ierr); in HyperbolicDestroy()
1213 ierr = VecDestroyVecs(user->nt,&user->ui);CHKERRQ(ierr); in HyperbolicDestroy()
1214 ierr = VecDestroyVecs(user->nt,&user->uiwork);CHKERRQ(ierr); in HyperbolicDestroy()
1215 ierr = VecDestroy(&user->c);CHKERRQ(ierr); in HyperbolicDestroy()
1216 ierr = VecDestroy(&user->cwork);CHKERRQ(ierr); in HyperbolicDestroy()
1217 ierr = VecDestroy(&user->ur);CHKERRQ(ierr); in HyperbolicDestroy()
1218 ierr = VecDestroy(&user->q);CHKERRQ(ierr); in HyperbolicDestroy()
1219 ierr = VecDestroy(&user->d);CHKERRQ(ierr); in HyperbolicDestroy()
1220 ierr = VecDestroy(&user->dwork);CHKERRQ(ierr); in HyperbolicDestroy()
1221 ierr = VecDestroy(&user->lwork);CHKERRQ(ierr); in HyperbolicDestroy()
1222 ierr = VecDestroy(&user->js_diag);CHKERRQ(ierr); in HyperbolicDestroy()
1223 ierr = ISDestroy(&user->s_is);CHKERRQ(ierr); in HyperbolicDestroy()
1224 ierr = ISDestroy(&user->d_is);CHKERRQ(ierr); in HyperbolicDestroy()
1225 ierr = VecScatterDestroy(&user->state_scatter);CHKERRQ(ierr); in HyperbolicDestroy()
1226 ierr = VecScatterDestroy(&user->design_scatter);CHKERRQ(ierr); in HyperbolicDestroy()
1227 for (i=0; i<user->nt; i++){ in HyperbolicDestroy()
1228 ierr = VecScatterDestroy(&user->uxi_scatter[i]);CHKERRQ(ierr); in HyperbolicDestroy()
1229 ierr = VecScatterDestroy(&user->uyi_scatter[i]);CHKERRQ(ierr); in HyperbolicDestroy()
1230 ierr = VecScatterDestroy(&user->ux_scatter[i]);CHKERRQ(ierr); in HyperbolicDestroy()
1231 ierr = VecScatterDestroy(&user->uy_scatter[i]);CHKERRQ(ierr); in HyperbolicDestroy()
1232 ierr = VecScatterDestroy(&user->ui_scatter[i]);CHKERRQ(ierr); in HyperbolicDestroy()
1233 ierr = VecScatterDestroy(&user->yi_scatter[i]);CHKERRQ(ierr); in HyperbolicDestroy()
1235 ierr = PetscFree(user->uxi_scatter);CHKERRQ(ierr); in HyperbolicDestroy()
1236 ierr = PetscFree(user->uyi_scatter);CHKERRQ(ierr); in HyperbolicDestroy()
1237 ierr = PetscFree(user->ux_scatter);CHKERRQ(ierr); in HyperbolicDestroy()
1238 ierr = PetscFree(user->uy_scatter);CHKERRQ(ierr); in HyperbolicDestroy()
1239 ierr = PetscFree(user->ui_scatter);CHKERRQ(ierr); in HyperbolicDestroy()
1240 ierr = PetscFree(user->yi_scatter);CHKERRQ(ierr); in HyperbolicDestroy()
1249 AppCtx *user = (AppCtx*)ptr; in HyperbolicMonitor() local
1253 ierr = Scatter(X,user->ywork,user->state_scatter,user->uwork,user->design_scatter);CHKERRQ(ierr); in HyperbolicMonitor()
1254 ierr = VecAXPY(user->ywork,-1.0,user->ytrue);CHKERRQ(ierr); in HyperbolicMonitor()
1255 ierr = VecAXPY(user->uwork,-1.0,user->utrue);CHKERRQ(ierr); in HyperbolicMonitor()
1256 ierr = VecNorm(user->uwork,NORM_2,&unorm);CHKERRQ(ierr); in HyperbolicMonitor()
1257 ierr = VecNorm(user->ywork,NORM_2,&ynorm);CHKERRQ(ierr); in HyperbolicMonitor()