xref: /petsc/src/snes/interface/snesregi.c (revision 3542a6bc4c584c7242b42ae25287f99f26705a8b)
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);
10*c2fc9fa9SBarry Smith extern PetscErrorCode  SNESCreate_VIRS(SNES);
11*c2fc9fa9SBarry Smith extern PetscErrorCode  SNESCreate_VISS(SNES);
124a0c5b0cSMatthew G Knepley extern PetscErrorCode  SNESCreate_NGMRES(SNES);
139261d27aSPeter Brune extern PetscErrorCode  SNESCreate_SORQN(SNES);
144b11644fSPeter Brune extern PetscErrorCode  SNESCreate_QN(SNES);
15c5ae4b9aSBarry Smith extern PetscErrorCode  SNESCreate_Shell(SNES);
163542a6bcSPeter Brune extern PetscErrorCode  SNESCreate_GS(SNES);
17fef7b6d8SPeter Brune extern PetscErrorCode  SNESCreate_NCG(SNES);
18421d9b32SPeter Brune extern PetscErrorCode  SNESCreate_FAS(SNES);
19fb2e594dSBarry Smith EXTERN_C_END
20eaa2832dSBarry Smith 
211e633543SBarry Smith const char *SNESConvergedReasons_Shifted[]  = {" "," ","DIVERGED_LOCAL_MIN","DIVERGED_INNER","DIVERGED_LINE_SEARCH","DIVERGED_MAX_IT",
2264075487SBarry Smith                                                "DIVERGED_FNORM_NAN","DIVERGED_LINEAR_SOLVE","DIVERGED_FUNCTION_COUNT","DIVERGED_FUNCTION_DOMAIN",
239dcbbd2bSBarry Smith                                                "CONVERGED_ITERATING"," ","CONVERGED_FNORM_ABS","CONVERGED_FNORM_RELATIVE",
243f149594SLisandro Dalcin                                                "CONVERGED_PNORM_RELATIVE","CONVERGED_ITS"," ","CONVERGED_TR_DELTA","SNESConvergedReason","",0};
257935a769SJed Brown const char *const*SNESConvergedReasons = SNESConvergedReasons_Shifted + 10;
269dcbbd2bSBarry Smith 
2782bf6240SBarry Smith /*
2882bf6240SBarry Smith       This is used by SNESSetType() to make sure that at least one
2982bf6240SBarry Smith     SNESRegisterAll() is called. In general, if there is more than one
3082bf6240SBarry Smith     DLL then SNESRegisterAll() may be called several times.
3182bf6240SBarry Smith */
32ace3abfcSBarry Smith extern PetscBool  SNESRegisterAllCalled;
3382bf6240SBarry Smith 
344a2ae208SSatish Balay #undef __FUNCT__
354a2ae208SSatish Balay #define __FUNCT__ "SNESRegisterAll"
3683f0b094SBarry Smith /*@C
3782bf6240SBarry Smith    SNESRegisterAll - Registers all of the nonlinear solver methods in the SNES package.
38eaa2832dSBarry Smith 
39fee21e36SBarry Smith    Not Collective
40fee21e36SBarry Smith 
4136851e7fSLois Curfman McInnes    Level: advanced
4236851e7fSLois Curfman McInnes 
4382bf6240SBarry Smith .keywords: SNES, register, all
44eaa2832dSBarry Smith 
4582bf6240SBarry Smith .seealso:  SNESRegisterDestroy()
46eaa2832dSBarry Smith @*/
477087cfbeSBarry Smith PetscErrorCode  SNESRegisterAll(const char path[])
48eaa2832dSBarry Smith {
49dfbe8321SBarry Smith   PetscErrorCode ierr;
5082bf6240SBarry Smith 
513a40ed3dSBarry Smith   PetscFunctionBegin;
524c49b128SBarry Smith   SNESRegisterAllCalled = PETSC_TRUE;
5382bf6240SBarry Smith 
54b79b07cfSJed Brown   ierr = SNESRegisterDynamic(SNESLS,          path,"SNESCreate_LS",          SNESCreate_LS);CHKERRQ(ierr);
55b79b07cfSJed Brown   ierr = SNESRegisterDynamic(SNESTR,          path,"SNESCreate_TR",          SNESCreate_TR);CHKERRQ(ierr);
56b79b07cfSJed Brown   ierr = SNESRegisterDynamic(SNESTEST,        path,"SNESCreate_Test",        SNESCreate_Test);CHKERRQ(ierr);
57d5c3842bSBarry Smith   ierr = SNESRegisterDynamic(SNESNRICHARDSON, path,"SNESCreate_NRichardson", SNESCreate_NRichardson);CHKERRQ(ierr);
58b79b07cfSJed Brown   ierr = SNESRegisterDynamic(SNESKSPONLY,     path,"SNESCreate_KSPONLY",     SNESCreate_KSPONLY);CHKERRQ(ierr);
59*c2fc9fa9SBarry Smith   ierr = SNESRegisterDynamic(SNESVIRS,        path,"SNESCreate_VIRS",        SNESCreate_VIRS);CHKERRQ(ierr);
60*c2fc9fa9SBarry Smith   ierr = SNESRegisterDynamic(SNESVISS,        path,"SNESCreate_VISS",        SNESCreate_VISS);CHKERRQ(ierr);
614a0c5b0cSMatthew G Knepley   ierr = SNESRegisterDynamic(SNESNGMRES,      path,"SNESCreate_NGMRES",      SNESCreate_NGMRES);CHKERRQ(ierr);
624b11644fSPeter Brune   ierr = SNESRegisterDynamic(SNESQN,          path,"SNESCreate_QN",          SNESCreate_QN);CHKERRQ(ierr);
63c5ae4b9aSBarry Smith   ierr = SNESRegisterDynamic(SNESSHELL,       path,"SNESCreate_Shell",       SNESCreate_Shell);CHKERRQ(ierr);
643542a6bcSPeter Brune   ierr = SNESRegisterDynamic(SNESGS,          path,"SNESCreate_GS",          SNESCreate_GS);CHKERRQ(ierr);
65d5c3842bSBarry Smith   ierr = SNESRegisterDynamic(SNESSORQN,       path,"SNESCreate_SORQN",       SNESCreate_SORQN);CHKERRQ(ierr);
66fef7b6d8SPeter Brune   ierr = SNESRegisterDynamic(SNESNCG,         path,"SNESCreate_NCG",         SNESCreate_NCG);CHKERRQ(ierr);
67421d9b32SPeter Brune   ierr = SNESRegisterDynamic(SNESFAS,         path,"SNESCreate_FAS",         SNESCreate_FAS);CHKERRQ(ierr);
683a40ed3dSBarry Smith   PetscFunctionReturn(0);
69eaa2832dSBarry Smith }
70