EXTERN_C_BEGIN #undef __FUNCT__ #define __FUNCT__ "TaoCreate_OWLQN" PetscErrorCode TaoCreate_OWLQN(Tao tao) { TAO_OWLQN *lmP; const char *owarmijo_type = TAOLINESEARCHOWARMIJO; PetscErrorCode ierr; PetscFunctionBegin; tao->ops->setup = TaoSetUp_OWLQN; tao->ops->solve = TaoSolve_OWLQN; tao->ops->view = TaoView_OWLQN; tao->ops->setfromoptions = TaoSetFromOptions_OWLQN; tao->ops->destroy = TaoDestroy_OWLQN; ierr = PetscNewLog(tao,&lmP);CHKERRQ(ierr); lmP->D = 0; lmP->M = 0; lmP->GV = 0; lmP->Xold = 0; lmP->Gold = 0; lmP->lambda = 1.0; tao->data = (void*)lmP; tao->max_it = 2000; tao->max_funcs = 4000; tao->fatol = 1e-4; tao->frtol = 1e-4; ierr = TaoLineSearchCreate(((PetscObject)tao)->comm,&tao->linesearch);CHKERRQ(ierr); ierr = TaoLineSearchSetType(tao->linesearch,owarmijo_type);CHKERRQ(ierr); ierr = TaoLineSearchUseTaoRoutines(tao->linesearch,tao);CHKERRQ(ierr); PetscFunctionReturn(0); }
EXTERN_C_BEGIN #undef __FUNCT__ #define __FUNCT__ "TaoCreate_SQPCON" PetscErrorCode TaoCreate_SQPCON(Tao tao) { TAO_SQPCON *sqpconP; PetscErrorCode ierr; const char *morethuente_type = TAOLINESEARCHMT; PetscFunctionBegin; tao->ops->setup = TaoSetup_SQPCON; tao->ops->solve = TaoSolve_SQPCON; tao->ops->view = TaoView_SQPCON; tao->ops->setfromoptions = TaoSetFromOptions_SQPCON; tao->ops->destroy = TaoDestroy_SQPCON; ierr = PetscNewLog(tao,&sqpconP);CHKERRQ(ierr); tao->data = (void*)sqpconP; tao->max_it=200; tao->fatol=1e-4; tao->frtol=1e-4; tao->gatol=1e-4; tao->grtol=1e-4; ierr = TaoLineSearchCreate(((PetscObject)tao)->comm, &tao->linesearch);CHKERRQ(ierr); ierr = TaoLineSearchSetType(tao->linesearch, morethuente_type);CHKERRQ(ierr); ierr = TaoLineSearchUseTaoRoutines(tao->linesearch,tao);CHKERRQ(ierr); PetscFunctionReturn(0); }
PETSC_EXTERN PetscErrorCode TaoCreate_BLMVM(Tao tao) { TAO_BLMVM *blmP; const char *morethuente_type = TAOLINESEARCHMT; PetscErrorCode ierr; PetscFunctionBegin; tao->ops->setup = TaoSetup_BLMVM; tao->ops->solve = TaoSolve_BLMVM; tao->ops->view = TaoView_BLMVM; tao->ops->setfromoptions = TaoSetFromOptions_BLMVM; tao->ops->destroy = TaoDestroy_BLMVM; tao->ops->computedual = TaoComputeDual_BLMVM; ierr = PetscNewLog(tao,&blmP);CHKERRQ(ierr); blmP->H0 = NULL; tao->data = (void*)blmP; /* Override default settings (unless already changed) */ if (!tao->max_it_changed) tao->max_it = 2000; if (!tao->max_funcs_changed) tao->max_funcs = 4000; ierr = TaoLineSearchCreate(((PetscObject)tao)->comm, &tao->linesearch);CHKERRQ(ierr); ierr = TaoLineSearchSetType(tao->linesearch, morethuente_type);CHKERRQ(ierr); ierr = TaoLineSearchUseTaoRoutines(tao->linesearch,tao);CHKERRQ(ierr); ierr = TaoLineSearchSetOptionsPrefix(tao->linesearch,tao->hdr.prefix);CHKERRQ(ierr); PetscFunctionReturn(0); }
PETSC_EXTERN PetscErrorCode TaoCreate_TRON(Tao tao) { TAO_TRON *tron; PetscErrorCode ierr; const char *morethuente_type = TAOLINESEARCHMT; PetscFunctionBegin; tao->ops->setup = TaoSetup_TRON; tao->ops->solve = TaoSolve_TRON; tao->ops->view = TaoView_TRON; tao->ops->setfromoptions = TaoSetFromOptions_TRON; tao->ops->destroy = TaoDestroy_TRON; tao->ops->computedual = TaoComputeDual_TRON; ierr = PetscNewLog(tao,&tron);CHKERRQ(ierr); tao->data = (void*)tron; /* Override default settings (unless already changed) */ if (!tao->max_it_changed) tao->max_it = 50; #if defined(PETSC_USE_REAL_SINGLE) if (!tao->steptol_changed) tao->steptol = 1.0e-6; #else if (!tao->steptol_changed) tao->steptol = 1.0e-12; #endif if (!tao->trust0_changed) tao->trust0 = 1.0; /* Initialize pointers and variables */ tron->n = 0; tron->maxgpits = 3; tron->pg_ftol = 0.001; tron->eta1 = 1.0e-4; tron->eta2 = 0.25; tron->eta3 = 0.50; tron->eta4 = 0.90; tron->sigma1 = 0.5; tron->sigma2 = 2.0; tron->sigma3 = 4.0; tron->gp_iterates = 0; /* Cumulative number */ tron->total_gp_its = 0; tron->n_free = 0; tron->DXFree=NULL; tron->R=NULL; tron->X_New=NULL; tron->G_New=NULL; tron->Work=NULL; tron->Free_Local=NULL; tron->H_sub=NULL; tron->Hpre_sub=NULL; tao->subset_type = TAO_SUBSET_SUBVEC; ierr = TaoLineSearchCreate(((PetscObject)tao)->comm, &tao->linesearch);CHKERRQ(ierr); ierr = TaoLineSearchSetType(tao->linesearch,morethuente_type);CHKERRQ(ierr); ierr = TaoLineSearchUseTaoRoutines(tao->linesearch,tao);CHKERRQ(ierr); ierr = TaoLineSearchSetOptionsPrefix(tao->linesearch,tao->hdr.prefix);CHKERRQ(ierr); ierr = KSPCreate(((PetscObject)tao)->comm, &tao->ksp);CHKERRQ(ierr); ierr = KSPSetOptionsPrefix(tao->ksp, tao->hdr.prefix);CHKERRQ(ierr); ierr = KSPSetType(tao->ksp,KSPSTCG);CHKERRQ(ierr); PetscFunctionReturn(0); }