Actual source code: lmvmmat.h

petsc-3.7.7 2017-09-25
Report Typos and Errors
  1: #ifndef __LMVMMAT_H


  5: #include <petsc/private/matimpl.h>
  6: #include <petscksp.h>

  8: #define MatLMVM_Scale_None              0
  9: #define MatLMVM_Scale_Scalar            1
 10: #define MatLMVM_Scale_Broyden           2
 11: #define MatLMVM_Scale_H0                3
 12: #define MatLMVM_Scale_Types             4

 14: #define MatLMVM_Rescale_None            0
 15: #define MatLMVM_Rescale_Scalar          1
 16: #define MatLMVM_Rescale_GL              2
 17: #define MatLMVM_Rescale_Types           3

 19: #define MatLMVM_Limit_None              0
 20: #define MatLMVM_Limit_Average           1
 21: #define MatLMVM_Limit_Relative          2
 22: #define MatLMVM_Limit_Absolute          3
 23: #define MatLMVM_Limit_Types             4

 25: #define TAO_ZERO_SAFEGUARD      1e-8
 26: #define TAO_INF_SAFEGUARD       1e+8

 28: typedef struct{
 29:     PetscBool allocated;
 30:     PetscInt lm;
 31:     PetscReal eps;
 32:     PetscInt limitType;
 33:     PetscInt scaleType;
 34:     PetscInt rScaleType;

 36:     PetscReal s_alpha;  /*  Factor for scalar scaling */
 37:     PetscReal r_alpha;  /*  Factor on scalar for rescaling diagonal matrix */
 38:     PetscReal r_beta;   /*  Factor on diagonal for rescaling diagonal matrix */
 39:     PetscReal mu;               /*  Factor for using historical information */
 40:     PetscReal nu;               /*  Factor for using historical information */
 41:     PetscReal phi;              /*  Factor for Broyden scaling */

 43:   PetscInt scalar_history;      /*  Amount of history to keep for scalar scaling */
 44:   PetscReal *yy_history;        /*  Past information for scalar scaling */
 45:   PetscReal *ys_history;        /*  Past information for scalar scaling */
 46:   PetscReal *ss_history;        /*  Past information for scalar scaling */

 48:   PetscInt rescale_history;  /*  Amount of history to keep for rescaling diagonal */
 49:   PetscReal *yy_rhistory;       /*  Past information for scalar rescaling */
 50:   PetscReal *ys_rhistory;       /*  Past information for scalar rescaling */
 51:   PetscReal *ss_rhistory;       /*  Past information for scalar rescaling */

 53:   PetscReal delta_max;  /*  Maximum value for delta */
 54:   PetscReal delta_min;  /*  Minimum value for delta */

 56:   PetscInt lmnow;
 57:   PetscInt iter;
 58:   PetscInt nupdates;
 59:   PetscInt nrejects;

 61:   Vec *S;
 62:   Vec *Y;
 63:   Vec Gprev;
 64:   Vec Xprev;

 66:   Vec D;
 67:   Vec U;
 68:   Vec V;
 69:   Vec W;
 70:   Vec P;
 71:   Vec Q;

 73:   PetscReal delta;
 74:   PetscReal sigma;
 75:   PetscReal theta;
 76:   PetscReal *rho;
 77:   PetscReal *beta;

 79:   PetscBool useDefaultH0;
 80:   Mat H0_mat;
 81:   KSP H0_ksp;
 82:   Vec H0_norm;

 84:   PetscBool useScale;
 85:   Vec scale;


 88: } MatLMVMCtx;


 91: extern PetscErrorCode MatCreateLMVM(MPI_Comm,PetscInt,PetscInt,Mat*);


 94: /* PETSc Mat overrides */
 95: extern PetscErrorCode MatView_LMVM(Mat,PetscViewer);
 96: extern PetscErrorCode MatDestroy_LMVM(Mat);

 98: /*
 99: int MatMultTranspose_LMVM(Mat,Vec,Vec);
100: int MatDiagonalShift_LMVM(Vec,Mat);
101: int MatDestroy_LMVM(Mat);
102: int MatShift_LMVM(Mat,PetscReal);
103: int MatDuplicate_LMVM(Mat,MatDuplicateOption,Mat*);
104: int MatEqual_LMVM(Mat,Mat,PetscBool*);
105: int MatScale_LMVM(Mat,PetscReal);
106: int MatGetSubMatrix_LMVM(Mat,IS,IS,int,MatReuse,Mat *);
107: int MatGetSubMatrices_LMVM(Mat,int,IS*,IS*,MatReuse,Mat**);
108: int MatTranspose_LMVM(Mat,Mat*);
109: int MatGetDiagonal_LMVM(Mat,Vec);
110: int MatGetColumnVector_LMVM(Mat,Vec, int);
111: int MatNorm_LMVM(Mat,NormType,PetscReal *);
112: */

114: /* Functions used by TAO */
115: PetscErrorCode MatLMVMReset(Mat);
116: PetscErrorCode MatLMVMUpdate(Mat,Vec, Vec);
117: PetscErrorCode MatLMVMSetDelta(Mat,PetscReal);
118: PetscErrorCode MatLMVMSetScale(Mat,Vec);
119: PetscErrorCode MatLMVMGetRejects(Mat,PetscInt*);
120: PetscErrorCode MatLMVMSetH0(Mat,Mat);
121: PetscErrorCode MatLMVMGetH0(Mat,Mat*);
122: PetscErrorCode MatLMVMGetH0KSP(Mat,KSP*);
123: PetscErrorCode MatLMVMSetPrev(Mat,Vec,Vec);
124: PetscErrorCode MatLMVMGetX0(Mat,Vec);
125: PetscErrorCode MatLMVMRefine(Mat, Mat, Vec, Vec);
126: PetscErrorCode MatLMVMAllocateVectors(Mat m, Vec v);
127: PetscErrorCode MatLMVMSolve(Mat, Vec, Vec);


130: #endif