static PetscErrorCode SNESSetFromOptions_NCG(SNES snes) { SNES_NCG *ncg = (SNES_NCG*)snes->data; PetscErrorCode ierr; PetscBool debug; SNESLineSearch linesearch; SNESNCGType ncgtype=ncg->type; PetscFunctionBegin; ierr = PetscOptionsHead("SNES NCG options");CHKERRQ(ierr); ierr = PetscOptionsBool("-snes_ncg_monitor","Monitor NCG iterations","SNES",ncg->monitor ? PETSC_TRUE : PETSC_FALSE, &debug, NULL);CHKERRQ(ierr); ierr = PetscOptionsEnum("-snes_ncg_type","NCG Beta type used","SNESNCGSetType",SNESNCGTypes,(PetscEnum)ncg->type,(PetscEnum*)&ncgtype,NULL);CHKERRQ(ierr); ierr = SNESNCGSetType(snes, ncgtype);CHKERRQ(ierr); if (debug) { ncg->monitor = PETSC_VIEWER_STDOUT_(PetscObjectComm((PetscObject)snes));CHKERRQ(ierr); } ierr = PetscOptionsTail();CHKERRQ(ierr); if (!snes->linesearch) { ierr = SNESGetLineSearch(snes, &linesearch);CHKERRQ(ierr); if (!snes->pc) { ierr = SNESLineSearchSetType(linesearch, SNESLINESEARCHCP);CHKERRQ(ierr); } else { ierr = SNESLineSearchSetType(linesearch, SNESLINESEARCHL2);CHKERRQ(ierr); } } ierr = SNESLineSearchRegister(SNESLINESEARCHNCGLINEAR, SNESLineSearchCreate_NCGLinear);CHKERRQ(ierr); PetscFunctionReturn(0); }
void PETSC_STDCALL snesncgsettype_(SNES snes,SNESNCGType *btype, int *__ierr ){ *__ierr = SNESNCGSetType( (SNES)PetscToPointer((snes) ),*btype); }