1 #include <../src/tao/bound/impls/bqnk/bqnk.h> 2 3 static PetscErrorCode TaoSetUp_BQNKTL(Tao tao) 4 { 5 PetscErrorCode ierr; 6 KSP ksp; 7 PetscVoidFunction valid; 8 9 PetscFunctionBegin; 10 ierr = TaoSetUp_BQNK(tao);CHKERRQ(ierr); 11 ierr = TaoGetKSP(tao,&ksp);CHKERRQ(ierr); 12 ierr = PetscObjectQueryFunction((PetscObject)ksp,"KSPCGSetRadius_C",&valid);CHKERRQ(ierr); 13 if (!valid) SETERRQ1(PetscObjectComm((PetscObject)tao),PETSC_ERR_SUP,"Not for KSP type %s. Must use a trust-region CG method for KSP (e.g. KSPNASH, KSPSTCG, KSPGLTR)",((PetscObject)ksp)->type_name); 14 PetscFunctionReturn(0); 15 } 16 17 /*MC 18 TAOBQNKTL - Bounded Quasi-Newton-Krylov Trust-region with Line-search fallback, for nonlinear 19 minimization with bound constraints. This method approximates the Hessian-vector 20 product using a limited-memory quasi-Newton formula, and iteratively inverts the 21 Hessian with a Krylov solver. The quasi-Newton matrix and its settings can be 22 accessed via the prefix `-tao_bqnk_`. For options database, see TAOBNK 23 24 Level: beginner 25 .seealso TAOBNK, TAOBQNKTR, TAOBQNKLS 26 M*/ 27 PETSC_EXTERN PetscErrorCode TaoCreate_BQNKTL(Tao tao) 28 { 29 TAO_BNK *bnk; 30 TAO_BQNK *bqnk; 31 PetscErrorCode ierr; 32 33 PetscFunctionBegin; 34 ierr = TaoCreate_BQNK(tao);CHKERRQ(ierr); 35 tao->ops->setup = TaoSetUp_BQNKTL; 36 bnk = (TAO_BNK*)tao->data; 37 bqnk = (TAO_BQNK*)bnk->ctx; 38 bqnk->solve = TaoSolve_BNTL; 39 PetscFunctionReturn(0); 40 } 41