Lines Matching refs:lmP

54   TAO_OWLQN                   *lmP = (TAO_OWLQN *)tao->data;
66 PetscCall(VecCopy(tao->gradient, lmP->GV));
67 PetscCall(ComputePseudoGrad_OWLQN(tao->solution, lmP->GV, lmP->lambda));
68 PetscCall(VecNorm(lmP->GV, NORM_2, &gnorm));
79 PetscCall(MatLMVMSetJ0Scale(lmP->M, delta));
82 lmP->bfgs = 0;
83 lmP->sgrad = 0;
84 lmP->grad = 0;
92 PetscCall(MatLMVMUpdate(lmP->M, tao->solution, tao->gradient));
93 PetscCall(MatSolve(lmP->M, lmP->GV, lmP->D));
95 PetscCall(ProjDirect_OWLQN(lmP->D, lmP->GV));
97 ++lmP->bfgs;
100 PetscCall(VecDot(lmP->D, lmP->GV, &gdx));
108 ++lmP->grad;
111 PetscCall(MatLMVMSetJ0Scale(lmP->M, delta));
112 PetscCall(MatLMVMReset(lmP->M, PETSC_FALSE));
113 PetscCall(MatLMVMUpdate(lmP->M, tao->solution, tao->gradient));
114 PetscCall(MatSolve(lmP->M, lmP->GV, lmP->D));
116 PetscCall(ProjDirect_OWLQN(lmP->D, lmP->GV));
118 lmP->bfgs = 1;
119 ++lmP->sgrad;
122 if (1 == lmP->bfgs) {
124 ++lmP->sgrad;
127 ++lmP->bfgs;
132 PetscCall(VecScale(lmP->D, -1.0));
136 PetscCall(VecCopy(tao->solution, lmP->Xold));
137 PetscCall(VecCopy(tao->gradient, lmP->Gold));
139 PetscCall(TaoLineSearchApply(tao->linesearch, tao->solution, &f, lmP->GV, lmP->D, &step, &ls_status));
145 PetscCall(VecCopy(lmP->Xold, tao->solution));
146 PetscCall(VecCopy(lmP->Gold, tao->gradient));
147 PetscCall(VecCopy(tao->gradient, lmP->GV));
149 PetscCall(ComputePseudoGrad_OWLQN(tao->solution, lmP->GV, lmP->lambda));
157 PetscCall(MatLMVMSetJ0Scale(lmP->M, delta));
158 PetscCall(MatLMVMReset(lmP->M, PETSC_FALSE));
159 PetscCall(MatLMVMUpdate(lmP->M, tao->solution, tao->gradient));
160 PetscCall(MatSolve(lmP->M, lmP->GV, lmP->D));
162 PetscCall(ProjDirect_OWLQN(lmP->D, lmP->GV));
164 lmP->bfgs = 1;
165 ++lmP->sgrad;
173 PetscCall(MatLMVMSetJ0Scale(lmP->M, 1.0));
174 PetscCall(MatLMVMReset(lmP->M, PETSC_FALSE));
175 PetscCall(MatLMVMUpdate(lmP->M, tao->solution, tao->gradient));
176 PetscCall(MatSolve(lmP->M, lmP->GV, lmP->D));
178 PetscCall(ProjDirect_OWLQN(lmP->D, lmP->GV));
180 lmP->bfgs = 1;
181 ++lmP->grad;
185 PetscCall(VecScale(lmP->D, -1.0));
188 PetscCall(TaoLineSearchApply(tao->linesearch, tao->solution, &f, lmP->GV, lmP->D, &step, &ls_status));
195 PetscCall(VecCopy(lmP->Xold, tao->solution));
196 PetscCall(VecCopy(lmP->Gold, tao->gradient));
197 PetscCall(VecCopy(tao->gradient, lmP->GV));
201 PetscCall(VecCopy(lmP->GV, tao->gradient));
204 PetscCall(ComputePseudoGrad_OWLQN(tao->solution, lmP->GV, lmP->lambda));
208 PetscCall(VecNorm(lmP->GV, NORM_2, &gnorm));
222 TAO_OWLQN *lmP = (TAO_OWLQN *)tao->data;
229 if (!lmP->D) PetscCall(VecDuplicate(tao->solution, &lmP->D));
230 if (!lmP->GV) PetscCall(VecDuplicate(tao->solution, &lmP->GV));
231 if (!lmP->Xold) PetscCall(VecDuplicate(tao->solution, &lmP->Xold));
232 if (!lmP->Gold) PetscCall(VecDuplicate(tao->solution, &lmP->Gold));
237 PetscCall(MatCreateLMVMBFGS(((PetscObject)tao)->comm, n, N, &lmP->M));
238 PetscCall(MatLMVMAllocate(lmP->M, tao->solution, tao->gradient));
244 TAO_OWLQN *lmP = (TAO_OWLQN *)tao->data;
248 PetscCall(VecDestroy(&lmP->Xold));
249 PetscCall(VecDestroy(&lmP->Gold));
250 PetscCall(VecDestroy(&lmP->D));
251 PetscCall(MatDestroy(&lmP->M));
252 PetscCall(VecDestroy(&lmP->GV));
260 TAO_OWLQN *lmP = (TAO_OWLQN *)tao->data;
264 PetscCall(PetscOptionsReal("-tao_owlqn_lambda", "regulariser weight", "", 100, &lmP->lambda, NULL));
297 TAO_OWLQN *lmP;
307 PetscCall(PetscNew(&lmP));
308 lmP->D = NULL;
309 lmP->M = NULL;
310 lmP->GV = NULL;
311 lmP->Xold = NULL;
312 lmP->Gold = NULL;
313 lmP->lambda = 1.0;
315 tao->data = (void *)lmP;