Lines Matching refs:user

37   AppCtx   *user;  in TaoShellSolve_SoftThreshold()  local
42 user = NULL; in TaoShellSolve_SoftThreshold()
47 PetscCall(TaoShellGetContext(tao, &user)); in TaoShellSolve_SoftThreshold()
50 work = user->workN; in TaoShellSolve_SoftThreshold()
56 PetscCall(MatMult(user->D, x, work)); in TaoShellSolve_SoftThreshold()
68 AppCtx *user = (AppCtx *)ptr; in MisfitObjectiveAndGradient() local
72 PetscCall(MatMult(user->A, X, user->workM)); in MisfitObjectiveAndGradient()
73 PetscCall(VecAXPY(user->workM, -1, user->b)); in MisfitObjectiveAndGradient()
74 PetscCall(VecDot(user->workM, user->workM, f)); in MisfitObjectiveAndGradient()
77 PetscCall(MatMult(user->ATA, X, user->workN)); in MisfitObjectiveAndGradient()
78 PetscCall(MatMultTranspose(user->A, user->b, user->workN2)); in MisfitObjectiveAndGradient()
79 PetscCall(VecWAXPY(g, -1., user->workN2, user->workN)); in MisfitObjectiveAndGradient()
87 AppCtx *user = (AppCtx *)ptr; in RegularizerObjectiveAndGradient1() local
94 PetscCall(VecCopy(X, user->workN2)); in RegularizerObjectiveAndGradient1()
95 PetscCall(VecPow(user->workN2, 2.)); in RegularizerObjectiveAndGradient1()
96 PetscCall(VecShift(user->workN2, user->eps * user->eps)); in RegularizerObjectiveAndGradient1()
97 PetscCall(VecSqrtAbs(user->workN2)); in RegularizerObjectiveAndGradient1()
98 PetscCall(VecCopy(user->workN2, user->workN3)); in RegularizerObjectiveAndGradient1()
99 PetscCall(VecShift(user->workN2, -user->eps)); in RegularizerObjectiveAndGradient1()
100 PetscCall(VecSum(user->workN2, f_reg)); in RegularizerObjectiveAndGradient1()
105 PetscCall(VecPointwiseDivide(G_reg, X, user->workN3)); in RegularizerObjectiveAndGradient1()
141 AppCtx *user = (AppCtx *)ptr; in HessianReg() local
144 PetscCall(MatMult(user->D, x, user->workN)); in HessianReg()
145 PetscCall(VecPow(user->workN2, 2.)); in HessianReg()
146 PetscCall(VecShift(user->workN2, user->eps * user->eps)); in HessianReg()
147 PetscCall(VecSqrtAbs(user->workN2)); in HessianReg()
148 PetscCall(VecShift(user->workN2, -user->eps)); in HessianReg()
149 PetscCall(VecReciprocal(user->workN2)); in HessianReg()
150 PetscCall(VecScale(user->workN2, user->eps * user->eps)); in HessianReg()
151 PetscCall(MatDiagonalSet(H, user->workN2, INSERT_VALUES)); in HessianReg()
159 AppCtx *user = (AppCtx *)ptr; in FullObjGrad() local
165 PetscCall(MatMult(user->A, X, user->workM)); in FullObjGrad()
166 PetscCall(VecAXPY(user->workM, -1, user->b)); in FullObjGrad()
167 PetscCall(VecDot(user->workM, user->workM, f)); in FullObjGrad()
168 if (user->reg == 1) { in FullObjGrad()
177 lambda = user->lambda; in FullObjGrad()
182 PetscCall(MatMult(user->ATA, X, user->workN)); in FullObjGrad()
183 PetscCall(MatMultTranspose(user->A, user->b, user->workN2)); in FullObjGrad()
184 PetscCall(VecWAXPY(g, -1., user->workN2, user->workN)); in FullObjGrad()
197 PetscErrorCode InitializeUserData(AppCtx *user) in InitializeUserData() argument
211 PetscCall(MatCreate(PETSC_COMM_WORLD, &user->A)); in InitializeUserData()
212 PetscCall(MatSetType(user->A, MATAIJ)); in InitializeUserData()
213 PetscCall(MatLoad(user->A, fd)); in InitializeUserData()
214 PetscCall(VecCreate(PETSC_COMM_WORLD, &user->b)); in InitializeUserData()
215 PetscCall(VecLoad(user->b, fd)); in InitializeUserData()
216 PetscCall(VecCreate(PETSC_COMM_WORLD, &user->xGT)); in InitializeUserData()
217 PetscCall(VecLoad(user->xGT, fd)); in InitializeUserData()
220 PetscCall(MatGetSize(user->A, &user->M, &user->N)); in InitializeUserData()
222 PetscCall(MatCreate(PETSC_COMM_WORLD, &user->D)); in InitializeUserData()
223 PetscCall(MatSetSizes(user->D, PETSC_DECIDE, PETSC_DECIDE, user->N, user->N)); in InitializeUserData()
224 PetscCall(MatSetFromOptions(user->D)); in InitializeUserData()
225 PetscCall(MatSetUp(user->D)); in InitializeUserData()
226 for (k = 0; k < user->N; k++) { in InitializeUserData()
229 if (k < user->N - 1) PetscCall(MatSetValues(user->D, 1, &k, 1, &n, &v, INSERT_VALUES)); in InitializeUserData()
231 PetscCall(MatSetValues(user->D, 1, &k, 1, &k, &v, INSERT_VALUES)); in InitializeUserData()
233 PetscCall(MatAssemblyBegin(user->D, MAT_FINAL_ASSEMBLY)); in InitializeUserData()
234 PetscCall(MatAssemblyEnd(user->D, MAT_FINAL_ASSEMBLY)); in InitializeUserData()
236 PetscCall(MatTransposeMatMult(user->D, user->D, MAT_INITIAL_MATRIX, PETSC_DETERMINE, &user->DTD)); in InitializeUserData()
238 PetscCall(MatCreate(PETSC_COMM_WORLD, &user->Hz)); in InitializeUserData()
239 PetscCall(MatSetSizes(user->Hz, PETSC_DECIDE, PETSC_DECIDE, user->N, user->N)); in InitializeUserData()
240 PetscCall(MatSetFromOptions(user->Hz)); in InitializeUserData()
241 PetscCall(MatSetUp(user->Hz)); in InitializeUserData()
242 PetscCall(MatAssemblyBegin(user->Hz, MAT_FINAL_ASSEMBLY)); in InitializeUserData()
243 PetscCall(MatAssemblyEnd(user->Hz, MAT_FINAL_ASSEMBLY)); in InitializeUserData()
245 PetscCall(VecCreate(PETSC_COMM_WORLD, &user->x)); in InitializeUserData()
246 PetscCall(VecCreate(PETSC_COMM_WORLD, &user->workM)); in InitializeUserData()
247 PetscCall(VecCreate(PETSC_COMM_WORLD, &user->workN)); in InitializeUserData()
248 PetscCall(VecCreate(PETSC_COMM_WORLD, &user->workN2)); in InitializeUserData()
249 PetscCall(VecSetSizes(user->x, PETSC_DECIDE, user->N)); in InitializeUserData()
250 PetscCall(VecSetSizes(user->workM, PETSC_DECIDE, user->M)); in InitializeUserData()
251 PetscCall(VecSetSizes(user->workN, PETSC_DECIDE, user->N)); in InitializeUserData()
252 PetscCall(VecSetSizes(user->workN2, PETSC_DECIDE, user->N)); in InitializeUserData()
253 PetscCall(VecSetFromOptions(user->x)); in InitializeUserData()
254 PetscCall(VecSetFromOptions(user->workM)); in InitializeUserData()
255 PetscCall(VecSetFromOptions(user->workN)); in InitializeUserData()
256 PetscCall(VecSetFromOptions(user->workN2)); in InitializeUserData()
258 PetscCall(VecDuplicate(user->workN, &user->workN3)); in InitializeUserData()
259 PetscCall(VecDuplicate(user->x, &user->xlb)); in InitializeUserData()
260 PetscCall(VecDuplicate(user->x, &user->xub)); in InitializeUserData()
261 PetscCall(VecDuplicate(user->x, &user->c)); in InitializeUserData()
262 PetscCall(VecSet(user->xlb, 0.0)); in InitializeUserData()
263 PetscCall(VecSet(user->c, 0.0)); in InitializeUserData()
264 PetscCall(VecSet(user->xub, PETSC_INFINITY)); in InitializeUserData()
266 PetscCall(MatTransposeMatMult(user->A, user->A, MAT_INITIAL_MATRIX, PETSC_DETERMINE, &user->ATA)); in InitializeUserData()
267 PetscCall(MatTransposeMatMult(user->A, user->A, MAT_INITIAL_MATRIX, PETSC_DETERMINE, &user->Hx)); in InitializeUserData()
268 PetscCall(MatTransposeMatMult(user->A, user->A, MAT_INITIAL_MATRIX, PETSC_DETERMINE, &user->HF)); in InitializeUserData()
270 PetscCall(MatAssemblyBegin(user->ATA, MAT_FINAL_ASSEMBLY)); in InitializeUserData()
271 PetscCall(MatAssemblyEnd(user->ATA, MAT_FINAL_ASSEMBLY)); in InitializeUserData()
272 PetscCall(MatAssemblyBegin(user->Hx, MAT_FINAL_ASSEMBLY)); in InitializeUserData()
273 PetscCall(MatAssemblyEnd(user->Hx, MAT_FINAL_ASSEMBLY)); in InitializeUserData()
274 PetscCall(MatAssemblyBegin(user->HF, MAT_FINAL_ASSEMBLY)); in InitializeUserData()
275 PetscCall(MatAssemblyEnd(user->HF, MAT_FINAL_ASSEMBLY)); in InitializeUserData()
277 user->lambda = 1.e-8; in InitializeUserData()
278 user->eps = 1.e-3; in InitializeUserData()
279 user->reg = 2; in InitializeUserData()
280 user->mumin = 5.e-6; in InitializeUserData()
283 …eg", "Regularization scheme for z solver (1,2)", "tomographyADMM.c", user->reg, &user->reg, NULL)); in InitializeUserData()
284 …", "The regularization multiplier. 1 default", "tomographyADMM.c", user->lambda, &user->lambda, NU… in InitializeUserData()
285 …scOptionsReal("-eps", "L1 norm epsilon padding", "tomographyADMM.c", user->eps, &user->eps, NULL)); in InitializeUserData()
286 …n", "Minimum value for ADMM spectral penalty", "tomographyADMM.c", user->mumin, &user->mumin, NULL… in InitializeUserData()
293 PetscErrorCode DestroyContext(AppCtx *user) in DestroyContext() argument
296 PetscCall(MatDestroy(&user->A)); in DestroyContext()
297 PetscCall(MatDestroy(&user->ATA)); in DestroyContext()
298 PetscCall(MatDestroy(&user->Hx)); in DestroyContext()
299 PetscCall(MatDestroy(&user->Hz)); in DestroyContext()
300 PetscCall(MatDestroy(&user->HF)); in DestroyContext()
301 PetscCall(MatDestroy(&user->D)); in DestroyContext()
302 PetscCall(MatDestroy(&user->DTD)); in DestroyContext()
303 PetscCall(VecDestroy(&user->xGT)); in DestroyContext()
304 PetscCall(VecDestroy(&user->xlb)); in DestroyContext()
305 PetscCall(VecDestroy(&user->xub)); in DestroyContext()
306 PetscCall(VecDestroy(&user->b)); in DestroyContext()
307 PetscCall(VecDestroy(&user->x)); in DestroyContext()
308 PetscCall(VecDestroy(&user->c)); in DestroyContext()
309 PetscCall(VecDestroy(&user->workN3)); in DestroyContext()
310 PetscCall(VecDestroy(&user->workN2)); in DestroyContext()
311 PetscCall(VecDestroy(&user->workN)); in DestroyContext()
312 PetscCall(VecDestroy(&user->workM)); in DestroyContext()
322 AppCtx *user; in main() local
328 PetscCall(PetscNew(&user)); in main()
329 PetscCall(InitializeUserData(user)); in main()
333 PetscCall(TaoSetSolution(tao, user->x)); in main()
336 PetscCall(TaoSetObjectiveAndGradient(tao, NULL, FullObjGrad, (void *)user)); in main()
337 PetscCall(MatShift(user->HF, user->lambda)); in main()
338 PetscCall(TaoSetHessian(tao, user->HF, user->HF, HessianFull, (void *)user)); in main()
341 …scCall(TaoADMMSetMisfitObjectiveAndGradientRoutine(tao, MisfitObjectiveAndGradient, (void *)user)); in main()
342 PetscCall(TaoADMMSetMisfitHessianRoutine(tao, user->Hx, user->Hx, HessianMisfit, (void *)user)); in main()
344 PetscCall(TaoADMMSetMisfitConstraintJacobian(tao, user->D, user->D, NullJacobian, (void *)user)); in main()
347 if (user->reg == 1) { in main()
348 …DMMSetRegularizerObjectiveAndGradientRoutine(tao, RegularizerObjectiveAndGradient1, (void *)user)); in main()
349 … PetscCall(TaoADMMSetRegularizerHessianRoutine(tao, user->Hz, user->Hz, HessianReg, (void *)user)); in main()
351 } else if (user->reg == 2) { in main()
352 …DMMSetRegularizerObjectiveAndGradientRoutine(tao, RegularizerObjectiveAndGradient2, (void *)user)); in main()
353 PetscCall(MatShift(user->Hz, 1)); in main()
354 PetscCall(MatScale(user->Hz, user->lambda)); in main()
355 …PetscCall(TaoADMMSetRegularizerHessianRoutine(tao, user->Hz, user->Hz, HessianMisfit, (void *)user in main()
357 …} else PetscCheck(user->reg == 3, PETSC_COMM_WORLD, PETSC_ERR_ARG_UNKNOWN_TYPE, "Incorrect Reg typ… in main()
363 if (user->reg == 3) { in main()
365 PetscCall(TaoShellSetContext(reg, (void *)user)); in main()
370 PetscCall(TaoSetVariableBounds(misfit, user->xlb, user->xub)); in main()
373 PetscCall(TaoADMMSetRegularizerCoefficient(tao, user->lambda)); in main()
374 PetscCall(TaoADMMSetRegularizerConstraintJacobian(tao, NULL, NULL, NullJacobian, (void *)user)); in main()
375 PetscCall(TaoADMMSetMinimumSpectralPenalty(tao, user->mumin)); in main()
377 PetscCall(TaoADMMSetConstraintVectorRHS(tao, user->c)); in main()
383 PetscCall(VecView(user->x, fd)); in main()
387 PetscCall(VecAXPY(user->x, -1, user->xGT)); in main()
388 PetscCall(VecNorm(user->x, NORM_2, &v1)); in main()
389 PetscCall(VecNorm(user->xGT, NORM_2, &v2)); in main()
394 PetscCall(DestroyContext(user)); in main()
395 PetscCall(PetscFree(user)); in main()