Lines Matching refs:qn
23 SNES_QN *qn = (SNES_QN *)snes->data; in SNESQNGetMatrix_Private() local
27 if (!qn->B) { in SNESQNGetMatrix_Private()
28 PetscCall(MatCreate(PetscObjectComm((PetscObject)snes), &qn->B)); in SNESQNGetMatrix_Private()
30 PetscCall(MatSetOptionsPrefix(qn->B, optionsprefix)); in SNESQNGetMatrix_Private()
31 PetscCall(MatAppendOptionsPrefix(qn->B, "qn_")); in SNESQNGetMatrix_Private()
32 switch (qn->type) { in SNESQNGetMatrix_Private()
34 PetscCall(MatSetType(qn->B, MATLMVMBROYDEN)); in SNESQNGetMatrix_Private()
35 qn->scale_type = SNES_QN_SCALE_NONE; in SNESQNGetMatrix_Private()
38 PetscCall(MatSetType(qn->B, MATLMVMBADBROYDEN)); in SNESQNGetMatrix_Private()
39 qn->scale_type = SNES_QN_SCALE_NONE; in SNESQNGetMatrix_Private()
42 PetscCall(MatSetType(qn->B, MATLMVMBFGS)); in SNESQNGetMatrix_Private()
43 switch (qn->scale_type) { in SNESQNGetMatrix_Private()
46 PetscCall(MatLMVMSymBroydenSetScaleType(qn->B, MAT_LMVM_SYMBROYDEN_SCALE_NONE)); in SNESQNGetMatrix_Private()
50 PetscCall(MatLMVMSymBroydenSetScaleType(qn->B, MAT_LMVM_SYMBROYDEN_SCALE_SCALAR)); in SNESQNGetMatrix_Private()
58 *B = qn->B; in SNESQNGetMatrix_Private()
64 SNES_QN *qn = (SNES_QN *)snes->data; in SNESSolve_QN() local
157 if (qn->scale_type == SNES_QN_SCALE_JACOBIAN && restart) { in SNESSolve_QN()
161 PetscCall(MatLMVMSetJ0KSP(qn->B, snes->ksp)); in SNESSolve_QN()
165 PetscCall(MatLMVMUpdate(qn->B, X, D)); in SNESSolve_QN()
166 PetscCall(MatSolve(qn->B, D, Y)); in SNESSolve_QN()
172 PetscCall(MatLMVMReset(qn->B, PETSC_FALSE)); in SNESSolve_QN()
217 if (qn->restart_type == SNES_QN_RESTART_POWELL && i_r > 1) { in SNESSolve_QN()
219 if (qn->scale_type == SNES_QN_SCALE_JACOBIAN) { in SNESSolve_QN()
228 …if (PetscAbs(PetscRealPart(DolddotD)) > qn->powell_gamma * PetscAbs(PetscRealPart(DolddotDold))) p… in SNESSolve_QN()
231 if (qn->restart_type == SNES_QN_RESTART_PERIODIC) { in SNESSolve_QN()
232 if (i_r > qn->m - 1) periodic = PETSC_TRUE; in SNESSolve_QN()
239 if (qn->monflg) { in SNESSolve_QN()
240 PetscCall(PetscViewerASCIIAddTab(qn->monitor, ((PetscObject)snes)->tablevel + 2)); in SNESSolve_QN()
242 …ASCIIPrintf(qn->monitor, "Powell restart! |%14.12e| > %6.4f*|%14.12e| i_r = %" PetscInt_FMT "\n", … in SNESSolve_QN()
244 …PetscCall(PetscViewerASCIIPrintf(qn->monitor, "Periodic restart! i_r = %" PetscInt_FMT "\n", i_r)); in SNESSolve_QN()
246 PetscCall(PetscViewerASCIISubtractTab(qn->monitor, ((PetscObject)snes)->tablevel + 2)); in SNESSolve_QN()
249 PetscCall(MatLMVMReset(qn->B, PETSC_FALSE)); in SNESSolve_QN()
257 SNES_QN *qn = (SNES_QN *)snes->data; in SNESSetUp_QN() local
267 PetscCall(SNESQNGetMatrix_Private(snes, &qn->B)); in SNESSetUp_QN()
269 if (qn->scale_type == SNES_QN_SCALE_JACOBIAN) PetscCall(SNESSetUpMatrices(snes)); in SNESSetUp_QN()
273 if (qn->scale_type == SNES_QN_SCALE_DEFAULT) { in SNESSetUp_QN()
274 if (qn->type == SNES_QN_BADBROYDEN) { in SNESSetUp_QN()
275 qn->scale_type = SNES_QN_SCALE_NONE; in SNESSetUp_QN()
277 qn->scale_type = SNES_QN_SCALE_SCALAR; in SNESSetUp_QN()
280 if (qn->restart_type == SNES_QN_RESTART_DEFAULT) { in SNESSetUp_QN()
281 if (qn->type == SNES_QN_LBFGS) { in SNESSetUp_QN()
282 qn->restart_type = SNES_QN_RESTART_POWELL; in SNESSetUp_QN()
284 qn->restart_type = SNES_QN_RESTART_PERIODIC; in SNESSetUp_QN()
288 PetscCall(SNESQNGetMatrix_Private(snes, &qn->B)); in SNESSetUp_QN()
291 PetscCall(MatSetSizes(qn->B, n, n, N, N)); in SNESSetUp_QN()
292 PetscCall(MatSetUp(qn->B)); in SNESSetUp_QN()
293 PetscCall(MatLMVMReset(qn->B, PETSC_TRUE)); in SNESSetUp_QN()
294 PetscCall(MatLMVMSetHistorySize(qn->B, qn->m)); in SNESSetUp_QN()
295 PetscCall(MatLMVMAllocate(qn->B, snes->vec_sol, snes->vec_func)); in SNESSetUp_QN()
301 SNES_QN *qn = (SNES_QN *)snes->data; in SNESReset_QN() local
304 PetscCall(MatDestroy(&qn->B)); in SNESReset_QN()
321 SNES_QN *qn = (SNES_QN *)snes->data; in SNESSetFromOptions_QN() local
324 SNESQNRestartType rtype = qn->restart_type; in SNESSetFromOptions_QN()
325 SNESQNScaleType stype = qn->scale_type; in SNESSetFromOptions_QN()
326 SNESQNType qtype = qn->type; in SNESSetFromOptions_QN()
330 …nt("-snes_qn_m", "Number of past states saved for L-BFGS methods", "SNESQN", qn->m, &qn->m, NULL)); in SNESSetFromOptions_QN()
331 …Real("-snes_qn_powell_gamma", "Powell angle tolerance", "SNESQN", qn->powell_gamma, &qn->powell_ga… in SNESSetFromOptions_QN()
332 …ionsBool("-snes_qn_monitor", "Monitor for the QN methods", "SNESQN", qn->monflg, &qn->monflg, NULL… in SNESSetFromOptions_QN()
342 PetscCall(SNESQNGetMatrix_Private(snes, &qn->B)); in SNESSetFromOptions_QN()
343 PetscCall(MatSetFromOptions(qn->B)); in SNESSetFromOptions_QN()
347 if (qn->type == SNES_QN_LBFGS) { in SNESSetFromOptions_QN()
349 } else if (qn->type == SNES_QN_BROYDEN) { in SNESSetFromOptions_QN()
356 …if (qn->monflg) PetscCall(PetscViewerASCIIGetStdout(PetscObjectComm((PetscObject)snes), &qn->monit… in SNESSetFromOptions_QN()
362 SNES_QN *qn = (SNES_QN *)snes->data; in SNESView_QN() local
368 …e is %s, scale type is %s\n", SNESQNTypes[qn->type], SNESQNRestartTypes[qn->restart_type], SNESQNS… in SNESView_QN()
369 PetscCall(PetscViewerASCIIPrintf(viewer, " Stored subspace size: %" PetscInt_FMT "\n", qn->m)); in SNESView_QN()
370 PetscCall(MatView(qn->B, viewer)); in SNESView_QN()
427 SNES_QN *qn = (SNES_QN *)snes->data; in SNESQNSetScaleType_QN() local
430 qn->scale_type = stype; in SNESQNSetScaleType_QN()
437 SNES_QN *qn = (SNES_QN *)snes->data; in SNESQNSetRestartType_QN() local
440 qn->restart_type = rtype; in SNESQNSetRestartType_QN()
470 SNES_QN *qn = (SNES_QN *)snes->data; in SNESQNSetType_QN() local
473 qn->type = qtype; in SNESQNSetType_QN()
512 SNES_QN *qn; in SNESCreate_QN() local
533 PetscCall(PetscNew(&qn)); in SNESCreate_QN()
534 snes->data = (void *)qn; in SNESCreate_QN()
535 qn->m = 10; in SNESCreate_QN()
536 qn->scaling = 1.0; in SNESCreate_QN()
537 qn->monitor = NULL; in SNESCreate_QN()
538 qn->monflg = PETSC_FALSE; in SNESCreate_QN()
539 qn->powell_gamma = 0.9999; in SNESCreate_QN()
540 qn->scale_type = SNES_QN_SCALE_DEFAULT; in SNESCreate_QN()
541 qn->restart_type = SNES_QN_RESTART_DEFAULT; in SNESCreate_QN()
542 qn->type = SNES_QN_LBFGS; in SNESCreate_QN()