xref: /petsc/src/snes/interface/snesregi.c (revision e37c518b3c178882b922d1d3faeb3ee252cb498a)
1eaa2832dSBarry Smith 
2af0996ceSBarry Smith #include <petsc/private/snesimpl.h>     /*I  "petscsnes.h"  I*/
3fb2e594dSBarry Smith 
48cc058d9SJed Brown PETSC_EXTERN PetscErrorCode SNESCreate_NEWTONLS(SNES);
58cc058d9SJed Brown PETSC_EXTERN PetscErrorCode SNESCreate_NEWTONTR(SNES);
68cc058d9SJed Brown PETSC_EXTERN PetscErrorCode SNESCreate_Test(SNES);
78cc058d9SJed Brown PETSC_EXTERN PetscErrorCode SNESCreate_NRichardson(SNES);
88cc058d9SJed Brown PETSC_EXTERN PetscErrorCode SNESCreate_KSPONLY(SNES);
98cc058d9SJed Brown PETSC_EXTERN PetscErrorCode SNESCreate_VINEWTONRSLS(SNES);
108cc058d9SJed Brown PETSC_EXTERN PetscErrorCode SNESCreate_VINEWTONSSLS(SNES);
118cc058d9SJed Brown PETSC_EXTERN PetscErrorCode SNESCreate_NGMRES(SNES);
128cc058d9SJed Brown PETSC_EXTERN PetscErrorCode SNESCreate_QN(SNES);
138cc058d9SJed Brown PETSC_EXTERN PetscErrorCode SNESCreate_Shell(SNES);
14be95d8f1SBarry Smith PETSC_EXTERN PetscErrorCode SNESCreate_NGS(SNES);
158cc058d9SJed Brown PETSC_EXTERN PetscErrorCode SNESCreate_NCG(SNES);
168cc058d9SJed Brown PETSC_EXTERN PetscErrorCode SNESCreate_FAS(SNES);
178cc058d9SJed Brown PETSC_EXTERN PetscErrorCode SNESCreate_MS(SNES);
188cc058d9SJed Brown PETSC_EXTERN PetscErrorCode SNESCreate_NASM(SNES);
198cc058d9SJed Brown PETSC_EXTERN PetscErrorCode SNESCreate_Anderson(SNES);
208cc058d9SJed Brown PETSC_EXTERN PetscErrorCode SNESCreate_ASPIN(SNES);
21eed5f15bSPeter Brune PETSC_EXTERN PetscErrorCode SNESCreate_Composite(SNES);
22eaa2832dSBarry Smith 
23*e37c518bSBarry Smith const char *SNESConvergedReasons_Shifted[] = {" ","DIVERGED_DTOL","DIVERGED_LOCAL_MIN","DIVERGED_INNER","DIVERGED_LINE_SEARCH","DIVERGED_MAX_IT",
2464075487SBarry Smith                                               "DIVERGED_FNORM_NAN","DIVERGED_LINEAR_SOLVE","DIVERGED_FUNCTION_COUNT","DIVERGED_FUNCTION_DOMAIN",
259dcbbd2bSBarry Smith                                               "CONVERGED_ITERATING"," ","CONVERGED_FNORM_ABS","CONVERGED_FNORM_RELATIVE",
26c60f73f4SPeter Brune                                               "CONVERGED_SNORM_RELATIVE","CONVERGED_ITS"," ","CONVERGED_TR_DELTA","SNESConvergedReason","",0};
277935a769SJed Brown const char *const *SNESConvergedReasons = SNESConvergedReasons_Shifted + 10;
289dcbbd2bSBarry Smith 
29365a6726SPeter Brune const char *SNESNormSchedules_Shifted[]    = {"DEFAULT","NONE","ALWAYS","INITIALONLY","FINALONLY","INITIALFINALONLY","SNESNormSchedule","SNES_NORM_",0};
30365a6726SPeter Brune const char *const *const SNESNormSchedules = SNESNormSchedules_Shifted + 1;
31fdacfa88SPeter Brune 
3247073ea2SPeter Brune const char *SNESFunctionTypes_Shifted[]    = {"DEFAULT","UNPRECONDITIONED","PRECONDITIONED","SNESFunctionType","SNES_FUNCTION_",0};
3347073ea2SPeter Brune const char *const *const SNESFunctionTypes = SNESFunctionTypes_Shifted + 1;
3447073ea2SPeter Brune 
3582bf6240SBarry Smith /*
3682bf6240SBarry Smith       This is used by SNESSetType() to make sure that at least one
3782bf6240SBarry Smith     SNESRegisterAll() is called. In general, if there is more than one
3882bf6240SBarry Smith     DLL then SNESRegisterAll() may be called several times.
3982bf6240SBarry Smith */
40ace3abfcSBarry Smith extern PetscBool SNESRegisterAllCalled;
4182bf6240SBarry Smith 
424a2ae208SSatish Balay #undef __FUNCT__
434a2ae208SSatish Balay #define __FUNCT__ "SNESRegisterAll"
4483f0b094SBarry Smith /*@C
4582bf6240SBarry Smith    SNESRegisterAll - Registers all of the nonlinear solver methods in the SNES package.
46eaa2832dSBarry Smith 
47fee21e36SBarry Smith    Not Collective
48fee21e36SBarry Smith 
4936851e7fSLois Curfman McInnes    Level: advanced
5036851e7fSLois Curfman McInnes 
5182bf6240SBarry Smith .keywords: SNES, register, all
52eaa2832dSBarry Smith 
5382bf6240SBarry Smith .seealso:  SNESRegisterDestroy()
54eaa2832dSBarry Smith @*/
55607a6623SBarry Smith PetscErrorCode  SNESRegisterAll(void)
56eaa2832dSBarry Smith {
57dfbe8321SBarry Smith   PetscErrorCode ierr;
5882bf6240SBarry Smith 
593a40ed3dSBarry Smith   PetscFunctionBegin;
600f51fdf8SToby Isaac   if (SNESRegisterAllCalled) PetscFunctionReturn(0);
614c49b128SBarry Smith   SNESRegisterAllCalled = PETSC_TRUE;
6282bf6240SBarry Smith 
63bdf89e91SBarry Smith   ierr = SNESRegister(SNESNEWTONLS,     SNESCreate_NEWTONLS);CHKERRQ(ierr);
64bdf89e91SBarry Smith   ierr = SNESRegister(SNESNEWTONTR,     SNESCreate_NEWTONTR);CHKERRQ(ierr);
65bdf89e91SBarry Smith   ierr = SNESRegister(SNESTEST,         SNESCreate_Test);CHKERRQ(ierr);
66bdf89e91SBarry Smith   ierr = SNESRegister(SNESNRICHARDSON,  SNESCreate_NRichardson);CHKERRQ(ierr);
67bdf89e91SBarry Smith   ierr = SNESRegister(SNESKSPONLY,      SNESCreate_KSPONLY);CHKERRQ(ierr);
68bdf89e91SBarry Smith   ierr = SNESRegister(SNESVINEWTONRSLS, SNESCreate_VINEWTONRSLS);CHKERRQ(ierr);
69bdf89e91SBarry Smith   ierr = SNESRegister(SNESVINEWTONSSLS, SNESCreate_VINEWTONSSLS);CHKERRQ(ierr);
70bdf89e91SBarry Smith   ierr = SNESRegister(SNESNGMRES,       SNESCreate_NGMRES);CHKERRQ(ierr);
71bdf89e91SBarry Smith   ierr = SNESRegister(SNESQN,           SNESCreate_QN);CHKERRQ(ierr);
72bdf89e91SBarry Smith   ierr = SNESRegister(SNESSHELL,        SNESCreate_Shell);CHKERRQ(ierr);
73be95d8f1SBarry Smith   ierr = SNESRegister(SNESNGS,          SNESCreate_NGS);CHKERRQ(ierr);
74bdf89e91SBarry Smith   ierr = SNESRegister(SNESNCG,          SNESCreate_NCG);CHKERRQ(ierr);
75bdf89e91SBarry Smith   ierr = SNESRegister(SNESFAS,          SNESCreate_FAS);CHKERRQ(ierr);
76bdf89e91SBarry Smith   ierr = SNESRegister(SNESMS,           SNESCreate_MS);CHKERRQ(ierr);
77bdf89e91SBarry Smith   ierr = SNESRegister(SNESNASM,         SNESCreate_NASM);CHKERRQ(ierr);
78bdf89e91SBarry Smith   ierr = SNESRegister(SNESANDERSON,     SNESCreate_Anderson);CHKERRQ(ierr);
79bdf89e91SBarry Smith   ierr = SNESRegister(SNESASPIN,        SNESCreate_ASPIN);CHKERRQ(ierr);
80eed5f15bSPeter Brune   ierr = SNESRegister(SNESCOMPOSITE,    SNESCreate_Composite);CHKERRQ(ierr);
813a40ed3dSBarry Smith   PetscFunctionReturn(0);
82eaa2832dSBarry Smith }
83