xref: /petsc/src/snes/interface/snesregi.c (revision 421d9b3201840ccac4284b98ab49dc267dcc958d)
1eaa2832dSBarry Smith 
2c6db04a5SJed Brown #include <private/snesimpl.h>     /*I  "petscsnes.h"  I*/
3fb2e594dSBarry Smith 
4fb2e594dSBarry Smith EXTERN_C_BEGIN
57087cfbeSBarry Smith extern PetscErrorCode  SNESCreate_LS(SNES);
67087cfbeSBarry Smith extern PetscErrorCode  SNESCreate_TR(SNES);
77087cfbeSBarry Smith extern PetscErrorCode  SNESCreate_Test(SNES);
8d5c3842bSBarry Smith extern PetscErrorCode  SNESCreate_NRichardson(SNES);
97087cfbeSBarry Smith extern PetscErrorCode  SNESCreate_KSPONLY(SNES);
107087cfbeSBarry Smith extern PetscErrorCode  SNESCreate_VI(SNES);
114a0c5b0cSMatthew G Knepley extern PetscErrorCode  SNESCreate_NGMRES(SNES);
129261d27aSPeter Brune extern PetscErrorCode  SNESCreate_SORQN(SNES);
134b11644fSPeter Brune extern PetscErrorCode  SNESCreate_QN(SNES);
14c5ae4b9aSBarry Smith extern PetscErrorCode  SNESCreate_Shell(SNES);
15fef7b6d8SPeter Brune extern PetscErrorCode  SNESCreate_NCG(SNES);
16*421d9b32SPeter Brune extern PetscErrorCode  SNESCreate_FAS(SNES);
17fb2e594dSBarry Smith EXTERN_C_END
18eaa2832dSBarry Smith 
191e633543SBarry Smith const char *SNESConvergedReasons_Shifted[]  = {" "," ","DIVERGED_LOCAL_MIN","DIVERGED_INNER","DIVERGED_LINE_SEARCH","DIVERGED_MAX_IT",
2064075487SBarry Smith                                                "DIVERGED_FNORM_NAN","DIVERGED_LINEAR_SOLVE","DIVERGED_FUNCTION_COUNT","DIVERGED_FUNCTION_DOMAIN",
219dcbbd2bSBarry Smith                                                "CONVERGED_ITERATING"," ","CONVERGED_FNORM_ABS","CONVERGED_FNORM_RELATIVE",
223f149594SLisandro Dalcin                                                "CONVERGED_PNORM_RELATIVE","CONVERGED_ITS"," ","CONVERGED_TR_DELTA","SNESConvergedReason","",0};
237935a769SJed Brown const char *const*SNESConvergedReasons = SNESConvergedReasons_Shifted + 10;
249dcbbd2bSBarry Smith 
2582bf6240SBarry Smith /*
2682bf6240SBarry Smith       This is used by SNESSetType() to make sure that at least one
2782bf6240SBarry Smith     SNESRegisterAll() is called. In general, if there is more than one
2882bf6240SBarry Smith     DLL then SNESRegisterAll() may be called several times.
2982bf6240SBarry Smith */
30ace3abfcSBarry Smith extern PetscBool  SNESRegisterAllCalled;
3182bf6240SBarry Smith 
324a2ae208SSatish Balay #undef __FUNCT__
334a2ae208SSatish Balay #define __FUNCT__ "SNESRegisterAll"
3483f0b094SBarry Smith /*@C
3582bf6240SBarry Smith    SNESRegisterAll - Registers all of the nonlinear solver methods in the SNES package.
36eaa2832dSBarry Smith 
37fee21e36SBarry Smith    Not Collective
38fee21e36SBarry Smith 
3936851e7fSLois Curfman McInnes    Level: advanced
4036851e7fSLois Curfman McInnes 
4182bf6240SBarry Smith .keywords: SNES, register, all
42eaa2832dSBarry Smith 
4382bf6240SBarry Smith .seealso:  SNESRegisterDestroy()
44eaa2832dSBarry Smith @*/
457087cfbeSBarry Smith PetscErrorCode  SNESRegisterAll(const char path[])
46eaa2832dSBarry Smith {
47dfbe8321SBarry Smith   PetscErrorCode ierr;
4882bf6240SBarry Smith 
493a40ed3dSBarry Smith   PetscFunctionBegin;
504c49b128SBarry Smith   SNESRegisterAllCalled = PETSC_TRUE;
5182bf6240SBarry Smith 
52b79b07cfSJed Brown   ierr = SNESRegisterDynamic(SNESLS,          path,"SNESCreate_LS",          SNESCreate_LS);CHKERRQ(ierr);
53b79b07cfSJed Brown   ierr = SNESRegisterDynamic(SNESTR,          path,"SNESCreate_TR",          SNESCreate_TR);CHKERRQ(ierr);
54b79b07cfSJed Brown   ierr = SNESRegisterDynamic(SNESTEST,        path,"SNESCreate_Test",        SNESCreate_Test);CHKERRQ(ierr);
55d5c3842bSBarry Smith   ierr = SNESRegisterDynamic(SNESNRICHARDSON, path,"SNESCreate_NRichardson", SNESCreate_NRichardson);CHKERRQ(ierr);
56b79b07cfSJed Brown   ierr = SNESRegisterDynamic(SNESKSPONLY,     path,"SNESCreate_KSPONLY",     SNESCreate_KSPONLY);CHKERRQ(ierr);
572b4ed282SShri Abhyankar   ierr = SNESRegisterDynamic(SNESVI,          path,"SNESCreate_VI",          SNESCreate_VI);CHKERRQ(ierr);
584a0c5b0cSMatthew G Knepley   ierr = SNESRegisterDynamic(SNESNGMRES,      path,"SNESCreate_NGMRES",      SNESCreate_NGMRES);CHKERRQ(ierr);
594b11644fSPeter Brune   ierr = SNESRegisterDynamic(SNESQN,          path,"SNESCreate_QN",          SNESCreate_QN);CHKERRQ(ierr);
60c5ae4b9aSBarry Smith   ierr = SNESRegisterDynamic(SNESSHELL,       path,"SNESCreate_Shell",       SNESCreate_Shell);CHKERRQ(ierr);
61d5c3842bSBarry Smith   ierr = SNESRegisterDynamic(SNESSORQN,       path,"SNESCreate_SORQN",       SNESCreate_SORQN);CHKERRQ(ierr);
62fef7b6d8SPeter Brune   ierr = SNESRegisterDynamic(SNESNCG,         path,"SNESCreate_NCG",         SNESCreate_NCG);CHKERRQ(ierr);
63*421d9b32SPeter Brune   ierr = SNESRegisterDynamic(SNESFAS,         path,"SNESCreate_FAS",         SNESCreate_FAS);CHKERRQ(ierr);
643a40ed3dSBarry Smith   PetscFunctionReturn(0);
65eaa2832dSBarry Smith }
66